Coding projects about physics, emulation, reverse engineering and programming
Incomplete Fortran to C/C++ converter
This script transforms old Fortran 77 code to C/C++. Put your Fortran 77 code in the text field below and press the convert button.
The program does not convert to full compatible C code. You won't be able to compile the generated code.
Why do you need such a converter?
Two more or less complete converters,
f2c and fable have been published so far.
Both tools try to transform your old code to match full compatibility with the fortran rules but neglecting readability.
This is the point were this script could help you. The script contain some more intelligent substitution algorithms that will help
you to transform your source code manually by doing all the nasty stuff.
Remove of first column
Move Format lines to read and write functions
Convert if and do
Remove unnecessary gotos
Add Semicolons at end of line
Convert array brackets
Convert 'DO' loops to the corresponding 'for' loop
Transform common blocks to global structs
Parse Parameters and convert
Substitute obvious tokens
The program does not convert the array indexing scheme of Fortran!.
Put you Fortran 77 code here:
c This is a comment
E = 1E-9
READ *, A,B,C
IF (A.GE. -E .AND. A.LE.E) THEN
PRINT *, 'FIRST COEFFICIENT MUST BE NON-ZERO.'
S = B**2 - 4*A*C
IF (S.GT.E) THEN
D = S**0.5
X1 = (-B+D)/(2*A)
X2 = (-B-D)/(2*A)
PRINT *, 'TWO DISTINCT ROOTS:' X1 'AND' X2
ELSE IF (S.GT. -E) THEN
X = -B/(2*A)
PRINT *, 'TWO COINCIDENT ROOTS',X
PRINT *, 'NO REAL ROOTS.'
INTEGER I, NN
123 DO 234 I=1,NN
c do something
go to 123
GOTO(123, 234, 123, 234, 123), NN
C AREA OF A TRIANGLE - HERON'S FORMULA
C INPUT - CARD READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
IF(A.EQ.0 .OR. B.EQ.0 .OR. C.EQ.0) STOP 1
S = (A + B + C) / 2.0
AREA = SQRT( S * (S - A) * (S - B) * (S - C) )
601 FORMAT(4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2,12HSQUARE UNITS)
* euclid.f (FORTRAN 77)
* Find greatest common divisor using the Euclidean algorithm
PRINT *, 'A?'
READ *, NA
IF (NA.LE.0) THEN
PRINT *, 'A must be a positive integer.'
PRINT *, 'B?'
READ *, NB
IF (NB.LE.0) THEN
PRINT *, 'B must be a positive integer.'
PRINT *, 'The GCD of', NA, ' and', NB, ' is', NGCD(NA, NB), '.'
FUNCTION NGCD(NA, NB)
IA = NA
IB = NB
1 IF (IB.NE.0) THEN
ITEMP = IA
IA = IB
IB = MOD(ITEMP, IB)
NGCD = IA