@menu
@ifset familyF2U
* Abort Intrinsic::     Abort the program.
@end ifset
@ifset familyF77
* Abs Intrinsic::       Absolute value.
@end ifset
@ifset familyF2U
* Access Intrinsic::    Check file accessibility.
@end ifset
@ifset familyASC
* AChar Intrinsic::     ASCII character from code.
@end ifset
@ifset familyF77
* ACos Intrinsic::      Arc cosine.
@end ifset
@ifset familyVXT
* ACosD Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF90
* AdjustL Intrinsic::   (Reserved for future use.)
* AdjustR Intrinsic::   (Reserved for future use.)
@end ifset
@ifset familyF77
* AImag Intrinsic::     Convert/extract imaginary part of complex.
@end ifset
@ifset familyVXT
* AIMax0 Intrinsic::    (Reserved for future use.)
* AIMin0 Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* AInt Intrinsic::      Truncate to whole number.
@end ifset
@ifset familyVXT
* AJMax0 Intrinsic::    (Reserved for future use.)
* AJMin0 Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF2U
* Alarm Intrinsic::
@end ifset
@ifset familyF90
* All Intrinsic::       (Reserved for future use.)
* Allocated Intrinsic:: (Reserved for future use.)
@end ifset
@ifset familyF77
* ALog Intrinsic::      Natural logarithm (archaic).
* ALog10 Intrinsic::    Natural logarithm (archaic).
* AMax0 Intrinsic::     Maximum value (archaic).
* AMax1 Intrinsic::     Maximum value (archaic).
* AMin0 Intrinsic::     Minimum value (archaic).
* AMin1 Intrinsic::     Minimum value (archaic).
* AMod Intrinsic::      Remainder (archaic).
@end ifset
@ifset familyF2C
* And Intrinsic::       Boolean AND.
@end ifset
@ifset familyF77
* ANInt Intrinsic::     Round to nearest whole number.
@end ifset
@ifset familyF90
* Any Intrinsic::       (Reserved for future use.)
@end ifset
@ifset familyF77
* ASin Intrinsic::      Arc sine.
@end ifset
@ifset familyVXT
* ASinD Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF90
* Associated Intrinsic:: (Reserved for future use.)
@end ifset
@ifset familyF77
* ATan Intrinsic::      Arc tangent.
* ATan2 Intrinsic::     Arc tangent.
@end ifset
@ifset familyVXT
* ATan2D Intrinsic::    (Reserved for future use.)
* ATanD Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF2U
* BesJ0 Intrinsic::     Bessel function.
* BesJ1 Intrinsic::     Bessel function.
* BesJN Intrinsic::     Bessel function.
* BesY0 Intrinsic::     Bessel function.
* BesY1 Intrinsic::     Bessel function.
* BesYN Intrinsic::     Bessel function.
@end ifset
@ifset familyVXT
* BITest Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF90
* Bit_Size Intrinsic::  Number of bits in argument's type.
@end ifset
@ifset familyVXT
* BJTest Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyMIL
* BTest Intrinsic::     Test bit.
@end ifset
@ifset familyF77
* CAbs Intrinsic::      Absolute value (archaic).
* CCos Intrinsic::      Cosine (archaic).
@end ifset
@ifset familyFVZ
* CDAbs Intrinsic::     Absolute value (archaic).
* CDCos Intrinsic::     Cosine (archaic).
* CDExp Intrinsic::     Exponential (archaic).
* CDLog Intrinsic::     Natural logarithm (archaic).
* CDSin Intrinsic::     Sine (archaic).
* CDSqRt Intrinsic::    Square root (archaic).
@end ifset
@ifset familyF90
* Ceiling Intrinsic::   (Reserved for future use.)
@end ifset
@ifset familyF77
* CExp Intrinsic::      Exponential (archaic).
* Char Intrinsic::      Character from code.
@end ifset
@ifset familyF2U
* ChDir Intrinsic (subroutine):: Change directory.
@end ifset
@ifset familyBADU77
* ChDir Intrinsic (function):: Change directory.
@end ifset
@ifset familyF2U
* ChMod Intrinsic (subroutine):: Change file modes.
@end ifset
@ifset familyBADU77
* ChMod Intrinsic (function):: Change file modes.
@end ifset
@ifset familyF77
* CLog Intrinsic::      Natural logarithm (archaic).
* Cmplx Intrinsic::     Construct @code{COMPLEX(KIND=1)} value.
@end ifset
@ifset familyGNU
* Complex Intrinsic::   Build complex value from real and
                         imaginary parts.
@end ifset
@ifset familyF77
* Conjg Intrinsic::     Complex conjugate.
* Cos Intrinsic::       Cosine.
@end ifset
@ifset familyVXT
* CosD Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF77
* CosH Intrinsic::      Hyperbolic cosine.
@end ifset
@ifset familyF90
* Count Intrinsic::     (Reserved for future use.)
* Cpu_Time Intrinsic::  Get current CPU time.
* CShift Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* CSin Intrinsic::      Sine (archaic).
* CSqRt Intrinsic::     Square root (archaic).
@end ifset
@ifset familyF2U
* CTime Intrinsic (subroutine):: Convert time to Day Mon dd hh:mm:ss yyyy.
* CTime Intrinsic (function):: Convert time to Day Mon dd hh:mm:ss yyyy.
@end ifset
@ifset familyF77
* DAbs Intrinsic::      Absolute value (archaic).
* DACos Intrinsic::     Arc cosine (archaic).
@end ifset
@ifset familyVXT
* DACosD Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* DASin Intrinsic::     Arc sine (archaic).
@end ifset
@ifset familyVXT
* DASinD Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* DATan Intrinsic::     Arc tangent (archaic).
* DATan2 Intrinsic::    Arc tangent (archaic).
@end ifset
@ifset familyVXT
* DATan2D Intrinsic::   (Reserved for future use.)
* DATanD Intrinsic::    (Reserved for future use.)
* Date Intrinsic::      Get current date as dd-Mon-yy.
@end ifset
@ifset familyF90
* Date_and_Time Intrinsic:: (Reserved for future use.)
@end ifset
@ifset familyF2U
* DbesJ0 Intrinsic::    Bessel function (archaic).
* DbesJ1 Intrinsic::    Bessel function (archaic).
* DbesJN Intrinsic::    Bessel function (archaic).
* DbesY0 Intrinsic::    Bessel function (archaic).
* DbesY1 Intrinsic::    Bessel function (archaic).
* DbesYN Intrinsic::    Bessel function (archaic).
@end ifset
@ifset familyF77
* Dble Intrinsic::      Convert to double precision.
@end ifset
@ifset familyVXT
* DbleQ Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyFVZ
* DCmplx Intrinsic::    Construct @code{COMPLEX(KIND=2)} value.
* DConjg Intrinsic::    Complex conjugate (archaic).
@end ifset
@ifset familyF77
* DCos Intrinsic::      Cosine (archaic).
@end ifset
@ifset familyVXT
* DCosD Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF77
* DCosH Intrinsic::     Hyperbolic cosine (archaic).
* DDiM Intrinsic::      Difference magnitude (archaic).
@end ifset
@ifset familyF2U
* DErF Intrinsic::      Error function (archaic).
* DErFC Intrinsic::     Complementary error function (archaic).
@end ifset
@ifset familyF77
* DExp Intrinsic::      Exponential (archaic).
@end ifset
@ifset familyFVZ
* DFloat Intrinsic::    Conversion (archaic).
@end ifset
@ifset familyVXT
* DFlotI Intrinsic::    (Reserved for future use.)
* DFlotJ Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF90
* Digits Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* DiM Intrinsic::       Difference magnitude (non-negative subtract).
@end ifset
@ifset familyFVZ
* DImag Intrinsic::     Convert/extract imaginary part of complex (archaic).
@end ifset
@ifset familyF77
* DInt Intrinsic::      Truncate to whole number (archaic).
* DLog Intrinsic::      Natural logarithm (archaic).
* DLog10 Intrinsic::    Natural logarithm (archaic).
* DMax1 Intrinsic::     Maximum value (archaic).
* DMin1 Intrinsic::     Minimum value (archaic).
* DMod Intrinsic::      Remainder (archaic).
* DNInt Intrinsic::     Round to nearest whole number (archaic).
@end ifset
@ifset familyF90
* Dot_Product Intrinsic:: (Reserved for future use.)
@end ifset
@ifset familyF77
* DProd Intrinsic::     Double-precision product.
@end ifset
@ifset familyVXT
* DReal Intrinsic::     Convert value to type @code{REAL(KIND=2)}.
@end ifset
@ifset familyF77
* DSign Intrinsic::     Apply sign to magnitude (archaic).
* DSin Intrinsic::      Sine (archaic).
@end ifset
@ifset familyVXT
* DSinD Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF77
* DSinH Intrinsic::     Hyperbolic sine (archaic).
* DSqRt Intrinsic::     Square root (archaic).
* DTan Intrinsic::      Tangent (archaic).
@end ifset
@ifset familyVXT
* DTanD Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF77
* DTanH Intrinsic::     Hyperbolic tangent (archaic).
@end ifset
@ifset familyF2U
* Dtime Intrinsic (subroutine):: Get elapsed time since last time.
@end ifset
@ifset familyBADU77
* Dtime Intrinsic (function):: Get elapsed time since last time.
@end ifset
@ifset familyF90
* EOShift Intrinsic::   (Reserved for future use.)
* Epsilon Intrinsic::   (Reserved for future use.)
@end ifset
@ifset familyF2U
* ErF Intrinsic::       Error function.
* ErFC Intrinsic::      Complementary error function.
* ETime Intrinsic (subroutine):: Get elapsed time for process.
* ETime Intrinsic (function):: Get elapsed time for process.
* Exit Intrinsic::      Terminate the program.
@end ifset
@ifset familyF77
* Exp Intrinsic::       Exponential.
@end ifset
@ifset familyF90
* Exponent Intrinsic::  (Reserved for future use.)
@end ifset
@ifset familyF2U
* Fdate Intrinsic (subroutine):: Get current time as Day Mon dd hh:mm:ss yyyy.
* Fdate Intrinsic (function):: Get current time as Day Mon dd hh:mm:ss yyyy.
* FGet Intrinsic (subroutine):: Read a character from unit 5 stream-wise.
@end ifset
@ifset familyBADU77
* FGet Intrinsic (function):: Read a character from unit 5 stream-wise.
@end ifset
@ifset familyF2U
* FGetC Intrinsic (subroutine):: Read a character stream-wise.
@end ifset
@ifset familyBADU77
* FGetC Intrinsic (function):: Read a character stream-wise.
@end ifset
@ifset familyF77
* Float Intrinsic::     Conversion (archaic).
@end ifset
@ifset familyVXT
* FloatI Intrinsic::    (Reserved for future use.)
* FloatJ Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF90
* Floor Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF2U
* Flush Intrinsic::     Flush buffered output.
* FNum Intrinsic::      Get file descriptor from Fortran unit number.
* FPut Intrinsic (subroutine):: Write a character to unit 6 stream-wise.
@end ifset
@ifset familyBADU77
* FPut Intrinsic (function):: Write a character to unit 6 stream-wise.
@end ifset
@ifset familyF2U
* FPutC Intrinsic (subroutine):: Write a character stream-wise.
@end ifset
@ifset familyBADU77
* FPutC Intrinsic (function):: Write a character stream-wise.
@end ifset
@ifset familyF90
* Fraction Intrinsic::  (Reserved for future use.)
@end ifset
@ifset familyF2U
* FSeek Intrinsic::     Position file (low-level).
* FStat Intrinsic (subroutine):: Get file information.
* FStat Intrinsic (function):: Get file information.
* FTell Intrinsic (subroutine):: Get file position (low-level).
* FTell Intrinsic (function):: Get file position (low-level).
* GError Intrinsic::    Get error message for last error.
* GetArg Intrinsic::    Obtain command-line argument.
* GetCWD Intrinsic (subroutine):: Get current working directory.
* GetCWD Intrinsic (function):: Get current working directory.
* GetEnv Intrinsic::    Get environment variable.
* GetGId Intrinsic::    Get process group id.
* GetLog Intrinsic::    Get login name.
* GetPId Intrinsic::    Get process id.
* GetUId Intrinsic::    Get process user id.
* GMTime Intrinsic::    Convert time to GMT time info.
* HostNm Intrinsic (subroutine):: Get host name.
* HostNm Intrinsic (function):: Get host name.
@end ifset
@ifset familyF90
* Huge Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF77
* IAbs Intrinsic::      Absolute value (archaic).
@end ifset
@ifset familyASC
* IAChar Intrinsic::    ASCII code for character.
@end ifset
@ifset familyMIL
* IAnd Intrinsic::      Boolean AND.
@end ifset
@ifset familyF2U
* IArgC Intrinsic::     Obtain count of command-line arguments.
@end ifset
@ifset familyMIL
* IBClr Intrinsic::     Clear a bit.
* IBits Intrinsic::     Extract a bit subfield of a variable.
* IBSet Intrinsic::     Set a bit.
@end ifset
@ifset familyF77
* IChar Intrinsic::     Code for character.
@end ifset
@ifset familyF2U
* IDate Intrinsic (UNIX):: Get local time info.
@end ifset
@ifset familyVXT
* IDate Intrinsic (VXT):: Get local time info (VAX/VMS).
@end ifset
@ifset familyF77
* IDiM Intrinsic::      Difference magnitude (archaic).
* IDInt Intrinsic::     Convert to @code{INTEGER} value truncated
                         to whole number (archaic).
* IDNInt Intrinsic::    Convert to @code{INTEGER} value rounded
                         to nearest whole number (archaic).
@end ifset
@ifset familyMIL
* IEOr Intrinsic::      Boolean XOR.
@end ifset
@ifset familyF2U
* IErrNo Intrinsic::    Get error number for last error.
@end ifset
@ifset familyF77
* IFix Intrinsic::      Conversion (archaic).
@end ifset
@ifset familyVXT
* IIAbs Intrinsic::     (Reserved for future use.)
* IIAnd Intrinsic::     (Reserved for future use.)
* IIBClr Intrinsic::    (Reserved for future use.)
* IIBits Intrinsic::    (Reserved for future use.)
* IIBSet Intrinsic::    (Reserved for future use.)
* IIDiM Intrinsic::     (Reserved for future use.)
* IIDInt Intrinsic::    (Reserved for future use.)
* IIDNnt Intrinsic::    (Reserved for future use.)
* IIEOr Intrinsic::     (Reserved for future use.)
* IIFix Intrinsic::     (Reserved for future use.)
* IInt Intrinsic::      (Reserved for future use.)
* IIOr Intrinsic::      (Reserved for future use.)
* IIQint Intrinsic::    (Reserved for future use.)
* IIQNnt Intrinsic::    (Reserved for future use.)
* IIShftC Intrinsic::   (Reserved for future use.)
* IISign Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF2C
* Imag Intrinsic::      Extract imaginary part of complex.
@end ifset
@ifset familyGNU
* ImagPart Intrinsic::  Extract imaginary part of complex.
@end ifset
@ifset familyVXT
* IMax0 Intrinsic::     (Reserved for future use.)
* IMax1 Intrinsic::     (Reserved for future use.)
* IMin0 Intrinsic::     (Reserved for future use.)
* IMin1 Intrinsic::     (Reserved for future use.)
* IMod Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF77
* Index Intrinsic::     Locate a CHARACTER substring.
@end ifset
@ifset familyVXT
* INInt Intrinsic::     (Reserved for future use.)
* INot Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF77
* Int Intrinsic::       Convert to @code{INTEGER} value truncated
                         to whole number.
@end ifset
@ifset familyGNU
* Int2 Intrinsic::      Convert to @code{INTEGER(KIND=6)} value
                         truncated to whole number.
* Int8 Intrinsic::      Convert to @code{INTEGER(KIND=2)} value
                         truncated to whole number.
@end ifset
@ifset familyMIL
* IOr Intrinsic::       Boolean OR.
@end ifset
@ifset familyF2U
* IRand Intrinsic::     Random number.
* IsaTty Intrinsic::    Is unit connected to a terminal?
@end ifset
@ifset familyMIL
* IShft Intrinsic::     Logical bit shift.
* IShftC Intrinsic::    Circular bit shift.
@end ifset
@ifset familyF77
* ISign Intrinsic::     Apply sign to magnitude (archaic).
@end ifset
@ifset familyF2U
* ITime Intrinsic::     Get local time of day.
@end ifset
@ifset familyVXT
* IZExt Intrinsic::     (Reserved for future use.)
* JIAbs Intrinsic::     (Reserved for future use.)
* JIAnd Intrinsic::     (Reserved for future use.)
* JIBClr Intrinsic::    (Reserved for future use.)
* JIBits Intrinsic::    (Reserved for future use.)
* JIBSet Intrinsic::    (Reserved for future use.)
* JIDiM Intrinsic::     (Reserved for future use.)
* JIDInt Intrinsic::    (Reserved for future use.)
* JIDNnt Intrinsic::    (Reserved for future use.)
* JIEOr Intrinsic::     (Reserved for future use.)
* JIFix Intrinsic::     (Reserved for future use.)
* JInt Intrinsic::      (Reserved for future use.)
* JIOr Intrinsic::      (Reserved for future use.)
* JIQint Intrinsic::    (Reserved for future use.)
* JIQNnt Intrinsic::    (Reserved for future use.)
* JIShft Intrinsic::    (Reserved for future use.)
* JIShftC Intrinsic::   (Reserved for future use.)
* JISign Intrinsic::    (Reserved for future use.)
* JMax0 Intrinsic::     (Reserved for future use.)
* JMax1 Intrinsic::     (Reserved for future use.)
* JMin0 Intrinsic::     (Reserved for future use.)
* JMin1 Intrinsic::     (Reserved for future use.)
* JMod Intrinsic::      (Reserved for future use.)
* JNInt Intrinsic::     (Reserved for future use.)
* JNot Intrinsic::      (Reserved for future use.)
* JZExt Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF2U
* Kill Intrinsic (subroutine):: Signal a process.
@end ifset
@ifset familyBADU77
* Kill Intrinsic (function):: Signal a process.
@end ifset
@ifset familyF90
* Kind Intrinsic::      (Reserved for future use.)
* LBound Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* Len Intrinsic::       Length of character entity.
@end ifset
@ifset familyF90
* Len_Trim Intrinsic::  Get last non-blank character in string.
@end ifset
@ifset familyF77
* LGe Intrinsic::       Lexically greater than or equal.
* LGt Intrinsic::       Lexically greater than.
@end ifset
@ifset familyF2U
* Link Intrinsic (subroutine):: Make hard link in file system.
@end ifset
@ifset familyBADU77
* Link Intrinsic (function):: Make hard link in file system.
@end ifset
@ifset familyF77
* LLe Intrinsic::       Lexically less than or equal.
* LLt Intrinsic::       Lexically less than.
@end ifset
@ifset familyF2U
* LnBlnk Intrinsic::    Get last non-blank character in string.
* Loc Intrinsic::       Address of entity in core.
@end ifset
@ifset familyF77
* Log Intrinsic::       Natural logarithm.
* Log10 Intrinsic::     Natural logarithm.
@end ifset
@ifset familyF90
* Logical Intrinsic::   (Reserved for future use.)
@end ifset
@ifset familyF2U
* Long Intrinsic::      Conversion to @code{INTEGER(KIND=1)} (archaic).
@end ifset
@ifset familyF2C
* LShift Intrinsic::    Left-shift bits.
@end ifset
@ifset familyF2U
* LStat Intrinsic (subroutine):: Get file information.
* LStat Intrinsic (function):: Get file information.
* LTime Intrinsic::     Convert time to local time info.
@end ifset
@ifset familyF90
* MatMul Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* Max Intrinsic::       Maximum value.
* Max0 Intrinsic::      Maximum value (archaic).
* Max1 Intrinsic::      Maximum value (archaic).
@end ifset
@ifset familyF90
* MaxExponent Intrinsic:: (Reserved for future use.)
* MaxLoc Intrinsic::    (Reserved for future use.)
* MaxVal Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF2U
* MClock Intrinsic::    Get number of clock ticks for process.
* MClock8 Intrinsic::   Get number of clock ticks for process.
@end ifset
@ifset familyF90
* Merge Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF77
* Min Intrinsic::       Minimum value.
* Min0 Intrinsic::      Minimum value (archaic).
* Min1 Intrinsic::      Minimum value (archaic).
@end ifset
@ifset familyF90
* MinExponent Intrinsic:: (Reserved for future use.)
* MinLoc Intrinsic::    (Reserved for future use.)
* MinVal Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* Mod Intrinsic::       Remainder.
@end ifset
@ifset familyF90
* Modulo Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyMIL
* MvBits Intrinsic::    Moving a bit field.
@end ifset
@ifset familyF90
* Nearest Intrinsic::   (Reserved for future use.)
@end ifset
@ifset familyF77
* NInt Intrinsic::      Convert to @code{INTEGER} value rounded
                         to nearest whole number.
@end ifset
@ifset familyMIL
* Not Intrinsic::       Boolean NOT.
@end ifset
@ifset familyF2C
* Or Intrinsic::        Boolean OR.
@end ifset
@ifset familyF90
* Pack Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF2U
* PError Intrinsic::    Print error message for last error.
@end ifset
@ifset familyF90
* Precision Intrinsic:: (Reserved for future use.)
* Present Intrinsic::   (Reserved for future use.)
* Product Intrinsic::   (Reserved for future use.)
@end ifset
@ifset familyVXT
* QAbs Intrinsic::      (Reserved for future use.)
* QACos Intrinsic::     (Reserved for future use.)
* QACosD Intrinsic::    (Reserved for future use.)
* QASin Intrinsic::     (Reserved for future use.)
* QASinD Intrinsic::    (Reserved for future use.)
* QATan Intrinsic::     (Reserved for future use.)
* QATan2 Intrinsic::    (Reserved for future use.)
* QATan2D Intrinsic::   (Reserved for future use.)
* QATanD Intrinsic::    (Reserved for future use.)
* QCos Intrinsic::      (Reserved for future use.)
* QCosD Intrinsic::     (Reserved for future use.)
* QCosH Intrinsic::     (Reserved for future use.)
* QDiM Intrinsic::      (Reserved for future use.)
* QExp Intrinsic::      (Reserved for future use.)
* QExt Intrinsic::      (Reserved for future use.)
* QExtD Intrinsic::     (Reserved for future use.)
* QFloat Intrinsic::    (Reserved for future use.)
* QInt Intrinsic::      (Reserved for future use.)
* QLog Intrinsic::      (Reserved for future use.)
* QLog10 Intrinsic::    (Reserved for future use.)
* QMax1 Intrinsic::     (Reserved for future use.)
* QMin1 Intrinsic::     (Reserved for future use.)
* QMod Intrinsic::      (Reserved for future use.)
* QNInt Intrinsic::     (Reserved for future use.)
* QSin Intrinsic::      (Reserved for future use.)
* QSinD Intrinsic::     (Reserved for future use.)
* QSinH Intrinsic::     (Reserved for future use.)
* QSqRt Intrinsic::     (Reserved for future use.)
* QTan Intrinsic::      (Reserved for future use.)
* QTanD Intrinsic::     (Reserved for future use.)
* QTanH Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF90
* Radix Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF2U
* Rand Intrinsic::      Random number.
@end ifset
@ifset familyF90
* Random_Number Intrinsic:: (Reserved for future use.)
* Random_Seed Intrinsic:: (Reserved for future use.)
* Range Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF77
* Real Intrinsic::      Convert value to type @code{REAL(KIND=1)}.
@end ifset
@ifset familyGNU
* RealPart Intrinsic::  Extract real part of complex.
@end ifset
@ifset familyF2U
* Rename Intrinsic (subroutine):: Rename file.
@end ifset
@ifset familyBADU77
* Rename Intrinsic (function):: Rename file.
@end ifset
@ifset familyF90
* Repeat Intrinsic::    (Reserved for future use.)
* Reshape Intrinsic::   (Reserved for future use.)
* RRSpacing Intrinsic:: (Reserved for future use.)
@end ifset
@ifset familyF2C
* RShift Intrinsic::    Right-shift bits.
@end ifset
@ifset familyF90
* Scale Intrinsic::     (Reserved for future use.)
* Scan Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyVXT
* Secnds Intrinsic::    Get local time offset since midnight.
@end ifset
@ifset familyF2U
* Second Intrinsic (function):: Get CPU time for process in seconds.
* Second Intrinsic (subroutine):: Get CPU time for process
                         in seconds.
@end ifset
@ifset familyF90
* Selected_Int_Kind Intrinsic:: (Reserved for future use.)
* Selected_Real_Kind Intrinsic:: (Reserved for future use.)
* Set_Exponent Intrinsic:: (Reserved for future use.)
* Shape Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF2U
* Short Intrinsic::     Convert to @code{INTEGER(KIND=6)} value
                         truncated to whole number.
@end ifset
@ifset familyF77
* Sign Intrinsic::      Apply sign to magnitude.
@end ifset
@ifset familyF2U
* Signal Intrinsic (subroutine):: Muck with signal handling.
@end ifset
@ifset familyBADU77
* Signal Intrinsic (function):: Muck with signal handling.
@end ifset
@ifset familyF77
* Sin Intrinsic::       Sine.
@end ifset
@ifset familyVXT
* SinD Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF77
* SinH Intrinsic::      Hyperbolic sine.
@end ifset
@ifset familyF2U
* Sleep Intrinsic::     Sleep for a specified time.
@end ifset
@ifset familyF77
* Sngl Intrinsic::      Convert (archaic).
@end ifset
@ifset familyVXT
* SnglQ Intrinsic::     (Reserved for future use.)
@end ifset
@ifset familyF90
* Spacing Intrinsic::   (Reserved for future use.)
* Spread Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF77
* SqRt Intrinsic::      Square root.
@end ifset
@ifset familyF2U
* SRand Intrinsic::     Random seed.
* Stat Intrinsic (subroutine):: Get file information.
* Stat Intrinsic (function):: Get file information.
@end ifset
@ifset familyF90
* Sum Intrinsic::       (Reserved for future use.)
@end ifset
@ifset familyF2U
* SymLnk Intrinsic (subroutine):: Make symbolic link in file system.
@end ifset
@ifset familyBADU77
* SymLnk Intrinsic (function):: Make symbolic link in file system.
@end ifset
@ifset familyF2U
* System Intrinsic (subroutine):: Invoke shell (system) command.
@end ifset
@ifset familyBADU77
* System Intrinsic (function):: Invoke shell (system) command.
@end ifset
@ifset familyF90
* System_Clock Intrinsic:: Get current system clock value.
@end ifset
@ifset familyF77
* Tan Intrinsic::       Tangent.
@end ifset
@ifset familyVXT
* TanD Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF77
* TanH Intrinsic::      Hyperbolic tangent.
@end ifset
@ifset familyF2U
* Time Intrinsic (UNIX):: Get current time as time value.
@end ifset
@ifset familyVXT
* Time Intrinsic (VXT):: Get the time as a character value.
@end ifset
@ifset familyF2U
* Time8 Intrinsic::     Get current time as time value.
@end ifset
@ifset familyF90
* Tiny Intrinsic::      (Reserved for future use.)
* Transfer Intrinsic::  (Reserved for future use.)
* Transpose Intrinsic:: (Reserved for future use.)
* Trim Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF2U
* TtyNam Intrinsic (subroutine):: Get name of terminal device for unit.
* TtyNam Intrinsic (function):: Get name of terminal device for unit.
@end ifset
@ifset familyF90
* UBound Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF2U
* UMask Intrinsic (subroutine):: Set file creation permissions mask.
@end ifset
@ifset familyBADU77
* UMask Intrinsic (function):: Set file creation permissions mask.
@end ifset
@ifset familyF2U
* Unlink Intrinsic (subroutine):: Unlink file.
@end ifset
@ifset familyBADU77
* Unlink Intrinsic (function):: Unlink file.
@end ifset
@ifset familyF90
* Unpack Intrinsic::    (Reserved for future use.)
* Verify Intrinsic::    (Reserved for future use.)
@end ifset
@ifset familyF2C
* XOr Intrinsic::       Boolean XOR.
* ZAbs Intrinsic::      Absolute value (archaic).
* ZCos Intrinsic::      Cosine (archaic).
* ZExp Intrinsic::      Exponential (archaic).
@end ifset
@ifset familyVXT
* ZExt Intrinsic::      (Reserved for future use.)
@end ifset
@ifset familyF2C
* ZLog Intrinsic::      Natural logarithm (archaic).
* ZSin Intrinsic::      Sine (archaic).
* ZSqRt Intrinsic::     Square root (archaic).
@end ifset
@end menu

@ifset familyF2U
@node Abort Intrinsic
@subsubsection Abort Intrinsic
@cindex Abort intrinsic
@cindex intrinsics, Abort

@noindent
@example
CALL Abort()
@end example

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Prints a message and potentially causes a core dump via @code{abort(3)}.

@end ifset
@ifset familyF77
@node Abs Intrinsic
@subsubsection Abs Intrinsic
@cindex Abs intrinsic
@cindex intrinsics, Abs

@noindent
@example
Abs(@var{A})
@end example

@noindent
Abs: @code{INTEGER} or @code{REAL} function.
The exact type depends on that of argument @var{A}---if @var{A} is
@code{COMPLEX}, this function's type is @code{REAL}
with the same @samp{KIND=} value as the type of @var{A}.
Otherwise, this function's type is the same as that of @var{A}.

@noindent
@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the absolute value of @var{A}.

If @var{A} is type @code{COMPLEX}, the absolute
value is computed as:

@example
SQRT(REALPART(@var{A})**2, IMAGPART(@var{A})**2)
@end example

@noindent
Otherwise, it is computed by negating the @var{A} if
it is negative, or returning @var{A}.

@xref{Sign Intrinsic}, for how to explicitly
compute the positive or negative form of the absolute
value of an expression.

@end ifset
@ifset familyF2U
@node Access Intrinsic
@subsubsection Access Intrinsic
@cindex Access intrinsic
@cindex intrinsics, Access

@noindent
@example
Access(@var{Name}, @var{Mode})
@end example

@noindent
Access: @code{INTEGER(KIND=1)} function.

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Mode}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Checks file @var{Name} for accessibility in the mode specified by @var{Mode} and
returns 0 if the file is accessible in that mode, otherwise an error
code if the file is inaccessible or @var{Mode} is invalid.
See @code{access(2)}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{Name}---otherwise,
trailing blanks in @var{Name} are ignored.
@var{Mode} 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

@end ifset
@ifset familyASC
@node AChar Intrinsic
@subsubsection AChar Intrinsic
@cindex AChar intrinsic
@cindex intrinsics, AChar

@noindent
@example
AChar(@var{I})
@end example

@noindent
AChar: @code{CHARACTER*1} function.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{f90}.

@noindent
Description:

Returns the ASCII character corresponding to the
code specified by @var{I}.

@xref{IAChar Intrinsic}, for the inverse of this function.

@xref{Char Intrinsic}, for the function corresponding
to the system's native character set.

@end ifset
@ifset familyF77
@node ACos Intrinsic
@subsubsection ACos Intrinsic
@cindex ACos intrinsic
@cindex intrinsics, ACos

@noindent
@example
ACos(@var{X})
@end example

@noindent
ACos: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the arc-cosine (inverse cosine) of @var{X}
in radians.

@xref{Cos Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyVXT
@node ACosD Intrinsic
@subsubsection ACosD Intrinsic
@cindex ACosD intrinsic
@cindex intrinsics, ACosD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL ACosD} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node AdjustL Intrinsic
@subsubsection AdjustL Intrinsic
@cindex AdjustL intrinsic
@cindex intrinsics, AdjustL

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL AdjustL} to use this name for an
external procedure.

@node AdjustR Intrinsic
@subsubsection AdjustR Intrinsic
@cindex AdjustR intrinsic
@cindex intrinsics, AdjustR

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL AdjustR} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node AImag Intrinsic
@subsubsection AImag Intrinsic
@cindex AImag intrinsic
@cindex intrinsics, AImag

@noindent
@example
AImag(@var{Z})
@end example

@noindent
AImag: @code{REAL} function.
This intrinsic is valid when argument @var{Z} is
@code{COMPLEX(KIND=1)}.
When @var{Z} is any other @code{COMPLEX} type,
this intrinsic is valid only when used as the argument to
@code{REAL()}, as explained below.

@noindent
@var{Z}: @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the (possibly converted) imaginary part of @var{Z}.

Use of @code{AIMAG()} with an argument of a type
other than @code{COMPLEX(KIND=1)} is restricted to the following case:

@example
REAL(AIMAG(Z))
@end example

@noindent
This expression converts the imaginary part of Z to
@code{REAL(KIND=1)}.

@xref{REAL() and AIMAG() of Complex}, for more information.

@end ifset
@ifset familyVXT
@node AIMax0 Intrinsic
@subsubsection AIMax0 Intrinsic
@cindex AIMax0 intrinsic
@cindex intrinsics, AIMax0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL AIMax0} to use this name for an
external procedure.

@node AIMin0 Intrinsic
@subsubsection AIMin0 Intrinsic
@cindex AIMin0 intrinsic
@cindex intrinsics, AIMin0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL AIMin0} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node AInt Intrinsic
@subsubsection AInt Intrinsic
@cindex AInt intrinsic
@cindex intrinsics, AInt

@noindent
@example
AInt(@var{A})
@end example

@noindent
AInt: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{A}.

@noindent
@var{A}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @var{A} 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}.

@end ifset
@ifset familyVXT
@node AJMax0 Intrinsic
@subsubsection AJMax0 Intrinsic
@cindex AJMax0 intrinsic
@cindex intrinsics, AJMax0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL AJMax0} to use this name for an
external procedure.

@node AJMin0 Intrinsic
@subsubsection AJMin0 Intrinsic
@cindex AJMin0 intrinsic
@cindex intrinsics, AJMin0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL AJMin0} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Alarm Intrinsic
@subsubsection Alarm Intrinsic
@cindex Alarm intrinsic
@cindex intrinsics, Alarm

@noindent
@example
CALL Alarm(@var{Seconds}, @var{Handler}, @var{Status})
@end example

@noindent
@var{Seconds}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Handler}: Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})
or dummy/global @code{INTEGER(KIND=1)} scalar.

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@end ifset
@ifset familyF90
@node All Intrinsic
@subsubsection All Intrinsic
@cindex All intrinsic
@cindex intrinsics, All

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL All} to use this name for an
external procedure.

@node Allocated Intrinsic
@subsubsection Allocated Intrinsic
@cindex Allocated intrinsic
@cindex intrinsics, Allocated

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Allocated} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node ALog Intrinsic
@subsubsection ALog Intrinsic
@cindex ALog intrinsic
@cindex intrinsics, ALog

@noindent
@example
ALog(@var{X})
@end example

@noindent
ALog: @code{REAL(KIND=1)} function.

@noindent
@var{X}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{LOG()} that is specific
to one type for @var{X}.
@xref{Log Intrinsic}.

@node ALog10 Intrinsic
@subsubsection ALog10 Intrinsic
@cindex ALog10 intrinsic
@cindex intrinsics, ALog10

@noindent
@example
ALog10(@var{X})
@end example

@noindent
ALog10: @code{REAL(KIND=1)} function.

@noindent
@var{X}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{LOG10()} that is specific
to one type for @var{X}.
@xref{Log10 Intrinsic}.

@node AMax0 Intrinsic
@subsubsection AMax0 Intrinsic
@cindex AMax0 intrinsic
@cindex intrinsics, AMax0

@noindent
@example
AMax0(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
AMax0: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MAX()} that is specific
to one type for @var{A} and a different return type.
@xref{Max Intrinsic}.

@node AMax1 Intrinsic
@subsubsection AMax1 Intrinsic
@cindex AMax1 intrinsic
@cindex intrinsics, AMax1

@noindent
@example
AMax1(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
AMax1: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MAX()} that is specific
to one type for @var{A}.
@xref{Max Intrinsic}.

@node AMin0 Intrinsic
@subsubsection AMin0 Intrinsic
@cindex AMin0 intrinsic
@cindex intrinsics, AMin0

@noindent
@example
AMin0(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
AMin0: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MIN()} that is specific
to one type for @var{A} and a different return type.
@xref{Min Intrinsic}.

@node AMin1 Intrinsic
@subsubsection AMin1 Intrinsic
@cindex AMin1 intrinsic
@cindex intrinsics, AMin1

@noindent
@example
AMin1(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
AMin1: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MIN()} that is specific
to one type for @var{A}.
@xref{Min Intrinsic}.

@node AMod Intrinsic
@subsubsection AMod Intrinsic
@cindex AMod intrinsic
@cindex intrinsics, AMod

@noindent
@example
AMod(@var{A}, @var{P})
@end example

@noindent
AMod: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
@var{P}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MOD()} that is specific
to one type for @var{A}.
@xref{Mod Intrinsic}.

@end ifset
@ifset familyF2C
@node And Intrinsic
@subsubsection And Intrinsic
@cindex And intrinsic
@cindex intrinsics, And

@noindent
@example
And(@var{I}, @var{J})
@end example

@noindent
And: @code{INTEGER} or @code{LOGICAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{I}: @code{INTEGER} or @code{LOGICAL}; scalar; INTENT(IN).

@noindent
@var{J}: @code{INTEGER} or @code{LOGICAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Returns value resulting from boolean AND of
pair of bits in each of @var{I} and @var{J}.

@end ifset
@ifset familyF77
@node ANInt Intrinsic
@subsubsection ANInt Intrinsic
@cindex ANInt intrinsic
@cindex intrinsics, ANInt

@noindent
@example
ANInt(@var{A})
@end example

@noindent
ANInt: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{A}.

@noindent
@var{A}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @var{A} 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}.

@end ifset
@ifset familyF90
@node Any Intrinsic
@subsubsection Any Intrinsic
@cindex Any intrinsic
@cindex intrinsics, Any

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Any} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node ASin Intrinsic
@subsubsection ASin Intrinsic
@cindex ASin intrinsic
@cindex intrinsics, ASin

@noindent
@example
ASin(@var{X})
@end example

@noindent
ASin: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the arc-sine (inverse sine) of @var{X}
in radians.

@xref{Sin Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyVXT
@node ASinD Intrinsic
@subsubsection ASinD Intrinsic
@cindex ASinD intrinsic
@cindex intrinsics, ASinD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL ASinD} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node Associated Intrinsic
@subsubsection Associated Intrinsic
@cindex Associated intrinsic
@cindex intrinsics, Associated

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Associated} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node ATan Intrinsic
@subsubsection ATan Intrinsic
@cindex ATan intrinsic
@cindex intrinsics, ATan

@noindent
@example
ATan(@var{X})
@end example

@noindent
ATan: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the arc-tangent (inverse tangent) of @var{X}
in radians.

@xref{Tan Intrinsic}, for the inverse of this function.

@node ATan2 Intrinsic
@subsubsection ATan2 Intrinsic
@cindex ATan2 intrinsic
@cindex intrinsics, ATan2

@noindent
@example
ATan2(@var{Y}, @var{X})
@end example

@noindent
ATan2: @code{REAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{Y}: @code{REAL}; scalar; INTENT(IN).

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the arc-tangent (inverse tangent) of the complex
number (@var{Y}, @var{X}) in radians.

@xref{Tan Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyVXT
@node ATan2D Intrinsic
@subsubsection ATan2D Intrinsic
@cindex ATan2D intrinsic
@cindex intrinsics, ATan2D

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL ATan2D} to use this name for an
external procedure.

@node ATanD Intrinsic
@subsubsection ATanD Intrinsic
@cindex ATanD intrinsic
@cindex intrinsics, ATanD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL ATanD} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node BesJ0 Intrinsic
@subsubsection BesJ0 Intrinsic
@cindex BesJ0 intrinsic
@cindex intrinsics, BesJ0

@noindent
@example
BesJ0(@var{X})
@end example

@noindent
BesJ0: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Calculates the Bessel function of the first kind of order 0 of @var{X}.
See @code{bessel(3m)}, on whose implementation the function depends.
@node BesJ1 Intrinsic
@subsubsection BesJ1 Intrinsic
@cindex BesJ1 intrinsic
@cindex intrinsics, BesJ1

@noindent
@example
BesJ1(@var{X})
@end example

@noindent
BesJ1: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Calculates the Bessel function of the first kind of order 1 of @var{X}.
See @code{bessel(3m)}, on whose implementation the function depends.
@node BesJN Intrinsic
@subsubsection BesJN Intrinsic
@cindex BesJN intrinsic
@cindex intrinsics, BesJN

@noindent
@example
BesJN(@var{N}, @var{X})
@end example

@noindent
BesJN: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{N}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Calculates the Bessel function of the first kind of order @var{N} of @var{X}.
See @code{bessel(3m)}, on whose implementation the function depends.
@node BesY0 Intrinsic
@subsubsection BesY0 Intrinsic
@cindex BesY0 intrinsic
@cindex intrinsics, BesY0

@noindent
@example
BesY0(@var{X})
@end example

@noindent
BesY0: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Calculates the Bessel function of the second kind of order 0 of @var{X}.
See @code{bessel(3m)}, on whose implementation the function depends.
@node BesY1 Intrinsic
@subsubsection BesY1 Intrinsic
@cindex BesY1 intrinsic
@cindex intrinsics, BesY1

@noindent
@example
BesY1(@var{X})
@end example

@noindent
BesY1: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Calculates the Bessel function of the second kind of order 1 of @var{X}.
See @code{bessel(3m)}, on whose implementation the function depends.
@node BesYN Intrinsic
@subsubsection BesYN Intrinsic
@cindex BesYN intrinsic
@cindex intrinsics, BesYN

@noindent
@example
BesYN(@var{N}, @var{X})
@end example

@noindent
BesYN: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{N}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Calculates the Bessel function of the second kind of order @var{N} of @var{X}.
See @code{bessel(3m)}, on whose implementation the function depends.
@end ifset
@ifset familyVXT
@node BITest Intrinsic
@subsubsection BITest Intrinsic
@cindex BITest intrinsic
@cindex intrinsics, BITest

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL BITest} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node Bit_Size Intrinsic
@subsubsection Bit_Size Intrinsic
@cindex Bit_Size intrinsic
@cindex intrinsics, Bit_Size

@noindent
@example
Bit_Size(@var{I})
@end example

@noindent
Bit_Size: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar.

@noindent
Intrinsic groups: @code{f90}.

@noindent
Description:

Returns the number of bits (integer precision plus sign bit)
represented by the type for @var{I}.

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


@end ifset
@ifset familyVXT
@node BJTest Intrinsic
@subsubsection BJTest Intrinsic
@cindex BJTest intrinsic
@cindex intrinsics, BJTest

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL BJTest} to use this name for an
external procedure.

@end ifset
@ifset familyMIL
@node BTest Intrinsic
@subsubsection BTest Intrinsic
@cindex BTest intrinsic
@cindex intrinsics, BTest

@noindent
@example
BTest(@var{I}, @var{Pos})
@end example

@noindent
BTest: @code{LOGICAL(KIND=1)} function.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Pos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Returns @code{.TRUE.} if bit @var{Pos} in @var{I} 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{I} is @samp{BIT_SIZE(@var{I}-1}.

@end ifset
@ifset familyF77
@node CAbs Intrinsic
@subsubsection CAbs Intrinsic
@cindex CAbs intrinsic
@cindex intrinsics, CAbs

@noindent
@example
CAbs(@var{A})
@end example

@noindent
CAbs: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{COMPLEX(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ABS()} that is specific
to one type for @var{A}.
@xref{Abs Intrinsic}.

@node CCos Intrinsic
@subsubsection CCos Intrinsic
@cindex CCos intrinsic
@cindex intrinsics, CCos

@noindent
@example
CCos(@var{X})
@end example

@noindent
CCos: @code{COMPLEX(KIND=1)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{COS()} that is specific
to one type for @var{X}.
@xref{Cos Intrinsic}.

@end ifset
@ifset familyFVZ
@node CDAbs Intrinsic
@subsubsection CDAbs Intrinsic
@cindex CDAbs intrinsic
@cindex intrinsics, CDAbs

@noindent
@example
CDAbs(@var{A})
@end example

@noindent
CDAbs: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{ABS()} that is specific
to one type for @var{A}.
@xref{Abs Intrinsic}.

@node CDCos Intrinsic
@subsubsection CDCos Intrinsic
@cindex CDCos intrinsic
@cindex intrinsics, CDCos

@noindent
@example
CDCos(@var{X})
@end example

@noindent
CDCos: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{COS()} that is specific
to one type for @var{X}.
@xref{Cos Intrinsic}.

@node CDExp Intrinsic
@subsubsection CDExp Intrinsic
@cindex CDExp intrinsic
@cindex intrinsics, CDExp

@noindent
@example
CDExp(@var{X})
@end example

@noindent
CDExp: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{EXP()} that is specific
to one type for @var{X}.
@xref{Exp Intrinsic}.

@node CDLog Intrinsic
@subsubsection CDLog Intrinsic
@cindex CDLog intrinsic
@cindex intrinsics, CDLog

@noindent
@example
CDLog(@var{X})
@end example

@noindent
CDLog: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{LOG()} that is specific
to one type for @var{X}.
@xref{Log Intrinsic}.

@node CDSin Intrinsic
@subsubsection CDSin Intrinsic
@cindex CDSin intrinsic
@cindex intrinsics, CDSin

@noindent
@example
CDSin(@var{X})
@end example

@noindent
CDSin: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{SIN()} that is specific
to one type for @var{X}.
@xref{Sin Intrinsic}.

@node CDSqRt Intrinsic
@subsubsection CDSqRt Intrinsic
@cindex CDSqRt intrinsic
@cindex intrinsics, CDSqRt

@noindent
@example
CDSqRt(@var{X})
@end example

@noindent
CDSqRt: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{SQRT()} that is specific
to one type for @var{X}.
@xref{SqRt Intrinsic}.

@end ifset
@ifset familyF90
@node Ceiling Intrinsic
@subsubsection Ceiling Intrinsic
@cindex Ceiling intrinsic
@cindex intrinsics, Ceiling

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Ceiling} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node CExp Intrinsic
@subsubsection CExp Intrinsic
@cindex CExp intrinsic
@cindex intrinsics, CExp

@noindent
@example
CExp(@var{X})
@end example

@noindent
CExp: @code{COMPLEX(KIND=1)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{EXP()} that is specific
to one type for @var{X}.
@xref{Exp Intrinsic}.

@node Char Intrinsic
@subsubsection Char Intrinsic
@cindex Char intrinsic
@cindex intrinsics, Char

@noindent
@example
Char(@var{I})
@end example

@noindent
Char: @code{CHARACTER*1} function.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the character corresponding to the
code specified by @var{I}, 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{CHAR} function.

@xref{AChar Intrinsic}, for the function corresponding
to the ASCII character set.

@end ifset
@ifset familyF2U
@node ChDir Intrinsic (subroutine)
@subsubsection ChDir Intrinsic (subroutine)
@cindex ChDir intrinsic
@cindex intrinsics, ChDir

@noindent
@example
CALL ChDir(@var{Dir}, @var{Status})
@end example

@noindent
@var{Dir}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sets the current working directory to be @var{Dir}.
If the @var{Status} argument is supplied, it contains 0
on success or a non-zero error code otherwise upon return.
See @code{chdir(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{Status} argument.

For information on other intrinsics with the same name:
@xref{ChDir Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node ChDir Intrinsic (function)
@subsubsection ChDir Intrinsic (function)
@cindex ChDir intrinsic
@cindex intrinsics, ChDir

@noindent
@example
ChDir(@var{Dir})
@end example

@noindent
ChDir: @code{INTEGER(KIND=1)} function.

@noindent
@var{Dir}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Sets the current working directory to be @var{Dir}.
Returns 0 on success or a non-zero error code.
See @code{chdir(3)}.

Due to the side effects performed by this intrinsic, the function
form is not recommended.

For information on other intrinsics with the same name:
@xref{ChDir Intrinsic (subroutine)}.

@end ifset
@ifset familyF2U
@node ChMod Intrinsic (subroutine)
@subsubsection ChMod Intrinsic (subroutine)
@cindex ChMod intrinsic
@cindex intrinsics, ChMod

@noindent
@example
CALL ChMod(@var{Name}, @var{Mode}, @var{Status})
@end example

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Mode}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Changes the access mode of file @var{Name} according to the
specification @var{Mode}, which is given in the format of
@code{chmod(1)}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{Name}---otherwise,
trailing blanks in @var{Name} are ignored.
Currently, @var{Name} must not contain the single quote
character.

If the @var{Status} 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 may 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{Status} argument.

For information on other intrinsics with the same name:
@xref{ChMod Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node ChMod Intrinsic (function)
@subsubsection ChMod Intrinsic (function)
@cindex ChMod intrinsic
@cindex intrinsics, ChMod

@noindent
@example
ChMod(@var{Name}, @var{Mode})
@end example

@noindent
ChMod: @code{INTEGER(KIND=1)} function.

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Mode}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Changes the access mode of file @var{Name} according to the
specification @var{Mode}, which is given in the format of
@code{chmod(1)}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{Name}---otherwise,
trailing blanks in @var{Name} are ignored.
Currently, @var{Name} 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 may fail in some circumstances and
will, anyway, be slow.

Due to the side effects performed by this intrinsic, the function
form is not recommended.

For information on other intrinsics with the same name:
@xref{ChMod Intrinsic (subroutine)}.

@end ifset
@ifset familyF77
@node CLog Intrinsic
@subsubsection CLog Intrinsic
@cindex CLog intrinsic
@cindex intrinsics, CLog

@noindent
@example
CLog(@var{X})
@end example

@noindent
CLog: @code{COMPLEX(KIND=1)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{LOG()} that is specific
to one type for @var{X}.
@xref{Log Intrinsic}.

@node Cmplx Intrinsic
@subsubsection Cmplx Intrinsic
@cindex Cmplx intrinsic
@cindex intrinsics, Cmplx

@noindent
@example
Cmplx(@var{X}, @var{Y})
@end example

@noindent
Cmplx: @code{COMPLEX(KIND=1)} function.

@noindent
@var{X}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
@var{Y}: @code{INTEGER} or @code{REAL}; OPTIONAL (must be omitted if @var{X} is @code{COMPLEX}); scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

If @var{X} is not type @code{COMPLEX},
constructs a value of type @code{COMPLEX(KIND=1)} from the
real and imaginary values specified by @var{X} and
@var{Y}, respectively.
If @var{Y} is omitted, @samp{0.} is assumed.

If @var{X} 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.

@end ifset
@ifset familyGNU
@node Complex Intrinsic
@subsubsection Complex Intrinsic
@cindex Complex intrinsic
@cindex intrinsics, Complex

@noindent
@example
Complex(@var{Real}, @var{Imag})
@end example

@noindent
Complex: @code{COMPLEX} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{Real}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
@var{Imag}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{gnu}.

@noindent
Description:

Returns a @code{COMPLEX} value that has @samp{Real} and @samp{Imag} as its
real and imaginary parts, respectively.

If @var{Real} and @var{Imag} 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{Real} and @var{Imag}.

If @var{Real} and @var{Imag} 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{Real} and @var{Imag} were converted, in this case.

If @var{Real} and @var{Imag} are both @code{INTEGER}, they are both converted
to @code{REAL(KIND=1)}, and the result of the @code{COMPLEX()}
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.

@end ifset
@ifset familyF77
@node Conjg Intrinsic
@subsubsection Conjg Intrinsic
@cindex Conjg intrinsic
@cindex intrinsics, Conjg

@noindent
@example
Conjg(@var{Z})
@end example

@noindent
Conjg: @code{COMPLEX} function, the @samp{KIND=} value of the type being that of argument @var{Z}.

@noindent
@var{Z}: @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the complex conjugate:

@example
COMPLEX(REALPART(@var{Z}), -IMAGPART(@var{Z}))
@end example

@node Cos Intrinsic
@subsubsection Cos Intrinsic
@cindex Cos intrinsic
@cindex intrinsics, Cos

@noindent
@example
Cos(@var{X})
@end example

@noindent
Cos: @code{REAL} or @code{COMPLEX} function, the exact type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL} or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the cosine of @var{X}, an angle measured
in radians.

@xref{ACos Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyVXT
@node CosD Intrinsic
@subsubsection CosD Intrinsic
@cindex CosD intrinsic
@cindex intrinsics, CosD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL CosD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node CosH Intrinsic
@subsubsection CosH Intrinsic
@cindex CosH intrinsic
@cindex intrinsics, CosH

@noindent
@example
CosH(@var{X})
@end example

@noindent
CosH: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the hyperbolic cosine of @var{X}.

@end ifset
@ifset familyF90
@node Count Intrinsic
@subsubsection Count Intrinsic
@cindex Count intrinsic
@cindex intrinsics, Count

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Count} to use this name for an
external procedure.

@node Cpu_Time Intrinsic
@subsubsection Cpu_Time Intrinsic
@cindex Cpu_Time intrinsic
@cindex intrinsics, Cpu_Time

@noindent
@example
CALL Cpu_Time(@var{Seconds})
@end example

@noindent
@var{Seconds}: @code{REAL(KIND=1)}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{f90}.

@noindent
Description:

Returns in @var{Seconds} 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)}.

@node CShift Intrinsic
@subsubsection CShift Intrinsic
@cindex CShift intrinsic
@cindex intrinsics, CShift

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL CShift} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node CSin Intrinsic
@subsubsection CSin Intrinsic
@cindex CSin intrinsic
@cindex intrinsics, CSin

@noindent
@example
CSin(@var{X})
@end example

@noindent
CSin: @code{COMPLEX(KIND=1)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{SIN()} that is specific
to one type for @var{X}.
@xref{Sin Intrinsic}.

@node CSqRt Intrinsic
@subsubsection CSqRt Intrinsic
@cindex CSqRt intrinsic
@cindex intrinsics, CSqRt

@noindent
@example
CSqRt(@var{X})
@end example

@noindent
CSqRt: @code{COMPLEX(KIND=1)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{SQRT()} that is specific
to one type for @var{X}.
@xref{SqRt Intrinsic}.

@end ifset
@ifset familyF2U
@node CTime Intrinsic (subroutine)
@subsubsection CTime Intrinsic (subroutine)
@cindex CTime intrinsic
@cindex intrinsics, CTime

@noindent
@example
CALL CTime(@var{Result}, @var{STime})
@end example

@noindent
@var{Result}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
@var{STime}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Converts @var{STime}, 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{Result}.

@xref{Time8 Intrinsic}.

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

For information on other intrinsics with the same name:
@xref{CTime Intrinsic (function)}.

@node CTime Intrinsic (function)
@subsubsection CTime Intrinsic (function)
@cindex CTime intrinsic
@cindex intrinsics, CTime

@noindent
@example
CTime(@var{STime})
@end example

@noindent
CTime: @code{CHARACTER*(*)} function.

@noindent
@var{STime}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Converts @var{STime}, 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}.

For information on other intrinsics with the same name:
@xref{CTime Intrinsic (subroutine)}.

@end ifset
@ifset familyF77
@node DAbs Intrinsic
@subsubsection DAbs Intrinsic
@cindex DAbs intrinsic
@cindex intrinsics, DAbs

@noindent
@example
DAbs(@var{A})
@end example

@noindent
DAbs: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ABS()} that is specific
to one type for @var{A}.
@xref{Abs Intrinsic}.

@node DACos Intrinsic
@subsubsection DACos Intrinsic
@cindex DACos intrinsic
@cindex intrinsics, DACos

@noindent
@example
DACos(@var{X})
@end example

@noindent
DACos: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ACOS()} that is specific
to one type for @var{X}.
@xref{ACos Intrinsic}.

@end ifset
@ifset familyVXT
@node DACosD Intrinsic
@subsubsection DACosD Intrinsic
@cindex DACosD intrinsic
@cindex intrinsics, DACosD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DACosD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DASin Intrinsic
@subsubsection DASin Intrinsic
@cindex DASin intrinsic
@cindex intrinsics, DASin

@noindent
@example
DASin(@var{X})
@end example

@noindent
DASin: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ASIN()} that is specific
to one type for @var{X}.
@xref{ASin Intrinsic}.

@end ifset
@ifset familyVXT
@node DASinD Intrinsic
@subsubsection DASinD Intrinsic
@cindex DASinD intrinsic
@cindex intrinsics, DASinD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DASinD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DATan Intrinsic
@subsubsection DATan Intrinsic
@cindex DATan intrinsic
@cindex intrinsics, DATan

@noindent
@example
DATan(@var{X})
@end example

@noindent
DATan: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ATAN()} that is specific
to one type for @var{X}.
@xref{ATan Intrinsic}.

@node DATan2 Intrinsic
@subsubsection DATan2 Intrinsic
@cindex DATan2 intrinsic
@cindex intrinsics, DATan2

@noindent
@example
DATan2(@var{Y}, @var{X})
@end example

@noindent
DATan2: @code{REAL(KIND=2)} function.

@noindent
@var{Y}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ATAN2()} that is specific
to one type for @var{Y} and @var{X}.
@xref{ATan2 Intrinsic}.

@end ifset
@ifset familyVXT
@node DATan2D Intrinsic
@subsubsection DATan2D Intrinsic
@cindex DATan2D intrinsic
@cindex intrinsics, DATan2D

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DATan2D} to use this name for an
external procedure.

@node DATanD Intrinsic
@subsubsection DATanD Intrinsic
@cindex DATanD intrinsic
@cindex intrinsics, DATanD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DATanD} to use this name for an
external procedure.

@node Date Intrinsic
@subsubsection Date Intrinsic
@cindex Date intrinsic
@cindex intrinsics, Date

@noindent
@example
CALL Date(@var{Date})
@end example

@noindent
@var{Date}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{vxt}.

@noindent
Description:

Returns @var{Date} 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}.

This intrinsic is not recommended, due to the year 2000 approaching.
@xref{CTime Intrinsic (subroutine)}, for information on obtaining more digits
for the current (or any) date.

@end ifset
@ifset familyF90
@node Date_and_Time Intrinsic
@subsubsection Date_and_Time Intrinsic
@cindex Date_and_Time intrinsic
@cindex intrinsics, Date_and_Time

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Date_and_Time} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node DbesJ0 Intrinsic
@subsubsection DbesJ0 Intrinsic
@cindex DbesJ0 intrinsic
@cindex intrinsics, DbesJ0

@noindent
@example
DbesJ0(@var{X})
@end example

@noindent
DbesJ0: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{BESJ0()} that is specific
to one type for @var{X}.
@xref{BesJ0 Intrinsic}.

@node DbesJ1 Intrinsic
@subsubsection DbesJ1 Intrinsic
@cindex DbesJ1 intrinsic
@cindex intrinsics, DbesJ1

@noindent
@example
DbesJ1(@var{X})
@end example

@noindent
DbesJ1: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{BESJ1()} that is specific
to one type for @var{X}.
@xref{BesJ1 Intrinsic}.

@node DbesJN Intrinsic
@subsubsection DbesJN Intrinsic
@cindex DbesJN intrinsic
@cindex intrinsics, DbesJN

@noindent
@example
DbesJN(@var{N}, @var{X})
@end example

@noindent
DbesJN: @code{REAL(KIND=2)} function.

@noindent
@var{N}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{BESJN()} that is specific
to one type for @var{X}.
@xref{BesJN Intrinsic}.

@node DbesY0 Intrinsic
@subsubsection DbesY0 Intrinsic
@cindex DbesY0 intrinsic
@cindex intrinsics, DbesY0

@noindent
@example
DbesY0(@var{X})
@end example

@noindent
DbesY0: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{BESY0()} that is specific
to one type for @var{X}.
@xref{BesY0 Intrinsic}.

@node DbesY1 Intrinsic
@subsubsection DbesY1 Intrinsic
@cindex DbesY1 intrinsic
@cindex intrinsics, DbesY1

@noindent
@example
DbesY1(@var{X})
@end example

@noindent
DbesY1: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{BESY1()} that is specific
to one type for @var{X}.
@xref{BesY1 Intrinsic}.

@node DbesYN Intrinsic
@subsubsection DbesYN Intrinsic
@cindex DbesYN intrinsic
@cindex intrinsics, DbesYN

@noindent
@example
DbesYN(@var{N}, @var{X})
@end example

@noindent
DbesYN: @code{REAL(KIND=2)} function.

@noindent
@var{N}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{BESYN()} that is specific
to one type for @var{X}.
@xref{BesYN Intrinsic}.

@end ifset
@ifset familyF77
@node Dble Intrinsic
@subsubsection Dble Intrinsic
@cindex Dble intrinsic
@cindex intrinsics, Dble

@noindent
@example
Dble(@var{A})
@end example

@noindent
Dble: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @var{A} converted to double precision
(@code{REAL(KIND=2)}).
If @var{A} is @code{COMPLEX}, the real part of
@var{A} 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}.

@end ifset
@ifset familyVXT
@node DbleQ Intrinsic
@subsubsection DbleQ Intrinsic
@cindex DbleQ intrinsic
@cindex intrinsics, DbleQ

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DbleQ} to use this name for an
external procedure.

@end ifset
@ifset familyFVZ
@node DCmplx Intrinsic
@subsubsection DCmplx Intrinsic
@cindex DCmplx intrinsic
@cindex intrinsics, DCmplx

@noindent
@example
DCmplx(@var{X}, @var{Y})
@end example

@noindent
DCmplx: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
@var{Y}: @code{INTEGER} or @code{REAL}; OPTIONAL (must be omitted if @var{X} is @code{COMPLEX}); scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

If @var{X} is not type @code{COMPLEX},
constructs a value of type @code{COMPLEX(KIND=2)} from the
real and imaginary values specified by @var{X} and
@var{Y}, respectively.
If @var{Y} is omitted, @samp{0D0} is assumed.

If @var{X} 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.

@node DConjg Intrinsic
@subsubsection DConjg Intrinsic
@cindex DConjg intrinsic
@cindex intrinsics, DConjg

@noindent
@example
DConjg(@var{Z})
@end example

@noindent
DConjg: @code{COMPLEX(KIND=2)} function.

@noindent
@var{Z}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{CONJG()} that is specific
to one type for @var{Z}.
@xref{ATan2 Intrinsic}.

@end ifset
@ifset familyF77
@node DCos Intrinsic
@subsubsection DCos Intrinsic
@cindex DCos intrinsic
@cindex intrinsics, DCos

@noindent
@example
DCos(@var{X})
@end example

@noindent
DCos: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{COS()} that is specific
to one type for @var{X}.
@xref{Cos Intrinsic}.

@end ifset
@ifset familyVXT
@node DCosD Intrinsic
@subsubsection DCosD Intrinsic
@cindex DCosD intrinsic
@cindex intrinsics, DCosD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DCosD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DCosH Intrinsic
@subsubsection DCosH Intrinsic
@cindex DCosH intrinsic
@cindex intrinsics, DCosH

@noindent
@example
DCosH(@var{X})
@end example

@noindent
DCosH: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{COSH()} that is specific
to one type for @var{X}.
@xref{CosH Intrinsic}.

@node DDiM Intrinsic
@subsubsection DDiM Intrinsic
@cindex DDiM intrinsic
@cindex intrinsics, DDiM

@noindent
@example
DDiM(@var{X}, @var{Y})
@end example

@noindent
DDiM: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
@var{Y}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{DIM()} that is specific
to one type for @var{X} and @var{Y}.
@xref{DiM Intrinsic}.

@end ifset
@ifset familyF2U
@node DErF Intrinsic
@subsubsection DErF Intrinsic
@cindex DErF intrinsic
@cindex intrinsics, DErF

@noindent
@example
DErF(@var{X})
@end example

@noindent
DErF: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{ERF()} that is specific
to one type for @var{X}.
@xref{ErF Intrinsic}.

@node DErFC Intrinsic
@subsubsection DErFC Intrinsic
@cindex DErFC intrinsic
@cindex intrinsics, DErFC

@noindent
@example
DErFC(@var{X})
@end example

@noindent
DErFC: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{ERFC()} that is specific
to one type for @var{X}.
@xref{ErFC Intrinsic}.

@end ifset
@ifset familyF77
@node DExp Intrinsic
@subsubsection DExp Intrinsic
@cindex DExp intrinsic
@cindex intrinsics, DExp

@noindent
@example
DExp(@var{X})
@end example

@noindent
DExp: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{EXP()} that is specific
to one type for @var{X}.
@xref{Exp Intrinsic}.

@end ifset
@ifset familyFVZ
@node DFloat Intrinsic
@subsubsection DFloat Intrinsic
@cindex DFloat intrinsic
@cindex intrinsics, DFloat

@noindent
@example
DFloat(@var{A})
@end example

@noindent
DFloat: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{REAL()} that is specific
to one type for @var{A}.
@xref{Real Intrinsic}.

@end ifset
@ifset familyVXT
@node DFlotI Intrinsic
@subsubsection DFlotI Intrinsic
@cindex DFlotI intrinsic
@cindex intrinsics, DFlotI

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DFlotI} to use this name for an
external procedure.

@node DFlotJ Intrinsic
@subsubsection DFlotJ Intrinsic
@cindex DFlotJ intrinsic
@cindex intrinsics, DFlotJ

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DFlotJ} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node Digits Intrinsic
@subsubsection Digits Intrinsic
@cindex Digits intrinsic
@cindex intrinsics, Digits

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Digits} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DiM Intrinsic
@subsubsection DiM Intrinsic
@cindex DiM intrinsic
@cindex intrinsics, DiM

@noindent
@example
DiM(@var{X}, @var{Y})
@end example

@noindent
DiM: @code{INTEGER} or @code{REAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{X}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
@var{Y}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{@var{X}-@var{Y}} if @var{X} is greater than
@var{Y}; otherwise returns zero.

@end ifset
@ifset familyFVZ
@node DImag Intrinsic
@subsubsection DImag Intrinsic
@cindex DImag intrinsic
@cindex intrinsics, DImag

@noindent
@example
DImag(@var{Z})
@end example

@noindent
DImag: @code{REAL(KIND=2)} function.

@noindent
@var{Z}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{vxt}.

@noindent
Description:

Archaic form of @code{AIMAG()} that is specific
to one type for @var{Z}.
@xref{AImag Intrinsic}.

@end ifset
@ifset familyF77
@node DInt Intrinsic
@subsubsection DInt Intrinsic
@cindex DInt intrinsic
@cindex intrinsics, DInt

@noindent
@example
DInt(@var{A})
@end example

@noindent
DInt: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{AINT()} that is specific
to one type for @var{A}.
@xref{AInt Intrinsic}.

@node DLog Intrinsic
@subsubsection DLog Intrinsic
@cindex DLog intrinsic
@cindex intrinsics, DLog

@noindent
@example
DLog(@var{X})
@end example

@noindent
DLog: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{LOG()} that is specific
to one type for @var{X}.
@xref{Log Intrinsic}.

@node DLog10 Intrinsic
@subsubsection DLog10 Intrinsic
@cindex DLog10 intrinsic
@cindex intrinsics, DLog10

@noindent
@example
DLog10(@var{X})
@end example

@noindent
DLog10: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{LOG10()} that is specific
to one type for @var{X}.
@xref{Log10 Intrinsic}.

@node DMax1 Intrinsic
@subsubsection DMax1 Intrinsic
@cindex DMax1 intrinsic
@cindex intrinsics, DMax1

@noindent
@example
DMax1(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
DMax1: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MAX()} that is specific
to one type for @var{A}.
@xref{Max Intrinsic}.

@node DMin1 Intrinsic
@subsubsection DMin1 Intrinsic
@cindex DMin1 intrinsic
@cindex intrinsics, DMin1

@noindent
@example
DMin1(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
DMin1: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MIN()} that is specific
to one type for @var{A}.
@xref{Min Intrinsic}.

@node DMod Intrinsic
@subsubsection DMod Intrinsic
@cindex DMod intrinsic
@cindex intrinsics, DMod

@noindent
@example
DMod(@var{A}, @var{P})
@end example

@noindent
DMod: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
@var{P}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MOD()} that is specific
to one type for @var{A}.
@xref{Mod Intrinsic}.

@node DNInt Intrinsic
@subsubsection DNInt Intrinsic
@cindex DNInt intrinsic
@cindex intrinsics, DNInt

@noindent
@example
DNInt(@var{A})
@end example

@noindent
DNInt: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ANINT()} that is specific
to one type for @var{A}.
@xref{ANInt Intrinsic}.

@end ifset
@ifset familyF90
@node Dot_Product Intrinsic
@subsubsection Dot_Product Intrinsic
@cindex Dot_Product intrinsic
@cindex intrinsics, Dot_Product

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Dot_Product} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DProd Intrinsic
@subsubsection DProd Intrinsic
@cindex DProd intrinsic
@cindex intrinsics, DProd

@noindent
@example
DProd(@var{X}, @var{Y})
@end example

@noindent
DProd: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
@var{Y}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{DBLE(@var{X})*DBLE(@var{Y})}.

@end ifset
@ifset familyVXT
@node DReal Intrinsic
@subsubsection DReal Intrinsic
@cindex DReal intrinsic
@cindex intrinsics, DReal

@noindent
@example
DReal(@var{A})
@end example

@noindent
DReal: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{vxt}.

@noindent
Description:

Converts @var{A} to @code{REAL(KIND=2)}.

If @var{A} 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{REAL() and AIMAG() of Complex}, for more information on
this issue.

@end ifset
@ifset familyF77
@node DSign Intrinsic
@subsubsection DSign Intrinsic
@cindex DSign intrinsic
@cindex intrinsics, DSign

@noindent
@example
DSign(@var{A}, @var{B})
@end example

@noindent
DSign: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
@var{B}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{SIGN()} that is specific
to one type for @var{A} and @var{B}.
@xref{Sign Intrinsic}.

@node DSin Intrinsic
@subsubsection DSin Intrinsic
@cindex DSin intrinsic
@cindex intrinsics, DSin

@noindent
@example
DSin(@var{X})
@end example

@noindent
DSin: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{SIN()} that is specific
to one type for @var{X}.
@xref{Sin Intrinsic}.

@end ifset
@ifset familyVXT
@node DSinD Intrinsic
@subsubsection DSinD Intrinsic
@cindex DSinD intrinsic
@cindex intrinsics, DSinD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DSinD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DSinH Intrinsic
@subsubsection DSinH Intrinsic
@cindex DSinH intrinsic
@cindex intrinsics, DSinH

@noindent
@example
DSinH(@var{X})
@end example

@noindent
DSinH: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{SINH()} that is specific
to one type for @var{X}.
@xref{SinH Intrinsic}.

@node DSqRt Intrinsic
@subsubsection DSqRt Intrinsic
@cindex DSqRt intrinsic
@cindex intrinsics, DSqRt

@noindent
@example
DSqRt(@var{X})
@end example

@noindent
DSqRt: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{SQRT()} that is specific
to one type for @var{X}.
@xref{SqRt Intrinsic}.

@node DTan Intrinsic
@subsubsection DTan Intrinsic
@cindex DTan intrinsic
@cindex intrinsics, DTan

@noindent
@example
DTan(@var{X})
@end example

@noindent
DTan: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{TAN()} that is specific
to one type for @var{X}.
@xref{Tan Intrinsic}.

@end ifset
@ifset familyVXT
@node DTanD Intrinsic
@subsubsection DTanD Intrinsic
@cindex DTanD intrinsic
@cindex intrinsics, DTanD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL DTanD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node DTanH Intrinsic
@subsubsection DTanH Intrinsic
@cindex DTanH intrinsic
@cindex intrinsics, DTanH

@noindent
@example
DTanH(@var{X})
@end example

@noindent
DTanH: @code{REAL(KIND=2)} function.

@noindent
@var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{TANH()} that is specific
to one type for @var{X}.
@xref{TanH Intrinsic}.

@end ifset
@ifset familyF2U
@node Dtime Intrinsic (subroutine)
@subsubsection Dtime Intrinsic (subroutine)
@cindex Dtime intrinsic
@cindex intrinsics, Dtime

@noindent
@example
CALL Dtime(@var{Result}, @var{TArray})
@end example

@noindent
@var{Result}: @code{REAL(KIND=1)}; scalar; INTENT(OUT).

@noindent
@var{TArray}: @code{REAL(KIND=1)}; DIMENSION(2); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Initially, return the number of seconds of runtime
since the start of the process's execution
in @var{Result},
and the user and system components of this in @samp{@var{TArray}(1)}
and @samp{@var{TArray}(2)} respectively.
The value of @var{Result} is equal to @samp{@var{TArray}(1) + @var{TArray}(2)}.

Subsequent invocations of @samp{DTIME()} set values based on accumulations
since the previous invocation.

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

For information on other intrinsics with the same name:
@xref{Dtime Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node Dtime Intrinsic (function)
@subsubsection Dtime Intrinsic (function)
@cindex Dtime intrinsic
@cindex intrinsics, Dtime

@noindent
@example
Dtime(@var{TArray})
@end example

@noindent
Dtime: @code{REAL(KIND=1)} function.

@noindent
@var{TArray}: @code{REAL(KIND=1)}; DIMENSION(2); INTENT(OUT).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

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{TArray}(1)}
and @samp{@var{TArray}(2)} respectively.
The functions' value is equal to @samp{@var{TArray}(1) + @var{TArray}(2)}.

Subsequent invocations of @samp{DTIME()} return values accumulated since the
previous invocation.

Due to the side effects performed by this intrinsic, the function
form is not recommended.

For information on other intrinsics with the same name:
@xref{Dtime Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node EOShift Intrinsic
@subsubsection EOShift Intrinsic
@cindex EOShift intrinsic
@cindex intrinsics, EOShift

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL EOShift} to use this name for an
external procedure.

@node Epsilon Intrinsic
@subsubsection Epsilon Intrinsic
@cindex Epsilon intrinsic
@cindex intrinsics, Epsilon

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Epsilon} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node ErF Intrinsic
@subsubsection ErF Intrinsic
@cindex ErF intrinsic
@cindex intrinsics, ErF

@noindent
@example
ErF(@var{X})
@end example

@noindent
ErF: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the error function of @var{X}.
See @code{erf(3m)}, which provides the implementation.

@node ErFC Intrinsic
@subsubsection ErFC Intrinsic
@cindex ErFC intrinsic
@cindex intrinsics, ErFC

@noindent
@example
ErFC(@var{X})
@end example

@noindent
ErFC: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the complementary error function of @var{X}:
@samp{ERFC(R) = 1 - ERF(R)} (except that the result may be more
accurate than explicitly evaluating that formulae would give).
See @code{erfc(3m)}, which provides the implementation.

@node ETime Intrinsic (subroutine)
@subsubsection ETime Intrinsic (subroutine)
@cindex ETime intrinsic
@cindex intrinsics, ETime

@noindent
@example
CALL ETime(@var{Result}, @var{TArray})
@end example

@noindent
@var{Result}: @code{REAL(KIND=1)}; scalar; INTENT(OUT).

@noindent
@var{TArray}: @code{REAL(KIND=1)}; DIMENSION(2); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Return the number of seconds of runtime
since the start of the process's execution
in @var{Result},
and the user and system components of this in @samp{@var{TArray}(1)}
and @samp{@var{TArray}(2)} respectively.
The value of @var{Result} is equal to @samp{@var{TArray}(1) + @var{TArray}(2)}.

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

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

@node ETime Intrinsic (function)
@subsubsection ETime Intrinsic (function)
@cindex ETime intrinsic
@cindex intrinsics, ETime

@noindent
@example
ETime(@var{TArray})
@end example

@noindent
ETime: @code{REAL(KIND=1)} function.

@noindent
@var{TArray}: @code{REAL(KIND=1)}; DIMENSION(2); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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

@node Exit Intrinsic
@subsubsection Exit Intrinsic
@cindex Exit intrinsic
@cindex intrinsics, Exit

@noindent
@example
CALL Exit(@var{Status})
@end example

@noindent
@var{Status}: @code{INTEGER}; OPTIONAL; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

@end ifset
@ifset familyF77
@node Exp Intrinsic
@subsubsection Exp Intrinsic
@cindex Exp intrinsic
@cindex intrinsics, Exp

@noindent
@example
Exp(@var{X})
@end example

@noindent
Exp: @code{REAL} or @code{COMPLEX} function, the exact type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL} or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{@var{e}**@var{X}}, where
@var{e} is approximately 2.7182818.

@xref{Log Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyF90
@node Exponent Intrinsic
@subsubsection Exponent Intrinsic
@cindex Exponent intrinsic
@cindex intrinsics, Exponent

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Exponent} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Fdate Intrinsic (subroutine)
@subsubsection Fdate Intrinsic (subroutine)
@cindex Fdate intrinsic
@cindex intrinsics, Fdate

@noindent
@example
CALL Fdate(@var{Date})
@end example

@noindent
@var{Date}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the current date (using the same format as @code{CTIME()})
in @var{Date}.

Equivalent to:

@example
CALL CTIME(@var{Date}, TIME8())
@end example

@xref{CTime Intrinsic (subroutine)}.

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

For information on other intrinsics with the same name:
@xref{Fdate Intrinsic (function)}.

@node Fdate Intrinsic (function)
@subsubsection Fdate Intrinsic (function)
@cindex Fdate intrinsic
@cindex intrinsics, Fdate

@noindent
@example
Fdate()
@end example

@noindent
Fdate: @code{CHARACTER*(*)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the current date (using the same format as @code{CTIME()}).

Equivalent to:

@example
CTIME(TIME8())
@end example

@xref{CTime Intrinsic (function)}.

For information on other intrinsics with the same name:
@xref{Fdate Intrinsic (subroutine)}.

@node FGet Intrinsic (subroutine)
@subsubsection FGet Intrinsic (subroutine)
@cindex FGet intrinsic
@cindex intrinsics, FGet

@noindent
@example
CALL FGet(@var{C}, @var{Status})
@end example

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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

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

@end ifset
@ifset familyBADU77
@node FGet Intrinsic (function)
@subsubsection FGet Intrinsic (function)
@cindex FGet intrinsic
@cindex intrinsics, FGet

@noindent
@example
FGet(@var{C})
@end example

@noindent
FGet: @code{INTEGER(KIND=1)} function.

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Reads a single character into @var{C} 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.

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

For information on other intrinsics with the same name:
@xref{FGet Intrinsic (subroutine)}.

@end ifset
@ifset familyF2U
@node FGetC Intrinsic (subroutine)
@subsubsection FGetC Intrinsic (subroutine)
@cindex FGetC intrinsic
@cindex intrinsics, FGetC

@noindent
@example
CALL FGetC(@var{Unit}, @var{C}, @var{Status})
@end example

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Reads a single character into @var{C} in stream mode from unit @var{Unit}
(by-passing normal formatted output) using @code{getc(3)}.
Returns in
@var{Status} 0 on success, @minus{}1 on end-of-file, and the error code from
@code{ferror(3)} otherwise.

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

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

@end ifset
@ifset familyBADU77
@node FGetC Intrinsic (function)
@subsubsection FGetC Intrinsic (function)
@cindex FGetC intrinsic
@cindex intrinsics, FGetC

@noindent
@example
FGetC(@var{Unit}, @var{C})
@end example

@noindent
FGetC: @code{INTEGER(KIND=1)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Reads a single character into @var{C} in stream mode from unit @var{Unit}
(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.

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

For information on other intrinsics with the same name:
@xref{FGetC Intrinsic (subroutine)}.

@end ifset
@ifset familyF77
@node Float Intrinsic
@subsubsection Float Intrinsic
@cindex Float intrinsic
@cindex intrinsics, Float

@noindent
@example
Float(@var{A})
@end example

@noindent
Float: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{REAL()} that is specific
to one type for @var{A}.
@xref{Real Intrinsic}.

@end ifset
@ifset familyVXT
@node FloatI Intrinsic
@subsubsection FloatI Intrinsic
@cindex FloatI intrinsic
@cindex intrinsics, FloatI

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL FloatI} to use this name for an
external procedure.

@node FloatJ Intrinsic
@subsubsection FloatJ Intrinsic
@cindex FloatJ intrinsic
@cindex intrinsics, FloatJ

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL FloatJ} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node Floor Intrinsic
@subsubsection Floor Intrinsic
@cindex Floor intrinsic
@cindex intrinsics, Floor

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Floor} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Flush Intrinsic
@subsubsection Flush Intrinsic
@cindex Flush intrinsic
@cindex intrinsics, Flush

@noindent
@example
CALL Flush(@var{Unit})
@end example

@noindent
@var{Unit}: @code{INTEGER}; OPTIONAL; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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

@node FNum Intrinsic
@subsubsection FNum Intrinsic
@cindex FNum intrinsic
@cindex intrinsics, FNum

@noindent
@example
FNum(@var{Unit})
@end example

@noindent
FNum: @code{INTEGER(KIND=1)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the Unix file descriptor number corresponding to the open
Fortran I/O unit @var{Unit}.
This could be passed to an interface to C I/O routines.

@node FPut Intrinsic (subroutine)
@subsubsection FPut Intrinsic (subroutine)
@cindex FPut intrinsic
@cindex intrinsics, FPut

@noindent
@example
CALL FPut(@var{C}, @var{Status})
@end example

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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

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

@end ifset
@ifset familyBADU77
@node FPut Intrinsic (function)
@subsubsection FPut Intrinsic (function)
@cindex FPut intrinsic
@cindex intrinsics, FPut

@noindent
@example
FPut(@var{C})
@end example

@noindent
FPut: @code{INTEGER(KIND=1)} function.

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Writes the single character @var{C} 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.

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

For information on other intrinsics with the same name:
@xref{FPut Intrinsic (subroutine)}.

@end ifset
@ifset familyF2U
@node FPutC Intrinsic (subroutine)
@subsubsection FPutC Intrinsic (subroutine)
@cindex FPutC intrinsic
@cindex intrinsics, FPutC

@noindent
@example
CALL FPutC(@var{Unit}, @var{C}, @var{Status})
@end example

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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

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

@end ifset
@ifset familyBADU77
@node FPutC Intrinsic (function)
@subsubsection FPutC Intrinsic (function)
@cindex FPutC intrinsic
@cindex intrinsics, FPutC

@noindent
@example
FPutC(@var{Unit}, @var{C})
@end example

@noindent
FPutC: @code{INTEGER(KIND=1)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Writes the single character @var{C} in stream mode to unit @var{Unit}
(by-passing normal formatted output) using @code{putc(3)}.
Returns 0 on
success, the error code from @code{ferror(3)} otherwise.

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

For information on other intrinsics with the same name:
@xref{FPutC Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node Fraction Intrinsic
@subsubsection Fraction Intrinsic
@cindex Fraction intrinsic
@cindex intrinsics, Fraction

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Fraction} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node FSeek Intrinsic
@subsubsection FSeek Intrinsic
@cindex FSeek intrinsic
@cindex intrinsics, FSeek

@noindent
@example
CALL FSeek(@var{Unit}, @var{Offset}, @var{Whence}, @var{ErrLab})
@end example

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Offset}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Whence}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{ErrLab}: @samp{*@var{label}}, where @var{label} is the label
of an executable statement; OPTIONAL.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Attempts to move Fortran unit @var{Unit} to the specified
@var{Offset}: absolute offset if @var{Offset}=0; relative to the
current offset if @var{Offset}=1; relative to the end of the file if
@var{Offset}=2.
It branches to label @var{Whence} if @var{Unit} is
not open or if the call otherwise fails.

@node FStat Intrinsic (subroutine)
@subsubsection FStat Intrinsic (subroutine)
@cindex FStat intrinsic
@cindex intrinsics, FStat

@noindent
@example
CALL FStat(@var{Unit}, @var{SArray}, @var{Status})
@end example

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{SArray}: @code{INTEGER(KIND=1)}; DIMENSION(13); INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Obtains data about the file open on Fortran I/O unit @var{Unit} and
places them in the array @var{SArray}.
The values in this array are
extracted from the @code{stat} structure as returned by
@code{fstat(2)} q.v., as follows:

@enumerate
@item
File mode

@item
Inode number

@item
ID of device containing directory entry for file

@item
Device id (if relevant)

@item
Number of links

@item
Owner's uid

@item
Owner's gid

@item
File size (bytes)

@item
Last access time

@item
Last modification time

@item
Last file status change time

@item
Preferred I/O block size

@item
Number of blocks allocated
@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{Status} argument is supplied, it contains
0 on success or a non-zero error code upon return.

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

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

@node FStat Intrinsic (function)
@subsubsection FStat Intrinsic (function)
@cindex FStat intrinsic
@cindex intrinsics, FStat

@noindent
@example
FStat(@var{Unit}, @var{SArray})
@end example

@noindent
FStat: @code{INTEGER(KIND=1)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{SArray}: @code{INTEGER(KIND=1)}; DIMENSION(13); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Obtains data about the file open on Fortran I/O unit @var{Unit} and
places them in the array @var{SArray}.
The values in this array are
extracted from the @code{stat} structure as returned by
@code{fstat(2)} q.v., as follows:

@enumerate
@item
File mode

@item
Inode number

@item
ID of device containing directory entry for file

@item
Device id (if relevant)

@item
Number of links

@item
Owner's uid

@item
Owner's gid

@item
File size (bytes)

@item
Last access time

@item
Last modification time

@item
Last file status change time

@item
Preferred I/O block size

@item
Number of blocks allocated
@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.

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

@node FTell Intrinsic (subroutine)
@subsubsection FTell Intrinsic (subroutine)
@cindex FTell intrinsic
@cindex intrinsics, FTell

@noindent
@example
CALL FTell(@var{Unit}, @var{Offset})
@end example

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Offset}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sets @var{Offset} to the current offset of Fortran unit @var{Unit}
(or to @minus{}1 if @var{Unit} is not open).

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

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

@node FTell Intrinsic (function)
@subsubsection FTell Intrinsic (function)
@cindex FTell intrinsic
@cindex intrinsics, FTell

@noindent
@example
FTell(@var{Unit})
@end example

@noindent
FTell: @code{INTEGER(KIND=1)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the current offset of Fortran unit @var{Unit}
(or @minus{}1 if @var{Unit} is not open).

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

@node GError Intrinsic
@subsubsection GError Intrinsic
@cindex GError intrinsic
@cindex intrinsics, GError

@noindent
@example
CALL GError(@var{Message})
@end example

@noindent
@var{Message}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the system error message corresponding to the last system
error (C @code{errno}).

@node GetArg Intrinsic
@subsubsection GetArg Intrinsic
@cindex GetArg intrinsic
@cindex intrinsics, GetArg

@noindent
@example
CALL GetArg(@var{Pos}, @var{Value})
@end example

@noindent
@var{Pos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Value}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sets @var{Value} to the @var{Pos}-th command-line argument (or to all
blanks if there are fewer than @var{Value} command-line arguments);
@code{CALL GETARG(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.

@node GetCWD Intrinsic (subroutine)
@subsubsection GetCWD Intrinsic (subroutine)
@cindex GetCWD intrinsic
@cindex intrinsics, GetCWD

@noindent
@example
CALL GetCWD(@var{Name}, @var{Status})
@end example

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Places the current working directory in @var{Name}.
If the @var{Status} 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{Status} argument.

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

@node GetCWD Intrinsic (function)
@subsubsection GetCWD Intrinsic (function)
@cindex GetCWD intrinsic
@cindex intrinsics, GetCWD

@noindent
@example
GetCWD(@var{Name})
@end example

@noindent
GetCWD: @code{INTEGER(KIND=1)} function.

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Places the current working directory in @var{Name}.
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)}).

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

@node GetEnv Intrinsic
@subsubsection GetEnv Intrinsic
@cindex GetEnv intrinsic
@cindex intrinsics, GetEnv

@noindent
@example
CALL GetEnv(@var{Name}, @var{Value})
@end example

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Value}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sets @var{Value} to the value of environment variable given by the
value of @var{Name} (@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{Name}---otherwise,
trailing blanks in @var{Name} are ignored.

@node GetGId Intrinsic
@subsubsection GetGId Intrinsic
@cindex GetGId intrinsic
@cindex intrinsics, GetGId

@noindent
@example
GetGId()
@end example

@noindent
GetGId: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the group id for the current process.

@node GetLog Intrinsic
@subsubsection GetLog Intrinsic
@cindex GetLog intrinsic
@cindex intrinsics, GetLog

@noindent
@example
CALL GetLog(@var{Login})
@end example

@noindent
@var{Login}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the login name for the process in @var{Login}.

@node GetPId Intrinsic
@subsubsection GetPId Intrinsic
@cindex GetPId intrinsic
@cindex intrinsics, GetPId

@noindent
@example
GetPId()
@end example

@noindent
GetPId: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the process id for the current process.

@node GetUId Intrinsic
@subsubsection GetUId Intrinsic
@cindex GetUId intrinsic
@cindex intrinsics, GetUId

@noindent
@example
GetUId()
@end example

@noindent
GetUId: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the user id for the current process.

@node GMTime Intrinsic
@subsubsection GMTime Intrinsic
@cindex GMTime intrinsic
@cindex intrinsics, GMTime

@noindent
@example
CALL GMTime(@var{STime}, @var{TArray})
@end example

@noindent
@var{STime}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
@var{TArray}: @code{INTEGER(KIND=1)}; DIMENSION(9); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Given a system time value @var{STime}, fills @var{TArray} 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

@node HostNm Intrinsic (subroutine)
@subsubsection HostNm Intrinsic (subroutine)
@cindex HostNm intrinsic
@cindex intrinsics, HostNm

@noindent
@example
CALL HostNm(@var{Name}, @var{Status})
@end example

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Fills @var{Name} with the system's host name returned by
@code{gethostname(2)}.
If the @var{Status} 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)}).

This intrinsic is not available on all systems.

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

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

@node HostNm Intrinsic (function)
@subsubsection HostNm Intrinsic (function)
@cindex HostNm intrinsic
@cindex intrinsics, HostNm

@noindent
@example
HostNm(@var{Name})
@end example

@noindent
HostNm: @code{INTEGER(KIND=1)} function.

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Fills @var{Name} 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)}).

This intrinsic is not available on all systems.

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

@end ifset
@ifset familyF90
@node Huge Intrinsic
@subsubsection Huge Intrinsic
@cindex Huge intrinsic
@cindex intrinsics, Huge

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Huge} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node IAbs Intrinsic
@subsubsection IAbs Intrinsic
@cindex IAbs intrinsic
@cindex intrinsics, IAbs

@noindent
@example
IAbs(@var{A})
@end example

@noindent
IAbs: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ABS()} that is specific
to one type for @var{A}.
@xref{Abs Intrinsic}.

@end ifset
@ifset familyASC
@node IAChar Intrinsic
@subsubsection IAChar Intrinsic
@cindex IAChar intrinsic
@cindex intrinsics, IAChar

@noindent
@example
IAChar(@var{C})
@end example

@noindent
IAChar: @code{INTEGER(KIND=1)} function.

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}, @code{f90}.

@noindent
Description:

Returns the code for the ASCII character in the
first character position of @var{C}.

@xref{AChar Intrinsic}, for the inverse of this function.

@xref{IChar Intrinsic}, for the function corresponding
to the system's native character set.

@end ifset
@ifset familyMIL
@node IAnd Intrinsic
@subsubsection IAnd Intrinsic
@cindex IAnd intrinsic
@cindex intrinsics, IAnd

@noindent
@example
IAnd(@var{I}, @var{J})
@end example

@noindent
IAnd: @code{INTEGER} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{J}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Returns value resulting from boolean AND of
pair of bits in each of @var{I} and @var{J}.

@end ifset
@ifset familyF2U
@node IArgC Intrinsic
@subsubsection IArgC Intrinsic
@cindex IArgC intrinsic
@cindex intrinsics, IArgC

@noindent
@example
IArgC()
@end example

@noindent
IArgC: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the number of command-line arguments.

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

@end ifset
@ifset familyMIL
@node IBClr Intrinsic
@subsubsection IBClr Intrinsic
@cindex IBClr intrinsic
@cindex intrinsics, IBClr

@noindent
@example
IBClr(@var{I}, @var{Pos})
@end example

@noindent
IBClr: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Pos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Returns the value of @var{I} with bit @var{Pos} cleared (set to
zero).
@xref{BTest Intrinsic} for information on bit positions.

@node IBits Intrinsic
@subsubsection IBits Intrinsic
@cindex IBits intrinsic
@cindex intrinsics, IBits

@noindent
@example
IBits(@var{I}, @var{Pos}, @var{Len})
@end example

@noindent
IBits: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Pos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Len}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Extracts a subfield of length @var{Len} from @var{I}, starting from
bit position @var{Pos} and extending left for @var{Len} bits.
The result is right-justified and the remaining bits are zeroed.
The value
of @samp{@var{Pos}+@var{Len}} must be less than or equal to the value
@samp{BIT_SIZE(@var{I})}.
@xref{Bit_Size Intrinsic}.

@node IBSet Intrinsic
@subsubsection IBSet Intrinsic
@cindex IBSet intrinsic
@cindex intrinsics, IBSet

@noindent
@example
IBSet(@var{I}, @var{Pos})
@end example

@noindent
IBSet: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Pos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Returns the value of @var{I} with bit @var{Pos} set (to one).
@xref{BTest Intrinsic} for information on bit positions.

@end ifset
@ifset familyF77
@node IChar Intrinsic
@subsubsection IChar Intrinsic
@cindex IChar intrinsic
@cindex intrinsics, IChar

@noindent
@example
IChar(@var{C})
@end example

@noindent
IChar: @code{INTEGER(KIND=1)} function.

@noindent
@var{C}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the code for the character in the
first character position of @var{C}.

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

Note that no intrinsic exists to convert a printable
character string to a numerical value.
For example, there is no intrinsic that, given
the @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{ICHAR} function.

@xref{IAChar Intrinsic}, for the function corresponding
to the ASCII character set.

@end ifset
@ifset familyF2U
@node IDate Intrinsic (UNIX)
@subsubsection IDate Intrinsic (UNIX)
@cindex IDate intrinsic
@cindex intrinsics, IDate

@noindent
@example
CALL IDate(@var{TArray})
@end example

@noindent
@var{TArray}: @code{INTEGER(KIND=1)}; DIMENSION(3); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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

@end ifset
@ifset familyVXT
@node IDate Intrinsic (VXT)
@subsubsection IDate Intrinsic (VXT)
@cindex IDate intrinsic
@cindex intrinsics, IDate

@noindent
@example
CALL IDate(@var{M}, @var{D}, @var{Y})
@end example

@noindent
@var{M}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
@var{D}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
@var{Y}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{vxt}.

@noindent
Description:

Returns the numerical values of the current local time.
The month (in the range 1--12) is returned in @var{M},
the day (in the range 1--7) in @var{D},
and the year in @var{Y} (in the range 0--99).

This intrinsic is not recommended, due to the year 2000 approaching.

For information on other intrinsics with the same name:
@xref{IDate Intrinsic (UNIX)}.

@end ifset
@ifset familyF77
@node IDiM Intrinsic
@subsubsection IDiM Intrinsic
@cindex IDiM intrinsic
@cindex intrinsics, IDiM

@noindent
@example
IDiM(@var{X}, @var{Y})
@end example

@noindent
IDiM: @code{INTEGER(KIND=1)} function.

@noindent
@var{X}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
@var{Y}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{IDIM()} that is specific
to one type for @var{X} and @var{Y}.
@xref{IDiM Intrinsic}.

@node IDInt Intrinsic
@subsubsection IDInt Intrinsic
@cindex IDInt intrinsic
@cindex intrinsics, IDInt

@noindent
@example
IDInt(@var{A})
@end example

@noindent
IDInt: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{INT()} that is specific
to one type for @var{A}.
@xref{Int Intrinsic}.

@node IDNInt Intrinsic
@subsubsection IDNInt Intrinsic
@cindex IDNInt intrinsic
@cindex intrinsics, IDNInt

@noindent
@example
IDNInt(@var{A})
@end example

@noindent
IDNInt: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{NINT()} that is specific
to one type for @var{A}.
@xref{NInt Intrinsic}.

@end ifset
@ifset familyMIL
@node IEOr Intrinsic
@subsubsection IEOr Intrinsic
@cindex IEOr intrinsic
@cindex intrinsics, IEOr

@noindent
@example
IEOr(@var{I}, @var{J})
@end example

@noindent
IEOr: @code{INTEGER} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{J}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

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

@end ifset
@ifset familyF2U
@node IErrNo Intrinsic
@subsubsection IErrNo Intrinsic
@cindex IErrNo intrinsic
@cindex intrinsics, IErrNo

@noindent
@example
IErrNo()
@end example

@noindent
IErrNo: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the last system error number (corresponding to the C
@code{errno}).

@end ifset
@ifset familyF77
@node IFix Intrinsic
@subsubsection IFix Intrinsic
@cindex IFix intrinsic
@cindex intrinsics, IFix

@noindent
@example
IFix(@var{A})
@end example

@noindent
IFix: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{INT()} that is specific
to one type for @var{A}.
@xref{Int Intrinsic}.

@end ifset
@ifset familyVXT
@node IIAbs Intrinsic
@subsubsection IIAbs Intrinsic
@cindex IIAbs intrinsic
@cindex intrinsics, IIAbs

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIAbs} to use this name for an
external procedure.

@node IIAnd Intrinsic
@subsubsection IIAnd Intrinsic
@cindex IIAnd intrinsic
@cindex intrinsics, IIAnd

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIAnd} to use this name for an
external procedure.

@node IIBClr Intrinsic
@subsubsection IIBClr Intrinsic
@cindex IIBClr intrinsic
@cindex intrinsics, IIBClr

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIBClr} to use this name for an
external procedure.

@node IIBits Intrinsic
@subsubsection IIBits Intrinsic
@cindex IIBits intrinsic
@cindex intrinsics, IIBits

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIBits} to use this name for an
external procedure.

@node IIBSet Intrinsic
@subsubsection IIBSet Intrinsic
@cindex IIBSet intrinsic
@cindex intrinsics, IIBSet

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIBSet} to use this name for an
external procedure.

@node IIDiM Intrinsic
@subsubsection IIDiM Intrinsic
@cindex IIDiM intrinsic
@cindex intrinsics, IIDiM

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIDiM} to use this name for an
external procedure.

@node IIDInt Intrinsic
@subsubsection IIDInt Intrinsic
@cindex IIDInt intrinsic
@cindex intrinsics, IIDInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIDInt} to use this name for an
external procedure.

@node IIDNnt Intrinsic
@subsubsection IIDNnt Intrinsic
@cindex IIDNnt intrinsic
@cindex intrinsics, IIDNnt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIDNnt} to use this name for an
external procedure.

@node IIEOr Intrinsic
@subsubsection IIEOr Intrinsic
@cindex IIEOr intrinsic
@cindex intrinsics, IIEOr

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIEOr} to use this name for an
external procedure.

@node IIFix Intrinsic
@subsubsection IIFix Intrinsic
@cindex IIFix intrinsic
@cindex intrinsics, IIFix

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIFix} to use this name for an
external procedure.

@node IInt Intrinsic
@subsubsection IInt Intrinsic
@cindex IInt intrinsic
@cindex intrinsics, IInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IInt} to use this name for an
external procedure.

@node IIOr Intrinsic
@subsubsection IIOr Intrinsic
@cindex IIOr intrinsic
@cindex intrinsics, IIOr

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIOr} to use this name for an
external procedure.

@node IIQint Intrinsic
@subsubsection IIQint Intrinsic
@cindex IIQint intrinsic
@cindex intrinsics, IIQint

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIQint} to use this name for an
external procedure.

@node IIQNnt Intrinsic
@subsubsection IIQNnt Intrinsic
@cindex IIQNnt intrinsic
@cindex intrinsics, IIQNnt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIQNnt} to use this name for an
external procedure.

@node IIShftC Intrinsic
@subsubsection IIShftC Intrinsic
@cindex IIShftC intrinsic
@cindex intrinsics, IIShftC

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IIShftC} to use this name for an
external procedure.

@node IISign Intrinsic
@subsubsection IISign Intrinsic
@cindex IISign intrinsic
@cindex intrinsics, IISign

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IISign} to use this name for an
external procedure.

@end ifset
@ifset familyF2C
@node Imag Intrinsic
@subsubsection Imag Intrinsic
@cindex Imag intrinsic
@cindex intrinsics, Imag

@noindent
@example
Imag(@var{Z})
@end example

@noindent
Imag: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{Z}.

@noindent
@var{Z}: @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

The imaginary part of @var{Z} is returned, without conversion.

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

The advantage of @code{IMAG()} 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.

@end ifset
@ifset familyGNU
@node ImagPart Intrinsic
@subsubsection ImagPart Intrinsic
@cindex ImagPart intrinsic
@cindex intrinsics, ImagPart

@noindent
@example
ImagPart(@var{Z})
@end example

@noindent
ImagPart: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{Z}.

@noindent
@var{Z}: @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{gnu}.

@noindent
Description:

The imaginary part of @var{Z} is returned, without conversion.

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

The advantage of @code{IMAGPART()} 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.

@end ifset
@ifset familyVXT
@node IMax0 Intrinsic
@subsubsection IMax0 Intrinsic
@cindex IMax0 intrinsic
@cindex intrinsics, IMax0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IMax0} to use this name for an
external procedure.

@node IMax1 Intrinsic
@subsubsection IMax1 Intrinsic
@cindex IMax1 intrinsic
@cindex intrinsics, IMax1

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IMax1} to use this name for an
external procedure.

@node IMin0 Intrinsic
@subsubsection IMin0 Intrinsic
@cindex IMin0 intrinsic
@cindex intrinsics, IMin0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IMin0} to use this name for an
external procedure.

@node IMin1 Intrinsic
@subsubsection IMin1 Intrinsic
@cindex IMin1 intrinsic
@cindex intrinsics, IMin1

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IMin1} to use this name for an
external procedure.

@node IMod Intrinsic
@subsubsection IMod Intrinsic
@cindex IMod intrinsic
@cindex intrinsics, IMod

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IMod} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Index Intrinsic
@subsubsection Index Intrinsic
@cindex Index intrinsic
@cindex intrinsics, Index

@noindent
@example
Index(@var{String}, @var{Substring})
@end example

@noindent
Index: @code{INTEGER(KIND=1)} function.

@noindent
@var{String}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Substring}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the position of the start of the first occurrence of string
@var{Substring} as a substring in @var{String}, counting from one.
If @var{Substring} doesn't occur in @var{String}, zero is returned.

@end ifset
@ifset familyVXT
@node INInt Intrinsic
@subsubsection INInt Intrinsic
@cindex INInt intrinsic
@cindex intrinsics, INInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL INInt} to use this name for an
external procedure.

@node INot Intrinsic
@subsubsection INot Intrinsic
@cindex INot intrinsic
@cindex intrinsics, INot

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL INot} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Int Intrinsic
@subsubsection Int Intrinsic
@cindex Int intrinsic
@cindex intrinsics, Int

@noindent
@example
Int(@var{A})
@end example

@noindent
Int: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @var{A} with the fractional portion of its
magnitude truncated and its sign preserved, converted
to type @code{INTEGER(KIND=1)}.

If @var{A} 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.

@end ifset
@ifset familyGNU
@node Int2 Intrinsic
@subsubsection Int2 Intrinsic
@cindex Int2 intrinsic
@cindex intrinsics, Int2

@noindent
@example
Int2(@var{A})
@end example

@noindent
Int2: @code{INTEGER(KIND=6)} function.

@noindent
@var{A}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{gnu}.

@noindent
Description:

Returns @var{A} with the fractional portion of its
magnitude truncated and its sign preserved, converted
to type @code{INTEGER(KIND=6)}.

If @var{A} 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.

@node Int8 Intrinsic
@subsubsection Int8 Intrinsic
@cindex Int8 intrinsic
@cindex intrinsics, Int8

@noindent
@example
Int8(@var{A})
@end example

@noindent
Int8: @code{INTEGER(KIND=2)} function.

@noindent
@var{A}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{gnu}.

@noindent
Description:

Returns @var{A} with the fractional portion of its
magnitude truncated and its sign preserved, converted
to type @code{INTEGER(KIND=2)}.

If @var{A} 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.

@end ifset
@ifset familyMIL
@node IOr Intrinsic
@subsubsection IOr Intrinsic
@cindex IOr intrinsic
@cindex intrinsics, IOr

@noindent
@example
IOr(@var{I}, @var{J})
@end example

@noindent
IOr: @code{INTEGER} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{J}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Returns value resulting from boolean OR of
pair of bits in each of @var{I} and @var{J}.

@end ifset
@ifset familyF2U
@node IRand Intrinsic
@subsubsection IRand Intrinsic
@cindex IRand intrinsic
@cindex intrinsics, IRand

@noindent
@example
IRand(@var{Flag})
@end example

@noindent
IRand: @code{INTEGER(KIND=1)} function.

@noindent
@var{Flag}: @code{INTEGER}; OPTIONAL; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns a uniform quasi-random number up to a system-dependent limit.
If @var{Flag} is 0, the next number in sequence is returned; if
@var{Flag} is 1, the generator is restarted by calling the UNIX function
@samp{srand(0)}; if @var{Flag} 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.

@node IsaTty Intrinsic
@subsubsection IsaTty Intrinsic
@cindex IsaTty intrinsic
@cindex intrinsics, IsaTty

@noindent
@example
IsaTty(@var{Unit})
@end example

@noindent
IsaTty: @code{LOGICAL(KIND=1)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns @code{.TRUE.} if and only if the Fortran I/O unit
specified by @var{Unit} is connected
to a terminal device.
See @code{isatty(3)}.

@end ifset
@ifset familyMIL
@node IShft Intrinsic
@subsubsection IShft Intrinsic
@cindex IShft intrinsic
@cindex intrinsics, IShft

@noindent
@example
IShft(@var{I}, @var{Shift})
@end example

@noindent
IShft: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Shift}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

All bits representing @var{I} are shifted @var{Shift} places.
@samp{@var{Shift}.GT.0} indicates a left shift, @samp{@var{Shift}.EQ.0}
indicates no shift and @samp{@var{Shift}.LT.0} indicates a right shift.
If the absolute value of the shift count is greater than
@samp{BIT_SIZE(@var{I})}, the result is undefined.
Bits shifted out from the left end or the right end, as the case may be,
are lost.
Zeros are shifted in from the opposite end.

@xref{IShftC Intrinsic} for the circular-shift equivalent.

@node IShftC Intrinsic
@subsubsection IShftC Intrinsic
@cindex IShftC intrinsic
@cindex intrinsics, IShftC

@noindent
@example
IShftC(@var{I}, @var{Shift}, @var{Size})
@end example

@noindent
IShftC: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Shift}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Size}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

The rightmost @var{Size} bits of the argument @var{I}
are shifted circularly @var{Shift}
places, i.e.@ the bits shifted out of one end are shifted into 
the opposite end.
No bits are lost.
The unshifted bits of the result are the same as
the unshifted bits of @var{I}.
The  absolute value of the argument @var{Shift}
must be less than or equal to @var{Size}.  
The value of @var{Size} must be greater than or equal to one and less than 
or equal to @samp{BIT_SIZE(@var{I})}.

@xref{IShft Intrinsic} for the logical shift equivalent.

@end ifset
@ifset familyF77
@node ISign Intrinsic
@subsubsection ISign Intrinsic
@cindex ISign intrinsic
@cindex intrinsics, ISign

@noindent
@example
ISign(@var{A}, @var{B})
@end example

@noindent
ISign: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
@var{B}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{ISIGN()} that is specific
to one type for @var{A} and @var{B}.
@xref{ISign Intrinsic}.

@end ifset
@ifset familyF2U
@node ITime Intrinsic
@subsubsection ITime Intrinsic
@cindex ITime intrinsic
@cindex intrinsics, ITime

@noindent
@example
CALL ITime(@var{TArray})
@end example

@noindent
@var{TArray}: @code{INTEGER(KIND=1)}; DIMENSION(3); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the current local time hour, minutes, and seconds in elements
1, 2, and 3 of @var{TArray}, respectively.

@end ifset
@ifset familyVXT
@node IZExt Intrinsic
@subsubsection IZExt Intrinsic
@cindex IZExt intrinsic
@cindex intrinsics, IZExt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL IZExt} to use this name for an
external procedure.

@node JIAbs Intrinsic
@subsubsection JIAbs Intrinsic
@cindex JIAbs intrinsic
@cindex intrinsics, JIAbs

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIAbs} to use this name for an
external procedure.

@node JIAnd Intrinsic
@subsubsection JIAnd Intrinsic
@cindex JIAnd intrinsic
@cindex intrinsics, JIAnd

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIAnd} to use this name for an
external procedure.

@node JIBClr Intrinsic
@subsubsection JIBClr Intrinsic
@cindex JIBClr intrinsic
@cindex intrinsics, JIBClr

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIBClr} to use this name for an
external procedure.

@node JIBits Intrinsic
@subsubsection JIBits Intrinsic
@cindex JIBits intrinsic
@cindex intrinsics, JIBits

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIBits} to use this name for an
external procedure.

@node JIBSet Intrinsic
@subsubsection JIBSet Intrinsic
@cindex JIBSet intrinsic
@cindex intrinsics, JIBSet

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIBSet} to use this name for an
external procedure.

@node JIDiM Intrinsic
@subsubsection JIDiM Intrinsic
@cindex JIDiM intrinsic
@cindex intrinsics, JIDiM

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIDiM} to use this name for an
external procedure.

@node JIDInt Intrinsic
@subsubsection JIDInt Intrinsic
@cindex JIDInt intrinsic
@cindex intrinsics, JIDInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIDInt} to use this name for an
external procedure.

@node JIDNnt Intrinsic
@subsubsection JIDNnt Intrinsic
@cindex JIDNnt intrinsic
@cindex intrinsics, JIDNnt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIDNnt} to use this name for an
external procedure.

@node JIEOr Intrinsic
@subsubsection JIEOr Intrinsic
@cindex JIEOr intrinsic
@cindex intrinsics, JIEOr

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIEOr} to use this name for an
external procedure.

@node JIFix Intrinsic
@subsubsection JIFix Intrinsic
@cindex JIFix intrinsic
@cindex intrinsics, JIFix

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIFix} to use this name for an
external procedure.

@node JInt Intrinsic
@subsubsection JInt Intrinsic
@cindex JInt intrinsic
@cindex intrinsics, JInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JInt} to use this name for an
external procedure.

@node JIOr Intrinsic
@subsubsection JIOr Intrinsic
@cindex JIOr intrinsic
@cindex intrinsics, JIOr

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIOr} to use this name for an
external procedure.

@node JIQint Intrinsic
@subsubsection JIQint Intrinsic
@cindex JIQint intrinsic
@cindex intrinsics, JIQint

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIQint} to use this name for an
external procedure.

@node JIQNnt Intrinsic
@subsubsection JIQNnt Intrinsic
@cindex JIQNnt intrinsic
@cindex intrinsics, JIQNnt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIQNnt} to use this name for an
external procedure.

@node JIShft Intrinsic
@subsubsection JIShft Intrinsic
@cindex JIShft intrinsic
@cindex intrinsics, JIShft

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIShft} to use this name for an
external procedure.

@node JIShftC Intrinsic
@subsubsection JIShftC Intrinsic
@cindex JIShftC intrinsic
@cindex intrinsics, JIShftC

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JIShftC} to use this name for an
external procedure.

@node JISign Intrinsic
@subsubsection JISign Intrinsic
@cindex JISign intrinsic
@cindex intrinsics, JISign

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JISign} to use this name for an
external procedure.

@node JMax0 Intrinsic
@subsubsection JMax0 Intrinsic
@cindex JMax0 intrinsic
@cindex intrinsics, JMax0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JMax0} to use this name for an
external procedure.

@node JMax1 Intrinsic
@subsubsection JMax1 Intrinsic
@cindex JMax1 intrinsic
@cindex intrinsics, JMax1

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JMax1} to use this name for an
external procedure.

@node JMin0 Intrinsic
@subsubsection JMin0 Intrinsic
@cindex JMin0 intrinsic
@cindex intrinsics, JMin0

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JMin0} to use this name for an
external procedure.

@node JMin1 Intrinsic
@subsubsection JMin1 Intrinsic
@cindex JMin1 intrinsic
@cindex intrinsics, JMin1

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JMin1} to use this name for an
external procedure.

@node JMod Intrinsic
@subsubsection JMod Intrinsic
@cindex JMod intrinsic
@cindex intrinsics, JMod

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JMod} to use this name for an
external procedure.

@node JNInt Intrinsic
@subsubsection JNInt Intrinsic
@cindex JNInt intrinsic
@cindex intrinsics, JNInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JNInt} to use this name for an
external procedure.

@node JNot Intrinsic
@subsubsection JNot Intrinsic
@cindex JNot intrinsic
@cindex intrinsics, JNot

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JNot} to use this name for an
external procedure.

@node JZExt Intrinsic
@subsubsection JZExt Intrinsic
@cindex JZExt intrinsic
@cindex intrinsics, JZExt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL JZExt} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Kill Intrinsic (subroutine)
@subsubsection Kill Intrinsic (subroutine)
@cindex Kill intrinsic
@cindex intrinsics, Kill

@noindent
@example
CALL Kill(@var{Pid}, @var{Signal}, @var{Status})
@end example

@noindent
@var{Pid}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Signal}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sends the signal specified by @var{Signal} to the process @var{Pid}.
If the @var{Status} 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{Status} argument.

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

@end ifset
@ifset familyBADU77
@node Kill Intrinsic (function)
@subsubsection Kill Intrinsic (function)
@cindex Kill intrinsic
@cindex intrinsics, Kill

@noindent
@example
Kill(@var{Pid}, @var{Signal})
@end example

@noindent
Kill: @code{INTEGER(KIND=1)} function.

@noindent
@var{Pid}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Signal}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Sends the signal specified by @var{Signal} to the process @var{Pid}.
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.

For information on other intrinsics with the same name:
@xref{Kill Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node Kind Intrinsic
@subsubsection Kind Intrinsic
@cindex Kind intrinsic
@cindex intrinsics, Kind

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Kind} to use this name for an
external procedure.

@node LBound Intrinsic
@subsubsection LBound Intrinsic
@cindex LBound intrinsic
@cindex intrinsics, LBound

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL LBound} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Len Intrinsic
@subsubsection Len Intrinsic
@cindex Len intrinsic
@cindex intrinsics, Len

@noindent
@example
Len(@var{String})
@end example

@noindent
Len: @code{INTEGER(KIND=1)} function.

@noindent
@var{String}: @code{CHARACTER}; scalar.

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the length of @var{String}.

If @var{String} is an array, the length of an element
of @var{String} is returned.

Note that @var{String} need not be defined when this
intrinsic is invoked, since only the length, not
the content, of @var{String} is needed.

@xref{Bit_Size Intrinsic}, for the function that determines
the size of its argument in bits.

@end ifset
@ifset familyF90
@node Len_Trim Intrinsic
@subsubsection Len_Trim Intrinsic
@cindex Len_Trim intrinsic
@cindex intrinsics, Len_Trim

@noindent
@example
Len_Trim(@var{String})
@end example

@noindent
Len_Trim: @code{INTEGER(KIND=1)} function.

@noindent
@var{String}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f90}.

@noindent
Description:

Returns the index of the last non-blank character in @var{String}.
@code{LNBLNK} and @code{LEN_TRIM} are equivalent.

@end ifset
@ifset familyF77
@node LGe Intrinsic
@subsubsection LGe Intrinsic
@cindex LGe intrinsic
@cindex intrinsics, LGe

@noindent
@example
LGe(@var{String_A}, @var{String_B})
@end example

@noindent
LGe: @code{LOGICAL(KIND=1)} function.

@noindent
@var{String_A}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{String_B}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{.TRUE.} if @samp{@var{String_A}.GE.@var{String_B}},
@samp{.FALSE.} otherwise.
@var{String_A} and @var{String_B} are interpreted as containing
ASCII character codes.
If either value contains a character not in the ASCII
character set, the result is processor dependent.

If the @var{String_A} and @var{String_B} are not the same length,
the shorter is compared as if spaces were appended to
it to form a value that has the same length as the longer.

The lexical comparison intrinsics @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.}.

@node LGt Intrinsic
@subsubsection LGt Intrinsic
@cindex LGt intrinsic
@cindex intrinsics, LGt

@noindent
@example
LGt(@var{String_A}, @var{String_B})
@end example

@noindent
LGt: @code{LOGICAL(KIND=1)} function.

@noindent
@var{String_A}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{String_B}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{.TRUE.} if @samp{@var{String_A}.GT.@var{String_B}},
@samp{.FALSE.} otherwise.
@var{String_A} and @var{String_B} are interpreted as containing
ASCII character codes.
If either value contains a character not in the ASCII
character set, the result is processor dependent.

If the @var{String_A} and @var{String_B} are not the same length,
the shorter is compared as if spaces were appended to
it to form a value that has the same length as the longer.

@xref{LGe Intrinsic}, for information on the distinction
between the @code{LGT} intrinsic and the @code{.GT.}
operator.

@end ifset
@ifset familyF2U
@node Link Intrinsic (subroutine)
@subsubsection Link Intrinsic (subroutine)
@cindex Link intrinsic
@cindex intrinsics, Link

@noindent
@example
CALL Link(@var{Path1}, @var{Path2}, @var{Status})
@end example

@noindent
@var{Path1}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Path2}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Makes a (hard) link from file @var{Path1} to @var{Path2}.
A null character (@samp{CHAR(0)}) marks the end of
the names in @var{Path1} and @var{Path2}---otherwise,
trailing blanks in @var{Path1} and @var{Path2} are ignored.
If the @var{Status} 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{Status} argument.

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

@end ifset
@ifset familyBADU77
@node Link Intrinsic (function)
@subsubsection Link Intrinsic (function)
@cindex Link intrinsic
@cindex intrinsics, Link

@noindent
@example
Link(@var{Path1}, @var{Path2})
@end example

@noindent
Link: @code{INTEGER(KIND=1)} function.

@noindent
@var{Path1}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Path2}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Makes a (hard) link from file @var{Path1} to @var{Path2}.
A null character (@samp{CHAR(0)}) marks the end of
the names in @var{Path1} and @var{Path2}---otherwise,
trailing blanks in @var{Path1} and @var{Path2} 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.

For information on other intrinsics with the same name:
@xref{Link Intrinsic (subroutine)}.

@end ifset
@ifset familyF77
@node LLe Intrinsic
@subsubsection LLe Intrinsic
@cindex LLe intrinsic
@cindex intrinsics, LLe

@noindent
@example
LLe(@var{String_A}, @var{String_B})
@end example

@noindent
LLe: @code{LOGICAL(KIND=1)} function.

@noindent
@var{String_A}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{String_B}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{.TRUE.} if @samp{@var{String_A}.LE.@var{String_B}},
@samp{.FALSE.} otherwise.
@var{String_A} and @var{String_B} are interpreted as containing
ASCII character codes.
If either value contains a character not in the ASCII
character set, the result is processor dependent.

If the @var{String_A} and @var{String_B} are not the same length,
the shorter is compared as if spaces were appended to
it to form a value that has the same length as the longer.

@xref{LGe Intrinsic}, for information on the distinction
between the @code{LLE} intrinsic and the @code{.LE.}
operator.

@node LLt Intrinsic
@subsubsection LLt Intrinsic
@cindex LLt intrinsic
@cindex intrinsics, LLt

@noindent
@example
LLt(@var{String_A}, @var{String_B})
@end example

@noindent
LLt: @code{LOGICAL(KIND=1)} function.

@noindent
@var{String_A}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{String_B}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{.TRUE.} if @samp{@var{String_A}.LT.@var{String_B}},
@samp{.FALSE.} otherwise.
@var{String_A} and @var{String_B} are interpreted as containing
ASCII character codes.
If either value contains a character not in the ASCII
character set, the result is processor dependent.

If the @var{String_A} and @var{String_B} are not the same length,
the shorter is compared as if spaces were appended to
it to form a value that has the same length as the longer.

@xref{LGe Intrinsic}, for information on the distinction
between the @code{LLT} intrinsic and the @code{.LT.}
operator.

@end ifset
@ifset familyF2U
@node LnBlnk Intrinsic
@subsubsection LnBlnk Intrinsic
@cindex LnBlnk intrinsic
@cindex intrinsics, LnBlnk

@noindent
@example
LnBlnk(@var{String})
@end example

@noindent
LnBlnk: @code{INTEGER(KIND=1)} function.

@noindent
@var{String}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the index of the last non-blank character in @var{String}.
@code{LNBLNK} and @code{LEN_TRIM} are equivalent.

@node Loc Intrinsic
@subsubsection Loc Intrinsic
@cindex Loc intrinsic
@cindex intrinsics, Loc

@noindent
@example
Loc(@var{Entity})
@end example

@noindent
Loc: @code{INTEGER(KIND=0)} function.

@noindent
@var{Entity}: Any type; cannot be a constant or expression.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

The @code{LOC()} intrinsic works the
same way as the @code{%LOC()} construct.
@xref{%LOC(),,The @code{%LOC()} Construct}, for
more information.

@end ifset
@ifset familyF77
@node Log Intrinsic
@subsubsection Log Intrinsic
@cindex Log intrinsic
@cindex intrinsics, Log

@noindent
@example
Log(@var{X})
@end example

@noindent
Log: @code{REAL} or @code{COMPLEX} function, the exact type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL} or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the natural logarithm of @var{X}, 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 base-10 logarithm function.

@node Log10 Intrinsic
@subsubsection Log10 Intrinsic
@cindex Log10 intrinsic
@cindex intrinsics, Log10

@noindent
@example
Log10(@var{X})
@end example

@noindent
Log10: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the natural logarithm of @var{X}, which must
be greater than zero or, if type @code{COMPLEX}, must not
be zero.

The inverse of this function is @samp{10. ** LOG10(@var{X})}.

@xref{Log Intrinsic}, for the natural logarithm function.

@end ifset
@ifset familyF90
@node Logical Intrinsic
@subsubsection Logical Intrinsic
@cindex Logical intrinsic
@cindex intrinsics, Logical

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Logical} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Long Intrinsic
@subsubsection Long Intrinsic
@cindex Long intrinsic
@cindex intrinsics, Long

@noindent
@example
Long(@var{A})
@end example

@noindent
Long: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=6)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Archaic form of @code{INT()} that is specific
to one type for @var{A}.
@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.

@end ifset
@ifset familyF2C
@node LShift Intrinsic
@subsubsection LShift Intrinsic
@cindex LShift intrinsic
@cindex intrinsics, LShift

@noindent
@example
LShift(@var{I}, @var{Shift})
@end example

@noindent
LShift: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Shift}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Returns @var{I} shifted to the left
@var{Shift} bits.

Although similar to the expression
@samp{@var{I}*(2**@var{Shift})}, there
are important differences.
For example, the sign of the result is
not necessarily the same as the sign of
@var{I}.

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

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

@end ifset
@ifset familyF2U
@node LStat Intrinsic (subroutine)
@subsubsection LStat Intrinsic (subroutine)
@cindex LStat intrinsic
@cindex intrinsics, LStat

@noindent
@example
CALL LStat(@var{File}, @var{SArray}, @var{Status})
@end example

@noindent
@var{File}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{SArray}: @code{INTEGER(KIND=1)}; DIMENSION(13); INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Obtains data about the given file @var{File} and places them in the array
@var{SArray}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{File}---otherwise,
trailing blanks in @var{File} are ignored.
If @var{File} is a symbolic link it returns data on the
link itself, so the routine is available only on systems that support
symbolic links.
The values in this array are extracted from the
@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:

@enumerate
@item
File mode

@item
Inode number

@item
ID of device containing directory entry for file

@item
Device id (if relevant)

@item
Number of links

@item
Owner's uid

@item
Owner's gid

@item
File size (bytes)

@item
Last access time

@item
Last modification time

@item
Last file status change time

@item
Preferred I/O block size

@item
Number of blocks allocated
@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{Status} 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{Status} argument.

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

@node LStat Intrinsic (function)
@subsubsection LStat Intrinsic (function)
@cindex LStat intrinsic
@cindex intrinsics, LStat

@noindent
@example
LStat(@var{File}, @var{SArray})
@end example

@noindent
LStat: @code{INTEGER(KIND=1)} function.

@noindent
@var{File}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{SArray}: @code{INTEGER(KIND=1)}; DIMENSION(13); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Obtains data about the given file @var{File} and places them in the array
@var{SArray}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{File}---otherwise,
trailing blanks in @var{File} are ignored.
If @var{File} is a symbolic link it returns data on the
link itself, so the routine is available only on systems that support
symbolic links.
The values in this array are extracted from the
@code{stat} structure as returned by @code{fstat(2)} q.v., as follows:

@enumerate
@item
File mode

@item
Inode number

@item
ID of device containing directory entry for file

@item
Device id (if relevant)

@item
Number of links

@item
Owner's uid

@item
Owner's gid

@item
File size (bytes)

@item
Last access time

@item
Last modification time

@item
Last file status change time

@item
Preferred I/O block size

@item
Number of blocks allocated
@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)}).

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

@node LTime Intrinsic
@subsubsection LTime Intrinsic
@cindex LTime intrinsic
@cindex intrinsics, LTime

@noindent
@example
CALL LTime(@var{STime}, @var{TArray})
@end example

@noindent
@var{STime}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
@var{TArray}: @code{INTEGER(KIND=1)}; DIMENSION(9); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Given a system time value @var{STime}, fills @var{TArray} 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

@end ifset
@ifset familyF90
@node MatMul Intrinsic
@subsubsection MatMul Intrinsic
@cindex MatMul intrinsic
@cindex intrinsics, MatMul

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MatMul} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Max Intrinsic
@subsubsection Max Intrinsic
@cindex Max intrinsic
@cindex intrinsics, Max

@noindent
@example
Max(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
Max: @code{INTEGER} or @code{REAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{A}: @code{INTEGER} or @code{REAL}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the argument with the largest value.

@xref{Min Intrinsic}, for the opposite function.

@node Max0 Intrinsic
@subsubsection Max0 Intrinsic
@cindex Max0 intrinsic
@cindex intrinsics, Max0

@noindent
@example
Max0(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
Max0: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MAX()} that is specific
to one type for @var{A}.
@xref{Max Intrinsic}.

@node Max1 Intrinsic
@subsubsection Max1 Intrinsic
@cindex Max1 intrinsic
@cindex intrinsics, Max1

@noindent
@example
Max1(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
Max1: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MAX()} that is specific
to one type for @var{A} and a different return type.
@xref{Max Intrinsic}.

@end ifset
@ifset familyF90
@node MaxExponent Intrinsic
@subsubsection MaxExponent Intrinsic
@cindex MaxExponent intrinsic
@cindex intrinsics, MaxExponent

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MaxExponent} to use this name for an
external procedure.

@node MaxLoc Intrinsic
@subsubsection MaxLoc Intrinsic
@cindex MaxLoc intrinsic
@cindex intrinsics, MaxLoc

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MaxLoc} to use this name for an
external procedure.

@node MaxVal Intrinsic
@subsubsection MaxVal Intrinsic
@cindex MaxVal intrinsic
@cindex intrinsics, MaxVal

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MaxVal} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node MClock Intrinsic
@subsubsection MClock Intrinsic
@cindex MClock intrinsic
@cindex intrinsics, MClock

@noindent
@example
MClock()
@end example

@noindent
MClock: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the number of clock ticks since the start of the process.
Supported on systems with @code{clock(3)} (q.v.).

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

@node MClock8 Intrinsic
@subsubsection MClock8 Intrinsic
@cindex MClock8 intrinsic
@cindex intrinsics, MClock8

@noindent
@example
MClock8()
@end example

@noindent
MClock8: @code{INTEGER(KIND=2)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the number of clock ticks since the start of the process.
Supported on systems with @code{clock(3)} (q.v.).

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.

@end ifset
@ifset familyF90
@node Merge Intrinsic
@subsubsection Merge Intrinsic
@cindex Merge intrinsic
@cindex intrinsics, Merge

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Merge} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Min Intrinsic
@subsubsection Min Intrinsic
@cindex Min intrinsic
@cindex intrinsics, Min

@noindent
@example
Min(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
Min: @code{INTEGER} or @code{REAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{A}: @code{INTEGER} or @code{REAL}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the argument with the smallest value.

@xref{Max Intrinsic}, for the opposite function.

@node Min0 Intrinsic
@subsubsection Min0 Intrinsic
@cindex Min0 intrinsic
@cindex intrinsics, Min0

@noindent
@example
Min0(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
Min0: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{INTEGER(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MIN()} that is specific
to one type for @var{A}.
@xref{Min Intrinsic}.

@node Min1 Intrinsic
@subsubsection Min1 Intrinsic
@cindex Min1 intrinsic
@cindex intrinsics, Min1

@noindent
@example
Min1(@var{A}-1, @var{A}-2, @dots{}, @var{A}-n)
@end example

@noindent
Min1: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=1)}; at least two such arguments must be provided; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{MIN()} that is specific
to one type for @var{A} and a different return type.
@xref{Min Intrinsic}.

@end ifset
@ifset familyF90
@node MinExponent Intrinsic
@subsubsection MinExponent Intrinsic
@cindex MinExponent intrinsic
@cindex intrinsics, MinExponent

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MinExponent} to use this name for an
external procedure.

@node MinLoc Intrinsic
@subsubsection MinLoc Intrinsic
@cindex MinLoc intrinsic
@cindex intrinsics, MinLoc

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MinLoc} to use this name for an
external procedure.

@node MinVal Intrinsic
@subsubsection MinVal Intrinsic
@cindex MinVal intrinsic
@cindex intrinsics, MinVal

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL MinVal} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Mod Intrinsic
@subsubsection Mod Intrinsic
@cindex Mod intrinsic
@cindex intrinsics, Mod

@noindent
@example
Mod(@var{A}, @var{P})
@end example

@noindent
Mod: @code{INTEGER} or @code{REAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{A}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
@var{P}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns remainder calculated as:

@smallexample
@var{A} - (INT(@var{A} / @var{P}) * @var{P})
@end smallexample

@var{P} must not be zero.

@end ifset
@ifset familyF90
@node Modulo Intrinsic
@subsubsection Modulo Intrinsic
@cindex Modulo intrinsic
@cindex intrinsics, Modulo

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Modulo} to use this name for an
external procedure.

@end ifset
@ifset familyMIL
@node MvBits Intrinsic
@subsubsection MvBits Intrinsic
@cindex MvBits intrinsic
@cindex intrinsics, MvBits

@noindent
@example
CALL MvBits(@var{From}, @var{FromPos}, @var{Len}, @var{TO}, @var{ToPos})
@end example

@noindent
@var{From}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{FromPos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Len}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{TO}: @code{INTEGER} with same @samp{KIND=} value as for @var{From}; scalar; INTENT(INOUT).

@noindent
@var{ToPos}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Moves @var{Len} bits from positions @var{FromPos} through
@samp{@var{FromPos}+@var{Len}-1} of @var{From} to positions @var{ToPos} through
@samp{@var{FromPos}+@var{Len}-1} of @var{TO}.  The portion of argument
@var{TO} not affected by the movement of bits is unchanged.  Arguments
@var{From} and @var{TO} are permitted to be the same numeric storage
unit.  The values of @samp{@var{FromPos}+@var{Len}} and
@samp{@var{ToPos}+@var{Len}} must be less than or equal to
@samp{BIT_SIZE(@var{From})}.

@end ifset
@ifset familyF90
@node Nearest Intrinsic
@subsubsection Nearest Intrinsic
@cindex Nearest intrinsic
@cindex intrinsics, Nearest

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Nearest} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node NInt Intrinsic
@subsubsection NInt Intrinsic
@cindex NInt intrinsic
@cindex intrinsics, NInt

@noindent
@example
NInt(@var{A})
@end example

@noindent
NInt: @code{INTEGER(KIND=1)} function.

@noindent
@var{A}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @var{A} 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{A} 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.

@end ifset
@ifset familyMIL
@node Not Intrinsic
@subsubsection Not Intrinsic
@cindex Not intrinsic
@cindex intrinsics, Not

@noindent
@example
Not(@var{I})
@end example

@noindent
Not: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{mil}, @code{f90}, @code{vxt}.

@noindent
Description:

Returns value resulting from boolean NOT of each bit
in @var{I}.

@end ifset
@ifset familyF2C
@node Or Intrinsic
@subsubsection Or Intrinsic
@cindex Or intrinsic
@cindex intrinsics, Or

@noindent
@example
Or(@var{I}, @var{J})
@end example

@noindent
Or: @code{INTEGER} or @code{LOGICAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{I}: @code{INTEGER} or @code{LOGICAL}; scalar; INTENT(IN).

@noindent
@var{J}: @code{INTEGER} or @code{LOGICAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Returns value resulting from boolean OR of
pair of bits in each of @var{I} and @var{J}.

@end ifset
@ifset familyF90
@node Pack Intrinsic
@subsubsection Pack Intrinsic
@cindex Pack intrinsic
@cindex intrinsics, Pack

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Pack} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node PError Intrinsic
@subsubsection PError Intrinsic
@cindex PError intrinsic
@cindex intrinsics, PError

@noindent
@example
CALL PError(@var{String})
@end example

@noindent
@var{String}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Prints (on the C @code{stderr} stream) a newline-terminated error
message corresponding to the last system error.
This is prefixed by @var{String}, a colon and a space.
See @code{perror(3)}.

@end ifset
@ifset familyF90
@node Precision Intrinsic
@subsubsection Precision Intrinsic
@cindex Precision intrinsic
@cindex intrinsics, Precision

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Precision} to use this name for an
external procedure.

@node Present Intrinsic
@subsubsection Present Intrinsic
@cindex Present intrinsic
@cindex intrinsics, Present

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Present} to use this name for an
external procedure.

@node Product Intrinsic
@subsubsection Product Intrinsic
@cindex Product intrinsic
@cindex intrinsics, Product

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Product} to use this name for an
external procedure.

@end ifset
@ifset familyVXT
@node QAbs Intrinsic
@subsubsection QAbs Intrinsic
@cindex QAbs intrinsic
@cindex intrinsics, QAbs

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QAbs} to use this name for an
external procedure.

@node QACos Intrinsic
@subsubsection QACos Intrinsic
@cindex QACos intrinsic
@cindex intrinsics, QACos

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QACos} to use this name for an
external procedure.

@node QACosD Intrinsic
@subsubsection QACosD Intrinsic
@cindex QACosD intrinsic
@cindex intrinsics, QACosD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QACosD} to use this name for an
external procedure.

@node QASin Intrinsic
@subsubsection QASin Intrinsic
@cindex QASin intrinsic
@cindex intrinsics, QASin

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QASin} to use this name for an
external procedure.

@node QASinD Intrinsic
@subsubsection QASinD Intrinsic
@cindex QASinD intrinsic
@cindex intrinsics, QASinD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QASinD} to use this name for an
external procedure.

@node QATan Intrinsic
@subsubsection QATan Intrinsic
@cindex QATan intrinsic
@cindex intrinsics, QATan

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QATan} to use this name for an
external procedure.

@node QATan2 Intrinsic
@subsubsection QATan2 Intrinsic
@cindex QATan2 intrinsic
@cindex intrinsics, QATan2

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QATan2} to use this name for an
external procedure.

@node QATan2D Intrinsic
@subsubsection QATan2D Intrinsic
@cindex QATan2D intrinsic
@cindex intrinsics, QATan2D

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QATan2D} to use this name for an
external procedure.

@node QATanD Intrinsic
@subsubsection QATanD Intrinsic
@cindex QATanD intrinsic
@cindex intrinsics, QATanD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QATanD} to use this name for an
external procedure.

@node QCos Intrinsic
@subsubsection QCos Intrinsic
@cindex QCos intrinsic
@cindex intrinsics, QCos

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QCos} to use this name for an
external procedure.

@node QCosD Intrinsic
@subsubsection QCosD Intrinsic
@cindex QCosD intrinsic
@cindex intrinsics, QCosD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QCosD} to use this name for an
external procedure.

@node QCosH Intrinsic
@subsubsection QCosH Intrinsic
@cindex QCosH intrinsic
@cindex intrinsics, QCosH

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QCosH} to use this name for an
external procedure.

@node QDiM Intrinsic
@subsubsection QDiM Intrinsic
@cindex QDiM intrinsic
@cindex intrinsics, QDiM

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QDiM} to use this name for an
external procedure.

@node QExp Intrinsic
@subsubsection QExp Intrinsic
@cindex QExp intrinsic
@cindex intrinsics, QExp

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QExp} to use this name for an
external procedure.

@node QExt Intrinsic
@subsubsection QExt Intrinsic
@cindex QExt intrinsic
@cindex intrinsics, QExt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QExt} to use this name for an
external procedure.

@node QExtD Intrinsic
@subsubsection QExtD Intrinsic
@cindex QExtD intrinsic
@cindex intrinsics, QExtD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QExtD} to use this name for an
external procedure.

@node QFloat Intrinsic
@subsubsection QFloat Intrinsic
@cindex QFloat intrinsic
@cindex intrinsics, QFloat

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QFloat} to use this name for an
external procedure.

@node QInt Intrinsic
@subsubsection QInt Intrinsic
@cindex QInt intrinsic
@cindex intrinsics, QInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QInt} to use this name for an
external procedure.

@node QLog Intrinsic
@subsubsection QLog Intrinsic
@cindex QLog intrinsic
@cindex intrinsics, QLog

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QLog} to use this name for an
external procedure.

@node QLog10 Intrinsic
@subsubsection QLog10 Intrinsic
@cindex QLog10 intrinsic
@cindex intrinsics, QLog10

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QLog10} to use this name for an
external procedure.

@node QMax1 Intrinsic
@subsubsection QMax1 Intrinsic
@cindex QMax1 intrinsic
@cindex intrinsics, QMax1

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QMax1} to use this name for an
external procedure.

@node QMin1 Intrinsic
@subsubsection QMin1 Intrinsic
@cindex QMin1 intrinsic
@cindex intrinsics, QMin1

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QMin1} to use this name for an
external procedure.

@node QMod Intrinsic
@subsubsection QMod Intrinsic
@cindex QMod intrinsic
@cindex intrinsics, QMod

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QMod} to use this name for an
external procedure.

@node QNInt Intrinsic
@subsubsection QNInt Intrinsic
@cindex QNInt intrinsic
@cindex intrinsics, QNInt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QNInt} to use this name for an
external procedure.

@node QSin Intrinsic
@subsubsection QSin Intrinsic
@cindex QSin intrinsic
@cindex intrinsics, QSin

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QSin} to use this name for an
external procedure.

@node QSinD Intrinsic
@subsubsection QSinD Intrinsic
@cindex QSinD intrinsic
@cindex intrinsics, QSinD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QSinD} to use this name for an
external procedure.

@node QSinH Intrinsic
@subsubsection QSinH Intrinsic
@cindex QSinH intrinsic
@cindex intrinsics, QSinH

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QSinH} to use this name for an
external procedure.

@node QSqRt Intrinsic
@subsubsection QSqRt Intrinsic
@cindex QSqRt intrinsic
@cindex intrinsics, QSqRt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QSqRt} to use this name for an
external procedure.

@node QTan Intrinsic
@subsubsection QTan Intrinsic
@cindex QTan intrinsic
@cindex intrinsics, QTan

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QTan} to use this name for an
external procedure.

@node QTanD Intrinsic
@subsubsection QTanD Intrinsic
@cindex QTanD intrinsic
@cindex intrinsics, QTanD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QTanD} to use this name for an
external procedure.

@node QTanH Intrinsic
@subsubsection QTanH Intrinsic
@cindex QTanH intrinsic
@cindex intrinsics, QTanH

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL QTanH} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node Radix Intrinsic
@subsubsection Radix Intrinsic
@cindex Radix intrinsic
@cindex intrinsics, Radix

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Radix} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Rand Intrinsic
@subsubsection Rand Intrinsic
@cindex Rand intrinsic
@cindex intrinsics, Rand

@noindent
@example
Rand(@var{Flag})
@end example

@noindent
Rand: @code{REAL(KIND=1)} function.

@noindent
@var{Flag}: @code{INTEGER}; OPTIONAL; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns a uniform quasi-random number between 0 and 1.
If @var{Flag} is 0, the next number in sequence is returned; if
@var{Flag} is 1, the generator is restarted by calling @samp{srand(0)};
if @var{Flag} 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.

@end ifset
@ifset familyF90
@node Random_Number Intrinsic
@subsubsection Random_Number Intrinsic
@cindex Random_Number intrinsic
@cindex intrinsics, Random_Number

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Random_Number} to use this name for an
external procedure.

@node Random_Seed Intrinsic
@subsubsection Random_Seed Intrinsic
@cindex Random_Seed intrinsic
@cindex intrinsics, Random_Seed

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Random_Seed} to use this name for an
external procedure.

@node Range Intrinsic
@subsubsection Range Intrinsic
@cindex Range intrinsic
@cindex intrinsics, Range

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Range} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node Real Intrinsic
@subsubsection Real Intrinsic
@cindex Real intrinsic
@cindex intrinsics, Real

@noindent
@example
Real(@var{A})
@end example

@noindent
Real: @code{REAL} function.
The exact type is @samp{REAL(KIND=1)} when argument @var{A} is
any type other than @code{COMPLEX}, or when it is @code{COMPLEX(KIND=1)}.
When @var{A} is any @code{COMPLEX} type other than @code{COMPLEX(KIND=1)},
this intrinsic is valid only when used as the argument to
@code{REAL()}, as explained below.

@noindent
@var{A}: @code{INTEGER}, @code{REAL}, or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Converts @var{A} to @code{REAL(KIND=1)}.

Use of @code{REAL()} with a @code{COMPLEX} argument
(other than @code{COMPLEX(KIND=1)}) is restricted to the following case:

@example
REAL(REAL(A))
@end example

@noindent
This expression converts the real part of A 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.

@end ifset
@ifset familyGNU
@node RealPart Intrinsic
@subsubsection RealPart Intrinsic
@cindex RealPart intrinsic
@cindex intrinsics, RealPart

@noindent
@example
RealPart(@var{Z})
@end example

@noindent
RealPart: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{Z}.

@noindent
@var{Z}: @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{gnu}.

@noindent
Description:

The real part of @var{Z} is returned, without conversion.

@emph{Note:} The way to do this in standard Fortran 90
is @samp{REAL(@var{Z})}.
However, when, for example, @var{Z} is @code{COMPLEX(KIND=2)},
@samp{REAL(@var{Z})} means something different for some compilers
that are not true Fortran 90 compilers but offer some
extensions standardized by Fortran 90 (such as the
@code{DOUBLE COMPLEX} type, also known as @code{COMPLEX(KIND=2)}).

The advantage of @code{REALPART()} 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.

@end ifset
@ifset familyF2U
@node Rename Intrinsic (subroutine)
@subsubsection Rename Intrinsic (subroutine)
@cindex Rename intrinsic
@cindex intrinsics, Rename

@noindent
@example
CALL Rename(@var{Path1}, @var{Path2}, @var{Status})
@end example

@noindent
@var{Path1}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Path2}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Renames the file @var{Path1} to @var{Path2}.
A null character (@samp{CHAR(0)}) marks the end of
the names in @var{Path1} and @var{Path2}---otherwise,
trailing blanks in @var{Path1} and @var{Path2} are ignored.
See @code{rename(2)}.
If the @var{Status} argument is supplied, it contains
0 on success or a non-zero error code upon return.

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

For information on other intrinsics with the same name:
@xref{Rename Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node Rename Intrinsic (function)
@subsubsection Rename Intrinsic (function)
@cindex Rename intrinsic
@cindex intrinsics, Rename

@noindent
@example
Rename(@var{Path1}, @var{Path2})
@end example

@noindent
Rename: @code{INTEGER(KIND=1)} function.

@noindent
@var{Path1}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Path2}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Renames the file @var{Path1} to @var{Path2}.
A null character (@samp{CHAR(0)}) marks the end of
the names in @var{Path1} and @var{Path2}---otherwise,
trailing blanks in @var{Path1} and @var{Path2} 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.

For information on other intrinsics with the same name:
@xref{Rename Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node Repeat Intrinsic
@subsubsection Repeat Intrinsic
@cindex Repeat intrinsic
@cindex intrinsics, Repeat

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Repeat} to use this name for an
external procedure.

@node Reshape Intrinsic
@subsubsection Reshape Intrinsic
@cindex Reshape intrinsic
@cindex intrinsics, Reshape

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Reshape} to use this name for an
external procedure.

@node RRSpacing Intrinsic
@subsubsection RRSpacing Intrinsic
@cindex RRSpacing intrinsic
@cindex intrinsics, RRSpacing

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL RRSpacing} to use this name for an
external procedure.

@end ifset
@ifset familyF2C
@node RShift Intrinsic
@subsubsection RShift Intrinsic
@cindex RShift intrinsic
@cindex intrinsics, RShift

@noindent
@example
RShift(@var{I}, @var{Shift})
@end example

@noindent
RShift: @code{INTEGER} function, the @samp{KIND=} value of the type being that of argument @var{I}.

@noindent
@var{I}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Shift}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Returns @var{I} shifted to the right
@var{Shift} bits.

Although similar to the expression
@samp{@var{I}/(2**@var{Shift})}, there
are important differences.
For example, the sign of the result is
undefined.

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

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

@end ifset
@ifset familyF90
@node Scale Intrinsic
@subsubsection Scale Intrinsic
@cindex Scale intrinsic
@cindex intrinsics, Scale

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Scale} to use this name for an
external procedure.

@node Scan Intrinsic
@subsubsection Scan Intrinsic
@cindex Scan intrinsic
@cindex intrinsics, Scan

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Scan} to use this name for an
external procedure.

@end ifset
@ifset familyVXT
@node Secnds Intrinsic
@subsubsection Secnds Intrinsic
@cindex Secnds intrinsic
@cindex intrinsics, Secnds

@noindent
@example
Secnds(@var{T})
@end example

@noindent
Secnds: @code{REAL(KIND=1)} function.

@noindent
@var{T}: @code{REAL(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{vxt}.

@noindent
Description:

Returns the local time in seconds since midnight minus the value
@var{T}.

@end ifset
@ifset familyF2U
@node Second Intrinsic (function)
@subsubsection Second Intrinsic (function)
@cindex Second intrinsic
@cindex intrinsics, Second

@noindent
@example
Second()
@end example

@noindent
Second: @code{REAL(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the process's runtime in seconds---the same value as the
UNIX function @code{etime} returns.

This routine is known from Cray Fortran.

For information on other intrinsics with the same name:
@xref{Second Intrinsic (subroutine)}.

@node Second Intrinsic (subroutine)
@subsubsection Second Intrinsic (subroutine)
@cindex Second intrinsic
@cindex intrinsics, Second

@noindent
@example
CALL Second(@var{Seconds})
@end example

@noindent
@var{Seconds}: @code{REAL(KIND=1)}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the process's runtime in seconds in @var{Seconds}---the same value
as the UNIX function @code{etime} returns.

This routine is known from Cray Fortran.  @xref{Cpu_Time Intrinsic}
for a standard equivalent.

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

@end ifset
@ifset familyF90
@node Selected_Int_Kind Intrinsic
@subsubsection Selected_Int_Kind Intrinsic
@cindex Selected_Int_Kind intrinsic
@cindex intrinsics, Selected_Int_Kind

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Selected_Int_Kind} to use this name for an
external procedure.

@node Selected_Real_Kind Intrinsic
@subsubsection Selected_Real_Kind Intrinsic
@cindex Selected_Real_Kind intrinsic
@cindex intrinsics, Selected_Real_Kind

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Selected_Real_Kind} to use this name for an
external procedure.

@node Set_Exponent Intrinsic
@subsubsection Set_Exponent Intrinsic
@cindex Set_Exponent intrinsic
@cindex intrinsics, Set_Exponent

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Set_Exponent} to use this name for an
external procedure.

@node Shape Intrinsic
@subsubsection Shape Intrinsic
@cindex Shape intrinsic
@cindex intrinsics, Shape

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Shape} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node Short Intrinsic
@subsubsection Short Intrinsic
@cindex Short intrinsic
@cindex intrinsics, Short

@noindent
@example
Short(@var{A})
@end example

@noindent
Short: @code{INTEGER(KIND=6)} function.

@noindent
@var{A}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns @var{A} with the fractional portion of its
magnitude truncated and its sign preserved, converted
to type @code{INTEGER(KIND=6)}.

If @var{A} 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.

@end ifset
@ifset familyF77
@node Sign Intrinsic
@subsubsection Sign Intrinsic
@cindex Sign intrinsic
@cindex intrinsics, Sign

@noindent
@example
Sign(@var{A}, @var{B})
@end example

@noindent
Sign: @code{INTEGER} or @code{REAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{A}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
@var{B}: @code{INTEGER} or @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns @samp{ABS(@var{A})*@var{s}}, where
@var{s} is +1 if @samp{@var{B}.GE.0},
-1 otherwise.

@xref{Abs Intrinsic}, for the function that returns
the magnitude of a value.

@end ifset
@ifset familyF2U
@node Signal Intrinsic (subroutine)
@subsubsection Signal Intrinsic (subroutine)
@cindex Signal intrinsic
@cindex intrinsics, Signal

@noindent
@example
CALL Signal(@var{Number}, @var{Handler}, @var{Status})
@end example

@noindent
@var{Number}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Handler}: Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})
or dummy/global @code{INTEGER(KIND=1)} scalar.

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

If @var{Handler} is a an @code{EXTERNAL} routine, arranges for it to be
invoked with a single integer argument (of system-dependent length)
when signal @var{Number} occurs.
If @var{Number} is an integer, it can be
used to turn off handling of signal @var{Handler} or revert to its default
action.
See @code{signal(2)}.

Note that @var{Handler} will be called using C conventions, so its value in
Fortran terms is obtained by applying @code{%LOC()} (or @var{LOC()}) to it.

The value returned by @code{signal(2)} is written to @var{Status}, 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{Status} argument.

For information on other intrinsics with the same name:
@xref{Signal Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node Signal Intrinsic (function)
@subsubsection Signal Intrinsic (function)
@cindex Signal intrinsic
@cindex intrinsics, Signal

@noindent
@example
Signal(@var{Number}, @var{Handler})
@end example

@noindent
Signal: @code{INTEGER(KIND=1)} function.

@noindent
@var{Number}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Handler}: Signal handler (@code{INTEGER FUNCTION} or @code{SUBROUTINE})
or dummy/global @code{INTEGER(KIND=1)} scalar.

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

If @var{Handler} is a an @code{EXTERNAL} routine, arranges for it to be
invoked with a single integer argument (of system-dependent length)
when signal @var{Number} occurs.
If @var{Number} is an integer, it can be
used to turn off handling of signal @var{Handler} or revert to its default
action.
See @code{signal(2)}.

Note that @var{Handler} will be called using C conventions, so its value 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.

For information on other intrinsics with the same name:
@xref{Signal Intrinsic (subroutine)}.

@end ifset
@ifset familyF77
@node Sin Intrinsic
@subsubsection Sin Intrinsic
@cindex Sin intrinsic
@cindex intrinsics, Sin

@noindent
@example
Sin(@var{X})
@end example

@noindent
Sin: @code{REAL} or @code{COMPLEX} function, the exact type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL} or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the sine of @var{X}, an angle measured
in radians.

@xref{ASin Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyVXT
@node SinD Intrinsic
@subsubsection SinD Intrinsic
@cindex SinD intrinsic
@cindex intrinsics, SinD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL SinD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node SinH Intrinsic
@subsubsection SinH Intrinsic
@cindex SinH intrinsic
@cindex intrinsics, SinH

@noindent
@example
SinH(@var{X})
@end example

@noindent
SinH: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the hyperbolic sine of @var{X}.

@end ifset
@ifset familyF2U
@node Sleep Intrinsic
@subsubsection Sleep Intrinsic
@cindex Sleep intrinsic
@cindex intrinsics, Sleep

@noindent
@example
CALL Sleep(@var{Seconds})
@end example

@noindent
@var{Seconds}: @code{INTEGER(KIND=1)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Causes the process to pause for @var{Seconds} seconds.
See @code{sleep(2)}.

@end ifset
@ifset familyF77
@node Sngl Intrinsic
@subsubsection Sngl Intrinsic
@cindex Sngl intrinsic
@cindex intrinsics, Sngl

@noindent
@example
Sngl(@var{A})
@end example

@noindent
Sngl: @code{REAL(KIND=1)} function.

@noindent
@var{A}: @code{REAL(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Archaic form of @code{REAL()} that is specific
to one type for @var{A}.
@xref{Real Intrinsic}.

@end ifset
@ifset familyVXT
@node SnglQ Intrinsic
@subsubsection SnglQ Intrinsic
@cindex SnglQ intrinsic
@cindex intrinsics, SnglQ

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL SnglQ} to use this name for an
external procedure.

@end ifset
@ifset familyF90
@node Spacing Intrinsic
@subsubsection Spacing Intrinsic
@cindex Spacing intrinsic
@cindex intrinsics, Spacing

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Spacing} to use this name for an
external procedure.

@node Spread Intrinsic
@subsubsection Spread Intrinsic
@cindex Spread intrinsic
@cindex intrinsics, Spread

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Spread} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node SqRt Intrinsic
@subsubsection SqRt Intrinsic
@cindex SqRt intrinsic
@cindex intrinsics, SqRt

@noindent
@example
SqRt(@var{X})
@end example

@noindent
SqRt: @code{REAL} or @code{COMPLEX} function, the exact type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL} or @code{COMPLEX}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the square root of @var{X}, 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{X}))}.

The inverse of this function is @samp{SQRT(@var{X}) * SQRT(@var{X})}.

@end ifset
@ifset familyF2U
@node SRand Intrinsic
@subsubsection SRand Intrinsic
@cindex SRand intrinsic
@cindex intrinsics, SRand

@noindent
@example
CALL SRand(@var{Seed})
@end example

@noindent
@var{Seed}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Reinitialises the generator with the seed in @var{Seed}.
@xref{IRand Intrinsic}.
@xref{Rand Intrinsic}.

@node Stat Intrinsic (subroutine)
@subsubsection Stat Intrinsic (subroutine)
@cindex Stat intrinsic
@cindex intrinsics, Stat

@noindent
@example
CALL Stat(@var{File}, @var{SArray}, @var{Status})
@end example

@noindent
@var{File}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{SArray}: @code{INTEGER(KIND=1)}; DIMENSION(13); INTENT(OUT).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Obtains data about the given file @var{File} and places them in the array
@var{SArray}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{File}---otherwise,
trailing blanks in @var{File} 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
File mode

@item
Inode number

@item
ID of device containing directory entry for file

@item
Device id (if relevant)

@item
Number of links

@item
Owner's uid

@item
Owner's gid

@item
File size (bytes)

@item
Last access time

@item
Last modification time

@item
Last file status change time

@item
Preferred I/O block size

@item
Number of blocks allocated
@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{Status} argument is supplied, it contains
0 on success or a non-zero error code upon return.

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

For information on other intrinsics with the same name:
@xref{Stat Intrinsic (function)}.

@node Stat Intrinsic (function)
@subsubsection Stat Intrinsic (function)
@cindex Stat intrinsic
@cindex intrinsics, Stat

@noindent
@example
Stat(@var{File}, @var{SArray})
@end example

@noindent
Stat: @code{INTEGER(KIND=1)} function.

@noindent
@var{File}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{SArray}: @code{INTEGER(KIND=1)}; DIMENSION(13); INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Obtains data about the given file @var{File} and places them in the array
@var{SArray}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{File}---otherwise,
trailing blanks in @var{File} 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
File mode

@item
Inode number

@item
ID of device containing directory entry for file

@item
Device id (if relevant)

@item
Number of links

@item
Owner's uid

@item
Owner's gid

@item
File size (bytes)

@item
Last access time

@item
Last modification time

@item
Last file status change time

@item
Preferred I/O block size

@item
Number of blocks allocated
@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.

For information on other intrinsics with the same name:
@xref{Stat Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node Sum Intrinsic
@subsubsection Sum Intrinsic
@cindex Sum intrinsic
@cindex intrinsics, Sum

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Sum} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node SymLnk Intrinsic (subroutine)
@subsubsection SymLnk Intrinsic (subroutine)
@cindex SymLnk intrinsic
@cindex intrinsics, SymLnk

@noindent
@example
CALL SymLnk(@var{Path1}, @var{Path2}, @var{Status})
@end example

@noindent
@var{Path1}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Path2}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Makes a symbolic link from file @var{Path1} to @var{Path2}.
A null character (@samp{CHAR(0)}) marks the end of
the names in @var{Path1} and @var{Path2}---otherwise,
trailing blanks in @var{Path1} and @var{Path2} are ignored.
If the @var{Status} 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{Status} argument.

For information on other intrinsics with the same name:
@xref{SymLnk Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node SymLnk Intrinsic (function)
@subsubsection SymLnk Intrinsic (function)
@cindex SymLnk intrinsic
@cindex intrinsics, SymLnk

@noindent
@example
SymLnk(@var{Path1}, @var{Path2})
@end example

@noindent
SymLnk: @code{INTEGER(KIND=1)} function.

@noindent
@var{Path1}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Path2}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Makes a symbolic link from file @var{Path1} to @var{Path2}.
A null character (@samp{CHAR(0)}) marks the end of
the names in @var{Path1} and @var{Path2}---otherwise,
trailing blanks in @var{Path1} and @var{Path2} 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.

For information on other intrinsics with the same name:
@xref{SymLnk Intrinsic (subroutine)}.

@end ifset
@ifset familyF2U
@node System Intrinsic (subroutine)
@subsubsection System Intrinsic (subroutine)
@cindex System intrinsic
@cindex intrinsics, System

@noindent
@example
CALL System(@var{Command}, @var{Status})
@end example

@noindent
@var{Command}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Passes the command @var{Command} to a shell (see @code{system(3)}).
If argument @var{Status} is present, it contains the value returned by
@code{system(3)}, 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{Status} argument.

For information on other intrinsics with the same name:
@xref{System Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node System Intrinsic (function)
@subsubsection System Intrinsic (function)
@cindex System intrinsic
@cindex intrinsics, System

@noindent
@example
System(@var{Command})
@end example

@noindent
System: @code{INTEGER(KIND=1)} function.

@noindent
@var{Command}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Passes the command @var{Command} 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).

For information on other intrinsics with the same name:
@xref{System Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node System_Clock Intrinsic
@subsubsection System_Clock Intrinsic
@cindex System_Clock intrinsic
@cindex intrinsics, System_Clock

@noindent
@example
CALL System_Clock(@var{Count}, @var{Rate}, @var{Max})
@end example

@noindent
@var{Count}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
@var{Rate}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
@var{Max}: @code{INTEGER(KIND=1)}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{f90}.

@noindent
Description:

Returns in @var{Count} 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{Rate} is the number of clock ticks per second and
@var{Max} 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.

@end ifset
@ifset familyF77
@node Tan Intrinsic
@subsubsection Tan Intrinsic
@cindex Tan intrinsic
@cindex intrinsics, Tan

@noindent
@example
Tan(@var{X})
@end example

@noindent
Tan: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the tangent of @var{X}, an angle measured
in radians.

@xref{ATan Intrinsic}, for the inverse of this function.

@end ifset
@ifset familyVXT
@node TanD Intrinsic
@subsubsection TanD Intrinsic
@cindex TanD intrinsic
@cindex intrinsics, TanD

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL TanD} to use this name for an
external procedure.

@end ifset
@ifset familyF77
@node TanH Intrinsic
@subsubsection TanH Intrinsic
@cindex TanH intrinsic
@cindex intrinsics, TanH

@noindent
@example
TanH(@var{X})
@end example

@noindent
TanH: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}.

@noindent
@var{X}: @code{REAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: (standard FORTRAN 77).

@noindent
Description:

Returns the hyperbolic tangent of @var{X}.

@end ifset
@ifset familyF2U
@node Time Intrinsic (UNIX)
@subsubsection Time Intrinsic (UNIX)
@cindex Time intrinsic
@cindex intrinsics, Time

@noindent
@example
Time()
@end example

@noindent
Time: @code{INTEGER(KIND=1)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the current time encoded as an integer
(in the manner of the UNIX function @code{time(3)}).
This value is suitable for passing to @code{CTIME},
@code{GMTIME}, and @code{LTIME}.

This intrinsic is not fully portable, such as to systems
with 32-bit @code{INTEGER} types but supporting times
wider than 32 bits.
@xref{Time8 Intrinsic}, for information on a
similar intrinsic that might be portable to more
GNU Fortran implementations, though to fewer
Fortran compilers.

For information on other intrinsics with the same name:
@xref{Time Intrinsic (VXT)}.

@end ifset
@ifset familyVXT
@node Time Intrinsic (VXT)
@subsubsection Time Intrinsic (VXT)
@cindex Time intrinsic
@cindex intrinsics, Time

@noindent
@example
CALL Time(@var{Time})
@end example

@noindent
@var{Time}: @code{CHARACTER*8}; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{vxt}.

@noindent
Description:

Returns in @var{Time} a character representation of the current time as
obtained from @code{ctime(3)}.

@xref{Fdate Intrinsic (subroutine)} for an equivalent routine.

For information on other intrinsics with the same name:
@xref{Time Intrinsic (UNIX)}.

@end ifset
@ifset familyF2U
@node Time8 Intrinsic
@subsubsection Time8 Intrinsic
@cindex Time8 intrinsic
@cindex intrinsics, Time8

@noindent
@example
Time8()
@end example

@noindent
Time8: @code{INTEGER(KIND=2)} function.

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

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

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.

@end ifset
@ifset familyF90
@node Tiny Intrinsic
@subsubsection Tiny Intrinsic
@cindex Tiny intrinsic
@cindex intrinsics, Tiny

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Tiny} to use this name for an
external procedure.

@node Transfer Intrinsic
@subsubsection Transfer Intrinsic
@cindex Transfer intrinsic
@cindex intrinsics, Transfer

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Transfer} to use this name for an
external procedure.

@node Transpose Intrinsic
@subsubsection Transpose Intrinsic
@cindex Transpose intrinsic
@cindex intrinsics, Transpose

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Transpose} to use this name for an
external procedure.

@node Trim Intrinsic
@subsubsection Trim Intrinsic
@cindex Trim intrinsic
@cindex intrinsics, Trim

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Trim} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node TtyNam Intrinsic (subroutine)
@subsubsection TtyNam Intrinsic (subroutine)
@cindex TtyNam intrinsic
@cindex intrinsics, TtyNam

@noindent
@example
CALL TtyNam(@var{Name}, @var{Unit})
@end example

@noindent
@var{Name}: @code{CHARACTER}; scalar; INTENT(OUT).

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sets @var{Name} to the name of the terminal device open on logical unit
@var{Unit} or a blank string if @var{Unit} is not connected to a
terminal.

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

For information on other intrinsics with the same name:
@xref{TtyNam Intrinsic (function)}.

@node TtyNam Intrinsic (function)
@subsubsection TtyNam Intrinsic (function)
@cindex TtyNam intrinsic
@cindex intrinsics, TtyNam

@noindent
@example
TtyNam(@var{Unit})
@end example

@noindent
TtyNam: @code{CHARACTER*(*)} function.

@noindent
@var{Unit}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Returns the name of the terminal device open on logical unit
@var{Unit} or a blank string if @var{Unit} is not connected to a
terminal.

For information on other intrinsics with the same name:
@xref{TtyNam Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node UBound Intrinsic
@subsubsection UBound Intrinsic
@cindex UBound intrinsic
@cindex intrinsics, UBound

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL UBound} to use this name for an
external procedure.

@end ifset
@ifset familyF2U
@node UMask Intrinsic (subroutine)
@subsubsection UMask Intrinsic (subroutine)
@cindex UMask intrinsic
@cindex intrinsics, UMask

@noindent
@example
CALL UMask(@var{Mask}, @var{Old})
@end example

@noindent
@var{Mask}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
@var{Old}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Sets the file creation mask to @var{Mask} and returns the old value in
argument @var{Old} if it is supplied.
See @code{umask(2)}.

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

For information on other intrinsics with the same name:
@xref{UMask Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node UMask Intrinsic (function)
@subsubsection UMask Intrinsic (function)
@cindex UMask intrinsic
@cindex intrinsics, UMask

@noindent
@example
UMask(@var{Mask})
@end example

@noindent
UMask: @code{INTEGER(KIND=1)} function.

@noindent
@var{Mask}: @code{INTEGER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Sets the file creation mask to @var{Mask} and returns the old value.
See @code{umask(2)}.

Due to the side effects performed by this intrinsic, the function
form is not recommended.

For information on other intrinsics with the same name:
@xref{UMask Intrinsic (subroutine)}.

@end ifset
@ifset familyF2U
@node Unlink Intrinsic (subroutine)
@subsubsection Unlink Intrinsic (subroutine)
@cindex Unlink intrinsic
@cindex intrinsics, Unlink

@noindent
@example
CALL Unlink(@var{File}, @var{Status})
@end example

@noindent
@var{File}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
@var{Status}: @code{INTEGER(KIND=1)}; OPTIONAL; scalar; INTENT(OUT).

@noindent
Intrinsic groups: @code{unix}.

@noindent
Description:

Unlink the file @var{File}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{File}---otherwise,
trailing blanks in @var{File} are ignored.
If the @var{Status} 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{Status} argument.

For information on other intrinsics with the same name:
@xref{Unlink Intrinsic (function)}.

@end ifset
@ifset familyBADU77
@node Unlink Intrinsic (function)
@subsubsection Unlink Intrinsic (function)
@cindex Unlink intrinsic
@cindex intrinsics, Unlink

@noindent
@example
Unlink(@var{File})
@end example

@noindent
Unlink: @code{INTEGER(KIND=1)} function.

@noindent
@var{File}: @code{CHARACTER}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{badu77}.

@noindent
Description:

Unlink the file @var{File}.
A null character (@samp{CHAR(0)}) marks the end of
the name in @var{File}---otherwise,
trailing blanks in @var{File} 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.

For information on other intrinsics with the same name:
@xref{Unlink Intrinsic (subroutine)}.

@end ifset
@ifset familyF90
@node Unpack Intrinsic
@subsubsection Unpack Intrinsic
@cindex Unpack intrinsic
@cindex intrinsics, Unpack

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Unpack} to use this name for an
external procedure.

@node Verify Intrinsic
@subsubsection Verify Intrinsic
@cindex Verify intrinsic
@cindex intrinsics, Verify

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL Verify} to use this name for an
external procedure.

@end ifset
@ifset familyF2C
@node XOr Intrinsic
@subsubsection XOr Intrinsic
@cindex XOr intrinsic
@cindex intrinsics, XOr

@noindent
@example
XOr(@var{I}, @var{J})
@end example

@noindent
XOr: @code{INTEGER} or @code{LOGICAL} function, the exact type being the result of cross-promoting the
types of all the arguments.

@noindent
@var{I}: @code{INTEGER} or @code{LOGICAL}; scalar; INTENT(IN).

@noindent
@var{J}: @code{INTEGER} or @code{LOGICAL}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

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

@node ZAbs Intrinsic
@subsubsection ZAbs Intrinsic
@cindex ZAbs intrinsic
@cindex intrinsics, ZAbs

@noindent
@example
ZAbs(@var{A})
@end example

@noindent
ZAbs: @code{REAL(KIND=2)} function.

@noindent
@var{A}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Archaic form of @code{ABS()} that is specific
to one type for @var{A}.
@xref{Abs Intrinsic}.

@node ZCos Intrinsic
@subsubsection ZCos Intrinsic
@cindex ZCos intrinsic
@cindex intrinsics, ZCos

@noindent
@example
ZCos(@var{X})
@end example

@noindent
ZCos: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Archaic form of @code{COS()} that is specific
to one type for @var{X}.
@xref{Cos Intrinsic}.

@node ZExp Intrinsic
@subsubsection ZExp Intrinsic
@cindex ZExp intrinsic
@cindex intrinsics, ZExp

@noindent
@example
ZExp(@var{X})
@end example

@noindent
ZExp: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Archaic form of @code{EXP()} that is specific
to one type for @var{X}.
@xref{Exp Intrinsic}.

@end ifset
@ifset familyVXT
@node ZExt Intrinsic
@subsubsection ZExt Intrinsic
@cindex ZExt intrinsic
@cindex intrinsics, ZExt

This intrinsic is not yet implemented.
The name is, however, reserved as an intrinsic.
Use @samp{EXTERNAL ZExt} to use this name for an
external procedure.

@end ifset
@ifset familyF2C
@node ZLog Intrinsic
@subsubsection ZLog Intrinsic
@cindex ZLog intrinsic
@cindex intrinsics, ZLog

@noindent
@example
ZLog(@var{X})
@end example

@noindent
ZLog: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Archaic form of @code{LOG()} that is specific
to one type for @var{X}.
@xref{Log Intrinsic}.

@node ZSin Intrinsic
@subsubsection ZSin Intrinsic
@cindex ZSin intrinsic
@cindex intrinsics, ZSin

@noindent
@example
ZSin(@var{X})
@end example

@noindent
ZSin: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Archaic form of @code{SIN()} that is specific
to one type for @var{X}.
@xref{Sin Intrinsic}.

@node ZSqRt Intrinsic
@subsubsection ZSqRt Intrinsic
@cindex ZSqRt intrinsic
@cindex intrinsics, ZSqRt

@noindent
@example
ZSqRt(@var{X})
@end example

@noindent
ZSqRt: @code{COMPLEX(KIND=2)} function.

@noindent
@var{X}: @code{COMPLEX(KIND=2)}; scalar; INTENT(IN).

@noindent
Intrinsic groups: @code{f2c}.

@noindent
Description:

Archaic form of @code{SQRT()} that is specific
to one type for @var{X}.
@xref{SqRt Intrinsic}.

@end ifset
