@ignore
-Copyright (C) 2005, 2006
+Copyright (C) 2005, 2006, 2007
Free Software Foundation, Inc.
This is part of the GNU Fortran manual.
For copying conditions, see the file gfortran.texi.
Some basic guidelines for editing this document:
(1) The intrinsic procedures are to be listed in alphabetical order.
- (2) The generic name is to be use.
+ (2) The generic name is to be used.
(3) The specific names are included in the function index and in a
table at the end of the node (See ABS entry).
(4) Try to maintain the same style for each entry.
@node Intrinsic Procedures
@chapter Intrinsic Procedures
-@cindex Intrinsic Procedures
+@cindex intrinsic procedures
This portion of the document is incomplete and undergoing massive expansion
and editing. All contributions and corrections are strongly encouraged.
@comment - Short
@menu
-* Introduction: Introduction
+* Introduction: Introduction to Intrinsics
* @code{ABORT}: ABORT, Abort the program
* @code{ABS}: ABS, Absolute value
-* @code{ACCESS}: ACCESS, Checks file access method
+* @code{ACCESS}: ACCESS, Checks file access modes
* @code{ACHAR}: ACHAR, Character in @acronym{ASCII} collating sequence
* @code{ACOS}: ACOS, Arccosine function
* @code{ACOSH}: ACOSH, Hyperbolic arccosine function
* @code{TAN}: TAN, Tangent function
* @code{TANH}: TANH, Hyperbolic tangent function
* @code{TIME}: TIME, Time function
+* @code{TIME8}: TIME8, Time function (64-bit)
* @code{TINY}: TINY, Smallest positive number of a real kind
* @code{TRANSFER}: TRANSFER, Transfer bit patterns
* @code{TRANSPOSE}: TRANSPOSE, Transpose an array of rank two
* @code{UBOUND}: UBOUND, Upper dimension bounds of an array
* @code{UMASK}: UMASK, Set the file creation mask
* @code{UNLINK}: UNLINK, Remove a file from the file system
-* @code{UNMASK}: UNMASK, (?)
* @code{UNPACK}: UNPACK, Unpack an array of rank one into an array
* @code{VERIFY}: VERIFY, Scan a string for the absence of a set of characters
* @code{XOR}: XOR, Bitwise logical exclusive or
@end menu
-@node Introduction
+@node Introduction to Intrinsics
@section Introduction to intrinsic procedures
-GNU Fortran provides a rich set of intrinsic procedures that includes all
-the intrinsic procedures required by the Fortran 95 standard, a set of
-intrinsic procedures for backwards compatibility with Gnu Fortran 77
-(i.e., @command{g77}), and a small selection of intrinsic procedures
-from the Fortran 2003 standard. Any description here, which conflicts with a
-description in either the Fortran 95 standard or the Fortran 2003 standard,
-is unintentional and the standard(s) should be considered authoritative.
+The intrinsic procedures provided by GNU Fortran include all of the
+intrinsic procedures required by the Fortran 95 standard, a set of
+intrinsic procedures for backwards compatibility with G77, and a small
+selection of intrinsic procedures from the Fortran 2003 standard. Any
+conflict between a description here and a description in either the
+Fortran 95 standard or the Fortran 2003 standard is unintentional, and
+the standard(s) should be considered authoritative.
The enumeration of the @code{KIND} type parameter is processor defined in
the Fortran 95 standard. GNU Fortran defines the default integer type and
given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}). Finally, for
brevity the optional @code{KIND=} syntax will be omitted.
-Many of the intrinsics procedures take one or more optional arguments.
+Many of the intrinsic procedures take one or more optional arguments.
This document follows the convention used in the Fortran 95 standard,
and denotes such arguments by square brackets.
have been implemented in @command{gfortran} for backwards compatibility
with @command{g77}. It is noted here that these functions and subroutines
cannot be intermixed in a given subprogram. In the descriptions that follow,
-the applicable option(s) is noted.
+the applicable standard for each intrinsic procedure is noted.
@node ABORT
@section @code{ABORT} --- Abort the program
-@findex @code{ABORT} intrinsic
+@cindex @code{ABORT} intrinsic
@cindex abort
@table @asis
@end table
-
@node ABS
@section @code{ABS} --- Absolute value
-@findex @code{ABS} intrinsic
-@findex @code{CABS} intrinsic
-@findex @code{DABS} intrinsic
-@findex @code{IABS} intrinsic
-@findex @code{ZABS} intrinsic
-@findex @code{CDABS} intrinsic
+@cindex @code{ABS} intrinsic
+@cindex @code{CABS} intrinsic
+@cindex @code{DABS} intrinsic
+@cindex @code{IABS} intrinsic
+@cindex @code{ZABS} intrinsic
+@cindex @code{CDABS} intrinsic
@cindex absolute value
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ABS(X)}
+@code{RESULT = ABS(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ACCESS
-@section @code{ACCESS} --- Checks file access method
-@findex @code{ACCESS}
-@cindex file system functions
-
-Not yet implemented in GNU Fortran.
+@section @code{ACCESS} --- Checks file access modes
+@cindex @code{ACCESS}
+@cindex file system operations
@table @asis
@item @emph{Description}:
+@code{ACCESS(NAME, MODE)} checks whether the file @var{NAME}
+exists, is readable, writable or executable. Except for the
+executable check, @code{ACCESS} can be replaced by
+Fortran 95's @code{INQUIRE}.
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
+Inquiry function
+
@item @emph{Syntax}:
+@code{RESULT = ACCESS(NAME, MODE)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{NAME} @tab Scalar @code{CHARACTER} with the file name.
+Tailing blank are ignored unless the character @code{achar(0)} is
+present, then all characters up to and excluding @code{achar(0)} are
+used as file name.
+@item @var{MODE} @tab Scalar @code{CHARACTER} with the file access mode,
+may be any concatenation of @code{"r"} (readable), @code{"w"} (writable)
+and @code{"x"} (executable), or @code{" "} to check for existence.
+@end multitable
+
@item @emph{Return value}:
+Returns a scalar @code{INTEGER}, which is @code{0} if the file is
+accessable in the given mode; otherwise or if an invalid argument
+has been given for @code{MODE} the value @code{1} is returned.
+
@item @emph{Example}:
+@smallexample
+program access_test
+ implicit none
+ character(len=*), parameter :: file = 'test.dat'
+ character(len=*), parameter :: file2 = 'test.dat '//achar(0)
+ if(access(file,' ') == 0) print *, trim(file),' is exists'
+ if(access(file,'r') == 0) print *, trim(file),' is readable'
+ if(access(file,'w') == 0) print *, trim(file),' is writable'
+ if(access(file,'x') == 0) print *, trim(file),' is executable'
+ if(access(file2,'rwx') == 0) &
+ print *, trim(file2),' is readable, writable and executable'
+end program access_test
+@end smallexample
@item @emph{Specific names}:
@item @emph{See also}:
@node ACHAR
@section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence
-@findex @code{ACHAR} intrinsic
+@cindex @code{ACHAR} intrinsic
@cindex @acronym{ASCII} collating sequence
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{C = ACHAR(I)}
+@code{RESULT = ACHAR(I)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
c = achar(32)
end program test_achar
@end smallexample
+
+@item @emph{See also}:
+@ref{CHAR}, @ref{IACHAR}, @ref{ICHAR}
+
@end table
@node ACOS
@section @code{ACOS} --- Arccosine function
-@findex @code{ACOS} intrinsic
-@findex @code{DACOS} intrinsic
+@cindex @code{ACOS} intrinsic
+@cindex @code{DACOS} intrinsic
@cindex trigonometric functions (inverse)
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ACOS(X)}
+@code{RESULT = ACOS(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ACOSH
@section @code{ACOSH} --- Hyperbolic arccosine function
-@findex @code{ACOSH} intrinsic
+@cindex @code{ACOSH} intrinsic
@cindex hyperbolic arccosine
@cindex hyperbolic cosine (inverse)
Elemental function
@item @emph{Syntax}:
-@code{X = ACOSH(X)}
+@code{RESULT = ACOSH(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ADJUSTL
@section @code{ADJUSTL} --- Left adjust a string
-@findex @code{ADJUSTL} intrinsic
+@cindex @code{ADJUSTL} intrinsic
@cindex adjust string
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{STR = ADJUSTL(STR)}
+@code{RESULT = ADJUSTL(STR)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ADJUSTR
@section @code{ADJUSTR} --- Right adjust a string
-@findex @code{ADJUSTR} intrinsic
+@cindex @code{ADJUSTR} intrinsic
@cindex adjust string
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{STR = ADJUSTR(STR)}
+@code{RESULT = ADJUSTR(STR)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node AIMAG
@section @code{AIMAG} --- Imaginary part of complex number
-@findex @code{AIMAG} intrinsic
-@findex @code{DIMAG} intrinsic
-@findex @code{IMAG} intrinsic
-@findex @code{IMAGPART} intrinsic
-@cindex Imaginary part
+@cindex @code{AIMAG} intrinsic
+@cindex @code{DIMAG} intrinsic
+@cindex @code{IMAG} intrinsic
+@cindex @code{IMAGPART} intrinsic
+@cindex imaginary part of a complex number
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{X = AIMAG(Z)}
+@code{RESULT = AIMAG(Z)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node AINT
@section @code{AINT} --- Truncate to a whole number
-@findex @code{AINT} intrinsic
-@findex @code{DINT} intrinsic
+@cindex @code{AINT} intrinsic
+@cindex @code{DINT} intrinsic
@cindex whole number
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = AINT(X)}
-@code{X = AINT(X, KIND)}
+@code{RESULT = AINT(X [, KIND])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@item @var{X} @tab The type of the argument shall be @code{REAL(*)}.
-@item @var{KIND} @tab (Optional) @var{KIND} shall be a scalar integer
-initialization expression.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@node ALARM
@section @code{ALARM} --- Execute a routine after a given delay
-@findex @code{ALARM} intrinsic
+@cindex @code{ALARM} intrinsic
@table @asis
@item @emph{Description}:
Subroutine
@item @emph{Syntax}:
-@code{CALL ALARM(SECONDS, HANDLER)}
-@code{CALL ALARM(SECONDS, HANDLER, STATUS)}
+@code{CALL ALARM(SECONDS, HANDLER [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ALL
@section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true
-@findex @code{ALL} intrinsic
+@cindex @code{ALL} intrinsic
@cindex true values
@table @asis
transformational function
@item @emph{Syntax}:
-@code{L = ALL(MASK)}
-@code{L = ALL(MASK, DIM)}
+@code{RESULT = ALL(MASK [, DIM])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ALLOCATED
@section @code{ALLOCATED} --- Status of an allocatable entity
-@findex @code{ALLOCATED} intrinsic
+@cindex @code{ALLOCATED} intrinsic
@cindex allocation status
@table @asis
Inquiry function
@item @emph{Syntax}:
-@code{L = ALLOCATED(X)}
+@code{RESULT = ALLOCATED(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node AND
@section @code{AND} --- Bitwise logical AND
-@findex @code{AND} intrinsic
+@cindex @code{AND} intrinsic
@cindex bit operations
@table @asis
@node ANINT
@section @code{ANINT} --- Nearest whole number
-@findex @code{ANINT} intrinsic
-@findex @code{DNINT} intrinsic
+@cindex @code{ANINT} intrinsic
+@cindex @code{DNINT} intrinsic
@cindex whole number
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ANINT(X)}
-@code{X = ANINT(X, KIND)}
+@code{RESULT = ANINT(X [, KIND])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@item @var{X} @tab The type of the argument shall be @code{REAL(*)}.
-@item @var{KIND} @tab (Optional) @var{KIND} shall be a scalar integer
-initialization expression.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@node ANY
@section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true
-@findex @code{ANY} intrinsic
+@cindex @code{ANY} intrinsic
@cindex true values
@table @asis
transformational function
@item @emph{Syntax}:
-@code{L = ANY(MASK)}
-@code{L = ANY(MASK, DIM)}
+@code{RESULT = ANY(MASK [, DIM])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ASIN
@section @code{ASIN} --- Arcsine function
-@findex @code{ASIN} intrinsic
-@findex @code{DASIN} intrinsic
+@cindex @code{ASIN} intrinsic
+@cindex @code{DASIN} intrinsic
@cindex trigonometric functions (inverse)
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ASIN(X)}
+@code{RESULT = ASIN(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ASINH
@section @code{ASINH} --- Hyperbolic arcsine function
-@findex @code{ASINH} intrinsic
+@cindex @code{ASINH} intrinsic
@cindex hyperbolic arcsine
@cindex hyperbolic sine (inverse)
Elemental function
@item @emph{Syntax}:
-@code{X = ASINH(X)}
+@code{RESULT = ASINH(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ASSOCIATED
@section @code{ASSOCIATED} --- Status of a pointer or pointer/target pair
-@findex @code{ASSOCIATED} intrinsic
+@cindex @code{ASSOCIATED} intrinsic
@cindex pointer status
@table @asis
Inquiry function
@item @emph{Syntax}:
-@code{L = ASSOCIATED(PTR)}
-@code{L = ASSOCIATED(PTR [, TGT])}
+@code{RESULT = ASSOCIATED(PTR [, TGT])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ATAN
@section @code{ATAN} --- Arctangent function
-@findex @code{ATAN} intrinsic
-@findex @code{DATAN} intrinsic
+@cindex @code{ATAN} intrinsic
+@cindex @code{DATAN} intrinsic
@cindex trigonometric functions (inverse)
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ATAN(X)}
+@code{RESULT = ATAN(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ATAN2
@section @code{ATAN2} --- Arctangent function
-@findex @code{ATAN2} intrinsic
-@findex @code{DATAN2} intrinsic
+@cindex @code{ATAN2} intrinsic
+@cindex @code{DATAN2} intrinsic
@cindex trigonometric functions (inverse)
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ATAN2(Y,X)}
+@code{RESULT = ATAN2(Y,X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ATANH
@section @code{ATANH} --- Hyperbolic arctangent function
-@findex @code{ASINH} intrinsic
+@cindex @code{ASINH} intrinsic
@cindex hyperbolic arctangent
@cindex hyperbolic tangent (inverse)
Elemental function
@item @emph{Syntax}:
-@code{X = ATANH(X)}
+@code{RESULT = ATANH(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab The type shall be @code{REAL(*)} with a magnitude that is less than or equal to one.
+@item @var{X} @tab The type shall be @code{REAL(*)} with a magnitude
+that is less than or equal to one.
@end multitable
@item @emph{Return value}:
@node BESJ0
@section @code{BESJ0} --- Bessel function of the first kind of order 0
-@findex @code{BESJ0} intrinsic
-@findex @code{DBESJ0} intrinsic
+@cindex @code{BESJ0} intrinsic
+@cindex @code{DBESJ0} intrinsic
@cindex Bessel
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = BESJ0(X)}
+@code{RESULT = BESJ0(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BESJ1
@section @code{BESJ1} --- Bessel function of the first kind of order 1
-@findex @code{BESJ1} intrinsic
-@findex @code{DBESJ1} intrinsic
+@cindex @code{BESJ1} intrinsic
+@cindex @code{DBESJ1} intrinsic
@cindex Bessel
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = BESJ1(X)}
+@code{RESULT = BESJ1(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BESJN
@section @code{BESJN} --- Bessel function of the first kind
-@findex @code{BESJN} intrinsic
-@findex @code{DBESJN} intrinsic
+@cindex @code{BESJN} intrinsic
+@cindex @code{DBESJN} intrinsic
@cindex Bessel
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{Y = BESJN(N, X)}
+@code{RESULT = BESJN(N, X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BESY0
@section @code{BESY0} --- Bessel function of the second kind of order 0
-@findex @code{BESY0} intrinsic
-@findex @code{DBESY0} intrinsic
+@cindex @code{BESY0} intrinsic
+@cindex @code{DBESY0} intrinsic
@cindex Bessel
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = BESY0(X)}
+@code{RESULT = BESY0(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BESY1
@section @code{BESY1} --- Bessel function of the second kind of order 1
-@findex @code{BESY1} intrinsic
-@findex @code{DBESY1} intrinsic
+@cindex @code{BESY1} intrinsic
+@cindex @code{DBESY1} intrinsic
@cindex Bessel
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = BESY1(X)}
+@code{RESULT = BESY1(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BESYN
@section @code{BESYN} --- Bessel function of the second kind
-@findex @code{BESYN} intrinsic
-@findex @code{DBESYN} intrinsic
+@cindex @code{BESYN} intrinsic
+@cindex @code{DBESYN} intrinsic
@cindex Bessel
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{Y = BESYN(N, X)}
+@code{RESULT = BESYN(N, X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BIT_SIZE
@section @code{BIT_SIZE} --- Bit size inquiry function
-@findex @code{BIT_SIZE} intrinsic
-@cindex bit_size
+@cindex @code{BIT_SIZE} intrinsic
+@cindex bit size of a variable
+@cindex size of a variable, in bits
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = BIT_SIZE(I)}
+@code{RESULT = BIT_SIZE(I)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node BTEST
@section @code{BTEST} --- Bit test function
-@findex @code{BTEST} intrinsic
+@cindex @code{BTEST} intrinsic
@cindex bit operations
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{I = BTEST(I,POS)}
+@code{RESULT = BTEST(I, POS)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node CEILING
@section @code{CEILING} --- Integer ceiling function
-@findex @code{CEILING} intrinsic
-@cindex CEILING
+@cindex @code{CEILING} intrinsic
+@cindex ceiling
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{I = CEILING(X[,KIND])}
+@code{RESULT = CEILING(X [, KIND])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@item @var{X} @tab The type shall be @code{REAL(*)}.
-@item @var{KIND} @tab (Optional) scalar integer initialization expression.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@node CHAR
@section @code{CHAR} --- Character conversion function
-@findex @code{CHAR} intrinsic
+@cindex @code{CHAR} intrinsic
@cindex conversion function (character)
@table @asis
@item @emph{Description}:
-@code{CHAR(I,[KIND])} returns the character represented by the integer @var{I}.
+@code{CHAR(I [, KIND])} returns the character represented by the integer @var{I}.
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
-@code{C = CHAR(I[,KIND])}
+@code{RESULT = CHAR(I [, KIND])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@item @var{I} @tab The type shall be @code{INTEGER(*)}.
-@item @var{KIND} @tab Optional scaler integer initialization expression.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@end smallexample
@item @emph{See also}:
-@ref{ACHAR}, @ref{ICHAR}, @ref{IACHAR}
+@ref{ACHAR}, @ref{IACHAR}, @ref{ICHAR}
@end table
@node CHDIR
@section @code{CHDIR} --- Change working directory
-@findex @code{CHDIR} intrinsic
-@cindex file system functions
+@cindex @code{CHDIR} intrinsic
+@cindex file system operations
@table @asis
@item @emph{Description}:
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL chdir(PATH[,STATUS])}
+@code{CALL CHDIR(PATH [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{PATH} @tab The type shall be @code{CHARACTER(*)} and shall specify a valid path within the file system.
+@item @var{PATH} @tab The type shall be @code{CHARACTER(*)} and shall
+ specify a valid path within the file system.
@item @var{STATUS} @tab (Optional) status flag. Returns 0 on success,
a system specific and non-zero error code otherwise.
@end multitable
@node CHMOD
@section @code{CHMOD} --- Change access permissions of files
-@findex @code{CHMOD}
-@cindex file system functions
-
-Not yet implemented in GNU Fortran.
+@cindex @code{CHMOD} intrinsic
+@cindex file system operations
@table @asis
@item @emph{Description}:
+@code{CHMOD} changes the permissions of a file. This function invokes
+@code{/bin/chmod} and might therefore not work on all platforms.
+
+This intrinsic is provided in both subroutine and function forms; however,
+only one form can be used in any given program unit.
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Subroutine
+Subroutine, non-elemental function
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{CALL CHMOD(NAME, MODE[, STATUS])}
+@item @code{STATUS = CHMOD(NAME, MODE)}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{NAME} @tab Scalar @code{CHARACTER} with the file name.
+Trailing blanks are ignored unless the character @code{achar(0)} is
+present, then all characters up to and excluding @code{achar(0)} are
+used as the file name.
+
+@item @var{MODE} @tab Scalar @code{CHARACTER} giving the file permission.
+@var{MODE} uses the same syntax as the @var{MODE} argument of
+@code{/bin/chmod}.
+
+@item @var{STATUS} @tab (optional) scalar @code{INTEGER}, which is
+@code{0} on success and non-zero otherwise.
+@end multitable
+
@item @emph{Return value}:
+In either syntax, @var{STATUS} is set to @code{0} on success and non-zero
+otherwise.
+
@item @emph{Example}:
+@code{CHMOD} as subroutine
+@smallexample
+program chmod_test
+ implicit none
+ integer :: status
+ call chmod('test.dat','u+x',status)
+ print *, 'Status: ', status
+end program chmod_test
+@end smallexample
+@code{CHMOD} as non-elemental function:
+@smallexample
+program chmod_test
+ implicit none
+ integer :: status
+ status = chmod('test.dat','u+x')
+ print *, 'Status: ', status
+end program chmod_test
+@end smallexample
@item @emph{Specific names}:
@item @emph{See also}:
@node CMPLX
@section @code{CMPLX} --- Complex conversion function
-@findex @code{CMPLX} intrinsic
-@cindex CMPLX
+@cindex @code{CMPLX} intrinsic
+@cindex complex numbers, conversion to
@table @asis
@item @emph{Description}:
-@code{CMPLX(X[,Y[,KIND]])} returns a complex number where @var{X} is converted to
+@code{CMPLX(X [, Y [, KIND]])} returns a complex number where @var{X} is converted to
the real component. If @var{Y} is present it is converted to the imaginary
component. If @var{Y} is not present then the imaginary component is set to
0.0. If @var{X} is complex then @var{Y} must not be present.
Elemental function
@item @emph{Syntax}:
-@code{C = CMPLX(X[,Y[,KIND]])}
+@code{RESULT = CMPLX(X [, Y [, KIND]])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab The type may be @code{INTEGER(*)}, @code{REAL(*)}, or @code{COMPLEX(*)}.
-@item @var{Y} @tab Optional, allowed if @var{X} is not @code{COMPLEX(*)}. May be @code{INTEGER(*)} or @code{REAL(*)}.
-@item @var{KIND} @tab Optional scaler integer initialization expression.
+@item @var{X} @tab The type may be @code{INTEGER(*)}, @code{REAL(*)},
+ or @code{COMPLEX(*)}.
+@item @var{Y} @tab (Optional; only allowed if @var{X} is not
+ @code{COMPLEX(*)}.) May be @code{INTEGER(*)}
+ or @code{REAL(*)}.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@node COMMAND_ARGUMENT_COUNT
@section @code{COMMAND_ARGUMENT_COUNT} --- Get number of command line arguments
-@findex @code{COMMAND_ARGUMENT_COUNT} intrinsic
-@cindex command line arguments
-@cindex getopt
+@cindex @code{COMMAND_ARGUMENT_COUNT} intrinsic
+@cindex command-line arguments, to program
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = COMMAND_ARGUMENT_COUNT()}
+@code{RESULT = COMMAND_ARGUMENT_COUNT()}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node CONJG
@section @code{CONJG} --- Complex conjugate function
-@findex @code{CONJG} intrinsic
-@findex @code{DCONJG} intrinsic
+@cindex @code{CONJG} intrinsic
+@cindex @code{DCONJG} intrinsic
@cindex complex conjugate
@table @asis
@item @emph{Description}:
@node COS
@section @code{COS} --- Cosine function
-@findex @code{COS} intrinsic
-@findex @code{DCOS} intrinsic
-@findex @code{ZCOS} intrinsic
-@findex @code{CDCOS} intrinsic
+@cindex @code{COS} intrinsic
+@cindex @code{DCOS} intrinsic
+@cindex @code{ZCOS} intrinsic
+@cindex @code{CDCOS} intrinsic
@cindex trigonometric functions
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = COS(X)}
+@code{RESULT = COS(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node COSH
@section @code{COSH} --- Hyperbolic cosine function
-@findex @code{COSH} intrinsic
-@findex @code{DCOSH} intrinsic
+@cindex @code{COSH} intrinsic
+@cindex @code{DCOSH} intrinsic
@cindex hyperbolic cosine
@table @asis
@node COUNT
@section @code{COUNT} --- Count function
-@findex @code{COUNT} intrinsic
+@cindex @code{COUNT} intrinsic
@cindex count
@table @asis
@item @emph{Description}:
-@code{COUNT(MASK[,DIM])} counts the number of @code{.TRUE.} elements of
+@code{COUNT(MASK [, DIM])} counts the number of @code{.TRUE.} elements of
@var{MASK} along the dimension of @var{DIM}. If @var{DIM} is omitted it is
taken to be @code{1}. @var{DIM} is a scaler of type @code{INTEGER} in the
range of @math{1 /leq DIM /leq n)} where @math{n} is the rank of @var{MASK}.
transformational function
@item @emph{Syntax}:
-@code{I = COUNT(MASK[,DIM])}
+@code{RESULT = COUNT(MASK [, DIM])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node CPU_TIME
@section @code{CPU_TIME} --- CPU elapsed time in seconds
-@findex @code{CPU_TIME} intrinsic
-@cindex CPU_TIME
+@cindex @code{CPU_TIME} intrinsic
+@cindex time, elapsed
+@cindex elapsed time
@table @asis
@item @emph{Description}:
Subroutine
@item @emph{Syntax}:
-@code{CPU_TIME(X)}
+@code{CALL CPU_TIME(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node CSHIFT
@section @code{CSHIFT} --- Circular shift function
-@findex @code{CSHIFT} intrinsic
-@cindex bit manipulation
+@cindex @code{CSHIFT} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
-@code{CSHIFT(ARRAY, SHIFT[,DIM])} performs a circular shift on elements of
+@code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of
@var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is omitted it is
taken to be @code{1}. @var{DIM} is a scaler of type @code{INTEGER} in the
range of @math{1 /leq DIM /leq n)} where @math{n} is the rank of @var{ARRAY}.
transformational function
@item @emph{Syntax}:
-@code{A = CSHIFT(A, SHIFT[,DIM])}
+@code{RESULT = CSHIFT(A, SHIFT [, DIM])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node CTIME
@section @code{CTIME} --- Convert a time into a string
-@findex @code{CTIME} intrinsic
-@cindex ctime subroutine
+@cindex @code{CTIME} intrinsic
+@cindex time, conversion function
@table @asis
@item @emph{Description}:
print *, 'Program was started on ', date
end program test_ctime
@end smallexample
+
+@item @emph{See Also}:
+@ref{GMTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
+
@end table
+
+
@node DATE_AND_TIME
@section @code{DATE_AND_TIME} --- Date and time subroutine
-@findex @code{DATE_AND_TIME} intrinsic
-@cindex DATE_AND_TIME
+@cindex @code{DATE_AND_TIME} intrinsic
+@cindex date, current
+@cindex current date
+@cindex time, current
+@cindex current time
@table @asis
@item @emph{Description}:
@node DBLE
@section @code{DBLE} --- Double conversion function
-@findex @code{DBLE} intrinsic
+@cindex @code{DBLE} intrinsic
@cindex double conversion
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = DBLE(X)}
+@code{RESULT = DBLE(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab The type shall be @code{INTEGER(*)}, @code{REAL(*)}, or @code{COMPLEX(*)}.
+@item @var{X} @tab The type shall be @code{INTEGER(*)}, @code{REAL(*)},
+ or @code{COMPLEX(*)}.
@end multitable
@item @emph{Return value}:
@node DCMPLX
@section @code{DCMPLX} --- Double complex conversion function
-@findex @code{DCMPLX} intrinsic
-@cindex DCMPLX
+@cindex @code{DCMPLX} intrinsic
+@cindex complex numbers, conversion to
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{C = DCMPLX(X)}
-@code{C = DCMPLX(X,Y)}
+@code{RESULT = DCMPLX(X [, Y])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab The type may be @code{INTEGER(*)}, @code{REAL(*)}, or @code{COMPLEX(*)}.
-@item @var{Y} @tab Optional if @var{X} is not @code{COMPLEX(*)}. May be @code{INTEGER(*)} or @code{REAL(*)}.
+@item @var{X} @tab The type may be @code{INTEGER(*)}, @code{REAL(*)},
+ or @code{COMPLEX(*)}.
+@item @var{Y} @tab (Optional if @var{X} is not @code{COMPLEX(*)}.) May be
+ @code{INTEGER(*)} or @code{REAL(*)}.
@end multitable
@item @emph{Return value}:
@node DFLOAT
@section @code{DFLOAT} --- Double conversion function
-@findex @code{DFLOAT} intrinsic
+@cindex @code{DFLOAT} intrinsic
@cindex double float conversion
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = DFLOAT(X)}
+@code{RESULT = DFLOAT(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node DIGITS
@section @code{DIGITS} --- Significant digits function
-@findex @code{DIGITS} intrinsic
+@cindex @code{DIGITS} intrinsic
@cindex digits, significant
@table @asis
Inquiry function
@item @emph{Syntax}:
-@code{C = DIGITS(X)}
+@code{RESULT = DIGITS(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node DIM
@section @code{DIM} --- Dim function
-@findex @code{DIM} intrinsic
-@findex @code{IDIM} intrinsic
-@findex @code{DDIM} intrinsic
+@cindex @code{DIM} intrinsic
+@cindex @code{IDIM} intrinsic
+@cindex @code{DDIM} intrinsic
@cindex dim
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = DIM(X,Y)}
+@code{RESULT = DIM(X, Y)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node DOT_PRODUCT
@section @code{DOT_PRODUCT} --- Dot product function
-@findex @code{DOT_PRODUCT} intrinsic
-@cindex Dot product
+@cindex @code{DOT_PRODUCT} intrinsic
+@cindex dot product
@table @asis
@item @emph{Description}:
transformational function
@item @emph{Syntax}:
-@code{S = DOT_PRODUCT(X,Y)}
+@code{RESULT = DOT_PRODUCT(X, Y)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node DPROD
@section @code{DPROD} --- Double product function
-@findex @code{DPROD} intrinsic
-@cindex Double product
+@cindex @code{DPROD} intrinsic
+@cindex double-precision product
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{D = DPROD(X,Y)}
+@code{RESULT = DPROD(X, Y)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node DREAL
@section @code{DREAL} --- Double real part function
-@findex @code{DREAL} intrinsic
-@cindex Double real part
+@cindex @code{DREAL} intrinsic
+@cindex double-precision real part
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{D = DREAL(Z)}
+@code{RESULT = DREAL(Z)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node DTIME
@section @code{DTIME} --- Execution time subroutine (or function)
-@findex @code{DTIME} intrinsic
-@cindex dtime subroutine
+@cindex @code{DTIME} intrinsic
+@cindex time, elapsed
+@cindex elapsed time
@table @asis
@item @emph{Description}:
@node EOSHIFT
@section @code{EOSHIFT} --- End-off shift function
-@findex @code{EOSHIFT} intrinsic
-@cindex bit manipulation
+@cindex @code{EOSHIFT} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
transformational function
@item @emph{Syntax}:
-@code{A = EOSHIFT(A, SHIFT[,BOUNDARY, DIM])}
+@code{RESULT = EOSHIFT(A, SHIFT [, BOUNDARY, DIM])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node EPSILON
@section @code{EPSILON} --- Epsilon function
-@findex @code{EPSILON} intrinsic
+@cindex @code{EPSILON} intrinsic
@cindex epsilon, significant
@table @asis
Inquiry function
@item @emph{Syntax}:
-@code{C = EPSILON(X)}
+@code{RESULT = EPSILON(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ERF
@section @code{ERF} --- Error function
-@findex @code{ERF} intrinsic
+@cindex @code{ERF} intrinsic
@cindex error function
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ERF(X)}
+@code{RESULT = ERF(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ERFC
@section @code{ERFC} --- Error function
-@findex @code{ERFC} intrinsic
+@cindex @code{ERFC} intrinsic
@cindex error function
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = ERFC(X)}
+@code{RESULT = ERFC(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ETIME
@section @code{ETIME} --- Execution time subroutine (or function)
-@findex @code{ETIME} intrinsic
-@cindex time functions
+@cindex @code{ETIME} intrinsic
+@cindex time, elapsed
@table @asis
@item @emph{Description}:
@node EXIT
@section @code{EXIT} --- Exit the program with status.
-@findex @code{EXIT}
-@cindex exit
+@cindex @code{EXIT} intrinsic
+@cindex exit program
@table @asis
@item @emph{Description}:
@node EXP
@section @code{EXP} --- Exponential function
-@findex @code{EXP} intrinsic
-@findex @code{DEXP} intrinsic
-@findex @code{ZEXP} intrinsic
-@findex @code{CDEXP} intrinsic
+@cindex @code{EXP} intrinsic
+@cindex @code{DEXP} intrinsic
+@cindex @code{ZEXP} intrinsic
+@cindex @code{CDEXP} intrinsic
@cindex exponential
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = EXP(X)}
+@code{RESULT = EXP(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node EXPONENT
@section @code{EXPONENT} --- Exponent function
-@findex @code{EXPONENT} intrinsic
-@cindex exponent function
+@cindex @code{EXPONENT} intrinsic
+@cindex exponent part of a real number
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{I = EXPONENT(X)}
+@code{RESULT = EXPONENT(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node FDATE
@section @code{FDATE} --- Get the current time as a string
-@findex @code{FDATE} intrinsic
-@cindex fdate subroutine
+@cindex @code{FDATE} intrinsic
+@cindex time, current
+@cindex current time
+@cindex date, current
+@cindex current date
@table @asis
@item @emph{Description}:
@code{FDATE(DATE)} returns the current date (using the same format as
@code{CTIME}) in @var{DATE}. It is equivalent to @code{CALL CTIME(DATE,
-TIME8())}.
+TIME())}.
If @code{FDATE} is invoked as a function, it can not be invoked as a
subroutine, and vice versa.
@end multitable
@item @emph{Return value}:
-The current date and time as a string.
+The current date as a string.
@item @emph{Example}:
@smallexample
@node FLOAT
@section @code{FLOAT} --- Convert integer to default real
-@findex @code{FLOAT} intrinsic
+@cindex @code{FLOAT} intrinsic
@cindex conversion function (float)
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = FLOAT(I)}
+@code{RESULT = FLOAT(I)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end multitable
@item @emph{Return value}:
-The return value is of type default @code{REAL}
+The return value is of type default @code{REAL}.
@item @emph{Example}:
@smallexample
@node FGET
@section @code{FGET} --- Read a single character in stream mode from stdin
-@findex @code{FGET} intrinsic
+@cindex @code{FGET} intrinsic
@cindex file operations
@cindex stream operations
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL fget(C[,STATUS])}
+@code{CALL FGET(C [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@item @var{C} @tab The type shall be @code{CHARACTER}.
-@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}. Returns 0 on success,
- -1 on end-of-file and a system specific positive error code otherwise.
+@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
+ Returns 0 on success, -1 on end-of-file, and a
+ system specific positive error code otherwise.
@end multitable
@item @emph{Example}:
@node FGETC
@section @code{FGETC} --- Read a single character in stream mode
-@findex @code{FGETC} intrinsic
+@cindex @code{FGETC} intrinsic
@cindex file operations
@cindex stream operations
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL fgetc(UNIT,C[,STATUS])}
+@code{CALL FGETC(UNIT, C [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node FLOOR
@section @code{FLOOR} --- Integer floor function
-@findex @code{FLOOR} intrinsic
+@cindex @code{FLOOR} intrinsic
@cindex floor
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{I = FLOOR(X[,KIND])}
+@code{RESULT = FLOOR(X [, KIND])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@item @var{X} @tab The type shall be @code{REAL(*)}.
-@item @var{KIND} @tab Optional scaler integer initialization expression.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@node FLUSH
@section @code{FLUSH} --- Flush I/O unit(s)
-@findex @code{FLUSH}
-@cindex flush
+@cindex @code{FLUSH} intrinsic
+@cindex flush output files
@table @asis
@item @emph{Description}:
@node FNUM
@section @code{FNUM} --- File number function
-@findex @code{FNUM} intrinsic
+@cindex @code{FNUM} intrinsic
@cindex fnum
@table @asis
non-elemental function
@item @emph{Syntax}:
-@code{I = FNUM(UNIT)}
+@code{RESULT = FNUM(UNIT)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node FPUT
@section @code{FPUT} --- Write a single character in stream mode to stdout
-@findex @code{FPUT} intrinsic
+@cindex @code{FPUT} intrinsic
@cindex file operations
@cindex stream operations
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL fput(C[,STATUS])}
+@code{CALL FPUT(C [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node FPUTC
@section @code{FPUTC} --- Write a single character in stream mode
-@findex @code{FPUTC} intrinsic
+@cindex @code{FPUTC} intrinsic
@cindex file operations
@cindex stream operations
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL fputc(UNIT,C[,STATUS])}
+@code{CALL FPUTC(UNIT, C [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node FRACTION
@section @code{FRACTION} --- Fractional part of the model representation
-@findex @code{FRACTION} intrinsic
+@cindex @code{FRACTION} intrinsic
@cindex fractional part
@table @asis
@node FREE
@section @code{FREE} --- Frees memory
-@findex @code{FREE} intrinsic
-@cindex FREE
+@cindex @code{FREE} intrinsic
+@cindex Cray pointers
@table @asis
@item @emph{Description}:
@node FSTAT
@section @code{FSTAT} --- Get file status
-@findex @code{FSTAT} intrinsic
+@cindex @code{FSTAT} intrinsic
@cindex file system operations
@table @asis
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL fstat(UNIT,BUFF[,STATUS])}
+@code{CALL FSTAT(UNIT, BUFF [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node FSEEK
@section @code{FSEEK} --- Low level file positioning subroutine
-@findex @code{FSEEK}
-@cindex file system functions
+@cindex @code{FSEEK} intrinsic
+@cindex file system operations
Not yet implemented in GNU Fortran.
@node FTELL
@section @code{FTELL} --- Current stream position
-@findex @code{FTELL} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{FTELL} intrinsic
@table @asis
@item @emph{Description}:
+Retrieves the current position within an open file.
+
+This intrinsic is provided in both subroutine and function forms; however,
+only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
+Subroutine, function
+
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{CALL FTELL(UNIT, OFFSET)}
+@item @code{OFFSET = FTELL(UNIT)}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{OFFSET} @tab Shall of type @code{INTEGER}.
+@item @var{UNIT} @tab Shall of type @code{INTEGER}.
+@end multitable
+
@item @emph{Return value}:
+In either syntax, @var{OFFSET} is set to the current offset of unit
+number @var{UNIT}, or to @math{-1} if the unit is not currently open.
+
@item @emph{Example}:
+@smallexample
+PROGRAM test_ftell
+ INTEGER :: i
+ OPEN(10, FILE="temp.dat")
+ CALL ftell(10,i)
+ WRITE(*,*) i
+END PROGRAM
+@end smallexample
@item @emph{See also}:
@ref{FSEEK}
@node GETARG
@section @code{GETARG} --- Get command line arguments
-@findex @code{GETARG} intrinsic
-@cindex command line arguments
-@cindex getopt
+@cindex @code{GETARG} intrinsic
+@cindex command-line arguments, to program
@table @asis
@item @emph{Description}:
Subroutine
@item @emph{Syntax}:
-@code{CALL GETARG(N,ARG)}
+@code{CALL GETARG(N, ARG)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end smallexample
@item @emph{See also}:
-GNU Fortran 77 compability function: @ref{IARGC}
+GNU Fortran 77 compatibility function: @ref{IARGC}
-F2003 functions and subroutines: @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
+F2003 functions and subroutines: @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT},
+@ref{COMMAND_ARGUMENT_COUNT}
@end table
@node GET_COMMAND
@section @code{GET_COMMAND} --- Get the entire command line
-@findex @code{GET_COMMAND} intrinsic
-@cindex command line arguments
-@cindex getopt
+@cindex @code{GET_COMMAND} intrinsic
+@cindex command-line arguments, to program
@table @asis
@item @emph{Description}:
@node GET_COMMAND_ARGUMENT
@section @code{GET_COMMAND_ARGUMENT} --- Get command line arguments
-@findex @code{GET_COMMAND_ARGUMENT} intrinsic
-@cindex command line arguments
-@cindex getopt
+@cindex @code{GET_COMMAND_ARGUMENT} intrinsic
+@cindex command-line arguments, to program
@table @asis
@item @emph{Description}:
Subroutine
@item @emph{Syntax}:
-@code{CALL GET_COMMAND_ARGUMENT(N,ARG)}
+@code{CALL GET_COMMAND_ARGUMENT(N, ARG)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node GETCWD
@section @code{GETCWD} --- Get current working directory
-@findex @code{GETCWD} intrinsic
-@cindex file system functions
+@cindex @code{GETCWD} intrinsic
+@cindex file system operations
@table @asis
@item @emph{Description}:
Non-elemental subroutine.
@item @emph{Syntax}:
-@code{CALL getcwd(CWD[,STATUS])}
+@code{CALL GETCWD(CWD [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node GETENV
@section @code{GETENV} --- Get an environmental variable
-@findex @code{GETENV} intrinsic
+@cindex @code{GETENV} intrinsic
@cindex environment variable
@table @asis
Subroutine
@item @emph{Syntax}:
-@code{CALL GETENV(ENVVAR,VALUE)}
+@code{CALL GETENV(ENVVAR, VALUE)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node GET_ENVIRONMENT_VARIABLE
@section @code{GET_ENVIRONMENT_VARIABLE} --- Get an environmental variable
-@findex @code{GET_ENVIRONMENT_VARIABLE} intrinsic
+@cindex @code{GET_ENVIRONMENT_VARIABLE} intrinsic
@cindex environment variable
@table @asis
Subroutine
@item @emph{Syntax}:
-@code{CALL GET_ENVIRONMENT_VARIABLE(ENVVAR,VALUE)}
+@code{CALL GET_ENVIRONMENT_VARIABLE(ENVVAR, VALUE)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node GETGID
@section @code{GETGID} --- Group ID function
-@findex @code{GETGID} intrinsic
-@cindex GETGID
+@cindex @code{GETGID} intrinsic
+@cindex file system operations
@table @asis
@item @emph{Description}:
function
@item @emph{Syntax}:
-@code{I = GETGID()}
+@code{RESULT = GETGID()}
@item @emph{Return value}:
The return value of @code{GETGID} is an @code{INTEGER} of the default
See @code{GETPID} for an example.
@item @emph{See also}:
-@ref{GETPID}
+@ref{GETPID}, @ref{GETUID}
@end table
@node GETLOG
@section @code{GETLOG} --- Get login name
-@findex @code{GETLOG} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{GETLOG} intrinsic
@table @asis
@item @emph{Description}:
+Gets the username under which the program is running.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL GETLOG(LOGIN)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{LOGIN} @tab Shall be of type @code{CHARACTER(*)}.
+@end multitable
+
@item @emph{Return value}:
+Stores the current user name in @var{LOGIN}. (On systems where
+the @code{getlogin(3)} function is not implemented, this will
+return a blank string.)
+
@item @emph{Example}:
-@item @emph{Specific names}:
+@smallexample
+PROGRAM TEST_GETLOG
+ CHARACTER(32) :: login
+ CALL GETLOG(login)
+ WRITE(*,*) login
+END PROGRAM
+@end smallexample
+
@item @emph{See also}:
+@ref{GETUID}
@end table
-
@node GETPID
@section @code{GETPID} --- Process ID function
-@findex @code{GETPID} intrinsic
-@cindex GETPID
+@cindex @code{GETPID} intrinsic
+@cindex process ID, current
@table @asis
@item @emph{Description}:
function
@item @emph{Syntax}:
-@code{I = GETPID()}
+@code{RESULT = GETPID()}
@item @emph{Return value}:
The return value of @code{GETPID} is an @code{INTEGER} of the default
end program info
@end smallexample
+@item @emph{See also}:
+@ref{GETGID}, @ref{GETUID}
@end table
@node GETUID
@section @code{GETUID} --- User ID function
-@findex @code{GETUID} intrinsic
-@cindex GETUID
+@cindex @code{GETUID} intrinsic
+@cindex user ID, current
@table @asis
@item @emph{Description}:
function
@item @emph{Syntax}:
-@code{GETUID()}
+@code{RESULT = GETUID()}
@item @emph{Return value}:
The return value of @code{GETUID} is an @code{INTEGER} of the default
See @code{GETPID} for an example.
@item @emph{See also}:
-@ref{GETPID}
+@ref{GETPID}, @ref{GETLOG}
@end table
@node GMTIME
@section @code{GMTIME} --- Convert time to GMT info
-@findex @code{GMTIME}
-@cindex time function
-
-Not yet implemented in GNU Fortran.
+@cindex @code{GMTIME} intrinsic
+@cindex time, conversion function
@table @asis
@item @emph{Description}:
+Given a system time value @var{STIME} (as provided by the @code{TIME8()}
+intrinsic), fills @var{TARRAY} with values extracted from it appropriate
+to the UTC time zone (Universal Coordinated Time, also known in some
+countries as GMT, Greenwich Mean Time), using @code{gmtime(3)}.
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL GMTIME(STIME, TARRAY)}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@multitable @columnfractions .15 .80
+@item @var{STIME} @tab An @code{INTEGER(*)} scalar expression
+ corresponding to a system time, with
+ @code{INTENT(IN)}.
+@item @var{TARRAY} @tab A default @code{INTEGER} array with 9 elements,
+ with @code{INTENT(OUT)}.
+@end multitable
+
+@item @emph{Return value}:
+The elements of @var{TARRAY} are assigned as follows:
+@enumerate
+@item Seconds after the minute, range 0--59 or 0--61 to allow for leap
+ seconds
+@item Minutes after the hour, range 0--59
+@item Hours past midnight, range 0--23
+@item Day of month, range 0--31
+@item Number of months since January, range 0--12
+@item Years since 1900
+@item Number of days since Sunday, range 0--6
+@item Days since January 1
+@item Daylight savings indicator: positive if daylight savings is in
+ effect, zero if not, and negative if the information is not
+ available.
+@end enumerate
+
@item @emph{See also}:
+@ref{CTIME}, @ref{LTIME}, @ref{TIME}, @ref{TIME8}
@end table
@node HOSTNM
@section @code{HOSTNM} --- Get system host name
-@findex @code{HOSTNM} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{HOSTNM} intrinsic
@table @asis
@item @emph{Description}:
+Retrieves the host name of the system on which the program is running.
+
+This intrinsic is provided in both subroutine and function forms; however,
+only one form can be used in any given program unit.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
+Subroutine, function
+
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{CALL HOSTNM(NAME, STATUS)}
+@item @code{STATUS = HOSTNM(NAME)}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{NAME} @tab Shall of type @code{CHARACTER(*)}.
+@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER}.
+ Returns 0 on success, or a system specific error
+ code otherwise.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
-@item @emph{See also}:
+In either syntax, @var{NAME} is set to the current hostname if it can
+be obtained, or to a blank string otherwise.
+
@end table
@node HUGE
@section @code{HUGE} --- Largest number of a kind
-@findex @code{HUGE} intrinsic
+@cindex @code{HUGE} intrinsic
@cindex huge
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{Y = HUGE(X)}
+@code{RESULT = HUGE(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node IACHAR
@section @code{IACHAR} --- Code in @acronym{ASCII} collating sequence
-@findex @code{IACHAR} intrinsic
+@cindex @code{IACHAR} intrinsic
@cindex @acronym{ASCII} collating sequence
@cindex conversion function (character)
Elemental function
@item @emph{Syntax}:
-@code{I = IACHAR(C)}
+@code{RESULT = IACHAR(C)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end smallexample
@item @emph{See also}:
-@ref{CHAR},@ref{ICHAR}
+@ref{ACHAR}, @ref{CHAR}, @ref{ICHAR}
@end table
@node IAND
@section @code{IAND} --- Bitwise logical and
-@findex @code{IAND} intrinsic
+@cindex @code{IAND} intrinsic
@cindex bit operations
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{RESULT = IAND(X, Y)}
+@code{RESULT = IAND(I, J)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab The type shall be @code{INTEGER(*)}.
-@item @var{Y} @tab The type shall be @code{INTEGER(*)}.
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{J} @tab The type shall be @code{INTEGER(*)}, of the same
+kind as @var{I}. (As a GNU extension, different kinds are also
+permitted.)
@end multitable
@item @emph{Return value}:
-The return type is @code{INTEGER(*)} after cross-promotion of the arguments.
+The return type is @code{INTEGER(*)}, of the same kind as the
+arguments. (If the argument kinds differ, it is of the same kind as
+the larger argument.)
@item @emph{Example}:
@smallexample
@end smallexample
@item @emph{See also}:
-@ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR},
+@ref{IOR}, @ref{IEOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
+
@end table
@node IARGC
@section @code{IARGC} --- Get the number of command line arguments
-@findex @code{IARGC} intrinsic
-@cindex command line arguments
-@cindex getopt
+@cindex @code{IARGC} intrinsic
+@cindex command-line arguments, to program
@table @asis
@item @emph{Description}:
Non-elemental Function
@item @emph{Syntax}:
-@code{I = IARGC()}
+@code{RESULT = IARGC()}
@item @emph{Arguments}:
None.
See @ref{GETARG}
@item @emph{See also}:
-GNU Fortran 77 compability subroutine: @ref{GETARG}
+GNU Fortran 77 compatibility subroutine: @ref{GETARG}
-F2003 functions and subroutines: @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT}, @ref{COMMAND_ARGUMENT_COUNT}
+F2003 functions and subroutines: @ref{GET_COMMAND}, @ref{GET_COMMAND_ARGUMENT},
+@ref{COMMAND_ARGUMENT_COUNT}
@end table
@node IBCLR
@section @code{IBCLR} --- Clear bit
-@findex @code{IBCLR} intrinsic
+@cindex @code{IBCLR} intrinsic
@cindex bit operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+@code{IBCLR} returns the value of @var{I} with the bit at position
+@var{POS} set to zero.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = IBCLR(I, POS)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
@item @emph{See also}:
-@ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
-@end table
+@ref{IBITS}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
+@end table
@node IBITS
@section @code{IBITS} --- Bit extraction
-@findex @code{IBITS} intrinsic
+@cindex @code{IBITS} intrinsic
@cindex bit operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+@code{IBITS} extracts a field of length @var{LEN} from @var{I},
+starting from bit position @var{POS} and extending left for @var{LEN}
+bits. The result is right-justified and the remaining bits are
+zeroed. The value of @code{POS+LEN} must be less than or equal to the
+value @code{BIT_SIZE(I)}.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = IBITS(I, POS, LEN)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
+@item @var{LEN} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
-@item @emph{See also}:
-@ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
+@item @emph{See also}:
+@ref{BIT_SIZE}, @ref{IBCLR}, @ref{IBSET}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
@end table
-
@node IBSET
@section @code{IBSET} --- Set bit
-@findex @code{IBSET} intrinsic
+@cindex @code{IBSET} intrinsic
@cindex bit operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+@code{IBSET} returns the value of @var{I} with the bit at position
+@var{POS} set to one.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = IBSET(I, POS)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{POS} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
@item @emph{See also}:
-@ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
+@ref{IBCLR}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}, @ref{MVBITS}
@end table
@node ICHAR
@section @code{ICHAR} --- Character-to-integer conversion function
-@findex @code{ICHAR} intrinsic
+@cindex @code{ICHAR} intrinsic
@cindex conversion function (character)
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{I = ICHAR(C)}
+@code{RESULT = ICHAR(C)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
print *, value
end program read_val
@end smallexample
+
+@item @emph{See also}:
+@ref{ACHAR}, @ref{CHAR}, @ref{IACHAR}
+
@end table
+
+
@node IDATE
@section @code{IDATE} --- Get current local time subroutine (day/month/year)
-@findex @code{IDATE} intrinsic
+@cindex @code{IDATE} intrinsic
@table @asis
@item @emph{Description}:
@node IEOR
@section @code{IEOR} --- Bitwise logical exclusive or
-@findex @code{IEOR} intrinsic
+@cindex @code{IEOR} intrinsic
@cindex bit operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+@code{IEOR} returns the bitwise boolean exclusive-OR of @var{I} and
+@var{J}.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = IEOR(I, J)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{J} @tab The type shall be @code{INTEGER(*)}, of the same
+kind as @var{I}. (As a GNU extension, different kinds are also
+permitted.)
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return type is @code{INTEGER(*)}, of the same kind as the
+arguments. (If the argument kinds differ, it is of the same kind as
+the larger argument.)
@item @emph{See also}:
-@ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR},
+@ref{IOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
@end table
-
@node IERRNO
@section @code{IERRNO} --- Get the last system error number
-@findex @code{IERRNO} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{IERRNO} intrinsic
@table @asis
@item @emph{Description}:
+Returns the last system error number, as given by the C @code{errno()}
+function.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
+Elemental function
+
@item @emph{Syntax}:
+@code{RESULT = IERRNO()}
+
@item @emph{Arguments}:
+None.
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return value is of type @code{INTEGER} and of the default integer
+kind.
@item @emph{See also}:
@ref{PERROR}
-
@node INDEX
@section @code{INDEX} --- Position of a substring within a string
-@findex @code{INDEX} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{INDEX} intrinsic
@table @asis
@item @emph{Description}:
+Returns the position of the start of the first occurrence of string
+@var{SUBSTRING} as a substring in @var{STRING}, counting from one. If
+@var{SUBSTRING} is not present in @var{STRING}, zero is returned. If
+the @var{BACK} argument is present and true, the return value is the
+start of the last occurrence rather than the first.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = INDEX(STRING, SUBSTRING [, BACK])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING} @tab Shall be a scalar @code{CHARACTER(*)}, with
+@code{INTENT(IN)}
+@item @var{SUBSTRING} @tab Shall be a scalar @code{CHARACTER(*)}, with
+@code{INTENT(IN)}
+@item @var{BACK} @tab (Optional) Shall be a scalar @code{LOGICAL(*)}, with
+@code{INTENT(IN)}
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of type @code{INTEGER} and of the default integer
+kind.
+
@item @emph{See also}:
@end table
-
@node INT
@section @code{INT} --- Convert to integer type
-@findex @code{INT} intrinsic
-@findex @code{IFIX} intrinsic
-@findex @code{IDINT} intrinsic
+@cindex @code{INT} intrinsic
+@cindex @code{IFIX} intrinsic
+@cindex @code{IDINT} intrinsic
@cindex conversion function (integer)
@table @asis
Elemental function
@item @emph{Syntax}:
-@multitable @columnfractions .30 .80
-@item @code{X = INT(X)}
-@item @code{X = INT(X, KIND)}
-@end multitable
+@item @code{RESULT = INT(X [, KIND))}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be of type @code{INTEGER(*)}, @code{REAL(*)} or @code{COMPLEX(*)}
-@item @var{KIND} @tab (Optional) @var{KIND} shall be a scalar integer.
+@item @var{X} @tab shall be of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{COMPLEX(*)}.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@item (A)
If @var{X} is of type @code{INTEGER(*)}, @code{INT(X) = X}
@item (B)
-If @var{X} is of type @code{REAL(*)} and @math{|X| < 1} @code{INT(X)} equals @var{0}.
+If @var{X} is of type @code{REAL(*)} and @math{|X| < 1}, @code{INT(X)} equals @var{0}.
If @math{|X| \geq 1}, then @code{INT(X)} equals the largest integer that does not exceed
the range of @var{X} and whose sign is the same as the sign of @var{X}.
@item (C)
-
@node IOR
@section @code{IOR} --- Bitwise logical or
-@findex @code{IOR} intrinsic
+@cindex @code{IOR} intrinsic
@cindex bit operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+@code{IEOR} returns the bitwise boolean OR of @var{I} and
+@var{J}.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = IEOR(I, J)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{J} @tab The type shall be @code{INTEGER(*)}, of the same
+kind as @var{I}. (As a GNU extension, different kinds are also
+permitted.)
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return type is @code{INTEGER(*)}, of the same kind as the
+arguments. (If the argument kinds differ, it is of the same kind as
+the larger argument.)
@item @emph{See also}:
-@ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR},
+@ref{IEOR}, @ref{IAND}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}, @ref{NOT}
@end table
@node IRAND
@section @code{IRAND} --- Integer pseudo-random number
-@findex @code{IRAND} intrinsic
-@cindex random number
+@cindex @code{IRAND} intrinsic
+@cindex random numbers
@table @asis
@item @emph{Description}:
non-elemental function
@item @emph{Syntax}:
-@code{I = IRAND(FLAG)}
+@code{RESULT = IRAND(FLAG)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node ISHFT
@section @code{ISHFT} --- Shift bits
-@findex @code{ISHFT} intrinsic
-@cindex bit manipulation
-
-Intrinsic implemented, documentation pending.
+@cindex @code{ISHFT} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
+@code{ISHFT} returns a value corresponding to @var{I} with all of the
+bits shifted @var{SHIFT} places. A value of @var{SHIFT} greater than
+zero corresponds to a left shift, a value of zero corresponds to no
+shift, and a value less than zero corresponds to a right shift. If the
+absolute value of @var{SHIFT} is greater than @code{BIT_SIZE(I)}, the
+value is undefined. Bits shifted out from the left end or right end are
+lost; zeros are shifted in from the opposite end.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = ISHFT(I, SHIFT)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
@item @emph{See also}:
@ref{ISHFTC}
@node ISHFTC
@section @code{ISHFTC} --- Shift bits circularly
-@findex @code{ISHFTC} intrinsic
-@cindex bit manipulation
-
-Intrinsic implemented, documentation pending.
+@cindex @code{ISHFTC} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
+@code{ISHFTC} returns a value corresponding to @var{I} with the
+rightmost @var{SIZE} bits shifted circularly @var{SHIFT} places; that
+is, bits shifted out one end are shifted into the opposite end. A value
+of @var{SHIFT} greater than zero corresponds to a left shift, a value of
+zero corresponds to no shift, and a value less than zero corresponds to
+a right shift. The absolute value of @var{SHIFT} must be less than
+@var{SIZE}. If the @var{SIZE} argument is omitted, it is taken to be
+equivalent to @code{BIT_SIZE(I)}.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = ISHFTC(I, SHIFT [, SIZE])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
+@item @var{SIZE} @tab (Optional) The type shall be @code{INTEGER(*)};
+the value must be greater than zero and less than or equal to
+@code{BIT_SIZE(I)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
@item @emph{See also}:
@ref{ISHFT}
@node ITIME
@section @code{ITIME} --- Get current local time subroutine (hour/minutes/seconds)
-@findex @code{ITIME} intrinsic
+@cindex @code{ITIME} intrinsic
@table @asis
@item @emph{Description}:
@node KILL
@section @code{KILL} --- Send a signal to a process
-@findex @code{KILL} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{KILL} intrinsic
@table @asis
@item @emph{Description}:
@item @emph{Standard}:
-GNU extension
+Sends the signal specified by @var{SIGNAL} to the process @var{PID}.
+See @code{kill(2)}.
@item @emph{Class}:
Subroutine
@item @emph{Syntax}:
+@code{CALL KILL(PID, SIGNAL [, STATUS])}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@multitable @columnfractions .15 .80
+@item @var{PID} @tab Shall be a scalar @code{INTEGER}, with
+@code{INTENT(IN)}
+@item @var{SIGNAL} @tab Shall be a scalar @code{INTEGER}, with
+@code{INTENT(IN)}
+@item @var{STATUS} @tab (Optional) status flag of type @code{INTEGER(4)} or
+ @code{INTEGER(8)}. Returns 0 on success, or a
+ system-specific error code otherwise.
+@end multitable
@item @emph{See also}:
@ref{ABORT}, @ref{EXIT}
@node KIND
@section @code{KIND} --- Kind of an entity
-@findex @code{KIND} intrinsic
+@cindex @code{KIND} intrinsic
@table @asis
@item @emph{Description}:
@node LBOUND
@section @code{LBOUND} --- Lower dimension bounds of an array
-@findex @code{LBOUND} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{LBOUND} intrinsic
@table @asis
@item @emph{Description}:
+Returns the lower bounds of an array, or a single lower bound
+along the @var{DIM} dimension.
@item @emph{Standard}:
F95 and later
Inquiry function
@item @emph{Syntax}:
+@code{RESULT = LBOUND(ARRAY [, DIM])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{ARRAY} @tab Shall be an array, of any type.
+@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+If @var{DIM} is absent, the result is an array of the lower bounds of
+@var{ARRAY}. If @var{DIM} is present, the result is a scalar
+corresponding to the lower bound of the array along that dimension. If
+@var{ARRAY} is an expression rather than a whole array or array
+structure component, or if it has a zero extent along the relevant
+dimension, the lower bound is taken to be 1.
+
@item @emph{See also}:
@ref{UBOUND}
@end table
-
@node LEN
@section @code{LEN} --- Length of a character entity
-@findex @code{LEN} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{LEN} intrinsic
@table @asis
@item @emph{Description}:
+Returns the length of a character string. If @var{STRING} is an array,
+the length of an element of @var{STRING} is returned. Note that
+@var{STRING} need not be defined when this intrinsic is invoked, since
+only the length, not the content, of @var{STRING} is needed.
+
@item @emph{Standard}:
F77 and later
Inquiry function
@item @emph{Syntax}:
+@code{L = LEN(STRING)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING} @tab Shall be a scalar or array of type
+@code{CHARACTER(*)}, with @code{INTENT(IN)}
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is an @code{INTEGER} of the default kind.
@item @emph{See also}:
@ref{LEN_TRIM}, @ref{ADJUSTL}, @ref{ADJUSTR}
-
@node LEN_TRIM
@section @code{LEN_TRIM} --- Length of a character entity without trailing blank characters
-@findex @code{LEN_TRIM} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{LEN_TRIM} intrinsic
@table @asis
@item @emph{Description}:
+Returns the length of a character string, ignoring any trailing blanks.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = LEN_TRIM(STRING)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER(*)},
+with @code{INTENT(IN)}
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return value is an @code{INTEGER} of the default kind.
@item @emph{See also}:
@ref{LEN}, @ref{ADJUSTL}, @ref{ADJUSTR}
-
@node LGE
@section @code{LGE} --- Lexical greater than or equal
-@findex @code{LGE} intrinsic
+@cindex @code{LGE} intrinsic
@cindex comparison (lexical)
-
-Intrinsic implemented, documentation pending.
+@cindex lexical comparison
@table @asis
@item @emph{Description}:
+Determines whether one string is lexically greater than or equal to
+another string, where the two strings are interpreted as containing
+ASCII character codes. 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.
+
+In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
+@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
+operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
+that the latter use the processor's character ordering (which is not
+ASCII on some targets), whereas the former always use the ASCII
+ordering.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = LGE(STRING_A, STRING_B)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+Returns @code{.TRUE.} if @code{STRING_A >= STRING_B}, and @code{.FALSE.}
+otherwise, based on the ASCII ordering.
@item @emph{See also}:
@ref{LGT}, @ref{LLE}, @ref{LLT}
-
@node LGT
@section @code{LGT} --- Lexical greater than
-@findex @code{LGT} intrinsic
+@cindex @code{LGT} intrinsic
@cindex comparison (lexical)
-
-Intrinsic implemented, documentation pending.
+@cindex lexical comparison
@table @asis
@item @emph{Description}:
+Determines whether one string is lexically greater than another string,
+where the two strings are interpreted as containing ASCII character
+codes. 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.
+
+In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
+@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
+operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
+that the latter use the processor's character ordering (which is not
+ASCII on some targets), whereas the former always use the ASCII
+ordering.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = LGT(STRING_A, STRING_B)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+Returns @code{.TRUE.} if @code{STRING_A > STRING_B}, and @code{.FALSE.}
+otherwise, based on the ASCII ordering.
@item @emph{See also}:
@ref{LGE}, @ref{LLE}, @ref{LLT}
-
@node LINK
@section @code{LINK} --- Create a hard link
-@findex @code{LINK} intrinsic
+@cindex @code{LINK} intrinsic
@cindex file system operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Makes a (hard) link from file @var{PATH1} to @var{PATH2}. A null
+character (@code{CHAR(0)}) can be used to mark the end of the names in
+@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
+names are ignored. If the @var{STATUS} argument is supplied, it
+contains 0 on success or a nonzero error code upon return; see
+@code{link(2)}.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL LINK(PATH1, PATH2 [, STATUS])}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@multitable @columnfractions .15 .80
+@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
+@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
+@end multitable
@item @emph{See also}:
-@ref{UNLINK}
+@ref{SYMLNK}, @ref{UNLINK}
@end table
-
@node LLE
@section @code{LLE} --- Lexical less than or equal
-@findex @code{LLE} intrinsic
+@cindex @code{LLE} intrinsic
@cindex comparison (lexical)
-
-Intrinsic implemented, documentation pending.
+@cindex lexical comparison
@table @asis
@item @emph{Description}:
+Determines whether one string is lexically less than or equal to another
+string, where the two strings are interpreted as containing ASCII
+character codes. 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.
+
+In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
+@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
+operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
+that the latter use the processor's character ordering (which is not
+ASCII on some targets), whereas the former always use the ASCII
+ordering.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = LLE(STRING_A, STRING_B)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+Returns @code{.TRUE.} if @code{STRING_A <= STRING_B}, and @code{.FALSE.}
+otherwise, based on the ASCII ordering.
@item @emph{See also}:
@ref{LGE}, @ref{LGT}, @ref{LLT}
-
@node LLT
@section @code{LLT} --- Lexical less than
-@findex @code{LLT} intrinsic
+@cindex @code{LLT} intrinsic
@cindex comparison (lexical)
-
-Intrinsic implemented, documentation pending.
+@cindex lexical comparison
@table @asis
@item @emph{Description}:
+Determines whether one string is lexically less than another string,
+where the two strings are interpreted as containing ASCII character
+codes. 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.
+
+In general, the lexical comparison intrinsics @code{LGE}, @code{LGT},
+@code{LLE}, and @code{LLT} differ from the corresponding intrinsic
+operators @code{.GE.}, @code{.GT.}, @code{.LE.}, and @code{.LT.}, in
+that the latter use the processor's character ordering (which is not
+ASCII on some targets), whereas the former always use the ASCII
+ordering.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = LLT(STRING_A, STRING_B)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING_A} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STRING_B} @tab Shall be of default @code{CHARACTER} type.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+Returns @code{.TRUE.} if @code{STRING_A < STRING_B}, and @code{.FALSE.}
+otherwise, based on the ASCII ordering.
@item @emph{See also}:
@ref{LGE}, @ref{LGT}, @ref{LLE}
-
@node LNBLNK
@section @code{LNBLNK} --- Index of the last non-blank character in a string
-@findex @code{LNBLNK} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{LNBLNK} intrinsic
@table @asis
@item @emph{Description}:
+Returns the length of a character string, ignoring any trailing blanks.
+This is identical to the standard @code{LEN_TRIM} intrinsic, and is only
+included for backwards compatibility.
+
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
+Elemental function
+
@item @emph{Syntax}:
+@code{RESULT = LNBLNK(STRING)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{STRING} @tab Shall be a scalar of type @code{CHARACTER(*)},
+with @code{INTENT(IN)}
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of @code{INTEGER(kind=4)} type.
@item @emph{See also}:
-@ref{INDEX}
+@ref{INDEX}, @ref{LEN_TRIM}
@end table
-
@node LOC
@section @code{LOC} --- Returns the address of a variable
-@findex @code{LOC} intrinsic
-@cindex loc
+@cindex @code{LOC} intrinsic
+@cindex location of a variable in memory
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = LOC(X)}
+@code{RESULT = LOC(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end multitable
@item @emph{Return value}:
-The return value is of type @code{INTEGER(n)}, where @code{n} is the
-size (in bytes) of a memory address on the target machine.
+The return value is of type @code{INTEGER}, with a @code{KIND}
+corresponding to the size (in bytes) of a memory address on the target
+machine.
@item @emph{Example}:
@smallexample
@end smallexample
@end table
+
+
@node LOG
@section @code{LOG} --- Logarithm function
-@findex @code{LOG} intrinsic
-@findex @code{ALOG} intrinsic
-@findex @code{DLOG} intrinsic
-@findex @code{CLOG} intrinsic
-@findex @code{ZLOG} intrinsic
-@findex @code{CDLOG} intrinsic
+@cindex @code{LOG} intrinsic
+@cindex @code{ALOG} intrinsic
+@cindex @code{DLOG} intrinsic
+@cindex @code{CLOG} intrinsic
+@cindex @code{ZLOG} intrinsic
+@cindex @code{CDLOG} intrinsic
@cindex logarithm
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = LOG(X)}
+@code{RESULT = LOG(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node LOG10
@section @code{LOG10} --- Base 10 logarithm function
-@findex @code{LOG10} intrinsic
-@findex @code{ALOG10} intrinsic
-@findex @code{DLOG10} intrinsic
+@cindex @code{LOG10} intrinsic
+@cindex @code{ALOG10} intrinsic
+@cindex @code{DLOG10} intrinsic
@cindex logarithm
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = LOG10(X)}
+@code{RESULT = LOG10(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end table
+
@node LOGICAL
@section @code{LOGICAL} --- Convert to logical type
-@findex @code{LOGICAL} intrinsic
+@cindex @code{LOGICAL} intrinsic
@cindex conversion function (logical)
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Converts one kind of @code{LOGICAL} variable to another.
+
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = LOGICAL(L [, KIND])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{L} @tab The type shall be @code{LOGICAL(*)}.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is a @code{LOGICAL} value equal to @var{L}, with a
+kind corresponding to @var{KIND}, or of the default logical kind if
+@var{KIND} is not given.
+
@item @emph{See also}:
+@ref{INT}, @ref{REAL}, @ref{CMPLX}
@end table
@node LSHIFT
@section @code{LSHIFT} --- Left shift bits
-@findex @code{LSHIFT}
-@cindex bit manipulation
-
-Not yet implemented in GNU Fortran.
+@cindex @code{LSHIFT} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
+@code{LSHIFT} returns a value corresponding to @var{I} with all of the
+bits shifted left by @var{SHIFT} places. If the absolute value of
+@var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
+Bits shifted out from the left end are lost; zeros are shifted in from
+the opposite end.
+
+This function has been superceded by the @code{ISHFT} intrinsic, which
+is standard in Fortran 95 and later.
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Function
+Elemental function
@item @emph{Syntax}:
+@code{RESULT = LSHIFT(I, SHIFT)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
+
@item @emph{See also}:
+@ref{ISHFT}, @ref{ISHFTC}, @ref{RSHIFT}
@end table
@node LSTAT
@section @code{LSTAT} --- Get file status
-@findex @code{LSTAT} intrinsic
+@cindex @code{LSTAT} intrinsic
@cindex file system operations
@table @asis
Non-elemental subroutine
@item @emph{Syntax}:
-@code{CALL LSTAT(FILE,BUFF[,STATUS])}
+@code{CALL LSTAT(FILE, BUFF [, STATUS])}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node LTIME
@section @code{LTIME} --- Convert time to local time info
-@findex @code{LTIME}
-@cindex time function
-
-Not yet implemented in GNU Fortran.
+@cindex @code{LTIME} intrinsic
+@cindex time, conversion function
@table @asis
@item @emph{Description}:
+Given a system time value @var{STIME} (as provided by the @code{TIME8()}
+intrinsic), fills @var{TARRAY} with values extracted from it appropriate
+to the local time zone using @code{localtime(3)}.
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL LTIME(STIME, TARRAY)}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@multitable @columnfractions .15 .80
+@item @var{STIME} @tab An @code{INTEGER(*)} scalar expression
+ corresponding to a system time, with
+ @code{INTENT(IN)}.
+@item @var{TARRAY} @tab A default @code{INTEGER} array with 9 elements,
+ with @code{INTENT(OUT)}.
+@end multitable
+
+@item @emph{Return value}:
+The elements of @var{TARRAY} are assigned as follows:
+@enumerate
+@item Seconds after the minute, range 0--59 or 0--61 to allow for leap
+ seconds
+@item Minutes after the hour, range 0--59
+@item Hours past midnight, range 0--23
+@item Day of month, range 0--31
+@item Number of months since January, range 0--12
+@item Years since 1900
+@item Number of days since Sunday, range 0--6
+@item Days since January 1
+@item Daylight savings indicator: positive if daylight savings is in
+ effect, zero if not, and negative if the information is not
+ available.
+@end enumerate
+
@item @emph{See also}:
+@ref{CTIME}, @ref{GMTIME}, @ref{TIME}, @ref{TIME8}
@end table
@node MALLOC
@section @code{MALLOC} --- Allocate dynamic memory
-@findex @code{MALLOC} intrinsic
-@cindex MALLOC
+@cindex @code{MALLOC} intrinsic
+@cindex Cray pointers
@table @asis
@item @emph{Description}:
@end table
+
@node MATMUL
@section @code{MATMUL} --- matrix multiplication
-@findex @code{MATMUL} intrinsic
+@cindex @code{MATMUL} intrinsic
@cindex matrix operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Performs a matrix multiplication on numeric or logical arguments.
+
@item @emph{Standard}:
F95 and later
Transformational function
@item @emph{Syntax}:
+@code{RESULT = MATMUL(MATRIX_A, MATRIX_B)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{MATRIX_A} @tab An array of @code{INTEGER(*)},
+ @code{REAL(*)}, @code{COMPLEX(*)}, or
+ @code{LOGICAL(*)} type, with a rank of
+ one or two.
+@item @var{MATRIX_B} @tab An array of @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{COMPLEX(*)} type if
+ @var{MATRIX_A} is of a numeric type;
+ otherwise, an array of @code{LOGICAL(*)}
+ type. The rank shall be one or two, and the
+ first (or only) dimension of @var{MATRIX_B}
+ shall be equal to the last (or only)
+ dimension of @var{MATRIX_A}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+The matrix product of @var{MATRIX_A} and @var{MATRIX_B}. The type and
+kind of the result follow the usual type and kind promotion rules, as
+for the @code{*} or @code{.AND.} operators.
+
@item @emph{See also}:
@end table
+
@node MAX
@section @code{MAX} --- Maximum value of an argument list
-@findex @code{MAX} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{MAX} intrinsic
@table @asis
@item @emph{Description}:
+Returns the argument with the largest (most positive) value.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = MAX(A1, A2 [, A3 [, ...]])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{A1} @tab The type shall be @code{INTEGER(*)} or
+ @code{REAL(*)}.
+@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
+ as @var{A1}. (As a GNU extension,
+ arguments of different kinds are
+ permitted.)
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return value corresponds to the maximum value among the arguments,
+and has the same type and kind as the first argument.
@item @emph{Specific names}:
@multitable @columnfractions .20 .20 .20 .40
@end multitable
@item @emph{See also}:
-@ref{MAXLOC} @ref{MAXVAL}
+@ref{MAXLOC} @ref{MAXVAL}, @ref{MIN}
+
@end table
+
@node MAXEXPONENT
@section @code{MAXEXPONENT} --- Maximum exponent of a real kind
-@findex @code{MAXEXPONENT} intrinsic
-@cindex MAXEXPONENT
+@cindex @code{MAXEXPONENT} intrinsic
+@cindex maximum exponent
+@cindex exponent, maximum
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = MAXEXPONENT(X)}
+@code{RESULT = MAXEXPONENT(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end table
+
@node MAXLOC
@section @code{MAXLOC} --- Location of the maximum value within an array
-@findex @code{MAXLOC} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{MAXLOC} intrinsic
@table @asis
@item @emph{Description}:
+Determines the location of the element in the array with the maximum
+value, or, if the @var{DIM} argument is supplied, determines the
+locations of the maximum element along each row of the array in the
+@var{DIM} direction. If @var{MASK} is present, only the elements for
+which @var{MASK} is @code{.TRUE.} are considered. If more than one
+element in the array has the maximum value, the location returned is
+that of the first such element in array element order. If the array has
+zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
+the result is an array of zeroes. Similarly, if @var{DIM} is supplied
+and all of the elements of @var{MASK} along a given row are zero, the
+result value for that row is zero.
+
@item @emph{Standard}:
F95 and later
Transformational function
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{RESULT = MAXLOC(ARRAY, DIM [, MASK])}
+@item @code{RESULT = MAXLOC(ARRAY [, MASK])}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{CHARACTER(*)}.
+@item @var{DIM} @tab (Optional) Shall be a scalar of type
+ @code{INTEGER(*)}, with a value between one
+ and the rank of @var{ARRAY}, inclusive. It
+ may not be an optional dummy argument.
+@item @var{MASK} @tab Shall be an array of type @code{LOGICAL(*)},
+ and conformable with @var{ARRAY}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+If @var{DIM} is absent, the result is a rank-one array with a length
+equal to the rank of @var{ARRAY}. If @var{DIM} is present, the result
+is an array with a rank one less than the rank of @var{ARRAY}, and a
+size corresponding to the size of @var{ARRAY} with the @var{DIM}
+dimension removed. If @var{DIM} is present and @var{ARRAY} has a rank
+of one, the result is a scalar. In all cases, the result is of default
+@code{INTEGER} type.
+
@item @emph{See also}:
@ref{MAX}, @ref{MAXVAL}
+
@end table
@node MAXVAL
@section @code{MAXVAL} --- Maximum value of an array
-@findex @code{MAXVAL} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{MAXVAL} intrinsic
@table @asis
@item @emph{Description}:
-@item @emph{Standard}:
+Determines the maximum value of the elements in an array value, or, if
+the @var{DIM} argument is supplied, determines the maximum value along
+each row of the array in the @var{DIM} direction. If @var{MASK} is
+present, only the elements for which @var{MASK} is @code{.TRUE.} are
+considered. If the array has zero size, or all of the elements of
+@var{MASK} are @code{.FALSE.}, then the result is the most negative
+number of the type and kind of @var{ARRAY} if @var{ARRAY} is numeric, or
+a string of nulls if @var{ARRAY} is of character type.
+@item @emph{Standard}:
+F95 and later
@item @emph{Class}:
Transformational function
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{RESULT = MAXVAL(ARRAY, DIM [, MASK])}
+@item @code{RESULT = MAXVAL(ARRAY [, MASK])}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{CHARACTER(*)}.
+@item @var{DIM} @tab (Optional) Shall be a scalar of type
+ @code{INTEGER(*)}, with a value between one
+ and the rank of @var{ARRAY}, inclusive. It
+ may not be an optional dummy argument.
+@item @var{MASK} @tab Shall be an array of type @code{LOGICAL(*)},
+ and conformable with @var{ARRAY}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
+is a scalar. If @var{DIM} is present, the result is an array with a
+rank one less than the rank of @var{ARRAY}, and a size corresponding to
+the size of @var{ARRAY} with the @var{DIM} dimension removed. In all
+cases, the result is of the same type and kind as @var{ARRAY}.
@item @emph{See also}:
@ref{MAX}, @ref{MAXLOC}
-
@node MERGE
-@section @code{MERGE} --- Merge arrays
-@findex @code{MERGE} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@section @code{MERGE} --- Merge variables
+@cindex @code{MERGE} intrinsic
@table @asis
@item @emph{Description}:
+Select values from two arrays according to a logical mask. The result
+is equal to @var{TSOURCE} if @var{MASK} is @code{.TRUE.}, or equal to
+@var{FSOURCE} if it is @code{.FALSE.}.
+
@item @emph{Standard}:
F95 and later
@item @emph{Class}:
-elemental function
+Elemental function
@item @emph{Syntax}:
+@code{RESULT = MERGE(TSOURCE, FSOURCE, MASK)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{TSOURCE} @tab May be of any type.
+@item @var{FSOURCE} @tab Shall be of the same type and type parameters
+ as @var{TSOURCE}.
+@item @var{MASK} @tab Shall be of type @code{LOGICAL(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
-@item @emph{See also}:
+The result is of the same type and type parameters as @var{TSOURCE}.
+
@end table
+
@node MIN
@section @code{MIN} --- Minimum value of an argument list
-@findex @code{MIN} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{MIN} intrinsic
@table @asis
@item @emph{Description}:
+Returns the argument with the smallest (most negative) value.
+
@item @emph{Standard}:
F77 and later
Elemental function
@item @emph{Syntax}:
+@code{RESULT = MIN(A1, A2 [, A3, ...])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{A1} @tab The type shall be @code{INTEGER(*)} or
+ @code{REAL(*)}.
+@item @var{A2}, @var{A3}, ... @tab An expression of the same type and kind
+ as @var{A1}. (As a GNU extension,
+ arguments of different kinds are
+ permitted.)
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return value corresponds to the maximum value among the arguments,
+and has the same type and kind as the first argument.
@item @emph{Specific names}:
@multitable @columnfractions .20 .20 .20 .40
@end multitable
@item @emph{See also}:
-@ref{MINLOC}, @ref{MINVAL}
+@ref{MAX}, @ref{MINLOC}, @ref{MINVAL}
@end table
@node MINEXPONENT
@section @code{MINEXPONENT} --- Minimum exponent of a real kind
-@findex @code{MINEXPONENT} intrinsic
-@cindex MINEXPONENT
+@cindex @code{MINEXPONENT} intrinsic
+@cindex minimum exponent
+@cindex exponent, minimum
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = MINEXPONENT(X)}
+@code{RESULT = MINEXPONENT(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@end table
+
@node MINLOC
@section @code{MINLOC} --- Location of the minimum value within an array
-@findex @code{MINLOC} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{MINLOC} intrinsic
@table @asis
@item @emph{Description}:
+Determines the location of the element in the array with the minimum
+value, or, if the @var{DIM} argument is supplied, determines the
+locations of the minimum element along each row of the array in the
+@var{DIM} direction. If @var{MASK} is present, only the elements for
+which @var{MASK} is @code{.TRUE.} are considered. If more than one
+element in the array has the minimum value, the location returned is
+that of the first such element in array element order. If the array has
+zero size, or all of the elements of @var{MASK} are @code{.FALSE.}, then
+the result is an array of zeroes. Similarly, if @var{DIM} is supplied
+and all of the elements of @var{MASK} along a given row are zero, the
+result value for that row is zero.
+
@item @emph{Standard}:
F95 and later
Transformational function
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{RESULT = MINLOC(ARRAY, DIM [, MASK])}
+@item @code{RESULT = MINLOC(ARRAY [, MASK])}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{CHARACTER(*)}.
+@item @var{DIM} @tab (Optional) Shall be a scalar of type
+ @code{INTEGER(*)}, with a value between one
+ and the rank of @var{ARRAY}, inclusive. It
+ may not be an optional dummy argument.
+@item @var{MASK} @tab Shall be an array of type @code{LOGICAL(*)},
+ and conformable with @var{ARRAY}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+If @var{DIM} is absent, the result is a rank-one array with a length
+equal to the rank of @var{ARRAY}. If @var{DIM} is present, the result
+is an array with a rank one less than the rank of @var{ARRAY}, and a
+size corresponding to the size of @var{ARRAY} with the @var{DIM}
+dimension removed. If @var{DIM} is present and @var{ARRAY} has a rank
+of one, the result is a scalar. In all cases, the result is of default
+@code{INTEGER} type.
@item @emph{See also}:
@ref{MIN}, @ref{MINVAL}
@end table
+
@node MINVAL
@section @code{MINVAL} --- Minimum value of an array
-@findex @code{MINVAL} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{MINVAL} intrinsic
@table @asis
@item @emph{Description}:
+Determines the minimum value of the elements in an array value, or, if
+the @var{DIM} argument is supplied, determines the minimum value along
+each row of the array in the @var{DIM} direction. If @var{MASK} is
+present, only the elements for which @var{MASK} is @code{.TRUE.} are
+considered. If the array has zero size, or all of the elements of
+@var{MASK} are @code{.FALSE.}, then the result is @code{HUGE(ARRAY)} if
+@var{ARRAY} is numeric, or a string of @code{CHAR(255)} characters if
+@var{ARRAY} is of character type.
+
@item @emph{Standard}:
F95 and later
Transformational function
@item @emph{Syntax}:
+@multitable @columnfractions .80
+@item @code{RESULT = MINVAL(ARRAY, DIM [, MASK])}
+@item @code{RESULT = MINVAL(ARRAY [, MASK])}
+@end multitable
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{ARRAY} @tab Shall be an array of type @code{INTEGER(*)},
+ @code{REAL(*)}, or @code{CHARACTER(*)}.
+@item @var{DIM} @tab (Optional) Shall be a scalar of type
+ @code{INTEGER(*)}, with a value between one
+ and the rank of @var{ARRAY}, inclusive. It
+ may not be an optional dummy argument.
+@item @var{MASK} @tab Shall be an array of type @code{LOGICAL(*)},
+ and conformable with @var{ARRAY}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+If @var{DIM} is absent, or if @var{ARRAY} has a rank of one, the result
+is a scalar. If @var{DIM} is present, the result is an array with a
+rank one less than the rank of @var{ARRAY}, and a size corresponding to
+the size of @var{ARRAY} with the @var{DIM} dimension removed. In all
+cases, the result is of the same type and kind as @var{ARRAY}.
@item @emph{See also}:
@ref{MIN}, @ref{MINLOC}
-@end table
+@end table
@node MOD
@section @code{MOD} --- Remainder function
-@findex @code{MOD} intrinsic
-@findex @code{AMOD} intrinsic
-@findex @code{DMOD} intrinsic
+@cindex @code{MOD} intrinsic
+@cindex @code{AMOD} intrinsic
+@cindex @code{DMOD} intrinsic
@cindex remainder
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = MOD(A,P)}
+@code{RESULT = MOD(A, P)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node MODULO
@section @code{MODULO} --- Modulo function
-@findex @code{MODULO} intrinsic
+@cindex @code{MODULO} intrinsic
@cindex modulo
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = MODULO(A,P)}
+@code{RESULT = MODULO(A, P)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@node MVBITS
-@section @code{MVBITS} --- Move bits from one integer to another
-@findex @code{MVBITS} intrinsic
-@cindex bit operations
-
-Intrinsic implemented, documentation pending.
-
-@table @asis
-@item @emph{Description}:
-@item @emph{Standard}:
-F95 and later
-
-@item @emph{Class}:
-Elemental subroutine
-
-@item @emph{Syntax}:
-@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{See also}:
-@end table
-
-
-
-
@node MOVE_ALLOC
@section @code{MOVE_ALLOC} --- Move allocation from one object to another
-@findex @code{MOVE_ALLOC} intrinsic
-@cindex MOVE_ALLOC
+@cindex @code{MOVE_ALLOC} intrinsic
+@cindex moving allocation
+@cindex allocation, moving
@table @asis
@item @emph{Description}:
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{SRC} @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be of any type and kind.
-@item @var{DEST} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be of the same type, kind and rank as @var{SRC}
+@item @var{SRC} @tab @code{ALLOCATABLE}, @code{INTENT(INOUT)}, may be
+ of any type and kind.
+@item @var{DEST} @tab @code{ALLOCATABLE}, @code{INTENT(OUT)}, shall be
+ of the same type, kind and rank as @var{SRC}
@end multitable
@item @emph{Return value}:
+@node MVBITS
+@section @code{MVBITS} --- Move bits from one integer to another
+@cindex @code{MVBITS} intrinsic
+@cindex bit operations
+
+@table @asis
+@item @emph{Description}:
+Moves @var{LEN} bits from positions @var{FROMPOS} through
+@code{FROMPOS+LEN-1} of @var{FROM} to positions @var{TOPOS} through
+@code{TOPOS+LEN-1} of @var{TO}. The portion of argument @var{TO} not
+affected by the movement of bits is unchanged. The values of
+@code{FROMPOS+LEN-1} and @code{TOPOS+LEN-1} must be less than
+@code{BIT_SIZE(FROM)}.
+
+@item @emph{Standard}:
+F95 and later
+
+@item @emph{Class}:
+Elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{FROM} @tab The type shall be @code{INTEGER(*)}.
+@item @var{FROMPOS} @tab The type shall be @code{INTEGER(*)}.
+@item @var{LEN} @tab The type shall be @code{INTEGER(*)}.
+@item @var{TO} @tab The type shall be @code{INTEGER(*)}, of the
+ same kind as @var{FROM}.
+@item @var{TOPOS} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
+@item @emph{Return value}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{FROM}.
+
+@item @emph{See also}:
+@ref{IBCLR}, @ref{IBSET}, @ref{IBITS}, @ref{IAND}, @ref{IOR}, @ref{IEOR}
+
+@end table
+
+
+
@node NEAREST
@section @code{NEAREST} --- Nearest representable number
-@findex @code{NEAREST} intrinsic
+@cindex @code{NEAREST} intrinsic
@cindex processor-representable number
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{Y = NEAREST(X, S)}
+@code{RESULT = NEAREST(X, S)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node NEW_LINE
@section @code{NEW_LINE} --- New line character
-@findex @code{NEW_LINE} intrinsic
-@findex @code{NEW_LINE} intrinsic
+@cindex @code{NEW_LINE} intrinsic
+@cindex @code{NEW_LINE} intrinsic
@table @asis
@item @emph{Description}:
-@code{NEW_LINE(C)} returns the new-line character
+@code{NEW_LINE(C)} returns the new-line character.
@item @emph{Standard}:
F2003 and later
Elemental function
@item @emph{Syntax}:
-@code{C = NEW_LINE(C)}
+@code{RESULT = NEW_LINE(C)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node NINT
@section @code{NINT} --- Nearest whole number
-@findex @code{NINT} intrinsic
-@findex @code{IDNINT} intrinsic
+@cindex @code{NINT} intrinsic
+@cindex @code{IDNINT} intrinsic
@cindex whole number
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = NINT(X)}
+@code{RESULT = NINT(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node NOT
@section @code{NOT} --- Logical negation
-@findex @code{NOT} intrinsic
-@cindex logical operations
-
-Intrinsic implemented, documentation pending.
+@cindex @code{NOT} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
+@code{NOT} returns the bitwise boolean inverse of @var{I}.
+
@item @emph{Standard}:
-F77 and later
+F95 and later
@item @emph{Class}:
Elemental function
@item @emph{Syntax}:
+@code{RESULT = NOT(I)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return type is @code{INTEGER(*)}, of the same kind as the
+argument.
+
@item @emph{See also}:
+@ref{IAND}, @ref{IEOR}, @ref{IOR}, @ref{IBITS}, @ref{IBSET}, @ref{IBCLR}
+
@end table
@node NULL
@section @code{NULL} --- Function that returns an disassociated pointer
-@findex @code{NULL} intrinsic
+@cindex @code{NULL} intrinsic
@cindex undocumented intrinsic
Intrinsic implemented, documentation pending.
@node OR
@section @code{OR} --- Bitwise logical OR
-@findex @code{OR} intrinsic
+@cindex @code{OR} intrinsic
@cindex bit operations
@table @asis
@node PACK
@section @code{PACK} --- Pack an array into an array of rank one
-@findex @code{PACK} intrinsic
+@cindex @code{PACK} intrinsic
@cindex undocumented intrinsic
Intrinsic implemented, documentation pending.
-
@node PERROR
@section @code{PERROR} --- Print system error message
-@findex @code{PERROR} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{PERROR} intrinsic
@table @asis
@item @emph{Description}:
+Prints (on the C @code{stderr} stream) a newline-terminated error
+message corresponding to the last system error. This is prefixed by
+@var{STRING}, a colon and a space. See @code{perror(3)}.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL PERROR(STRING)}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@multitable @columnfractions .15 .80
+@item @var{STRING} @tab A scalar of default @code{CHARACTER} type.
+@end multitable
+
@item @emph{See also}:
@ref{IERRNO}
@end table
-
@node PRECISION
@section @code{PRECISION} --- Decimal precision of a real kind
-@findex @code{PRECISION} intrinsic
-@cindex PRECISION
+@cindex @code{PRECISION} intrinsic
+@cindex precision of a real variable
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = PRECISION(X)}
+@code{RESULT = PRECISION(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node PRESENT
@section @code{PRESENT} --- Determine whether an optional argument is specified
-@findex @code{PRESENT} intrinsic
+@cindex @code{PRESENT} intrinsic
@cindex undocumented intrinsic
Intrinsic implemented, documentation pending.
-
@node PRODUCT
@section @code{PRODUCT} --- Product of array elements
-@findex @code{PRODUCT} intrinsic
+@cindex @code{PRODUCT} intrinsic
@cindex undocumented intrinsic
Intrinsic implemented, documentation pending.
@item @emph{Class}:
Transformational function
-@item @emph{Syntax}:
-@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@item @emph{Syntax}:
+@item @emph{Arguments}:
+@item @emph{Return value}:
+@item @emph{Example}:
+@item @emph{Specific names}:
+@item @emph{See also}:
+@ref{SUM}
+@end table
+
+
+
+@node RADIX
+@section @code{RADIX} --- Base of a model number
+@cindex @code{RADIX} intrinsic
+@cindex base
+
+@table @asis
+@item @emph{Description}:
+@code{RADIX(X)} returns the base of the model representing the entity @var{X}.
+
+@item @emph{Standard}:
+F95 and later
+
+@item @emph{Class}:
+Inquiry function
+
+@item @emph{Syntax}:
+@code{RESULT = RADIX(X)}
+
+@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
+@end multitable
+
+@item @emph{Return value}:
+The return value is a scalar of type @code{INTEGER} and of the default
+integer kind.
+
+@item @emph{Example}:
+@smallexample
+program test_radix
+ print *, "The radix for the default integer kind is", radix(0)
+ print *, "The radix for the default real kind is", radix(0.0)
+end program test_radix
+@end smallexample
+
+@end table
+
+
+
+@node RAN
+@section @code{RAN} --- Real pseudo-random number
+@cindex @code{RAN} intrinsic
+@cindex random numbers
+
+@table @asis
+@item @emph{Description}:
+For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
+provided as an alias for @code{RAND}. See @ref{RAND} for complete
+documentation.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Non-elemental function
+
@item @emph{See also}:
-@ref{SUM}
+@ref{RAND}, @ref{RANDOM_NUMBER}
@end table
-
-@node RADIX
-@section @code{RADIX} --- Base of a model number
-@findex @code{RADIX} intrinsic
-@cindex base
+@node RAND
+@section @code{RAND} --- Real pseudo-random number
+@cindex @code{RAND} intrinsic
+@cindex random numbers
@table @asis
@item @emph{Description}:
-@code{RADIX(X)} returns the base of the model representing the entity @var{X}.
+@code{RAND(FLAG)} returns a pseudo-random number from a uniform
+distribution between 0 and 1. If @var{FLAG} is 0, the next number
+in the current sequence is returned; if @var{FLAG} is 1, the generator
+is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
+it is used as a new seed with @code{SRAND}.
@item @emph{Standard}:
-F95 and later
+GNU extension
@item @emph{Class}:
-Inquiry function
+Non-elemental function
@item @emph{Syntax}:
-@code{R = RADIX(X)}
+@code{RESULT = RAND(FLAG)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab Shall be of type @code{INTEGER} or @code{REAL}
+@item @var{FLAG} @tab shall be a scalar @code{INTEGER} of kind 4.
@end multitable
@item @emph{Return value}:
-The return value is a scalar of type @code{INTEGER} and of the default
-integer kind.
+The return value is of @code{REAL} type and the default kind.
@item @emph{Example}:
@smallexample
-program test_radix
- print *, "The radix for the default integer kind is", radix(0)
- print *, "The radix for the default real kind is", radix(0.0)
-end program test_radix
+program test_rand
+ integer,parameter :: seed = 86456
+
+ call srand(seed)
+ print *, rand(), rand(), rand(), rand()
+ print *, rand(seed), rand(), rand(), rand()
+end program test_rand
@end smallexample
+@item @emph{See also}:
+@ref{SRAND}, @ref{RANDOM_NUMBER}
+
@end table
@node RANDOM_NUMBER
@section @code{RANDOM_NUMBER} --- Pseudo-random number
-@findex @code{RANDOM_NUMBER} intrinsic
+@cindex @code{RANDOM_NUMBER} intrinsic
@cindex random numbers
Intrinsic implemented, documentation pending.
-
@node RANDOM_SEED
@section @code{RANDOM_SEED} --- Initialize a pseudo-random number sequence
-@findex @code{RANDOM_SEED} intrinsic
+@cindex @code{RANDOM_SEED} intrinsic
@cindex random numbers
Intrinsic implemented, documentation pending.
-
-@node RAND
-@section @code{RAND} --- Real pseudo-random number
-@findex @code{RAND} intrinsic
-@findex @code{RAN} intrinsic
-@cindex random number
-
-@table @asis
-@item @emph{Description}:
-@code{RAND(FLAG)} returns a pseudo-random number from a uniform
-distribution between 0 and 1. If @var{FLAG} is 0, the next number
-in the current sequence is returned; if @var{FLAG} is 1, the generator
-is restarted by @code{CALL SRAND(0)}; if @var{FLAG} has any other value,
-it is used as a new seed with @code{SRAND}.
-
-@item @emph{Standard}:
-GNU extension
-
-@item @emph{Class}:
-non-elemental function
-
-@item @emph{Syntax}:
-@code{X = RAND(FLAG)}
-
-@item @emph{Arguments}:
-@multitable @columnfractions .15 .80
-@item @var{FLAG} @tab shall be a scalar @code{INTEGER} of kind 4.
-@end multitable
-
-@item @emph{Return value}:
-The return value is of @code{REAL} type and the default kind.
-
-@item @emph{Example}:
-@smallexample
-program test_rand
- integer,parameter :: seed = 86456
-
- call srand(seed)
- print *, rand(), rand(), rand(), rand()
- print *, rand(seed), rand(), rand(), rand()
-end program test_rand
-@end smallexample
-
-@item @emph{Note}:
-For compatibility with HP FORTRAN 77/iX, the @code{RAN} intrinsic is
-provided as an alias for @code{RAND}.
-
-@item @emph{See also}:
-@ref{SRAND}, @ref{RANDOM_NUMBER}
-
-@end table
-
-
-
@node RANGE
@section @code{RANGE} --- Decimal exponent range of a real kind
-@findex @code{RANGE} intrinsic
-@cindex RANGE
+@cindex @code{RANGE} intrinsic
+@cindex range of a real variable
@table @asis
@item @emph{Description}:
Inquiry function
@item @emph{Syntax}:
-@code{I = RANGE(X)}
+@code{RESULT = RANGE(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@node RAN
-@section @code{RAN} --- Real pseudo-random number
-@findex @code{RAN} intrinsic
-@cindex random number
-
-@table @asis
-@item @emph{Standard}:
-GNU extension
-
-@item @emph{See also}:
-@ref{RAND}, @ref{RANDOM_NUMBER}
-@end table
-
-
-
@node REAL
@section @code{REAL} --- Convert to real type
-@findex @code{REAL} intrinsic
-@findex @code{REALPART} intrinsic
+@cindex @code{REAL} intrinsic
+@cindex @code{REALPART} intrinsic
@cindex true values
@table @asis
@item @emph{Syntax}:
@multitable @columnfractions .30 .80
-@item @code{X = REAL(X)}
-@item @code{X = REAL(X, KIND)}
-@item @code{X = REALPART(Z)}
+@item @code{RESULT = REAL(X [, KIND])}
+@item @code{RESULT = REALPART(Z)}
@end multitable
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
-@item @var{X} @tab shall be @code{INTEGER(*)}, @code{REAL(*)}, or
-@code{COMPLEX(*)}.
-@item @var{KIND} @tab (Optional) @var{KIND} shall be a scalar integer.
+@item @var{X} @tab shall be @code{INTEGER(*)}, @code{REAL(*)}, or
+ @code{COMPLEX(*)}.
+@item @var{KIND} @tab (Optional) An @code{INTEGER(*)} initialization
+ expression indicating the kind parameter of
+ the result.
@end multitable
@item @emph{Return value}:
@end table
+
@node RENAME
@section @code{RENAME} --- Rename a file
-@findex @code{RENAME} intrinsic
+@cindex @code{RENAME} intrinsic
@cindex file system operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Renames a file from file @var{PATH1} to @var{PATH2}. A null
+character (@code{CHAR(0)}) can be used to mark the end of the names in
+@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
+names are ignored. If the @var{STATUS} argument is supplied, it
+contains 0 on success or a nonzero error code upon return; see
+@code{rename(2)}.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL RENAME(PATH1, PATH2 [, STATUS])}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
+@multitable @columnfractions .15 .80
+@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
+@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
+@end multitable
+
@item @emph{See also}:
-@end table
+@ref{LINK}
+@end table
@node REPEAT
@section @code{REPEAT} --- Repeated string concatenation
-@findex @code{REPEAT} intrinsic
+@cindex @code{REPEAT} intrinsic
@cindex string manipulation
Intrinsic implemented, documentation pending.
@node RESHAPE
@section @code{RESHAPE} --- Function to reshape an array
-@findex @code{RESHAPE} intrinsic
+@cindex @code{RESHAPE} intrinsic
@cindex array manipulation
Intrinsic implemented, documentation pending.
@node RRSPACING
@section @code{RRSPACING} --- Reciprocal of the relative spacing
-@findex @code{RRSPACING} intrinsic
+@cindex @code{RRSPACING} intrinsic
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{Y = RRSPACING(X)}
+@code{RESULT = RRSPACING(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node RSHIFT
@section @code{RSHIFT} --- Right shift bits
-@findex @code{RSHIFT}
-@cindex bit manipulation
-
-Not yet implemented in GNU Fortran.
+@cindex @code{RSHIFT} intrinsic
+@cindex bit operations
@table @asis
@item @emph{Description}:
+@code{RSHIFT} returns a value corresponding to @var{I} with all of the
+bits shifted right by @var{SHIFT} places. If the absolute value of
+@var{SHIFT} is greater than @code{BIT_SIZE(I)}, the value is undefined.
+Bits shifted out from the left end are lost; zeros are shifted in from
+the opposite end.
+
+This function has been superceded by the @code{ISHFT} intrinsic, which
+is standard in Fortran 95 and later.
@item @emph{Standard}:
GNU extension
@item @emph{Class}:
-Function
+Elemental function
@item @emph{Syntax}:
+@code{RESULT = RSHIFT(I, SHIFT)}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{I} @tab The type shall be @code{INTEGER(*)}.
+@item @var{SHIFT} @tab The type shall be @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return value is of type @code{INTEGER(*)} and of the same kind as
+@var{I}.
+
@item @emph{See also}:
+@ref{ISHFT}, @ref{ISHFTC}, @ref{LSHIFT}
@end table
@node SCALE
@section @code{SCALE} --- Scale a real value
-@findex @code{SCALE} intrinsic
+@cindex @code{SCALE} intrinsic
@table @asis
@item @emph{Description}:
Elemental function
@item @emph{Syntax}:
-@code{Y = SCALE(X, I)}
+@code{RESULT = SCALE(X, I)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SCAN
@section @code{SCAN} --- Scan a string for the presence of a set of characters
-@findex @code{SCAN} intrinsic
+@cindex @code{SCAN} intrinsic
@cindex string manipulation
Intrinsic implemented, documentation pending.
@node SECNDS
@section @code{SECNDS} --- Time function
-@findex @code{SECNDS} intrinsic
-@cindex SECNDS
+@cindex @code{SECNDS} intrinsic
+@cindex time, current
+@cindex current time
@table @asis
@item @emph{Description}:
function
@item @emph{Syntax}:
-@code{T = SECNDS (X)}
+@code{RESULT = SECNDS (X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SELECTED_INT_KIND
@section @code{SELECTED_INT_KIND} --- Choose integer kind
-@findex @code{SELECTED_INT_KIND} intrinsic
+@cindex @code{SELECTED_INT_KIND} intrinsic
@cindex integer kind
@table @asis
Transformational function
@item @emph{Syntax}:
-@multitable @columnfractions .30 .80
-@item @code{J = SELECTED_INT_KIND(I)}
-@end multitable
+@code{RESULT = SELECTED_INT_KIND(I)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SELECTED_REAL_KIND
@section @code{SELECTED_REAL_KIND} --- Choose real kind
-@findex @code{SELECTED_REAL_KIND} intrinsic
+@cindex @code{SELECTED_REAL_KIND} intrinsic
@cindex real kind
@table @asis
Transformational function
@item @emph{Syntax}:
-@multitable @columnfractions .30 .80
-@item @code{I = SELECTED_REAL_KIND(P,R)}
-@end multitable
+@code{RESULT = SELECTED_REAL_KIND(P, R)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SET_EXPONENT
@section @code{SET_EXPONENT} --- Set the exponent of the model
-@findex @code{SET_EXPONENT} intrinsic
-@cindex exponent
+@cindex @code{SET_EXPONENT} intrinsic
+@cindex exponent part of a real number
@table @asis
@item @emph{Description}:
@code{SET_EXPONENT(X, I)} returns the real number whose fractional part
-is that that of @var{X} and whose exponent part if @var{I}.
+is that that of @var{X} and whose exponent part is @var{I}.
@item @emph{Standard}:
F95 and later
Elemental function
@item @emph{Syntax}:
-@code{Y = SET_EXPONENT(X, I)}
+@code{RESULT = SET_EXPONENT(X, I)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SHAPE
@section @code{SHAPE} --- Determine the shape of an array
-@findex @code{SHAPE} intrinsic
+@cindex @code{SHAPE} intrinsic
@cindex array manipulation
Intrinsic implemented, documentation pending.
-
@node SIGN
@section @code{SIGN} --- Sign copying function
-@findex @code{SIGN} intrinsic
-@findex @code{ISIGN} intrinsic
-@findex @code{DSIGN} intrinsic
+@cindex @code{SIGN} intrinsic
+@cindex @code{ISIGN} intrinsic
+@cindex @code{DSIGN} intrinsic
@cindex sign copying
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = SIGN(A,B)}
+@code{RESULT = SIGN(A, B)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SIGNAL
@section @code{SIGNAL} --- Signal handling subroutine (or function)
-@findex @code{SIGNAL} intrinsic
-@cindex SIGNAL subroutine
+@cindex @code{SIGNAL} intrinsic
+@cindex signal handling
@table @asis
@item @emph{Description}:
subroutine, non-elemental function
@item @emph{Syntax}:
-@multitable @columnfractions .30 .80
-@item @code{CALL ALARM(NUMBER, HANDLER)}
-@item @code{CALL ALARM(NUMBER, HANDLER, STATUS)}
-@item @code{STATUS = ALARM(NUMBER, HANDLER)}
+@multitable @columnfractions .80
+@item @code{CALL SIGNAL(NUMBER, HANDLER [, STATUS])}
+@item @code{STATUS = SIGNAL(NUMBER, HANDLER)}
@end multitable
@item @emph{Arguments}:
@end multitable
@item @emph{Return value}:
-The @code{SIGNAL} functions returns the value returned by @code{signal(2)}.
+The @code{SIGNAL} function returns the value returned by @code{signal(2)}.
@item @emph{Example}:
@smallexample
-
@node SIN
@section @code{SIN} --- Sine function
-@findex @code{SIN} intrinsic
-@findex @code{DSIN} intrinsic
-@findex @code{ZSIN} intrinsic
-@findex @code{CDSIN} intrinsic
+@cindex @code{SIN} intrinsic
+@cindex @code{DSIN} intrinsic
+@cindex @code{ZSIN} intrinsic
+@cindex @code{CDSIN} intrinsic
@cindex trigonometric functions
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = SIN(X)}
+@code{RESULT = SIN(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SINH
@section @code{SINH} --- Hyperbolic sine function
-@findex @code{SINH} intrinsic
-@findex @code{DSINH} intrinsic
+@cindex @code{SINH} intrinsic
+@cindex @code{DSINH} intrinsic
@cindex hyperbolic sine
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = SINH(X)}
+@code{RESULT = SINH(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SIZE
@section @code{SIZE} --- Determine the size of an array
-@findex @code{SIZE} intrinsic
+@cindex @code{SIZE} intrinsic
@cindex array manipulation
Intrinsic implemented, documentation pending.
@node SNGL
@section @code{SNGL} --- Convert double precision real to default real
-@findex @code{SNGL} intrinsic
+@cindex @code{SNGL} intrinsic
@cindex conversion function (real)
@table @asis
function
@item @emph{Syntax}:
-@code{X = SNGL(A)}
+@code{RESULT = SNGL(A)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SPACING
@section @code{SPACING} --- Smallest distance between two numbers of a given type
-@findex @code{SPACING} intrinsic
+@cindex @code{SPACING} intrinsic
@cindex undocumented intrinsic
Intrinsic implemented, documentation pending.
@node SPREAD
@section @code{SPREAD} --- Add a dimension to an array
-@findex @code{SPREAD} intrinsic
+@cindex @code{SPREAD} intrinsic
@cindex array manipulation
Intrinsic implemented, documentation pending.
@node SQRT
@section @code{SQRT} --- Square-root function
-@findex @code{SQRT} intrinsic
-@findex @code{DSQRT} intrinsic
-@findex @code{CSQRT} intrinsic
-@findex @code{ZSQRT} intrinsic
-@findex @code{CDSQRT} intrinsic
+@cindex @code{SQRT} intrinsic
+@cindex @code{DSQRT} intrinsic
+@cindex @code{CSQRT} intrinsic
+@cindex @code{ZSQRT} intrinsic
+@cindex @code{CDSQRT} intrinsic
@cindex square-root
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = SQRT(X)}
+@code{RESULT = SQRT(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node SRAND
@section @code{SRAND} --- Reinitialize the random number generator
-@findex @code{SRAND} intrinsic
-@cindex random number
+@cindex @code{SRAND} intrinsic
+@cindex random numbers
@table @asis
@item @emph{Description}:
@end table
+
@node STAT
@section @code{STAT} --- Get file status
-@findex @code{STAT} intrinsic
+@cindex @code{STAT} intrinsic
@cindex file system operations
@table @asis
@item @emph{Example}:
@smallexample
-PROGRAM test_fstat
+PROGRAM test_stat
INTEGER, DIMENSION(13) :: buff
INTEGER :: status
- CALL STAT("/etc/passwd", statarr, status)
+ CALL STAT("/etc/passwd", buff, status)
IF (status == 0) THEN
- WRITE (*, FMT="('Device ID:', T40, I19)") buff(1)
- WRITE (*, FMT="('Inode number:', T40, I19)") buff(2)
- WRITE (*, FMT="('File mode:', T40, o19)") buff(3)
- WRITE (*, FMT="('Number of links:', T40, I19)") buff(4)
- WRITE (*, FMT="('Owner''s uid:', T40, I19)") buff(5)
- WRITE (*, FMT="('Owner''s gid:', T40, I19)") buff(6)
- WRITE (*, FMT="('Device where directory is located:', T40, I19)") buff(7)
- WRITE (*, FMT="('File size:', T40, I19)") buff(8)
- WRITE (*, FMT="('Last access time:', T40, A19)") CTIME(buff(9))
- WRITE (*, FMT="('Last modification time', T40, A19)") CTIME(buff(10))
- WRITE (*, FMT="('Last file status change time:', T40, A19)") CTIME(buff(11))
- WRITE (*, FMT="('Preferred I/O block size:', T40, I19)") buff(12)
- WRITE (*, FMT="('Number of blocks allocated:', T40, I19)") buff(13)
+ WRITE (*, FMT="('Device ID:', T30, I19)") buff(1)
+ WRITE (*, FMT="('Inode number:', T30, I19)") buff(2)
+ WRITE (*, FMT="('File mode (octal):', T30, O19)") buff(3)
+ WRITE (*, FMT="('Number of links:', T30, I19)") buff(4)
+ WRITE (*, FMT="('Owner''s uid:', T30, I19)") buff(5)
+ WRITE (*, FMT="('Owner''s gid:', T30, I19)") buff(6)
+ WRITE (*, FMT="('Device where located:', T30, I19)") buff(7)
+ WRITE (*, FMT="('File size:', T30, I19)") buff(8)
+ WRITE (*, FMT="('Last access time:', T30, A19)") CTIME(buff(9))
+ WRITE (*, FMT="('Last modification time', T30, A19)") CTIME(buff(10))
+ WRITE (*, FMT="('Last status change time:', T30, A19)") CTIME(buff(11))
+ WRITE (*, FMT="('Preferred block size:', T30, I19)") buff(12)
+ WRITE (*, FMT="('No. of blocks allocated:', T30, I19)") buff(13)
END IF
END PROGRAM
@end smallexample
@node SUM
@section @code{SUM} --- Sum of array elements
-@findex @code{SUM} intrinsic
+@cindex @code{SUM} intrinsic
@cindex array manipulation
Intrinsic implemented, documentation pending.
-
@node SYMLNK
@section @code{SYMLNK} --- Create a symbolic link
-@findex @code{SYMLNK} intrinsic
+@cindex @code{SYMLNK} intrinsic
@cindex file system operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Makes a symbolic link from file @var{PATH1} to @var{PATH2}. A null
+character (@code{CHAR(0)}) can be used to mark the end of the names in
+@var{PATH1} and @var{PATH2}; otherwise, trailing blanks in the file
+names are ignored. If the @var{STATUS} argument is supplied, it
+contains 0 on success or a nonzero error code upon return; see
+@code{symlink(2)}. If the system does not supply @code{symlink(2)},
+@code{ENOSYS} is returned.
+
@item @emph{Standard}:
-@item @emph{Class}:
GNU extension
+@item @emph{Class}:
+Subroutine
+
@item @emph{Syntax}:
+@code{CALL SYMLNK(PATH1, PATH2 [, STATUS])}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
+@multitable @columnfractions .15 .80
+@item @var{PATH1} @tab Shall be of default @code{CHARACTER} type.
+@item @var{PATH2} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
+@end multitable
+
@item @emph{See also}:
-@end table
+@ref{LINK}, @ref{UNLINK}
+@end table
@node SYSTEM
@section @code{SYSTEM} --- Execute a shell command
-@findex @code{SYSTEM} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{SYSTEM} intrinsic
@table @asis
@item @emph{Description}:
+Passes the command @var{COMMAND} to a shell (see @code{system(3)}). If
+argument @var{STATUS} is present, it contains the value returned by
+@code{system(3)}, which is presumably 0 if the shell command succeeded.
+Note that which shell is used to invoke the command is system-dependent
+and environment-dependent.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL SYSTEM(COMMAND [, STATUS])}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
+@multitable @columnfractions .15 .80
+@item @var{COMMAND} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
+@end multitable
+
@item @emph{See also}:
@end table
-
@node SYSTEM_CLOCK
@section @code{SYSTEM_CLOCK} --- Time function
-@findex @code{SYSTEM_CLOCK} intrinsic
-@cindex time functions
+@cindex @code{SYSTEM_CLOCK} intrinsic
+@cindex time, current
+@cindex current time
Intrinsic implemented, documentation pending.
@node TAN
@section @code{TAN} --- Tangent function
-@findex @code{TAN} intrinsic
-@findex @code{DTAN} intrinsic
+@cindex @code{TAN} intrinsic
+@cindex @code{DTAN} intrinsic
@cindex trigonometric functions
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{X = TAN(X)}
+@code{RESULT = TAN(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node TANH
@section @code{TANH} --- Hyperbolic tangent function
-@findex @code{TANH} intrinsic
-@findex @code{DTANH} intrinsic
+@cindex @code{TANH} intrinsic
+@cindex @code{DTANH} intrinsic
@cindex hyperbolic tangent
@table @asis
@node TIME
@section @code{TIME} --- Time function
-@findex @code{TIME} intrinsic
-@cindex time functions
+@cindex @code{TIME} intrinsic
+@cindex time, current
+@cindex current time
-Intrinsic implemented, documentation pending.
+@table @asis
+@item @emph{Description}:
+Returns the current time encoded as an integer (in the manner of the
+UNIX function @code{time(3)}). This value is suitable for passing to
+@code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}.
+
+This intrinsic is not fully portable, such as to systems with 32-bit
+@code{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 @ref{TIME8}, for information on a similar intrinsic that might be
+portable to more GNU Fortran implementations, though to fewer Fortran
+compilers.
+
+@item @emph{Standard}:
+GNU extension
+
+@item @emph{Class}:
+Non-elemental function
+
+@item @emph{Syntax}:
+@code{RESULT = TIME()}
+
+@item @emph{Return value}:
+The return value is a scalar of type @code{INTEGER(4)}.
+
+@item @emph{See also}:
+@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{TIME8}
+
+@end table
+
+
+
+@node TIME8
+@section @code{TIME8} --- Time function (64-bit)
+@cindex @code{TIME8} intrinsic
+@cindex time, current
+@cindex current time
@table @asis
@item @emph{Description}:
+Returns the current time encoded as an integer (in the manner of the
+UNIX function @code{time(3)}). This value is suitable for passing to
+@code{CTIME()}, @code{GMTIME()}, and @code{LTIME()}.
+
+@emph{Warning:} this intrinsic does not increase the range of the timing
+values over that returned by @code{time(3)}. On a system with a 32-bit
+@code{time(3)}, @code{TIME8()} will return a 32-bit value, even though
+it is converted to a 64-bit @code{INTEGER(8)} 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.
+
@item @emph{Standard}:
GNU extension
Non-elemental function
@item @emph{Syntax}:
-@item @emph{Arguments}:
+@code{RESULT = TIME8()}
+
@item @emph{Return value}:
-@item @emph{Example}:
+The return value is a scalar of type @code{INTEGER(8)}.
+
@item @emph{See also}:
+@ref{CTIME}, @ref{GMTIME}, @ref{LTIME}, @ref{TIME}
+
@end table
@node TINY
@section @code{TINY} --- Smallest positive number of a real kind
-@findex @code{TINY} intrinsic
+@cindex @code{TINY} intrinsic
@cindex tiny
@table @asis
Elemental function
@item @emph{Syntax}:
-@code{Y = TINY(X)}
+@code{RESULT = TINY(X)}
@item @emph{Arguments}:
@multitable @columnfractions .15 .80
@node TRANSFER
@section @code{TRANSFER} --- Transfer bit patterns
-@findex @code{TRANSFER} intrinsic
-@cindex bit manipulation
+@cindex @code{TRANSFER} intrinsic
+@cindex bit operations
Intrinsic implemented, documentation pending.
-
@node TRANSPOSE
@section @code{TRANSPOSE} --- Transpose an array of rank two
-@findex @code{TRANSPOSE} intrinsic
+@cindex @code{TRANSPOSE} intrinsic
@cindex matrix manipulation
Intrinsic implemented, documentation pending.
-
@node TRIM
@section @code{TRIM} --- Function to remove trailing blank characters of a string
-@findex @code{TRIM} intrinsic
+@cindex @code{TRIM} intrinsic
@cindex string manipulation
Intrinsic implemented, documentation pending.
-
@node UBOUND
@section @code{UBOUND} --- Upper dimension bounds of an array
-@findex @code{UBOUND} intrinsic
-@cindex undocumented intrinsic
-
-Intrinsic implemented, documentation pending.
+@cindex @code{UBOUND} intrinsic
@table @asis
@item @emph{Description}:
-
+Returns the upper bounds of an array, or a single upper bound
+along the @var{DIM} dimension.
@item @emph{Standard}:
F95 and later
Inquiry function
@item @emph{Syntax}:
+@code{RESULT = UBOUND(ARRAY [, DIM])}
+
@item @emph{Arguments}:
+@multitable @columnfractions .15 .80
+@item @var{ARRAY} @tab Shall be an array, of any type.
+@item @var{DIM} @tab (Optional) Shall be a scalar @code{INTEGER(*)}.
+@end multitable
+
@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+If @var{DIM} is absent, the result is an array of the upper bounds of
+@var{ARRAY}. If @var{DIM} is present, the result is a scalar
+corresponding to the upper bound of the array along that dimension. If
+@var{ARRAY} is an expression rather than a whole array or array
+structure component, or if it has a zero extent along the relevant
+dimension, the upper bound is taken to be the number of elements along
+the relevant dimension.
@item @emph{See also}:
@ref{LBOUND}
-
@node UMASK
@section @code{UMASK} --- Set the file creation mask
-@findex @code{UMASK} intrinsic
+@cindex @code{UMASK} intrinsic
@cindex file system operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Sets the file creation mask to @var{MASK} and returns the old value in
+argument @var{OLD} if it is supplied. See @code{umask(2)}.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
+@code{CALL UMASK(MASK [, OLD])}
+
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
-@item @emph{See also}:
-@end table
+@multitable @columnfractions .15 .80
+@item @var{MASK} @tab Shall be a scalar of type @code{INTEGER(*)}.
+@item @var{MASK} @tab (Optional) Shall be a scalar of type
+ @code{INTEGER(*)}.
+@end multitable
+@end table
@node UNLINK
@section @code{UNLINK} --- Remove a file from the file system
-@findex @code{UNLINK} intrinsic
+@cindex @code{UNLINK} intrinsic
@cindex file system operations
-Intrinsic implemented, documentation pending.
-
@table @asis
@item @emph{Description}:
+Unlinks the file @var{PATH}. A null character (@code{CHAR(0)}) can be
+used to mark the end of the name in @var{PATH}; otherwise, trailing
+blanks in the file name are ignored. If the @var{STATUS} argument is
+supplied, it contains 0 on success or a nonzero error code upon return;
+see @code{unlink(2)}.
+
@item @emph{Standard}:
GNU extension
Subroutine
@item @emph{Syntax}:
-@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-
-@item @emph{See also}:
-@ref{LINK}
-@end table
-
-
-
-
-@node UNMASK
-@section @code{UNMASK} --- (?)
-@findex @code{UNMASK} intrinsic
-@cindex undocumented intrinsic
+@code{CALL UNLINK(PATH [, STATUS])}
-Intrinsic implemented, documentation pending.
-
-@table @asis
-@item @emph{Description}:
-@item @emph{Standard}:
-@item @emph{Class}:
-@item @emph{Syntax}:
@item @emph{Arguments}:
-@item @emph{Return value}:
-@item @emph{Example}:
-@item @emph{Specific names}:
+@multitable @columnfractions .15 .80
+@item @var{PATH} @tab Shall be of default @code{CHARACTER} type.
+@item @var{STATUS} @tab (Optional) Shall be of default @code{INTEGER} type.
+@end multitable
+
@item @emph{See also}:
+@ref{LINK}, @ref{SYMLNK}
@end table
-
@node UNPACK
@section @code{UNPACK} --- Unpack an array of rank one into an array
-@findex @code{UNPACK} intrinsic
+@cindex @code{UNPACK} intrinsic
@cindex array manipulation
Intrinsic implemented, documentation pending.
-
@node VERIFY
@section @code{VERIFY} --- Scan a string for the absence of a set of characters
-@findex @code{VERIFY} intrinsic
+@cindex @code{VERIFY} intrinsic
@cindex string manipulation
Intrinsic implemented, documentation pending.
@end table
+
@node XOR
@section @code{XOR} --- Bitwise logical exclusive OR
-@findex @code{XOR} intrinsic
+@cindex @code{XOR} intrinsic
@cindex bit operations
@table @asis