Document revision date: 30 March 2001

## OpenVMS Programming Concepts Manual

Previous | Contents | Index

## E.8 FORTRAN Implementations

Table E-8 lists the OpenVMS data types and their corresponding FORTRAN data type declarations.

Table E-8 FORTRAN Implementations
OpenVMS Data Types | FORTRAN Declarations
--- | ---
access_bit_names | INTEGER*4(2,32) or STRUCTURE /access_bit_names/ INTEGER*4 access_name_len INTEGER*4 access_name_buf END STRUCTURE !access_bit_names RECORD /access_bit_names/ my_names(32)
access_mode | BYTE or INTEGER*1 1
address | INTEGER*4
address_range | INTEGER*4(2) or INTEGER*8 1 or STRUCTURE /address_range/ INTEGER*4 low_address INTEGER*4 high_address END STRUCTURE
arg_list | INTEGER*4( n) or INTEGER*8 1( n)
ast_procedure | EXTERNAL
boolean | LOGICAL*4
byte_signed | BYTE or INTEGER*1
byte_unsigned | BYTE 2 or INTEGER*1 1, 2
channel | INTEGER*2
char_string | CHARACTER* n
complex_number | COMPLEX*8 COMPLEX*16
cond_value | INTEGER*4
context | INTEGER*4
date_time | INTEGER*4(2) or INTEGER*8 1
device_name | CHARACTER* n
ef_cluster_name | CHARACTER* n
ef_number | INTEGER*4
exit_handler_block | STRUCTURE /exhblock/ INTEGER*4 flink INTEGER*4 exit_handler_addr BYTE(3) /0/ BYTE arg_count INTEGER*4 cond_value ! . ! .(optional arguments ... one argument ! . per longword) ! END STRUCTURE !cntrlblk RECORD /exhblock/ myexh_block
fab | INCLUDE '($FABDEF)' RECORD /fabdef/ myfab
file_protection | INTEGER*4
floating_point | REAL*4 3 REAL*8 3 DOUBLE PRECISION 3 REAL*16 4
function_code | INTEGER*4
identifier | INTEGER*4
invo_context_blk 1 | INCLUDE ('LIBICB') RECORD /INVO_CONTEXT_BLK/ invo_context_blk
invo_handle 1 | INTEGER*4
io_status_block | STRUCTURE /iosb/ INTEGER*2 iostat, !return status 2 term_offset, !location of line terminator 2 terminator, !value of terminator 2 term_size !size of terminator END STRUCTURE RECORD /iosb/ my_iosb
item_list_2 | STRUCTURE /itmlst/ UNION MAP INTEGER*2 buflen,code INTEGER*4 bufadr END MAP MAP INTEGER*4 end_list /0/ END MAP END UNION END STRUCTURE !itmlst RECORD /itmlst/ my_itmlst_2( n) (Allocate n records, where n is the number of item codes plus an extra element for the end-of-list item.)
item_list_3 | STRUCTURE /itmlst/ UNION MAP INTEGER*2 buflen,code INTEGER*4 bufadr,retlenadr END MAP MAP INTEGER*4 end_list /0/ END MAP END UNION END STRUCTURE !itmlst RECORD /itmlst/ my_itmlst_2( n) (Allocate n records, where n is the number of item codes plus an extra element for the end-of-list item.)
item_list_pair | STRUCTURE /itmlist_pair/ UNION MAP INTEGER*4 code INTEGER*4 value END MAP MAP INTEGER*4 end_list /0/ END MAP END UNION END STRUCTURE !itmlst_pair RECORD /itmlst_pair/ my_itmlst_pair( n) (Allocate n records, where n is the number of item codes plus an extra element for the end-of-list item.)
item_quota_list | STRUCTURE /item_quota_list/ MAP BYTE quota_name INTEGER*4 quota_value END MAP MAP BYTE end_quota_list END MAP END STRUCTURE !item_quota_list
lock_id | INTEGER*4
lock_status_block | STRUCTURE/lksb/ INTEGER*2 cond_value INTEGER*2 unused INTEGER*4 lock_id BYTE(16) END STRUCTURE !lock_status_lock
lock_value_block | BYTE(16)
logical_name | CHARACTER* n
longword_signed | INTEGER*4
longword_unsigned | INTEGER*4 2
mask_byte | BYTE or INTEGER*1
mask_longword | INTEGER*4
mask_quadword | INTEGER*4(2) or INTEGER*8 1
mask_word | INTEGER*2
mechanism_args | INCLUDE '($CHFDEF)' RECORD /CHFDEF2/ mechargs
null_arg | %VAL(0)
octaword_signed | INTEGER*4(4)
octaword_unsigned | INTEGER*4(4) 2
page_protection | INTEGER*4
procedure | INTEGER*4
process_id | INTEGER*4
process_name | CHARACTER* n
quadword_signed | INTEGER*4(2) or INTEGER*8 1
quadword_unsigned | INTEGER*4(2) 2 or INTEGER*8 1
rights_holder | INTEGER*4(2) or STRUCTURE /rights_holder/ INTEGER*4 rights_id INTEGER*4 rights_mask END STRUCTURE !rights_holder
rights_id | INTEGER*4
rab | INCLUDE '($RABDEF)' RECORD /rabdef/ myrab
section_id | INTEGER*4(2) or INTEGER*8 1
section_name | CHARACTER* n
system_access_id | INTEGER*4(2) or INTEGER*8 1
time_name | CHARACTER*23
transaction_id | INTEGER*4(4) 2
uic | INTEGER*4
user_arg | Any longword quantity
varying_arg | INTEGER*4
vector_byte_signed | BYTE( n)
vector_byte_unsigned | BYTE( n) 2
vector_longword_signed | INTEGER*4( n)
vector_longword_unsigned | INTEGER*4( n) 2
vector_quadword_signed | INTEGER*4(2, n) or INTEGER*8( n 1)
vector_quadword_unsigned | INTEGER*4(2, n) 2 or INTEGER*8( n) 1, 2
vector_word_signed | INTEGER*2( n)
vector_word_unsigned | INTEGER*2( n) 2
word_signed | INTEGER*2( n)
word_unsigned | INTEGER*2( n) 2

1Alpha specific.
2Unsigned data types are not directly supported by FORTRAN. However, in most cases you can substitute the signed equivalent as long as you do not exceed the range of the signed data structure.
3The format used by floating-point data in memory is determined by the FORTRAN command qualifier /FLOAT.
4The REAL*16 type is used for both H_floating on VAX systems and X_floating on Alpha systems.

## E.9 Pascal Implementations

Table E-9 lists the OpenVMS data types and their corresponding Pascal data type declarations.

Table E-9 Pascal Implementations
OpenVMS Data Types | Pascal Declarations
--- | ---
access_bit_names | PACKED ARRAY [1..32] OF [QUAD] RECORD END; 1,2
access_mode | [BYTE] 0..3; 2
address | UNSIGNED;
address_range | PACKED ARRAY [1..2] OF UNSIGNED; 2
arg_list | PACKED ARRAY [1.. n] OF UNSIGNED; 2
ast_procedure | UNSIGNED;
boolean | BOOLEAN; 3
byte_signed | [BYTE] - 128..127; 2
byte_unsigned | [BYTE] 0..255; 2
channel | [WORD] 0..65535; 2
char_string | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
complex_number | [LONG(2)] RECORD END; * F_Floating Complex * 1,2 [QUAD(2)] RECORD END; * D/G_Floating Complex * [OCTA(2)] RECORD END; * H_Floating Complex *
cond_value | UNSIGNED;
context | UNSIGNED;
date_time | [QUAD] RECORD END; 1,2
device_name | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
ef_cluster_name | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
ef_number | UNSIGNED;
exit_handler_block | PACKED ARRAY [1.. n] OF UNSIGNED; 2
fab | FAB$TYPE; 5
file_protection | [WORD] RECORD END; 1,2
floating_point | REAL; { F_Floating } SINGLE; { F_Floating } DOUBLE; { D_Floating/G_Floating } 6 QUADRUPLE; { H_Floating }
function_code | UNSIGNED;
identifier | UNSIGNED;
invo_context_blk 7 | LIBICB$INFO_CONTEXT_BLK 5
invo_handle 7 | [UNSAFE]INTEGER;
io_status_block | [QUAD] RECORD END; 1,2
item_list_2 | PACKED ARRAY [1.. n] OF PACKED RECORD 2 CASE INTEGER OF 1: ( FIELD1 : [WORD] 0..65535; FIELD2 : [WORD] 0..65535; FIELD3 : UNSIGNED); 2: ( TERMINATOR : UNSIGNED); END;
item_list_3 | PACKED ARRAY [1.. n] OF PACKED RECORD 2 CASE INTEGER OF 1: ( FIELD1 : [WORD] 0..65535; FIELD2 : [WORD] 0..65535; FIELD3 : UNSIGNED; FIELD4 : UNSIGNED); 2: ( TERMINATOR : UNSIGNED); END;
item_list_pair | PACKED ARRAY [1.. n] OF PACKED RECORD 2 CASE INTEGER OF 1: ( FIELD1 : INTEGER; FIELD2 : INTEGER); 2: ( TERMINATOR : UNSIGNED); END;
item_quota_list | PACKED ARRAY [1.. n] OF PACKED RECORD 2 CASE INTEGER OF 1: ( QUOTA_NAME : [BYTE] 0..255; QUOTA_VALUE: UNSIGNED); 2: ( QUOTA_TERM : [BYTE] 0..255); END;
lock_id | UNSIGNED;
lock_status_block | [BYTE(24)] RECORD END; 1,2
lock_value_block | [BYTE(16)] RECORD END; 1,2
logical_name | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
longword_signed | INTEGER;
longword_unsigned | UNSIGNED;
mask_byte | [BYTE,UNSAFE] PACKED ARRAY [1..8] OF BOOLEAN; 2
mask_longword | [LONG,UNSAFE] PACKED ARRAY [1..32] OF BOOLEAN; 2
mask_quadword | [QUAD,UNSAFE] PACKED ARRAY [1..64] OF BOOLEAN; 2
mask_word | [WORD,UNSAFE] PACKED ARRAY [1..16] OF BOOLEAN; 2
mechanism_args | CHF$TYPE; 5
null_arg | UNSIGNED;
octaword_signed | [OCTA] RECORD END; 1,2
octaword_unsigned | [OCTA] RECORD END; 1,2
page_protection | [LONG] 0..7; 2
procedure | UNSIGNED;
process_id | UNSIGNED;
process_name | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
quadword_signed | [QUAD] RECORD END; 1,2
quadword_unsigned | [QUAD] RECORD END; 1,2
rights_holder | [QUAD] RECORD END; 1,2
rights_id | UNSIGNED;
rab | RAB$TYPE; 5
section_id | [QUAD] RECORD END; 1,2
section_name | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
system_access_id | [QUAD] RECORD END; 1,2
time_name | [CLASS_S] PACKED ARRAY [L..U:INTEGER] OF CHAR; 4
transaction_id | [OCTA] RECORD END; 1,2
uic | UNSIGNED;
user_arg | [UNSAFE] UNSIGNED;
varying_arg | [UNSAFE,REFERENCE] PACKED ARRAY [L..U:INTEGER] OF [BYTE] 0..255;
vector_byte_signed | PACKED ARRAY [1.. n] OF [BYTE] - 128..127; 2
vector_byte_unsigned | PACKED ARRAY [1.. n] OF [BYTE] 0..255; 2
vector_longword_signed | PACKED ARRAY [1.. n] OF INTEGER; 2
vector_longword_unsigned | PACKED ARRAY [1.. n] OF UNSIGNED; 2
vector_quadword_signed | PACKED ARRAY [1.. n] OF [QUAD] RECORD END; 1,2
vector_quadword_unsigned | PACKED ARRAY [1.. n] OF [QUAD] RECORD END; 1,2
vector_word_signed | PACKED ARRAY [1.. n] OF [WORD] - 32768..32767; 2
vector_word_unsigned | PACKED ARRAY [1.. n] OF [WORD] 0..65535; 2
word_signed | [WORD] - 32768..32767; 2
word_unsigned | [WORD] 0..65535; 2

1This type is not available in Pascal when an empty record has been inserted. To manipulate the contents, declare with explicit field components. If you pass an empty record as a parameter to a Pascal routine, you must use the VAR keyword.
2Pascal expects either a type identifier or conformant schema. Declare this under the TYPE declaration and use the type identifier in the formal parameter declaration.
3Pascal allocates a byte for a BOOLEAN variable. Use the [LONG] attribute when passing to routines that expect a longword.
4This parameter declaration accepts VARYING OF CHAR or PACKED ARRAY OF CHAR and produces the CLASS_S descriptor required by system services.
5The program must inherit the STARLET environment file located in SYS$LIBRARY:STARLET.PEN.
6If the {G_Floating} attribute is used in compiling, double-precision variables and expressions are represented in G_floating format. You can also use the /G_FLOATING command line qualifier. Both methods default to no G_floating.
7Alpha specific.

Previous | Next | Contents | Index

| privacy and legal statement |
5841PRO_090.HTML