This section lists VMS FORTRAN intrinsic routines recognized by f77. They are, of course, nonstandard. @
Generic Name |
Specific Names |
Function |
Argument Type |
Result Type |
---|---|---|---|---|
CDABS CDEXP CDLOG CDSQRT |
Absolute value Exponential, e**a Natural log Square root | COMPLEX*16 COMPLEX*16 COMPLEX*16 COMPLEX*16 | REAL*8 COMPLEX*16 COMPLEX*16 COMPLEX*16 | |
CDSIN CDCOS |
Sine Cosine | COMPLEX*16 COMPLEX*16 | COMPLEX*16 COMPLEX*16 | |
DCMPLX | DCONJG DIMAG DREAL |
Convert to DOUBLE COMPLEX Complex conjugate Imaginary part of complex Real part of complex | Any numeric COMPLEX*16 COMPLEX*16 COMPLEX*16 | COMPLEX*16 COMPLEX*16 REAL*8 REAL*8 |
Generic Name |
Specific Names |
Function |
Argument Type |
Result Type |
---|---|---|---|---|
SIND | SIND DSIND QSIND |
Sine
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
COSD | COSD DCOSD QCOSD |
Cosine
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
TAND | TAND DTAND QTAND |
Tangent
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
ASIND | ASIND DASIND QASIND |
Arc sine
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
ACOSD | ACOSD DACOSD QACOSD |
Arc cosine
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
ATAND | ATAND DATAND QATAND |
Arc tangent
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
ATAN2D | ATAN2D DATAN2D QATAN2D |
Arc tangent of a1/a2
| - REAL*4 REAL*8 REAL*16 | - REAL*4 REAL*8 REAL*16 |
Generic Name |
Specific Names |
Function |
Argument Type |
Result Type |
---|---|---|---|---|
IBITS | IIBITS JIBITS |
From a1, initial bit a2, extract a3 bits
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
ISHFT | IISHFT JISHFT |
Shift a1 logically by a2 bits; if a2 positive shift left, if a2 negative shift right Shift a1 logically left by a2 bits Shift a1 logically left by a2 bits | - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
ISHFTC | IISHFTC JISHFTC |
In a1, circular shift by a2 places, of right a3 bits
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
IAND | IIAND JIAND |
Bitwise AND of a1, a2
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
IOR | IIOR JIOR |
Bitwise OR of a1, a2
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
IEOR | IIEOR JIEOR |
Bitwise exclusive OR of a1, a2
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
NOT | INOT JNOT |
Bitwise complement
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
IBSET | IIBSET JIBSET |
In a1, set bit a2 to 1 In a1, set bit a2 to 1; return new a1 In a1, set bit a2 to 1; return new a1 | - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
BTEST | BITEST BJTEST |
If bit a2 of a1 is 1, return .TRUE.
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
IBCLR | IIBCLR JIBCLR |
In a1, set bit a2 to 0; return new a1
| - INTEGER*2 INTEGER*4 | - INTEGER*2 INTEGER*4 |
The possibility of multiple integer types is not addressed by the FORTRAN Standard. f77 copes with their existence by treating a specific INTEGER-to-INTEGER function name (IABS, and so forth) as a special sort of generic. The argument type is used to select the appropriate runtime routine name, which is not accessible to the programmer.
VMS FORTRAN takes a similar approach, but makes the specific names available.
Table 6-12 VMS Integer Functions
Some VMS FORTRAN functions coerce to a particular INTEGER type.
Table 6-13 Translated Functions that VMS Coerces to a Particular Type
Specific Names |
Function |
Argument Type |
Result Type |
---|---|---|---|
IINT JINT |
Truncation toward zero Truncation toward zero | REAL*4 REAL*4 | INTEGER*2 INTEGER*4 |
IIDINT JIDINT |
Truncation toward zero Truncation toward zero | REAL*8 REAL*8 | INTEGER*2 INTEGER*4 |
IIQINT JIQINT |
Truncation toward zero Truncation toward zero | REAL*16 REAL*16 | INTEGER*2 INTEGER*4 |
ININT JNINT |
Nearest integer, INT(a+.5*sign(a)) Nearest integer, INT(a+.5*sign(a)) | REAL*4 REAL*4 | INTEGER*2 INTEGER*4 |
IIDNNT JIDNNT |
Nearest integer, INT(a+.5*sign(a)) Nearest integer, INT(a+.5*sign(a)) | REAL*8 REAL*8 | INTEGER*2 INTEGER*4 |
IIQNNT JIQNNT |
Nearest integer, INT(a+.5*sign(a)) Nearest integer, INT(a+.5*sign(a)) | REAL*16 REAL*16 | INTEGER*2 INTEGER*4 |
IIFIX JIFIX |
Fix Fix | REAL*4 REAL*4 | INTEGER*2 INTEGER*4 |
IMAX1(a,a2,...) JMAX1(a,a2,...) |
Maximum of two or more arguments Maximum of two or more arguments | REAL*4 REAL*4 | INTEGER*2 INTEGER*4 |
IMIN1(a,a2,... JMIN1(a,a2,... |
Minimum of two or more arguments Minimum of two or more arguments | READ*4 READ*4 | INTEGER*2 INTEGER*4 |
In some cases, each VMS-specific name is translated into an f77 generic name.
Table 6-14 VMS Functions That Are Translated into f77 Generic Names
Specific Names |
Function |
Argument Type |
Result Type |
---|---|---|---|
FLOATI FLOATJ |
Convert to REAL*4 Convert to REAL*4 | INTEGER*2 INTEGER*4 | REAL*4 REAL*4 |
DFLOTI DFLOTJ |
Convert to REAL*8 Convert to REAL*8 | INTEGER*2 INTEGER*4 | REAL*8 REAL*8 |
AIMAX0 AJMAX0 |
Maximum Maximum | INTEGER*2 INTEGER*4 | REAL*4 REAL*4 |
AIMIN0 AJMIN0 |
Minimum Minimum | INTEGER*2 INTEGER*4 | REAL*4 REAL*4 |
The following zero-extend functions are recognized by f77. The first unused high-order bit is set to zero and extended toward the higher-order end to the width indicated in the table
Table 6-15 Zero-Extend Functions
Generic Name |
Specific Names |
Function |
Argument Type |
Result Type |
---|---|---|---|---|
ZEXT |
Zero-extend |
- |
- |
|
IZEXT |
Zero-extend | BYTE LOGICAL*1 LOGICAL*2 INTEGER*2 | INTEGER*2 | |
JZEXT |
Zero-extend | BYTE LOGICAL*1 LOGICAL*2 LOGICAL*4 INTEGER INTEGER*2 INTEGER*4 | INTEGER*4 |