Previous | Contents | Index |
A text library contains library modules of source text. To include a library module from a text library in a program, use an INCLUDE statement.
Library modules within a text library are like ordinary text files, but they differ in the following ways:
Library modules in text libraries can contain any kind of text; this section only discusses their use when Compaq Fortran language source is used.
You should be aware of the difference between library modules that reside in text libraries and the Compaq Fortran post-compiled module files (.F90$MOD file type) that support use association (see Section 2.2.3).
Use the LIBRARY command (OpenVMS Librarian Utility) to create text libraries and insert, replace, delete, copy, or list library modules in text libraries. Text libraries have a default file type of TLB.
Figure 2-2 shows the creation of a text library and its use in compiling Compaq Fortran programs.
Figure 2-2 Creating and Using a Text Library
For More Information:
Table 2-3 summarizes the commands that create libraries and provide maintenance functions. For a complete list of the qualifiers for the LIBRARY command and a description of other DIGITAL Command Language (DCL) commands listed in Table 2-3, see the Guide to Using OpenVMS Command Procedures or type HELP LIBRARY.
Function | Command Syntax1 |
---|---|
Create a library. | LIBRARY/TEXT/CREATE library-name file-spec,... |
Add one or more library modules to a library. | LIBRARY/TEXT/INSERT library-name file-spec,... |
Replace one or more library modules in a library. | LIBRARY/TEXT/REPLACE library-name file-spec,... 2 |
Specify the names of library modules to be added to a library. |
LIBRARY/TEXT/INSERT library-name file-spec/MODULE=
module-name |
Delete one or more library modules from a library. | LIBRARY/TEXT/DELETE=(module-name,...) library-name |
Copy a library module from a library into another file. |
LIBRARY/TEXT/EXTRACT=module-name/OUTPUT=
file-spec library-name |
List the library modules in a library. | LIBRARY/TEXT/LIST=file-spec library-name |
When the LIBRARY command adds a library module to a library, by default it uses the file name of the input file as the name of the library module. In the example in Figure 2-2, the LIBRARY command adds the contents of the files APPLIC.SYM and DECLARE.FOR to the library and names the library modules APPLIC and DECLARE.
Alternatively, you can name a module in a library with the /MODULE qualifier. For example:
$ LIBRARY/TEXT/INSERT FORFILES DECLARE.FOR /MODULE=EXTERNAL_DECLARATIONS |
The preceding command inserts the contents of the file DECLARE.FOR into the library FORFILES under the name EXTERNAL_DECLARATIONS. This library module can be included in a Compaq Fortran source file during compilation with the following statement:
INCLUDE 'FORFILES(EXTERNAL_DECLARATIONS)' |
For More Information:
The following sections discuss the compiler limits and error messages.
2.5.1 Compiler Limits
Table 2-4 lists the limits to the size and complexity of a single Compaq Fortran program unit and to individual statements contained in it.
The amount of data storage, the size of arrays, and the total size of executable programs are limited only by the amount of process virtual address space available, as determined by process quotas and system parameters.
Language Element | Limit |
---|---|
Actual number of arguments per CALL
or function reference |
No limit |
Arguments in a function reference
in a specification expression |
No limit |
Array dimensions | 7 |
Array elements per dimension | 9,223,372,036,854,775,807 or process limit |
Constants; character and Hollerith | 2000 characters |
Constants; characters read in list-directed I/O | 2048 characters |
Continuation lines | 511 |
DO and block IF statement nesting (combined) | 128 |
DO loop index variable | 9,223,372,036,854,775,807 or process limit |
Format group nesting | 8 |
Fortran source line length | 132 characters |
INCLUDE file nesting | 20 levels |
Labels in computed or assigned GOTO list | 500 |
Lexical tokens per statement | 3000 |
Parentheses nesting in expressions | 40 |
Structure nesting | 20 |
Symbolic-name length | 63 characters |
For More Information:
On relevant process quotas and system parameters, see Section 1.1.
2.5.2 Compiler Diagnostic Messages and Error Conditions
The Compaq Fortran compiler identifies syntax errors and violations of language rules in the source program.
If the compiler locates any errors, it writes messages to your default output device; so, if you enter the FORTRAN command interactively, the messages are displayed on your terminal. If the FORTRAN command is executed in a batch job, the messages appear in the log file for the batch job.
A sample message from the compiler as it would appear on a terminal screen follows:
40 FORMAT (I3,) ................^ %F90-W-ERROR, An extra comma appears in the format list. at line number 13 in file DISK$:[USER]SAMP_MESS.FOR;4 |
This sample message consists of the following lines:
The message line has the following format:
%F90-s-ident, message-text |
The facility, F90, follows the percent sign (%). The severity of the message (I for informational, W for warning, E for error, or F for fatal) replaces s. A mnemonic for that message replaces ident. The explanatory text of the message replaces message-text.
Diagnostic messages usually provide enough information for you to determine the cause of an error and correct it. If you compile using the /OPTIMIZE qualifier (the default) and have difficulty determining the cause of an error (possibly because of the optimizations), consider compiling using a lower optimization level or /NOOPTIMIZE.
If the compiler creates a listing file, it also writes the messages to
the listing. The pointer (...1) and messages follow the statement that
caused the error.
2.6 Compiler Output Listing Format
A compiler output listing produced by a FORTRAN command with the /LIST qualifier consists of the following sections:
Section 2.6.1 through Section 2.6.4 describe the compiler listing sections in detail.
For More Information:
The source code section of a compiler output listing displays the source program as it appears in the input file, with the addition of sequential line numbers generated by the compiler. Example 2-1 shows a sample of a source code section of a free-form compiler output listing.
Example 2-1 Sample Listing of Source Code |
---|
RELAX2 Source Listing 10-MAY-1999 13:09:20 Compaq Fortran V7.x-xxxx Page 1 10-MAY-1999 08:20:00 $DISK:[USER]LIST_SAMPLE.F90;3 1 SUBROUTINE RELAX2(EPS) 2 INTEGER, PARAMETER :: M=40 3 INTEGER, PARAMETER :: N=60 4 5 COMMON X (M,N) 6 7 LOGICAL DONE 8 10 DONE = .TRUE. 9 10 DO J=1,N-1 11 DO I=1,M-1 12 XNEW = (X(I-1,J)+X(I+1,J)+X(I,J-1)+X(I,J+1))/4 13 IF (ABS(XNEW-X(I,J)) > EPS) DONE = .FALSE. 14 X(I,J) = XNEW 15 END DO 16 END DO 17 18 IF (.NOT. DONE) GO TO 10 19 RETURN 20 END SUBROUTINE |
Compiler-generated line numbers appear in the left margin and are used
with the %LINE prefix in debugger commands. These compiler-generated
line numbers are displayed by compiler-generated messages and certain
run-time error messages. (For more information on messages, see
Appendix B.)
2.6.2 Machine Code Section
The machine code section of a compiler output listing provides a symbolic representation of the compiler-generated object code. The representation of the generated code and data is similar to that of a MACRO assembly listing.
The machine code section is optional. To receive a listing file with a machine code section, you must specify the following:
$ FORTRAN/LIST/MACHINE_CODE |
Example 2-2 shows a sample of part of a machine code section of a compiler output listing.
Example 2-2 Sample Listing of Machine Code (Partial Listing) |
---|
RELAX2 Machine Code Listing 10-MAY-1999 Compaq Fortran V7.x-xxx Page 3 RELAX2$BLK 10-MAY-1999 $DISK:[USER]LIST_SAMPLE.F90;3 .PSECT $CODE$, OCTA, PIC, CON, REL, LCL, SHR, - EXE, NORD, NOWRT 0000 RELAX2:: ; 000001 80100000 0000 LDF F0, (R16) ; F0, (R16) ; 000013 A41B0010 0004 LDQ R0, 16(R27) ; R0, 16(R27) ; 000012 803B0018 0008 LDF F1, 24(R27) ; F1, 24(R27) 2FFE0000 000C UNOP 0010 .10: ; 000008 203FFFFF 0010 MOV -1, DONE ; -1, R1 47E77411 0014 MOV 59, var$0002 ; 59, R17 ; 000010 47E03412 0018 MOV 160, R18 2FFE0000 001C UNOP 0020 lab$0004: 40120413 0020 ADDQ R0, R18, R19 ; 000012 47E4F414 0024 MOV 39, var$0003 ; 39, R20 ; 000011 2273FF5C 0028 LDA R19, -164(R19) ; 000012 2FFE0000 002C UNOP 0030 lab$0008: ; 000011 A3F3FFA4 0030 LDL R31, -92(R19) ; 000012 81730000 0034 LDF F11, (R19) 81530008 0038 LDF F10, 8(R19) 8193FF64 003C LDF F12, -156(R19) 81B300A4 0040 LDF F13, 164(R19) 81D30004 0044 LDF F14, 4(R19) ; 000013 A3F30048 0048 LDL R31, 72(R19) ; 000012 556A100B 004C ADDF F11, F10, F11 47FF0416 0050 CLR R22 ; 000013 556C100B 0054 ADDF F11, F12, F11 ; 000012 A3F300E4 0058 LDL R31, 228(R19) 556D100B 005C ADDF F11, F13, F11 5561104B 0060 MULF F11, F1, XNEW ; F11, F1, F11 556E102E 0064 SUBF XNEW, F14, F14 ; F11, F14, F14 ; 000013 5FEE040E 0068 FABS F14, F14 55C014EE 006C CMPGLE F14, F0, F14 D5C00001 0070 FBNE F14, L$1 C3E00001 0074 BR L$3 0078 L$1: 47E10416 0078 MOV DONE, R22 ; R1, R22 007C L$3: . . . Routine Size: 432 bytes, Routine Base: $CODE$ + 0000 .PSECT $LINK$, OCTA, NOPIC, CON, REL, LCL,- NOSHR, NOEXE, RD, NOWRT 0000 ; Null-Frame invocation descriptor Entry point: RELAX2 Registers used: R0-R1, R16-R25, R27-R28, F0-F1, F10-F29 00000000 0010 .ADDRESS $BLANK 00003F80 0018 .LONG X^3F80 ; .F_FLOATING 0.2500000 |
The following list provides a detailed explanation of how generated code and data are represented in machine code listings.
The storage map section of the compiler output listing is printed after each program unit, or library module. It is not generated when a fatal compilation error is encountered.
The storage map section summarizes information in the following categories:
Total Space Allocated nnn |
A heading for an information category is printed in the listing only when entries are generated for that category.
Example 2-3 shows an example of a storage map section.
Example 2-3 Sample Storage Map Section |
---|
RELAX2 Source Listing 10-MAY-1999 09:31:21 Compaq Fortran V7.2-nnnn Page 2 10-MAY-1999 09:30:35 $DISK:[USER]LIST_SAMPLE.F90;3 PROGRAM SECTIONS Name Bytes Attributes 1 $CODE$ 432 PIC CON REL LCL SHR EXE NORD NOWRT OCTA 2 $LINK$ 28 NOPIC CON REL LCL NOSHR NOEXE RD NOWRT OCTA 3 $BLANK 9600 NOPIC OVR REL GBL NOSHR NOEXE RD WRT OCTA Total Space Allocated 10060 ENTRY POINTS Address Name 1-00000000 RELAX2 VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name Address Type Name ** L*4 DONE ** R*4 EPS ** I*4 I ** I*4 J ** R*4 XNEW ARRAYS Address Type Name Bytes Dimensions 3-00000000 R*4 X 9600 (40, 60) LABELS Address Label 1-00000010 10 |
As shown in Example 2-3, a section size is specified as a number of
bytes, expressed in decimal. A data address is specified as an offset
from the start of a program section, expressed in hexadecimal.
2.6.4 Compilation Summary Section
The final entries on the compiler output listing are the compiler qualifiers and compiler statistics.
The body of the compilation summary contains information about OPTIONS statement qualifiers (if any), FORTRAN command line qualifiers, and compilation statistics.
"Compiler Statistics" shows the machine resources used by the compiler.
Example 2-4 shows a sample compilation summary.
Example 2-4 Sample Compilation Summary |
---|
COMMAND QUALIFIERS /ALIGNMENT=(COMMONS=(NONATURAL,PACKED,NOSTANDARD,NOMULTILANGUAGE),RECORDS=NATURAL) /ARCHITECTURE=GENERIC /ASSUME=(ACCURACY_SENSITIVE,ALTPARAM,NOBUFFERED_IO,NOBYTERECL,NODUMMY_ALIASES, NOFP_CONSTANT,NOINT_CONSTANT,NOMINUS0,NOUNDERSCORE,NOSOURCE_INCLUDE) /NOAUTOMATIC /NOBY_REF_CALL /CHECK=(NOBOUNDS,FORMAT,NOFP_EXCEPTIONS,OUTPUT_CONVERSION,NOOVERFLOW,POWER,NOUNDERFLOW) /CONVERT=NATIVE /DEBUG=(NOSYMBOLS,TRACEBACK) /NODEFINE /DOUBLE_SIZE=64 /NOD_LINES /ERROR_LIMIT=30 /NOEXTEND_SOURCE /F77 /FLOAT=G_FLOAT /GRANULARITY=QUADWORD /IEEE_MODE=FAST /INTEGER_SIZE=32 /MACHINE_CODE /MATH_LIBRARY=ACCURATE /NOMODULE /NAMES=UPPERCASE /OPTIMIZE=(INLINE=SPEED,LEVEL=4,NOLOOPS,NOPIPELINE,TUNE=GENERIC,UNROLL=0) /NOPAD_SOURCE /REAL_SIZE=32 /NORECURSIVE /REENTRANCY=NONE /ROUNDING_MODE=NEAREST /NOSEPARATE_COMPILATION /SEVERITY=(WARNING=WARNING) /SHOW=(NOINCLUDE,MAP) /SOURCE_FORM=FREE /STANDARD=NONE /NOSYNCHRONOUS_EXCEPTIONS /NOSYNTAX_ONLY /NOTIE /NOVERSION /VMS /WARNINGS=(ALIGNMENT,NOARGUMENT_CHECKING,NODECLARATIONS,GENERAL,GRANULARITY, NOTRUNCATED_SOURCE,UNCALLED,UNINITIALIZED,NOUNUSED,USAGE) /NODIAGNOSTICS /INCLUDE=FORT$INCLUDE: /LIST=FORT$DKB300:[PROJ]X.LIS;4 /OBJECT=FORT$DKB300:[PROJ]X.OBJ;5 /NOLIBRARY COMPILER: Compaq Fortran V7.x-xxxx COMPILATION STATISTICS CPU time: n.nn seconds Elapsed time: n.nn seconds Pagefaults: nnn I/O Count: nn |
Previous | Next | Contents | Index |