Trailing-Edge
-
PDP-10 Archives
-
BB-D480F-BB_1985_short
-
fortra.doc
There are 10 other files named fortra.doc in the archive. Click here to see a list.
Fortran-10 Version 10 -- Changes from V7 to V10
May 1985
Copyright (c) 1985, Digital Equipment Corporation, Maynard, Mass., USA
This software is furnished under a license and may be used and
copied only in accordance with the terms of such license and with the
inclusion of the above copyright notice. This software or any other
copies thereof may not be provided or otherwise made available to any
other person. No title to and ownership of the software is hereby
transferred.
The information in this software is subject to change without
notice and should not be construed as a commitment by Digital Equipment
Corporation.
Digital assumes no responsibility for the use or reliability of
its software on equipment which is not supplied by Digital.
FORTRA.DOC -- Fortran-10 Version 10
1.0 SUMMARY . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Bibliography . . . . . . . . . . . . . . . . . . . 2
1.2 Monitors . . . . . . . . . . . . . . . . . . . . . 2
1.3 Related System Software . . . . . . . . . . . . . 2
2.0 NEW FEATURES . . . . . . . . . . . . . . . . . . . . 4
2.1 INQUIRE Statement . . . . . . . . . . . . . . . . 4
2.1.1 Returned Values . . . . . . . . . . . . . . . . 4
2.1.2 INQUIRE By Unit . . . . . . . . . . . . . . . . 6
2.1.3 INQUIRE By File . . . . . . . . . . . . . . . . 6
2.1.4 Error Processing . . . . . . . . . . . . . . . . 8
2.2 Compatibility Flagger . . . . . . . . . . . . . . 9
2.2.1 New Command Switches . . . . . . . . . . . . . . 9
2.2.2 Warning Messages . . . . . . . . . . . . . . . 10
2.3 Support Of Industry-Compatible Magtape . . . . . 11
2.3.1 TAPEFORMAT Keyword . . . . . . . . . . . . . . 11
2.3.2 RECORDTYPE Keyword . . . . . . . . . . . . . . 11
2.3.3 CARRIAGECONTROL Keyword . . . . . . . . . . . 13
2.3.4 Implementation Note . . . . . . . . . . . . . 13
2.3.5 Reading And Writing Tapes Using Fortran V10 . 14
2.3.5.1 Mounting And Dismounting Tapes . . . . . . . 14
2.3.6 Reading And Writing Tapes On VMS . . . . . . . 14
2.3.6.1 Mounting Tapes (Labeled And Unlabeled) . . . 14
2.4 Changes In I/O Statements . . . . . . . . . . . 15
2.4.1 Changes Incompatible With Version 7 . . . . . 15
2.4.2 Enhancements To Version 7 . . . . . . . . . . 15
2.5 Comments Within Continuation Lines . . . . . . . 16
2.6 Additional Features With The INCLUDE Statement . 16
2.7 Change To The /DEBUG:ARGUMENTS Switch . . . . . 16
2.8 New Bit-Manipulation Routines . . . . . . . . . 17
2.9 Changes In The Use Of Octal Constants . . . . . 18
2.10 PARAMETER Statements With Expressions Of Type
COMPLEX . . . . . . . . . . . . . . . . . . . . 18
2.11 IMPLICIT NONE Statement . . . . . . . . . . . . 18
2.12 Octal And Hexadecimal Values In DATA Statements 18
2.13 PAUSE ON ERROR Command For FORDDT . . . . . . . 18
3.0 RESTRICTIONS . . . . . . . . . . . . . . . . . . . 20
4.0 KNOWN BUGS AND DEFICIENCIES . . . . . . . . . . . 20
5.0 COMPATIBILITY WITH PREVIOUS VERSIONS . . . . . . . 20
6.0 INTERNAL CHANGES . . . . . . . . . . . . . . . . . 20
APPENDIX A SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER
A.1 SOURCE DIFFERENCES . . . . . . . . . . . . . . . . A-1
A.2 DATA TYPES . . . . . . . . . . . . . . . . . . . . A-2
A.3 EXPRESSIONS . . . . . . . . . . . . . . . . . . . A-3
A.4 SUBROUTINES AND FUNCTION ARGUMENT LISTS . . . . . A-5
A.5 SPECIFIC STATEMENTS . . . . . . . . . . . . . . . A-5
A.6 FORMAT STATEMENT . . . . . . . . . . . . . . . . A-10
A.7 INPUT/OUTPUT STATEMENTS . . . . . . . . . . . . A-11
A.8 INTRINSIC FUNCTIONS AND FORTRAN-SUPPLIED
SUBROUTINES . . . . . . . . . . . . . . . . . . A-13
A.9 FUNCTIONS AND SUBROUTINES ON VMS NOT RECOGNIZED
BY FORTRAN-10/20 . . . . . . . . . . . . . . . . A-14
FORTRA.DOC -- Fortran-10 Version 10 Page 1
1.0 SUMMARY
Version 10 of Fortran-10 is a development release of the Fortran
compiler, FOROTS, FORLIB and FORDDT. Fortran-10 version 10 is
validated at the full level of the Fortran-77 standard.
The major new features include
o The INQUIRE statement
o A compatibility flagger which optionally detects extensions
to the Fortran-77 standard, and incompatibilities with the
VAX-11 Fortran currently running on the VAX under VMS.
o Support of unlabelled industry-standard magnetic tape
(Labelled tapes are NOT supported)
o Comments may be interspersed with continuation lines.
o G-Floating is supported for double precision real numbers
o FORDDT has a PAUSE ON ERROR command which will cause a trap
to FORDDT whenever a runtime error is encountered.
In addition, changes have been made to features which exist in V7:
o The global optimizer may now be used even though there is
character data present in the program.
o The INCLUDE statement has two new options, and may be nested.
o Certain I/O statements have been changed in order to be more
compatible with the VAX/VMS Fortran.
o The IMPLICIT NONE statement has been added.
o The PARAMETER statement may contain expressions involving the
multiplication, division and exponentiation of constants of
type COMPLEX.
o Values in DATA statements may be expressed as Octal or
Hexadecimal constants in accordance with MIL-STD-1753.
This tape contains copies of the version 10 compiler, FOROTS (called
FORO10.EXE), FORLIB and FORDDT.
FORTRA.DOC -- Fortran-10 Version 10 Page 2
1.1 Bibliography
Two copies of each of the following manuals are enclosed with this
release tape.
The Fortran language and this implementation are described in the
reference manual:
TOPS-10/20 Fortran Language Manual - AA-N383B-TK
The installation procedures for this tape are described in:
TOPS-10 Fortran Installation Guide - AA-P345B-TM
There is also a booklet that provides quick reference information
about Fortran-10/20:
TOPS-10/20 Fortran Pocket Guide - AA-P529B-TK
The algorithms and accuracy of the math routines in FORLIB will be
described in:
TOPS-10/20 Common Math Library Reference Manual - AA-M400A-TK
Similarities and differences between Fortran-10/20 and VAX/VMS Fortran
are described in:
Fortran-10/20 and VAX Fortran Compatibility Manual -
AA-Y868B-TK
It is recommended that you also refer to
American National Standard Programming Language FORTRAN
ANSI X3.9-1978
Copies of this standard may be obtained from:
American National Standards Institute
1430 Broadway
New York, NY 10018
1.2 Monitors
This version of Fortran will run on Tops-10 releases 7.02 and 7.03.
1.3 Related System Software
The following system software must be used with Fortran version 10:
LINK V5.1
FORTRA.DOC -- Fortran-10 Version 10 Page 3
The following system software must be used to build Fortran version 10
from sources:
BLIS10 V7.5(227)
MACRO V53.1(1152) or later
The following optional software may be used with Fortran V10:
SORT V4C
DBMS V5A
DIL V2
FORTRA.DOC -- Fortran-10 Version 10 Page 4
2.0 NEW FEATURES
2.1 INQUIRE Statement
The INQUIRE statement is the first language element introduced into
the FORTRAN language intended to find out information about files
being used or potentially being used by a FORTRAN program. This
statement is defined in the ANSI X3.9-1978 standard, section 12.10.3.
There are 2 forms of the INQUIRE statement, INQUIRE by file and
INQUIRE by unit.
An INQUIRE by file is a INQUIRE statement containing a FILE= keyword,
an associated file specification, and no UNIT= keyword. It is
therefore used for finding out information about a file based on its
name. INQUIRE by file can be used to find out information about files
which are "connected" - files for which an OPEN statement has been
executed or for which a data transfer statement has been executed -
and also about files which are not "connected"; it can be used to
find out about the existence of files before, during, and after they
are used by the program, as well as files which are not used by the
program.
An INQUIRE by unit is an INQUIRE statement containing a UNIT= keyword
and no FILE= keyword. It is therefore used for finding out
information about files which may be "connected" to the specified
unit.
Since Fortran does not actually open a file for which the STATUS=
value is 'UNKNOWN' and the ACCESS= value is 'SEQUENTIAL' (which are
the defaults) until the first data transfer statement (READ or WRITE)
is executed, FOROTS cannot find out the full file specification
(including device) between the execution of an OPEN statement and the
execution of the first data transfer statement. Note that once a data
transfer statement has executed for a particular unit, the STATUS=
value is 'OLD'. Once a file is opened for output (either with the
OPEN statement or by the first data transfer statement) that file will
exist in the directory.
2.1.1 Returned Values -
If the INQUIRE statement proceeds to completion (i.e., there were no
errors in the arguments given to the INQUIRE statement), program
execution proceeds at the next executable statement, and the following
values are returned (the argument type for the variable for each
keyword is in parentheses):
a. IOSTAT (integer): Returns 0.
b. EXIST (logical): For INQUIRE by unit, always returns .TRUE.
For INQUIRE by file, returns .TRUE. if the file exists,
.FALSE. if not.
FORTRA.DOC -- Fortran-10 Version 10 Page 5
c. OPENED (logical): .TRUE. if open, .FALSE. if not.
d. NUMBER (integer): Returns unit number if open, variable not
touched if not open.
e. NAMED (logical): If file is open, returns .FALSE. if
STATUS='SCRATCH' and .TRUE. otherwise; if file is not open,
returns .FALSE.
f. NAME (character): For INQUIRE by file, returns full
(expanded) file string if the file exists (which will be the
case if OPEN with STATUS other than 'UNKNOWN' or ACCESS other
than 'SEQUENTIAL' or an I/O transfer statement has been
executed). Otherwise, returns the string supplied with the
FILE in the INQUIRE statement with defaults applied.
For INQUIRE by unit, if the file is not open, the default
file specification for that unit is returned; for files
opened with STATUS='SCRATCH', blanks are returned; if the
file is open with STATUS other than 'SCRATCH' or 'UNKNOWN' or
ACCESS other than SEQUENTIAL, or an I/O transfer statement
has been executed, the full (expanded) file string is
returned; if file is open with STATUS='UNKNOWN' and
ACCESS='SEQUENTIAL' and no I/O statement has been executed,
returns the file string given by the associated OPEN
statement, with defaults applied.
In all cases, if a string is to be returned, only the device
name is returned for non-disk devices.
g. ACCESS (character): If the file is open, returns
'SEQUENTIAL' if the file is opened for sequential access or
'DIRECT' if the file is opened for DIRECT (RANDOM) access;
returns 'UNKNOWN' if the file is not open.
h. DIRECT (character): Returns 'YES' if file can be opened for
DIRECT access (i.e., is a disk file) or 'NO' if it cannot.
i. SEQUENTIAL (character): Returns 'YES' if the file can be
opened for SEQUENTIAL access, 'NO' if it cannot.
j. FORM (character): If the file is open, returns 'FORMATTED'
if the file is opened for formatted I/O, or 'UNFORMATTED' if
the file is opened for unformatted I/O; returns 'UNKNOWN' if
the file is not open.
k. FORMATTED (character): Returns 'YES' if the file can be
opened with FORM='FORMATTED' (i.e., always).
l. UNFORMATTED (character): Returns 'YES' if the file can be
opened with FORM='UNFORMATTED' (i.e., always).
m. RECL (integer): If the file is open, returns the recordsize
of file (the value given with the RECL keyword of the OPEN
statement), zero if variable-length records; returns zero if
FORTRA.DOC -- Fortran-10 Version 10 Page 6
the file is not opened.
n. NEXTREC (integer): returns the next record number if the
file is open; zero is returned if the file is not opened or
does not exist. For ACCESS='APPEND', returns the number of
records written by the program, plus one.
o. BLANK (character): Returns 'NULL' if the file was last
opened with BLANK='NULL', or 'ZERO' if the file was opened
with BLANK='ZERO'. Returns 'UNKNOWN' if the file is not open
or is opened for unformatted I/O.
p. CARRIAGECONTROL (character): For files which are open,
returns a string representing the value given in the OPEN
statement (or default applied) for the file, one of the
following: 'LIST', 'FORTRAN', 'TRANSLATED', or 'NONE'.
Returns 'UNKNOWN' if the file is not open.
2.1.2 INQUIRE By Unit -
1. If there is a file open on the specified unit with STATUS
other than UNKNOWN or SCRATCH, or ACCESS other than
SEQUENTIAL, or an I/O transfer statement has been executed
using the specified unit, FOROTS returns the full, expanded
file specification.
2. If the file is open on the specified unit as a result of an
OPEN statement in which STATUS='UNKNOWN' and
ACCESS='SEQUENTIAL' were specified or implied, and no I/O
transfer statement has been executed using the specified
unit, FOROTS returns the string given in the OPEN statement,
with defaults applied, for NAME=. The default file
specification is DSK:FORnn.DAT, where DSK: is supplied if no
device is given, and nn is the 2-digit Fortran logical unit.
3. If STATUS='SCRATCH' FOROTS returns blanks for NAME=.
4. If there has been no OPEN statement and no I/O transfer
statement has been executed using the specified unit, FOROTS
returns the default file specification for that unit for
NAME=.
2.1.3 INQUIRE By File - INQUIRE by file is quite a bit more complex:
1. If no device is given for the FILE= specifier, FOROTS uses a
default of 'DSK'; If no extension is given, FOROTS uses
'DAT'.
FORTRA.DOC -- Fortran-10 Version 10 Page 7
2. FOROTS then determines if the device specified is a disk. If
it is:
a. FOROTS finds out if a file exists with the file
specification given in the INQUIRE statement, and returns
the answer (either .TRUE. or .FALSE.) in the variable
specified by the EXIST= keyword, if any. In the process,
if such a file exists, FOROTS 'expands' the file
specification: a logical device name is translated into
a physical device name. The resultant file
specification, in string form, will be referred to
hereafter as the 'full (expanded) file string'.
b. To determine the values to be returned for the INQUIRE
keywords OPENED= and NUMBER=, FOROTS searches for a match
between the file specification given in the INQUIRE
statement and a file specification associated with a
logical unit for which there is a 'connection'. FOROTS
looks at all the FORTRAN logical units, in ascending
order, starting with zero, for which there is a
'connection'. If the file does not exist on the
directory and an OPEN statement has been executed and
STATUS='UNKNOWN' and ACCESS='SEQUENTIAL' and no data
transfer statements have been executed using the unit,
FOROTS compares the file specification given in the
INQUIRE statement (with defaults applied) with the exact
file specification given in the OPEN statement (with
defaults applied). If the file exists (which will be the
case if OPEN with STATUS other than 'UNKNOWN' or ACCESS
other than 'SEQUENTIAL' or an I/O transfer statement has
been executed) FOROTS compares the full file string
associated with the unit with the full (expanded) file
string given in the INQUIRE statement. If either of
these two comparisons are successful, FOROTS returns the
current unit number in the variable specified with the
NUMBER= keyword, and returns 'YES' in the variable
specified with the OPENED= keyword. Note that if the
same file is connected on several units, the matching
technique described will return the smallest unit number
for which there is a match.
3. For non-disk devices given in the file specification in the
INQUIRE statement, FOROTS looks at all the FORTRAN logical
units in ascending order, starting with zero, for which there
is a 'connection'.
a. If the device in the file string specified in the INQUIRE
statement is not the user's controlling terminal, FOROTS
'expands' the file specification given in the INQUIRE
statement (thus translating a logical name given as the
device into its corresponding physical name), and
compares the device part of this expanded file
specification with the device part of the full (expanded)
file string associated with the logical unit.
FORTRA.DOC -- Fortran-10 Version 10 Page 8
b. If the device is the user's controlling terminal (device
'TTY'), FOROTS determines if the device associated with
the logical unit is also the user's controlling terminal.
Note that if the same device is connected on several units,
this procedure will return the smallest unit number for which
there is a match.
2.1.4 Error Processing -
If an error occurs during the execution of the INQUIRE statement
(e.g., a file specification was given which has a syntax error), the
following occurs:
1. If neither an ERR nor IOSTAT keyword are specified in the
INQUIRE statement, program execution is terminated and an
appropriate error message is typed on the user's terminal.
2. If an IOSTAT keyword is specified, the variable specified by
it is set to a positive, non-zero integer (see IOSTAT in the
Fortran-10/20 Language Manual, section 10.4.8); if no ERR
keyword is specified, program execution proceeds at the next
executable statement.
3. If an ERR keyword is specified, program execution continues
at the statement specified (see ERR in the Fortran-10/20
Language Manual, section 10.4.7).
FORTRA.DOC -- Fortran-10 Version 10 Page 9
2.2 Compatibility Flagger
The Compatibility Flagger adds to Fortran V10 the capability of
producing optional warning messages whenever a language element is
used which is
a. An extension to the ANSI Fortran-77 standard
b. A feature not found in VAX/VMS Fortran or could cause
logically different results when used on the VAX/VMS system
The compatibility flagging is invoked at the user's discretion by a
new switch recognized by the Fortran compiler command parser.
The primary goal of this feature is to provide warning messages at any
point which could cause conversion problems if the user were to
compile and execute the program on the VAX/VMS system or on an
ANSI-compatible system. This includes not only compilation
incompatibilities, but also problems that could occur at object time.
2.2.1 New Command Switches -
The /FLAG and /NOFLAG switches have been added to the compiler.
/FLAG:ANSI To give warning messages whenever the source is
an extension to the Fortran-77 standard
/FLAG:VMS To give warning messages whenever the program
could cause an incompatibility with VAX/VMS
Fortran
/FLAG:ALL To give warnings for both Fortran-77 and VMS
/FLAG:NONE To do no flagging
/FLAG:NOANSI To do no flagging of Fortran-77 extensions
/FLAG:NOVMS To do no flagging of VMS incompatibilities
/NOFLAG To do no flagging
The /FLAG switch can have multiple arguments, e.g. /FLAG:(ALL,NOVMS).
If the /FLAG switch is not present in the command, no flagging will be
done. If no argument is given, then flagging will be done for both
VMS and Fortran-77.
The /NOFLAG switch takes no arguments.
FORTRA.DOC -- Fortran-10 Version 10 Page 10
2.2.2 Warning Messages -
The warning messages will be one of the following:
%FTNxxx Extension to Fortran-77: text
%FTNxxx VMS incompatibility: text
%FTNxxx VMS and Fortran-77 incompatibility: text
where 'xxx' is a unique three-letter code, and 'text' is an
explanation of the specific extension or incompatibility. This
suggested text is described with each element.
In addition, certain incompatibilities are flagged at runtime. The
compiler generates a global symbol specific to each type of
compatibility flagging requested by the user:
FLGV. VMS flagging
FLG77. Fortran-77 flagging
If the particular type of flagging is to be done, the associated
global (FLGV. and/or FLG77.) will be set to a value of all ones; if
that flagging is not done, no global value will be generated. In
FORLIB, separate routines will each contain one of the global
definitions as an ENTRY, with a value of all zeroes, and these
routines will be loaded if and only if the global value is not defined
in one or more of the compiled programs (i.e. flagging is being
done). Thus if one or more of a series of linked programs has been
compiled with the flagger on, then the execution of that task will
cause FOROTS to do compatibility checking on all routines.
The runtime flagging includes:
o Incompatible carriage control
o Incompatible values for I/O keywords
o Blanks at end of output line
o The use of intrinsic functions and subroutines not supported
by VMS and/or Fortran-77
For a more detailed description of runtime flagging, see Appendix A,
sections 7 and 8.
FORTRA.DOC -- Fortran-10 Version 10 Page 11
2.3 Support Of Industry-Compatible Magtape
Version 10 supports unlabelled magnetic tape processing in a manner
compatible with the VMS system.
It is possible to read and write single-file labelled tapes with
version 10, but multi-file volumes (more than one file per tape) and
multi-volume files (a file that extends beyond one reel of tape)
cannot be handled. Because of insufficient testing, the use of
labelled tapes is unsupported.
For more information on the industry-compatible recording mode see the
Tops-10 Tape Processing Manual.
2.3.1 TAPEFORMAT Keyword -
1. CORE-DUMP - This is the usual so-called DEC-compatible
format, with 36 bits stored in 5 frames on a 9-track tape.
This is the default format.
The SET BLOCKSIZE command (or the monitor-supplied default if
no command is given) is interpreted to be the number of
36-bit words in the magtape blocks on the tape, and is used
if no BLOCKSIZE keyword is given in the OPEN statement. If a
BLOCKSIZE is given in the OPEN statement, it is interpreted
to be the number of 36-bit words for both formatted and
unformatted files.
2. INDUSTRY - Four 8-bit characters per word (left justified in
32 bits in FOROTS' magtape buffer) are read or written in
standard industry tape format. The BLOCKSIZE given in the
OPEN statement specifies the number of bytes (frames) in each
magtape block, regardless of whether it is a formatted or
unformatted file. If no BLOCKSIZE is specified in the OPEN
statement, the SET BLOCKSIZE command specifies the number of
words in each magtape block, 4 bytes per word. If no
magnetic tape format is specified in the OPEN statement,
FOROTS will not attempt to set a default, but instead will
find out the setting of the tape format from the monitor
(which can be set via the SET FORMAT command). FOROTS will
not attempt to stop a program from using a tape format other
than COREDUMP or INDUSTRY. However, the results will be
unpredictable.
2.3.2 RECORDTYPE Keyword -
The RECORDTYPE keyword required modification to the compiler such that
it can be differentiated from RECORDSIZE, since these two keywords are
identical in their first six characters. Hereafter RECORD will be
recognized as an abbreviation for RECORDSIZE.
FORTRA.DOC -- Fortran-10 Version 10 Page 12
1. UNDEFINED or STREAM - for 36-bit tape format (CORE-DUMP),
this is stream disk image format - 36 bit words are
transferred to/from the tape without regard to their
contents, in the same format as formatted and unformatted
disk files. For INDUSTRY tape format, this is ANSI "U"
(undefined) record format. This is the default record format
for all tape formats. This record format is stream format -
7-bit or 8-bit bytes, respectively, are transferred to/from
the tape as if they were being transferred to/from a disk
stream file.
For all tape formats, this record format specifies that for
formatted files that a standard stream record terminator -
CRLF - is placed at the end of each record, and that a
standard stream terminator is expected on input to delimit
records. For unformatted files the behavior is identical to
that of a MODE='IMAGE' disk file - a word transfer
word-aligns the pointer and transfers a word of data
(containing four 8-bit bytes); character data transfers need
not be word-aligned, and are done with MOVSLJ to/from the
(currently) 7-bit character variables defined by the FORTRAN
compiler.
With this record format, all physical blocks on the tape are
the same size except for the last block, which may be a short
block. For 36-bit mode (CORE-DUMP), the bytes in the last
36-bit word after the last character of data will be nulls.
For all tape formats, if a RECORDSIZE is specified for a
formatted file, the actual record read/written consists of
the data, a CRLF, and the number of nulls necessary to
word-align the record.
2. DELIMITED or VARIABLE - for 36-bit tape format (CORE-DUMP),
this is not defined or supported. For INDUSTRY, this is the
standard ANSI "D" tape record format - records are variable
in length, and the record data is written with no terminators
or carriage control characters, and preceded by a 4-byte
record size (referred to in the ANSI standard as Record
Control Word or RCW). Blocks are variable length, not to
exceed the block length specified in the OPEN statement. If
a RECORDSIZE is specified in the OPEN statement, this is the
maximum number of bytes specified in the 4-byte RCW preceding
each record; the record actually read or written is four
characters less than this quantity.
For input, the RECORDSIZE in the OPEN statement has no
relevance, since FOROTS expands its record buffer dynamically
as needed. For output, FOROTS will truncate records which
exceed the specified RECORDSIZE (and give a supressable,
trappable warning message). If no RECORDSIZE is given,
FOROTS will use the size specified by the SET BLOCKSIZE
command (or the monitor-supplied default if no command is
given).
FORTRA.DOC -- Fortran-10 Version 10 Page 13
3. FIXED - for 36-bit format (CORE-DUMP), this is not defined or
supported. For INDUSTRY, this is the standard ANSI "F" tape
record format - record data is written with no terminators or
carriage control characters, one record directly after
another, to exactly fill fixed-length blocks. (If the last
block is not filled with records, it is a short block). For
this record format, a RECORDSIZE must be specified in the
OPEN statement.
2.3.3 CARRIAGECONTROL Keyword -
Carriage control is an attribute of a file rather than being a
directive. None of these values has any effect on input data, and
except for TRANSLATED and NONE, these values have no effect on the
output data.
1. LIST - When a record is printed or typed, a CRLF is appended
to its end. For "U" (UNDEFINED) record format, it has no
effect, since CRLFs always appear in the file as record
terminators. This is the default value for "U" record
format.
2. FORTRAN - When a record is printed or typed, the first
character of the record is converted into the appropriate
carriage control characters for printing. This is the
standard ANSI "A" format. This is the default for "D" and
"F" record formats. For "U" (UNDEFINED) record format disk
files, a bit is set in the RIB so that for Tops-10 release
7.03 and later, LPTSPL will print the file with
/FILE:FORTRAN, converting the first character of each record
to the appropriate carriage control characters for printing,
and removing the CRLF record terminator. (For Tops-10
release 7.02 and earlier, FORTRAN is equivalent to LIST).
3. NONE - When each record is printed or typed, no extra
characters need be added for carriage control, and no special
action is taken - the assumption is that any carriage control
characters needed for printing exist within the record. This
is the standard ANSI "M" format. For "U" (UNDEFINED) record
format, this value has a special effect - to suppress the
normal CRLF which appears normally at the end of each record
as a record terminator.
4. TRANSLATED - Similar to NONE, but implies that upon output
FOROTS has interpreted column 1 of each output record into
the appropriate carriage control characters for printing or
typing. This is the ANSI "M" format. There is no support
possible for "F" record format, since the number of carriage
control characters after interpretation varies widely.
FORTRA.DOC -- Fortran-10 Version 10 Page 14
Section 2.5.1 notes some incompatibilities with Fortran V7 with regard
to these values.
2.3.4 Implementation Note -
If a magnetic tape file is OPENed specifying the TAPEFORMAT as
INDUSTRY, FOROTS sets the device to be "ASCII-only"; if binary data
is written to the file, FOROTS does not read or write LSCWs, but
instead treats the data as if MODE='IMAGE' had been specified.
2.3.5 Reading And Writing Tapes Using Fortran V10 -
2.3.5.1 Mounting And Dismounting Tapes -
To mount a tape a MOUNT command of the following form must be given to
the operating system:
.MOUNT MTA: LOGNAM/VOLID:VOLNAM/WRITE-ENABLE
Where LOGNAM is the logical name for the device and VOLNAM is the
volume identification. The /WRITE-ENABLE switch is used only if you
intend to write to the tape.
To dismount a Magtape unit you use the
DISMOUNT LOGNAM:
command. For more information on mounting and dismounting magtapes
see the Tops-10 Commands Reference Manual.
2.3.6 Reading And Writing Tapes On VMS -
2.3.6.1 Mounting Tapes (Labeled And Unlabeled) -
When mounting a magnetic tape on a VMS system you must specify the
physical drive name that the tape will mounted on. For VMS there are
different mount command specifiers for labeled and unlabeled tapes.
To mount an unlabeled tape on VMS (also called foreign) you would
specify:
$ MOUNT/NOLABEL/BLOCKSIZE=nnn/RECORDSIZE=nnn DEVNAM: LOGNAM
FORTRA.DOC -- Fortran-10 Version 10 Page 15
And for a labeled tape:
$ MOUNT/OVERRIDE=OWNERIDENTIFICATION DEVNAM: VOLNAM LOGNAM
Where DEVNAM: is the physical device name, VOLNAM is the volume name
and LOGNAM is any logical name you've chosen. Note that the
/BLOCKSIZE and /RECORDSIZE are required for any unlabeled tape
operations. The /OVERRIDE specifier is required if the label was
written on a Tops-10 or Tops-20 system. If you do not wish to write
on the tape you should specify /NOWRITE; write enabled is the
default. For a full explanation of the VMS mount utility you should
refer to the VAX/VMS Mount Utility Reference Manual.
FORTRA.DOC -- Fortran-10 Version 10 Page 16
2.4 Changes In I/O Statements
2.4.1 Changes Incompatible With Version 7 -
1. When a file is created by the runtime system it will
immediately appear in the user's directory; in previous
versions of Fortran, created files did not appear in the
directory until that file was closed. If the user should
terminate the execution of the program before the file is
closed, the previous version WILL NOT EXIST.
2. The definition of the CARRIAGECONTROL='FORTRAN' specifier in
OPEN statements will more nearly conform to VMS usage. A
replacement for the present 'FORTRAN' specifier
('TRANSLATED') has been implemented, and shipped on Autopatch
tape 7 for V7 customers. For Tops-10 release 7.02 and
earlier, 'FORTRAN' is equivalent to 'TRANSLATED'; for
Tops-10 release 7.03 and later, 'TRANSLATED' will cause the
first character of a formatted line to be changed to the
appropriate carriage control characters; 'FORTRAN' will
leave that first character in the record, but that character
will be translated by the print spooler.
For more discussion of CARRIAGECONTROL, see section 2.3.3.
3. A change in the meaning of 'BLOCKSIZE' for magtapes was
implemented in V7: that value was taken to count characters
instead of words. In V10, that change is rescinded for
TAPEFORMAT = 'CORE-DUMP': BLOCKSIZE will specify words, not
characters.
4. MODE='DUMP' is no longer supported.
2.4.2 Enhancements To Version 7 -
1. The I/O keyword NML is a synonym for FMT when referencing
namelists.
2. MODE='IMAGE' is accepted for the TTY device. If the data is
being read into (written from) non-character fields, the
rightmost 7 bits of each word will be used; if the data is
being read into (written from) character fields, each 7-bit
byte will be used.
When using MODE='IMAGE', control characters have no special
meaning.
MODE='IMAGE' has been implemented in Fortran V7A on Autopatch
tape #8.
FORTRA.DOC -- Fortran-10 Version 10 Page 17
2.5 Comments Within Continuation Lines
Fortran V7 will assume that a statement is completed as soon as any
comment line is seen. Fortran V10 supports the inclusion of comments
within continuation lines. For example, the following Fortran source
is now valid:
A=B+C
C This comment is inserted between two lines of the statement
1 +D+E
and will compile as A=B+C+D+E
2.6 Additional Features With The INCLUDE Statement
The compiler will continue to assume that any INCLUDEd source is to be
listed unless the /NOLIST switch is used in the INCLUDE statement.
Since the VAX/VMS Fortran will list the source only if explicitly
requested, Fortran-10/20 and VAX/VMS Fortran will do opposite things
on default. To relieve this incompatibility, Fortran-10/20 V10 has
added the /LIST switch to the INCLUDE statement; by specifying /LIST
(or /NOLIST) the user can cause the VAX/VMS Fortran and Fortran-10/20
to behave in a like way. For symmetry, Fortran-10/20 has also added
the /CREF switch. Fortran-10/20 will continue to assume /LIST and
/CREF as the default.
INCLUDEd source may contain INCLUDE statements. INCLUDE may be nested
up through 12 levels.
2.7 Change To The /DEBUG:ARGUMENTS Switch
The function of this compiler switch has been enhanced so that the
following checking is done:
1. The length of array arguments will be checked at LINK time.
If the length of array actual argument is less than the
corresponding array dummy argument, LINK will issue a
non-fatal error message. If the size of the array is not
known at compile time (adjustably dimensioned or assumed size
arrays), the checking is not done.
2. The structure of statement function arguments will be checked
at compile time. If a non-routine name is passed where a
routine name is expected, or a routine name is passed where a
non-routine name is expected, Fortran will issue a non-fatal
error message.
3. The length of character arguments will be checked for
statement functions at compile time. If the length of the
actual character expression being passed to a function or
subroutine is shorter than the formal variable, then Fortran
FORTRA.DOC -- Fortran-10 Version 10 Page 18
will issue a non-fatal error message.
2.8 New Bit-Manipulation Routines
Several new intrinsic functions, and one subroutine, have been
included in Version 10 in support of MIL-STD-1753.
In the following descriptions, 'bit position' is taken from right to
left, i.e. bit 0 is the right-most bit and bit 35 is the left-most
bit.
The instrinsic functions are:
1. IAND (K1,K2) - A bit-wise logical AND of integers K1 and K2,
producing an integer
2. IOR (K1,K2) - A bit-wise logical inclusive OR of integers K1
and K2, producing an integer
3. IEOR (K1,K2) - A bit-wise logical exclusive OR (XOR) of
integers K1 and K2, producing an integer
4. NOT (K1) - A bit-wise logical complement of integer K1,
producing an integer
5. ISHFT (K1,K2) - A logical shift of integer K1 by K2 bits,
producing an integer. If K2 is positive, the shift is to the
left, a negative K2 causes a shift to the right. The vacated
bit positions are filled with zeroes.
6. ISHFTC (K1,K2,K3) - A logical rotation by K2 bits of the
right-most K3 bits of K1, producing an integer. If K2 is
positive the rotation is to the left, a negative K2 causes a
rotation to the right.
7. IBITS (K1,K2,K3) - Bits K2 through K2+K3-1 of integer K1
appear right justified in the integer result.
8. IBSET (K1,K2,K3) - The integer result will be the integer
value K1, with bits K2 through K2+K3-1 set to ones.
9. IBCLR (K1,K2,K3) - The integer result will be the integer
value K1, with bits K2 through K2+K3-1 set to zeroes.
10. BTEST (K1,K2) - The logical result will be .TRUE. if bit K2
of integer K1 is a 1, and .FALSE. if that bit is 0.
There is one subroutine, MVBITS(M,K,LEN,N,J). All of the arguments
are integer. Bits K through K+LEN-1 of variable M are moved to bit
positions J through J+LEN-1 of variable N.
FORTRA.DOC -- Fortran-10 Version 10 Page 19
2.9 Changes In The Use Of Octal Constants
Version 7 of Fortran ignores any leading zeroes in an octal constant;
thus "0000000000001 (12 leading zeroes) would be treated as a
single-precision constant. Version 10 counts the leading zeroes to
determine the precision of the constant, so that the above constant
would be double precision.
2.10 PARAMETER Statements With Expressions Of Type COMPLEX
Fortran V7 does not allow the PARAMETER statement to have
multiplication, division nor exponentiation involving operands of type
COMPLEX. Fortran V10 has removed that restriction.
Since the calculations involving PARAMETER statements are done at
compile time, computation involving complex data may use algorithms
that differ from those used at runtime. Thus it is possible that the
result of using a PARAMETER statement may differ in accuracy from that
of runtime calculation. An attempt has been made to make the
PARAMETER statement produce results that are as accurate as possible.
2.11 IMPLICIT NONE Statement
The IMPLICIT NONE statement can be used to override all implicit
default type declarations. If the IMPLICIT NONE statement is used,
the data type of all symbolic names in the program must be explicity
declared, and no other IMPLICIT statement can be included in the
program unit.
2.12 Octal And Hexadecimal Values In DATA Statements
The DATA statement may contain two additional forms of constants in
the data value lists, which will result in right-justified values.
1. O'ddddd - An octal constant containing the digits 0-7.
2. Z'hhhhh - A hexadecimal constant containing the digits 0-9
and the letters A-F (to represent the decimal values 10-15).
2.13 PAUSE ON ERROR Command For FORDDT
The PAUSE ON ERROR command will cause FORDDT to inform the runtime
system that it must trap to FORDDT after displaying any runtime
diagnostic message e.g. integer overflow, subscript bounds failure
(if /DEBUG:BOUNDS is specified at compile time). This trap will be
treated as if it were a normal PAUSE, and the user can use any of the
FORTRA.DOC -- Fortran-10 Version 10 Page 20
FORDDT commands to display and/or alter data before proceeding with
the CONTINUE command.
To remove the trap, the REMOVE ON ERROR command is used.
Note that after a trap on a fatal I/O error, the FORDDT TYPE and
ACCEPT commands cannot be used, since they will cause an 'I/O within
I/O' error.
FORTRA.DOC -- Fortran-10 Version 10 Page 21
3.0 RESTRICTIONS
None
4.0 KNOWN BUGS AND DEFICIENCIES
None
5.0 COMPATIBILITY WITH PREVIOUS VERSIONS
Fortran V10 will support programs that currently run under Fortran V7,
within the guidelines listed below in this section.
1. Certain input/output statement specifiers have been changed
(See section 2.4).
2. The /FLAG switch has been added to the compiler command
parser (See 2.2.1).
3. The data type declaration REAL*16 is now converted to the
more realistic REAL*8 instead of REAL*4 as was done in V7. A
warning message is still given.
6.0 INTERNAL CHANGES
FOROTS, the compiler, FORDDT and the math library have been modified
to support the new features that are in this release. Complete
revision histories are contained in REVHST.MAC (for the compiler),
FORHST.MAC (for FOROTS), FORDDT.MAC (for FORDDT) and MTHHST.MAC (for
the math library).
APPENDIX A
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER
A.1 SOURCE DIFFERENCES
a. Comments
Messages: (BOTH) Non-standard character in column 1
(ANSI) Comment on statement
The ANSI standard specifies that comment lines must have the
characters C or asterisk (*) in column 1. Fortran-10/20 and
VMS allow the exclamation mark (!) to appear anywhere in the
source line, to denote the start of a comment. In addition,
Fortran-10/20 allows the characters dollar ($) or slash (/)
in column 1 to denote a comment line.
b. DEBUG lines
Message: (ANSI) DEBUG lines
Both Fortran-10/20 and VMS recognize the character D in
column 1 to denote a statement which is either compiled or
treated as a comment, depending upon the presence or absence
of a command switch at compile time. The ANSI standard does
not recognize this feature.
c. Long Identifiers
Fortran-10/20 currently warns the user when an identifier of
more than six characters is used, and allows only letters
and/or digits; VMS allows up to 31 characters, including
letters, digits, dollar ($) and underscore (_). Since
Fortran-10/20 currently complains, no change is made.
d. Identifiers and global names
Messages: (VMS) xxxx is same as entry point
xxxx is same as NAMELIST name
xxxx is same as variable name
xxxx is the same as PARAMETER name
Both Fortran-10/20 and VMS currently prohibit the name of any
program, subprogram, entry point or COMMON block from being
the same as any other subprogram, entry point or COMMON
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-2
block.
VMS further prohibits any program, subprogram or entry point
to be the same as any identifier, PARAMETER or NAMELIST.
e. Multi-Statement lines
Message: (BOTH) Multi-statement line
Fortran-10/20 allows more than one statement to appear on a
line, with the semi-colon (;) separator. Neither VMS nor
ANSI allows this.
A.2 DATA TYPES
a. Hollerith constants
Messages: (ANSI) Hollerith constant
(VMS) Hollerith constant padded with spaces
ANSI does not recognize constants of the form nHccc;
Fortran-10/20 and VMS do allow them. Fortran-10/20 pads such
a constant with spaces in order to fill a word; VMS does
not.
b. Octal constants
Message: (BOTH) Octal constant
ANSI does not recognize octal constants. VMS and
Fortran-10/20 do allow octal constants, but Fortran-10/20
expects them in the form "ddd (a quote followed by 1-24 octal
digits), whereas VMS expects 'dddd'O (octal digits surrounded
by apostrophes and delimited by the letter O).
c. Length specifiers
Message: (ANSI) xxxxx length specifier (xxxxx is data
type)
ANSI does not recognize certain length specifiers in data
type declarations nor in FUNCTION statements. Both VMS and
Fortran-10/20 do allow them, but VMS has a larger selection
of specifiers.
The only length specifiers recognized by ANSI are CHARACTER*n
and CHARACTER*(*).
In addition to the ANSI specifiers, Fortran-10/20 and VMS
accept INTEGER*4, REAL*4, REAL*8, COMPLEX*8 and LOGICAL*4.
These five specifiers receive the new warning message if ANSI
flagging is in effect.
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-3
Fortran-10/20 warns about:
INTEGER*2 (Uses INTEGER*4)
LOGICAL*1 (Uses LOGICAL*4)
REAL*16 (Uses REAL*8)
COMPLEX*16 (Uses COMPLEX*8)
COMPLEX*32 (Uses COMPLEX*8)
and produces a fatal message for all others. In order to be
more compatible with VMS, Fortran-10/20 has been modified to
allow LOGICAL*2 after producing a warning and changing it to
LOGICAL*4. In all other cases, the current warning or fatal
message is retained.
A.3 EXPRESSIONS
a. Symbolic relational operators
Message: (BOTH) Symbolic relational operator x
(x replaced by operator)
Fortran-10/20 treats the symbolic relational operators (<,
<=, >, >=, == and #) as the standard relationals (.LT., .LE.,
.GT., .GE., .EQ. and .NE.). Neither VMS nor ANSI recognizes
the symbolic versions.
b. Exponentiation operator (^)
Message: (BOTH) Exponential operator ^
Fortran allows the caret (^) as well as the standard double
asterisk (**) to denote exponentiation. Neither VMS nor ANSI
recognizes this construct.
c. XOR operator
Message: (ANSI) Logical .XOR. operator
Fortran-10/20 and VMS support the logical operator .XOR. as a
synonym for .NEQV., but ANSI does not allow it.
d. Consecutive arithmetic operators
Messages: (ANSI) Consecutive arithmetic operators
(VMS) Different precedence in exponentiation
Both Fortran-10/20 and VMS allow the unary arithmetic
operators (- and +) to follow a binary operator, but with
slightly different precedence rules; ANSI does not allow
this construct at all.
Given the expression A**-B*C, Fortran-10/20 would parse it as
(A**(-B))*C, whereas VMS gives the unique interpretation of
A**(-(B*C)).
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-4
e. Concantenation of character data of length (*).
Message: (ANSI) Concantenation with variable of non-specific
length
Subprograms may specify a dummy character argument as having
length (*), meaning 'use the length of the actual argument'.
ANSI does not allow such variables to appear in
concantenation expressions, but both VMS and Fortran-10/20 do
allow them.
f. Non-integers in an integer context
Messages: (ANSI) Non-integer subscript
Non-integer substring bounds
Non-integer as index to computed GOTO
Non-integer as index to RETURN
Non-integer used with xxxx
(xxxx becomes I/O keyword)
ANSI does not allow non-integers in the above contexts, but
both VMS and Fortran-10/20 convert any numeric variable to
integer.
g. Numeric expressions in logical context
Messages: (BOTH) Mixing logical and numeric
Numeric operand in logical context
ANSI does not allow mixed logical/numeric expressions.
Fortran-10/20 treats any numeric expression in a logical
context as if it were a bit string (typeless quantity). VMS
does the same for integer expressions, but non-integer
numeric expressions are allowed only when assigning such an
expression to a logical variable.
Fortran-10/20 tests the high-order (sign) bit of a variable
for true/false, whereas VMS tests the low-order bit. If
numeric expressions are used in a logical context,
incompatibilities could result.
h. Logical expressions in numeric context
Messages: (BOTH) Mixing logical and numeric
Logical operand in numeric context
ANSI does not allow mixed logical/numeric expressions.
VMS treats the logical expression in this context as if it
were an integer, whereas Fortran-10/20 treats it as a
typeless quantity.
i. Numeric variables in character context
Message: (ANSI) Numeric expression in character context
ANSI does not allow numeric expressions in a character
context. Both VMS and Fortran-10/20 allow numeric scalars or
arrays that contain Hollerith data to be used in certain
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-5
contexts, such as OPEN and CLOSE keywords and as arguments to
some Fortran-supplied subroutines.
j. Overlap of character assignments
Message: (ANSI) Assigned variable appears in character
expression
The ANSI standard forbids the right-hand side of a character
assignment statement from referencing any of the character
positions of the character variable or substring on the
left-hand side. Both VMS and Fortran-10/20 allow this.
A.4 SUBROUTINES AND FUNCTION ARGUMENT LISTS
a. Return labels
Messages: (ANSI) & used as return label
(BOTH) $ used as return label
The ANSI standard specifies that an asterisk (*) used as a
dummy argument in a subprogram specifies an alternate point
of return for the subprogram. VMS allows an ampersand (&) as
well as the asterisk, and Fortran-10/20 allows asterisk,
ampersand and dollar ($).
b. Passing values
Fortran-10/20 passes scalar numeric arguments by value,
whereas VMS passes them by reference. This difference can
produce different results in certain limited cases:
o When multiple copies of the same variable are passed to a
subprogram
o When a passed variable is also referenced by the
subprogram through COMMON
o When a subprogram contains more than one entry point, and
the argument lists of the entry points do not agree.
Each of these cases is specifically forbidden by the ANSI
standard, and are incompatibilities not caught by the
flagger.
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-6
A.5 SPECIFIC STATEMENTS
a. ACCEPT
Message: (ANSI) ACCEPT statement
The ACCEPT statement is supported by VMS and Fortran-10/20,
but is not recognized by ANSI.
b. BACKFILE
Message: (BOTH) BACKFILE statement
The BACKFILE statement is supported by Fortran-10/20, but by
neither VMS nor ANSI.
c. COMMON
Message: (BOTH) Character and non-character variables in
COMMON
(VMS) Null padding before xxxxx
(xxxxx is variable name)
ANSI forbids the mixing of numeric and character data in any
one common block. Both Fortran-10/20 and VMS allow it.
Fortran-10/20 V7 always produces a warning in this case; V10
produces the warning only when compatibility flagging is
being done.
Since non-character variables must start at a 36-bit word
boundary in Fortran-10/20 but not on VMS, the second message
is written if padding is introduced.
d. DATA
Message: (ANSI) Substring bounds not constant
ANSI forbids the use of the implied DO clause when
referencing substring bounds. Both Fortran-10/20 and VMS
allow this.
e. DECODE
Message: (ANSI) DECODE statement
ANSI does not recognize the DECODE statement. Both VMS and
Fortran-10/20 do allow the DECODE, with these differences:
o Character count -- Fortran-10/20 treats the character
count as an internal record size, whereas VMS treats
it as a total string count.
o Slash (/) format descriptor -- Fortran-10/20 advances
to the next internal record upon encountering this
descriptor, whereas VMS does not allow the descriptor.
f. DO with no statement label
Message: (ANSI) DO without statement label
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-7
Both Fortran-10/20 and VMS accept a DO statement which does
not specify a terminating statement label; such a DO loop is
instead terminated by an END DO statement. ANSI does not
recognize this.
g. DO WHILE
Message: (ANSI) DO WHILE statement
Both VMS and Fortran-10/20 support the DO WHILE statement,
ANSI does not.
h. DO extended range
Message: (ANSI) Transfer of control into DO loop
Extended range DO loops make it possible to transfer out of
the loop, execute statements in another section of the
program, and then transfer back into the DO loop. VMS and
Fortran-10/20 allow this, but ANSI does not.
This condition is not flagged if the compilation is not being
globally optimized, because it is only in that optimizer that
the flow of control of a program is analyzed.
i. END DO
Message: (ANSI) END DO statement
The END DO statement terminates a DO WHILE or DO loop without
the terminating statement label. This is supported by
Fortran-10/20 and VMS, but not by ANSI.
j. ENCODE
Message: (ANSI) ENCODE statement
The ENCODE statement is the reverse of the DECODE statement,
and the same incompatibilities occur (See DECODE above).
k. EQUIVALENCE
(ANSI) Character and non-character are EQUIVALENCE-d
Single subscript with multi-dimensioned array
Both VMS and Fortran-10/20 allow the use of a single
subscript to specify the offset of a multi-dimensioned array
in the EQUIVALENCE statement; ANSI does not.
ANSI forbids the mixing of numeric and character data in any
one equivalence group. Both Fortran-10/20 and VMS allow it.
Fortran V7 always produces a warning in this case; in V10
that warning is issued only under compatibility flagging.
l. EXTERNAL
Messages: (ANSI) * with external name
(BOTH) & with external name
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-8
VMS and Fortran-10/20 have extended the ANSI standard to
specify that a user-supplied subprogram is to be used in
place of an intrinsic function or Fortran-supplied
subroutine. This is done by placing an asterisk in front of
the name. Further, Fortran-10/20 allows an ampersand in this
context, but VMS does not.
m. FIND
Message: (ANSI) FIND statement
The FIND statement is supported by VMS and Fortran-10/20, but
not by ANSI.
n. Assigned GOTO
Message: (VMS) List of labels
VMS ignores the optional list of labels in an assigned GOTO
statement. Fortran-10/20 checks at runtime to see if the
assigned variable matches one of the labels in the list, and
proceeds to the next statement if there is no match.
o. Two-branch logical IF
Message: (BOTH) Two-branch logical IF
Fortran-10/20 supports a statement of the form
IF (A .LT. B) 10,20
where statement label 10 is the 'true' path, and statement
label 20 is the 'false' path. Neither VMS nor ANSI supports
this variation of the IF statement.
p. INCLUDE
Messages: (ANSI) INCLUDE statement
(VMS) /NOCREF switch
/CREF switch
Default for VMS is /NOLIST
ANSI does not support the INCLUDE statement.
Fortran-10/20 lists the included source unless the /NOLIST
switch is used with the statement, whereas VMS lists that
source only if the /LIST switch is used with the statement or
if the /SHOW=INCLUDE switch is used in the compiler command.
VMS does not recognize the /CREF and /NOCREF switches used by
Fortran-10/20.
q. NAMELIST
Message: (ANSI) NAMELIST statement
The NAMELIST statement is not recognized by ANSI, but is
supported by both VMS and Fortran-10/20.
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-9
r. PARAMETER
Message: (ANSI) No parentheses around PARAMETER list
ANSI insists upon parentheses surrounding the constant list
in the PARAMETER statement, but both Fortran-10/20 and VMS
accepts the statement without the parentheses.
Note that both VMS and Fortran-10/20 assign to the constant
the data type of the symbol when parentheses are used, but
assign to the symbol the data type of the constant when
parentheses are not used.
s. PRINT
Message: (BOTH) PRINT (Specifiers) statement
Fortran-10/20 supports the PRINT statement of the following
form:
PRINT (specifiers) iolist
Neither VMS nor ANSI supports the (specifiers).
t. PUNCH
Message: (BOTH) PUNCH statement
Neither VMS nor ANSI supports the Fortran-10/20 PUNCH
statement.
u. REREAD
Message: (BOTH) REREAD statement
The Fortran-10/20 REREAD statement is supported by neither
VMS nor ANSI.
v. SKIPFILE
Message: (BOTH) SKIPFILE statement
The Fortran-10/20 SKIPFILE statement is supported by neither
VMS nor ANSI.
w. SKIPRECORD
Message: (BOTH) SKIPRECORD statement
The Fortran-10/20 SKIPRECORD statement is supported by
neither VMS nor ANSI.
x. TYPE
Message: (ANSI) TYPE statement
The TYPE statement is supported by Fortran-10/20 and VMS, but
not by ANSI.
y. UNLOAD
Message: (BOTH) UNLOAD statement
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-10
The Fortran-10/20 UNLOAD statement is supported by neither
VMS nor ANSI.
z. WRITE
Message: (BOTH) WRITE with default unit
Fortran-10/20 supports a default unit in the WRITE statement,
but neither VMS nor ANSI allows this.
A.6 FORMAT STATEMENT
a. Format specifiers not supported by ANSI
Messages: (ANSI) FORMAT edit descriptor x (x is specific
descriptor)
No decimal places specified with x
Fortran-10/20 and VMS support $, O, Q, Z
Fortran-10/20 (but not VMS) supports:
R
F, E, D, G in form Fw instead of Fw.0
G with character I/O
b. Default widths
Message: (BOTH) Default widths with edit descriptor x
Fortran-10/20 and VMS differ on the field width that is
assumed if not explicitly specified.
c. Optional commas
Message: (ANSI) Comma field separator is missing
VMS and Fortran-10/20 allow comma field separators to be
omitted, if there is no ambiguity in the interpretation of
the format. ANSI does not support this.
d. Formats in Arrays
Message: (ANSI) Format in numeric array
Both VMS and Fortran-10/20 allow formats to be stored in
numeric arrays as Hollerith constants. ANSI does not support
this.
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-11
A.7 INPUT/OUTPUT STATEMENTS
Many of these incompatibilities are detected by FOROTS at runtime,
since keyword clauses in the I/O statements could have variable
arguments. The compiler can detect incompatibilities if the arguments
are constants.
a. Default file names
Message: (VMS) Default file name
VMS and Fortran-10/20 differ on the names of files for which
no explicit name is given.
b. Apostrophe form of record specifier
Message: (ANSI) Apostrophe in I/O specifier
ANSI does not support the Fortran-10/20 and VMS I/O specifier
of the form
(unit'recordnumber ...)
c. Blanks at end of output line
Normally, the X format edit descriptor cannot be used to
write blanks at the end of a line. Fortran-10/20 (but not
VMS) has one exception: if the line is written with the $
carriage-control, or the $ edit descriptor is used to end the
line, those blanks are written.
This is detected at runtime.
d. Carriage Control
Message: (BOTH) Carriage control character x
Neither VMS nor ANSI recognizes the Fortran-10/20 carriage
control characters 2, 3, -, *, /, $, period or comma. This
is detected at runtime.
e. NML= versus FMT=
Messages: (ANSI) Use of NAMELIST
(VMS) Keyword FMT instead of NML
Fortran-10/20 accepts either keyword FMT= or NML= to specify
a NAMELIST in an I/O statement; VMS accepts only NML=; ANSI
does not supports NAMELIST at all.
f. Keywords not recognized by ANSI
Messages: (ANSI) Keyword xxxxx
Keyword value for xxxxx
ACCESS='APPEND', 'SEQIN', 'SEQOUT', 'SEQINOUT', 'RANDOM' and
'RANDIN'
ASSOCIATEVARIABLE=
BLOCKSIZE=
BUFFERCOUNT=
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-12
CARRIAGECONTROL=
DENSITY=
DEVICE=
DIALOG and DIALOG=
DIRECTORY=
DISPOSE=
FILE= with CLOSE
FILESIZE=
INITIALIZE=
MODE=
NAME=
PADCHAR=
PARITY=
PROTECTION=
READONLY
RECORDSIZE=
RECORDTYPE=
STATUS='EXPUNGE' with OPEN or CLOSE
STATUS='DELETE' or 'KEEP' with OPEN
TAPEFORMAT=
TYPE=
VERSION=
g. Keywords not recognized by VMS
Messages: (VMS) Keyword xxxxx
Keyword value for xxxxx
ACCESS='SEQIN', 'SEQOUT', 'SEQINOUT', 'RANDOM' and 'RANDIN'
CARRIAGECONTROL='DEVICE' and 'TRANSLATED'
DENSITY=
DEVICE=
DIALOG and DIALOG=
DIRECTORY=
DISPOSE='EXPUNGE', 'LIST', 'PUNCH' and 'RENAME'
FILESIZE=
INITIALIZE=
MODE=
PADCHAR=
PARITY=
PROTECTION=
STATUS (or TYPE)='DELETE' and 'KEEP' in the OPEN statement
STATUS (or TYPE)='EXPUNGE' in the OPEN or CLOSE statements
TAPEFORMAT=
VERSION=
h. Keywords which are incompatible between Fortran-10/20 and VMS
Messages: (VMS) Keyword xxxxx
Keyword value for xxxxx
CARRIAGECONTROL=
RECL=
ASSOCIATEVARIABLE=
DISPOSE='DELETE', 'KEEP', 'PRINT' and 'SAVE'
TYPE='NEW', 'OLD', 'SCRATCH' and 'UNKNOWN'
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-13
A.8 INTRINSIC FUNCTIONS AND FORTRAN-SUPPLIED SUBROUTINES
Messages: (VMS) xxxxx is an intrinsic function on VMS
xxxxx is a Fortran-supplied routine on VMS
xxxxx is a generic function on VMS
xxxxx is not a generic function on VMS
(ANSI) xxxxx is not an intrinsic function in Fortran-77
xxxxx is not a generic function in Fortran-77
There are numerous differences between Fortran-10/20 and both VMS and
ANSI in the names of intrinsic functions and Fortran-supplied
subroutines.
a. Fortran-10/20 Intrinsic Functions
Instrinsic functions available on Fortran-10/20 which are not
available on VMS:
COTAN DCOTAN
Intrinsic functions available on Fortran-10/20 which are not
available in the Fortran-77 standard:
BTEST CMPLX COSD COTAN DCOTAN DFLOAT IAND
IBCLR IBITS IBSET IEOR IOR ISHFT ISHFTC
NOT SIND
b. Fortran-10/20 Fortran-supplied Subroutines
Included here are those subroutines supplied by Fortran-10/20
but not by VMS.
CHKDIV CLRFMT DIVERT DTOGA DUMP FFUNIT GTODA
ILL LEGAL OVERFL PDUMP QUIETX SAVFMT SAVRAN
SETRAN SORT TRACE
The following subroutine is available on both VMS and
Fortran-10/20, but is not known to Fortran-77.
MVBITS
c. VMS Generic Functions
Included here are functions which are generic on VMS, but not
generic in Fortran-10/20.
COSD SIND TAND
d. Fortran-10/20 Generic Functions
Included here are functions which are generic in
Fortran-10/20, but are generic on neither VMS nor Fortran-77.
ALOG ALOG10 AMAX1 AMIN1
SPECIFICS OF INCOMPATIBILITIES DETECTED BY THE FLAGGER Page A-14
e. Fortran-10/20 Subroutines versus VMS Intrinsic Functions
Included here are intrinsic functions on VMS, but are
Fortran-supplied subroutines in Fortran-10/20.
CDSQRT CDLOG CDEXP CDSIN
f. Differences in Subroutines
Included here are those Fortran-supplied subroutines which
behave differently, or which have different arguments, on
Fortran-10/20 and VMS.
DATE ERRSET ERRSNS EXIT TIME
A.9 FUNCTIONS AND SUBROUTINES ON VMS NOT RECOGNIZED BY FORTRAN-10/20
These subprograms are recognized by VMS Fortran, but not by
Fortran-10/20. No flagging is done with these subprograms.
a. VMS Intrinsic Functions
ACOSD DBLEQ IIAND JIAND QACOS QDIM QSIN
ASIND DCMPLX IIBCLR JIBCLR QACOSD QEXP QSIND
ATAN2D DCONJG IIBITS JIBITS QASIN QEXT QSINH
ATAND DREAL IIBSET JIBSET QASIND QEXTD QSQRT
BITEST DIMAG IIEOR JIEOR QATAN QLOG QTAN
BJTEST DTAND IIOR JIOR QATAN2 QLOG10 QTAND
DACOSD IISHFT JISHFT QATAN2D QMAX1 QTANH
DASIND IISHFTC JISHFTC QATAND QMIN1 SNGLQ
DATAN2D INOT JNOT QCOS QMOD TAND
DATAND IZEXT JZEXT QCOSD QSIGN ZEXT
QCOSH
b. VMS Fortran-supplied Subroutines
ASSIGN CLOSE ERRTST FDBSET IDATE IRAD50
R50ASC RAD50 RANDU USEREX
[End of FORTRA.DOC]