FORTRAN 77 Language Reference

VMS Intrinsic Functions

This section lists VMS FORTRAN intrinsic routines recognized by f77. They are, of course, nonstandard. @

VMS Double-Precision Complex

Table 6-9 VMS Double-Precision Complex Functions

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*16REAL*8 COMPLEX*16 COMPLEX*16 COMPLEX*16
 CDSIN CDCOS

Sine 

Cosine 

COMPLEX*16 COMPLEX*16COMPLEX*16 COMPLEX*16
DCMPLXDCONJG DIMAG DREAL

Convert to DOUBLE COMPLEX

Complex conjugate 

Imaginary part of complex 

Real part of complex 

Any numeric COMPLEX*16 COMPLEX*16 COMPLEX*16COMPLEX*16 COMPLEX*16 REAL*8 REAL*8

VMS Degree-Based Trigonometric

Table 6-10 VMS Degree-Based Trigonometric Functions

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
COSDCOSD 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

VMS Bit-Manipulation

Table 6-11 VMS Bit-Manipulation Functions

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

VMS Multiple Integer Types

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

Specific Names 

Function 

Argument Type 

Result Type  

IIABS JIABS

Absolute value 

Absolute value 

INTEGER*2 INTEGER*4INTEGER*2 INTEGER*4
IMAX0 JMAX0

Maximum [There must be at least two arguments.]

Maximum 1

INTEGER*2 INTEGER*4INTEGER*2 INTEGER*4
IMIN0 JMIN0

Minimum 1

Minimum 1

INTEGER*2 INTEGER*4INTEGER*2 INTEGER*4
IIDIM JIDIM

Positive difference [The positive difference is: a1-min(a1,a2))]

Positive difference 2

INTEGER*2 INTEGER*4INTEGER*2 INTEGER*4
IMOD JMOD

Remainder of a1/a2 

Remainder of a1/a2 

INTEGER*2 INTEGER*4INTEGER*2 INTEGER*4
IISIGN JISIGN

Transfer of sign, |a1|* sign(a2) 

Transfer of sign, |a1|* sign(a2) 

INTEGER*2 INTEGER*4INTEGER*2 INTEGER*4

Functions Coerced to a Particular Type

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*4INTEGER*2 INTEGER*4
IIDINT JIDINT

Truncation toward zero 

Truncation toward zero 

REAL*8 REAL*8INTEGER*2 INTEGER*4
IIQINT JIQINT

Truncation toward zero 

Truncation toward zero 

REAL*16 REAL*16INTEGER*2 INTEGER*4
ININT JNINT

Nearest integer, INT(a+.5*sign(a))

Nearest integer, INT(a+.5*sign(a))

REAL*4 REAL*4INTEGER*2 INTEGER*4
IIDNNT JIDNNT

Nearest integer, INT(a+.5*sign(a))

Nearest integer, INT(a+.5*sign(a))

REAL*8 REAL*8INTEGER*2 INTEGER*4
IIQNNT JIQNNT

Nearest integer, INT(a+.5*sign(a))

Nearest integer, INT(a+.5*sign(a))

REAL*16 REAL*16INTEGER*2 INTEGER*4
IIFIX JIFIX

Fix 

Fix 

REAL*4 REAL*4INTEGER*2 INTEGER*4
IMAX1(a,a2,...) JMAX1(a,a2,...)

Maximum of two or more arguments 

Maximum of two or more arguments 

REAL*4 REAL*4INTEGER*2 INTEGER*4
IMIN1(a,a2,... JMIN1(a,a2,...

Minimum of two or more arguments 

Minimum of two or more arguments 

READ*4 READ*4INTEGER*2 INTEGER*4

Functions Translated to a Generic Name

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*4REAL*4 REAL*4
DFLOTI DFLOTJ

Convert to REAL*8

Convert to REAL*8

INTEGER*2 INTEGER*4REAL*8 REAL*8
AIMAX0 AJMAX0

Maximum 

Maximum 

INTEGER*2 INTEGER*4REAL*4 REAL*4
AIMIN0 AJMIN0

Minimum 

Minimum 

INTEGER*2 INTEGER*4REAL*4 REAL*4

Zero Extend

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*2INTEGER*2
 JZEXT

Zero-extend 

BYTE LOGICAL*1 LOGICAL*2 LOGICAL*4 INTEGER INTEGER*2 INTEGER*4INTEGER*4