F77(1)

NAME
f77 - Fortran 77 compiler

SYNOPSIS
f77 [ option ] ... file ...

DESCRIPTION

F77 is the UNIX Fortran 77 compiler. It accepts several types of arguments.

Arguments whose names end with `.f' are taken to be Fortran 77 source programs; they are compiled, and each object program is left on the file in the current directory whose name is that of the source with `.o' substituted for `.f'.

Arguments whose names end with `.F' are also taken to be Fortran 77 source programs; these are first processed by the C preprocessor before being compiled by f77.

Arguments whose names end with `.r' or `.e' are taken to be ratfor(1) or efl(1) source programs respectively; these are first transformed by the appropriate preprocessor, then compiled by f77.

Arguments whose names end with `.c' or `.s' are taken to be C or assembly source programs for cc(1) or as(1) respectively and are compiled or assembled, producing a `.o' file.

OPTIONS

The following options have the same meaning as in cc(1). See ld(1) for load-time options.

-c  Suppress loading and produce `.o' files for each source file.

-g  Produce additional symbol table information for dbx(1) and pass the -lg flag to ld(1) so that on abnormal terminations, the memory image is written to file core. (The program is linked with the libg.a library). Incompatible with -O.

-help
    Output a summary manual entry for f77.

-list
    Generate a line-numbered compiler listing in a file with extension .lst.

-o output
    Name the final output file output instead of `a.out'.

-p  Prepare object files for profiling, see prof(1).

-pg Causes the compiler to produce counting code in the manner of -p , but invokes a run-time recording mechanism that keeps more extensive statistics and produces a gmon.out file at normal termination. An execution profile can then be generated by use of gprof(1).

-w

-w66
    Suppress warning messages. If the option is `-w66' only Fortran 66 compatibility warnings are suppressed.

-Dname=def

-Dname
    Define the name to the C preprocessor, as if by `#define'. If no definition is given, the name is defined as "1". (`.F' suffix files only).

-Idir
    `#include' files whose names do not begin with `/' are always sought first in the directory of the file argument, then in directories named in -I options, then in directories on a standard list. (`.F' suffix files only).

-O  Invoke an object-code optimizer. Incompatible with -g.

-S  Compile the named programs, and leave the assembler language output on corresponding files suffixed `.s'. (No `.o' is created.).

The following options are peculiar to f77.

-i2 On machines which support short integers, make the default integer constants and variables short. (-i4 is the standard value of this option). All logical quantities will be short.

-m  Apply the m4(1) preprocessor to each `.r' file before transforming it with the ratfor or efl preprocessor.

-onetrip

-1  Compile DO loops that are performed at least once if reached. (Fortran 77 DO loops are not performed at all if the upper limit is smaller than the lower limit.)

-r8 Treat all floating point variables, constants, functions and intrinsics as double precision and all complex quantities as double complex.

-strict
    Compile only the core f77 language as specified in the ANSI standard X3.9-1978.

-u  Make the default type of a variable `undefined' rather than using the default Fortran rules.

-v  Print the version number of the compiler as it executes.

-C  Compile code to check that subscripts are within declared array bounds. For multi-dimensional arrays, only the equivalent linear subscript is checked.

-F  Apply the C preprocessor to `.F' files, and the efl, or ratfor preprocessors to `.e' and `.r' files, put the result in the file with the suffix changed to `.f', but do not compile.

-Ex Use the string x as an efl option in processing `.e' files.

-Rx Use the string x as a ratfor option in processing `.r' files.

-U  Do not convert upper case letters to lower case. The default is to convert Fortran programs to lower case except within character string constants.

Other arguments are taken to be either loader option arguments, or f77-compatible object programs, typically produced by an earlier run, or perhaps libraries of f77-compatible routines. These programs, together with the results of any compilations specified, are loaded (in the order given) to produce an executable program with name `a.out'.

Programs compiled with f77 produce memory dumps in file core upon abnormal termination if the -g flag was specified during loading. If the environment variable f77_dump_flag is set to a value beginning with `y' or `n', dumps for abnormal terminations are respectively forced or suppressed.

LIBRARIES

The libraries provided as part of this release (the files above with filenames ending in .a) are simple ports of the BSD F77 libraries as provided with BSD F77 on, for example the VAX 11/750.

The functionality of these libraries is virtually identical to their functionality on other machines, differing only in a few trivial ways in order to allow our F77 to pass the ANSI F77 validation suite. These differences are:

1)  Output of upper case rather than lower case letters - eg. as exponent character (E or D), or output from the INQUIRE statement. (Input is accepted in upper or lower case).

2)  Correction to implementation of the t (absolute tab) and tl (leftward tab) format codes.

3)  The ANSI F77 standard leaves as implementation dependent which logical units are treated as 'printer' files. Our library implementation treats logical units with numbers greater than 40 as 'printer' files - the BSD library on other machines has no default unit numbers of this kind.

FORTRAN SUBROUTINES

The code produced by f77 can be called from other languages such as C, however it will be necessary to initialise the fortran library explicitly if it is linked with a program written in a language other that FORTRAN. To do this make a call to the subroutine f_init (no arguments are required) before calling any f77 subroutines and make a call to f_exit (no arguments) at the end of the program. The latter can be accomplished in a C program which terminates using the exit(3) function by using the standard atexit function to register a call to f_exit when f_init is called. Alternatively, in the BSD C environment, the function on_exit (see exit(3)) can be used.

FILES
file.[fFresc]	input file
file.o	object file
a.out	loaded output
/usr/lib/f77comp	compiler
/usr/lib/cpp	C preprocessor
/usr/lib/libF77.a	intrinsic function library
/usr/lib/libI77.a	Fortran I/O library
/usr/lib/libU77.a	UNIX interface library
/usr/lib/libm.a	math library
/usr/lib/libc.a	C library, see section 3
/usr/lib/libF77_p.a	profiling intrinsic function library
/usr/lib/libI77_p.a	profiling Fortran I/O library
/usr/lib/libU77_p.a	profiling UNIX interface library
/usr/lib/libm_p.a	profiling math library
/usr/lib/libc_p.a	profiling C library, see section 3
mon.out	file produced for analysis by prof(1).
gmon.out	file produced for analysis by gprof(1).

SEE ALSO
ar(1), cc(1), dbx(1), efl(1), gprof(1), ld(1), m4(1), prof(1), ranlib(1), ratfor(1), intro(3f)

DIAGNOSTICS

The diagnostics produced by f77 itself are intended to be self-explanatory. Occasional messages may be produced by the loader.

BUGS

This compiler is intended to be compatible both with code conforming to the ANSI f77 standard X3.9-1978 and with code taking advantage of the extensions to this language provided by the BSD Unix F77 compiler. The standard part of the language is better specified and more easily tested than the extensions, so in general, bugs are more likely in these extensions (disabled using the -strict option).

The -g option, which makes the compiler produce a.out object files suitable for debugging with dbx, is only at beta status. Use of this feature (a BSD extension rather than part of ANSI F77) may therefore prove to be less reliable than the rest of the F77 system.