This appendix shows a table that contains selected samples of the f77 statement types. The purpose is to provide a quick reference for syntax details of the more common variations of each statement type.
Nonstandard features are tagged with a small black diamond (@).
Table B-1 FORTRAN Statement Samples
Name |
Examples |
Comments |
---|---|---|
ACCEPT @ |
ACCEPT *, A, I |
Compare to READ. |
ASSIGN |
ASSIGN 9 TO I |
|
ASSIGNMENT |
C = 'abc' C = "abc" C = S // 'abc' C = S(I:M) |
Character @ |
L = L1 .OR. L2 L = I .LE. 80 |
Logical |
|
N = N+1 X = '7FF00000'x |
Arithmetic Hex @ |
|
CURR = NEXT NEXT.ID = 82 |
Compare to RECORD. |
|
AUTOMATIC @ |
AUTOMATIC A, B, C AUTOMATIC REAL P, D, Q IMPLICIT AUTOMATIC REAL (X-Z) |
|
BACKSPACE |
BACKSPACE U BACKSPACE(UNIT=U,IOSTAT=I, ERR=9) |
|
BLOCK DATA |
BLOCK DATA BLOCK DATA COEFFS |
|
BYTE @ |
BYTE A, B, C BYTE A, B, C(10) BYTE A /'x'/, B /255/, C(10) |
Initialize A and B |
CALL |
CALL P( A, B ) CALL P( A, B, *9 ) CALL P( A, B, &9 ) CALL P |
Alternate return Alternate return @ |
CHARACTER |
CHARACTER C*80, D*1(4) CHARACTER*18 A, B, C CHARACTER A, B*3 /'xyz'/, C /'z'/ |
Initialize B and C@ |
CLOSE |
CLOSE ( UNIT=I ) CLOSE( UNIT=U, ERR=90, IOSTAT=I ) |
|
COMMON |
COMMON / DELTAS / H, P, T COMMON X, Y, Z COMMON P, D, Q(10,100) |
|
COMPLEX |
COMPLEX U, V, U(3,6) COMPLEX U*16 COMPLEX U*32 SPARC only COMPLEX U/(1.0,1.0)/,V/(1.0,10.0)/ |
Double complex @ Quad complex @ Initialize U and V @ |
CONTINUE |
100 CONTINUE |
|
DATA |
DATA A, C / 4.01, 'z' / DATA (V(I),I=1,3) /.7, .8, .9/ DATA ARRAY(4,4) / 1.0 / DATA B,O,X,Y /B'0011111', O'37', X'1f', Z'1f'/ |
@ |
DECODE @ |
DECODE ( 4, 1, S ) V |
|
DIMENSION |
DIMENSION ARRAY(4, 4) DIMENSION V(1000), W(3) |
|
DO |
DO 100 I = INIT, LAST, INCR
100 CONTINUE |
|
DO I = INIT, LAST
END DO |
Unlabeled DO @ |
|
DO WHILE ( DIFF .LE. DELTA )
END DO |
DO WHILE @ |
|
DO 100 WHILE ( DIFF .LE. DELTA )
100 CONTINUE |
@ |
|
DOUBLE COMPLEX@ |
DOUBLE COMPLEX U, V DOUBLE COMPLEX U, V COMPLEX U/(1.0,1.0D0)/, V/(1.0,1.0D0)/ |
COMPLEX*16 @ COMPLEX @ Initialize U and V @ |
DOUBLE PRECISION |
DOUBLE PRECISION A, D, Y(2) DOUBLE PRECISION A,D/1.2D3/,Y(2) |
REAL*8 @ Initialize D @ |
ELSE |
ELSE |
Compare to IF (Block) |
ELSE IF |
ELSE IF |
|
ENCODE @ |
ENCODE( 4, 1, T ) A, B, C |
|
END |
END |
|
END DO @ |
END DO |
Compare to DO |
ENDFILE |
ENDFILE ( UNIT=I ) ENDFILE I ENDFILE( UNIT=U, IOSTAT=I, ERR=9 ) |
|
END IF |
END IF |
|
END MAP @ |
END MAP |
Compare to MAP |
END STRUCTURE |
END STRUCTURE |
Compare to STRUCTURE |
END UNION @ |
END UNION |
Compare to UNION |
ENTRY |
ENTRY SCHLEP( X, Y ) ENTRY SCHLEP( A1, A2, *4 ) ENTRY SCHLEP |
|
EQUIVALENCE |
EQUIVALENCE ( V(1), A(1,1) ) EQUIVALENCE ( V, A ) EQUIVALENCE (X,V(10)), (P,D,Q) |
|
EXTERNAL |
EXTERNAL RNGKTA, FIT |
|
FORMAT |
10 FORMAT(//2X,2I3,3F6.1,4E12.2, 2A6,3L2) 10 FORMAT(// 2D6.1, 3G12.2 ) 10 FORMAT(2I3.3,3G6.1E3,4E12.2E3) | |
10 FORMAT('a quoted string', " another", I2) 10 FORMAT(18Hhollerith string, I2) 10 FORMAT( 1X, T10, A1, T20, A1 ) |
Strings @ Hollerith Tabs |
|
10 FORMAT(5X,TR10,A1,TR10,A1,TL5, A1) 10 FORMAT(" Init=", I2, :, 3X, "Last=", I2) 10 FORMAT(1X,"Enter path name ", $) |
Tab right, left : $ |
|
10 FORMAT( F4.2, Q, 80 A1 10 FORMAT('Octal ',O6,', Hex ',Z6 ) 10 FORMAT( 3F<N>.2 ) |
Q @ Octal, hex @ Variable expression @ |
|
FUNCTION |
FUNCTION Z( A, B ) FUNCTION W( P,D, *9 ) CHARACTER FUNCTION R*4(P,D,*9 ) INTEGER*2 FUNCTION M( I, J ) |
Short integer @ |
GO TO |
GO TO 99 |
Unconditional |
GO TO I, ( 10, 50, 99 ) GO TO I |
Assigned |
|
GO TO ( 10, 50, 99), I |
Computed |
|
IF |
IF ( I -K ) 10, 50, 90 |
Arithmetic IF |
IF ( L ) RETURN |
LOGICAL IF |
|
IF ( L ) THEN N=N+1 CALL CALC ELSE K=K+1 CALL DISP ENDIF |
BLOCK IF |
|
IF ( C .EQ. 'a' ) THEN NA=NA+1 CALL APPEND ELSE IF ( C .EQ. 'b' ) THEN NB=NB+1 CALL BEFORE ELSE IF ( C .EQ. 'c' ) THEN NC=NC+1 CALL CENTER END IF |
BLOCK IF With ELSE IF |
|
IMPLICIT |
IMPLICIT COMPLEX (U-W,Z) IMPLICIT UNDEFINED (A-Z) |
|
INCLUDE @ |
INCLUDE 'project02/header' |
|
INQUIRE |
INQUIRE( UNIT=3, OPENED=OK ) INQUIRE( FILE='mydata', EXIST=OK ) INQUIRE( UNIT=3, OPENED=OK, IOSTAT=ERRNO ) |
|
INTEGER |
INTEGER C, D(4) INTEGER C*2 INTEGER*4 A, B, C |
Short integer @ |
INTEGER A/ 100 /, B, C / 9 / |
Initialize A and C @ |
|
INTRINSIC |
INTRINSIC SQRT, EXP |
|
LOGICAL |
LOGICAL C LOGICAL B*1, C*1 LOGICAL*1 B, C LOGICAL*4 A, B, C |
@ @ @ |
LOGICAL B / .FALSE. /, C |
Initialize B @ |
|
Map @ |
MAP CHARACTER *18 MAJOR END MAP MAP INTEGER*2 CREDITS CHARACTER*8 GRAD_DATE END MAP |
Compare to STRUCTURE and UNION |
NAMELIST @ |
NAMELIST /CASE/ S, N, D |
|
OPEN |
OPEN( UNIT=3, FILE="data.test" ) OPEN( UNIT=3, IOSTAT=ERRNO ) |
|
OPTIONS @ |
OPTIONS /CHECK /EXTEND_SOURCE |
|
PARAMETER |
PARAMETER (A="xyz"), (PI=3.14) PARAMETER (A="z", PI=3.14) PARAMETER X=11, Y=X/3 |
@ |
PAUSE |
PAUSE |
|
POINTER @ |
POINTER ( P, V ), ( I, X ) |
|
PRAGMA @ |
EXTERNAL RNG ! $PRAGMA C(RNG) |
C() directive |
PROGRAM |
PROGRAM FIDDLE |
|
|
PRINT *, A, I |
List-directed |
PRINT 10, A, I |
Formatted |
|
PRINT 10, M |
Array M |
|
PRINT 10, (M(I),I=J,K) |
Implied-DO |
|
PRINT 10, C(I:K) |
Substring |
|
PRINT '(A6,I3)', A, I PRINT FMT='(A6,I3)', A, I |
Character constant format |
|
PRINT S, I PRINT FMT=S, I |
Switch variable has format number |
|
PRINT G |
Namelist @ |
|
READ |
READ *, A, I |
List-directed |
READ 1, A, I |
Formatted |
|
READ 10, M |
Array M |
|
READ 10, (M(I),I=J,K) |
Implied-DO |
|
READ 10, C(I:K) |
Substring |
|
READ '(A6,I3)', A, I |
Character constant format |
|
|
READ( 1, 2 ) X, Y READ( UNIT=1, FMT=2) X,Y READ( 1, 2, ERR=8,END=9) X,Y READ(UNIT=1,FMT=2,ERR=8,END=9) X,Y |
Formatted read from a file |
READ( *, 2 ) X, Y |
Formatted read from standard input |
|
READ( *, 10 ) M |
Array M |
|
READ( *, 10 ) (M(I),I=J,K) |
Implied-DO |
|
READ( *, 10) C(I:K) |
Substring |
|
READ( 1, * ) X, Y READ( *, * ) X, Y |
List-directed from file--from standard input |
|
READ( 1, '(A6,I3)') X, Y READ( 1, FMT='(A6,I3)') X, Y |
Character constant format |
|
READ( 1, C ) X, Y READ( 1, FMT=C ) X, Y |
||
READ( 1, S ) X, Y READ( 1, FMT=S ) X, Y |
Switch variable has format number |
|
READ( *, G ) READ( 1, G ) |
Namelist read @ Namelist read from a file @ |
|
READ( 1, END=8, ERR=9 ) X, Y |
Unformatted direct access |
|
READ( 1, REC=3 ) V READ( 1 ' 3 ) V |
Unformatted direct access |
|
READ( 1, 2, REC=3 ) V |
Formatted direct access |
|
READ( CA, 1, END=8, ERR=9 ) X, Y |
Internal formatted sequential |
|
READ( CA, *, END=8, ERR=9 ) X, Y |
Internal list-directed sequential access @ |
|
READ(CA, REC=4, END=8, ERR=9) X, Y |
Internal direct access @ |
|
REAL |
REAL R, M(4) REAL R*4 REAL*8 A, B, C REAL*16 A, B, C SPARC only |
@ Double precision @ Quad precision @ |
REAL A / 3.14 /, B, C / 100.0 / |
Initialize A and C@ |
|
RECORD @ |
RECORD /PROD/ CURR,PRIOR,NEXT |
|
RETURN |
RETURN RETURN 2 |
Standard return Alternate return |
REWIND |
REWIND 1 REWIND I REWIND ( UNIT=U, IOSTAT=I, ERR=9 ) |
|
SAVE |
SAVE A, /B/, C SAVE |
|
STATIC @ |
STATIC A, B, C STATIC REAL P, D, Q IMPLICIT STATIC REAL (X-Z) |
|
STOP |
STOP STOP "all done" |
|
STRUCTURE |
STRUCTURE /PROD/ INTEGER*4 ID / 99 / CHARACTER*18 NAME CHARACTER*8 MODEL / 'XL' / REAL*4 COST REAL*4 PRICE END STRUCTURE |
|
SUBROUTINE |
SUBROUTINE SHR( A, B, *9 ) SUBROUTINE SHR( A, B, &9 ) SUBROUTINE SHR( A, B ) SUBROUTINE SHR |
Alternate return @ |
TYPE @ |
TYPE *, A, I |
Compare to PRINT |
UNION @ |
UNION MAP CHARACTER*18 MAJOR END MAP MAP INTEGER*2 CREDITS CHARACTER*8 GRAD_DATE END MAP END UNION |
Compare to STRUCTURE |
VIRTUAL @ |
VIRTUAL M(10,10), Y(100) |
|
VOLATILE @ |
VOLATILE V, Z, MAT, /INI/ |
|
WRITE
|
WRITE( 1, 2 ) X, Y } WRITE( UNIT=1, FMT=2 ) X, Y WRITE( 1, 2, ERR=8, END=9 ) X, Y WRITE(UNIT=1,FMT=2,ERR=8,END=9) X,Y |
Formatted write to a file |
WRITE( *, 2 ) X, Y WRITE( *, 10 ) M |
Formatted write to stdout Array M |
|
WRITE( *, 10 ) (M(I),I=J,K) |
Implied-DO |
|
WRITE( *, 10) C(I:K) |
Substring |
|
WRITE( 1, * ) X, Y WRITE( *, * ) X, Y |
List-directed write to a file List-directed write to standard output |
|
WRITE( 1, '(A6,I3)') X, Y WRITE( 1, FMT='(A6,I3)') X, Y |
Character constant format |
|
WRITE( 1, C ) X, Y WRITE( 1, FMT=C ) X, Y |
Character variable format |
|
WRITE( 1, S ) X, Y WRITE( 1, FMT=S ) X, Y |
Switch variable has format number |
|
WRITE( *, CASE ) WRITE( 1, CASE ) |
Namelist write @ Namelist write to a file @ |
|
WRITE( 1, END=8, ERR=9 ) X, Y |
Unformatted sequential access |
|
WRITE( 1, REC=3 ) V WRITE( 1 ' 3 ) V |
Unformatted direct access |
|
WRITE( 1, 2, REC=3 ) V |
Formatted direct access |
|
WRITE( CA, 1, END=8, ERR=9 ) X, Y |
Internal formatted sequential |
|
WRITE( CA, *, END=8, ERR=9 ) X, Y |
Internal list-directed sequential access @ |
|
WRITE(CA, REC=4, END=8, ERR=9) X, Y |
Internal direct access @ |