|
OpenVMS Programming Concepts Manual
E.5 BLISS Implementations
Table E-5 lists the OpenVMS data types and their corresponding
BLISS data type declarations.
Table E-5 BLISS Implementations
OpenVMS Data Types |
BLISS Declarations |
access_bit_names
|
BLOCKVECTOR[32,8,BYTE]
|
access_mode
|
UNSIGNED BYTE
|
address
|
UNSIGNED LONG
|
address_range
|
VECTOR[2,LONG,UNSIGNED]
|
arg_list
|
VECTOR[
n,LONG,UNSIGNED]
where
n is the number of arguments + 1.
|
ast_procedure
|
UNSIGNED LONG
|
boolean
|
UNSIGNED LONG
|
byte_signed
|
SIGNED BYTE
|
byte_unsigned
|
UNSIGNED BYTE
|
channel
|
UNSIGNED WORD
|
char_string
|
VECTOR[65536,BYTE,UNSIGNED]
|
complex_number
|
F_Complex: VECTOR[2,LONG]
D_Complex: VECTOR[4,LONG]
G_Complex: VECTOR[4,LONG]
H_Complex: VECTOR[8,LONG]
|
cond_value
|
UNSIGNED LONG
|
context
|
UNSIGNED LONG
|
date_time
|
VECTOR[2,LONG,UNSIGNED]
|
device_name
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the length of the device name.
|
ef_cluster_name
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the length of the event-flag cluster name.
|
ef_number
|
UNSIGNED LONG
|
exit_handler_block
|
BLOCK[
n,BYTE]
where
n is the size of the exit-handler control block.
|
fab
|
$FAB_DECL (from STARLET.REQ)
|
file_protection
|
BLOCK[2,BYTE]
|
floating_point
|
F_Floating: VECTOR[1,LONG]
D_Floating: VECTOR[2,LONG]
G_Floating: VECTOR[2,LONG]
H_Floating: VECTOR[4,LONG]
|
function_code
|
BLOCK[2,WORD]
|
identifier
|
UNSIGNED LONG
|
io_status_block
|
BLOCK[8,BYTE]
|
item_list_2
|
BLOCKVECTOR[
n,8,BYTE]
where
n is the number of the item descriptors + 1.
|
item_list_3
|
BLOCKVECTOR[
n,12,BYTE]
where
n is the number of the item descriptors + 1.
|
|
$ITMLST_DECL/$ITMLST_INIT
from STARLET.REQ
|
item_list_pair
|
BLOCKVECTOR[
n,2,LONG]
where
n is the number of the item descriptors + 1.
|
item_quota_list
|
BLOCKVECTOR[
n,5,BYTE]
where
n is the number of the quota descriptors + 1.
|
lock_id
|
UNSIGNED_LONG
|
lock_status_block
|
BLOCK[
n,BYTE]
where
n is the size of the lock_status_block minus at least 8.
|
lock_value_block
|
BLOCK[16,BYTE]
|
logical_name
|
VECTOR[255,BYTE,UNSIGNED]
|
longword_signed
|
SIGNED LONG
|
longword_unsigned
|
UNSIGNED LONG
|
mask_byte
|
BITVECTOR[8]
|
mask_longword
|
BITVECTOR[32]
|
mask_quadword
|
BITVECTOR[64]
|
mask_word
|
BITVECTOR[16]
|
null_arg
|
UNSIGNED LONG
|
octaword_signed
|
VECTOR[4,LONG,UNSIGNED]
|
octaword_unsigned
|
VECTOR[4,LONG,UNSIGNED]
|
page_protection
|
UNSIGNED LONG
|
procedure
|
UNSIGNED LONG
|
process_id
|
UNSIGNED LONG
|
process_name
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the length of the process name.
|
quadword_signed
|
VECTOR[2,LONG,UNSIGNED]
|
quadword_unsigned
|
VECTOR[2,LONG,UNSIGNED]
|
rights_holder
|
BLOCK[8,BYTE]
|
rights_id
|
UNSIGNED LONG
|
rab
|
$RAB_DECL
from STARLET.REQ
|
section_id
|
VECTOR[2,LONG,UNSIGNED]
|
section_name
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the length of the global section name.
|
system_access_id
|
VECTOR[2,LONG,UNSIGNED]
|
time_name
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the length of the time value in OpenVMS format.
|
transaction_id
|
VECTOR[4,LONG,UNSIGNED]
|
uic
|
UNSIGNED LONG
|
user_arg
|
UNSIGNED LONG
|
varying_arg
|
UNSIGNED LONG
|
vector_byte_signed
|
VECTOR[
n,BYTE,SIGNED]
where
n is the size of the array.
|
vector_byte_unsigned
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the size of the array.
|
vector_longword_signed
|
VECTOR[
n,LONG,SIGNED]
where
n is the size of the array.
|
vector_longword_unsigned
|
VECTOR[
n,LONG,UNSIGNED]
where
n is the size of the array.
|
vector_quadword_signed
|
BLOCKVECTOR[
n,2,LONG]
where
n is the size of the array.
|
vector_quadword_unsigned
|
BLOCKVECTOR[
n,2,LONG]
where
n is the size of the array.
|
vector_word_signed
|
VECTOR[
n,BYTE,SIGNED]
where
n is the size of the array.
|
vector_word_unsigned
|
VECTOR[
n,BYTE,UNSIGNED]
where
n is the size of the array.
|
word_signed
|
SIGNED WORD
|
word_unsigned
|
UNSIGNED WORD
|
E.6 C and C++ Implementations
Table E-6 lists the OpenVMS data types and their corresponding C
and C++ data type declarations.
Table E-6 C and C++ Implementations
OpenVMS Data Types |
C and C++ Declarations |
access_bit_names
|
User defined
1
|
access_mode
|
unsigned char
|
address
|
User defined
1 *pointer
2,4
|
address_range
|
int *array [2]
2,3,4
|
arg_list
|
User defined
1
|
ast_procedure
|
Pointer to function
2
|
boolean
|
unsigned long int
|
byte_signed
|
char
|
byte_unsigned
|
unsigned char
|
channel
|
unsigned short int
|
char_string
|
char array[
n]
3,5
|
complex_number
|
User defined
1
|
cond_value
|
unsigned long int
|
context
|
unsigned long int
|
date_time
|
User defined
1
|
device_name
|
char array[
n]
3,5
|
ef_cluster_name
|
char array[
n]
3,5
|
ef_number
|
unsigned long int
|
exit_handler_block
|
User defined
1
|
fab
|
#include <fab.h>
struct FAB
|
file_protection
|
unsigned short int or user defined
1
|
floating_point
|
float, double, or long double
|
function_code
|
unsigned long int or user defined
1
|
identifier
|
unsigned long int *pointer
2,4
|
invo_context_blk
6
|
#include <libicb.h>
struct invo_context_blk
|
invo_handle
6
|
unsigned long int
|
io_status_block
|
User defined
1
|
item_list_2
|
User defined
1
|
item_list_3
|
User defined
1
|
item_list_pair
|
User defined
1
|
item_quota_list
|
User defined
1
|
lock_id
|
unsigned long int
|
lock_status_block
|
User defined
1
|
lock_value_block
|
User defined
1
|
logical_name
|
char array[
n]
3,5
|
longword_signed
|
long int
|
longword_unsigned
|
unsigned long int
|
mask_byte
|
unsigned char
|
mask_longword
|
unsigned long int
|
mask_quadword
|
User defined
1
|
mask_word
|
unsigned short int
|
mechanism_args
|
#include <chfdef.h>
struct chf$mech_array
|
null_arg
|
unsigned long int
|
octaword_signed
|
User defined
1
|
octaword_unsigned
|
User defined
1
|
page_protection
|
unsigned long int
|
procedure
|
Pointer to function
2
|
process_id
|
unsigned long int
|
process_name
|
char array[
n]
3,5
|
quadword_signed
|
User defined
1
|
quadword_unsigned
|
User defined
1
|
rights_holder
|
User defined
1
|
rights_id
|
unsigned long int
|
rab
|
#include <rab.h>
struct RAB
|
section_id
|
User defined
1
|
section_name
|
char array[
n]
3,5
|
system_access_id
|
User defined
1
|
time_name
|
char array[
n]
3,5
|
transaction_id
|
User defined
1
|
uic
|
unsigned long int
|
user_arg
|
User defined
1
|
varying_arg
|
User defined
1
|
vector_byte_signed
|
char array[
n]
3,5
|
vector_byte_unsigned
|
unsigned char array[
n]
3,5
|
vector_longword_signed
|
long int array[
n]
3,5
|
vector_longword_unsigned
|
unsigned long int array[
n]
3,5
|
vector_quadword_signed
|
User defined
1
|
vector_quadword_unsigned
|
User defined
1
|
vector_word_signed
|
short int array[
n]
3,5
|
vector_word_unsigned
|
unsigned short int array[
n]
3,5
|
word_signed
|
short int
|
word_unsigned
|
unsigned short int
|
1The declaration of a user-defined data structure depends on
how the data will be used. Such data structures can be declared in a
variety of ways, each of which is suitable only to specific
applications.
2C and C++ pointers are declared with special syntax and are
associated with the data type of the object being pointed to. This
object is often user defined.
3The term array denotes the syntax of a C or C++ array
declaration.
4The data type specified can be changed to any valid C or
C++ data type.
5The size of the array must be substituted for n.
6Alpha specific.
E.7 COBOL Implementations
Table E-7 lists the OpenVMS data types and their corresponding
COBOL data type declarations.
Table E-7 COBOL Implementations
OpenVMS Data Types |
COBOL Declarations |
access_bit_names
|
na ... PIC X(128)
1
|
access_mode
|
na ... PIC X
1
The access_mode data type is usually passed BY VALUE as PIC 9(5)
COMP.
|
address
|
USAGE POINTER
|
address_range
|
01 ADDRESS-RANGE
02 BEGINNING-ADDRESS USAGE POINTER
02 ENDING-ADDRESS USAGE POINTER
|
arg_list
|
na ... Constructed by the compiler as a result of using the COBOL CALL
statement. An argument list may be created as follows, but cannot be
referenced by the COBOL CALL statement.
01 ARG-LIST
02 ARG-COUNT PIC S9(5) COMP
02 ARG-BY-VALUE PIC S9(5) COMP
02 ARG-BY-REFERENCE USAGE POINTER
02 VALUE REFERENCE ARG-NAME
... continue as needed
|
ast_procedure
|
01 AST-PROC PIC 9(5) COMP
2
|
boolean
|
01 BOOLEAN-VALUE PIC 9(5) COMP
2
|
byte_signed
|
na ... PIC X
1
|
byte_unsigned
|
na ... PIC X
1
|
channel
|
01 CHANNEL PIC 9(4) COMP
2
|
char_string
|
01 CHAR-STRING PIC X to PIC X(65535)
|
complex_number
|
na ... PIC X(
n), where
n is the length.
1
|
cond_value
|
01 COND-VALUE PIC 9(5) COMP
2
|
context
|
01 CONTEXT PIC 9(5) COMP
2
|
date_time
|
na ... PIC X(16)
1
|
device_name
|
01 DEVICE-NAME PIC X(
n), where
n is the length.
|
ef_cluster_name
|
01 CLUSTER-NAME PIC X(
n), where
n is the length.
|
ef_number
|
01 EF-NO PIC 9(5) COMP
2
|
exit_handler_block
|
na ... PIC X(
n), where
n is the length.
1
|
fab
|
na ... Too complex for general COBOL use. Most of a FAB structure can
be described by a lengthy COBOL record description, but such a FAB
cannot then be referenced by a COBOL I-O statement. It is much simpler
to do the I-O completely within COBOL, and let the COBOL compiler
generate the FAB structure or do the I-O in another language.
|
file_protection
|
01 FILE-PROT PIC 9(4) COMP
2
|
floating_point
|
01 F-FLOAT USAGE COMP-1
01 D-FLOAT USAGE COMP-2
The G-float and H-float data types are not supported in COBOL.
|
function_code
|
01 FUNCTION-CODE
02 MAJOR-FUNCTION PIC 9(4) COMP
2
02 SUB-FUNCTION PIC 9(4) COMP
2
|
identifier
|
01 ID PIC 9(5) COMP
2
|
invo_context_blk
3
|
na
|
invo_handle
3
|
na
|
io_status_block
|
01 IOSB
02 COND-VAL PIC 9(4) COMP
2
02 BYTE-CNT PIC 9(4) COMP
2
02 DEV-INFO PIC 9(5) COMP
2
|
item_list_2
|
01 ITEM-LIST-TWO
02 ITEM-LIST OCCURS
n TIMES
04 COMP-LENGTH PIC S9(4) COMP
04 ITEM-CODE PIC S9(4) COMP
04 COMP-ADDRESS PIC S9(5) COMP
02 TERMINATOR PIC S9(5) COMP VALUE 0
|
item_list_3
|
01 ITEM-LIST-3
02 ITEM-LIST OCCURS
n TIMES
04 BUF-LEN PIC S9(4) COMP
04 ITEM-CODE PIC S9(4) COMP
04 BUFFER-ADDRESS PIC S9(5) COMP
04 LENGTH-ADDRESS PIC S9(5) COMP
02 TERMINATOR PIC S9(5) COMP VALUE 0
|
item_list_pair
|
01 ITEM-LIST-PAIR
02 ITEM-LIST OCCURS
n TIMES
04 ITEM-CODE PIC S9(5) COMP
04 ITEM-VALUE PIC S9(5) COMP
02 TERMINATOR PIC S9(5) COMP VALUE 0
|
item_quota_list
|
na
|
lock_id
|
01 LOCK-ID PIC 9(5) COMP
2
|
lock_status_block
|
na
|
lock_value_block
|
na
|
logical_name
|
01 LOG-NAME PIC X TO X(255)
|
longword_signed
|
01 LWS PIC S9(5) COMP
|
longword_unsigned
|
01 LWU PIC 9(5) COMP
2
|
mask_byte
|
na ... PIC X
1
|
mask_longword
|
01 MLW PIC 9(5) COMP
2
|
mask_quadword
|
01 MQW PIC 9(18) COMP
2
|
mask_word
|
01 MW PIC 9(4) COMP
2
|
mechanism_args
|
na
|
null_arg
|
CALL ... USING OMITTED or
PIC S9(5) COMP VALUE 0 passed USING BY VALUE
|
octaword_signed
|
na
|
octaword_unsigned
|
na
|
page_protection
|
01 PAGE-PROT PIC 9(5) COMP
2
|
procedure
|
01 ENTRY-MASK PIC 9(5) COMP
2
|
process_id
|
01 PID PIC 9(5) COMP
2
|
process_name
|
01 PROCESS-NAME PIC X TO X(15)
|
quadword_signed
|
01 QWS PIC S9(18) COMP
|
quadword_unsigned
|
01 QWU PIC 9(18) COMP
2
|
rights_holder
|
01 RIGHTS-HOLDER
02 RIGHTS-ID PIC 9(5) COMP
2
02 ACCESS-RIGHTS PIC 9(5) COMP
2
|
rights_id
|
01 RIGHTS-ID PIC 9(5) COMP
2
|
rab
|
na ... Too complex for general COBOL use. Most of a RAB structure can
be described by a lengthy COBOL record description, but such a RAB
cannot then be referenced by a COBOL I-O statement. It is much simpler
to do the I-O completely within COBOL, and let the COBOL compiler
generate the RAB structure, or do the I-O in another language.
|
section_id
|
01 SECTION-ID PIC 9(18) COMP
2
|
section_name
|
01 SECTION-NAME PIC X to X(43)
|
system_access_id
|
01 SECTION-ACCESS-ID PIC 9(18) COMP
2
|
time_name
|
01 TIME-NAME PIC X(
n), where
n is the length.
|
transaction_id
|
na
|
uic
|
01 UIC PIC 9(5) COMP
2
|
user_arg
|
01 USER-ARG PIC 9(5) COMP
2
|
varying_arg
|
Depends on the application.
|
vector_byte_signed
|
na ...
3
|
vector_byte_unsigned
|
na ...
3
|
vector_longword_signed
|
na ...
3
|
vector_longword_unsigned
|
na ...
3
|
vector_quadword_signed
|
na ...
3
|
vector_quadword_unsigned
|
na ...
3
|
vector_word_signed
|
na ...
3
|
vector_word_unsigned
|
na ...
4
|
word_signed
|
01 WS PIC S9(4) COMP
|
word_unsigned
|
01 WS PIC 9(4) COMP
2
|
1Most OpenVMS data types not directly supported in COBOL can
be represented as an alphanumeric data item of a certain number of
bytes. While COBOL does not interpret the data type, you can use it to
pass objects from one language to another.
2Although unsigned computational data structures are not
directly supported in COBOL, you may substitute the signed equivalent
provided you do not exceed the range of the signed data structure.
3Alpha specific.
4COBOL does not permit the passing of variable-length data
structures.
|