FORTRAN 77 Language Reference

Appendix B Sample Statements

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

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 @