This list is a summary of the VMS features that are included in f77. Details are elsewhere in this manual.
Namelist I/O
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 ($)
Octal (O)
Hexadecimal (X)
Hexadecimal (Z)
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
End-of-line comments
OPTIONS statement
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
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
Initialization of variables in declaration statements is allowed. Example:
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.
REAL*16
(SPARC only) The compiler treats variables of type REAL*16 as quadruple precision.
Noncharacter variables
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.
Consecutive operators
f77 allows two consecutive arithmetic operators when the second operator is a unary + or -. Here are two consecutive operators:
X = A ** -B
The above statement is treated as follows:
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:
Alternate RETURN
Dimension declarators and array subscripts
Substring selectors
Computed GO TO
Logical unit number, record number, and record length
Typeless numeric constants
Binary, hexadecimal and octal constants are accepted in VMS form.
Example: Constants-Binary (B), Octal (O), Hexadecimal (X or Z):
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.
Example: Size on function name, rather than on the word FUNCTION:
INTEGER FUNCTION FCN*2 ( A, B, C )
TYPE and ACCEPT statements are allowed.
Alternate return
The nonstandard & syntax for alternate-return actual arguments is treated as the standard FORTRAN * syntax. Example
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.
Example: A nonstandard form for record specifier:
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
DISPOSE=p
The DISPOSE=p clause in the CLOSE statement is treated as STATUS=p.
Special Intrinsics
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.
Example: The 6 in the following statement is a constant:
1 FORMAT( 3F6.1 )
6 can be replaced by the variable N, as in:
1 FORMAT( 3F<N>.1 )