2705 lines
82 KiB
Plaintext
2705 lines
82 KiB
Plaintext
/* Copyright (C) 1997, 1999 Free Software Foundation, Inc.
|
|
* This is part of the G77 manual.
|
|
* For copying conditions, see the file g77.texi. */
|
|
|
|
/* This is the file containing the verbage for the
|
|
intrinsics. It consists of a data base built up
|
|
via DEFDOC macros of the form:
|
|
|
|
DEFDOC (IMP, SUMMARY, DESCRIPTION)
|
|
|
|
IMP is the implementation keyword used in the intrin module.
|
|
SUMMARY is the short summary to go in the "* Menu:" section
|
|
of the Info document. DESCRIPTION is the longer description
|
|
to go in the documentation itself.
|
|
|
|
Note that IMP is leveraged across multiple intrinsic names.
|
|
|
|
To make for more accurate and consistent documentation,
|
|
the translation made by intdoc.c of the text in SUMMARY
|
|
and DESCRIPTION includes the special sequence
|
|
|
|
@ARGNO@
|
|
|
|
where ARGNO is a series of digits forming a number that
|
|
is substituted by intdoc.c as follows:
|
|
|
|
0 The initial-caps form of the intrinsic name (e.g. Float).
|
|
1-98 The initial-caps form of the ARGNO'th argument.
|
|
99 (SUMMARY only) a newline plus the appropriate # of spaces.
|
|
|
|
Hope this info is enough to encourage people to feel free to
|
|
add documentation to this file!
|
|
|
|
*/
|
|
|
|
#define ARCHAIC(upper,mixed) \
|
|
"Archaic form of @code{" #upper "()} that is specific\n\
|
|
to one type for @var{@1@}.\n\
|
|
@xref{" #mixed " Intrinsic}.\n"
|
|
|
|
#define ARCHAIC_2nd(upper,mixed) \
|
|
"Archaic form of @code{" #upper "()} that is specific\n\
|
|
to one type for @var{@2@}.\n\
|
|
@xref{" #mixed " Intrinsic}.\n"
|
|
|
|
#define ARCHAIC_2(upper,mixed) \
|
|
"Archaic form of @code{" #upper "()} that is specific\n\
|
|
to one type for @var{@1@} and @var{@2@}.\n\
|
|
@xref{" #mixed " Intrinsic}.\n"
|
|
|
|
DEFDOC (ABS, "Absolute value.", "\
|
|
Returns the absolute value of @var{@1@}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, the absolute
|
|
value is computed as:
|
|
|
|
@example
|
|
SQRT(REALPART(@var{@1@})**2, IMAGPART(@var{@1@})**2)
|
|
@end example
|
|
|
|
@noindent
|
|
Otherwise, it is computed by negating the @var{@1@} if
|
|
it is negative, or returning @var{@1@}.
|
|
|
|
@xref{Sign Intrinsic}, for how to explicitly
|
|
compute the positive or negative form of the absolute
|
|
value of an expression.
|
|
")
|
|
|
|
DEFDOC (CABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
|
|
|
|
DEFDOC (DABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
|
|
|
|
DEFDOC (IABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
|
|
|
|
DEFDOC (CDABS, "Absolute value (archaic).", ARCHAIC (ABS, Abs))
|
|
|
|
DEFDOC (ACHAR, "ASCII character from code.", "\
|
|
Returns the ASCII character corresponding to the
|
|
code specified by @var{@1@}.
|
|
|
|
@xref{IAChar Intrinsic}, for the inverse of this function.
|
|
|
|
@xref{Char Intrinsic}, for the function corresponding
|
|
to the system's native character set.
|
|
")
|
|
|
|
DEFDOC (IACHAR, "ASCII code for character.", "\
|
|
Returns the code for the ASCII character in the
|
|
first character position of @var{@1@}.
|
|
|
|
@xref{AChar Intrinsic}, for the inverse of this function.
|
|
|
|
@xref{IChar Intrinsic}, for the function corresponding
|
|
to the system's native character set.
|
|
")
|
|
|
|
DEFDOC (CHAR, "Character from code.", "\
|
|
Returns the character corresponding to the
|
|
code specified by @var{@1@}, using the system's
|
|
native character set.
|
|
|
|
Because the system's native character set is used,
|
|
the correspondence between character and their codes
|
|
is not necessarily the same between GNU Fortran
|
|
implementations.
|
|
|
|
Note that no intrinsic exists to convert a numerical
|
|
value to a printable character string.
|
|
For example, there is no intrinsic that, given
|
|
an @code{INTEGER} or @code{REAL} argument with the
|
|
value @samp{154}, returns the @code{CHARACTER}
|
|
result @samp{'154'}.
|
|
|
|
Instead, you can use internal-file I/O to do this kind
|
|
of conversion.
|
|
For example:
|
|
|
|
@smallexample
|
|
INTEGER VALUE
|
|
CHARACTER*10 STRING
|
|
VALUE = 154
|
|
WRITE (STRING, '(I10)'), VALUE
|
|
PRINT *, STRING
|
|
END
|
|
@end smallexample
|
|
|
|
The above program, when run, prints:
|
|
|
|
@smallexample
|
|
154
|
|
@end smallexample
|
|
|
|
@xref{IChar Intrinsic}, for the inverse of the @code{@0@} function.
|
|
|
|
@xref{AChar Intrinsic}, for the function corresponding
|
|
to the ASCII character set.
|
|
")
|
|
|
|
DEFDOC (ICHAR, "Code for character.", "\
|
|
Returns the code for the character in the
|
|
first character position of @var{@1@}.
|
|
|
|
Because the system's native character set is used,
|
|
the correspondence between character and their codes
|
|
is not necessarily the same between GNU Fortran
|
|
implementations.
|
|
|
|
Note that no intrinsic exists to convert a printable
|
|
character string to a numerical value.
|
|
For example, there is no intrinsic that, given
|
|
the @code{CHARACTER} value @samp{'154'}, returns an
|
|
@code{INTEGER} or @code{REAL} value with the value @samp{154}.
|
|
|
|
Instead, you can use internal-file I/O to do this kind
|
|
of conversion.
|
|
For example:
|
|
|
|
@smallexample
|
|
INTEGER VALUE
|
|
CHARACTER*10 STRING
|
|
STRING = '154'
|
|
READ (STRING, '(I10)'), VALUE
|
|
PRINT *, VALUE
|
|
END
|
|
@end smallexample
|
|
|
|
The above program, when run, prints:
|
|
|
|
@smallexample
|
|
154
|
|
@end smallexample
|
|
|
|
@xref{Char Intrinsic}, for the inverse of the @code{@0@} function.
|
|
|
|
@xref{IAChar Intrinsic}, for the function corresponding
|
|
to the ASCII character set.
|
|
")
|
|
|
|
DEFDOC (ACOS, "Arc cosine.", "\
|
|
Returns the arc-cosine (inverse cosine) of @var{@1@}
|
|
in radians.
|
|
|
|
@xref{Cos Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (DACOS, "Arc cosine (archaic).", ARCHAIC (ACOS, ACos))
|
|
|
|
DEFDOC (AIMAG, "Convert/extract imaginary part of complex.", "\
|
|
Returns the (possibly converted) imaginary part of @var{@1@}.
|
|
|
|
Use of @code{@0@()} with an argument of a type
|
|
other than @code{COMPLEX(KIND=1)} is restricted to the following case:
|
|
|
|
@example
|
|
REAL(AIMAG(@1@))
|
|
@end example
|
|
|
|
@noindent
|
|
This expression converts the imaginary part of @1@ to
|
|
@code{REAL(KIND=1)}.
|
|
|
|
@xref{REAL() and AIMAG() of Complex}, for more information.
|
|
")
|
|
|
|
DEFDOC (DIMAG, "Convert/extract imaginary part of complex (archaic).", ARCHAIC (AIMAG, AImag))
|
|
|
|
DEFDOC (AINT, "Truncate to whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude truncated and its sign preserved.
|
|
(Also called ``truncation towards zero''.)
|
|
|
|
@xref{ANInt Intrinsic}, for how to round to nearest
|
|
whole number.
|
|
|
|
@xref{Int Intrinsic}, for how to truncate and then convert
|
|
number to @code{INTEGER}.
|
|
")
|
|
|
|
DEFDOC (DINT, "Truncate to whole number (archaic).", ARCHAIC (AINT, AInt))
|
|
|
|
DEFDOC (INT, "Convert to @code{INTEGER} value truncated@99@to whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude truncated and its sign preserved, converted
|
|
to type @code{INTEGER(KIND=1)}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, its real part is
|
|
truncated and converted, and its imaginary part is disregarded.
|
|
|
|
@xref{NInt Intrinsic}, for how to convert, rounded to nearest
|
|
whole number.
|
|
|
|
@xref{AInt Intrinsic}, for how to truncate to whole number
|
|
without converting.
|
|
")
|
|
|
|
DEFDOC (IDINT, "Convert to @code{INTEGER} value truncated@99@to whole number (archaic).", ARCHAIC (INT, Int))
|
|
|
|
DEFDOC (ANINT, "Round to nearest whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude eliminated by rounding to the nearest whole
|
|
number and with its sign preserved.
|
|
|
|
A fractional portion exactly equal to
|
|
@samp{.5} is rounded to the whole number that
|
|
is larger in magnitude.
|
|
(Also called ``Fortran round''.)
|
|
|
|
@xref{AInt Intrinsic}, for how to truncate to
|
|
whole number.
|
|
|
|
@xref{NInt Intrinsic}, for how to round and then convert
|
|
number to @code{INTEGER}.
|
|
")
|
|
|
|
DEFDOC (DNINT, "Round to nearest whole number (archaic).", ARCHAIC (ANINT, ANInt))
|
|
|
|
DEFDOC (NINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude eliminated by rounding to the nearest whole
|
|
number and with its sign preserved, converted
|
|
to type @code{INTEGER(KIND=1)}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, its real part is
|
|
rounded and converted.
|
|
|
|
A fractional portion exactly equal to
|
|
@samp{.5} is rounded to the whole number that
|
|
is larger in magnitude.
|
|
(Also called ``Fortran round''.)
|
|
|
|
@xref{Int Intrinsic}, for how to convert, truncate to
|
|
whole number.
|
|
|
|
@xref{ANInt Intrinsic}, for how to round to nearest whole number
|
|
without converting.
|
|
")
|
|
|
|
DEFDOC (IDNINT, "Convert to @code{INTEGER} value rounded@99@to nearest whole number (archaic).", ARCHAIC (NINT, NInt))
|
|
|
|
DEFDOC (LOG, "Natural logarithm.", "\
|
|
Returns the natural logarithm of @var{@1@}, which must
|
|
be greater than zero or, if type @code{COMPLEX}, must not
|
|
be zero.
|
|
|
|
@xref{Exp Intrinsic}, for the inverse of this function.
|
|
|
|
@xref{Log10 Intrinsic}, for the `common' (base-10) logarithm function.
|
|
")
|
|
|
|
DEFDOC (ALOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
|
|
|
|
DEFDOC (CLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
|
|
|
|
DEFDOC (DLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
|
|
|
|
DEFDOC (CDLOG, "Natural logarithm (archaic).", ARCHAIC (LOG, Log))
|
|
|
|
DEFDOC (LOG10, "Common logarithm.", "\
|
|
Returns the common logarithm (base 10) of @var{@1@}, which must
|
|
be greater than zero.
|
|
|
|
The inverse of this function is @samp{10. ** LOG10(@var{@1@})}.
|
|
|
|
@xref{Log Intrinsic}, for the natural logarithm function.
|
|
")
|
|
|
|
DEFDOC (ALOG10, "Common logarithm (archaic).", ARCHAIC (LOG10, Log10))
|
|
|
|
DEFDOC (DLOG10, "Common logarithm (archaic).", ARCHAIC (LOG10, Log10))
|
|
|
|
DEFDOC (MAX, "Maximum value.", "\
|
|
Returns the argument with the largest value.
|
|
|
|
@xref{Min Intrinsic}, for the opposite function.
|
|
")
|
|
|
|
DEFDOC (AMAX0, "Maximum value (archaic).", "\
|
|
Archaic form of @code{MAX()} that is specific
|
|
to one type for @var{@1@} and a different return type.
|
|
@xref{Max Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (AMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max))
|
|
|
|
DEFDOC (DMAX1, "Maximum value (archaic).", ARCHAIC (MAX, Max))
|
|
|
|
DEFDOC (MAX0, "Maximum value (archaic).", ARCHAIC (MAX, Max))
|
|
|
|
DEFDOC (MAX1, "Maximum value (archaic).", "\
|
|
Archaic form of @code{MAX()} that is specific
|
|
to one type for @var{@1@} and a different return type.
|
|
@xref{Max Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (MIN, "Minimum value.", "\
|
|
Returns the argument with the smallest value.
|
|
|
|
@xref{Max Intrinsic}, for the opposite function.
|
|
")
|
|
|
|
DEFDOC (AMIN0, "Minimum value (archaic).", "\
|
|
Archaic form of @code{MIN()} that is specific
|
|
to one type for @var{@1@} and a different return type.
|
|
@xref{Min Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (AMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min))
|
|
|
|
DEFDOC (DMIN1, "Minimum value (archaic).", ARCHAIC (MIN, Min))
|
|
|
|
DEFDOC (MIN0, "Minimum value (archaic).", ARCHAIC (MIN, Min))
|
|
|
|
DEFDOC (MIN1, "Minimum value (archaic).", "\
|
|
Archaic form of @code{MIN()} that is specific
|
|
to one type for @var{@1@} and a different return type.
|
|
@xref{Min Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (MOD, "Remainder.", "\
|
|
Returns remainder calculated as:
|
|
|
|
@smallexample
|
|
@var{@1@} - (INT(@var{@1@} / @var{@2@}) * @var{@2@})
|
|
@end smallexample
|
|
|
|
@var{@2@} must not be zero.
|
|
")
|
|
|
|
DEFDOC (AMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod))
|
|
|
|
DEFDOC (DMOD, "Remainder (archaic).", ARCHAIC (MOD, Mod))
|
|
|
|
DEFDOC (AND, "Boolean AND.", "\
|
|
Returns value resulting from boolean AND of
|
|
pair of bits in each of @var{@1@} and @var{@2@}.
|
|
")
|
|
|
|
DEFDOC (IAND, "Boolean AND.", "\
|
|
Returns value resulting from boolean AND of
|
|
pair of bits in each of @var{@1@} and @var{@2@}.
|
|
")
|
|
|
|
DEFDOC (OR, "Boolean OR.", "\
|
|
Returns value resulting from boolean OR of
|
|
pair of bits in each of @var{@1@} and @var{@2@}.
|
|
")
|
|
|
|
DEFDOC (IOR, "Boolean OR.", "\
|
|
Returns value resulting from boolean OR of
|
|
pair of bits in each of @var{@1@} and @var{@2@}.
|
|
")
|
|
|
|
DEFDOC (XOR, "Boolean XOR.", "\
|
|
Returns value resulting from boolean exclusive-OR of
|
|
pair of bits in each of @var{@1@} and @var{@2@}.
|
|
")
|
|
|
|
DEFDOC (IEOR, "Boolean XOR.", "\
|
|
Returns value resulting from boolean exclusive-OR of
|
|
pair of bits in each of @var{@1@} and @var{@2@}.
|
|
")
|
|
|
|
DEFDOC (NOT, "Boolean NOT.", "\
|
|
Returns value resulting from boolean NOT of each bit
|
|
in @var{@1@}.
|
|
")
|
|
|
|
DEFDOC (ASIN, "Arc sine.", "\
|
|
Returns the arc-sine (inverse sine) of @var{@1@}
|
|
in radians.
|
|
|
|
@xref{Sin Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (DASIN, "Arc sine (archaic).", ARCHAIC (ASIN, ASin))
|
|
|
|
DEFDOC (ATAN, "Arc tangent.", "\
|
|
Returns the arc-tangent (inverse tangent) of @var{@1@}
|
|
in radians.
|
|
|
|
@xref{Tan Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (DATAN, "Arc tangent (archaic).", ARCHAIC (ATAN, ATan))
|
|
|
|
DEFDOC (ATAN2, "Arc tangent.", "\
|
|
Returns the arc-tangent (inverse tangent) of the complex
|
|
number (@var{@1@}, @var{@2@}) in radians.
|
|
|
|
@xref{Tan Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (DATAN2, "Arc tangent (archaic).", ARCHAIC_2 (ATAN2, ATan2))
|
|
|
|
DEFDOC (BIT_SIZE, "Number of bits in argument's type.", "\
|
|
Returns the number of bits (integer precision plus sign bit)
|
|
represented by the type for @var{@1@}.
|
|
|
|
@xref{BTest Intrinsic}, for how to test the value of a
|
|
bit in a variable or array.
|
|
|
|
@xref{IBSet Intrinsic}, for how to set a bit in a variable to 1.
|
|
|
|
@xref{IBClr Intrinsic}, for how to set a bit in a variable to 0.
|
|
|
|
")
|
|
|
|
DEFDOC (BTEST, "Test bit.", "\
|
|
Returns @code{.TRUE.} if bit @var{@2@} in @var{@1@} is
|
|
1, @code{.FALSE.} otherwise.
|
|
|
|
(Bit 0 is the low-order (rightmost) bit, adding the value
|
|
@ifinfo
|
|
2**0,
|
|
@end ifinfo
|
|
@iftex
|
|
@tex
|
|
$2^0$,
|
|
@end tex
|
|
@end iftex
|
|
or 1,
|
|
to the number if set to 1;
|
|
bit 1 is the next-higher-order bit, adding
|
|
@ifinfo
|
|
2**1,
|
|
@end ifinfo
|
|
@iftex
|
|
@tex
|
|
$2^1$,
|
|
@end tex
|
|
@end iftex
|
|
or 2;
|
|
bit 2 adds
|
|
@ifinfo
|
|
2**2,
|
|
@end ifinfo
|
|
@iftex
|
|
@tex
|
|
$2^2$,
|
|
@end tex
|
|
@end iftex
|
|
or 4; and so on.)
|
|
|
|
@xref{Bit_Size Intrinsic}, for how to obtain the number of bits
|
|
in a type.
|
|
The leftmost bit of @var{@1@} is @samp{BIT_SIZE(@var{@1@}-1)}.
|
|
")
|
|
|
|
DEFDOC (CMPLX, "Construct @code{COMPLEX(KIND=1)} value.", "\
|
|
If @var{@1@} is not type @code{COMPLEX},
|
|
constructs a value of type @code{COMPLEX(KIND=1)} from the
|
|
real and imaginary values specified by @var{@1@} and
|
|
@var{@2@}, respectively.
|
|
If @var{@2@} is omitted, @samp{0.} is assumed.
|
|
|
|
If @var{@1@} is type @code{COMPLEX},
|
|
converts it to type @code{COMPLEX(KIND=1)}.
|
|
|
|
@xref{Complex Intrinsic}, for information on easily constructing
|
|
a @code{COMPLEX} value of arbitrary precision from @code{REAL}
|
|
arguments.
|
|
")
|
|
|
|
DEFDOC (DCMPLX, "Construct @code{COMPLEX(KIND=2)} value.", "\
|
|
If @var{@1@} is not type @code{COMPLEX},
|
|
constructs a value of type @code{COMPLEX(KIND=2)} from the
|
|
real and imaginary values specified by @var{@1@} and
|
|
@var{@2@}, respectively.
|
|
If @var{@2@} is omitted, @samp{0D0} is assumed.
|
|
|
|
If @var{@1@} is type @code{COMPLEX},
|
|
converts it to type @code{COMPLEX(KIND=2)}.
|
|
|
|
Although this intrinsic is not standard Fortran,
|
|
it is a popular extension offered by many compilers
|
|
that support @code{DOUBLE COMPLEX}, since it offers
|
|
the easiest way to convert to @code{DOUBLE COMPLEX}
|
|
without using Fortran 90 features (such as the @samp{KIND=}
|
|
argument to the @code{CMPLX()} intrinsic).
|
|
|
|
(@samp{CMPLX(0D0, 0D0)} returns a single-precision
|
|
@code{COMPLEX} result, as required by standard FORTRAN 77.
|
|
That's why so many compilers provide @code{DCMPLX()}, since
|
|
@samp{DCMPLX(0D0, 0D0)} returns a @code{DOUBLE COMPLEX}
|
|
result.
|
|
Still, @code{DCMPLX()} converts even @code{REAL*16} arguments
|
|
to their @code{REAL*8} equivalents in most dialects of
|
|
Fortran, so neither it nor @code{CMPLX()} allow easy
|
|
construction of arbitrary-precision values without
|
|
potentially forcing a conversion involving extending or
|
|
reducing precision.
|
|
GNU Fortran provides such an intrinsic, called @code{COMPLEX()}.)
|
|
|
|
@xref{Complex Intrinsic}, for information on easily constructing
|
|
a @code{COMPLEX} value of arbitrary precision from @code{REAL}
|
|
arguments.
|
|
")
|
|
|
|
DEFDOC (CONJG, "Complex conjugate.", "\
|
|
Returns the complex conjugate:
|
|
|
|
@example
|
|
COMPLEX(REALPART(@var{@1@}), -IMAGPART(@var{@1@}))
|
|
@end example
|
|
")
|
|
|
|
DEFDOC (DCONJG, "Complex conjugate (archaic).", ARCHAIC (CONJG, Conjg))
|
|
|
|
DEFDOC (COS, "Cosine.", "\
|
|
Returns the cosine of @var{@1@}, an angle measured
|
|
in radians.
|
|
|
|
@xref{ACos Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (CCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
|
|
|
|
DEFDOC (DCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
|
|
|
|
DEFDOC (CDCOS, "Cosine (archaic).", ARCHAIC (COS, Cos))
|
|
|
|
DEFDOC (COSH, "Hyperbolic cosine.", "\
|
|
Returns the hyperbolic cosine of @var{@1@}.
|
|
")
|
|
|
|
DEFDOC (DCOSH, "Hyperbolic cosine (archaic).", ARCHAIC (COSH, CosH))
|
|
|
|
DEFDOC (SQRT, "Square root.", "\
|
|
Returns the square root of @var{@1@}, which must
|
|
not be negative.
|
|
|
|
To calculate and represent the square root of a negative
|
|
number, complex arithmetic must be used.
|
|
For example, @samp{SQRT(COMPLEX(@var{@1@}))}.
|
|
|
|
The inverse of this function is @samp{SQRT(@var{@1@}) * SQRT(@var{@1@})}.
|
|
")
|
|
|
|
DEFDOC (CSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
|
|
|
|
DEFDOC (DSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
|
|
|
|
DEFDOC (CDSQRT, "Square root (archaic).", ARCHAIC (SQRT, SqRt))
|
|
|
|
DEFDOC (DBLE, "Convert to double precision.", "\
|
|
Returns @var{@1@} converted to double precision
|
|
(@code{REAL(KIND=2)}).
|
|
If @var{@1@} is @code{COMPLEX}, the real part of
|
|
@var{@1@} is used for the conversion
|
|
and the imaginary part disregarded.
|
|
|
|
@xref{Sngl Intrinsic}, for the function that converts
|
|
to single precision.
|
|
|
|
@xref{Int Intrinsic}, for the function that converts
|
|
to @code{INTEGER}.
|
|
|
|
@xref{Complex Intrinsic}, for the function that converts
|
|
to @code{COMPLEX}.
|
|
")
|
|
|
|
DEFDOC (DIM, "Difference magnitude (non-negative subtract).", "\
|
|
Returns @samp{@var{@1@}-@var{@2@}} if @var{@1@} is greater than
|
|
@var{@2@}; otherwise returns zero.
|
|
")
|
|
|
|
DEFDOC (DDIM, "Difference magnitude (archaic).", ARCHAIC_2 (DIM, DiM))
|
|
DEFDOC (IDIM, "Difference magnitude (archaic).", ARCHAIC_2 (DIM, DiM))
|
|
|
|
DEFDOC (DPROD, "Double-precision product.", "\
|
|
Returns @samp{DBLE(@var{@1@})*DBLE(@var{@2@})}.
|
|
")
|
|
|
|
DEFDOC (EXP, "Exponential.", "\
|
|
Returns @samp{@var{e}**@var{@1@}}, where
|
|
@var{e} is approximately 2.7182818.
|
|
|
|
@xref{Log Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (CEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
|
|
|
|
DEFDOC (DEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
|
|
|
|
DEFDOC (CDEXP, "Exponential (archaic).", ARCHAIC (EXP, Exp))
|
|
|
|
DEFDOC (FLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real))
|
|
DEFDOC (DFLOAT, "Conversion (archaic).", ARCHAIC (REAL, Real))
|
|
|
|
DEFDOC (IFIX, "Conversion (archaic).", ARCHAIC (INT, Int))
|
|
|
|
DEFDOC (LONG, "Conversion to @code{INTEGER(KIND=1)} (archaic).", "\
|
|
Archaic form of @code{INT()} that is specific
|
|
to one type for @var{@1@}.
|
|
@xref{Int Intrinsic}.
|
|
|
|
The precise meaning of this intrinsic might change
|
|
in a future version of the GNU Fortran language,
|
|
as more is learned about how it is used.
|
|
")
|
|
|
|
DEFDOC (SHORT, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude truncated and its sign preserved, converted
|
|
to type @code{INTEGER(KIND=6)}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, its real part
|
|
is truncated and converted, and its imaginary part is disgregarded.
|
|
|
|
@xref{Int Intrinsic}.
|
|
|
|
The precise meaning of this intrinsic might change
|
|
in a future version of the GNU Fortran language,
|
|
as more is learned about how it is used.
|
|
")
|
|
|
|
DEFDOC (INT2, "Convert to @code{INTEGER(KIND=6)} value@99@truncated to whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude truncated and its sign preserved, converted
|
|
to type @code{INTEGER(KIND=6)}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, its real part
|
|
is truncated and converted, and its imaginary part is disgregarded.
|
|
|
|
@xref{Int Intrinsic}.
|
|
|
|
The precise meaning of this intrinsic might change
|
|
in a future version of the GNU Fortran language,
|
|
as more is learned about how it is used.
|
|
")
|
|
|
|
DEFDOC (INT8, "Convert to @code{INTEGER(KIND=2)} value@99@truncated to whole number.", "\
|
|
Returns @var{@1@} with the fractional portion of its
|
|
magnitude truncated and its sign preserved, converted
|
|
to type @code{INTEGER(KIND=2)}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, its real part
|
|
is truncated and converted, and its imaginary part is disgregarded.
|
|
|
|
@xref{Int Intrinsic}.
|
|
|
|
The precise meaning of this intrinsic might change
|
|
in a future version of the GNU Fortran language,
|
|
as more is learned about how it is used.
|
|
")
|
|
|
|
DEFDOC (LEN, "Length of character entity.", "\
|
|
Returns the length of @var{@1@}.
|
|
|
|
If @var{@1@} is an array, the length of an element
|
|
of @var{@1@} is returned.
|
|
|
|
Note that @var{@1@} need not be defined when this
|
|
intrinsic is invoked, since only the length, not
|
|
the content, of @var{@1@} is needed.
|
|
|
|
@xref{Bit_Size Intrinsic}, for the function that determines
|
|
the size of its argument in bits.
|
|
")
|
|
|
|
DEFDOC (TAN, "Tangent.", "\
|
|
Returns the tangent of @var{@1@}, an angle measured
|
|
in radians.
|
|
|
|
@xref{ATan Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (DTAN, "Tangent (archaic).", ARCHAIC (TAN, Tan))
|
|
|
|
DEFDOC (TANH, "Hyperbolic tangent.", "\
|
|
Returns the hyperbolic tangent of @var{@1@}.
|
|
")
|
|
|
|
DEFDOC (DTANH, "Hyperbolic tangent (archaic).", ARCHAIC (TANH, TanH))
|
|
|
|
DEFDOC (SNGL, "Convert (archaic).", ARCHAIC (REAL, Real))
|
|
|
|
DEFDOC (SIN, "Sine.", "\
|
|
Returns the sine of @var{@1@}, an angle measured
|
|
in radians.
|
|
|
|
@xref{ASin Intrinsic}, for the inverse of this function.
|
|
")
|
|
|
|
DEFDOC (CSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
|
|
|
|
DEFDOC (DSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
|
|
|
|
DEFDOC (CDSIN, "Sine (archaic).", ARCHAIC (SIN, Sin))
|
|
|
|
DEFDOC (SINH, "Hyperbolic sine.", "\
|
|
Returns the hyperbolic sine of @var{@1@}.
|
|
")
|
|
|
|
DEFDOC (DSINH, "Hyperbolic sine (archaic).", ARCHAIC (SINH, SinH))
|
|
|
|
DEFDOC (LSHIFT, "Left-shift bits.", "\
|
|
Returns @var{@1@} shifted to the left
|
|
@var{@2@} bits.
|
|
|
|
Although similar to the expression
|
|
@samp{@var{@1@}*(2**@var{@2@})}, there
|
|
are important differences.
|
|
For example, the sign of the result is
|
|
not necessarily the same as the sign of
|
|
@var{@1@}.
|
|
|
|
Currently this intrinsic is defined assuming
|
|
the underlying representation of @var{@1@}
|
|
is as a two's-complement integer.
|
|
It is unclear at this point whether that
|
|
definition will apply when a different
|
|
representation is involved.
|
|
|
|
@xref{LShift Intrinsic}, for the inverse of this function.
|
|
|
|
@xref{IShft Intrinsic}, for information
|
|
on a more widely available left-shifting
|
|
intrinsic that is also more precisely defined.
|
|
")
|
|
|
|
DEFDOC (RSHIFT, "Right-shift bits.", "\
|
|
Returns @var{@1@} shifted to the right
|
|
@var{@2@} bits.
|
|
|
|
Although similar to the expression
|
|
@samp{@var{@1@}/(2**@var{@2@})}, there
|
|
are important differences.
|
|
For example, the sign of the result is
|
|
undefined.
|
|
|
|
Currently this intrinsic is defined assuming
|
|
the underlying representation of @var{@1@}
|
|
is as a two's-complement integer.
|
|
It is unclear at this point whether that
|
|
definition will apply when a different
|
|
representation is involved.
|
|
|
|
@xref{RShift Intrinsic}, for the inverse of this function.
|
|
|
|
@xref{IShft Intrinsic}, for information
|
|
on a more widely available right-shifting
|
|
intrinsic that is also more precisely defined.
|
|
")
|
|
|
|
DEFDOC (LGE, "Lexically greater than or equal.", "\
|
|
Returns @samp{.TRUE.} if @samp{@var{@1@}.GE.@var{@2@}},
|
|
@samp{.FALSE.} otherwise.
|
|
@var{@1@} and @var{@2@} are interpreted as containing
|
|
ASCII character codes.
|
|
If either value contains a character not in the ASCII
|
|
character set, the result is processor dependent.
|
|
|
|
If the @var{@1@} and @var{@2@} are not the same length,
|
|
the shorter is compared as if spaces were appended to
|
|
it to form a value that has the same length as the longer.
|
|
|
|
The lexical comparison intrinsics @code{LGe}, @code{LGt},
|
|
@code{LLe}, and @code{LLt} differ from the corresponding
|
|
intrinsic operators @code{.GE.}, @code{.GT.},
|
|
@code{.LE.}, @code{.LT.}.
|
|
Because the ASCII collating sequence is assumed,
|
|
the following expressions always return @samp{.TRUE.}:
|
|
|
|
@smallexample
|
|
LGE ('0', ' ')
|
|
LGE ('A', '0')
|
|
LGE ('a', 'A')
|
|
@end smallexample
|
|
|
|
The following related expressions do @emph{not} always
|
|
return @samp{.TRUE.}, as they are not necessarily evaluated
|
|
assuming the arguments use ASCII encoding:
|
|
|
|
@smallexample
|
|
'0' .GE. ' '
|
|
'A' .GE. '0'
|
|
'a' .GE. 'A'
|
|
@end smallexample
|
|
|
|
The same difference exists
|
|
between @code{LGt} and @code{.GT.};
|
|
between @code{LLe} and @code{.LE.}; and
|
|
between @code{LLt} and @code{.LT.}.
|
|
")
|
|
|
|
DEFDOC (LGT, "Lexically greater than.", "\
|
|
Returns @samp{.TRUE.} if @samp{@var{@1@}.GT.@var{@2@}},
|
|
@samp{.FALSE.} otherwise.
|
|
@var{@1@} and @var{@2@} are interpreted as containing
|
|
ASCII character codes.
|
|
If either value contains a character not in the ASCII
|
|
character set, the result is processor dependent.
|
|
|
|
If the @var{@1@} and @var{@2@} 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.
|
|
|
|
@xref{LGe Intrinsic}, for information on the distinction
|
|
between the @code{@0@} intrinsic and the @code{.GT.}
|
|
operator.
|
|
")
|
|
|
|
DEFDOC (LLE, "Lexically less than or equal.", "\
|
|
Returns @samp{.TRUE.} if @samp{@var{@1@}.LE.@var{@2@}},
|
|
@samp{.FALSE.} otherwise.
|
|
@var{@1@} and @var{@2@} are interpreted as containing
|
|
ASCII character codes.
|
|
If either value contains a character not in the ASCII
|
|
character set, the result is processor dependent.
|
|
|
|
If the @var{@1@} and @var{@2@} 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.
|
|
|
|
@xref{LGe Intrinsic}, for information on the distinction
|
|
between the @code{@0@} intrinsic and the @code{.LE.}
|
|
operator.
|
|
")
|
|
|
|
DEFDOC (LLT, "Lexically less than.", "\
|
|
Returns @samp{.TRUE.} if @samp{@var{@1@}.LT.@var{@2@}},
|
|
@samp{.FALSE.} otherwise.
|
|
@var{@1@} and @var{@2@} are interpreted as containing
|
|
ASCII character codes.
|
|
If either value contains a character not in the ASCII
|
|
character set, the result is processor dependent.
|
|
|
|
If the @var{@1@} and @var{@2@} 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.
|
|
|
|
@xref{LGe Intrinsic}, for information on the distinction
|
|
between the @code{@0@} intrinsic and the @code{.LT.}
|
|
operator.
|
|
")
|
|
|
|
DEFDOC (SIGN, "Apply sign to magnitude.", "\
|
|
Returns @samp{ABS(@var{@1@})*@var{s}}, where
|
|
@var{s} is +1 if @samp{@var{@2@}.GE.0},
|
|
-1 otherwise.
|
|
|
|
@xref{Abs Intrinsic}, for the function that returns
|
|
the magnitude of a value.
|
|
")
|
|
|
|
DEFDOC (DSIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (SIGN, Sign))
|
|
DEFDOC (ISIGN, "Apply sign to magnitude (archaic).", ARCHAIC_2 (SIGN, Sign))
|
|
|
|
DEFDOC (REAL, "Convert value to type @code{REAL(KIND=1)}.", "\
|
|
Converts @var{@1@} to @code{REAL(KIND=1)}.
|
|
|
|
Use of @code{@0@()} with a @code{COMPLEX} argument
|
|
(other than @code{COMPLEX(KIND=1)}) is restricted to the following case:
|
|
|
|
@example
|
|
REAL(REAL(@1@))
|
|
@end example
|
|
|
|
@noindent
|
|
This expression converts the real part of @1@ to
|
|
@code{REAL(KIND=1)}.
|
|
|
|
@xref{RealPart Intrinsic}, for information on a GNU Fortran
|
|
intrinsic that extracts the real part of an arbitrary
|
|
@code{COMPLEX} value.
|
|
|
|
@xref{REAL() and AIMAG() of Complex}, for more information.
|
|
")
|
|
|
|
DEFDOC (DREAL, "Convert value to type @code{REAL(KIND=2)}.", "\
|
|
Converts @var{@1@} to @code{REAL(KIND=2)}.
|
|
|
|
If @var{@1@} is type @code{COMPLEX}, its real part
|
|
is converted (if necessary) to @code{REAL(KIND=2)},
|
|
and its imaginary part is disregarded.
|
|
|
|
Although this intrinsic is not standard Fortran,
|
|
it is a popular extension offered by many compilers
|
|
that support @code{DOUBLE COMPLEX}, since it offers
|
|
the easiest way to extract the real part of a @code{DOUBLE COMPLEX}
|
|
value without using the Fortran 90 @code{REAL()} intrinsic
|
|
in a way that produces a return value inconsistent with
|
|
the way many FORTRAN 77 compilers handle @code{REAL()} of
|
|
a @code{DOUBLE COMPLEX} value.
|
|
|
|
@xref{RealPart Intrinsic}, for information on a GNU Fortran
|
|
intrinsic that avoids these areas of confusion.
|
|
|
|
@xref{Dble Intrinsic}, for information on the standard FORTRAN 77
|
|
replacement for @code{DREAL()}.
|
|
|
|
@xref{REAL() and AIMAG() of Complex}, for more information on
|
|
this issue.
|
|
")
|
|
|
|
DEFDOC (IMAGPART, "Extract imaginary part of complex.", "\
|
|
The imaginary part of @var{@1@} is returned, without conversion.
|
|
|
|
@emph{Note:} The way to do this in standard Fortran 90
|
|
is @samp{AIMAG(@var{@1@})}.
|
|
However, when, for example, @var{@1@} is @code{DOUBLE COMPLEX},
|
|
@samp{AIMAG(@var{@1@})} means something different for some compilers
|
|
that are not true Fortran 90 compilers but offer some
|
|
extensions standardized by Fortran 90 (such as the
|
|
@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).
|
|
|
|
The advantage of @code{@0@()} is that, while not necessarily
|
|
more or less portable than @code{AIMAG()}, it is more likely to
|
|
cause a compiler that doesn't support it to produce a diagnostic
|
|
than generate incorrect code.
|
|
|
|
@xref{REAL() and AIMAG() of Complex}, for more information.
|
|
")
|
|
|
|
DEFDOC (COMPLEX, "Build complex value from real and@99@imaginary parts.", "\
|
|
Returns a @code{COMPLEX} value that has @samp{@1@} and @samp{@2@} as its
|
|
real and imaginary parts, respectively.
|
|
|
|
If @var{@1@} and @var{@2@} are the same type, and that type is not
|
|
@code{INTEGER}, no data conversion is performed, and the type of
|
|
the resulting value has the same kind value as the types
|
|
of @var{@1@} and @var{@2@}.
|
|
|
|
If @var{@1@} and @var{@2@} are not the same type, the usual type-promotion
|
|
rules are applied to both, converting either or both to the
|
|
appropriate @code{REAL} type.
|
|
The type of the resulting value has the same kind value as the
|
|
type to which both @var{@1@} and @var{@2@} were converted, in this case.
|
|
|
|
If @var{@1@} and @var{@2@} are both @code{INTEGER}, they are both converted
|
|
to @code{REAL(KIND=1)}, and the result of the @code{@0@()}
|
|
invocation is type @code{COMPLEX(KIND=1)}.
|
|
|
|
@emph{Note:} The way to do this in standard Fortran 90
|
|
is too hairy to describe here, but it is important to
|
|
note that @samp{CMPLX(D1,D2)} returns a @code{COMPLEX(KIND=1)}
|
|
result even if @samp{D1} and @samp{D2} are type @code{REAL(KIND=2)}.
|
|
Hence the availability of @code{COMPLEX()} in GNU Fortran.
|
|
")
|
|
|
|
DEFDOC (LOC, "Address of entity in core.", "\
|
|
The @code{LOC()} intrinsic works the
|
|
same way as the @code{%LOC()} construct.
|
|
@xref{%LOC(),,The @code{%LOC()} Construct}, for
|
|
more information.
|
|
")
|
|
|
|
DEFDOC (REALPART, "Extract real part of complex.", "\
|
|
The real part of @var{@1@} is returned, without conversion.
|
|
|
|
@emph{Note:} The way to do this in standard Fortran 90
|
|
is @samp{REAL(@var{@1@})}.
|
|
However, when, for example, @var{@1@} is @code{COMPLEX(KIND=2)},
|
|
@samp{REAL(@var{@1@})} means something different for some compilers
|
|
that are not true Fortran 90 compilers but offer some
|
|
extensions standardized by Fortran 90 (such as the
|
|
@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).
|
|
|
|
The advantage of @code{@0@()} is that, while not necessarily
|
|
more or less portable than @code{REAL()}, it is more likely to
|
|
cause a compiler that doesn't support it to produce a diagnostic
|
|
than generate incorrect code.
|
|
|
|
@xref{REAL() and AIMAG() of Complex}, for more information.
|
|
")
|
|
|
|
DEFDOC (GETARG, "Obtain command-line argument.", "\
|
|
Sets @var{@2@} to the @var{@1@}-th command-line argument (or to all
|
|
blanks if there are fewer than @var{@2@} command-line arguments);
|
|
@code{CALL @0@(0, @var{value})} sets @var{value} to the name of the
|
|
program (on systems that support this feature).
|
|
|
|
@xref{IArgC Intrinsic}, for information on how to get the number
|
|
of arguments.
|
|
")
|
|
|
|
DEFDOC (ABORT, "Abort the program.", "\
|
|
Prints a message and potentially causes a core dump via @code{abort(3)}.
|
|
")
|
|
|
|
DEFDOC (EXIT, "Terminate the program.", "\
|
|
Exit the program with status @var{@1@} after closing open Fortran
|
|
I/O units and otherwise behaving as @code{exit(2)}.
|
|
If @var{@1@} is omitted the canonical `success' value
|
|
will be returned to the system.
|
|
")
|
|
|
|
DEFDOC (IARGC, "Obtain count of command-line arguments.", "\
|
|
Returns the number of command-line arguments.
|
|
|
|
This count does not include the specification of the program
|
|
name itself.
|
|
")
|
|
|
|
DEFDOC (CTIME_func, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\
|
|
Converts @var{@1@}, a system time value, such as returned by
|
|
@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995},
|
|
and returns that string as the function value.
|
|
|
|
@xref{Time8 Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (CTIME_subr, "Convert time to Day Mon dd hh:mm:ss yyyy.", "\
|
|
Converts @var{@1@}, a system time value, such as returned by
|
|
@code{TIME8()}, to a string of the form @samp{Sat Aug 19 18:13:14 1995},
|
|
and returns that string in @var{@2@}.
|
|
|
|
@xref{Time8 Intrinsic}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (DATE, "Get current date as dd-Mon-yy.", "\
|
|
Returns @var{@1@} in the form @samp{@var{dd}-@var{mmm}-@var{yy}},
|
|
representing the numeric day of the month @var{dd}, a three-character
|
|
abbreviation of the month name @var{mmm} and the last two digits of
|
|
the year @var{yy}, e.g.@: @samp{25-Nov-96}.
|
|
|
|
@cindex Y2K compliance
|
|
@cindex Year 2000 compliance
|
|
This intrinsic is not recommended, due to the year 2000 approaching.
|
|
Therefore, programs making use of this intrinsic
|
|
might not be Year 2000 (Y2K) compliant.
|
|
@xref{CTime Intrinsic (subroutine)}, for information on obtaining more digits
|
|
for the current (or any) date.
|
|
")
|
|
|
|
DEFDOC (DTIME_func, "Get elapsed time since last time.", "\
|
|
Initially, return the number of seconds of runtime
|
|
since the start of the process's execution
|
|
as the function value,
|
|
and the user and system components of this in @samp{@var{@1@}(1)}
|
|
and @samp{@var{@1@}(2)} respectively.
|
|
The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
|
|
|
|
Subsequent invocations of @samp{@0@()} return values accumulated since the
|
|
previous invocation.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (DTIME_subr, "Get elapsed time since last time.", "\
|
|
Initially, return the number of seconds of runtime
|
|
since the start of the process's execution
|
|
in @var{@2@},
|
|
and the user and system components of this in @samp{@var{@1@}(1)}
|
|
and @samp{@var{@1@}(2)} respectively.
|
|
The value of @var{@2@} is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
|
|
|
|
Subsequent invocations of @samp{@0@()} set values based on accumulations
|
|
since the previous invocation.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (ETIME_func, "Get elapsed time for process.", "\
|
|
Return the number of seconds of runtime
|
|
since the start of the process's execution
|
|
as the function value,
|
|
and the user and system components of this in @samp{@var{@1@}(1)}
|
|
and @samp{@var{@1@}(2)} respectively.
|
|
The functions' value is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
")
|
|
|
|
DEFDOC (ETIME_subr, "Get elapsed time for process.", "\
|
|
Return the number of seconds of runtime
|
|
since the start of the process's execution
|
|
in @var{@2@},
|
|
and the user and system components of this in @samp{@var{@1@}(1)}
|
|
and @samp{@var{@1@}(2)} respectively.
|
|
The value of @var{@2@} is equal to @samp{@var{@1@}(1) + @var{@1@}(2)}.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (FDATE_func, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\
|
|
Returns the current date (using the same format as @code{CTIME()}).
|
|
|
|
Equivalent to:
|
|
|
|
@example
|
|
CTIME(TIME8())
|
|
@end example
|
|
|
|
@cindex Y10K compliance
|
|
@cindex Year 10000 compliance
|
|
@cindex wraparound, Y10K
|
|
@cindex limits, Y10K
|
|
Programs making use of this intrinsic
|
|
might not be Year 10000 (Y10K) compliant.
|
|
For example, the date might appear,
|
|
to such programs, to wrap around
|
|
(change from a larger value to a smaller one)
|
|
as of the Year 10000.
|
|
|
|
@xref{CTime Intrinsic (function)}.
|
|
")
|
|
|
|
DEFDOC (FDATE_subr, "Get current time as Day Mon dd hh:mm:ss yyyy.", "\
|
|
Returns the current date (using the same format as @code{CTIME()})
|
|
in @var{@1@}.
|
|
|
|
Equivalent to:
|
|
|
|
@example
|
|
CALL CTIME(@var{@1@}, TIME8())
|
|
@end example
|
|
|
|
@cindex Y10K compliance
|
|
@cindex Year 10000 compliance
|
|
@cindex wraparound, Y10K
|
|
@cindex limits, Y10K
|
|
Programs making use of this intrinsic
|
|
might not be Year 10000 (Y10K) compliant.
|
|
For example, the date might appear,
|
|
to such programs, to wrap around
|
|
(change from a larger value to a smaller one)
|
|
as of the Year 10000.
|
|
|
|
@xref{CTime Intrinsic (subroutine)}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (GMTIME, "Convert time to GMT time info.", "\
|
|
Given a system time value @var{@1@}, fills @var{@2@} with values
|
|
extracted from it appropriate to the GMT time zone using
|
|
@code{gmtime(3)}.
|
|
|
|
The array elements are 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 isn't available.
|
|
@end enumerate
|
|
")
|
|
|
|
DEFDOC (LTIME, "Convert time to local time info.", "\
|
|
Given a system time value @var{@1@}, fills @var{@2@} with values
|
|
extracted from it appropriate to the GMT time zone using
|
|
@code{localtime(3)}.
|
|
|
|
The array elements are 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 isn't available.
|
|
@end enumerate
|
|
")
|
|
|
|
DEFDOC (IDATE_unix, "Get local time info.", "\
|
|
Fills @var{@1@} with the numerical values at the current local time
|
|
of day, month (in the range 1--12), and year in elements 1, 2, and 3,
|
|
respectively.
|
|
The year has four significant digits.
|
|
|
|
@cindex Y10K compliance
|
|
@cindex Year 10000 compliance
|
|
@cindex wraparound, Y10K
|
|
@cindex limits, Y10K
|
|
Programs making use of this intrinsic
|
|
might not be Year 10000 (Y10K) compliant.
|
|
For example, the date might appear,
|
|
to such programs, to wrap around
|
|
(change from a larger value to a smaller one)
|
|
as of the Year 10000.
|
|
")
|
|
|
|
DEFDOC (IDATE_vxt, "Get local time info (VAX/VMS).", "\
|
|
Returns the numerical values of the current local time.
|
|
The month (in the range 1--12) is returned in @var{@1@},
|
|
the day (in the range 1--7) in @var{@2@},
|
|
and the year in @var{@3@} (in the range 0--99).
|
|
|
|
@cindex Y2K compliance
|
|
@cindex Year 2000 compliance
|
|
@cindex wraparound, Y2K
|
|
@cindex limits, Y2K
|
|
This intrinsic is not recommended, due to the year 2000 approaching.
|
|
Therefore, programs making use of this intrinsic
|
|
might not be Year 2000 (Y2K) compliant.
|
|
For example, the date might appear,
|
|
to such programs, to wrap around
|
|
(change from a larger value to a smaller one)
|
|
as of the Year 2000.
|
|
|
|
@xref{IDate Intrinsic (UNIX)}, for information on obtaining more digits
|
|
for the current date.
|
|
")
|
|
|
|
DEFDOC (ITIME, "Get local time of day.", "\
|
|
Returns the current local time hour, minutes, and seconds in elements
|
|
1, 2, and 3 of @var{@1@}, respectively.
|
|
")
|
|
|
|
DEFDOC (MCLOCK, "Get number of clock ticks for process.", "\
|
|
Returns the number of clock ticks since the start of the process.
|
|
Supported on systems with @code{clock(3)} (q.v.).
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
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.
|
|
|
|
@xref{MClock8 Intrinsic}, for information on a
|
|
similar intrinsic that might be portable to more
|
|
GNU Fortran implementations, though to fewer
|
|
Fortran compilers.
|
|
|
|
If the system does not support @code{clock(3)},
|
|
-1 is returned.
|
|
")
|
|
|
|
DEFDOC (MCLOCK8, "Get number of clock ticks for process.", "\
|
|
Returns the number of clock ticks since the start of the process.
|
|
Supported on systems with @code{clock(3)} (q.v.).
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
@emph{Warning:} this intrinsic does not increase the range
|
|
of the timing values over that returned by @code{clock(3)}.
|
|
On a system with a 32-bit @code{clock(3)},
|
|
@code{@0@} will return a 32-bit value,
|
|
even though converted to an @samp{INTEGER(KIND=2)} value.
|
|
That means overflows of the 32-bit value can still occur.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
|
|
No Fortran implementations other than GNU Fortran are
|
|
known to support this intrinsic at the time of this
|
|
writing.
|
|
@xref{MClock Intrinsic}, for information on a
|
|
similar intrinsic that might be portable to more Fortran
|
|
compilers, though to fewer GNU Fortran implementations.
|
|
|
|
If the system does not support @code{clock(3)},
|
|
-1 is returned.
|
|
")
|
|
|
|
DEFDOC (SECNDS, "Get local time offset since midnight.", "\
|
|
Returns the local time in seconds since midnight minus the value
|
|
@var{@1@}.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
This values returned by this intrinsic
|
|
become numerically less than previous values
|
|
(they wrap around) during a single run of the
|
|
compiler program, under normal circumstances
|
|
(such as running through the midnight hour).
|
|
")
|
|
|
|
DEFDOC (SECOND_func, "Get CPU time for process in seconds.", "\
|
|
Returns the process's runtime in seconds---the same value as the
|
|
UNIX function @code{etime} returns.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
")
|
|
|
|
DEFDOC (SECOND_subr, "Get CPU time for process@99@in seconds.", "\
|
|
Returns the process's runtime in seconds in @var{@1@}---the same value
|
|
as the UNIX function @code{etime} returns.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
|
|
This routine is known from Cray Fortran. @xref{CPU_Time Intrinsic},
|
|
for a standard equivalent.
|
|
")
|
|
|
|
DEFDOC (SYSTEM_CLOCK, "Get current system clock value.", "\
|
|
Returns in @var{@1@} the current value of the system clock; this is
|
|
the value returned by the UNIX function @code{times(2)}
|
|
in this implementation, but
|
|
isn't in general.
|
|
@var{@2@} is the number of clock ticks per second and
|
|
@var{@3@} is the maximum value this can take, which isn't very useful
|
|
in this implementation since it's just the maximum C @code{unsigned
|
|
int} value.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
")
|
|
|
|
DEFDOC (CPU_TIME, "Get current CPU time.", "\
|
|
Returns in @var{@1@} the current value of the system time.
|
|
This implementation of the Fortran 95 intrinsic is just an alias for
|
|
@code{second} @xref{Second Intrinsic (subroutine)}.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
On some systems, the underlying timings are represented
|
|
using types with sufficiently small limits that overflows
|
|
(wraparounds) are possible, such as 32-bit types.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
")
|
|
|
|
DEFDOC (TIME8, "Get current time as time value.", "\
|
|
Returns the current time encoded as a long 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}.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
@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{@0@} will return a 32-bit value,
|
|
even though converted to an @samp{INTEGER(KIND=2)} value.
|
|
That means overflows of the 32-bit value can still occur.
|
|
Therefore, the values returned by this intrinsic
|
|
might be, or become, negative,
|
|
or numerically less than previous values,
|
|
during a single run of the compiled program.
|
|
|
|
No Fortran implementations other than GNU Fortran are
|
|
known to support this intrinsic at the time of this
|
|
writing.
|
|
@xref{Time Intrinsic (UNIX)}, for information on a
|
|
similar intrinsic that might be portable to more Fortran
|
|
compilers, though to fewer GNU Fortran implementations.
|
|
")
|
|
|
|
DEFDOC (TIME_unix, "Get current time as time value.", "\
|
|
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}.
|
|
|
|
@cindex wraparound, timings
|
|
@cindex limits, timings
|
|
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.
|
|
|
|
@xref{Time8 Intrinsic}, for information on a
|
|
similar intrinsic that might be portable to more
|
|
GNU Fortran implementations, though to fewer
|
|
Fortran compilers.
|
|
")
|
|
|
|
#define BES(num,n,val) "\
|
|
Calculates the Bessel function of the " #num " kind of \
|
|
order " #n " of @var{@" #val "@}.\n\
|
|
See @code{bessel(3m)}, on whose implementation the \
|
|
function depends.\
|
|
"
|
|
|
|
DEFDOC (BESJ0, "Bessel function.", BES (first, 0, 1))
|
|
DEFDOC (BESJ1, "Bessel function.", BES (first, 1, 1))
|
|
DEFDOC (BESJN, "Bessel function.", BES (first, @var{N}, 2))
|
|
DEFDOC (BESY0, "Bessel function.", BES (second, 0, 1))
|
|
DEFDOC (BESY1, "Bessel function.", BES (second, 1, 1))
|
|
DEFDOC (BESYN, "Bessel function.", BES (second, @var{N}, 2))
|
|
DEFDOC (DBESJ0, "Bessel function (archaic).", ARCHAIC (BESJ0, BesJ0))
|
|
DEFDOC (DBESJ1, "Bessel function (archaic).", ARCHAIC (BESJ1, BesJ1))
|
|
DEFDOC (DBESJN, "Bessel function (archaic).", ARCHAIC_2nd (BESJN, BesJN))
|
|
DEFDOC (DBESY0, "Bessel function (archaic).", ARCHAIC (BESY0, BesY0))
|
|
DEFDOC (DBESY1, "Bessel function (archaic).", ARCHAIC (BESY1, BesY1))
|
|
DEFDOC (DBESYN, "Bessel function (archaic).", ARCHAIC_2nd (BESYN, BesYN))
|
|
|
|
DEFDOC (ERF, "Error function.", "\
|
|
Returns the error function of @var{@1@}.
|
|
See @code{erf(3m)}, which provides the implementation.
|
|
")
|
|
|
|
DEFDOC (ERFC, "Complementary error function.", "\
|
|
Returns the complementary error function of @var{@1@}:
|
|
@samp{ERFC(R) = 1 - ERF(R)} (except that the result might be more
|
|
accurate than explicitly evaluating that formulae would give).
|
|
See @code{erfc(3m)}, which provides the implementation.
|
|
")
|
|
|
|
DEFDOC (DERF, "Error function (archaic).", ARCHAIC (ERF, ErF))
|
|
DEFDOC (DERFC, "Complementary error function (archaic).", ARCHAIC (ERFC, ErFC))
|
|
|
|
DEFDOC (IRAND, "Random number.", "\
|
|
Returns a uniform quasi-random number up to a system-dependent limit.
|
|
If @var{@1@} is 0, the next number in sequence is returned; if
|
|
@var{@1@} is 1, the generator is restarted by calling the UNIX function
|
|
@samp{srand(0)}; if @var{@1@} has any other value,
|
|
it is used as a new seed with @code{srand()}.
|
|
|
|
@xref{SRand Intrinsic}.
|
|
|
|
@emph{Note:} As typically implemented (by the routine of the same
|
|
name in the C library), this random number generator is a very poor
|
|
one, though the BSD and GNU libraries provide a much better
|
|
implementation than the `traditional' one.
|
|
On a different system you almost certainly want to use something better.
|
|
")
|
|
|
|
DEFDOC (RAND, "Random number.", "\
|
|
Returns a uniform quasi-random number between 0 and 1.
|
|
If @var{@1@} is 0, the next number in sequence is returned; if
|
|
@var{@1@} is 1, the generator is restarted by calling @samp{srand(0)};
|
|
if @var{@1@} has any other value, it is used as a new seed with
|
|
@code{srand}.
|
|
|
|
@xref{SRand Intrinsic}.
|
|
|
|
@emph{Note:} As typically implemented (by the routine of the same
|
|
name in the C library), this random number generator is a very poor
|
|
one, though the BSD and GNU libraries provide a much better
|
|
implementation than the `traditional' one.
|
|
On a different system you
|
|
almost certainly want to use something better.
|
|
")
|
|
|
|
DEFDOC (SRAND, "Random seed.", "\
|
|
Reinitialises the generator with the seed in @var{@1@}.
|
|
@xref{IRand Intrinsic}.
|
|
@xref{Rand Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (ACCESS, "Check file accessibility.", "\
|
|
Checks file @var{@1@} for accessibility in the mode specified by @var{@2@} and
|
|
returns 0 if the file is accessible in that mode, otherwise an error
|
|
code if the file is inaccessible or @var{@2@} is invalid.
|
|
See @code{access(2)}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
@var{@2@} may be a concatenation of any of the following characters:
|
|
|
|
@table @samp
|
|
@item r
|
|
Read permission
|
|
|
|
@item w
|
|
Write permission
|
|
|
|
@item x
|
|
Execute permission
|
|
|
|
@item @kbd{SPC}
|
|
Existence
|
|
@end table
|
|
")
|
|
|
|
DEFDOC (CHDIR_subr, "Change directory.", "\
|
|
Sets the current working directory to be @var{@1@}.
|
|
If the @var{@2@} argument is supplied, it contains 0
|
|
on success or a non-zero error code otherwise upon return.
|
|
See @code{chdir(3)}.
|
|
|
|
@emph{Caution:} Using this routine during I/O to a unit connected with a
|
|
non-absolute file name can cause subsequent I/O on such a unit to fail
|
|
because the I/O library might reopen files by name.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@2@} argument.
|
|
")
|
|
|
|
DEFDOC (CHDIR_func, "Change directory.", "\
|
|
Sets the current working directory to be @var{@1@}.
|
|
Returns 0 on success or a non-zero error code.
|
|
See @code{chdir(3)}.
|
|
|
|
@emph{Caution:} Using this routine during I/O to a unit connected with a
|
|
non-absolute file name can cause subsequent I/O on such a unit to fail
|
|
because the I/O library might reopen files by name.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (CHMOD_func, "Change file modes.", "\
|
|
Changes the access mode of file @var{@1@} according to the
|
|
specification @var{@2@}, which is given in the format of
|
|
@code{chmod(1)}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
Currently, @var{@1@} must not contain the single quote
|
|
character.
|
|
|
|
Returns 0 on success or a non-zero error code otherwise.
|
|
|
|
Note that this currently works
|
|
by actually invoking @code{/bin/chmod} (or the @code{chmod} found when
|
|
the library was configured) and so might fail in some circumstances and
|
|
will, anyway, be slow.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (CHMOD_subr, "Change file modes.", "\
|
|
Changes the access mode of file @var{@1@} according to the
|
|
specification @var{@2@}, which is given in the format of
|
|
@code{chmod(1)}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
Currently, @var{@1@} must not contain the single quote
|
|
character.
|
|
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
|
|
Note that this currently works
|
|
by actually invoking @code{/bin/chmod} (or the @code{chmod} found when
|
|
the library was configured) and so might fail in some circumstances and
|
|
will, anyway, be slow.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (GETCWD_func, "Get current working directory.", "\
|
|
Places the current working directory in @var{@1@}.
|
|
Returns 0 on
|
|
success, otherwise a non-zero error code
|
|
(@code{ENOSYS} if the system does not provide @code{getcwd(3)}
|
|
or @code{getwd(3)}).
|
|
")
|
|
|
|
DEFDOC (GETCWD_subr, "Get current working directory.", "\
|
|
Places the current working directory in @var{@1@}.
|
|
If the @var{@2@} argument is supplied, it contains 0
|
|
success or a non-zero error code upon return
|
|
(@code{ENOSYS} if the system does not provide @code{getcwd(3)}
|
|
or @code{getwd(3)}).
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@2@} argument.
|
|
")
|
|
|
|
DEFDOC (FSTAT_func, "Get file information.", "\
|
|
Obtains data about the file open on Fortran I/O unit @var{@1@} and
|
|
places them in the array @var{@2@}.
|
|
The values in this array are
|
|
extracted from the @code{stat} structure as returned by
|
|
@code{fstat(2)} q.v., as follows:
|
|
|
|
@enumerate
|
|
@item
|
|
Device ID
|
|
|
|
@item
|
|
Inode number
|
|
|
|
@item
|
|
File mode
|
|
|
|
@item
|
|
Number of links
|
|
|
|
@item
|
|
Owner's uid
|
|
|
|
@item
|
|
Owner's gid
|
|
|
|
@item
|
|
ID of device containing directory entry for file
|
|
(0 if not available)
|
|
|
|
@item
|
|
File size (bytes)
|
|
|
|
@item
|
|
Last access time
|
|
|
|
@item
|
|
Last modification time
|
|
|
|
@item
|
|
Last file status change time
|
|
|
|
@item
|
|
Preferred I/O block size (-1 if not available)
|
|
|
|
@item
|
|
Number of blocks allocated (-1 if not available)
|
|
@end enumerate
|
|
|
|
Not all these elements are relevant on all systems.
|
|
If an element is not relevant, it is returned as 0.
|
|
|
|
Returns 0 on success or a non-zero error code.
|
|
")
|
|
|
|
DEFDOC (FSTAT_subr, "Get file information.", "\
|
|
Obtains data about the file open on Fortran I/O unit @var{@1@} and
|
|
places them in the array @var{@2@}.
|
|
The values in this array are
|
|
extracted from the @code{stat} structure as returned by
|
|
@code{fstat(2)} q.v., as follows:
|
|
|
|
@enumerate
|
|
@item
|
|
Device ID
|
|
|
|
@item
|
|
Inode number
|
|
|
|
@item
|
|
File mode
|
|
|
|
@item
|
|
Number of links
|
|
|
|
@item
|
|
Owner's uid
|
|
|
|
@item
|
|
Owner's gid
|
|
|
|
@item
|
|
ID of device containing directory entry for file
|
|
(0 if not available)
|
|
|
|
@item
|
|
File size (bytes)
|
|
|
|
@item
|
|
Last access time
|
|
|
|
@item
|
|
Last modification time
|
|
|
|
@item
|
|
Last file status change time
|
|
|
|
@item
|
|
Preferred I/O block size (-1 if not available)
|
|
|
|
@item
|
|
Number of blocks allocated (-1 if not available)
|
|
@end enumerate
|
|
|
|
Not all these elements are relevant on all systems.
|
|
If an element is not relevant, it is returned as 0.
|
|
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (LSTAT_func, "Get file information.", "\
|
|
Obtains data about the given file @var{@1@} and places them in the array
|
|
@var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
If @var{@1@} is a symbolic link it returns data on the
|
|
link itself, so the routine is available only on systems that support
|
|
symbolic links.
|
|
The values in this array are extracted from the
|
|
@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
|
|
|
|
@enumerate
|
|
@item
|
|
Device ID
|
|
|
|
@item
|
|
Inode number
|
|
|
|
@item
|
|
File mode
|
|
|
|
@item
|
|
Number of links
|
|
|
|
@item
|
|
Owner's uid
|
|
|
|
@item
|
|
Owner's gid
|
|
|
|
@item
|
|
ID of device containing directory entry for file
|
|
(0 if not available)
|
|
|
|
@item
|
|
File size (bytes)
|
|
|
|
@item
|
|
Last access time
|
|
|
|
@item
|
|
Last modification time
|
|
|
|
@item
|
|
Last file status change time
|
|
|
|
@item
|
|
Preferred I/O block size (-1 if not available)
|
|
|
|
@item
|
|
Number of blocks allocated (-1 if not available)
|
|
@end enumerate
|
|
|
|
Not all these elements are relevant on all systems.
|
|
If an element is not relevant, it is returned as 0.
|
|
|
|
Returns 0 on success or a non-zero error code
|
|
(@code{ENOSYS} if the system does not provide @code{lstat(2)}).
|
|
")
|
|
|
|
DEFDOC (LSTAT_subr, "Get file information.", "\
|
|
Obtains data about the given file @var{@1@} and places them in the array
|
|
@var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
If @var{@1@} is a symbolic link it returns data on the
|
|
link itself, so the routine is available only on systems that support
|
|
symbolic links.
|
|
The values in this array are extracted from the
|
|
@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
|
|
|
|
@enumerate
|
|
@item
|
|
Device ID
|
|
|
|
@item
|
|
Inode number
|
|
|
|
@item
|
|
File mode
|
|
|
|
@item
|
|
Number of links
|
|
|
|
@item
|
|
Owner's uid
|
|
|
|
@item
|
|
Owner's gid
|
|
|
|
@item
|
|
ID of device containing directory entry for file
|
|
(0 if not available)
|
|
|
|
@item
|
|
File size (bytes)
|
|
|
|
@item
|
|
Last access time
|
|
|
|
@item
|
|
Last modification time
|
|
|
|
@item
|
|
Last file status change time
|
|
|
|
@item
|
|
Preferred I/O block size (-1 if not available)
|
|
|
|
@item
|
|
Number of blocks allocated (-1 if not available)
|
|
@end enumerate
|
|
|
|
Not all these elements are relevant on all systems.
|
|
If an element is not relevant, it is returned as 0.
|
|
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return
|
|
(@code{ENOSYS} if the system does not provide @code{lstat(2)}).
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (STAT_func, "Get file information.", "\
|
|
Obtains data about the given file @var{@1@} and places them in the array
|
|
@var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
The values in this array are extracted from the
|
|
@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
|
|
|
|
@enumerate
|
|
@item
|
|
Device ID
|
|
|
|
@item
|
|
Inode number
|
|
|
|
@item
|
|
File mode
|
|
|
|
@item
|
|
Number of links
|
|
|
|
@item
|
|
Owner's uid
|
|
|
|
@item
|
|
Owner's gid
|
|
|
|
@item
|
|
ID of device containing directory entry for file
|
|
(0 if not available)
|
|
|
|
@item
|
|
File size (bytes)
|
|
|
|
@item
|
|
Last access time
|
|
|
|
@item
|
|
Last modification time
|
|
|
|
@item
|
|
Last file status change time
|
|
|
|
@item
|
|
Preferred I/O block size (-1 if not available)
|
|
|
|
@item
|
|
Number of blocks allocated (-1 if not available)
|
|
@end enumerate
|
|
|
|
Not all these elements are relevant on all systems.
|
|
If an element is not relevant, it is returned as 0.
|
|
|
|
Returns 0 on success or a non-zero error code.
|
|
")
|
|
|
|
DEFDOC (STAT_subr, "Get file information.", "\
|
|
Obtains data about the given file @var{@1@} and places them in the array
|
|
@var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
The values in this array are extracted from the
|
|
@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:
|
|
|
|
@enumerate
|
|
@item
|
|
Device ID
|
|
|
|
@item
|
|
Inode number
|
|
|
|
@item
|
|
File mode
|
|
|
|
@item
|
|
Number of links
|
|
|
|
@item
|
|
Owner's uid
|
|
|
|
@item
|
|
Owner's gid
|
|
|
|
@item
|
|
ID of device containing directory entry for file
|
|
(0 if not available)
|
|
|
|
@item
|
|
File size (bytes)
|
|
|
|
@item
|
|
Last access time
|
|
|
|
@item
|
|
Last modification time
|
|
|
|
@item
|
|
Last file status change time
|
|
|
|
@item
|
|
Preferred I/O block size (-1 if not available)
|
|
|
|
@item
|
|
Number of blocks allocated (-1 if not available)
|
|
@end enumerate
|
|
|
|
Not all these elements are relevant on all systems.
|
|
If an element is not relevant, it is returned as 0.
|
|
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (LINK_subr, "Make hard link in file system.", "\
|
|
Makes a (hard) link from file @var{@1@} to @var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the names in @var{@1@} and @var{@2@}---otherwise,
|
|
trailing blanks in @var{@1@} and @var{@2@} are ignored.
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
See @code{link(2)}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (LINK_func, "Make hard link in file system.", "\
|
|
Makes a (hard) link from file @var{@1@} to @var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the names in @var{@1@} and @var{@2@}---otherwise,
|
|
trailing blanks in @var{@1@} and @var{@2@} are ignored.
|
|
Returns 0 on success or a non-zero error code.
|
|
See @code{link(2)}.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (SYMLNK_subr, "Make symbolic link in file system.", "\
|
|
Makes a symbolic link from file @var{@1@} to @var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the names in @var{@1@} and @var{@2@}---otherwise,
|
|
trailing blanks in @var{@1@} and @var{@2@} are ignored.
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return
|
|
(@code{ENOSYS} if the system does not provide @code{symlink(2)}).
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (SYMLNK_func, "Make symbolic link in file system.", "\
|
|
Makes a symbolic link from file @var{@1@} to @var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the names in @var{@1@} and @var{@2@}---otherwise,
|
|
trailing blanks in @var{@1@} and @var{@2@} are ignored.
|
|
Returns 0 on success or a non-zero error code
|
|
(@code{ENOSYS} if the system does not provide @code{symlink(2)}).
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (RENAME_subr, "Rename file.", "\
|
|
Renames the file @var{@1@} to @var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the names in @var{@1@} and @var{@2@}---otherwise,
|
|
trailing blanks in @var{@1@} and @var{@2@} are ignored.
|
|
See @code{rename(2)}.
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (RENAME_func, "Rename file.", "\
|
|
Renames the file @var{@1@} to @var{@2@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the names in @var{@1@} and @var{@2@}---otherwise,
|
|
trailing blanks in @var{@1@} and @var{@2@} are ignored.
|
|
See @code{rename(2)}.
|
|
Returns 0 on success or a non-zero error code.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (UMASK_subr, "Set file creation permissions mask.", "\
|
|
Sets the file creation mask to @var{@1@} and returns the old value in
|
|
argument @var{@2@} if it is supplied.
|
|
See @code{umask(2)}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (UMASK_func, "Set file creation permissions mask.", "\
|
|
Sets the file creation mask to @var{@1@} and returns the old value.
|
|
See @code{umask(2)}.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (UNLINK_subr, "Unlink file.", "\
|
|
Unlink the file @var{@1@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
If the @var{@2@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
See @code{unlink(2)}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@2@} argument.
|
|
")
|
|
|
|
DEFDOC (UNLINK_func, "Unlink file.", "\
|
|
Unlink the file @var{@1@}.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
Returns 0 on success or a non-zero error code.
|
|
See @code{unlink(2)}.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (GERROR, "Get error message for last error.", "\
|
|
Returns the system error message corresponding to the last system
|
|
error (C @code{errno}).
|
|
")
|
|
|
|
DEFDOC (IERRNO, "Get error number for last error.", "\
|
|
Returns the last system error number (corresponding to the C
|
|
@code{errno}).
|
|
")
|
|
|
|
DEFDOC (PERROR, "Print error message for last error.", "\
|
|
Prints (on the C @code{stderr} stream) a newline-terminated error
|
|
message corresponding to the last system error.
|
|
This is prefixed by @var{@1@}, a colon and a space.
|
|
See @code{perror(3)}.
|
|
")
|
|
|
|
DEFDOC (GETGID, "Get process group id.", "\
|
|
Returns the group id for the current process.
|
|
")
|
|
|
|
DEFDOC (GETUID, "Get process user id.", "\
|
|
Returns the user id for the current process.
|
|
")
|
|
|
|
DEFDOC (GETPID, "Get process id.", "\
|
|
Returns the process id for the current process.
|
|
")
|
|
|
|
DEFDOC (GETENV, "Get environment variable.", "\
|
|
Sets @var{@2@} to the value of environment variable given by the
|
|
value of @var{@1@} (@code{$name} in shell terms) or to blanks if
|
|
@code{$name} has not been set.
|
|
A null character (@samp{CHAR(0)}) marks the end of
|
|
the name in @var{@1@}---otherwise,
|
|
trailing blanks in @var{@1@} are ignored.
|
|
")
|
|
|
|
DEFDOC (GETLOG, "Get login name.", "\
|
|
Returns the login name for the process in @var{@1@}.
|
|
|
|
@emph{Caution:} On some systems, the @code{getlogin(3)}
|
|
function, which this intrinsic calls at run time,
|
|
is either not implemented or returns a null pointer.
|
|
In the latter case, this intrinsic returns blanks
|
|
in @var{@1@}.
|
|
")
|
|
|
|
DEFDOC (HOSTNM_func, "Get host name.", "\
|
|
Fills @var{@1@} with the system's host name returned by
|
|
@code{gethostname(2)}, returning 0 on success or a non-zero error code
|
|
(@code{ENOSYS} if the system does not provide @code{gethostname(2)}).
|
|
|
|
On some systems (specifically SCO) it might be necessary to link the
|
|
``socket'' library if you call this routine.
|
|
Typically this means adding @samp{-lg2c -lsocket -lm}
|
|
to the @code{g77} command line when linking the program.
|
|
")
|
|
|
|
DEFDOC (HOSTNM_subr, "Get host name.", "\
|
|
Fills @var{@1@} with the system's host name returned by
|
|
@code{gethostname(2)}.
|
|
If the @var{@2@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return
|
|
(@code{ENOSYS} if the system does not provide @code{gethostname(2)}).
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@2@} argument.
|
|
|
|
On some systems (specifically SCO) it might be necessary to link the
|
|
``socket'' library if you call this routine.
|
|
Typically this means adding @samp{-lg2c -lsocket -lm}
|
|
to the @code{g77} command line when linking the program.
|
|
")
|
|
|
|
DEFDOC (FLUSH, "Flush buffered output.", "\
|
|
Flushes Fortran unit(s) currently open for output.
|
|
Without the optional argument, all such units are flushed,
|
|
otherwise just the unit specified by @var{@1@}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic
|
|
as a library procedure that might or might not support the
|
|
(optional) @var{@1@} argument.
|
|
")
|
|
|
|
DEFDOC (FNUM, "Get file descriptor from Fortran unit number.", "\
|
|
Returns the Unix file descriptor number corresponding to the open
|
|
Fortran I/O unit @var{@1@}.
|
|
This could be passed to an interface to C I/O routines.
|
|
")
|
|
|
|
#define IOWARN "
|
|
Stream I/O should not be mixed with normal record-oriented (formatted or
|
|
unformatted) I/O on the same unit; the results are unpredictable.
|
|
"
|
|
|
|
DEFDOC (FGET_func, "Read a character from unit 5 stream-wise.", "\
|
|
Reads a single character into @var{@1@} in stream mode from unit 5
|
|
(by-passing normal formatted input) using @code{getc(3)}.
|
|
Returns 0 on
|
|
success, @minus{}1 on end-of-file, and the error code from
|
|
@code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FGET_subr, "Read a character from unit 5 stream-wise.", "\
|
|
Reads a single character into @var{@1@} in stream mode from unit 5
|
|
(by-passing normal formatted output) using @code{getc(3)}.
|
|
Returns in
|
|
@var{@2@} 0 on success, @minus{}1 on end-of-file, and the error code
|
|
from @code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FGETC_func, "Read a character stream-wise.", "\
|
|
Reads a single character into @var{@2@} in stream mode from unit @var{@1@}
|
|
(by-passing normal formatted output) using @code{getc(3)}.
|
|
Returns 0 on
|
|
success, @minus{}1 on end-of-file, and the error code from
|
|
@code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FGETC_subr, "Read a character stream-wise.", "\
|
|
Reads a single character into @var{@2@} in stream mode from unit @var{@1@}
|
|
(by-passing normal formatted output) using @code{getc(3)}.
|
|
Returns in
|
|
@var{@3@} 0 on success, @minus{}1 on end-of-file, and the error code from
|
|
@code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FPUT_func, "Write a character to unit 6 stream-wise.", "\
|
|
Writes the single character @var{@1@} in stream mode to unit 6
|
|
(by-passing normal formatted output) using @code{getc(3)}.
|
|
Returns 0 on
|
|
success, the error code from @code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FPUT_subr, "Write a character to unit 6 stream-wise.", "\
|
|
Writes the single character @var{@1@} in stream mode to unit 6
|
|
(by-passing normal formatted output) using @code{putc(3)}.
|
|
Returns in
|
|
@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FPUTC_func, "Write a character stream-wise.", "\
|
|
Writes the single character @var{@2@} in stream mode to unit @var{@1@}
|
|
(by-passing normal formatted output) using @code{putc(3)}.
|
|
Returns 0 on
|
|
success, the error code from @code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FPUTC_subr, "Write a character stream-wise.", "\
|
|
Writes the single character @var{@1@} in stream mode to unit 6
|
|
(by-passing normal formatted output) using @code{putc(3)}.
|
|
Returns in
|
|
@var{@2@} 0 on success, the error code from @code{ferror(3)} otherwise.
|
|
" IOWARN)
|
|
|
|
DEFDOC (FSEEK, "Position file (low-level).", "\
|
|
Attempts to move Fortran unit @var{@1@} to the specified
|
|
@var{@2@}: absolute offset if @var{@3@}=0; relative to the
|
|
current offset if @var{@3@}=1; relative to the end of the file if
|
|
@var{@3@}=2.
|
|
It branches to label @var{@4@} if @var{@1@} is
|
|
not open or if the call otherwise fails.
|
|
")
|
|
|
|
DEFDOC (FTELL_func, "Get file position (low-level).", "\
|
|
Returns the current offset of Fortran unit @var{@1@}
|
|
(or @minus{}1 if @var{@1@} is not open).
|
|
")
|
|
|
|
DEFDOC (FTELL_subr, "Get file position (low-level).", "\
|
|
Sets @var{@2@} to the current offset of Fortran unit @var{@1@}
|
|
(or to @minus{}1 if @var{@1@} is not open).
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (ISATTY, "Is unit connected to a terminal?", "\
|
|
Returns @code{.TRUE.} if and only if the Fortran I/O unit
|
|
specified by @var{@1@} is connected
|
|
to a terminal device.
|
|
See @code{isatty(3)}.
|
|
")
|
|
|
|
DEFDOC (TTYNAM_func, "Get name of terminal device for unit.", "\
|
|
Returns the name of the terminal device open on logical unit
|
|
@var{@1@} or a blank string if @var{@1@} is not connected to a
|
|
terminal.
|
|
")
|
|
|
|
DEFDOC (TTYNAM_subr, "Get name of terminal device for unit.", "\
|
|
Sets @var{@2@} to the name of the terminal device open on logical unit
|
|
@var{@1@} or to a blank string if @var{@1@} is not connected to a
|
|
terminal.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine.
|
|
")
|
|
|
|
DEFDOC (SIGNAL_subr, "Muck with signal handling.", "\
|
|
If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
|
|
invoked with a single integer argument (of system-dependent length)
|
|
when signal @var{@1@} occurs.
|
|
If @var{@2@} is an integer, it can be
|
|
used to turn off handling of signal @var{@1@} or revert to its default
|
|
action.
|
|
See @code{signal(2)}.
|
|
|
|
Note that @var{@2@} will be called using C conventions,
|
|
so the value of its argument in Fortran terms
|
|
Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
|
|
|
|
The value returned by @code{signal(2)} is written to @var{@3@}, if
|
|
that argument is supplied.
|
|
Otherwise the return value is ignored.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
|
|
@emph{Warning:} Use of the @code{libf2c} run-time library function
|
|
@samp{signal_} directly
|
|
(such as via @samp{EXTERNAL SIGNAL})
|
|
requires use of the @code{%VAL()} construct
|
|
to pass an @code{INTEGER} value
|
|
(such as @samp{SIG_IGN} or @samp{SIG_DFL})
|
|
for the @var{@2@} argument.
|
|
|
|
However, while @samp{CALL SIGNAL(@var{signum}, %VAL(SIG_IGN))}
|
|
works when @samp{SIGNAL} is treated as an external procedure
|
|
(and resolves, at link time, to @code{libf2c}'s @samp{signal_} routine),
|
|
this construct is not valid when @samp{SIGNAL} is recognized
|
|
as the intrinsic of that name.
|
|
|
|
Therefore, for maximum portability and reliability,
|
|
code such references to the @samp{SIGNAL} facility as follows:
|
|
|
|
@smallexample
|
|
INTRINSIC SIGNAL
|
|
@dots{}
|
|
CALL SIGNAL(@var{signum}, SIG_IGN)
|
|
@end smallexample
|
|
|
|
@code{g77} will compile such a call correctly,
|
|
while other compilers will generally either do so as well
|
|
or reject the @samp{INTRINSIC SIGNAL} statement via a diagnostic,
|
|
allowing you to take appropriate action.
|
|
")
|
|
|
|
DEFDOC (SIGNAL_func, "Muck with signal handling.", "\
|
|
If @var{@2@} is a an @code{EXTERNAL} routine, arranges for it to be
|
|
invoked with a single integer argument (of system-dependent length)
|
|
when signal @var{@1@} occurs.
|
|
If @var{@2@} is an integer, it can be
|
|
used to turn off handling of signal @var{@1@} or revert to its default
|
|
action.
|
|
See @code{signal(2)}.
|
|
|
|
Note that @var{@2@} will be called using C conventions,
|
|
so the value of its argument in Fortran terms
|
|
is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.
|
|
|
|
The value returned by @code{signal(2)} is returned.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
|
|
@emph{Warning:} If the returned value is stored in
|
|
an @code{INTEGER(KIND=1)} (default @code{INTEGER}) argument,
|
|
truncation of the original return value occurs on some systems
|
|
(such as Alphas, which have 64-bit pointers but 32-bit default integers),
|
|
with no warning issued by @code{g77} under normal circumstances.
|
|
|
|
Therefore, the following code fragment might silently fail on
|
|
some systems:
|
|
|
|
@smallexample
|
|
INTEGER RTN
|
|
EXTERNAL MYHNDL
|
|
RTN = SIGNAL(@var{signum}, MYHNDL)
|
|
@dots{}
|
|
! Restore original handler:
|
|
RTN = SIGNAL(@var{signum}, RTN)
|
|
@end smallexample
|
|
|
|
The reason for the failure is that @samp{RTN} might not hold
|
|
all the information on the original handler for the signal,
|
|
thus restoring an invalid handler.
|
|
This bug could manifest itself as a spurious run-time failure
|
|
at an arbitrary point later during the program's execution,
|
|
for example.
|
|
|
|
@emph{Warning:} Use of the @code{libf2c} run-time library function
|
|
@samp{signal_} directly
|
|
(such as via @samp{EXTERNAL SIGNAL})
|
|
requires use of the @code{%VAL()} construct
|
|
to pass an @code{INTEGER} value
|
|
(such as @samp{SIG_IGN} or @samp{SIG_DFL})
|
|
for the @var{@2@} argument.
|
|
|
|
However, while @samp{RTN = SIGNAL(@var{signum}, %VAL(SIG_IGN))}
|
|
works when @samp{SIGNAL} is treated as an external procedure
|
|
(and resolves, at link time, to @code{libf2c}'s @samp{signal_} routine),
|
|
this construct is not valid when @samp{SIGNAL} is recognized
|
|
as the intrinsic of that name.
|
|
|
|
Therefore, for maximum portability and reliability,
|
|
code such references to the @samp{SIGNAL} facility as follows:
|
|
|
|
@smallexample
|
|
INTRINSIC SIGNAL
|
|
@dots{}
|
|
RTN = SIGNAL(@var{signum}, SIG_IGN)
|
|
@end smallexample
|
|
|
|
@code{g77} will compile such a call correctly,
|
|
while other compilers will generally either do so as well
|
|
or reject the @samp{INTRINSIC SIGNAL} statement via a diagnostic,
|
|
allowing you to take appropriate action.
|
|
")
|
|
|
|
DEFDOC (KILL_func, "Signal a process.", "\
|
|
Sends the signal specified by @var{@2@} to the process @var{@1@}.
|
|
Returns 0 on success or a non-zero error code.
|
|
See @code{kill(2)}.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
")
|
|
|
|
DEFDOC (KILL_subr, "Signal a process.", "\
|
|
Sends the signal specified by @var{@2@} to the process @var{@1@}.
|
|
If the @var{@3@} argument is supplied, it contains
|
|
0 on success or a non-zero error code upon return.
|
|
See @code{kill(2)}.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@3@} argument.
|
|
")
|
|
|
|
DEFDOC (LNBLNK, "Get last non-blank character in string.", "\
|
|
Returns the index of the last non-blank character in @var{@1@}.
|
|
@code{LNBLNK} and @code{LEN_TRIM} are equivalent.
|
|
")
|
|
|
|
DEFDOC (SLEEP, "Sleep for a specified time.", "\
|
|
Causes the process to pause for @var{@1@} seconds.
|
|
See @code{sleep(2)}.
|
|
")
|
|
|
|
DEFDOC (SYSTEM_subr, "Invoke shell (system) command.", "\
|
|
Passes the command @var{@1@} to a shell (see @code{system(3)}).
|
|
If argument @var{@2@} is present, it contains the value returned by
|
|
@code{system(3)}, presumably 0 if the shell command succeeded.
|
|
Note that which shell is used to invoke the command is system-dependent
|
|
and environment-dependent.
|
|
|
|
Some non-GNU implementations of Fortran provide this intrinsic as
|
|
only a function, not as a subroutine, or do not support the
|
|
(optional) @var{@2@} argument.
|
|
")
|
|
|
|
DEFDOC (SYSTEM_func, "Invoke shell (system) command.", "\
|
|
Passes the command @var{@1@} to a shell (see @code{system(3)}).
|
|
Returns the value returned by
|
|
@code{system(3)}, presumably 0 if the shell command succeeded.
|
|
Note that which shell is used to invoke the command is system-dependent
|
|
and environment-dependent.
|
|
|
|
Due to the side effects performed by this intrinsic, the function
|
|
form is not recommended.
|
|
However, the function form can be valid in cases where the
|
|
actual side effects performed by the call are unimportant to
|
|
the application.
|
|
|
|
For example, on a UNIX system, @samp{SAME = SYSTEM('cmp a b')}
|
|
does not perform any side effects likely to be important to the
|
|
program, so the programmer would not care if the actual system
|
|
call (and invocation of @code{cmp}) was optimized away in a situation
|
|
where the return value could be determined otherwise, or was not
|
|
actually needed (@samp{SAME} not actually referenced after the
|
|
sample assignment statement).
|
|
")
|
|
|
|
DEFDOC (TIME_vxt, "Get the time as a character value.", "\
|
|
Returns in @var{@1@} a character representation of the current time as
|
|
obtained from @code{ctime(3)}.
|
|
|
|
@cindex Y10K compliance
|
|
@cindex Year 10000 compliance
|
|
@cindex wraparound, Y10K
|
|
@cindex limits, Y10K
|
|
Programs making use of this intrinsic
|
|
might not be Year 10000 (Y10K) compliant.
|
|
For example, the date might appear,
|
|
to such programs, to wrap around
|
|
(change from a larger value to a smaller one)
|
|
as of the Year 10000.
|
|
|
|
@xref{FDate Intrinsic (subroutine)}, for an equivalent routine.
|
|
")
|
|
|
|
DEFDOC (IBCLR, "Clear a bit.", "\
|
|
Returns the value of @var{@1@} with bit @var{@2@} cleared (set to
|
|
zero).
|
|
@xref{BTest Intrinsic}, for information on bit positions.
|
|
")
|
|
|
|
DEFDOC (IBSET, "Set a bit.", "\
|
|
Returns the value of @var{@1@} with bit @var{@2@} set (to one).
|
|
@xref{BTest Intrinsic}, for information on bit positions.
|
|
")
|
|
|
|
DEFDOC (IBITS, "Extract a bit subfield of a variable.", "\
|
|
Extracts a subfield of length @var{@3@} from @var{@1@}, starting from
|
|
bit position @var{@2@} and extending left for @var{@3@} bits.
|
|
The result is right-justified and the remaining bits are zeroed.
|
|
The value
|
|
of @samp{@var{@2@}+@var{@3@}} must be less than or equal to the value
|
|
@samp{BIT_SIZE(@var{@1@})}.
|
|
@xref{Bit_Size Intrinsic}.
|
|
")
|
|
|
|
DEFDOC (ISHFT, "Logical bit shift.", "\
|
|
All bits representing @var{@1@} are shifted @var{@2@} places.
|
|
@samp{@var{@2@}.GT.0} indicates a left shift, @samp{@var{@2@}.EQ.0}
|
|
indicates no shift and @samp{@var{@2@}.LT.0} indicates a right shift.
|
|
If the absolute value of the shift count is greater than
|
|
@samp{BIT_SIZE(@var{@1@})}, the result is undefined.
|
|
Bits shifted out from the left end or the right end are lost.
|
|
Zeros are shifted in from the opposite end.
|
|
|
|
@xref{IShftC Intrinsic}, for the circular-shift equivalent.
|
|
")
|
|
|
|
DEFDOC (ISHFTC, "Circular bit shift.", "\
|
|
The rightmost @var{@3@} bits of the argument @var{@1@}
|
|
are shifted circularly @var{@2@}
|
|
places, i.e.@: the bits shifted out of one end are shifted into
|
|
the opposite end.
|
|
No bits are lost.
|
|
The unshifted bits of the result are the same as
|
|
the unshifted bits of @var{@1@}.
|
|
The absolute value of the argument @var{@2@}
|
|
must be less than or equal to @var{@3@}.
|
|
The value of @var{@3@} must be greater than or equal to one and less than
|
|
or equal to @samp{BIT_SIZE(@var{@1@})}.
|
|
|
|
@xref{IShft Intrinsic}, for the logical shift equivalent.
|
|
")
|
|
|
|
DEFDOC (MVBITS, "Moving a bit field.", "\
|
|
Moves @var{@3@} bits from positions @var{@2@} through
|
|
@samp{@var{@2@}+@var{@3@}-1} of @var{@1@} to positions @var{@5@} through
|
|
@samp{@var{@2@}+@var{@3@}-1} of @var{@4@}. The portion of argument
|
|
@var{@4@} not affected by the movement of bits is unchanged. Arguments
|
|
@var{@1@} and @var{@4@} are permitted to be the same numeric storage
|
|
unit. The values of @samp{@var{@2@}+@var{@3@}} and
|
|
@samp{@var{@5@}+@var{@3@}} must be less than or equal to
|
|
@samp{BIT_SIZE(@var{@1@})}.
|
|
")
|
|
|
|
DEFDOC (INDEX, "Locate a CHARACTER substring.", "\
|
|
Returns the position of the start of the first occurrence of string
|
|
@var{@2@} as a substring in @var{@1@}, counting from one.
|
|
If @var{@2@} doesn't occur in @var{@1@}, zero is returned.
|
|
")
|
|
|
|
DEFDOC (ALARM, "Execute a routine after a given delay.", "\
|
|
Causes external subroutine @var{@2@} to be executed after a delay of
|
|
@var{@1@} seconds by using @code{alarm(1)} to set up a signal and
|
|
@code{signal(2)} to catch it.
|
|
If @var{@3@} is supplied, it will be
|
|
returned with the number of seconds remaining until any previously
|
|
scheduled alarm was due to be delivered, or zero if there was no
|
|
previously scheduled alarm.
|
|
@xref{Signal Intrinsic (subroutine)}.
|
|
")
|
|
|
|
DEFDOC (DATE_AND_TIME, "Get the current date and time.", "\
|
|
Returns:
|
|
@table @var
|
|
@item @1@
|
|
The date in the form @var{ccyymmdd}: century, year, month and day;
|
|
@item @2@
|
|
The time in the form @samp{@var{hhmmss.ss}}: hours, minutes, seconds
|
|
and milliseconds;
|
|
@item @3@
|
|
The difference between local time and UTC (GMT) in the form @var{Shhmm}:
|
|
sign, hours and minutes, e.g.@: @samp{-0500} (winter in New York);
|
|
@item @4@
|
|
The year, month of the year, day of the month, time difference in
|
|
minutes from UTC, hour of the day, minutes of the hour, seconds
|
|
of the minute, and milliseconds
|
|
of the second in successive values of the array.
|
|
@end table
|
|
|
|
@cindex Y10K compliance
|
|
@cindex Year 10000 compliance
|
|
@cindex wraparound, Y10K
|
|
@cindex limits, Y10K
|
|
Programs making use of this intrinsic
|
|
might not be Year 10000 (Y10K) compliant.
|
|
For example, the date might appear,
|
|
to such programs, to wrap around
|
|
(change from a larger value to a smaller one)
|
|
as of the Year 10000.
|
|
|
|
On systems where a millisecond timer isn't available, the millisecond
|
|
value is returned as zero.
|
|
")
|