   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>).

Index Intrinsic
...............

     Index(STRING, SUBSTRING)

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

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns the position of the start of the first occurrence of string
SUBSTRING as a substring in STRING, counting from one.  If SUBSTRING
doesn't occur in STRING, zero is returned.

Int Intrinsic
.............

     Int(A)

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns A with the fractional portion of its magnitude truncated and
its sign preserved, converted to type `INTEGER(KIND=1)'.

   If A is type `COMPLEX', its real part is truncated and converted,
and its imaginary part is disregarded.

   See NInt Intrinsic, for how to convert, rounded to nearest whole
number.

   See AInt Intrinsic, for how to truncate to whole number without
converting.

Int2 Intrinsic
..............

     Int2(A)

Int2: `INTEGER(KIND=6)' function.

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

Intrinsic groups: `gnu'.

Description:

   Returns A with the fractional portion of its magnitude truncated and
its sign preserved, converted to type `INTEGER(KIND=6)'.

   If A is type `COMPLEX', its real part is truncated and converted,
and its imaginary part is disgregarded.

   See Int Intrinsic.

   The precise meaning of this intrinsic might change in a future
version of the GNU Fortran language, as more is learned about how it is
used.

Int8 Intrinsic
..............

     Int8(A)

Int8: `INTEGER(KIND=2)' function.

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

Intrinsic groups: `gnu'.

Description:

   Returns A with the fractional portion of its magnitude truncated and
its sign preserved, converted to type `INTEGER(KIND=2)'.

   If A is type `COMPLEX', its real part is truncated and converted,
and its imaginary part is disgregarded.

   See Int Intrinsic.

   The precise meaning of this intrinsic might change in a future
version of the GNU Fortran language, as more is learned about how it is
used.

IOr Intrinsic
.............

     IOr(I, J)

IOr: `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 OR of pair of bits in each of I
and J.

IRand Intrinsic
...............

     IRand(FLAG)

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

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

Intrinsic groups: `unix'.

Description:

   Returns a uniform quasi-random number up to a system-dependent limit.
If FLAG is 0, the next number in sequence is returned; if FLAG is 1,
the generator is restarted by calling the UNIX function `srand(0)'; if
FLAG has any other value, it is used as a new seed with `srand()'.

   See SRand Intrinsic.

   *Note:* As typically implemented (by the routine of the same name in
the C library), this random number generator is a very poor one, though
the BSD and GNU libraries provide a much better implementation than the
`traditional' one.  On a different system you almost certainly want to
use something better.

IsaTty Intrinsic
................

     IsaTty(UNIT)

IsaTty: `LOGICAL(KIND=1)' function.

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

Intrinsic groups: `unix'.

Description:

   Returns `.TRUE.' if and only if the Fortran I/O unit specified by
UNIT is connected to a terminal device.  See `isatty(3)'.

IShft Intrinsic
...............

     IShft(I, SHIFT)

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

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

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

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

Description:

   All bits representing I are shifted SHIFT places.  `SHIFT.GT.0'
indicates a left shift, `SHIFT.EQ.0' indicates no shift and
`SHIFT.LT.0' indicates a right shift.  If the absolute value of the
shift count is greater than `BIT_SIZE(I)', the result is undefined.
Bits shifted out from the left end or the right end are lost.  Zeros
are shifted in from the opposite end.

   See IShftC Intrinsic, for the circular-shift equivalent.

IShftC Intrinsic
................

     IShftC(I, SHIFT, SIZE)

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

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

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

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

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

Description:

   The rightmost SIZE bits of the argument I are shifted circularly
SHIFT places, i.e. the bits shifted out of one end are shifted into the
opposite end.  No bits are lost.  The unshifted bits of the result are
the same as the unshifted bits of I.  The  absolute value of the
argument SHIFT must be less than or equal to SIZE.  The value of SIZE
must be greater than or equal to one and less than or equal to
`BIT_SIZE(I)'.

   See IShft Intrinsic, for the logical shift equivalent.

ISign Intrinsic
...............

     ISign(A, B)

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

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

B: `INTEGER(KIND=1)'; 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.

ITime Intrinsic
...............

     CALL ITime(TARRAY)

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

Intrinsic groups: `unix'.

Description:

   Returns the current local time hour, minutes, and seconds in elements
1, 2, and 3 of TARRAY, respectively.

Kill Intrinsic (subroutine)
...........................

     CALL Kill(PID, SIGNAL, STATUS)

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

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

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

Intrinsic groups: `unix'.

Description:

   Sends the signal specified by SIGNAL to the process PID.  If the
STATUS argument is supplied, it contains 0 on success or a non-zero
error code upon return.  See `kill(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.

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

Kind Intrinsic
..............

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

LBound Intrinsic
................

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

Len Intrinsic
.............

     Len(STRING)

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

STRING: `CHARACTER'; scalar.

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns the length of STRING.

   If STRING is an array, the length of an element of STRING is
returned.

   Note that STRING need not be defined when this intrinsic is invoked,
since only the length, not the content, of STRING is needed.

   See Bit_Size Intrinsic, for the function that determines the
size of its argument in bits.

Len_Trim Intrinsic
..................

     Len_Trim(STRING)

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

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

Intrinsic groups: `f90'.

Description:

   Returns the index of the last non-blank character in STRING.
`LNBLNK' and `LEN_TRIM' are equivalent.

LGe Intrinsic
.............

     LGe(STRING_A, STRING_B)

LGe: `LOGICAL(KIND=1)' function.

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `.TRUE.' if `STRING_A.GE.STRING_B', `.FALSE.' otherwise.
STRING_A and STRING_B are interpreted as containing ASCII character
codes.  If either value contains a character not in the ASCII character
set, the result is processor dependent.

   If the STRING_A and STRING_B are not the same length, the shorter is
compared as if spaces were appended to it to form a value that has the
same length as the longer.

   The lexical comparison intrinsics `LGe', `LGt', `LLe', and `LLt'
differ from the corresponding intrinsic operators `.GE.', `.GT.',
`.LE.', `.LT.'.  Because the ASCII collating sequence is assumed, the
following expressions always return `.TRUE.':

     LGE ('0', ' ')
     LGE ('A', '0')
     LGE ('a', 'A')

   The following related expressions do *not* always return `.TRUE.',
as they are not necessarily evaluated assuming the arguments use ASCII
encoding:

     '0' .GE. ' '
     'A' .GE. '0'
     'a' .GE. 'A'

   The same difference exists between `LGt' and `.GT.'; between `LLe'
and `.LE.'; and between `LLt' and `.LT.'.

LGt Intrinsic
.............

     LGt(STRING_A, STRING_B)

LGt: `LOGICAL(KIND=1)' function.

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `.TRUE.' if `STRING_A.GT.STRING_B', `.FALSE.' otherwise.
STRING_A and STRING_B are interpreted as containing ASCII character
codes.  If either value contains a character not in the ASCII character
set, the result is processor dependent.

   If the STRING_A and STRING_B are not the same length, the shorter is
compared as if spaces were appended to it to form a value that has the
same length as the longer.

   See LGe Intrinsic, for information on the distinction between
the `LGT' intrinsic and the `.GT.'  operator.

Link Intrinsic (subroutine)
...........................

     CALL Link(PATH1, PATH2, STATUS)

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

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

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

Intrinsic groups: `unix'.

Description:

   Makes a (hard) link from file PATH1 to PATH2.  A null character
(`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
trailing blanks in PATH1 and PATH2 are ignored.  If the STATUS argument
is supplied, it contains 0 on success or a non-zero error code upon
return.  See `link(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.

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

LLe Intrinsic
.............

     LLe(STRING_A, STRING_B)

LLe: `LOGICAL(KIND=1)' function.

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `.TRUE.' if `STRING_A.LE.STRING_B', `.FALSE.' otherwise.
STRING_A and STRING_B are interpreted as containing ASCII character
codes.  If either value contains a character not in the ASCII character
set, the result is processor dependent.

   If the STRING_A and STRING_B are not the same length, the shorter is
compared as if spaces were appended to it to form a value that has the
same length as the longer.

   See LGe Intrinsic, for information on the distinction between
the `LLE' intrinsic and the `.LE.'  operator.

LLt Intrinsic
.............

     LLt(STRING_A, STRING_B)

LLt: `LOGICAL(KIND=1)' function.

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `.TRUE.' if `STRING_A.LT.STRING_B', `.FALSE.' otherwise.
STRING_A and STRING_B are interpreted as containing ASCII character
codes.  If either value contains a character not in the ASCII character
set, the result is processor dependent.

   If the STRING_A and STRING_B are not the same length, the shorter is
compared as if spaces were appended to it to form a value that has the
same length as the longer.

   See LGe Intrinsic, for information on the distinction between
the `LLT' intrinsic and the `.LT.'  operator.

LnBlnk Intrinsic
................

     LnBlnk(STRING)

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

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

Intrinsic groups: `unix'.

Description:

   Returns the index of the last non-blank character in STRING.
`LNBLNK' and `LEN_TRIM' are equivalent.

Loc Intrinsic
.............

     Loc(ENTITY)

Loc: `INTEGER(KIND=7)' function.

ENTITY: Any type; cannot be a constant or expression.

Intrinsic groups: `unix'.

Description:

   The `LOC()' intrinsic works the same way as the `%LOC()' construct.
See The `%LOC()' Construct, for more information.

Log Intrinsic
.............

     Log(X)

Log: `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 the natural logarithm of X, which must be greater than zero
or, if type `COMPLEX', must not be zero.

   See Exp Intrinsic, for the inverse of this function.

   See Log10 Intrinsic, for the `common' (base-10) logarithm
function.

Log10 Intrinsic
...............

     Log10(X)

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns the common logarithm (base 10) of X, which must be greater
than zero.

   The inverse of this function is `10. ** LOG10(X)'.

   See Log Intrinsic, for the natural logarithm function.

Logical Intrinsic
.................

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

Long Intrinsic
..............

     Long(A)

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

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

Intrinsic groups: `unix'.

Description:

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

   The precise meaning of this intrinsic might change in a future
version of the GNU Fortran language, as more is learned about how it is
used.

LShift Intrinsic
................

     LShift(I, SHIFT)

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

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

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

Intrinsic groups: `f2c'.

Description:

   Returns I shifted to the left SHIFT bits.

   Although similar to the expression `I*(2**SHIFT)', there are
important differences.  For example, the sign of the result is not
necessarily the same as the sign of I.

   Currently this intrinsic is defined assuming the underlying
representation of I is as a two's-complement integer.  It is unclear at
this point whether that definition will apply when a different
representation is involved.

   See LShift Intrinsic, for the inverse of this function.

   See IShft Intrinsic, for information on a more widely available
left-shifting intrinsic that is also more precisely defined.

LStat Intrinsic (subroutine)
............................

     CALL LStat(FILE, SARRAY, STATUS)

FILE: `CHARACTER'; 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 given file FILE and places them in the array
SARRAY.  A null character (`CHAR(0)') marks the end of the name in
FILE--otherwise, trailing blanks in FILE are ignored.  If FILE is a
symbolic link it returns data on the link itself, so the routine is
available only on systems that support symbolic links.  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 (`ENOSYS' if the system does not
provide `lstat(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.

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

LStat Intrinsic (function)
..........................

     LStat(FILE, SARRAY)

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

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

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

Intrinsic groups: `unix'.

Description:

   Obtains data about the given file FILE and places them in the array
SARRAY.  A null character (`CHAR(0)') marks the end of the name in
FILE--otherwise, trailing blanks in FILE are ignored.  If FILE is a
symbolic link it returns data on the link itself, so the routine is
available only on systems that support symbolic links.  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 (`ENOSYS' if the
system does not provide `lstat(2)').

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

LTime Intrinsic
...............

     CALL LTime(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 `localtime(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.

MatMul Intrinsic
................

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

Max Intrinsic
.............

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

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns the argument with the largest value.

   See Min Intrinsic, for the opposite function.

Max0 Intrinsic
..............

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

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

A: `INTEGER(KIND=1)'; 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.

Max1 Intrinsic
..............

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

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

A: `REAL(KIND=1)'; 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 and a
different return type.  See Max Intrinsic.

MaxExponent Intrinsic
.....................

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

MaxLoc Intrinsic
................

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

MaxVal Intrinsic
................

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

MClock Intrinsic
................

     MClock()

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

Intrinsic groups: `unix'.

Description:

   Returns the number of clock ticks since the start of the process.
Supported on systems with `clock(3)' (q.v.).

   This intrinsic is not fully portable, such as to systems with 32-bit
`INTEGER' types but supporting times wider than 32 bits.  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.

   See MClock8 Intrinsic, for information on a similar intrinsic
that might be portable to more GNU Fortran implementations, though to
fewer Fortran compilers.

   If the system does not support `clock(3)', -1 is returned.

MClock8 Intrinsic
.................

     MClock8()

MClock8: `INTEGER(KIND=2)' function.

Intrinsic groups: `unix'.

Description:

   Returns the number of clock ticks since the start of the process.
Supported on systems with `clock(3)' (q.v.).

   *Warning:* this intrinsic does not increase the range of the timing
values over that returned by `clock(3)'.  On a system with a 32-bit
`clock(3)', `MCLOCK8' will return a 32-bit value, even though converted
to an `INTEGER(KIND=2)' value.  That means overflows of the 32-bit
value can still occur.  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.

   No Fortran implementations other than GNU Fortran are known to
support this intrinsic at the time of this writing.  See MClock Intrinsic,
for information on a similar intrinsic that might be
portable to more Fortran compilers, though to fewer GNU Fortran
implementations.

   If the system does not support `clock(3)', -1 is returned.

Merge Intrinsic
...............

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

Min Intrinsic
.............

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

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns the argument with the smallest value.

   See Max Intrinsic, for the opposite function.

Min0 Intrinsic
..............

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

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

A: `INTEGER(KIND=1)'; 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.

Min1 Intrinsic
..............

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

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

A: `REAL(KIND=1)'; 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 and a
different return type.  See Min Intrinsic.

MinExponent Intrinsic
.....................

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

MinLoc Intrinsic
................

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

MinVal Intrinsic
................

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

Mod Intrinsic
.............

     Mod(A, P)

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

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns remainder calculated as:

     A - (INT(A / P) * P)

   P must not be zero.

Modulo Intrinsic
................

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

MvBits Intrinsic
................

     CALL MvBits(FROM, FROMPOS, LEN, TO, TOPOS)

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

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

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

TO: `INTEGER' with same `KIND=' value as for FROM; scalar;
INTENT(INOUT).

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

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

Description:

   Moves LEN bits from positions FROMPOS through `FROMPOS+LEN-1' of
FROM to positions TOPOS through `FROMPOS+LEN-1' of TO.  The portion of
argument TO not affected by the movement of bits is unchanged.
Arguments FROM and TO are permitted to be the same numeric storage
unit.  The values of `FROMPOS+LEN' and `TOPOS+LEN' must be less than or
equal to `BIT_SIZE(FROM)'.

Nearest Intrinsic
.................

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

NInt Intrinsic
..............

     NInt(A)

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns A with the fractional portion of its magnitude eliminated by
rounding to the nearest whole number and with its sign preserved,
converted to type `INTEGER(KIND=1)'.

   If A is type `COMPLEX', its real part is rounded and converted.

   A fractional portion exactly equal to `.5' is rounded to the whole
number that is larger in magnitude.  (Also called "Fortran round".)

   See Int Intrinsic, for how to convert, truncate to whole number.

   See ANInt Intrinsic, for how to round to nearest whole number
without converting.

Not Intrinsic
.............

     Not(I)

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

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

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

Description:

   Returns value resulting from boolean NOT of each bit in I.

Or Intrinsic
............

     Or(I, J)

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

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

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

Intrinsic groups: `f2c'.

Description:

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

Pack Intrinsic
..............

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

PError Intrinsic
................

     CALL PError(STRING)

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

Intrinsic groups: `unix'.

Description:

   Prints (on the C `stderr' stream) a newline-terminated error message
corresponding to the last system error.  This is prefixed by STRING, a
colon and a space.  See `perror(3)'.

Precision Intrinsic
...................

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

Present Intrinsic
.................

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

Product Intrinsic
.................

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

Radix Intrinsic
...............

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

Rand Intrinsic
..............

     Rand(FLAG)

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

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

Intrinsic groups: `unix'.

Description:

   Returns a uniform quasi-random number between 0 and 1.  If FLAG is
0, the next number in sequence is returned; if FLAG is 1, the generator
is restarted by calling `srand(0)'; if FLAG has any other value, it is
used as a new seed with `srand'.

   See SRand Intrinsic.

   *Note:* As typically implemented (by the routine of the same name in
the C library), this random number generator is a very poor one, though
the BSD and GNU libraries provide a much better implementation than the
`traditional' one.  On a different system you almost certainly want to
use something better.

Random_Number Intrinsic
.......................

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

Random_Seed Intrinsic
.....................

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

Range Intrinsic
...............

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

Real Intrinsic
..............

     Real(A)

Real: `REAL' function.  The exact type is `REAL(KIND=1)' when argument
A is any type other than `COMPLEX', or when it is `COMPLEX(KIND=1)'.
When A is any `COMPLEX' type other than `COMPLEX(KIND=1)', this
intrinsic is valid only when used as the argument to `REAL()', as
explained below.

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Converts A to `REAL(KIND=1)'.

   Use of `REAL()' with a `COMPLEX' argument (other than
`COMPLEX(KIND=1)') is restricted to the following case:

     REAL(REAL(A))

This expression converts the real part of A to `REAL(KIND=1)'.

   See RealPart Intrinsic, for information on a GNU Fortran
intrinsic that extracts the real part of an arbitrary `COMPLEX' value.

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

RealPart Intrinsic
..................

     RealPart(Z)

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

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

Intrinsic groups: `gnu'.

Description:

   The real part of Z is returned, without conversion.

   *Note:* The way to do this in standard Fortran 90 is `REAL(Z)'.
However, when, for example, Z is `COMPLEX(KIND=2)', `REAL(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 `REALPART()' is that, while not necessarily more or
less portable than `REAL()', 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.

Rename Intrinsic (subroutine)
.............................

     CALL Rename(PATH1, PATH2, STATUS)

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

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

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

Intrinsic groups: `unix'.

Description:

   Renames the file PATH1 to PATH2.  A null character (`CHAR(0)') marks
the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
PATH1 and PATH2 are ignored.  See `rename(2)'.  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: Rename Intrinsic (function).

Repeat Intrinsic
................

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

Reshape Intrinsic
.................

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

RRSpacing Intrinsic
...................

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

RShift Intrinsic
................

     RShift(I, SHIFT)

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

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

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

Intrinsic groups: `f2c'.

Description:

   Returns I shifted to the right SHIFT bits.

   Although similar to the expression `I/(2**SHIFT)', there are
important differences.  For example, the sign of the result is
undefined.

   Currently this intrinsic is defined assuming the underlying
representation of I is as a two's-complement integer.  It is unclear at
this point whether that definition will apply when a different
representation is involved.

   See RShift Intrinsic, for the inverse of this function.

   See IShft Intrinsic, for information on a more widely available
right-shifting intrinsic that is also more precisely defined.

Scale Intrinsic
...............

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

Scan Intrinsic
..............

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

Second Intrinsic (function)
...........................

     Second()

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

Intrinsic groups: `unix'.

Description:

   Returns the process's runtime in seconds--the same value as the UNIX
function `etime' returns.

   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: Second Intrinsic (subroutine).

Second Intrinsic (subroutine)
.............................

     CALL Second(SECONDS)

SECONDS: `REAL'; scalar; INTENT(OUT).

Intrinsic groups: `unix'.

Description:

   Returns the process's runtime in seconds in SECONDS--the same value
as the UNIX function `etime' returns.

   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.

   This routine is known from Cray Fortran.  See CPU_Time Intrinsic,
for a standard equivalent.

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

Selected_Int_Kind Intrinsic
...........................

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

Selected_Real_Kind Intrinsic
............................

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

Set_Exponent Intrinsic
......................

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

Shape Intrinsic
...............

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

Short Intrinsic
...............

     Short(A)

Short: `INTEGER(KIND=6)' function.

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

Intrinsic groups: `unix'.

Description:

   Returns A with the fractional portion of its magnitude truncated and
its sign preserved, converted to type `INTEGER(KIND=6)'.

   If A is type `COMPLEX', its real part is truncated and converted,
and its imaginary part is disgregarded.

   See Int Intrinsic.

   The precise meaning of this intrinsic might change in a future
version of the GNU Fortran language, as more is learned about how it is
used.

Sign Intrinsic
..............

     Sign(A, B)

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

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

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

Intrinsic groups: (standard FORTRAN 77).

Description:

   Returns `ABS(A)*S', where S is +1 if `B.GE.0', -1 otherwise.

   See Abs Intrinsic, for the function that returns the magnitude
of a value.