Invokes the Digital Fortran 77 (FORTRAN-77) compiler. This command
can also invoke other software components (such as preprocessors,
or the ld linker), depending on which files or options are
specified on the command line. The f77 command produces object
code files in ULTRIX RISC or Digital UNIX Alpha extended coff
format; it is described in detail in your DEC Fortran user manual.
(See also f77(1).)
Format:
f77 [options] filename [options]
If you specify more than one option or filename, separate each with
a space. Some options include keywords. For more information, see
Parameters.
f77 sends its output to "stderr". Upon program completion, the f77
driver returns one of the following status values:
0 - SUCCESS
1 - FAILURE
2 - SUBPROCESS_FAILURE (preprocessor, decfort, or ld)
3 - SIGNAL
If the environment variable DECFORT is set, the value is used as
the name of the compiler to invoke. If the environment variable
TMPDIR is set, the value is used as the directory for temporary
files.
If the environment variable DECFORT_INIT is defined, its value has
to have the form
[[pre] [:: [post]]
where the items in "[...]" are optional and can be empty, and where
"pre" and "post" are strings to be added to the command line.
"pre" is added to the front of the command line, before any
characters the user typed; "post" is added to the end of the
command line.
Your Digital Fortran kit contains a Help file in text format. To
search for information in this file, enter the following command to
display the file:
% more /usr/lib/cmplrs/fort/decfortran.hlp
To search for a specific item, enter a slash (/) followed by the
item. For example, once the Help file is displayed, you can search
for run-time error message number 138 by entering the following:
/138
Options
Indicates either special actions to be performed by the compiler or
linker, or special properties of input or output files.
If you specify more than one option, separate each option with a
space.
Certain options have the format of -option "keyword", where the
"keyword" can be abbreviated to its shortest unique prefix. For
example, -assume noaccuracy can be abbreviated as -assume noac.
For more information about command line options, see f77(1). If
you are using LSE, you can see f77(1) by entering the following
command at the LSE prompt:
LSE> cli man f77
Filename
Specifies one (or more) source programs to be compiled. If you
specify more than one filename, separate each filename with a
space.
The f77 command interprets filename suffixes as follows:
o Arguments with the suffix .f, .for, or .FOR are interpreted as
FORTRAN-77 source programs. These programs are compiled, and
the name of the resulting object program is the basename of the
source file with a .o substituted for the .f, .for, or .FOR.
(For example, in source file myfile.f, myfile is the basename;
so, the object program is named myfile.o.) If the source
program is compiled and loaded, the .o file is deleted.
o Arguments with the suffix .F are interpreted as FORTRAN source
programs, which must be processed by the C preprocessor
(cpp(1)) before being compiled.
o Arguments with the suffixes .r or .e are interpreted as ratfor
or efl source programs, respectively. These programs are first
transformed by the appropriate preprocessor and then compiled.
o Arguments with the suffix .i are interpreted as FORTRAN-77
source programs that have been preprocessed by cpp(1). They
are compiled without further preprocessing.
When a source program requires preprocessing by cpp(1), efl(1),
ratfor(1), or m4(1), the name of the output file generated by the
preprocessor consists of the basename of the source input file with
the appropriate preprocessor suffix. For example:
m4 myfile.r => myfile.p
efl myfile.e => myfile.f
ratfor myfile.r => myfile.f
cpp myfile.F => myfile.i
Note that if you have myfile.F and myfile.f as distinct files,
cpp(1) overwrites myfile.f to produce an output file with the same
name.
Depending on which platform you are using, the f77 command defines
the following cpp(1) macros to cpp(1):
o All platforms: LANGUAGE_FORTRAN, __LANGUAGE_FORTRAN__, unix,
__unix__
o RISC only: host_mips, __host_mips__
o Alpha only: __alpha
o Digital UNIX only: __osf__
o ULTRIX RISC only: MIPSEL, mips, __mips__
For example, if you are using an Digital UNIX Alpha system, the
following cpp(1) macros are defined to cpp(1): LANGUAGE_FORTRAN,
__LANGUAGE_FORTRAN__, unix, __unix__, __alpha, and __osf__.
Indicate either special actions to be performed by the compiler or
linker, or special properties of input or output files.
You can override some options specified on the command line by
using the OPTIONS statement, the AUTOMATIC and STATIC statements,
and directives (CDEC$) in your FORTRAN source program. The options
specified by the OPTIONS statement affect only the program unit
where the statement occurs.
For descriptions of all command line options, see f77(1) by
entering the following command at the LSE prompt:
LSE> cli man f77
1. % f77 -V aaa.f bbb.f ccc.f
This command causes the files aaa.f, bbb.f, and ccc.f to be
compiled into one temporary object file, which is then passed
to the ld linker. The ld linker produces the executable file
a.out. The -V option causes the compiler to create the listing
file aaa.1.
2. % f77 -o foo ax.f bx.f cx.f
This command causes the files ax.f, bx.f, and cx.f to be
compiled as one program, with the resulting executable file
foo.
3. % f77 -c -O4 ax.f bx.f cx.f
This command causes the files ax.o, bx.o and cx.o to be
created. Inter-procedural optimization is hindered because
these input files are separately compiled.
4. % f77 -c -o foo.o -O4 ax.f bx.f cx.f
This command causes the files ax.f, bx.f and cx.f to be
compiled as one program, with the resulting object file foo.o.
This produces better optimization.
For Digital Fortran 77 release notes, refer to:
/usr/lib/cmplrs/fort/relnotes
Built-in functions perform utility operations that are useful in communicating with subprograms written in languages other than Fortran. See also Intrinsic_Functions.
%LOC (arg) Returns the internal address of a storage item. The argument can be a variable, an array or record field reference, a procedure, or a constant; it can be of any data type. The result is an INTEGER*8 data type. The %LOC built-in function serves the same purpose as the LOC intrinsic.
%REF (arg) Forces an actual argument in a CALL statement or function reference to be passed by reference: the address of the argument is passed to the subprogram. By default, Fortran passes all numeric values by reference.
%VAL (arg) Forces an actual argument in a CALL statement or function reference to be passed by value: the actual value of the argument is passed to the subprogram. The argument must be 32 bits in size or less. If the argument is less than 32 bits in size, it is sign-extended to that size.
Digital Fortran 77 supports the following characters:
o The Fortran character set, consisting of those ASCII characters
which can appear in Fortran language syntax and which is a
superset of the FORTRAN-77 standard character set. This set
includes space and tab characters.
o Other printable characters, which may appear in comments and
character and Hollerith constants.
o Nonprintable characters.
The following table represents the ASCII character set (characters
with decimal values 0 through 127). Except for SP and HT, the
characters with names are nonprintable.
To determine the hexadecimal value of an ASCII character, combine
the values in the column (0-7) and the row (0-F) that relate to the
character. For example, the value of the character representing
the equal sign is 3D(hex).
+------------------------------------------+
| 0 1 2 3 4 5 6 7 |
+---+--------------------------------------+
| 0 | NUL DLE SP 0 @ P ` p |
| 1 | SOH DC1 ! 1 A Q a q |
| 2 | STX DC2 " 2 B R b r |
| 3 | ETX DC3 # 3 C S c s |
| 4 | EOT DC4 $ 4 D T d t |
| 5 | ENQ NAK % 5 E U e u |
| 6 | ACK SYN & 6 F V f v |
| 7 | BEL ETB ' 7 G W g w |
| 8 | BS CAN ( 8 H X h x |
| 9 | HT EM ) 9 I Y i y |
| A | LF SUB * : J Z j z |
| B | VT ESC + ; K [ k { |
| C | FF FS , < L \ l | |
| D | CR GS - = M ] m } |
| E | SO RS . > N ^ n ~ |
| F | SI US / ? O _ o DEL |
+---+--------------------------------------+
The characters with names are defined as follows:
NUL Null DC1 Device Control 1(XON)
SOH Start of DC2 Device Control 2
Heading
STX Start of Text DC3 Device Control 3(XOFF)
ETX End of Text DC4 Device Control 4
EOT End of NAK Negative Acknowledge
Transmission
ENQ Enquiry SYN Synchronous Idle
ACK Acknowledge ETB End of Transmission
Block
BEL Bell CAN Cancel
BS Backspace EM End of Medium
HT Horizontal Tab SUB Substitute
LF Line Feed ESC Escape
VT Vertical Tab FS File Separator
FF Form Feed GS Group Separator
CR Carriage Return RS Record Separator
SO Shift Out US Unit Separator
SI Shift In SP Space
DLE Data Link DEL Delete
Escape
The ASCII character set comprises the first half of the DEC
Multinational Character Set. The following table represents the
second half of the DEC Multinational Character Set (characters with
decimal values 128 through 255). These characters cannot be output
on some older terminals and printers. Note that the characters
with names are nonprintable.
To determine the hexadecimal value of an ASCII character, combine
the values in the column (8-F) and the row (0-F) that relate to the
character. For example, the value of the character representing
the pound sterling sign is A3(hex).
+------------------------------------------+
| 8 9 A B C D E F |
+---+--------------------------------------+
| 0 | DCS ° À à |
| 1 | PU1 ¡ ± Á Ñ á ñ |
| 2 | PU2 ¢ ² Â Ò â ò |
| 3 | STS £ ³ Ã Ó ã ó |
| 4 | IND CCH Ä Ô ä ô |
| 5 | NEL MW ¥ µ Å Õ å õ |
| 6 | SSA SPA ¶ Æ Ö æ ö |
| 7 | ESA EPA § · Ç × ç ÷ |
| 8 | HTS ¨ È Ø è ø |
| 9 | HTJ © ¹ É Ù é ù |
| A | VTS ª º Ê Ú ê ú |
| B | PLD CSI « » Ë Û ë û |
| C | PLU ST ¼ Ì Ü ì ü |
| D | RI OSC ½ Í Ý í ý |
| E | SS2 PM Î î |
| F | SS3 APC ¿ Ï ß ï |
+---+--------------------------------------+
The characters with names are defined as follows:
IND Index PU1 Private Use 1
NEL Next Line PU2 Private Use 2
SSA Start of STS Set Transmit State
Selected Area
ESA End of Selected CCH Cancel Character
Area
HTS Horizontal Tab MW Message Waiting
Set
HTJ Horizontal SPA Start of Protected
Tab Set with Area
Justification
VTS Vertical Tab EPA End of Protected
Set Area
PLD Partial Line CSI Control Sequence
Down Introducer
PLU Partial Line Up ST String Terminator
RI Reverse Index OSC Operating System
Command
SS2 Single Shift 2 PM Privacy Message
SS3 Single Shift 3 APC Application
DCS Device Control
String
The character set specified by the FORTRAN-77 Standard consists of
the uppercase letters A through Z, the digits 0 through 9, and the
following special characters:
SP (space) , (comma)
$ (dollar sign) - (minus sign)
' (apostrophe) . (period)
( (left parenthesis) / (slash)
) (right parenthesis) : (colon)
* (asterisk) = (equal sign)
+ (plus sign)
The Fortran character set includes the entire FORTRAN-77 Standard
set plus the lowercase letters a through z (uppercase and lowercase
letters are equivalent) and the following special characters:
! (exclamation mark) (tab)
" (quotation mark) < (left angle bracket)
% (percent sign) > (right angle bracket)
& (ampersand) _ (underscore)
All printable characters (those in the range 20(hex) through
7E(hex), or A1(hex) through FE(hex)) can appear in comments,
character constants, and Hollerith constants.
Printable characters include the tab character (09 hex), those ASCII characters with codes in the range 20(hex) through 7E(hex), and those characters in the DEC Multinational Extension to the ASCII Character Set with codes in the range A1(hex) through FE(hex). Note that printable characters that are not in the Fortran character set (see Character_Set subtopic FORTRAN) can only appear in comments and character and Hollerith constants.
The form-feed character (0C hex) is treated as a blank without
causing a diagnostic message to be issued. In addition, a source
record of length 1 containing a form-feed character causes the
compilation source listing to begin a new page.
A source record of length 1 containing a Ctrl-Z character (1A hex)
is treated as a blank line. Such a record is created by the
ENDFILE statement, if the command line option -vms is specified.
All other control characters are valid, except 00(hex) and 01(hex).
If you must use a nonprintable character in a character constant,
use the CHAR intrinsic function, in conjunction with the
concatenation operator if necessary. For example:
CHARACTER*(*) ESC_BRACKET
PARAMETER (ESC_BRACKET = CHAR(27)//'[')
Digital Fortran 77 provides the following language features to facilitate compatibility with other versions of Fortran: o The DEFINE FILE, ENCODE, DECODE, and FIND statements o A NOF77 interpretation of the EXTERNAL statement o Octal forms of integer constants o An alternative syntax for the PARAMETER statement o The VIRTUAL statement o The AND, OR, XOR, IMAG, LSHIFT, and RSHIFT intrinsic functions o An alternative syntax for bit constants o C-style escape sequences o An alternative syntax for a record specifier These language features are particularly useful in transporting older Fortran programs to systems on Alpha processors. However, you should avoid using them in new programs on these systems, and in new programs for which portability to other FORTRAN-77 implementations is important.
The DEFINE FILE statement establishes the size and structure of
files with relative organization and associates them with a logical
unit number. The DEFINE FILE statement is comparable to the OPEN
statement (in situations where you can use the OPEN statement, it
is the preferable mechanism for creating and opening files).
Statement format:
DEFINE FILE u(m, n, U, asv) [,u(m, n, U, asv)]...
u Is an integer constant or variable that specifies the
logical unit number.
m Is an integer constant or variable that specifies the
number of records in the file.
n Is an integer constant or variable that specifies the
length of each record in 16-bit words (2 bytes).
U Specifies that the file is unformatted (binary); this
is the only acceptable entry in this position.
asv Is an integer variable, called the associated variable
of the file. At the end of each direct access I/O
operation, the record number of the next higher numbered
record in the file is assigned to "asv"; "asv" must not
be a dummy argument.
The DEFINE FILE statement specifies that a file containing "m"
fixed-length records, each composed of n 16-bit words, exists (or
is to exist) on the specified logical unit. The records in the
file are numbered sequentially from 1 through "m".
A DEFINE FILE statement must be executed before the first direct
access I/O statement referring to the specified file, even though
the DEFINE FILE statement does not itself open the file. The file
is actually opened when the first direct access I/O statement for
the unit is executed.
If this I/O statement is a WRITE statement, a direct access
sequential file is opened, or created if necessary. If it is a
READ or FIND statement, an existing file is opened, unless the
specified file does not exist. If a file does not exist, an error
occurs.
The ENCODE and DECODE statements transfer data between variables or
arrays in internal storage. The ENCODE statement translates data
from internal (binary) form to character form. Inversely, the
DECODE statement translates data from character to internal form.
These statements are comparable to using internal files in
formatted sequential WRITE and READ statements, respectively.
Statement format:
ENCODE (c,f,b [,IOSTAT=ios] [,ERR=s]) [list]
DECODE (c,f,b [,IOSTAT=ios] [,ERR=s]) [list]
c Is an integer expression. In the ENCODE statement,
"c" is the number of characters (in bytes) to be
translated to character form. In the DECODE statement,
"c" is the number of characters to be translated to
internal form.
f Is a format identifier. An error occurs if more than
one record is specified.
b Is a scalar or array reference. If b is an array
reference, its elements are processed in the
order of subscript progression. The data type of "b"
determines the number of characters that ENCODE or
DECODE can process.
In the ENCODE statement, "b" receives the characters
after translation to external form. If less than "c"
characters are received, the remaining character
positions are filled with blank characters.
In the DECODE statement, "b" contains the characters
to be translated to internal form.
ios Is an integer scalar memory reference that is defined
as a positive integer if an error occurs, and zero
if no error occurs.
s Is the label of an executable statement.
list Is an I/O list.
In the ENCODE statement, the "list" contains the data
to be translated to character form. In the DECODE
statement, the "list" receives the data after
translation to internal form.
The interaction between the format specifier and the
I/O list is the same as for a formatted I/O statement.
The FIND statement positions a direct access file at a particular
record and sets the associated variable of the file to that record
number. It is comparable to a direct access READ statement with no
I/O list, and can open an existing file. No data transfer takes
place. Statement format:
FIND (u'r [,ERR=s] [,IOSTAT=ios])
FIND ([UNIT=]u, REC=r [,ERR=s] [,IOSTAT=ios])
u Is a logical unit number. It must refer to a
relative organization file.
r Is the direct access record number. It cannot
be less than one or greater than the number of
records defined for the file.
s Is the label of the executable statement that
receives control if an error occurs.
ios Is an integer variable or integer array element
that is defined as a positive integer if an error
occurs, and as a zero if no error occurs.
If you specify the -nof77 compiler option, you get an
interpretation of the EXTERNAL statement that facilitates
compatibility with older versions of Fortran. (The ANSI FORTRAN-77
interpretation is incompatible with the previous standard and
previous Digital implementations.)
The NOF77 interpretation combines the functionality of the
INTRINSIC statement with that of the EXTERNAL statement discussed
under the Help topic: Statements EXTERNAL.
The NOF77 EXTERNAL statement lets you use subprograms as arguments
to other subprograms. The subprograms to be used as arguments can
be either user-supplied procedures or Fortran library functions.
Statement format:
EXTERNAL [*]v [,[*]v]...
v Is the symbolic name of a subprogram or the name of
a dummy argument associated with the symbolic name
of a subprogram.
* Specifies that a user-supplied function is to be used
instead of a Fortran library function having the same
name.
The NOF77 EXTERNAL statement declares that each symbolic name in
its list is an external procedure name. Such a name can then be
used as an actual argument to a subprogram, which in turn can use
the corresponding dummy argument in a function reference or CALL
statement.
However, used as an argument, a complete function reference
represents a value, not a subprogram name.
Octal forms of integer constants allow compatibility with PDP-11
FORTRAN. You must specify the -vms compiler option to use octal
notation. Statement format:
"nn
nn Is a string of digits in the range 0 to 7 (for
example "107).
Integer constants in octal form have integer data type and are
treated as integers.
This statement is similar to the one discussed in Help topic:
Statements PARAMETER; they both assign a symbolic name to a
constant. However, this PARAMETER statement differs from the other
one in the following two ways: its list is not bounded with
parentheses; and the form of the constant, rather than implicit or
explicit typing of the symbolic name, determines the data type of
the variable. Statement format:
PARAMETER p=c [,p=c]...
p Is a symbolic name.
c Is a constant, the symbolic name of a constant, or a
compile-time constant expression.
The VIRTUAL statement is included for compatibility with PDP-11 FORTRAN. It has the same form and effect as the DIMENSION statement (see Help Topic: Statements DIMENSION).
Digital Fortran 77 allows certain intrinsic functions for
compatibility with FORTRAN for RISC. The following list shows
these functions and their equivalents:
Function Equivalent Function
-------- -------------------
AND IAND
OR IOR
XOR IEOR
IMAG AIMAG and DIMAG
LSHIFT ISHFT with a positive second argument
RSHIFT ISHFT with a negative second argument
Digital Fortran 77 allows the following alternative syntax for
binary, octal, and hexadecimal constants:
Alternative Syntax Equivalent
------------------ ----------
Binary B'0..1' '0..1'B
Octal O'0..7' '0..7'O
Hexadecimal X'0..F' or Z'0..F' '0..F'X or '0..F'Z
In all above syntax forms, you can use a quotation mark(") in place
of an apostrophe (').
Digital Fortran 77 allows the following C-style escape sequences in
character constants, if you do not specify the -vms or -assume
backslash compiler options:
Escape Sequence Represents
--------------- ----------
\n A new line
\t A horizontal tab
\b A backspace
\f A formfeed
\0 A null character
\' An apostrophe
\" A quotation mark
\\ A backslash
\x Any other character (x)
Digital Fortran 77 allows the following form for a record
specifier:
'r
r Is a numeric expression with a value that represents
the position of the record to be accessed using direct
access I/O. The value must be greater than or equal to 1,
and less than or equal to the maximum number of records
allowed in the file. If necessary, a record number is
converted to integer data type before being used.
Each constant, variable, array, expression, or function reference in a Fortran statement represents typed data. The data type of these items can be inherent in their constructions, implied by convention, or explicitly declared. The data types available in Digital Fortran 77 are integer, REAL (REAL*4), DOUBLE PRECISION (REAL*8), REAL*16 (Alpha only), COMPLEX (COMPLEX*8), DOUBLE COMPLEX (COMPLEX*16), BYTE (equivalent to INTEGER*1), logical, character, and Hollerith. Constants, variables, arrays, scalar fields, aggregate fields, character substrings, and expressions can be specified in many places in a Fortran program. Fortran statements and expressions have individual restrictions governing which of these items can used in them and in what form. Thus, to avoid repeatedly enumerating lists of the various items that can be specified with the various statements and expressions, the items are divided into four general categories: scalar reference, scalar memory reference, array name reference, and aggregate reference. The names of these categories are used throughout the language reference manual to identify what can be included in a particular statement or expression.
An aggregate reference resolves into a reference to a structured
data item (a record structure or substructure). For example:
Data Declarations:
STRUCTURE /STRA/
INTEGER INTFLD, INTFLDARY (10)
END STRUCTURE
. . .
STRUCTURE /STRB/
CHARACTER*20 CHARFLD
INTEGER INTFLD, INTFLDARY (10)
STRUCTURE STRUCFLD
COMPLEX CPXFLD, CPXFLDARY (10)
END STRUCTURE
RECORD /STRA/ RECFLD, RECFLDARY (10)
END STRUCTURE
. . .
RECORD /STRB/ REC, RECARY (10)
Reference Examples:
REC --- A record name
RECARY(1) --- A record array reference
REC.RECFLD --- A reference to a substructure
REC.RECFLDARY(1) --- A reference to a substructure array element
RECARY(1).RECFLD --- A reference to a substructure in a record
array element
RECARY(1).RECFLDARY(1) --- A reference to a substructure array
element in a record array
An array is a group of contiguous storage locations associated with a single symbolic name, the array name. The individual storage locations, called array elements, are referred to by a subscript appended to the array name. An array can have from 1 to 7 dimensions. The Fortran statements that establish arrays are: type declaration statements, the DIMENSION statement, and the COMMON statement. The data type of an array is specified in the same way as the data type of a variable; either implicitly by the first letter of the name or explicitly by a type declaration statement.
An array declarator specifies the symbolic name that identifies an
array within a program unit and indicates the properties of the
array. It has the form:
a(d[,d]...) a is the name of the array
d specifies the bounds of the array in the form:
[dl:]du dl is the lower bound
du is the upper bound
A subscript qualifies an array name. A subscript is a list of
expressions, called subscript expressions, enclosed in parentheses,
that determine which element in the array is referred to. The
subscript is appended to the array name it qualifies. A subscript
has the form:
(s[,s]...) s is a subscript expression
A one-dimensional array is stored with its first element in the
first storage location and its last element in the last storage
location of the sequence. A multidimensional array is stored so
that the leftmost subscripts vary most rapidly.
Adjustable arrays are dummy arguments in subprograms. The
dimensions of an adjustable array are determined in the reference
to the subprogram.
The array declarator for an adjustable array can contain integer
variables that are either dummy arguments or variables in a common
block.
When the subprogram is entered, each dummy argument used in the
array declarator must be associated with an actual argument, and
each variable in a common block used in an array declarator must
have a defined value. The dimension declarator is evaluated using
the values of the actual arguments, variables in common blocks, and
constants specified in the array declarator.
Argument association is not retained between one reference to a
subprogram and the next reference to that subprogram.
The size of the adjustable array must be less than or equal to the
size of the array that is its corresponding actual argument.
You can also declare adjustable arrays in RECORD statements not
contained within structure declarations.
To avoid possible errors in subscript evaluation, make sure that
the bounds expressions used to declare multidimensional adjustable
arrays match the bounds as declared by the caller.
In the following example, the function computes the sum of the
elements of a two-dimensional array. Notice how the dummy
arguments M and N control the iteration:
FUNCTION SUM(A,M,N)
DIMENSION A(M,N)
SUM = 0.0
DO 10 J=1,N
DO 10 I=1,M
10 SUM = SUM + A(I,J)
RETURN
END
The following statements are sample calls on SUM:
DIMENSION A1(10,35), A2(3,56)
SUM1 = SUM(A1,10,35)
SUM2 = SUM(A2,3,56)
SUM3 = SUM(A1,10,10)
An adjustable array is undefined if a dummy argument array is not
currently associated with an actual argument array. It is also
undefined if any of the variables in the adjustable array
declarator are either not currently associated with an actual
argument or not in a common block.
Digital Fortran 77 also allows the following form for an adjustable
array:
SUBROUTINE SUB1(A,B)
DIMENSION A(B(1)) ! An array element is allowed
A and B must be dummy arguments; B can be in COMMON.
An assumed-size array is a dummy array for which the upper bound of
the last dimension is specified as an asterisk (*), for example:
SUBROUTINE SUB(A,N)
DIMENSION A(1:N,1:*)
If the lower bound of an assumed-size array is not specified, it is
assumed to be 1. Therefore, the previous DIMENSION statement is
equivalent to the following:
DIMENSION A(1:N,*)
The size of an assumed-size array and the number of elements that
can be referenced are determined as follows:
o If the actual argument corresponding to the dummy array is a
name of a noncharacter array, the size of the dummy array is
the size of the actual-argument array.
o If the actual argument corresponding to the dummy argument is a
name of a noncharacter array element, with a subscript value of
"s" in an array of size "a", the size of the dummy array is
"a + 1 - s".
o If the actual argument is a name of a character array,
character array element, or character array element substring
and begins at character storage unit "b" of an array with n
character storage units, the size of the dummy array is
"INT(n + 1 - b)/y", where "y" is the length of an element of
the dummy array.
Because the actual size of an assumed-size array is unknown, an
assumed-size array name cannot be used as any of the following
items in an I/O statement:
o An array name in the I/O list
o A unit identifier for an internal file
o A run-time format specifier
An automatic array is a local array that is created when you enter a subprogram. The dimensions are determined by dummy arguments or variables in COMMON when the subprogram is called. For example: SUBROUTINE SUB1(N) DIMENSION A(N) ! Variable A is local N must be a dummy argument or it must be in a common block.
An array name reference resolves into the name of an array with no
subscripts after the array name. For example:
Data Declarations:
INTEGER INT, INTARY (10)
. . .
STRUCTURE /STRA/
INTEGER INTFLD, INTFLDARY (10)
END STRUCTURE
. . .
STRUCTURE /STRB/
CHARACTER*20 CHARFLD
INTEGER INTFLD, INTFLDARY (10)
STRUCTURE STRUCFLD
COMPLEX CPXFLD, CPXFLDARY (10)
END STRUCTURE
RECORD /STRA/ RECFLD, RECFLDARY (10)
END STRUCTURE
. . .
RECORD /STRB/ REC, RECARY (10)
Reference Examples:
INTARY --- Numeric or character array
RECARY --- Array of records
REC.INTFLDARY --- Numeric or character array field of a record
REC.RECFLDARY --- Array of substructures within a record
RECARY(1).INTFLDARY --- Numeric or character array field of a
record array element
RECARY(1).RECFLDARY --- Array of substructures within a record
array element
A constant is a fixed value. The value of a constant can be a numeric value, a logical value, or a character string. There are seven types of constants: integer, real, complex, bit, logical, character, and Hollerith. Bit and Hollerith constants have no data type; they assume a data type that conforms to the context in which they are used.
A bit constant is a binary, octal, or hexadecimal constant. You
can use this type of constant wherever numeric constants are
allowed and it assumes a numeric data type according to its
context.
A binary constant has the form:
'c1c2c3...cn'B c is a 0 or 1
An octal constant has the form:
'c1c2c3...cn'O c is a digit in the range 0 - 7
A hexadecimal constant has the form:
'c1c2c3...cn'X c is a digit in the range 0 - 9, or a letter
or in the range A - F, or a - f
'c1c2c3...cn'Z
Bit constants are "typeless" numeric constants. They assume data
types based on their usage, according to the following rules:
o When the constant is used with a binary operator, including the
assignment operator, the data type of the constant is the data
type of the other operand.
o When a specific data type is required, that type is assumed for
the constant.
o When the constant is used as an actual argument, if the bit
constant is greater than 4 bytes, INTEGER*8 is assumed;
otherwise, INTEGER*4 is assumed.
o When the constant is used in any other context, an INTEGER*4
data type is assumed (unless the -noi4 or -i8 (Alpha only)
compiler option specifies otherwise).
A character constant is a string of printable ASCII characters
enclosed by delimiters. It takes one of the following forms:
'c1,c2,c3...cn'
"c1,c2,c3...cn"
where c is a printable character
The length of the character constant is the number of characters
between the delimiters. In the apostrophe format, two consecutive
apostrophes represent a single apostrophe. In the quotation mark
format, two consecutive quotation marks represent a single
quotation mark.
The length of a character constant must be in the range 1 to 2000.
A complex constant consists of a pair of real or integer constants.
The two constants are separated by a comma and enclosed in
parentheses. The first constant represents the real part of the
number and the second constant represents the imaginary part.
Digital Fortran 77 supports COMPLEX*8 and COMPLEX*16 complex
constants.
A COMPLEX (COMPLEX*8) constant has the form:
(c,c) c is an integer or REAL (REAL*4) constant
A DOUBLE COMPLEX (COMPLEX*16) constant has the form:
(c,c) c is an integer, REAL (REAL*4), or
DOUBLE PRECISION (REAL*8) constant (at
least one of the pair must be a DOUBLE
PRECISION constant)
A Hollerith constant is a string of printable characters preceded
by a character count and the letter H. It is used only in numeric
expressions and has the form:
nHc1c2c3...cn
n Is an unsigned, nonzero integer constant stating the
number of characters in the string (including tabs
and spaces)
c Is a printable character
A Hollerith constant can be a string of 1 to 2000 characters and is
stored as a byte string, one character per byte.
Hollerith constants have no data type, but assume a numeric data
type according to the context in which they are used.
An integer constant is a whole number with no decimal point. It
can have a leading sign and is interpreted as a decimal number. It
has the form:
snn s is an optional sign
nn is a string of decimal digits (leading
zeros are ignored)
You can use integer constants to assign values to data. The
integer data types have the following ranges:
BYTE Same range as INTEGER*1
INTEGER*1 Signed integers: -128 to 127 (-2**7 to 2**7-1)
(1 byte) Unsigned integers: 0 to 255 (2**8-1)
INTEGER*2 Signed integers: -32768 to 32767
(2 bytes) (-2**15 to 2**15-1)
Unsigned integers: 0 to 65535 (2**16-1)
INTEGER*4 Signed integers: -2147483648 to 2147483647
(4 bytes) (-2**31 to 2**31-1)
INTEGER*8 Signed integers: -9223372036854775808 to
(Alpha only) 9223372036854775807 (-2**63 to 2**63-1)
(8 bytes)
NOTE: On Alpha processors, the value of an
integer constant must be within this range.
Note that logical data type ranges correspond to their comparable
integer data type ranges. For example, the LOGICAL*2 range is the
same as the INTEGER*2 range.
The value of an integer constant is normally INTEGER*2, INTEGER*4,
or INTEGER*8 (Alpha only). If a value is within INTEGER*2 range,
it is treated as an INTEGER*2 value; if a value is outside
INTEGER*2 range, but within INTEGER*4 range, it is treated as an
INTEGER*4 value, and so forth.
The logical constants are .TRUE. and .FALSE. Note that logical data type ranges correspond to their comparable integer data type ranges. For example, the LOGICAL*2 range is the same as the INTEGER*2 range. For more information on integer data type ranges, see DATA CONSTANTS INTEGER in this online Help file.
A REAL (REAL*4) constant is a basic real constant (with or without
a decimal exponent) or an integer constant followed by a decimal
exponent. A basic real constant has one of these forms:
s.nn s is an optional sign
snn.nn nn is a string of decimal digits
snn.
A decimal exponent has the form:
Esnn s is an optional sign
nn is an integer constant
The approximate range of a nonzero REAL constant is 1.175E-38 to
3.403E38 (S_floating).
S_floating computational results smaller than 1.17549429E-38 are
denormalized numbers that gradually underflow and lose precision,
until they reach approximately 1.40129846E-46. You cannot write a
constant for a denormalized number.
A DOUBLE PRECISION (REAL*8) constant is a basic real constant or an
integer constant followed by a decimal exponent. A decimal
exponent has the form:
Dsnnn s is an optional sign
nnn is a string of decimal digits
NOTE: Digital Fortran 77 also allows the syntax Qsnnn, if the
exponent field is within the T_floating double precision range.
On Digital UNIX systems, the DOUBLE PRECISION data type implements
the IEEE T_floating format.
T_floating computational results smaller than
2.2250738585072012D-308 are denormalized numbers that gradually
underflow and lose precision, until they reach approximately
4.9406564584124654D-324. You cannot write a constant for a
denormalized number.
A REAL*16 constant is a basic real constant or an integer constant
followed by a decimal exponent. A decimal exponent has the form:
Qsnn s is an optional sign
nn is a string of decimal digits
This type of constant is only available on Alpha systems.
An expression represents a single value. An expression can consist of a single constant, variable, record element, array element, or function reference; or combinations of these data items plus certain other elements, called operators. Operators specify computations to be performed on the values of the data items and a single result is obtained. Expressions are classified as arithmetic, character, relational, or logical. Arithmetic expressions produce numeric values; character expressions produce character values; and relational and logical expressions produce logical values. The data components of an expression must be compatible and must be joined by compatible operators. Expressions are evaluated one operator at a time according to the rules of precedence. The ranking assigned to each data type is as follows: Data Type Ranking --------- ------- BYTE 1 (lowest) LOGICAL*1 1 LOGICAL*2 2 LOGICAL*4 3 LOGICAL*8 (Alpha only) 4 INTEGER*1 5 INTEGER*2 6 INTEGER*4 7 INTEGER*8 (Alpha only) 8 REAL (REAL*4) 9 REAL*16 (Alpha only) 10 DOUBLE PRECISION (REAL*8) 11 COMPLEX (COMPLEX*8) 12 DOUBLE COMPLEX (COMPLEX*16) 13 (highest)
Arithmetic expressions contain numeric data such as variables,
record elements, array elements, constants, function references,
and arithmetic expressions enclosed in parentheses. The expression
evaluates to a numeric value. The numeric operators are as
follows:
Operator Ranking Description
-------------------------------------------------
** 1 exponentiation (evaluated
right to left)
* 2 multiplication
/ 2 division
+ 3 addition
- 3 subtraction
You can use parentheses to force an order of evaluation.
Character expressions consist of character elements and character operators. Evaluation of a character expression yields a single value of character data type. A character element may be a constant, variable, record element, array element, substring, expression (optionally enclosed in parentheses), or a function reference. A character expression has the form: character element[//character element]... The concatenation operator (//) is the only character operator. Concatenation is from left to right.
Logical expressions may contain logical and integer data such as
variables, record elements, array elements, constants, function
references, expressions enclosed in parentheses, and relational
expressions. The expression evaluates to a logical value using the
following operators:
OPERATOR PRECEDENCE
** First (Highest)
*,/ Second
+,-,// Third
Relational
Operators Fourth
.NOT. Fifth
.AND. Sixth
.OR. Seventh
.XOR. Eighth (Lowest)
.NEQV. Eighth
.EQV. Eighth
Relational expressions consist of either two arithmetic or two
character expressions separated by relational operators. The
expression is reduced to a logical value (true or false).
OPERATOR DESCRIPTION
.LT. Less than
.LE. Less than or equal to
.EQ. Equal to
.NE. Not equal to
.GT. Greater than
.GE. Greater than or equal to
Expressions of COMPLEX data type can use only .EQ. and .NE.
operators.
A record is a named data entity, consisting of one or more fields, which you can use when you need to declare and operate on multi-field data structures in your programs. To create a record, you must have a structure declaration (to describe the fields in the record) and a RECORD statement to establish the record in memory.
Structure APPOINTMENT:
Structure /APPOINTMENT/
RECORD /DATE/ APP_DATE
STRUCTURE /TIME/ APP_TIME (2)
LOGICAL*1 HOUR, MINUTE
END STRUCTURE
CHARACTER*20 APP_MEMO (4)
LOGICAL*1 APP_FLAG
END STRUCTURE
The following statement results in the creation of both a variable
named NEXT_APP and a 10-element array named APP_LIST. Both the
variable and each element of the array have the form of the
structure APPOINTMENT.
RECORD /APPOINTMENT/ NEXT_APP,APP_LIST(10)
The following examples illustrate aggregate and scalar field
references.
Aggregate:
NEXT_APP ! the record NEXT_APP
NEXT_APP.APP_TIME(1) ! an array field of the variable
! NEXT_APP
APP_LIST(3).APP_DATE ! a 4-byte array field in the record array
! APP_LIST(3)
Scalar:
NEXT_APP.APP_FLAG ! a LOGICAL field of the record
! NEXT_APP
NEXT_APP.APP_MEMO(1)(1:1)
! The first character of APP_MEMO(1),
! a character*20 field of the record
! NEXT_APP
Fields within a record may be accessed collectively or
individually. Record references are either qualified or
unqualified.
A qualified reference refers to a typed data item and can be used
wherever an ordinary variable is allowed. Type conversion rules
are the same as for variables. Its form is:
rname[.cfname...cfname].afname
Unqualified references refer to a record structure or substructure
and can be used (in most cases) like arrays, for example:
rname[.cfname...cfname]
rname Is the name used in the RECORD statement to
identify a record.
cfname Is a substructure field name within the record
identified by record-name.
afname Is the name of a typed data item within a structure
declaration.
A scalar reference is a scalar variable, scalar record field, array
element, constant, character substring, or expression that resolves
into a single, typed data item. For example:
Data Declarations:
INTEGER INT, INTARY (10)
. . .
STRUCTURE /STRA/
INTEGER INTFLD, INTFLDARY (10)
END STRUCTURE
. . .
STRUCTURE /STRB/
CHARACTER*20 CHARFLD
INTEGER INTFLD, INTFLDARY (10)
STRUCTURE STRUCFLD
COMPLEX CPXFLD, CPXFLDARY (10)
END STRUCTURE
RECORD /STRA/ RECFLD, RECFLDARY (10)
END STRUCTURE
. . .
RECORD /STRB/ REC, RECARY (10)
Reference Examples:
INT --- Numeric variable
INTARY(1) --- Numeric array element
REC.INTFLD --- Numeric field
REC.INTFLDARY(1) --- Numeric element of an array field
CHARVAR(5:10) --- Substring expression of a character variable
REC.CHARFLD(5:10) --- Substring expression of a character field
Note: A scalar memory reference is the same as a scalar reference,
excluding constants, character substrings, and expressions.
A character substring is a contiguous segment of a character
variable, character array element, or character field reference.
It has one of the following forms:
v([e1]:[e2]) OR a(s[,s]...)([e1]:[e2])
v Is a character variable name
a Is a character array name
s Is a subscript expression
e1 Is a numeric expression specifying the leftmost
character position of the substring
e2 Is a numeric expression specifying the rightmost
character position of the substring
NOTE:
1 .LE. e1 .LE. e2 .LE. length-of-v must hold true
The Fortran data types are as follows:
o Integer - a whole number
o REAL (REAL*4) - a single-precision floating point number (a
whole number or a decimal fraction or a combination)
o DOUBLE PRECISION (REAL*8) - a double-precision floating point
number (like REAL*4, but with twice the degree of accuracy in
its representation)
o REAL*16 (Alpha only) - a quad precision floating point number
(like REAL*4, but with four times the degree of accuracy in its
representation.)
o COMPLEX (COMPLEX*8) - a pair of REAL*4 values representing a
complex number (the first part of the number is the real part,
the second is the imaginary part)
o COMPLEX*16 (DOUBLE COMPLEX) - like complex, but with twice the
degree of accuracy in its representation (its real or imaginary
part must be a REAL*8)
o Logical - a logical value, .TRUE. or .FALSE.
o Character - a sequence of characters
o BYTE - equivalent to INTEGER*1
A character string is a contiguous sequence of bytes in memory. A character string is specified by two attributes: the address of the first byte of the string and the length of the string in bytes. The length of the string must be in the range 1 through 65535. Hollerith constants are stored internally, one character per byte.
Real and complex numbers are floating-point representations. COMPLEX (COMPLEX*8) data is eight contiguous bytes aligned on an arbitrary byte boundary. The low-order four bytes contain REAL (REAL*4) data that represents the real part of the complex number. The high-order four bytes contain REAL data that represents the imaginary part of the complex number. For information on the ranges of REAL data, see REAL (within the Data Constants section of Help). DOUBLE COMPLEX (COMPLEX*16) data is 16 contiguous bytes aligned on an arbitrary byte boundary. The low-order bytes contain DOUBLE PRECISION (REAL*8) data that represents the real part of the complex number. The high-order eight bytes contain DOUBLE PRECISION data that represents the imaginary part of the complex data. For information on the ranges of DOUBLE PRECISION data, see DOUBLE_PRECISION (within the Data Constants section of Help).
The integer data types have the following ranges:
BYTE Same range as INTEGER*1
INTEGER*1 Signed integers: -128 to 127 (-2**7 to 2**7-1)
(1 byte) Unsigned integers: 0 to 255 (2**8-1)
INTEGER*2 Signed integers: -32768 to 32767
(2 bytes) (-2**15 to 2**15-1)
Unsigned integers: 0 to 65535 (2**16-1)
INTEGER*4 Signed integers: -2147483648 to 2147483647
(4 bytes) (-2**31 to 2**31-1)
INTEGER*8 Signed integers: -9223372036854775808 to
(Alpha only) 9223372036854775807 (-2**63 to 2**63-1)
(8 bytes)
NOTE: On Alpha processors, the value of an
integer constant must be within this range.
INTEGER*2, INTEGER*4, and INTEGER*8 values are stored in two's
complement form.
Note that logical data type ranges correspond to their comparable
integer data type ranges. For example, the LOGICAL*2 range is the
same as the INTEGER*2 range.
The value of an integer constant is normally INTEGER*2, INTEGER*4,
or INTEGER*8 (Alpha only). If a value is within INTEGER*2 range,
it is treated as an INTEGER*2 value; if a value is outside
INTEGER*2 range, but within INTEGER*4 range, it is treated as an
INTEGER*4 value, and so forth.
Logical values start on an arbitrary byte boundary and are stored
in one, two, or four contiguous bytes. The low-order bit (bit 0)
determines the value. If bit 0 is set, the value is .TRUE.; if bit
0 is clear, the value is .FALSE. The remaining bits are undefined.
When a logical value is stored in memory, all of its bits are
stored. For example, consider the following:
LOGICAL*4 L1, L2, L3
L1 = L2 .AND. L3
This example does a full 32-bit AND of L2 and L3, and stores all 32
resulting bits in L1.
Real and complex numbers are floating-point representations. The exponent for REAL (REAL*4) (S_floating) and DOUBLE PRECISION (REAL*8) (T_floating) formats is stored in binary excess 128 notation. Binary exponents from -127 to 127 are represented by the binary equivalents of 1 through 255. For floating-point format, fractions are represented in sign-magnitude notation, with the binary radix point to the left of the most significant bit. Fractions are assumed to be normalized, and therefore the most significant bit is not stored. This bit is assumed to be 1 unless the exponent is 0. in which case the value represented is either zero or is a reserved operand. REAL (REAL*4) (S_floating) numbers occupy four contiguous bytes and the precision is approximately one part in 2**23, that is, typically 7 decimal digits. DOUBLE PRECISION (REAL*8) (T_floating) numbers occupy eight contiguous bytes and the precision is approximately one part in 2**55, that is, typically 16 decimal digits. On Alpha systems, REAL*16 (H_floating) numbers occupy sixteen contiguous bytes and the precision is approximately 2**112, that is, typically 33 decimal digits. For more information on real data type ranges, see DATA CONSTANTS REAL and DATA CONSTANTS DOUBLE_PRECISION in this online Help file.
A variable is represented by a symbolic name which is associated with a storage location. The value of the variable is the value currently stored in that location; the value can be changed by assigning a new value to the variable. Variables, like constants, are classified by data type. When data of any type is assigned to a variable, it is converted, if necessary, to the data type of the variable. You can establish the data type of a variable by type declaration statements, IMPLICIT statements, or predefined typing rules.
In the absence of either IMPLICIT statements or explicit type statements, all variables with names beginning with I, J, K, L, M, or N are assumed to be integer variables. Variables beginning with any other letter are assumed to be REAL (REAL*4) variables.
Type declaration statements explicitly define the data type of
variables.
Numeric type declaration statements have the form:
type v[/clist][,v[/clist]]...
type Is any data type except CHARACTER
v Is the name of a constant, variable, array, statement
function or function subprogram, or array declarator
clist Is a list of constants
Character type declaration statements have the form:
CHARACTER[*len[,]] v[*len] [/clist/] [,v[*len] [/clist/]]...
len An unsigned integer constant, an integer constant
expression enclosed in parentheses, or an asterisk
enclosed in parentheses. The value of "len" specifies
the length of the character data elements.
v The symbolic name of a constant, variable, array,
statement function or function subprogram, or array
declarator. The name can optionally be followed by
a data type length specifier (*n). For character
entities, the length specifier can be *len or *(*).
clist An initial value or values to be assigned to the
immediately preceding variable or array element.
Compiler diagnostic messages have the following format:
fort: severity: file-line:message_text
fort Identifies the source as the Digital Fortran 77
compiler
severity Possibilities: fatal, severe, error, warning, or
informational
file-line Indicates the source file and line number in the
source file
message_text Explains the event that caused the message
Must be corrected before the program can be compiled. Compilation
stops at the point where the fatal error is encountered. An object
file is not produced (linking does not occur).
The fatal messages follow (in alphabetical order):
o MESSAGE: Adjustable array used in invalid context
EXPLANATION: A reference to an adjustable array was made in a
context where such a reference is not allowed.
o MESSAGE: Aggregate reference where scalar reference required
EXPLANATION: An aggregate reference was used where a scalar
reference was required.
o MESSAGE: Alternate return label used in invalid context
EXPLANATION: An alternate return argument cannot be used in a
function reference.
o MESSAGE: Alternate return specifier invalid in FUNCTION
subprogram
EXPLANATION: The argument list of a FUNCTION declaration
contains an asterisk, or a RETURN statement in a function
subprogram specifies an alternate return. The following
example shows a FUNCTION declaration that contains an asterisk:
INTEGER FUNCTION TCB(ARG,*,X)
The following example shows a RETURN statement in a function
subprogram that specifies an alternate return.
FUNCTION IMAX
.
.
.
RETURN I
o MESSAGE: Arithmetic expression where character value required
EXPLANATION: An expression that must be of type CHARACTER was
of another data type.
o MESSAGE: Assumed size array name used in invalid context
EXPLANATION: An assumed-size array name was used in a context
in which the size of the array was required, for example, in an
I/O list.
o MESSAGE: Automatic class variable not permitted here
EXPLANATION: Specified automatic variable cannot be used in
this context.
o MESSAGE: Case expression value used previously
EXPLANATION: More than one CASE statement has used the logical
value .TRUE. or .FALSE. in a SELECT CASE construct. For
example:
LOGICAL L
SELECT CASE (L)
CASE (.TRUE.)
J=3
CASE (.TRUE.)
K=7
ENDSELECT
o MESSAGE: CASE or ENDSELECT statement must follow SELECT CASE
statement
EXPLANATION: A statement other than a CASE statement (or END
SELECT or INCLUDE) directly follows a SELECT CASE statement.
This usually means that a CASE statement is missing. For
example:
SELECT CASE (I)
J=5
CASE (6)
J=6
END SELECT
o MESSAGE: CASE value/range overlaps previous CASE value/range
EXPLANATION: The value, or range of values, in this CASE
statement overlaps a previous value, or range of values, within
the set of CASE statements belonging to the current SELECT CASE
construct. The program must be modified so that the values do
not overlap. For example:
SELECT CASE (I)
CASE (0:20)
X=3.0
CASE (15:30)
Y=5.0
END SELECT
The two ranges (0:20) and (15:30) must be modified so they do
not overlap.
o MESSAGE: Character expression where arithmetic value required
EXPLANATION: An expression that must be arithmetic (INTEGER,
REAL, LOGICAL, or COMPLEX) was of type CHARACTER.
o MESSAGE: Character substring limits out of order
EXPLANATION: The first character position of a substring
expression was greater than the last character position. For
example:
C(5:3)
o MESSAGE: Conflicting values for xxx
EXPLANATION: Command line error. For example:
$ f77 -convert vaxg -convert ibm x.f
Only one -convert value may be specified.
o MESSAGE: Compiler expression stack overflow
EXPLANATION: An expression was too complex or too many actual
arguments were included in a subprogram reference. A maximum
of 255 actual arguments can be compiled. You can subdivide a
complex expression or reduce the number of arguments.
o MESSAGE: Construct names must match on DO and ENDDO statements
EXPLANATION: Either there is a missing construct name, or the
construct names do not agree for matching DO and ENDDO
statements. Several examples:
FOO: DO I=1,10
...
ENDDO BAR ! BAR does not match FOO
DO J=1,20 ! There is no construct name to match
... ! UNMATCHED (on the ENDDO)
ENDDO UNMATCHED
EXTRA: DO K=1,30
...
ENDDO ! There is no construct name to match EXTRA
o MESSAGE: DO or IF statement incorrectly nested
EXPLANATION: One of the following conditions was encountered:
- A statement label specified in a DO statement was used
previously. For example:
10 I = I + 1
J = J + 1
DO 10 K=1,10
- A DO loop contains an incomplete DO loop or IF block.
For example:
DO 10 I=1,10
J = J + 1
DO 20 K=1,10
J = J + K
10 CONTINUE
The start of the incomplete IF block can be a block IF,
ELSE IF, or ELSE statement:
DO 10 I=1,10
J = J + I
IF (J .GT. 20) THEN J = J - 1
ELSE J = J + 1
10 CONTINUE
END IF
o MESSAGE: DO and IF statements nested too deeply
EXPLANATION: DO loops and block IF statements cannot be nested
beyond 128 levels.
o MESSAGE: Duplicated keyword in I/O statement
EXPLANATION: Each keyword subparameter in an I/O statement or
auxiliary I/O statement can be specified only once.
o MESSAGE: END [STRUCTURE|UNION|MAP] must match top
EXPLANATION: A STRUCTURE, UNION, or MAP statement did not have
a corresponding END STRUCTURE, END UNION, or END MAP statement,
respectively.
o MESSAGE: ENTRY dummy variable previously used in executable
statement
EXPLANATION: The dummy arguments of an ENTRY statement were
not used in a previous executable statement in the same program
unit.
o MESSAGE: EQUIVALENCE statement incorrectly expands a common
block
EXPLANATION: An EQUIVALENCE statement cannot cause a common
block to be extended back past the first element specified in
the COMMON statement.
o MESSAGE: Error limit exceeded; compilation terminated
EXPLANATION: The number of error-level and fatal-error errors
has reached the limit given in -error_limit nn (or the default
of 30 errors). Recompile with a larger -error_limit value or
correct the errors displayed up to the point of termination and
then recompile.
o MESSAGE: EXIT or CYCLE statement must be within the scope of
some DO loop
EXPLANATION: A simple CYCLE or EXIT statement occurred outside
the scope of any DO loop. Since these statements are used to
increment or exit the nearest enclosing DO loop, this is an
error.
o MESSAGE: Fatal BE error
EXPLANATION: Internal error related to error code passing
between the compiler front end and back end. Submit an SPR.
o MESSAGE: Field name not defined for this structure
EXPLANATION: A field name not defined in a structure was used
in a qualified reference.
o MESSAGE: Format specifier in error
EXPLANATION: The format specifier in an I/O statement was
invalid. It must be one of the following:
- Label of a FORMAT statement
- Asterisk (*) in a list-directed I/O statement
- Run-time format specifier: variable, array element,
or character substring reference
- Integer variable that was assigned a FORMAT label
by an ASSIGN statement
o MESSAGE: INCLUDE files nested too deeply
EXPLANATION: A maximum of 10 levels of nested INCLUDE files
are allowed.
o MESSAGE: Inconsistent function data types
EXPLANATION: The function name and entry points in a function
subprogram must be consistent within one of three groups of
data types:
Group 1: All numeric types except COMPLEX*16
Group 2: COMPLEX*16
Group 3: Character
Example:
CHARACTER*15 FUNCTION I
REAL*4 G
ENTRY G
o MESSAGE: Inconsistent use of statement label
EXPLANATION: Labels of executable statements were confused
with labels of FORMAT statements or with labels of
nonexecutable statements. For example:
GO TO 10
10 FORMAT (I5)
o MESSAGE: Incorrect keyword in OPEN, CLOSE, or INQUIRE
statement
EXPLANATION: An OPEN, CLOSE, or INQUIRE statement contained a
keyword that was not valid for that statement.
o MESSAGE: Incorrect length modifier in declaration
EXPLANATION: An unacceptable length was specified in a data
type declaration. For example:
INTEGER PIPES*8
o MESSAGE: Internal error, xxxxxxxxxxx
EXPLANATION: Internal error. The xxxxxxxxx is replaced by
information about the error. Submit an SPR.
o MESSAGE: Invalid argument to %VAL, %REF or %LOC
EXPLANATION: The argument specified for one of the built-in
functions was not valid. For example:
%VAL (3.5D0) - Error: Argument cannot be REAL*8,
character, or complex.
%LOC (X+Y) - Error: Argument must not be an expression.
o MESSAGE: Invalid ASSIGN variable
EXPLANATION: Attempted to use an ASSIGN variable in an invalid
context, such as trying to assign a value to a pointer
variable. For example:
POINTER (P,A)
ASSIGN 1 TO P
GOTO P
o MESSAGE: Invalid control structure using CASE or END SELECT
EXPLANATION: A CASE statement or an ENDSELECT statement
occurred without an initial SELECT CASE statement, or was used
in some other incomplete context that makes it invalid. For
example:
SELECT CASE (J)
CASE (5)
K=2
IF (I.GT.0) THEN
ENDSELECT
ELSE
CASE (6)
K=3
ENDSELECT
o MESSAGE: Invalid control structure using ELSE IF, ELSE, or END
IF
EXPLANATION: The order of ELSE IF, ELSE, or END IF statements
was incorrect.
ELSE IF, ELSE, and END IF statements cannot stand alone. ELSE
IF and ELSE must be preceded by either a block IF statement or
an ELSE IF statement. END IF must be preceded by either a
block IF, ELSE IF, or ELSE statement. For example:
DO 10 I=1,10
J = J + I
ELSE IF (J .LE. K) THEN
Error: The ELSE IF is preceded by a DO statement
IF (J .LT. K) THEN J = I + J
ELSE
J = I - J
ELSE IF (J .EQ. K) THEN
END IF
Error: The ELSE IF is preceded by an ELSE statement
o MESSAGE: Invalid DO parameters in implied-DO list
EXPLANATION: An invalid control parameter was detected in an
implied-DO list in a DATA statement;for example, an increment
of zero.
o MESSAGE: Invalid equivalence of two variables in common
EXPLANATION: Variables in common blocks cannot be equivalenced
to each other.
o MESSAGE: Invalid I/O list element for input statement
EXPLANATION: An input statement I/O list contained an invalid
element, such as an expression or a constant.
o MESSAGE: Invalid I/O specification for this type of I/O
statement
EXPLANATION: A syntax error was found in the portion of an I/O
statement that precedes the I/O list. For example:
TYPE (6), J
WRITE 100, J
o MESSAGE: Invalid keyword for this type of I/O statement
EXPLANATION: An I/O statement contained a keyword that cannot
be used with that type of I/O statement.
o MESSAGE: Invalid NAMELIST element
EXPLANATION: A dummy argument or element other than variable
or array name appeared in a NAMELIST declaration.
o MESSAGE: Invalid operation in implied-DO list
EXPLANATION: An invalid operation was attempted in an
implied-DO list in a DATA statement, for example, a function
reference in the subscript or substring expression of an array
or character substring reference. For example:
DATA (A(SIN(REAL(I))), I=1,10) /101./
o MESSAGE: Invalid reference to name in implied-DO list
EXPLANATION: A control parameter expression in an implied-DO
list in a DATA statement contained a name that was not the name
of a control variable within the scope of any implied-DO list.
For example:
DATA (A(J), J=1,10),(B(I), I=J,K) /1001./
Both J and K in the second implied-DO list are invalid names.
o MESSAGE: Invalid use of function name in CALL statement
EXPLANATION: A CALL statement referred to a subprogram name
that was used as a CHARACTER or COMPLEX*16 function. For
example:
IMPLICIT CHARACTER*10(C)
CSCAL = CFUNC(X)
CALL CFUNC(X)
o MESSAGE: Invalid use of record or array name
EXPLANATION: A statement in the program violated one of the
following rules:
- An aggregate cannot be assigned to a nonaggregate or to
an aggregate with a structure that is not the same.
- An array name reference cannot be qualified.
- Aggregate references cannot be used in I/O lists of
formatted I/O statements.
o MESSAGE: Label in ASSIGN statement exceeds INTEGER*2 range
EXPLANATION: A label whose value is assigned to an INTEGER*2
variable by an ASSIGN statement must not be separated by more
than 32K bytes from the beginning of the code for the program
unit.
o MESSAGE: Left side of assignment must be variable or array
element
EXPLANATION: The symbolic name to which the value of an
expression is assigned must be a variable, array element, or
character substring reference.
o MESSAGE: Low bound exceeds high bound in CASE range
EXPLANATION: The INTEGER or CHARACTER CASE statement contains
a range where the lower bound is greater than the upper bound.
For example:
CASE (30:20)
CASE ('OMEGA':'ALPHA')
o MESSAGE: Missing constant
EXPLANATION: A required constant was not found.
o MESSAGE: Missing keyword
EXPLANATION: A required keyword, such as TO, was omitted from
a statement such as ASSIGN 10 TO I.
o MESSAGE: Missing operator or delimiter symbol
EXPLANATION: Two terms of an expression were not separated by
an operator, or a punctuation mark (such as a comma) was
omitted. For example:
CIRCUM = 3.14 DIAM ! * is missing
IF (I 10,20,30 ! ) is missing
o MESSAGE: Missing or invalid use of UNIT or FILE specifier in
INQUIRE statement
EXPLANATION: An INQUIRE statement must have a UNIT specifier
or a FILE specifier, but not both.
o MESSAGE: Missing statement label
EXPLANATION: A required statement label reference was omitted.
o MESSAGE: Missing variable or constant
EXPLANATION: An expression or a term of an expression was
omitted. For example:
WRITE ( )
DIST = *TIME
o MESSAGE: Missing variable or subprogram name
EXPLANATION: A required variable name or subprogram name was
not found.
o MESSAGE: Multiple declaration of name
EXPLANATION: A name appeared in two or more inconsistent
declaration statements or a dummy argument was specified in an
EQUIVALENCE statement.
o MESSAGE: Multiple use of DEFAULT CASE statement
EXPLANATION: There is more than one CASE DEFAULT statement in
this SELECT CASE construct. For example:
SELECT CASE (I)
CASE DEFAULT
J=4
CASE (5)
K=5
CASE DEFAULT
L=6
END SELECT
o MESSAGE: Multiply defined field name
EXPLANATION: Each field name within the same level of a given
structure declaration must be unique.
o MESSAGE: Multiply defined STRUCTURE name
EXPLANATION: A STRUCTURE name must be unique among STRUCTURE
names.
o MESSAGE: Name previously used with conflicting data type
EXPLANATION: A data type was assigned to a name that had
already been used in a context that required a different data
type.
o MESSAGE: No digits in octal (or hex) notation integer constant
EXPLANATION: An incorrectly formed octal or hex constant has
been detected, possibly because the user intended -novms to use
" as a character constant delimiter instead of an octal
constant delimiter. The constant should be corrected or the
proper switch used.
o MESSAGE: No enclosing DO loop begins with this construct name
EXPLANATION: There is a construct name used in either a CYCLE
or EXIT statement that does not appear on a DO statement for
any enclosing loop. In particular, if there are no loops at
all, the error will be generated for:
CYCLE FOO
EXIT BAR
o MESSAGE: Nonconstant subscript where constant required
EXPLANATION: Subscript and substring expressions used in DATA
and EQUIVALENCE statements must be constants.
o MESSAGE: Non-integer expression where integer value required
EXPLANATION: An expression that must be of type integer was of
some other data type.
o MESSAGE: Non-logical expression where logical value required
EXPLANATION: An expression that must have a LOGICAL data type
has another data type.
o MESSAGE: No source file specified
EXPLANATION: A command line was entered that specified only
library file names and no source files to compile.
o MESSAGE: Number of subscripts does not match array declaration
EXPLANATION: Too many or too few dimensions than were declared
for the array were referenced.
o MESSAGE: Only one of: xxx, xxx, xxx may be specified
EXPLANATION: Command line error. For example:
$ f77 -call_shared -non_shared x.f
Only one of the following options can be used at a time:
-call_shared, -non_shared, or -shared.
o MESSAGE: Open failure on INCLUDE file
EXPLANATION: The specified file could not be opened, possibly
due to an incorrect file specification, nonexistent file,
unmounted volume, or a protection violation.
o MESSAGE: Operation not permissible on these data types
EXPLANATION: An invalid operation was specified, such as an
.AND. of two real variables.
o MESSAGE: Passed-length character name used in invalid context
EXPLANATION: A reference to a passed-length character array or
variable was made in a context where such a reference is not
allowed.
o MESSAGE: Program storage requirements exceed addressable
memory
EXPLANATION: The storage space allocated to the variables and
arrays of the program unit exceeded the addressing range of the
machine.
o MESSAGE: Range not allowed for CASE of type logical
EXPLANATION: In a CASE statement of type logical, the user has
specified a "range" of values. A range is valid only in a CASE
statement of type INTEGER or CHARACTER. For example:
LOGICAL L
SELECT CASE (L)
CASE (.TRUE.:.FALSE.)
I=15
ENDSELECT
Possibly the program intended CASE (.TRUE.,.FALSE) instead.
o MESSAGE: Requested source is not available on ULTRIX
EXPLANATION: The program attempted to use one of the following
VAX FORTRAN I/O features that are not available on ULTRIX or
Digital UNIX systems, such as using the DICTIONARY statement or
using an INCLUDE statement for a text module from a library
file.
o MESSAGE: Statement cannot appear in logical IF statement
EXPLANATION: A logical IF statement must not contain a DO
statement or another logical IF, IF THEN, ELSE IF, ELSE, END
IF, or END statement.
o MESSAGE: Statement not allowed within structure; structure
definition closed
EXPLANATION: A statement not allowed in a structure
declaration block was encountered. When this situation occurs,
the compiler assumes that you omitted one or more END STRUCTURE
statements.
o MESSAGE: Statement too complex
EXPLANATION: A statement was too complex to be compiled. It
must be subdivided into two or more statements.
o MESSAGE: Structure field is missing a field name
EXPLANATION: Unnamed fields are not allowed. The effect of an
unnamed field can be achieved by using %FILL in place of a
field name in a typed data declaration.
o MESSAGE: Structure name in RECORD statement not defined
EXPLANATION: Either a RECORD statement did not contain a
structure name enclosed within slashes or the structure name
contained in a RECORD statement was not defined in a structure
declaration.
o MESSAGE: STRUCTUREs/UNIONs/MAPs nested too deeply
EXPLANATION: The combined nesting level limit for structures,
unions, and maps is 20 levels.
o MESSAGE: Subqualifier not allowed with negated qualifier
EXPLANATION: A negated qualifier specified on the command line
also specified subqualifier values; for example: -nocheck
underflow.
o MESSAGE: Subscripted reference to non-array variable
EXPLANATION: A variable that is not defined as an array cannot
appear with subscripts.
o MESSAGE: Syntax error in implied-DO
EXPLANATION: Improper syntax was detected in an implied-DO
list in data initialization, for instance, improperly nested
parentheses.
o MESSAGE: Syntax error in INCLUDE file specification
EXPLANATION: The file-name string was not acceptable (invalid
syntax, invalid qualifier, undefined device, and so on).
o MESSAGE: Syntax error in I/O list
EXPLANATION: Improper syntax was detected in an I/O list.
o MESSAGE: This language feature is not supported on this system
EXPLANATION: Attempted to use an unsupported feature. Such
features may be supported by Digital Fortran 77 but are not
available on this platform (for example, the %DESCR built-in
function). See your user manual for information about Digital
Fortran 77 compatibility.
o MESSAGE: Too many named common blocks
EXPLANATION: Digital Fortran 77 allows a maximum of 250 named
common blocks. You must reduce the number in your program.
o MESSAGE: Unclosed DO loop, IF block, or SELECT CASE
EXPLANATION: The terminal statement of a DO, IF, or SELECT
CASE statement was not found. For example:
DO 20 I=1,10
X = Y
END
o MESSAGE: Undefined statement label
EXPLANATION: A reference was made to a statement label that
was not defined in the program unit or a nonexecutable
statement label was used where an executable statement label
was required.
o MESSAGE: Undimensioned array or statement function definition
out of order
EXPLANATION: Either a statement function definition was found
among executable statements or an assignment statement
involving an undimensioned array was found.
o MESSAGE: Unit specifier keyword missing in I/O statement
EXPLANATION: An I/O statement must include a unit specifier
subparameter.
o MESSAGE: Unrecognized statement
EXPLANATION: The statement encountered was not recognized as
valid.
o MESSAGE: Variable inconsistently equivalenced to itself
EXPLANATION: EQUIVALENCE statements specified inconsistent
relationships between variables or array elements. For
example:
EQUIVALENCE (A(1), A(2))
o MESSAGE: Variable name, constant, or expression invalid in
this context
EXPLANATION: An entity was used incorrectly; for example, the
name of a subprogram was used where an arithmetic expression
was required.
Must be corrected before the program can be compiled. An object
file is not produced (linking does not occur).
The severe messages follow (in alphabetical order):
o MESSAGE: Implied DO loop increment is 0
EXPLANATION: The value of the implied DO loop increment was
zero.
o MESSAGE: This DATA implied-DO list name must be subscripted
EXPLANATION: In a DATA statement, an implied DO loop referred
to a variable missing a subscript. For example:
INTEGER A(10)
DATA (A,I=3,5) /3*20/
The correct use for this example is DATA (A(I),I=3,5) /3*20/.
Must be corrected before the program can be compiled. An object
file is not produced (linking does not occur).
The error messages follow (in alphabetical order):
o MESSAGE: Adjustable array bound contains invalid data item
EXPLANATION: A dimension declarator expression for an
adjustable array contained an operand other than a constant,
variable in a common block, or variable associated with a
subprogram dummy argument.
o MESSAGE: Alternate return omitted in SUBROUTINE or ENTRY
statement
EXPLANATION: An asterisk was missing in the argument list of a
subroutine for which an alternate return was specified. For
example:
ENTRY ABC(Q,R)
.
.
.
RETURN 1
o MESSAGE: Arithmetic error while evaluating constant or
constant expression
EXPLANATION: The specified value of a constant was too large
or too small to be represented.
o MESSAGE: Character name incorrectly initialized with numeric
value
EXPLANATION: A character data item with a length greater than
one was initialized with a numeric value in a DATA statement.
For example:
CHARACTER*4 A
DATA A/14/
o MESSAGE: Character scalar memory reference or array required
for internal files
EXPLANATION: Attempted use of internal file I/O using a type
of variable that is not valid. For more information, see your
user manual.
o MESSAGE: Constant in format item out of range
EXPLANATION: A numeric value in a FORMAT statement exceeds the
allowable range. See the language reference manual for
information about range limits.
o MESSAGE: Declaration of globally visible name conflicts with a
previous declaration
EXPLANATION: The name specified in a PROGRAM, BLOCK DATA,
COMMON, ENTRY, FUNCTION, or SUBROUTINE statement has already
been used. For instance, a COMMON block has the same name as
an external routine.
o MESSAGE: ENDDO cannot close both labeled (line !UL) and
unlabeled (line !UL) DO statements.
EXPLANATION: A labeled ENDDO statement was found that ended
both a labeled and an unlabeled DO statement. This is
corrected by inserting a separate ENDDO statement before the
labeled ENDDO to close the innermost unlabeled DO statement.
For example, consider the following:
DO 100 I=1, 10
DO J=1, 20
IARRAY(J,I) = 0
100 ENDDO
......^
%FORT-E-INVENDDO, ENDDO cannot close both labeled (line 1) and
unlabeled (line 2) DO statements.
END
The code can be corrected as follows:
DO 100 I=1, 10
DO J=1, 20
IARRAY(J,I) = 0
ENDDO
100 ENDDO
END
o MESSAGE: ENTRY within DO loop or IF block
EXPLANATION: An ENTRY statement is not allowed within the
range of a DO loop or IF block.
o MESSAGE: Extra characters following a valid statement
EXPLANATION: Superfluous text was found at the end of a
syntactically correct statement. Check for typing or syntax
errors.
o MESSAGE: Extra number in format list
EXPLANATION: A format list contained an extraneous number.
For example:
FORMAT (I4,3)
o MESSAGE: Feedback file does not match current program, in
routine !AD
EXPLANATION: The information in the feedback file cannot be
correlated with the current program. Confirm that the same
compiler options were passed with this compilation as were
passed for the -gen_feedback compilation. Also confirm that
the program and any included files have not changed.
o MESSAGE: Feedback file not found !AD
EXPLANATION: Either no feedback file was named or it cannot be
found. Confirm that the syntax of the f77 command was correct.
Also confirm that the correct file was passed.
o MESSAGE: Format groups nested too deeply
EXPLANATION: Format groups cannot be nested beyond eight
levels.
o MESSAGE: Format item cannot be signed
EXPLANATION: A signed constant is valid only with the P format
code.
o MESSAGE: Format item contains meaningless character
EXPLANATION: An invalid character or a syntax error was
detected in a FORMAT statement.
o MESSAGE: Global offset table is full for module !AD. Object
file not created.
EXPLANATION: The number of address constants in the module
exceeded a system threshold. For more information, see the
Digital UNIX Assembly Language Guide.
o MESSAGE: Inconsistent statement function reference
EXPLANATION: The actual arguments in a statement function
reference did not agree in either order, number, or data type
with the formal arguments declared.
o MESSAGE: Intrinsic function !AD not allowed in !AD
EXPLANATION: The IARGCOUNT and IARGPTR intrinsic functions are
not allowed in the MAIN program and BLOCK DATA. The IARGPTR
function is also not allowed in statement functions.
o MESSAGE: Invalid ASSOCIATEVARIABLE specification
EXPLANATION: An ASSOCIATEVARIABLE specification in an OPEN or
DEFINE FILE statement was a dummy argument or an array element.
o MESSAGE: Invalid character after a backslash
EXPLANATION: In a character literal, the character specified
after the backslash (\) was not one of the allowable characters
(such as \n for new line) used to produce a nonprinting
character. For information on the allowable characters for
C-style escape sequences, see the language reference manual.
o MESSAGE: Invalid character used in constant
EXPLANATION: An invalid character was detected in a constant.
Only the characters 0-9, A-F, and a-f are valid for hexadecimal
constants. The entire hexadecimal constant is set to zero.
o MESSAGE: Invalid format for feedback file
EXPLANATION: The file passed as a feedback file did not have
the expected format. Confirm that the correct file was passed.
Try recreating the file using the steps discussed in the f77(1)
reference page.
o MESSAGE: Invalid repeat count in data initialization, count
ignored
EXPLANATION: The repeat count in a data initialization was not
an unsigned, nonzero integer constant. When this error is
encountered, the count is ignored.
o MESSAGE: Invalid use of intrinsic function name as actual
argument
EXPLANATION: A generic intrinsic function name was used as an
actual argument.
o MESSAGE: I/O list not permitted with namelist I/O
EXPLANATION: An I/O statement with a namelist specifier
incorrectly contained an I/O list.
o MESSAGE: Missing apostrophe in character constant
EXPLANATION: A character constant must be enclosed in
apostrophes.
o MESSAGE: Missing exponent after E, D, or Q
EXPLANATION: A floating-point constant was specified in E, D,
or Q notation, but the exponent was omitted.
o MESSAGE: Missing number in format list
EXPLANATION: An expected number was missing from a format
list. For example:
FORMAT (F6.)
o MESSAGE: Missing separator between format items
EXPLANATION: A required separator character was omitted
between fields in a FORMAT statement.
o MESSAGE: Missing variable or common name
EXPLANATION: A name of a variable or a common block that is
required by a compiler directive statement or a VOLATILE
statement was omitted.
o MESSAGE: More than 7 dimensions specified
EXPLANATION: An array can be defined as having up to seven
dimensions.
o MESSAGE: Multiple definition of statement label
EXPLANATION: The same label appeared on more than one
statement. When this error is encountered, the first
occurrence of the label is used.
o MESSAGE: Nonstandard operation
EXPLANATION: One of the following operations was detected:
- Logical operand and a nonlogical operand were used
in the same operation.
- Real type expression and a complex type expression
were used in the same statement.
- Character operand and a noncharacter operand were
used in the same operation.
- Nonlogical expression was assigned to a logical
variable.
- Noncharacter expression was assigned to a character
variable.
- Character dummy argument appeared in a concatenation
operation and the result of the expression was not
assigned to a character variable.
- Logical operators were used with nonlogical operands.
- Arithmetic operators were used with nonnumeric operands.
o MESSAGE: Outer level structure is missing a structure name
EXPLANATION: An outer level STRUCTURE statement must have a
structure name in order for a RECORD statement to be able to
reference the structure declaration.
o MESSAGE: Preprocessor record: error opening specified file
EXPLANATION: Internal information from cpp is not in the
correct format. This could be caused by a pound sign (#)
character in column 1 of the Fortran source code that is not a
cpp directive or internal information from cpp.
o MESSAGE: Preprocessor record file spec misspelled
EXPLANATION: Internal information from cpp is not in the
correct format, possibly caused by a pound sign (#) character
in column 1 of the Fortran source code that is not a cpp
directive or internal information from cpp.
o MESSAGE: Preprocessor record line number not integer
EXPLANATION: Internal information from cpp is not in the
correct format, possibly caused by a pound sign (#) character
in column 1 of the Fortran source code that is not a cpp
directive or internal information from cpp.
o MESSAGE: Preprocessor record missing file spec
EXPLANATION: Internal information from cpp is not in the
correct format, possibly caused by a pound sign (#) character
in column 1 of the Fortran source code that is not a cpp
directive or internal information from cpp.
o MESSAGE: Preprocessor record missing line number
EXPLANATION: Internal information from cpp is not in the
correct format, possibly caused by a pound sign (#) character
in column 1 of the Fortran source code that is not a cpp
directive or internal information from cpp.
o MESSAGE: Recursive routine defined; recursive option required
EXPLANATION: An ENTRY point was defined that had been previous
called within the function or subroutine. This is only allowed
when the recursive option is used. For example:
INTEGER FUNCTION IFUNC (I)
IFUNC = IFUNCA(I-1)
RETURN
ENTRY IFUNCA (I) ! This line causes the error
IFUNCA = I * 100
RETURN
END
o MESSAGE: Recursive routine referenced; recursive option
required
EXPLANATION: The function or entry was referenced recursively.
This is only allowed when the recursive option is used. For
example:
INTEGER FUNCTION FACT (N)
IF(N .EQ. 1) THEN
FACT = N
RETURN
ENDIF
FACT = N*FACT(N-1) ! This line causes the error
RETURN
o MESSAGE: Statement not allowed within structure definition
EXPLANATION: A statement not allowed in a structure
declaration block was encountered. Structure declaration
blocks can only include the following statements: typed data
declaration statements, RECORD statements, UNION/END UNION
statements, MAP/END MAP statements, and STRUCTURE/END STRUCTURE
statements.
o MESSAGE: Statement not valid in this program unit
EXPLANATION: A program unit contained a statement that is not
allowed; for example, a BLOCK DATA subprogram containing an
executable statement.
o MESSAGE: Statement out of order
EXPLANATION: The order of statements was invalid. When this
error is encountered, the statement found to be out of order is
ignored.
o MESSAGE: Subscript or substring expression value out of bounds
EXPLANATION: An array element beyond the specified dimensions
or a character substring outside the specified bounds was
referenced.
o MESSAGE: Substring reference used in invalid context
EXPLANATION: A substring reference to a variable or array that
is not of type character was detected. For example:
REAL X(10)
Y = X(J:K)
o MESSAGE: Syntax error in IMPLICIT statement
EXPLANATION: Improper syntax was used in an IMPLICIT
statement.
o MESSAGE: Too many continuation lines
EXPLANATION: You cannot use more than 99 continuation lines.
o MESSAGE: Unbalanced parentheses in format list
EXPLANATION: The number of right parentheses must match the
number of left parentheses.
o MESSAGE: Undimensioned array reference or scalar is
subscripted
EXPLANATION: The variable appearing in a DATA statement or
namelist has not been dimensioned, yet appears with a
subscript.
o MESSAGE: Unknown keyword value
EXPLANATION: The specified keyword value is not valid. For
more information, see the language reference manual.
o MESSAGE: Untyped name, must be explicitly typed
EXPLANATION: The displayed name was not defined in any data
type declaration statement, and an IMPLICIT NONE statement was
specified. Check that the name was not accidentally created by
an undetected syntax error. For example:
DO 10 I = 1.10
The apparent DO statement is really an assignment to the
accidentally created variable DO10I.
o MESSAGE: %VAL or %REF used in invalid context
EXPLANATION: The argument list built-in functions %VAL and
%REF cannot be used outside an actual argument list. For
example:
X = %REF(Y)
o MESSAGE: Variable cannot be reinitialized (xxxx)
EXPLANATION: Attempted to initialize a variable more than
once, such as in a DATA statement.
o MESSAGE: Zero-length string
EXPLANATION: The length specified for a character or Hollerith
constant must not be zero.
Should be investigated by checking the statements to which warning
diagnostic messages refer. Warnings are issued for statements that
use acceptable, but nonstandard, syntax and for statements
corrected by the compiler. An object file is produced, but the
program results may be incorrect.
Warning messages are produced unless you specify the -w or -nowarn
option on the f77 command line.
The warning messages follow (in alphabetical order):
o MESSAGE: Actual argument data type (actual_type) not equal to
routine's dummy argument type (dummy_type)
EXPLANATION: A mismatch was detected between an actual
parameter type and the dummy type in the called routine. This
may be caused by a programming error which needs to be
corrected. For example:
CALL FOO ( 1.5 )
...
SUBROUTINE FOO ( X )
DOUBLE PRECISION X
Since the 1.5 is a REAL number (not DOUBLE PRECISION), this can
result in a variety of problems, depending upon the passing
mechanism of the system. In this case the "1.5" should be
changed to "1.5D0".
o MESSAGE: Alignment of common block is inconsistent with
previous declaration
EXPLANATION: Occurs when using CDEC$ OPTIONS/ALIGN if same
COMMON is declared in multiple pieces within a single
compilation unit and /ALIGN has changed between pieces. For
example:
CDEC$ OPTIONS /ALIGN=COMMON=NATURAL
COMMON /COM1/ A,B ! common elements are
! naturally aligned
CDEC$ END OPTIONS
CDEC$ OPTIONS /ALIGN=COMMON=PACKED
COMMON /COM1/ C,D ! common elements are packed
CDEC$ END OPTIONS
END
o MESSAGE: Argument data type error, not equal to the routine's
dummy argument type
EXPLANATION: A mismatch was detected between an actual
parameter type and the dummy type in the called routine. This
can be caused by a programming error which needs to be
corrected.
o MESSAGE: Error limit exceeded; compilation terminated
EXPLANATION: The number of error-level and fatal-error errors
has reached the limit given in -errorlimit nn (or the default
of 30 errors). Recompile with a larger -errorlimit value or
correct the errors displayed up to the point of termination and
then recompile.
o MESSAGE: Alignment of variable or array is inconsistent with
its data type
EXPLANATION: Scalar or array data cannot be naturally aligned
when alignment had been requested (-align xxxx) option),
possibly because of an EQUIVALENCE statement. See your user
manual for alignment information.
o MESSAGE: Arguments incompatible with intrinsic function,
assumed EXTERNAL
EXPLANATION: A function reference was made using an intrinsic
function name, but the argument list does not agree in order,
number, or type with the intrinsic function requirements. When
this error is encountered, the function is assumed to be
supplied by you as an EXTERNAL function.
o MESSAGE: Assignment to DO variable within loop
EXPLANATION: The control variable of a DO loop was altered
within the range of a DO statement.
o MESSAGE: CDEC$ OPTIONS directives nested too deeply - this one
ignored
EXPLANATION: CDEC$ OPTIONS directives cannot be nested beyond
100 levels.
o MESSAGE: Constant size exceeds variable size in data
initialization
EXPLANATION: A constant used for data initialization was
larger than its corresponding variable.
o MESSAGE: Count of Hollerith constant too large, reduced
EXPLANATION: The value specified by the integer preceding the
H was greater than the number of characters remaining in the
source statement.
o MESSAGE: EQUIVALENCE may not be used to put a SAVE variable
into COMMON
EXPLANATION: You cannot use an EQUIVALENCE statement to put
variables declared with the SAVE statement into a COMMON data
block. For example:
common/c1/ a,b,c
dimension x(3)
save x
equivalence (x(1),a)
end
In this case, the SAVE statement is ignored.
o MESSAGE: Expression does not contribute to result
EXPLANATION: Part of a concatenated character string
expression is beyond the number of characters required to
completely fill the assignment. In the following example, TEST
will not be used:
CHARACTER NEW, OLD, TEST
NEW(1:10) = OLD(1:10)//TEST
o MESSAGE: Extra characters in source line were truncated
EXPLANATION: The compiler read a source line with a statement
field that exceeds the maximum column width. The compiler
truncates such lines at column 72 or 132, depending on the
value of -extend_source or the OPTIONS statement option in
effect.
o MESSAGE: Extra comma in format list
EXPLANATION: A format list contained an extra comma. For
example:
FORMAT (I4,)
o MESSAGE: Inconsistent declaration for an AUTOMATIC variable
EXPLANATION: Data declared as automatic (AUTOMATIC statement
or -automatic option) can not be made equivalent to another
variable using a EQUIVALENCE statement, nor can it be
initialized using a DATA statement or any data declaration
statement (such as REAL or INTEGER statement that gives it a
value).
o MESSAGE: Invalid END= keyword, ignored
EXPLANATION: The END keyword was used illegally in a WRITE or
direct access READ statement.
o MESSAGE: Invalid initialization of variable not in common
EXPLANATION: An attempt was made in a BLOCK DATA subprogram to
initialize a variable that was not in a common block.
o MESSAGE: Invalid statement label ignored
EXPLANATION: An improperly formed statement label (namely, a
label containing letters) was detected in columns 1 to 5 of an
initial line. When this error is encountered, the statement
label is ignored.
o MESSAGE: Length specified must match CHARACTER FUNCTION
declaration
EXPLANATION: The length specifications for all ENTRY names in
a character function subprogram must be the same. For example:
CHARACTER*15 FUNCTION F
CHARACTER*20 G
ENTRY G
o MESSAGE: Letter mentioned twice in IMPLICIT statement, last
type used
EXPLANATION: A letter was given an implicit data type more
than once. When this error is encountered, the last data type
given is used.
o MESSAGE: Lower bound greater than upper bound in array
declaration
EXPLANATION: The upper bound of a dimension declarator must be
equal to or greater than the lower bound.
o MESSAGE: Missing END statement, END is assumed
EXPLANATION: An END statement was missing at the end of the
last input file. When this error is encountered, an END
statement is inserted.
o MESSAGE: Multiple declaration of data type for variable, first
type used
EXPLANATION: A variable appeared in more than one data type
declaration statement. When this error is encountered, the
first type declaration is used.
o MESSAGE: Name longer than 31 characters
EXPLANATION: A symbolic name cannot exceed 31 characters.
When this error is encountered, the symbolic name is truncated
to 31 characters.
o MESSAGE: Name used in INTRINSIC statement is not an intrinsic
function
EXPLANATION: A function name that appeared in the INTRINSIC
statement was not an intrinsic function.
o MESSAGE: No matching CDEC$ END OPTIONS for CDEC$ OPTIONS
EXPLANATION: A CDEC$ OPTIONS directive must be terminated by
CDEC$ END OPTIONS.
o MESSAGE: No matching CDEC$ OPTIONS for CDEC$ END OPTIONS
EXPLANATION: A CDEC$ END OPTIONS directive terminates a CDEC$
OPTIONS section.
o MESSAGE: Non-blank characters truncated in string constant
EXPLANATION: A character or Hollerith constant was converted
to a data type that was not large enough to contain all of the
significant characters.
o MESSAGE: Non-zero digits truncated in hex constant
EXPLANATION: A hexadecimal constant was converted to a data
type that was not large enough to contain all the significant
digits.
o MESSAGE: No value
EXPLANATION: A value returned by a function is undefined.
o MESSAGE: Number of names exceeds number of values in data
initialization
EXPLANATION: The number of constants specified in a DATA
statement must match the number of variables or array elements
to be initialized. When a mismatch occurs, any extra variables
or array elements are not initialized.
o MESSAGE: Number of values exceeds number of names in data
initialization
EXPLANATION: The number of variables or array elements to be
initialized must match the number of constants specified in
data initialization. When a mismatch occurs, any extra
constant values are ignored.
o MESSAGE: Pointer and integer declarations conflict, using
pointer declaration
EXPLANATION: If a pointer variable is also declared to be an
integer of specific size (for example, INTEGER*4), and if a
pointer requires a different size on this platform (for
example, INTEGER*8 on Digital UNIX on Alpha systems), the
required pointer size is used instead of the integer size.
This may affect COMMON sizes and equivalenced variables.
o MESSAGE: Program may contain only one main entry routine
EXPLANATION: Two or more main program units were found,
possibly caused by missing FUNCTION or SUBROUTINE statements.
o MESSAGE: Record contains one or more misaligned fields
EXPLANATION: One or more fields are not naturally aligned in a
RECORD structure because the -vms or -align norecords option
was specified (causing Digital Fortran 77 to pack records
instead of naturally aligning them).
o MESSAGE: Record too long - record truncated
EXPLANATION: Source file line exceeded the maximum line
length.
o MESSAGE: Redundant continuation mark ignored
EXPLANATION: A continuation mark was detected where an initial
line is required. When this error is encountered, the
continuation mark is ignored.
o MESSAGE: Statement cannot terminate a DO loop
EXPLANATION: The terminal statement of a DO loop cannot be a
GO TO, arithmetic IF, RETURN, block IF, ELSE, ELSE IF, END IF,
DO, or END statement.
o MESSAGE: String constant truncated to maximum length
EXPLANATION: A character or Hollerith constant can contain up
to 2000 characters.
o MESSAGE: String too long - truncated to 31 characters
EXPLANATION: A character constant specified in a CDEC$ TITLE,
CDEC$ SUBTITLE, or CDEC$ IDENT directive exceeded 31
characters. The truncated character value will be used.
o MESSAGE: This feature is unsupported on ULTRIX
EXPLANATION: The program attempted to use a VAX FORTRAN I/O
feature that is not available on ULTRIX or Digital UNIX
systems. If the resulting program is run on either system,
this construct will be ignored. See your user manual for
information on VAX FORTRAN compatibility.
o MESSAGE: This intrinsic routine name is not supported on this
system, assumed EXTERNAL
EXPLANATION: The specified intrinsic name is not known and is
assumed to be EXTERNAL.
o MESSAGE: Unexpected Hollerith constant in integer context,
integer value will be used
EXPLANATION: A Hollerith constant was specified in a context
where an integer value was expected.
o MESSAGE: Use of implicit with declaration warnings
EXPLANATION: An IMPLICIT statement was used in a program
compiled with the -warn declarations option.
o MESSAGE: Value for xxx out of range, defaulting to xxx
EXPLANATION: Command line error. For example:
$ f77 -O15 x.f
The range of values allowed for -O is 0-4. 15 is out of range.
The default value of 4 is used instead.
o MESSAGE: Variable is used before its value has been defined
EXPLANATION: The specified variable has not been assigned a
value before it is used in an assignment or similar statement.
You can disable this message by compiling with -warn
nouninitialized.
o MESSAGE: Volatile access appears unaligned, but must be
aligned at run-time
EXPLANATION: The compiler found a usage of a volatile data
item that is an unaligned reference. This kind of volatile
unaligned access may cause an unrecoverable alignment fault or
incorrect results. For example:
common /b/ c, s, l
character c
integer*2 s
integer*4 l
volatile s, l
l=2
The store to l is unaligned. The fix is to change the data
layout so that l is aligned properly.
Not an error message and does not call for corrective action.
However, the informational message informs you that either a
correct Digital Fortran 77 statement may have unexpected results or
you have used a Digital Fortran 77 extension to FORTRAN-77.
The informational messages follow (in alphabetical order):
o MESSAGE: Character or Hollerith constant continued across
lines; may be non-portable
EXPLANATION: If you need long character strings that don't fit
conveniently on a single line, use the concatenate operator
(//) to do it in a portable manner. For example:
A = 'ABC' //
x 'DEF'
o MESSAGE: Default STATUS='UNKNOWN' used in OPEN statement
EXPLANATION: The OPEN statement default STATUS='UNKNOWN' may
cause an old file to be inadvertently modified.
o MESSAGE: Do loop increment is 0
EXPLANATION: The value of the DO loop increment was zero.
o MESSAGE: Duplicate IDENT ignored
EXPLANATION: Two or more CDEC$ IDENT directives were used in a
source module to specify the identification field of the object
module. The first CDEC$ IDENT directive is used.
o MESSAGE: Extension to FORTRAN-77: arithmetic expression
required
EXPLANATION: A logical expression was used in an arithmetic IF
statement.
o MESSAGE: Extension to FORTRAN-77: CHARACTER*(*) argument used
as function
EXPLANATION: A formal argument used as a function was declared
as CHARACTER*(*). The FORTRAN-77 standard requires the length
to be an integer constant.
o MESSAGE: Extension to FORTRAN-77: Character required
EXPLANATION: A character variable was initialized with a
noncharacter value by means of a DATA statement.
o MESSAGE: Extension to FORTRAN-77: COMMON block has same name
as PARAMETER constant
EXPLANATION: A COMMON block was declared to have the same name
as a PARAMETER constant, or a PARAMETER constant was declared
to have the same name as a previously declared COMMON block.
o MESSAGE: Extension to FORTRAN-77: Concatenation of dummy
argument
EXPLANATION: A character dummy argument appeared as an operand
in a concatenation operation.
o MESSAGE: Extension to FORTRAN-77: DATA statement out of order
EXPLANATION: A DATA statement occurred prior to a declaration
statement. All DATA statements must occur after the
declaration section of a program.
o MESSAGE: Extension to FORTRAN-77: Function or Entry name
undefined
EXPLANATION: A value was not assigned to either the function
name or the entry point name within the body of the function.
o MESSAGE: Extension to FORTRAN-77: Integer expression required
EXPLANATION: One of the following items was not of type
integer:
- Logical unit number
- Record specifier, REC=recspec
- Arithmetic expression of a computed GOTO statement
- RETURN [I]
- Subscript expression
- Array dimension bounds
- Character substring bounds expressions
o MESSAGE: Extension to FORTRAN-77: Logical expression required
EXPLANATION: One of the following syntax extensions was
detected:
- Numeric expression in a logical IF statement
- Numeric expression in a block IF statement
- Value other than .TRUE. or .FALSE. assigned to a
logical variable
- Logical variable initialized with a nonlogical value
by means of a DATA statement
o MESSAGE: Extension to FORTRAN-77: Missing array subscripts
EXPLANATION: Only one subscript was used to reference a
multidimensional array in an EQUIVALENCE statement.
o MESSAGE: Extension to FORTRAN-77: Mixed numeric and character
elements in COMMON
EXPLANATION: A common block must not contain both numeric and
character data.
o MESSAGE: Extension to FORTRAN-77: Mixed numeric and character
elements in EQUIVALENCE
EXPLANATION: A numeric variable or numeric array element
cannot be equivalenced to a character variable or character
array element.
o MESSAGE: Extension to FORTRAN-77: More than 19 continuation
lines
EXPLANATION: More than 19 continuation lines were defined for
the statement.
o MESSAGE: Extension to FORTRAN-77: Negative implied-DO
iteration count
EXPLANATION: The iteration count of an implied DO was
negative.
o MESSAGE: Extension to FORTRAN-77: Nonstandard array bound
EXPLANATION: An error was found in a DIMENSION statement
during standards syntax checking (-stand syntax). One of the
bounds of the variable being dimensioned contains something
that is not allowed by the standard. For example:
subroutine foo (a,jjj)
dimension jjj(10,10)
dimension a(jjj(2,3), jjj(5,6))
The bounds for a (jjj(2,3) and jjj(5,6)) are array references,
and these are not allowed by the standard.
o MESSAGE: Extension to FORTRAN-77: Nonstandard branch into
block
EXPLANATION: A nonstandard branch into a DO loop or IF block
was detected.
o MESSAGE: Extension to FORTRAN-77: nonstandard list directed
internal I/O
EXPLANATION: A nonstandard list-directed internal read or
write statement was used.
o MESSAGE: Extension to FORTRAN-77: nonstandard comment
EXPLANATION: FORTRAN-77 allows only the characters "C" and "*"
to begin a comment line; "c", "D", "d", and "!" are extensions
to FORTRAN-77.
o MESSAGE: Extension to FORTRAN-77: nonstandard constant
EXPLANATION: The following constant forms are extensions to
FORTRAN-77:
Form Example
---- -------
Hollerith nH.....
Typeless 'xxxx'X or 'oooo'O
Hexadecimal Zxxxx
Complex with
PARAMETER components
COMPLEX*16 (www.xxxDn, yyy.zzzDn)
o MESSAGE: Extension to FORTRAN-77: nonstandard continuation
character
EXPLANATION: A nonstandard character was used as a
continuation indicator.
o MESSAGE: Extension to FORTRAN-77; nonstandard data type
specification
EXPLANATION: The following DATA type specifications are
extensions to FORTRAN-77. The FORTRAN-77 equivalent is given
where available. This message is issued when these types are
used in the IMPLICIT statement or in a numeric type statement.
Extension Standard
--------- --------
BYTE --
LOGICAL*1 --
LOGICAL*2 LOGICAL (with -noi4 specified)
LOGICAL*4 LOGICAL
INTEGER*1 --
INTEGER*2 INTEGER (with -noi4 specified)
INTEGER*4 INTEGER
REAL*4 REAL
REAL*8 DOUBLE PRECISION
COMPLEX*8 COMPLEX
COMPLEX*16 --
DOUBLE COMPLEX --
o MESSAGE: Extension to FORTRAN-77: Nonstandard DATA
initialization
EXPLANATION: An element was initialized in either of the
following ways:
- In a blank common block
- Outside the BLOCK DATA structure (and the element
is in a named COMMON block)
o MESSAGE: Extension to FORTRAN-77: nonstandard FORMAT
statement item
EXPLANATION: The following format field descriptors are
extensions to FORTRAN-77:
Descriptor Aspect
---------- ------
$ All forms
A,L,I,F,E,G,D Default field width forms
P Without scale factor
o MESSAGE: Extension to FORTRAN-77: Nonstandard function return
type
EXPLANATION: A function or entry point was declared with a
nonstandard data type.
o MESSAGE: Extension to FORTRAN-77: nonstandard intrinsic
function
EXPLANATION: A nonstandard intrinsic function was used.
o MESSAGE: Extension to FORTRAN-77: nonstandard keyword
EXPLANATION: A nonstandard keyword was used.
o MESSAGE: Extension to FORTRAN-77: nonstandard lexical item
EXPLANATION: One of the following nonstandard lexical items
was used:
- Alternate return specifier with an ampersand (&)
in a CALL statement
- Apostrophe (') form of record specifier in a direct
access I/O statement
- Variable format expression
o MESSAGE: Extension to FORTRAN-77: Nonstandard loop expression
EXPLANATION: The upper-bound expression, lower-bound
expression, or increment expression of a DO loop was not of
type integer, real, or double precision.
o MESSAGE: Extension to FORTRAN-77: nonstandard name
EXPLANATION: A name longer than six characters or one that
contained a dollar sign ($) or an underscore (_) was used.
o MESSAGE: Extension to FORTRAN-77: nonstandard operator
EXPLANATION: The operators .XOR., %VAL, %REF, and %LOC are
extensions to FORTRAN-77. The standard form of .XOR. is
.NEQV. The % operators are extensions provided to allow access
to non-FORTRAN parts of the VMS environment.
o MESSAGE: Extension to FORTRAN-77: nonstandard sharing of
ENDDO terminator.
EXPLANATION: ENDDO is an extension to FORTRAN-77, although it
is standard in Fortran 90. The Fortran 90 standard does not
include ENDDO as a valid action-statement for terminating
multiple nested DO-loops. It should also be noted that Fortran
90 considers shared DO termination obsolescent.
Consider the following:
DO 100 I=1,10
DO 100 J=1,20
IARRAY(J,I) = 0
100 ENDDO
......^
%FORT-I-EXT_ENDDO, Extension to FORTRAN-77: nonstandard sharing of
ENDDO terminator.
END
The code can be corrected as follows:
DO I=1,10
DO J=1,20
IARRAY(J,I) = 0
ENDDO
ENDDO
END
o MESSAGE: Extension to FORTRAN-77: nonstandard statement type
EXPLANATION: A nonstandard statement type was used.
o MESSAGE: Extension to FORTRAN-77: nonstandard syntax
EXPLANATION: One of the following syntax extensions was
specified:
PARAMETER name = value --> Error: No parentheses
type name/value/ --> Error: Data initialization in
type declaration
DATA (ch(exp1:exp2),i=lb,ub,inc)/values/)
--> Error:Substring initialization with
implied-DO in DATA statement
CALL name(arg2,,arg3) --> Error: Null actual argument
READ (...),iolist --> Error: Comma between I/O control
and element lists
PARAMETER (name2=ABS(name1)) --> Error: Function use in
PARAMETER statement
e1 ** -e2 --> Error: Two consecutive operators
o MESSAGE: Extension to FORTRAN-77: Nonstandard use of array
EXPLANATION: One of the following extensions was detected:
- An array was used as a FILE specification in an
OPEN statement.
- The file name of an INQUIRE statement was a numeric
scalar reference or a numeric array name reference.
o MESSAGE: Extension to FORTRAN-77: nonstandard use of
character constant
EXPLANATION: A character constant was used in an assignment
statement where a numeric value is required.
o MESSAGE: Extension to FORTRAN-77: Nonstandard use of field
reference
EXPLANATION: A record reference (for example,
record-name.field-name) was used in a program compiled with
-stand syntax.
o MESSAGE: Extension to FORTRAN-77: nonstandard use of
intrinsic!/!function as actual argument
EXPLANATION: The FORTRAN 77 standard does not allow the use of
type conversion (INTEGER, REAL, etc.), lexical relationship
(LGE, LGT, etc.) or minimum and maximum functions (MIN, MAX,
etc.) as actual arguments.
o MESSAGE: Extension to FORTRAN-77: statement function
argument!/!name same as non-variable
EXPLANATION: A statement function dummy argument had the same
name as an entity other than a variable or a common block (for
example, a PARAMETER constant).
o MESSAGE: Extension to FORTRAN-77: tab indentation or
lowercase source
EXPLANATION: The use of tab indentation or lowercase letters
in source code is an extension to FORTRAN-77.
o MESSAGE: Invalid qualifier or qualifier value in OPTIONS
statement
EXPLANATION: An invalid qualifier or qualifier value was
specified in the OPTIONS statement. When this error is
encountered, the qualifier is ignored.
o MESSAGE: Missing CASE statement in SELECT CASE construct
EXPLANATION: There are no CASE statements between a SELECT
CASE and its ENDSELECT statement. While this is legal, it is
usually a mistake in the program.
o MESSAGE: No path to this statement
EXPLANATION: Program control could not reach this statement.
When this situation occurs, the statement is deleted. For
example:
10 I = I + 1
GO TO 10
STOP
You can disable this message by compiling with -warn
nounreachable.
o MESSAGE: Not yet implemented
EXPLANATION: The specified feature has not been implemented.
o MESSAGE: Routine xxx does not return a value
EXPLANATION: A subroutine which doesn't return a value was
used where a value is expected. For example:
T = SUB(J)
...
SUBROUTINE SUB(I)
o MESSAGE: Statement function xxx is never called
EXPLANATION: A statement function (named xxx) was declared but
never used. This could be caused by a missing DIMENSION
statement that caused a variable assignment to be interpreted
as a statement function.
You can disable this message by compiling with -warn
nouncalled.
o MESSAGE: Unrecognized directive ignored
EXPLANATION: A directive was detected in the first five
columns of a source code statement. The directive was not
recognized or the remainder of the directive contains illegal
syntax.
Errors that occur during execution of your program are reported by
diagnostic messages from the Run-Time Library. These messages can
result from hardware conditions, file system errors, errors
detected by the Digital Fortran 77 I/O system, errors that occur
during transfer of data between the program and an internal record,
computations that cause overflow or underflow, incorrect calls to
the Run-Time Library, problems in array descriptions, and
conditions detected by the operating system.
Run-Time diagnostic messages have the following format:
forrtl: severity: message_text
forrtl: Identifies the source as the Digital Fortran
Run-Time Library
severity: Possibilities: severe, error, warning, or
informational
message_text: Explains the event that caused the message
Must be corrected. The program's execution is terminated when the
error is encountered, unless for I/O statements the program uses
the END or ERR I/O statement specifiers to transfer control,
perhaps to a routine that uses the IOSTAT specifier (see your user
manual).
The severe messages follow (in alphabetical order):
o MESSAGE: Adjustable array dimension error
NUMBER: 93
EXPLANATION: Upon entry to a subprogram, one of the following
errors was detected during the evaluation of dimensioning
information:
- An upper-dimension bound was less than a
lower-dimension bound.
- The dimensions implied an array that was larger
than addressable memory.
o MESSAGE: Attempt to access non-existent record
NUMBER: 36
EXPLANATION: A direct-access READ or FIND statement attempted
to access beyond the end of a relative file (or a sequential
file on disk with fixed-length records) or access a record that
was previously deleted in a relative file.
o Array index out of bounds (SIGTRAP)
NUMBER: 138
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
The cause is an array subscript that is outside the dimensioned
boundaries of that array. Try recompiling using the -check
bounds option (perhaps with the f77_dump_flag environment
variable set) or examine the core dump file to determine the
source code in error.
o MESSAGE: Array index out of bounds for index n (SIGTRAP)
NUMBER: 139
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
The cause is an array subscript that is outside the dimensioned
boundaries of the array index n. Try recompiling using the
-check bounds option (perhaps with the f77_dump_flag
environment variable set) or examine the core dump file to
determine the source code in error.
o MESSAGE: BACKSPACE error
NUMBER: 23
EXPLANATION: An error condition was detected during execution
of a BACKSPACE statement.
o MESSAGE: Cannot overwrite existing file
NUMBER: 10
EXPLANATION: Specified file xxx already existed when OPEN
statement specified STATUS='NEW' (create new file) using I/O
unit x. Make sure correct file name, directory path, unit, and
so forth were specified in the source program. Decide whether
to:
- Rename or remove the existing file before rerunning
the program.
- Modify the source file to specify different file
specification, I/O unit, or OPEN file STATUS.
o MESSAGE: Cannot stat file
NUMBER: 108
EXPLANATION: Attempted stat operation on the indicated file
failed. Make sure correct file and unit were specified.
o MESSAGE: CLOSE error
NUMBER: 28
EXPLANATION: An error condition was detected by the Digital
Fortran RTL I/O system during execution of a CLOSE statement.
o MESSAGE: DELETE error
NUMBER: 55
EXPLANATION: An error condition was detected by the Digital
Fortran RTL I/O system during execution of a DELETE statement.
o MESSAGE: Divide by zero check (SIGTRAP)
NUMBER: 137
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
Examine core dump file for possible cause.
o MESSAGE: Duplicate file specifications
NUMBER: 21
EXPLANATION: Multiple attempts were made to specify file
attributes without an intervening close operation. For
example, a DEFINE FILE statement was followed by another DEFINE
FILE statement or an OPEN statement.
o MESSAGE: ENDFILE error
NUMBER: 33
EXPLANATION: One of the following conditions occurred:
- The file was not a sequential organization file with
variable-length records.
- The file was not opened for sequential or append access.
- An unformatted file did not contain segmented records.
- The Digital Fortran RTL I/O system detected an error during
execution of an ENDFILE statement.
o MESSAGE: End-of-file during read
NUMBER: 24
EXPLANATION: One of the following conditions occurred:
- A Digital Fortran RTL I/O system end-of-file condition
was encountered during execution of a READ statement
that did not contain an END, ERR, or IOSTAT specification.
- An end-of-file record written by the ENDFILE statement
was encountered during execution of a READ statement
that did not contain an END, ERR, or IOSTAT specification.
- An attempt was made to read past the end of an internal
file character string or array during execution of a READ
statement that did not contain an END, ERR, or IOSTAT
specification.
o MESSAGE: Error during read
NUMBER: 39
EXPLANATION: The Digital Fortran RTL I/O system detected an
error condition during execution of a READ statement.
o MESSAGE: Error during write
NUMBER: 38
EXPLANATION: The Digital Fortran RTL I/O system detected an
error condition during execution of a WRITE statement.
o MESSAGE: File name specification error
NUMBER: 43
EXPLANATION: The file name was specified erroneously.
o MESSAGE: File not found
NUMBER: 29
EXPLANATION: A file with the specified name could not be found
during an open operation.
o MESSAGE: FIND error
NUMBER: 57
EXPLANATION: The Digital Fortran RTL I/O system detected an
error condition during execution of a FIND statement.
o MESSAGE: Floating inexact
NUMBER: 140
EXPLANATION: A floating-point arithmetic or conversion
operation gave a result that differs from the mathematically
exact result. This trap is reported if the rounded result of
an IEEE operation is not exact.
o MESSAGE: Floating overflow in math library
NUMBER: 88
EXPLANATION: A floating-point overflow condition was detected
during execution of a math library procedure.
o MESSAGE: Floating underflow in math library
NUMBER: 89
EXPLANATION: A floating-point underflow condition was detected
during execution of a math library procedure. The result
returned was zero.
o MESSAGE: Format/variable-type mismatch
NUMBER: 61
EXPLANATION: An attempt was made either to read or write a
real variable with an integer field descriptor (I, L, B, O, or
Z), or to read or write an integer or logical variable with a
real field descriptor (D, E, F, or G).
o MESSAGE: Formatted I/O to unit open for unformatted transfers
NUMBER: 257
EXPLANATION: Attempted formatted I/O (such as list-directed or
namelist I/O) to a unit where the OPEN statement indicated the
file was unformatted (FORM keyword). Check that the correct
unit (file) was specified.
If the FORM keyword was not specified in the OPEN statement and
the file should contain formatted data, specify
FORM='FORMATTED' in the OPEN statement. Otherwise, if
appropriate, use unformatted I/O.
o MESSAGE: Inconsistent file organization
NUMBER: 51
EXPLANATION: The file organization specified in an OPEN
statement did not match the organization of the existing file.
o MESSAGE: Inconsistent OPEN/CLOSE parameters
NUMBER: 46
EXPLANATION: Specifications in an OPEN or CLOSE statement were
inconsistent. Some invalid combinations follow:
- READONLY with STATUS='NEW' or STATUS='SCRATCH'
- ACCESS='APPEND' with READONLY, STATUS='NEW' or
STATUS='SCRATCH'
- DISPOSE='SAVE', 'PRINT', or 'SUBMIT' with
STATUS='SCRATCH'
- DISPOSE='DELETE' with READONLY
o MESSAGE: Inconsistent record length
NUMBER: 37
EXPLANATION: One of the following conditions occurred:
o An attempt was made to create a new relative or direct
access file without specifying a record length.
o An existing file was opened in which the record length did
not match the record size given in an OPEN or DEFINE FILE
statement.
o An attempt was made to write to a relative or direct access
file that was not correctly created or opened.
o MESSAGE: Inconsistent record type
NUMBER: 44
EXPLANATION: The RECORDTYPE value in an OPEN statement did not
match the record type attribute of the existing file that was
opened.
o MESSAGE: Infinite format loop
NUMBER: 60
EXPLANATION: The format associated with an I/O statement that
included an I/O list had no field descriptors to use in
transferring those values.
o MESSAGE: Input conversion error
NUMBER: 64
EXPLANATION: During a formatted input operation, an invalid
character was detected in an input field, or the input value
overflowed the range representable in the input variable. The
value of the variable was set to zero.
o MESSAGE: Input record too long
NUMBER: 22
EXPLANATION: A record was read that exceeded the explicit or
default record length specified when the file was opened. To
read the file, use an OPEN statement with a RECL value (record
length) of the appropriate size. The RECL unit is bytes for
formatted files and longwords for unformatted files.
o MESSAGE: Input statement requires too much data
NUMBER: 67
EXPLANATION: An unformatted READ statement attempted to read
more data than existed in the record being read.
o MESSAGE: Insufficient virtual memory
NUMBER: 41
EXPLANATION: The Digital Fortran RTL attempted to exceed its
available virtual memory while dynamically allocating space.
To overcome this problem, increase the per-process data limit
by using the limit (C shell) or ulimit (Bourne and Korn shell)
commands before you run this program again (see your user
manual).
Determine whether the maximum per-process data size is already
allocated by checking the value of the maxdsiz parameter in the
system configuration or sysconfigtab file. If necessary,
increase its value. Changes do not take effect until the
system has been rebooted. (You do not need to rebuild the
kernel if you modify sysconfigtab.)
For more information about system configuration parameters, see
the "Digital UNIX System Tuning and Performance Management"
guide.
Before you try to run this program again, wait until the new
system resources take effect.
o MESSAGE: Integer overflow
NUMBER: 70
EXPLANATION: During an arithmetic operation, an integer value
exceeded byte, word, or longword range. The result of the
operation was the correct low-order part. Consider specifying
a larger integer data size. (Modify the source program or, for
an INTEGER declaration, possibly use the f77 flag -integer_size
nn).
For ranges of the various integer data types, see your user
manual.
o MESSAGE: Integer divide by zero
NUMBER: 71
EXPLANATION: During an integer arithmetic operation, an
attempt was made to divide by zero. The result of the
operation was set to the dividend, which is equivalent to
division by 1.
o MESSAGE: Internal consistency check failure
NUMBER: 8
EXPLANATION: Internal error. Please check that the program is
correct. Recompile if an error exists in the program.
If this error persists, submit an SPR.
o MESSAGE: Invalid argument to Fortran Run-Time Library
NUMBER: 48
EXPLANATION: The compiler passed an invalid or improperly
coded argument to the Digital Fortran RTL. This can occur if
the compiler is newer than the RTL in use.
o MESSAGE: Invalid argument to math library
NUMBER: 81
EXPLANATION: One of the mathematical procedures detected an
invalid argument value.
o MESSAGE: Invalid logical unit number
NUMBER: 32
EXPLANATION: A logical unit number greater than 2,147,483,647
or less than zero was used in an I/O statement.
o MESSAGE: Invalid reference to variable in NAMELIST input
NUMBER: 19
EXPLANATION: One of the following conditions occurred:
- The variable was not a member of the namelist group.
- An attempt was made to subscript a scalar variable.
- A subscript of the array variable was out-of-bounds.
- An array variable was specified with too many or too
few subscripts for the variable.
- An attempt was made to specify a substring of a non-
character variable or array name.
- A substring specifier of the character variable was
out-of-bounds.
- A subscript or substring specifier of the variable was
not an integer constant.
- An attempt was made to specify a substring using an
unsubscripted array variable.
o MESSAGE: Kernel breakpoint (SIGTRAP)
NUMBER: 131
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
Examine core dump for possible cause.
o MESSAGE: Keyword value error in OPEN statement
NUMBER: 45
EXPLANATION: An improper value was specified for an OPEN or
CLOSE statement keyword requiring a value.
o MESSAGE: List-directed I/O syntax error
NUMBER: 59
EXPLANATION: The data in a list-directed input record had an
invalid format, or the type of the constant was incompatible
with the corresponding variable. The value of the variable was
unchanged.
o MESSAGE: Logarithm of zero or negative value
NUMBER: 83
EXPLANATION: An attempt was made to take the logarithm of zero
or a negative number. The result returned was the reserved
operand, -0.
o MESSAGE: Mixed file access modes
NUMBER: 31
EXPLANATION: An attempt was made to use any of the following
combinations:
- Formatted and unformatted operations on the same unit
- An invalid combination of access modes on a unit,
such as direct and sequential
- A Digital Fortran RTL I/O statement on a logical unit that
was opened by a program coded in another language
o MESSAGE: No current record
NUMBER: 53
EXPLANATION: An attempt was made to REWRITE a record when the
current record was undefined. To define the current record,
execute a successful READ statement. You can optionally
perform an INQUIRE statement on the logical unit after the READ
statement and before the REWRITE statement. No other
operations on the logical unit can be performed between the
READ and REWRITE statements.
o MESSAGE: No such device
NUMBER: 42
EXPLANATION: A pathname included an invalid or unknown device
name when an OPEN operation was attempted.
o MESSAGE: Not a Fortran-specific error
NUMBER: 1
EXPLANATION: An error occurred in the user program or in the
RTL that was not a Digital Fortran 77-specific error and was
not reportable through any other Digital Fortran run-time
messages.
o MESSAGE: Not taken branch delay emulation (SIGTRAP)
NUMBER: 134
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
Examine core dump for possible cause.
o MESSAGE: OPEN or DEFINE FILE required
NUMBER: 26
EXPLANATION: A direct access READ, WRITE, or FIND, statement
was attempted for a file when no DEFINE FILE or OPEN statement
with ACCESS='DIRECT' was performed for that file.
o MESSAGE: Open failure
NUMBER: 30
EXPLANATION: An error was detected by the Digital Fortran RTL
I/O system while attempting to open a file in an OPEN, INQUIRE,
or other I/O statement. This message is issued when the error
condition is not one of the more common conditions for which
specific error messages are provided. It can occur if an OPEN
operation is attempted for one of the following files:
- A segmented file that was not on a disk or a raw
magnetic tape.
- A standard I/O file that had been closed.
o MESSAGE: Operation requires seek ability
NUMBER: 120
EXPLANATION: Attempted an operation on a file that requires
the ability to perform seeks on that file. Make sure the
correct unit, directory path, and file were specified.
o MESSAGE: Output statement overflows record
NUMBER: 66
EXPLANATION: An output statement attempted to transfer more
data than would fit in the maximum record size.
o MESSAGE: Overflow check (SIGTRAP)
NUMBER: 136
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
The cause is an integer overflow. Try recompiling using the
-check overflow option (perhaps with the f77_dump_flag
environment variable set) or examine the core dump file to
determine the source code in error.
o MESSAGE: Pathname error
NUMBER: 43
EXPLANATION: A pathname (or file name) given to an OPEN or
INQUIRE statement was not acceptable to the Digital Fortran RTL
I/O system.
o MESSAGE: Permission to access file denied, unit x, file xxx
NUMBER: 9
EXPLANATION: Check the mode (protection) of the specified
file. Make sure the correct file was being accessed. Change
the protection, specified file, or process used before
rerunning program.
o MESSAGE: Range error
NUMBER: 150
EXPLANATION: An integer value appeared in a context where the
value of the integer is outside the permissible range.
o MESSAGE: Record number outside range
NUMBER: 25
EXPLANATION: A direct access READ, WRITE, or FIND statement
specified a record number outside the range specified when the
file was opened.
o MESSAGE: Recursive I/O operation
NUMBER: 40
EXPLANATION: While processing an I/O statement for a logical
unit, another I/O operation on the same logical unit was
attempted, such as a function subprogram that performs I/O to
the same logical unit was referenced in an expression in an I/O
list or variable format expression.
o MESSAGE: REWIND error
NUMBER: 20
EXPLANATION: One of the following conditions occurred:
- The file was not a sequential file.
- The file was not opened for sequential or append access.
- The Digital Fortran RTL I/O system detected an error condition
during execution of a REWIND statement.
o MESSAGE: Segmented record format error
NUMBER: 35
EXPLANATION: An invalid segmented record control data word was
detected in an unformatted sequential file. The file was
probably either created with RECORDTYPE='FIXED' or 'VARIABLE'
in effect, or was created by a program written in a language
other than Fortran.
o MESSAGE: Significance lost in math library
NUMBER: 87
EXPLANATION: The magnitude of an argument or the magnitude of
the ratio of the arguments to a math library function was so
large that all significance in the result was lost. The result
returned was the reserved operand, -0.
o MESSAGE: Square root of negative value
NUMBER: 84
EXPLANATION: An argument required the evaluation of the square
root of a negative value. The result returned was the reserved
operand, -0.
o MESSAGE: String length error
NUMBER: 148
EXPLANATION: During a string operation, an integer value
appeared in a context where the value of the integer is outside
the permissible string length range. Try recompiling with the
-check bounds flag (perhaps with the f77_dump_flag environment
variable set) or examine the core file to determine the source
code causing the error.
o MESSAGE: Subscript out of range
NUMBER: 77
EXPLANATION: An array reference was detected outside the
declared array bounds.
o MESSAGE: Substring error
NUMBER: 149
EXPLANATION: An array subscript is outside the dimensioned
boundaries of an array. Try recompiling with the -check bounds
flag (perhaps with the f77_dump_flag environment variable set)
or examine the core file to determine the source code causing
the error.
o MESSAGE: Syntax error in format
NUMBER: 62
EXPLANATION: A syntax error was encountered while the RTL was
processing a format stored in an array or character variable.
o MESSAGE: Syntax error in NAMELIST input
NUMBER: 17
EXPLANATION: The syntax of input to a namelist READ statement
was incorrect.
o MESSAGE: Taken branch delay emulation (SIGTRAP)
NUMBER: 133
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
Examine core dump for possible cause.
o MESSAGE: Too many records in I/O statement
NUMBER: 27
EXPLANATION: An attempt was made to do one of the following:
- Read or write more than one record with an ENCODE
or DECODE statement.
- Write more records than existed.
o MESSAGE: Too many values for NAMELIST variable
NUMBER: 18
EXPLANATION: An attempt was made to assign too many values to
a variable during a namelist READ statement.
o MESSAGE: Undefined exponentiation
NUMBER: 82
EXPLANATION: An exponentiation that is mathematically
undefined was attempted, for example, 0.**0. The result
returned for floating-point operations was the reserved
operand, -0, and for integer operations, zero.
o MESSAGE: Unformatted I/O to unit open for formatted transfers
NUMBER: 256
EXPLANATION: Attempted unformatted I/O to a unit where the
OPEN statement indicated the file was formatted (FORM keyword).
Check that the correct unit (file) was specified.
If the FORM keyword was not specified in the OPEN statement and
the file should contain unformatted data, specify
FORM='UNFORMATTED' in the OPEN statement. Otherwise, if
appropriate, use formatted I/O (such as list-directed or
namelist I/O).
o MESSAGE: Unit already open
NUMBER: 34
EXPLANATION: A DEFINE FILE statement specified a logical unit
that was already opened.
o MESSAGE: User breakpoint (SIGTRAP)
NUMBER: 130
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
Examine core dump for possible cause.
o MESSAGE: User single step (SIGTRAP)
NUMBER: 135
EXPLANATION: Break exception generated a SIGTRAP signal
(described in signal(3)). Core dump file created.
Examine core dump for possible cause.
o MESSAGE: Variable format expression value error
NUMBER: 68
EXPLANATION: The value of a variable format expression was not
within the range acceptable for its intended use; for example,
a field width was less than or equal to zero. A value of 1 was
assumed, except for a P edit descriptor, for which a value of
zero was assumed.
o MESSAGE: Write to READONLY file
NUMBER: 47
EXPLANATION: A write operation was attempted to a file that
was declared READONLY in the OPEN statement that is currently
in effect.
o MESSAGE: Wrong number of arguments
NUMBER: 80
EXPLANATION: An improper number of arguments was used to call
a math library procedure.
Should be corrected. The program may continue execution, but the
output from this execution may be incorrect.
The error messages follow (in alphabetical order):
o MESSAGE: Floating divide by zero
NUMBER: 73
EXPLANATION: During a floating-point arithmetic operation, an
attempt was made to divide by zero.
o MESSAGE: Floating invalid
NUMBER: 65
EXPLANATION: During an arithmetic operation, the
floating-point values used in a calculation were invalid for
the type of operation requested, or invalid exceptional values.
For example, this occurs when requesting a log of the
floating-point values 0.0 or a negative number.
For certain arithmetic expressions, specifying the -check
nopower option can suppress this message. For information on
allowing exceptional IEEE values, see your user manual.
o MESSAGE: Floating overflow
NUMBER: 72
EXPLANATION: During an arithmetic operation, a floating-point
value exceeded the largest representable value for that data
type. For ranges of the various data types, see your user
manual.
o MESSAGE: Floating point exception
NUMBER: 75
EXPLANATION: A floating-point exception occurred. Core dump
file created. Possible causes include:
o Divide by zero
o Overflow
o An invalid operation, such as subtraction of infinite
values, multiplication of zero by infinity (without signs),
division of zero by zero or infinity by infinity
o Conversion of floating-point to fixed-point format when an
overflow prevents conversion
o MESSAGE: Floating underflow
NUMBER: 74
EXPLANATION: During an arithmetic operation, a floating-point
value became less than the smallest finite value for that data
type. On Alpha systems, the underflowed result is set to zero.
For ranges of the various data types, see the Data
Representation chapter in your user manual.
o MESSAGE: Fortran abort routine called
NUMBER: 266
EXPLANATION: The program called abort to terminate the
program.
o MESSAGE: IOT trap signal
NUMBER: 76
EXPLANATION: Core dump file created. Examine core dump for
possible cause of this IOT signal.
o MESSAGE: Output conversion error
NUMBER: 63
EXPLANATION: During a formatted output operation, the value of
a particular number could not be output in the specified field
length without loss of significant digits. When this situation
is encountered, the field is filled with asterisks.
o MESSAGE: Process interrupted (SIGINT)
NUMBER: 69
EXPLANATION: The process received the signal SIGINT.
Determine source of this interrupt signal (described in
signal(3)).
o MESSAGE: Process killed (SIGTERM)
NUMBER: 78
EXPLANATION: The process received the signal SIGTERM.
Determine source of this software termination signal (described
in signal(3)).
o MESSAGE: Process quit (SIGQUIT)
NUMBER: 79
EXPLANATION: The process received the signal SIGQUIT. Core
dump file created. Determine source of this quit signal
(described in signal(3)).
Should be investigated. The program continues execution, but the
output from this execution may be incorrect.
The warning messages follow (in alphabetical order):
o MESSAGE: Could not open message catalog: formsg.cat
NUMBER: none
EXPLANATION: The Digital Fortran 77 message catalog file was
not found on this system. For more information, see your user
manual or installation guide.
For informational purposes only. Unless it accompanies another
message, the program continues.
The informational messages follow (in alphabetical order):
o MESSAGE: Check environment variable NLSPATH and protection of
path-name/for_msg.dat
NUMBER: none
EXPLANATION: The Digital Fortran 77 message catalog file was
not found on this system. For more information, see your user
manual or your installation guide.
o MESSAGE: Check location/protection of NLS and
/usr/lib/formsg.dat
NUMBER: none
EXPLANATION: The Digital Fortran 77 message file was not found
on this system. See your user manual for more information.
o MESSAGE: nn floating divide-by-zero traps
NUMBER: 299
EXPLANATION: The total number of floating-point divide-by-zero
traps encountered during program execution was nn. This
summary message appears at program completion.
o MESSAGE: nn floating invalid traps
NUMBER: 297
EXPLANATION: The total number of floating-point invalid data
traps encountered during program execution was nn. This
summary message appears at program completion.
o MESSAGE: nn floating overflow traps
NUMBER: 298
EXPLANATION: The total number of floating-point overflow traps
encountered during program execution was nn. This summary
message appears at program completion.
o MESSAGE: Floating-point conversion failed
NUMBER: 95
EXPLANATION: The attempted unformatted read or write of
non-native floating-point data failed. One of the following
conditions occurred for a non-native floating-point value:
o The value exceeded the allowable maximum value for the
equivalent native format and was set equal to infinity
(plus or minus).
o The value was infinity (plus or minus) and was set to
infinity (plus or minus).
o The value was invalid and set to Not-a-Number (NaN).
Make sure the correct file was specified. Make sure the record
layout matches the format Digital Fortran 77 is expecting.
Check that the correct non-native floating-point data format
was specified, as described in your user manual.
o MESSAGE: nn floating underflow traps
NUMBER: 300
EXPLANATION: The total number of floating-point underflow
traps encountered during program execution was nn. This
summary message appears at program completion.
o MESSAGE: Format syntax error at or near xx
NUMBER: 58
EXPLANATION: Check the statement containing xx, a character
substring from the format string, for a format syntax error.
For information about FORMAT statements, refer to the language
reference manual.
o MESSAGE: Fortran error message number is nnn
NUMBER: none
EXPLANATION: The Digital Fortran 77 message catalog file was
not found on this system. For information about the message
catalog file location, see your user manual or installation
guide.
o MESSAGE: Unit not connected
NUMBER: 11
EXPLANATION: The specified unit was not open at the time of
the attempted I/O operation. Check to see if the correct unit
number was specified. If appropriate, use an OPEN statement to
explicitly open the file (associates the file with the unit
number).
A FORMAT statement specifies the format in which data is to be transferred as well as the conversion (editing) required to achieve that format. FORMAT statements are nonexecutable statements used with formatted I/O statements and with ASSIGN, ENCODE, and DECODE statements. Fields defined by a FORMAT statement can contain variable format expressions. A variable format expression is an integer variable or expression enclosed in angle brackets that takes the place of an integer constant. The value of the variable or variables can change during program execution.
Default field descriptor values are as follows:
Field
Descriptor List Element w d e
--------------------------------------------------------------
I,O,Z BYTE,INTEGER*1,LOGICAL*1 7
I,O,Z INTEGER*2,LOGICAL*2 7
I,O,Z INTEGER*4,LOGICAL*4 12
I,O,Z INTEGER*8(Alpha),LOGICAL*8(Alpha) 23
O,Z REAL*4 12
O,Z REAL*8 23
O,Z REAL*16 (Alpha) 44
O,Z CHARACTER*n MAX(7,3*n)
L LOGICAL*1,LOGICAL*2, 2
LOGICAL*4,LOGICAL*8(Alpha)
F,E,G,D REAL*4,COMPLEX*8 15 7 2
F,E,G,D REAL*8,COMPLEX*16 25 16 2
F,E,G,D REAL*16 (Alpha) 42 33 3
A LOGICAL*1 1
A LOGICAL*2,INTEGER*2 2
A LOGICAL*4,INTEGER*4 4
A LOGICAL*8(Alpha),INTEGER*8(Alpha) 8
A REAL*4,COMPLEX*8 8
A REAL*8,COMPLEX*16 8
A REAL*16 (Alpha) 16
A CHARACTER*n n
The general form of a FORMAT statement is as follows:
FORMAT (q1 f1s1 f2s2 ... fnsn qn)
qn Is zero or more slash (/) record terminators.
fn Is a field descriptor, an edit descriptor, or
a group of field and edit descriptors enclosed
in parentheses.
sn Is a field separator (a comma or slash). A
comma can be omitted in the following cases:
o Between a P edit descriptor and an immediately
following F, E, D, or G edit descriptor.
o Before or after a slash (/) record terminator.
o Before or after a colon (:) edit descriptor.
The "field descriptor" has one of the following forms:
[r]c [r]cw [r]cw.m [r]cw.d[Ee]
r Is the optional repeat count. (If you omit "r",
the repeat count is assumed to be 1.)
c Is a format code (I,O,Z,F,E,D,G,L, or A).
w Is the external field width in characters. Each
data item in the external medium is called an
external field.
m Is the minimum number of characters that must appear
in the field (including leading zeros).
d Is the number of characters to the right of the decimal point.
E Is an exponent field.
e Is the number of characters in the exponent.
The ranges for "r", "w", "m", "d", and "e" are as follows:
Term Range
---- __________
r 1 to 2147483647 (2**31-1)
w 1 to 2147483647
m 0 to 32767 (2**15-1)
d 0 to 32767
e 1 to 32767
The terms must all be unsigned integer constants or variable format
expressions.
You cannot use PARAMETER constants for "r", "w", "m", "d", or "e".
The "edit descriptor" has one of the following forms:
c [n]c c[n]
c Is a format code (X,T,TL,TR,SP,SS,S,BN,BZ,P,H,
'...', "...", Q, $, or :).
n Is the optional number of characters or character
positions.
The term "n" must be an unsigned integer constant (for format code
P, it can be signed or unsigned) or a variable format expression.
The value of "n" for P must be within the range -128 to 127.
For all other format codes, the value of "n" must be within the
range 1 through 2147483647 (2**31-1); actual useful ranges may be
constrained by record sizes (RECL) and the file system.
A format descriptor can be one of the following:
Field descriptor -- Defines the size and format of a data
item. Each field descriptor corresponds to the next data
item in the statement's I/O list.
Edit descriptor -- Specifies editing functions to be
performed on data items.
Format descriptors are generally separated by commas, but you can
also use the slash (/) record terminator to separate them. A slash
terminates input or output of the current record and initiates a
new record; for example:
WRITE (6,40) K,L,M,N,O,P
40 FORMAT (3I6.6/I6,2F8.4)
The preceding statements are equivalent to the following:
WRITE (6,40) K,L,M
40 FORMAT (3I6.6)
WRITE (6,50) N,O,P
50 FORMAT (I6,2F8.4)
Multiple slashes cause the system to bypass input records or output
blank records. If "n" consecutive slashes appear between two field
or edit descriptors, (n-1) records are skipped on input, or (n-1)
blank records are output. The first slash terminates the current
record. The second slash terminates the first skipped or blank
record, and so on.
However, "n" slashes at the beginning or end of a format
specification result in "n" skipped or blank records. This is
because the opening and closing parentheses of the format
specification are themselves a record initiator and terminator,
respectively.
You can apply the field descriptors I, O, Z, F, E, D, G, L, and A
to a number of successive data fields by preceding the field
descriptor with an unsigned integer constant (PARAMETER constants
are not allowed) specifying the number of repetitions. This
constant is called a repeat count.
For example, the following two statements are equivalent:
20 FORMAT (E12.4,E12.4,E12.4,I5,I5,I5,I5)
20 FORMAT (3E12.4,4I5)
Similarly, you can apply a group of field descriptors repeatedly to
data fields by enclosing these field descriptors in parentheses and
preceding them with an unsigned integer constant. The integer
constant is called a group repeat count. For example, the
following two statements are equivalent:
50 FORMAT (I8,I8,F8.3,E15.7,F8.3,E15.7,F8.3,E15.7,I5,I5)
50 FORMAT (2I8,3(F8.3,E15.7),2(I5))
An H or Q field descriptor, which could not otherwise be repeated,
can be enclosed in parentheses and treated as a group repeat
specification.
When the last closing parenthesis of the format specification is reached, format control determines whether more I/O list elements are to be processed. If not, format control terminates. However, if additional list elements remain, part or all of the format specification is reused in a process called format reversion. In format reversion, the current record is terminated, a new one is initiated, and format control reverts to the group repeat specification whose opening parenthesis matches the next-to-last closing parenthesis of the format specification. If the format does not contain a group repeat specification, format control returns to the initial opening parenthesis of the format specification. Format control continues from that point.
By enclosing an expression in angle brackets, you can use it in a
FORMAT statement wherever you can use an integer (except as the
specification of the number of characters in the H field). For
example:
20 FORMAT (I)
When the format is scanned, the preceding statement performs an I
(integer) data transfer with a field width of J+1. The expression
is reevaluated each time it is encountered in the normal format
scan.
The following rules apply to variable format expressions:
- If the expression is not of integer data type, it is
converted to integer data type before being used.
- The expression can be any valid Fortran expression,
including function calls and references to dummy arguments.
- The value of a variable format expression must obey the
restrictions on magnitude applying to its use in the
format, or an error occurs.
- Variable format expressions are not permitted in run-time
formats.
Variable format expressions are evaluated each time they are
encountered in the scan of the format. If the value of the
variable used in the expression changes during the execution of the
I/O statement, the new value is used the next time the format item
containing the expression is processed.
Field descriptors: +-----------------------------------+ | Function | Format | +--------------------+--------------+ | Integer | Iw[.m] | | Octal | Ow[.m] | | Hexadecimal | Zw[.m] | | Real number | Fw.d | | Exponential form | Ew.d[Ee] | | D exponential form | Dw.d | | G exponential form | Gw.d[Ee] | | Logical | Lw | | Character | A[w] | +--------------------+--------------+ NOTE: Transfer complex numbers as two real (F, E, D, or G) numbers.