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 |