Document revision date: 19 July 1999
[Compaq] [Go to the documentation home page] [How to order documentation] [Help on this site] [How to contact us]
[OpenVMS documentation]

OpenVMS Programming Interfaces: Calling a System Routine


Previous Contents Index

B.8 FORTRAN Implementations

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

Table B-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
address INTEGER*4
address_range INTEGER*4(2)
or
++INTEGER*8
or
STRUCTURE /address_range/
INTEGER*4 low_address
INTEGER*4 high_address
END STRUCTURE
arg_list INTEGER*4( n)
or
++INTEGER*8( n)
ast_procedure EXTERNAL
boolean LOGICAL*4
byte_signed BYTE
or
INTEGER*1
byte_unsigned BYTE 1
or
++INTEGER*1 1
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
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 2
REAL*8 2
DOUBLE PRECISION 2
REAL*16 3
function_code INTEGER*4
identifier INTEGER*4
++invo_context_blk INCLUDE ('LIBICB')
RECORD /INVO_CONTEXT_BLK/ invo_context_blk
++invo_handle 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 1
mask_byte BYTE
or
INTEGER*1
mask_longword INTEGER*4
mask_quadword INTEGER*4(2)
or
++INTEGER*8
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) 1
page_protection INTEGER*4
procedure INTEGER*4
process_id INTEGER*4
process_name CHARACTER* n
quadword_signed INTEGER*4(2)
or
++INTEGER*8
quadword_unsigned INTEGER*4(2) 1
or
++INTEGER*8
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
section_name CHARACTER* n
system_access_id INTEGER*4(2)
or
++INTEGER*8
time_name CHARACTER*23
transaction_id INTEGER*4(4) 1
uic INTEGER*4
user_arg Any longword quantity
varying_arg INTEGER*4
vector_byte_signed BYTE( n)
vector_byte_unsigned BYTE( n) 1
vector_longword_signed INTEGER*4( n)
vector_longword_unsigned INTEGER*4( n) 1
vector_quadword_signed INTEGER*4(2, n)
or
++INTEGER*8( n)
vector_quadword_unsigned INTEGER*4(2, n) 1
or
++INTEGER*8( n) 1
vector_word_signed INTEGER*2( n)
vector_word_unsigned INTEGER*2( n) 1
word_signed INTEGER*2( n)
word_unsigned INTEGER*2( n) 1


++Alpha specific.
+VAX specific.
1Unsigned 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.
2The format used by floating-point data in memory is determined by the FORTRAN command qualifier /FLOAT.
3The REAL*16 type is used for both H_floating on VAX systems and X_floating on Alpha systems.

B.9 Pascal Implementations

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

Table B-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 LIBICB$INFO_CONTEXT_BLK 5
++invo_handle [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


++Alpha specific.
+VAX specific.
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.
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.
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.
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.


Previous Next Contents Index

  [Go to the documentation home page] [How to order documentation] [Help on this site] [How to contact us]  
  privacy and legal statement  
5843PRO_011.HTML