This list is a summary of the VMS features that are included in f77. Details are elsewhere in this manual.
Unlabeled DO END DO
Indefinite DO WHILE END DO
BYTE data type
Logical operations on integers, and arithmetic operations on logicals
Additional field and edit descriptors for FORMAT statements:
Remaining characters (Q)
Carriage Control ($)
Default field indicators for w, d, and e fields in FORMAT statements
Reading into Hollerith edit descriptors
APPEND option for OPEN
Long names (32 characters)
_ and $ in names
Long source lines (132-character), if the -e option is on
Records, structures, unions, and maps
Getting addresses by the %LOC function
Passing arguments by the %VAL function
VMS Tab-format source lines are valid.
Initialize in common
You can initialize variables in common blocks outside of BLOCK DATA subprograms. You can initialize portions of common blocks, but you cannot initialize portions of one common block in more than one subprogram.
Radix-50 constants are implemented as f77 bit-string constants, that is, no type is assumed.
IMPLICIT NONE is treated as IMPLICIT UNDEFINED (A-Z)
VIRTUAL is treated as DIMENSION.
Initialize in declarations
CHARACTER*10 NAME /'Nell'/
Noncharacter format specifiers
If a runtime format specifier is not of type CHARACTER, the compiler accepts that too, even though the FORTRAN Standard requires the CHARACTER type.
Omitted arguments in subprogram calls
The compiler accepts omitted actual argument in a subroutine call, that is, two consecutive commas compile to a null pointer. Reference to that dummy argument gives a segmentation fault.
(SPARC only) The compiler treats variables of type REAL*16 as quadruple precision.
The FORTRAN Standard requires the FILE= specifier for OPEN and INQUIRE to be an expression of type CHARACTER. f77 accepts a numeric variable or array element reference.
X = A ** -B
X = A ** (-B)
Illegal real expressions
When the compiler finds a REAL expression where it expects an integer expression, it truncates and makes a type conversion to INTEGER.
Examples: Contexts for illegal real expressions that f77 converts to integer:
Dimension declarators and array subscripts
Computed GO TO
Logical unit number, record number, and record length
Typeless numeric constants
Binary, hexadecimal and octal constants are accepted in VMS form.
DATA N1 /B'0011111'/, N2/O'37'/, N3/X'1f'/, N4/Z'1f'/
Function length on function name, rather than on the word FUNCTION
The compiler accepts nonstandard length specifiers in function declarations.
INTEGER FUNCTION FCN*2 ( A, B, C )
TYPE and ACCEPT statements are allowed.
CALL SUBX ( I, *100, Z ) ! Standard CALL SUBX ( I, &100, Z ) ! Nonstandard alternate syntax
The ENCODE and DECODE statements are accepted.
Direct I/O with 'N record specifier
The nonstandard record specifier 'N for direct-access I/O statements is accepted.
READ ( K ' N ) LIST
READ ( UNIT=K, REC=N ) LIST
The logical unit number is K and the number of the record is N.
NAME, RECORDSIZE, and TYPE options--OPEN has the following alternative options:
NAME is treated as FILE
RECORDSIZE is treated as RECL
TYPE is treated as STATUS
The DISPOSE=p clause in the CLOSE statement is treated as STATUS=p.
The compiler processes certain special intrinsic functions:
%VAL is accepted
%LOC is treated as LOC
%REF(expr) is treated as expr (with a warning if expris CHARACTER)
%DESCR is reported as an untranslatable feature
Variable Expressions in FORMAT Statements
In general, inside a FORMAT statement, any integer constant can be replaced by an arbitrary expression; the single exception is the n in an nH edit descriptor. The expression itself must be enclosed in angle brackets.
1 FORMAT( 3F6.1 )
1 FORMAT( 3F<N>.1 )