   This file documents the use and the internals of the GNU Fortran
(`g77') compiler.  It corresponds to the GCC-2.95 version of `g77'.

   Published by the Free Software Foundation 59 Temple Place - Suite 330
Boston, MA 02111-1307 USA

   Copyright (C) 1995-1999 Free Software Foundation, Inc.

   Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the sections entitled "GNU General Public License," "Funding for
Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
included exactly as in the original, and provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

   Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the sections entitled "GNU General Public
License," "Funding for Free Software," and "Protect Your Freedom--Fight
`Look And Feel'", and this permission notice, may be included in
translations approved by the Free Software Foundation instead of in the
original English.

   Contributed by James Craig Burley (<craig@jcb-sc.com>).  Inspired by
a first pass at translating `g77-0.5.16/f/DOC' that was contributed to
Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).

Date_and_Time Intrinsic
.......................

     CALL Date_and_Time(DATE, TIME, ZONE, VALUES)

DATE: `CHARACTER'; scalar; INTENT(OUT).

TIME: `CHARACTER'; OPTIONAL; scalar; INTENT(OUT).

ZONE: `CHARACTER'; OPTIONAL; scalar; INTENT(OUT).

VALUES: `INTEGER(KIND=1)'; OPTIONAL; DIMENSION(8); INTENT(OUT).

Intrinsic groups: `f90'.

Description:

   Returns:
DATE
     The date in the form CCYYMMDD: century, year, month and day;

TIME
     The time in the form `HHMMSS.SS': hours, minutes, seconds and
     milliseconds;

ZONE
     The difference between local time and UTC (GMT) in the form SHHMM:
     sign, hours and minutes, e.g. `-0500' (winter in New York);

VALUES
     The year, month of the year, day of the month, time difference in
     minutes from UTC, hour of the day, minutes of the hour, seconds of
     the minute, and milliseconds of the second in successive values of
     the array.

   Programs making use of this intrinsic might not be Year 10000 (Y10K)
compliant.  For example, the date might appear, to such programs, to
wrap around (change from a larger value to a smaller one) as of the
Year 10000.

   On systems where a millisecond timer isn't available, the millisecond
value is returned as zero.

DbesJ0 Intrinsic
................

     DbesJ0(X)

DbesJ0: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `BESJ0()' that is specific to one type for X.  See
BesJ0 Intrinsic.

DbesJ1 Intrinsic
................

     DbesJ1(X)

DbesJ1: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `BESJ1()' that is specific to one type for X.  See
BesJ1 Intrinsic.

DbesJN Intrinsic
................

     DbesJN(N, X)

DbesJN: `REAL(KIND=2)' function.

N: `INTEGER'; scalar; INTENT(IN).

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `BESJN()' that is specific to one type for X.  See
BesJN Intrinsic.

DbesY0 Intrinsic
................

     DbesY0(X)

DbesY0: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `BESY0()' that is specific to one type for X.  See
BesY0 Intrinsic.

DbesY1 Intrinsic
................

     DbesY1(X)

DbesY1: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `BESY1()' that is specific to one type for X.  See
BesY1 Intrinsic.

DbesYN Intrinsic
................

     DbesYN(N, X)

DbesYN: `REAL(KIND=2)' function.

N: `INTEGER'; scalar; INTENT(IN).

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `BESYN()' that is specific to one type for X.  See
BesYN Intrinsic.

Dble Intrinsic
..............

     Dble(A)

Dble: `REAL(KIND=2)' function.

A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns A converted to double precision (`REAL(KIND=2)').  If A is
`COMPLEX', the real part of A is used for the conversion and the
imaginary part disregarded.

   See Sngl Intrinsic, for the function that converts to single
precision.

   See Int Intrinsic, for the function that converts to `INTEGER'.

   See Complex Intrinsic, for the function that converts to
`COMPLEX'.

DCos Intrinsic
..............

     DCos(X)

DCos: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `COS()' that is specific to one type for X.  See
Cos Intrinsic.

DCosH Intrinsic
...............

     DCosH(X)

DCosH: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `COSH()' that is specific to one type for X.  See
CosH Intrinsic.

DDiM Intrinsic
..............

     DDiM(X, Y)

DDiM: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Y: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `DIM()' that is specific to one type for X and Y.
See DiM Intrinsic.

DErF Intrinsic
..............

     DErF(X)

DErF: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `ERF()' that is specific to one type for X.  See
ErF Intrinsic.

DErFC Intrinsic
...............

     DErFC(X)

DErFC: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Archaic form of `ERFC()' that is specific to one type for X.  See
ErFC Intrinsic.

DExp Intrinsic
..............

     DExp(X)

DExp: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `EXP()' that is specific to one type for X.  See
Exp Intrinsic.

Digits Intrinsic
................

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Digits' to use this name for an
external procedure.

DiM Intrinsic
.............

     DiM(X, Y)

DiM: `INTEGER' or `REAL' function, the exact type being the result of
cross-promoting the types of all the arguments.

X: `INTEGER' or `REAL'; scalar; INTENT(IN).

Y: `INTEGER' or `REAL'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `X-Y' if X is greater than Y; otherwise returns zero.

DInt Intrinsic
..............

     DInt(A)

DInt: `REAL(KIND=2)' function.

A: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `AINT()' that is specific to one type for A.  See
AInt Intrinsic.

DLog Intrinsic
..............

     DLog(X)

DLog: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `LOG()' that is specific to one type for X.  See
Log Intrinsic.

DLog10 Intrinsic
................

     DLog10(X)

DLog10: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `LOG10()' that is specific to one type for X.  See
Log10 Intrinsic.

DMax1 Intrinsic
...............

     DMax1(A-1, A-2, ..., A-n)

DMax1: `REAL(KIND=2)' function.

A: `REAL(KIND=2)'; at least two such arguments must be provided;
scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `MAX()' that is specific to one type for A.  See
Max Intrinsic.

DMin1 Intrinsic
...............

     DMin1(A-1, A-2, ..., A-n)

DMin1: `REAL(KIND=2)' function.

A: `REAL(KIND=2)'; at least two such arguments must be provided;
scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `MIN()' that is specific to one type for A.  See
Min Intrinsic.

DMod Intrinsic
..............

     DMod(A, P)

DMod: `REAL(KIND=2)' function.

A: `REAL(KIND=2)'; scalar; INTENT(IN).

P: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `MOD()' that is specific to one type for A.  See
Mod Intrinsic.

DNInt Intrinsic
...............

     DNInt(A)

DNInt: `REAL(KIND=2)' function.

A: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `ANINT()' that is specific to one type for A.  See
ANInt Intrinsic.

Dot_Product Intrinsic
.....................

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Dot_Product' to use this name
for an external procedure.

DProd Intrinsic
...............

     DProd(X, Y)

DProd: `REAL(KIND=2)' function.

X: `REAL(KIND=1)'; scalar; INTENT(IN).

Y: `REAL(KIND=1)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `DBLE(X)*DBLE(Y)'.

DSign Intrinsic
...............

     DSign(A, B)

DSign: `REAL(KIND=2)' function.

A: `REAL(KIND=2)'; scalar; INTENT(IN).

B: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `SIGN()' that is specific to one type for A and B.
See Sign Intrinsic.

DSin Intrinsic
..............

     DSin(X)

DSin: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `SIN()' that is specific to one type for X.  See
Sin Intrinsic.

DSinH Intrinsic
...............

     DSinH(X)

DSinH: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `SINH()' that is specific to one type for X.  See
SinH Intrinsic.

DSqRt Intrinsic
...............

     DSqRt(X)

DSqRt: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `SQRT()' that is specific to one type for X.  See
SqRt Intrinsic.

DTan Intrinsic
..............

     DTan(X)

DTan: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `TAN()' that is specific to one type for X.  See
Tan Intrinsic.

DTanH Intrinsic
...............

     DTanH(X)

DTanH: `REAL(KIND=2)' function.

X: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `TANH()' that is specific to one type for X.  See
TanH Intrinsic.

DTime Intrinsic (subroutine)
............................

     CALL DTime(TARRAY, RESULT)

TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).

RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Initially, return the number of seconds of runtime since the start
of the process's execution in RESULT, and the user and system
components of this in `TARRAY(1)' and `TARRAY(2)' respectively.  The
value of RESULT is equal to `TARRAY(1) + TARRAY(2)'.

   Subsequent invocations of `DTIME()' set values based on accumulations
since the previous invocation.

   On some systems, the underlying timings are represented using types
with sufficiently small limits that overflows (wraparounds) are
possible, such as 32-bit types.  Therefore, the values returned by this
intrinsic might be, or become, negative, or numerically less than
previous values, during a single run of the compiled program.

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine.

   For information on other intrinsics with the same name: DTime Intrinsic (function).

EOShift Intrinsic
.................

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL EOShift' to use this name for
an external procedure.

Epsilon Intrinsic
.................

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Epsilon' to use this name for
an external procedure.

ErF Intrinsic
.............

     ErF(X)

ErF: `REAL' function, the `KIND=' value of the type being that of
argument X.

X: `REAL'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Returns the error function of X.  See `erf(3m)', which provides the
implementation.

ErFC Intrinsic
..............

     ErFC(X)

ErFC: `REAL' function, the `KIND=' value of the type being that of
argument X.

X: `REAL'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Returns the complementary error function of X: `ERFC(R) = 1 -
ERF(R)' (except that the result might be more accurate than explicitly
evaluating that formulae would give).  See `erfc(3m)', which provides
the implementation.

ETime Intrinsic (subroutine)
............................

     CALL ETime(TARRAY, RESULT)

TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).

RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Return the number of seconds of runtime since the start of the
process's execution in RESULT, and the user and system components of
this in `TARRAY(1)' and `TARRAY(2)' respectively.  The value of RESULT
is equal to `TARRAY(1) + TARRAY(2)'.

   On some systems, the underlying timings are represented using types
with sufficiently small limits that overflows (wraparounds) are
possible, such as 32-bit types.  Therefore, the values returned by this
intrinsic might be, or become, negative, or numerically less than
previous values, during a single run of the compiled program.

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine.

   For information on other intrinsics with the same name: ETime Intrinsic (function).

ETime Intrinsic (function)
..........................

     ETime(TARRAY)

ETime: `REAL(KIND=1)' function.

TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Return the number of seconds of runtime since the start of the
process's execution as the function value, and the user and system
components of this in `TARRAY(1)' and `TARRAY(2)' respectively.  The
functions' value is equal to `TARRAY(1) + TARRAY(2)'.

   On some systems, the underlying timings are represented using types
with sufficiently small limits that overflows (wraparounds) are
possible, such as 32-bit types.  Therefore, the values returned by this
intrinsic might be, or become, negative, or numerically less than
previous values, during a single run of the compiled program.

   For information on other intrinsics with the same name: ETime Intrinsic (subroutine).

Exit Intrinsic
..............

     CALL Exit(STATUS)

STATUS: `INTEGER'; OPTIONAL; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Exit the program with status STATUS after closing open Fortran I/O
units and otherwise behaving as `exit(2)'.  If STATUS is omitted the
canonical `success' value will be returned to the system.

Exp Intrinsic
.............

     Exp(X)

Exp: `REAL' or `COMPLEX' function, the exact type being that of
argument X.

X: `REAL' or `COMPLEX'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `E**X', where E is approximately 2.7182818.

   See Log Intrinsic, for the inverse of this function.

Exponent Intrinsic
..................

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Exponent' to use this name for
an external procedure.

FDate Intrinsic (subroutine)
............................

     CALL FDate(DATE)

DATE: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Returns the current date (using the same format as `CTIME()') in
DATE.

   Equivalent to:

     CALL CTIME(DATE, TIME8())

   Programs making use of this intrinsic might not be Year 10000 (Y10K)
compliant.  For example, the date might appear, to such programs, to
wrap around (change from a larger value to a smaller one) as of the
Year 10000.

   See CTime Intrinsic (subroutine).

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine.

   For information on other intrinsics with the same name: FDate Intrinsic (function).

FDate Intrinsic (function)
..........................

     FDate()

FDate: `CHARACTER*(*)' function.

Intrinsic groups: `unix'.

Description:

   Returns the current date (using the same format as `CTIME()').

   Equivalent to:

     CTIME(TIME8())

   Programs making use of this intrinsic might not be Year 10000 (Y10K)
compliant.  For example, the date might appear, to such programs, to
wrap around (change from a larger value to a smaller one) as of the
Year 10000.

   See CTime Intrinsic (function).

   For information on other intrinsics with the same name: FDate Intrinsic (subroutine).

FGet Intrinsic (subroutine)
...........................

     CALL FGet(C, STATUS)

C: `CHARACTER'; scalar; INTENT(OUT).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Reads a single character into C in stream mode from unit 5
(by-passing normal formatted output) using `getc(3)'.  Returns in
STATUS 0 on success, -1 on end-of-file, and the error code from
`ferror(3)' otherwise.

   Stream I/O should not be mixed with normal record-oriented
(formatted or unformatted) I/O on the same unit; the results are
unpredictable.

   For information on other intrinsics with the same name: FGet Intrinsic (function).

FGetC Intrinsic (subroutine)
............................

     CALL FGetC(UNIT, C, STATUS)

UNIT: `INTEGER'; scalar; INTENT(IN).

C: `CHARACTER'; scalar; INTENT(OUT).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Reads a single character into C in stream mode from unit UNIT
(by-passing normal formatted output) using `getc(3)'.  Returns in
STATUS 0 on success, -1 on end-of-file, and the error code from
`ferror(3)' otherwise.

   Stream I/O should not be mixed with normal record-oriented
(formatted or unformatted) I/O on the same unit; the results are
unpredictable.

   For information on other intrinsics with the same name: FGetC Intrinsic (function).

Float Intrinsic
...............

     Float(A)

Float: `REAL(KIND=1)' function.

A: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `REAL()' that is specific to one type for A.  See
Real Intrinsic.

Floor Intrinsic
...............

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Floor' to use this name for an
external procedure.

Flush Intrinsic
...............

     CALL Flush(UNIT)

UNIT: `INTEGER'; OPTIONAL; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Flushes Fortran unit(s) currently open for output.  Without the
optional argument, all such units are flushed, otherwise just the unit
specified by UNIT.

   Some non-GNU implementations of Fortran provide this intrinsic as a
library procedure that might or might not support the (optional) UNIT
argument.

FNum Intrinsic
..............

     FNum(UNIT)

FNum: `INTEGER(KIND=1)' function.

UNIT: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Returns the Unix file descriptor number corresponding to the open
Fortran I/O unit UNIT.  This could be passed to an interface to C I/O
routines.

FPut Intrinsic (subroutine)
...........................

     CALL FPut(C, STATUS)

C: `CHARACTER'; scalar; INTENT(IN).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Writes the single character C in stream mode to unit 6 (by-passing
normal formatted output) using `putc(3)'.  Returns in STATUS 0 on
success, the error code from `ferror(3)' otherwise.

   Stream I/O should not be mixed with normal record-oriented
(formatted or unformatted) I/O on the same unit; the results are
unpredictable.

   For information on other intrinsics with the same name: FPut Intrinsic (function).

FPutC Intrinsic (subroutine)
............................

     CALL FPutC(UNIT, C, STATUS)

UNIT: `INTEGER'; scalar; INTENT(IN).

C: `CHARACTER'; scalar; INTENT(IN).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Writes the single character UNIT in stream mode to unit 6
(by-passing normal formatted output) using `putc(3)'.  Returns in C 0
on success, the error code from `ferror(3)' otherwise.

   Stream I/O should not be mixed with normal record-oriented
(formatted or unformatted) I/O on the same unit; the results are
unpredictable.

   For information on other intrinsics with the same name: FPutC Intrinsic (function).

Fraction Intrinsic
..................

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Fraction' to use this name for
an external procedure.

FSeek Intrinsic
...............

     CALL FSeek(UNIT, OFFSET, WHENCE, ERRLAB)

UNIT: `INTEGER'; scalar; INTENT(IN).

OFFSET: `INTEGER'; scalar; INTENT(IN).

WHENCE: `INTEGER'; scalar; INTENT(IN).

ERRLAB: `*LABEL', where LABEL is the label of an executable statement;
OPTIONAL.

Intrinsic groups: `unix'.

Description:

   Attempts to move Fortran unit UNIT to the specified OFFSET: absolute
offset if WHENCE=0; relative to the current offset if WHENCE=1;
relative to the end of the file if WHENCE=2.  It branches to label
ERRLAB if UNIT is not open or if the call otherwise fails.

FStat Intrinsic (subroutine)
............................

     CALL FStat(UNIT, SARRAY, STATUS)

UNIT: `INTEGER'; scalar; INTENT(IN).

SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Obtains data about the file open on Fortran I/O unit UNIT and places
them in the array SARRAY.  The values in this array are extracted from
the `stat' structure as returned by `fstat(2)' q.v., as follows:

  1. Device ID

  2. Inode number

  3. File mode

  4. Number of links

  5. Owner's uid

  6. Owner's gid

  7. ID of device containing directory entry for file (0 if not
     available)

  8. File size (bytes)

  9. Last access time

 10. Last modification time

 11. Last file status change time

 12. Preferred I/O block size (-1 if not available)

 13. Number of blocks allocated (-1 if not available)

   Not all these elements are relevant on all systems.  If an element
is not relevant, it is returned as 0.

   If the STATUS argument is supplied, it contains 0 on success or a
non-zero error code upon return.

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine, or do not support the (optional)
STATUS argument.

   For information on other intrinsics with the same name: FStat Intrinsic (function).

FStat Intrinsic (function)
..........................

     FStat(UNIT, SARRAY)

FStat: `INTEGER(KIND=1)' function.

UNIT: `INTEGER'; scalar; INTENT(IN).

SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Obtains data about the file open on Fortran I/O unit UNIT and places
them in the array SARRAY.  The values in this array are extracted from
the `stat' structure as returned by `fstat(2)' q.v., as follows:

  1. Device ID

  2. Inode number

  3. File mode

  4. Number of links

  5. Owner's uid

  6. Owner's gid

  7. ID of device containing directory entry for file (0 if not
     available)

  8. File size (bytes)

  9. Last access time

 10. Last modification time

 11. Last file status change time

 12. Preferred I/O block size (-1 if not available)

 13. Number of blocks allocated (-1 if not available)

   Not all these elements are relevant on all systems.  If an element
is not relevant, it is returned as 0.

   Returns 0 on success or a non-zero error code.

   For information on other intrinsics with the same name: FStat Intrinsic (subroutine).

FTell Intrinsic (subroutine)
............................

     CALL FTell(UNIT, OFFSET)

UNIT: `INTEGER'; scalar; INTENT(IN).

OFFSET: `INTEGER(KIND=1)'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Sets OFFSET to the current offset of Fortran unit UNIT (or to -1 if
UNIT is not open).

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine.

   For information on other intrinsics with the same name: FTell Intrinsic (function).

FTell Intrinsic (function)
..........................

     FTell(UNIT)

FTell: `INTEGER(KIND=1)' function.

UNIT: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `unix'.

Description:

   Returns the current offset of Fortran unit UNIT (or -1 if UNIT is
not open).

   For information on other intrinsics with the same name: FTell Intrinsic (subroutine).

GError Intrinsic
................

     CALL GError(MESSAGE)

MESSAGE: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Returns the system error message corresponding to the last system
error (C `errno').

GetArg Intrinsic
................

     CALL GetArg(POS, VALUE)

POS: `INTEGER'; scalar; INTENT(IN).

VALUE: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Sets VALUE to the POS-th command-line argument (or to all blanks if
there are fewer than VALUE command-line arguments); `CALL GETARG(0,
VALUE)' sets VALUE to the name of the program (on systems that support
this feature).

   See IArgC Intrinsic, for information on how to get the number of
arguments.

GetCWD Intrinsic (subroutine)
.............................

     CALL GetCWD(NAME, STATUS)

NAME: `CHARACTER'; scalar; INTENT(OUT).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Places the current working directory in NAME.  If the STATUS
argument is supplied, it contains 0 success or a non-zero error code
upon return (`ENOSYS' if the system does not provide `getcwd(3)' or
`getwd(3)').

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine, or do not support the (optional)
STATUS argument.

   For information on other intrinsics with the same name: GetCWD Intrinsic (function).

GetCWD Intrinsic (function)
...........................

     GetCWD(NAME)

GetCWD: `INTEGER(KIND=1)' function.

NAME: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Places the current working directory in NAME.  Returns 0 on success,
otherwise a non-zero error code (`ENOSYS' if the system does not
provide `getcwd(3)' or `getwd(3)').

   For information on other intrinsics with the same name: GetCWD Intrinsic (subroutine).

GetEnv Intrinsic
................

     CALL GetEnv(NAME, VALUE)

NAME: `CHARACTER'; scalar; INTENT(IN).

VALUE: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Sets VALUE to the value of environment variable given by the value
of NAME (`$name' in shell terms) or to blanks if `$name' has not been
set.  A null character (`CHAR(0)') marks the end of the name in
NAME--otherwise, trailing blanks in NAME are ignored.

GetGId Intrinsic
................

     GetGId()

GetGId: `INTEGER(KIND=1)' function.

Intrinsic groups: `unix'.

Description:

   Returns the group id for the current process.

GetLog Intrinsic
................

     CALL GetLog(LOGIN)

LOGIN: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Returns the login name for the process in LOGIN.

   *Caution:* On some systems, the `getlogin(3)' function, which this
intrinsic calls at run time, is either not implemented or returns a
null pointer.  In the latter case, this intrinsic returns blanks in
LOGIN.

GetPId Intrinsic
................

     GetPId()

GetPId: `INTEGER(KIND=1)' function.

Intrinsic groups: `unix'.

Description:

   Returns the process id for the current process.

GetUId Intrinsic
................

     GetUId()

GetUId: `INTEGER(KIND=1)' function.

Intrinsic groups: `unix'.

Description:

   Returns the user id for the current process.

GMTime Intrinsic
................

     CALL GMTime(STIME, TARRAY)

STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).

TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Given a system time value STIME, fills TARRAY with values extracted
from it appropriate to the GMT time zone using `gmtime(3)'.

   The array elements are as follows:

  1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
     seconds

  2. Minutes after the hour, range 0-59

  3. Hours past midnight, range 0-23

  4. Day of month, range 0-31

  5. Number of months since January, range 0-12

  6. Years since 1900

  7. Number of days since Sunday, range 0-6

  8. Days since January 1

  9. Daylight savings indicator: positive if daylight savings is in
     effect, zero if not, and negative if the information isn't
     available.

HostNm Intrinsic (subroutine)
.............................

     CALL HostNm(NAME, STATUS)

NAME: `CHARACTER'; scalar; INTENT(OUT).

STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Fills NAME with the system's host name returned by `gethostname(2)'.
If the STATUS argument is supplied, it contains 0 on success or a
non-zero error code upon return (`ENOSYS' if the system does not
provide `gethostname(2)').

   Some non-GNU implementations of Fortran provide this intrinsic as
only a function, not as a subroutine, or do not support the (optional)
STATUS argument.

   On some systems (specifically SCO) it might be necessary to link the
"socket" library if you call this routine.  Typically this means adding
`-lg2c -lsocket -lm' to the `g77' command line when linking the program.

   For information on other intrinsics with the same name: HostNm Intrinsic (function).

HostNm Intrinsic (function)
...........................

     HostNm(NAME)

HostNm: `INTEGER(KIND=1)' function.

NAME: `CHARACTER'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Fills NAME with the system's host name returned by `gethostname(2)',
returning 0 on success or a non-zero error code (`ENOSYS' if the system
does not provide `gethostname(2)').

   On some systems (specifically SCO) it might be necessary to link the
"socket" library if you call this routine.  Typically this means adding
`-lg2c -lsocket -lm' to the `g77' command line when linking the program.

   For information on other intrinsics with the same name: HostNm Intrinsic (subroutine).

Huge Intrinsic
..............

   This intrinsic is not yet implemented.  The name is, however,
reserved as an intrinsic.  Use `EXTERNAL Huge' to use this name for an
external procedure.

IAbs Intrinsic
..............

     IAbs(A)

IAbs: `INTEGER(KIND=1)' function.

A: `INTEGER(KIND=1)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `ABS()' that is specific to one type for A.  See
Abs Intrinsic.

IAChar Intrinsic
................

     IAChar(C)

IAChar: `INTEGER(KIND=1)' function.

C: `CHARACTER'; scalar; INTENT(IN).

Intrinsic groups: `f2c', `f90'.

Description:

   Returns the code for the ASCII character in the first character
position of C.

   See AChar Intrinsic, for the inverse of this function.

   See IChar Intrinsic, for the function corresponding to the
system's native character set.

IAnd Intrinsic
..............

     IAnd(I, J)

IAnd: `INTEGER' function, the exact type being the result of
cross-promoting the types of all the arguments.

I: `INTEGER'; scalar; INTENT(IN).

J: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `mil', `f90', `vxt'.

Description:

   Returns value resulting from boolean AND of pair of bits in each of
I and J.

IArgC Intrinsic
...............

     IArgC()

IArgC: `INTEGER(KIND=1)' function.

Intrinsic groups: `unix'.

Description:

   Returns the number of command-line arguments.

   This count does not include the specification of the program name
itself.

IBClr Intrinsic
...............

     IBClr(I, POS)

IBClr: `INTEGER' function, the `KIND=' value of the type being that of
argument I.

I: `INTEGER'; scalar; INTENT(IN).

POS: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `mil', `f90', `vxt'.

Description:

   Returns the value of I with bit POS cleared (set to zero).  See
BTest Intrinsic, for information on bit positions.

IBits Intrinsic
...............

     IBits(I, POS, LEN)

IBits: `INTEGER' function, the `KIND=' value of the type being that of
argument I.

I: `INTEGER'; scalar; INTENT(IN).

POS: `INTEGER'; scalar; INTENT(IN).

LEN: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `mil', `f90', `vxt'.

Description:

   Extracts a subfield of length LEN from I, starting from bit position
POS and extending left for LEN bits.  The result is right-justified and
the remaining bits are zeroed.  The value of `POS+LEN' must be less
than or equal to the value `BIT_SIZE(I)'.  See Bit_Size Intrinsic.

IBSet Intrinsic
...............

     IBSet(I, POS)

IBSet: `INTEGER' function, the `KIND=' value of the type being that of
argument I.

I: `INTEGER'; scalar; INTENT(IN).

POS: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `mil', `f90', `vxt'.

Description:

   Returns the value of I with bit POS set (to one).  See BTest Intrinsic,
for information on bit positions.

IChar Intrinsic
...............

     IChar(C)

IChar: `INTEGER(KIND=1)' function.

C: `CHARACTER'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns the code for the character in the first character position
of C.

   Because the system's native character set is used, the
correspondence between character and their codes is not necessarily the
same between GNU Fortran implementations.

   Note that no intrinsic exists to convert a printable character
string to a numerical value.  For example, there is no intrinsic that,
given the `CHARACTER' value `'154'', returns an `INTEGER' or `REAL'
value with the value `154'.

   Instead, you can use internal-file I/O to do this kind of conversion.
For example:

     INTEGER VALUE
     CHARACTER*10 STRING
     STRING = '154'
     READ (STRING, '(I10)'), VALUE
     PRINT *, VALUE
     END

   The above program, when run, prints:

      154

   See Char Intrinsic, for the inverse of the `ICHAR' function.

   See IAChar Intrinsic, for the function corresponding to the
ASCII character set.

IDate Intrinsic (UNIX)
......................

     CALL IDate(TARRAY)

TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Fills TARRAY with the numerical values at the current local time of
day, month (in the range 1-12), and year in elements 1, 2, and 3,
respectively.  The year has four significant digits.

   Programs making use of this intrinsic might not be Year 10000 (Y10K)
compliant.  For example, the date might appear, to such programs, to
wrap around (change from a larger value to a smaller one) as of the
Year 10000.

   For information on other intrinsics with the same name: IDate Intrinsic (VXT).

IDiM Intrinsic
..............

     IDiM(X, Y)

IDiM: `INTEGER(KIND=1)' function.

X: `INTEGER(KIND=1)'; scalar; INTENT(IN).

Y: `INTEGER(KIND=1)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `DIM()' that is specific to one type for X and Y.
See DiM Intrinsic.

IDInt Intrinsic
...............

     IDInt(A)

IDInt: `INTEGER(KIND=1)' function.

A: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `INT()' that is specific to one type for A.  See
Int Intrinsic.

IDNInt Intrinsic
................

     IDNInt(A)

IDNInt: `INTEGER(KIND=1)' function.

A: `REAL(KIND=2)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `NINT()' that is specific to one type for A.  See
NInt Intrinsic.

IEOr Intrinsic
..............

     IEOr(I, J)

IEOr: `INTEGER' function, the exact type being the result of
cross-promoting the types of all the arguments.

I: `INTEGER'; scalar; INTENT(IN).

J: `INTEGER'; scalar; INTENT(IN).

Intrinsic groups: `mil', `f90', `vxt'.

Description:

   Returns value resulting from boolean exclusive-OR of pair of bits in
each of I and J.

IErrNo Intrinsic
................

     IErrNo()

IErrNo: `INTEGER(KIND=1)' function.

Intrinsic groups: `unix'.

Description:

   Returns the last system error number (corresponding to the C
`errno').

IFix Intrinsic
..............

     IFix(A)

IFix: `INTEGER(KIND=1)' function.

A: `REAL(KIND=1)'; scalar; INTENT(IN).

Intrinsic groups: (standard FORTRAN 77).

Description:

   Archaic form of `INT()' that is specific to one type for A.  See
Int Intrinsic.

Imag Intrinsic
..............

     Imag(Z)

Imag: `REAL' function, the `KIND=' value of the type being that of
argument Z.

Z: `COMPLEX'; scalar; INTENT(IN).

Intrinsic groups: `f2c'.

Description:

   The imaginary part of Z is returned, without conversion.

   *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
something different for some compilers that are not true Fortran 90
compilers but offer some extensions standardized by Fortran 90 (such as
the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').

   The advantage of `IMAG()' is that, while not necessarily more or
less portable than `AIMAG()', it is more likely to cause a compiler
that doesn't support it to produce a diagnostic than generate incorrect
code.

   See REAL() and AIMAG() of Complex, for more information.

ImagPart Intrinsic
..................

     ImagPart(Z)

ImagPart: `REAL' function, the `KIND=' value of the type being that of
argument Z.

Z: `COMPLEX'; scalar; INTENT(IN).

Intrinsic groups: `gnu'.

Description:

   The imaginary part of Z is returned, without conversion.

   *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
something different for some compilers that are not true Fortran 90
compilers but offer some extensions standardized by Fortran 90 (such as
the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').

   The advantage of `IMAGPART()' is that, while not necessarily more or
less portable than `AIMAG()', it is more likely to cause a compiler
that doesn't support it to produce a diagnostic than generate incorrect
code.

   See REAL() and AIMAG() of Complex, for more information.