#ifndef __DESCRIP_LOADED #define __DESCRIP_LOADED 1 /**************************************************************************** ** ** - VMS Argument Descriptor Formats ** ***************************************************************************** ** Header is nonstandard ***************************************************************************** ** * ** VMS SOFTWARE, INC. CONFIDENTIAL. This software is confidential * ** proprietary software licensed by VMS Software, Inc., and is not * ** authorized to be used, duplicated or disclosed to anyone without * ** the prior written permission of VMS Software, Inc. * ** Copyright 2022 VMS Software, Inc. * ** * ****************************************************************************/ #pragma __nostandard #ifdef __cplusplus extern "C" { #endif #ifdef __INITIAL_POINTER_SIZE # pragma __required_pointer_size __save # pragma __required_pointer_size 32 #endif /* ** Default to member aligned structures */ #pragma __member_alignment __save #pragma __member_alignment /* * 32-BIT DESCRIPTOR DEFINITIONS (64-bit forms follow) */ /* * Descriptor Prototype - each class of descriptor consists of at least the following fields: */ struct dsc$descriptor { unsigned short dsc$w_length; /* specific to descriptor class; typically a 16-bit (unsigned) length */ unsigned char dsc$b_dtype; /* data type code */ unsigned char dsc$b_class; /* descriptor class code */ char *dsc$a_pointer; /* address of first byte of data element */ }; /* * Fixed-Length Descriptor: */ struct dsc$descriptor_s { unsigned short dsc$w_length; /* length of data item in bytes, or if dsc$b_dtype is DSC$K_DTYPE_V, bits, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ unsigned char dsc$b_dtype; /* data type code */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_S */ char *dsc$a_pointer; /* address of first byte of data storage */ }; /* * Dynamic String Descriptor: */ struct dsc$descriptor_d { unsigned short dsc$w_length; /* length of data item in bytes, or if dsc$b_dtype is DSC$K_DTYPE_V, bits, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ unsigned char dsc$b_dtype; /* data type code */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_D */ char *dsc$a_pointer; /* address of first byte of data storage */ }; /* * Array Descriptor: */ struct dsc$descriptor_a { unsigned short dsc$w_length; /* length of an array element in bytes, or if dsc$b_dtype is DSC$K_DTYPE_V, bits, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ unsigned char dsc$b_dtype; /* data type code */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_A */ char *dsc$a_pointer; /* address of first actual byte of data storage */ char dsc$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc$v_fl_binscale, to convert from internal to external form */ unsigned char dsc$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc$v_fl_binscale : 1; /* if set, dsc$b_scale is a power-of-two, otherwise, -ten */ unsigned dsc$v_fl_redim : 1; /* if set, indicates the array can be redimensioned */ unsigned dsc$v_fl_column : 1; /* if set, indicates column-major order (FORTRAN) */ unsigned dsc$v_fl_coeff : 1; /* if set, indicates the multipliers block is present */ unsigned dsc$v_fl_bounds : 1; /* if set, indicates the bounds block is present */ } dsc$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc$l_arsize; /* total size of array in bytes, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ #else unsigned long dsc$l_arsize; /* total size of array in bytes, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ #endif /* * One or two optional blocks of information may follow contiguously at this point; * the first block contains information about the dimension multipliers (if present, * dsc$b_aflags.dsc$v_fl_coeff is set), the second block contains information about * the dimension bounds (if present, dsc$b_aflags.dsc$v_fl_bounds is set). If the * bounds information is present, the multipliers information must also be present. * * The multipliers block has the following format: * char *dsc$a_a0; Address of the element whose subscripts are all zero * int dsc$l_m [DIMCT]; Addressing coefficients (multipliers) * * The bounds block has the following format: * struct * { * int dsc$l_l; Lower bound * int dsc$l_u; Upper bound * } dsc$bounds [DIMCT]; * * (DIMCT represents the value contained in dsc$b_dimct.) */ }; /* * Procedure Descriptor: */ struct dsc$descriptor_p { unsigned short dsc$w_length; /* length associated with the function value */ unsigned char dsc$b_dtype; /* function value data type code */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_P */ int (*dsc$a_pointer)(); /* address of function entry mask */ }; /* * Decimal String Descriptor: */ struct dsc$descriptor_sd { unsigned short dsc$w_length; /* length of data item in bytes, or if dsc$b_dtype is DSC$K_DTYPE_V, bits, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ unsigned char dsc$b_dtype; /* data type code */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_SD */ char *dsc$a_pointer; /* address of first byte of data storage */ char dsc$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc$v_fl_binscale, to convert from internal to external form */ unsigned char dsc$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc$v_fl_binscale : 1; /* if set, dsc$b_scale is a power-of-two, otherwise, -ten */ unsigned : 4; /* reserved; must be zero */ } dsc$b_sflags; /* scalar flag bits */ #pragma __member_alignment unsigned : 8; /* reserved; must be zero */ }; /* * Noncontiguous Array Descriptor: */ struct dsc$descriptor_nca { unsigned short dsc$w_length; /* length of an array element in bytes, or if dsc$b_dtype is DSC$K_DTYPE_V, bits, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ unsigned char dsc$b_dtype; /* data type code */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_NCA */ char *dsc$a_pointer; /* address of first actual byte of data storage */ char dsc$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc$v_fl_binscale, to convert from internal to external form */ unsigned char dsc$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc$v_fl_binscale : 1; /* if set, dsc$b_scale is a power-of-two, otherwise, -ten */ unsigned dsc$v_fl_redim : 1; /* must be zero */ unsigned : 3; /* reserved; must be zero */ } dsc$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc$l_arsize; /* total size of array in bytes, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ #else unsigned long dsc$l_arsize; /* total size of array in bytes, or if dsc$b_dtype is DSC$K_DTYPE_P, digits (4 bits each) */ #endif /* * Two blocks of information must follow contiguously at this point; the first block * contains information about the difference between the addresses of two adjacent * elements in each dimension (the stride). The second block contains information * about the dimension bounds. * * The strides block has the following format: * char *dsc$a_a0; Address of the element whose subscripts are all zero * unsigned int dsc$l_s [DIMCT]; Strides * * The bounds block has the following format: * struct * { * int dsc$l_l; Lower bound * int dsc$l_u; Upper bound * } dsc$bounds [DIMCT]; * * (DIMCT represents the value contained in dsc$b_dimct.) */ }; /* * The Varying String Descriptor and Varying String Array Descriptor are used with strings * of the following form: * * struct * { * unsigned short CURLEN; The current length of BODY in bytes * char BODY [MAXSTRLEN]; A fixed-length area containing the string * }; * * where MAXSTRLEN is the value contained in the dsc$w_maxstrlen field in the descriptor. */ /* * Varying String Descriptor: */ struct dsc$descriptor_vs { unsigned short dsc$w_maxstrlen; /* maximum length of the BODY field of the varying string in bytes */ unsigned char dsc$b_dtype; /* data type code = DSC$K_DTYPE_VT */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_VS */ char *dsc$a_pointer; /* address of the CURLEN field of the varying string */ }; /* * Varying String Array Descriptor: */ struct dsc$descriptor_vsa { unsigned short dsc$w_maxstrlen; /* maximum length of the BODY field of an array element in bytes */ unsigned char dsc$b_dtype; /* data type code = DSC$K_DTYPE_VT */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_VSA */ char *dsc$a_pointer; /* address of first actual byte of data storage */ char dsc$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc$v_fl_binscale, to convert from internal to external form */ unsigned char dsc$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc$v_fl_binscale : 1; /* if set, dsc$b_scale is a power-of-two, otherwise, -ten */ unsigned dsc$v_fl_redim : 1; /* must be zero */ unsigned : 3; /* reserved; must be zero */ } dsc$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc$l_arsize; /* if elements are actually contiguous, total size of array in bytes */ #else unsigned long dsc$l_arsize; /* if elements are actually contiguous, total size of array in bytes */ #endif /* * Two blocks of information must follow contiguously at this point; the first block * contains information about the difference between the addresses of two adjacent * elements in each dimension (the stride). The second block contains information * about the dimension bounds. * * The strides block has the following format: * char *dsc$a_a0; Address of the element whose subscripts are all zero * unsigned int dsc$l_s [DIMCT]; Strides * * The bounds block has the following format: * struct * { * int dsc$l_l; Lower bound * int dsc$l_u; Upper bound * } dsc$bounds [DIMCT]; * * (DIMCT represents the value contained in dsc$b_dimct.) */ }; /* * Unaligned Bit String Descriptor: */ struct dsc$descriptor_ubs { unsigned short dsc$w_length; /* length of data item in bits */ unsigned char dsc$b_dtype; /* data type code = DSC$K_DTYPE_VU */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_UBS */ char *dsc$a_base; /* address to which dsc$l_pos is relative */ #if defined(__clang__) int dsc$l_pos; /* bit position relative to dsc$a_base of first bit in string */ #else long dsc$l_pos; /* bit position relative to dsc$a_base of first bit in string */ #endif }; /* * Unaligned Bit Array Descriptor: */ struct dsc$descriptor_uba { unsigned short dsc$w_length; /* length of data item in bits */ unsigned char dsc$b_dtype; /* data type code = DSC$K_DTYPE_VU */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_UBA */ char *dsc$a_base; /* address to which effective bit offset is relative */ char dsc$b_scale; /* reserved; must be zero */ unsigned char dsc$b_digits; /* reserved; must be zero */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc$v_fl_binscale : 1; /* must be zero */ unsigned dsc$v_fl_redim : 1; /* must be zero */ unsigned : 3; /* reserved; must be zero */ } dsc$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc$l_arsize; /* total size of array in bits */ #else unsigned long dsc$l_arsize; /* total size of array in bits */ #endif /* * Three blocks of information must follow contiguously at this point; the first block * contains information about the difference between the bit addresses of two adjacent * elements in each dimension (the stride). The second block contains information * about the dimension bounds. The third block is the relative bit position with * respect to dsc$a_base of the first actual bit of the array. * * The strides block has the following format: * int dsc$l_v0; Bit offset of the element whose subscripts are all zero, * with respect to dsc$a_base * unsigned int dsc$l_s [DIMCT]; Strides * * The bounds block has the following format: * struct * { * int dsc$l_l; Lower bound * int dsc$l_u; Upper bound * } dsc$bounds [DIMCT]; * * The last block has the following format: * int dsc$l_pos; * * (DIMCT represents the value contained in dsc$b_dimct.) */ }; /* * String with Bounds Descriptor: */ struct dsc$descriptor_sb { unsigned short dsc$w_length; /* length of string in bytes */ unsigned char dsc$b_dtype; /* data type code = DSC$K_DTYPE_T */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_SB */ char *dsc$a_pointer; /* address of first byte of data storage */ #if defined(__clang__) int dsc$l_sb_l1; /* lower bound */ int dsc$l_sb_u1; /* upper bound */ #else long dsc$l_sb_l1; /* lower bound */ long dsc$l_sb_u1; /* upper bound */ #endif }; /* * Unaligned Bit String with Bounds Descriptor: */ struct dsc$descriptor_ubsb { unsigned short dsc$w_length; /* length of data item in bits */ unsigned char dsc$b_dtype; /* data type code = DSC$K_DTYPE_VU */ unsigned char dsc$b_class; /* descriptor class code = DSC$K_CLASS_UBSB */ char *dsc$a_base; /* address to which dsc$l_pos is relative */ #if defined(__clang__) int dsc$l_pos; /* bit position relative to dsc$a_base of first bit in string */ int dsc$l_ubsb_l1; /* lower bound */ int dsc$l_ubsb_u1; /* upper bound */ #else long dsc$l_pos; /* bit position relative to dsc$a_base of first bit in string */ long dsc$l_ubsb_l1; /* lower bound */ long dsc$l_ubsb_u1; /* upper bound */ #endif }; /* * Codes for dsc$b_dtype: */ /* * Atomic data types: */ #define DSC$K_DTYPE_Z 0 /* unspecified */ #define DSC$K_DTYPE_BU 2 /* byte (unsigned); 8-bit unsigned quantity */ #define DSC$K_DTYPE_WU 3 /* word (unsigned); 16-bit unsigned quantity */ #define DSC$K_DTYPE_LU 4 /* longword (unsigned); 32-bit unsigned quantity */ #define DSC$K_DTYPE_QU 5 /* quadword (unsigned); 64-bit unsigned quantity */ #define DSC$K_DTYPE_OU 25 /* octaword (unsigned); 128-bit unsigned quantity */ #define DSC$K_DTYPE_B 6 /* byte integer (signed); 8-bit signed 2's-complement integer */ #define DSC$K_DTYPE_W 7 /* word integer (signed); 16-bit signed 2's-complement integer */ #define DSC$K_DTYPE_L 8 /* longword integer (signed); 32-bit signed 2's-complement integer */ #define DSC$K_DTYPE_Q 9 /* quadword integer (signed); 64-bit signed 2's-complement integer */ #define DSC$K_DTYPE_O 26 /* octaword integer (signed); 128-bit signed 2's-complement integer */ #define DSC$K_DTYPE_F 10 /* F_floating; 32-bit single-precision floating point */ #define DSC$K_DTYPE_D 11 /* D_floating; 64-bit double-precision floating point */ #define DSC$K_DTYPE_G 27 /* G_floating; 64-bit double-precision floating point */ #define DSC$K_DTYPE_H 28 /* H_floating; 128-bit quadruple-precision floating point */ #define DSC$K_DTYPE_FC 12 /* F_floating complex */ #define DSC$K_DTYPE_DC 13 /* D_floating complex */ #define DSC$K_DTYPE_GC 29 /* G_floating complex */ #define DSC$K_DTYPE_HC 30 /* H_floating complex */ #define DSC$K_DTYPE_CIT 31 /* COBOL Intermediate Temporary */ /* * String data types: */ #define DSC$K_DTYPE_T 14 /* character string; a single 8-bit character or a sequence of characters */ #define DSC$K_DTYPE_VT 37 /* varying character string; 16-bit count, followed by a string */ #define DSC$K_DTYPE_NU 15 /* numeric string, unsigned */ #define DSC$K_DTYPE_NL 16 /* numeric string, left separate sign */ #define DSC$K_DTYPE_NLO 17 /* numeric string, left overpunched sign */ #define DSC$K_DTYPE_NR 18 /* numeric string, right separate sign */ #define DSC$K_DTYPE_NRO 19 /* numeric string, right overpunched sign */ #define DSC$K_DTYPE_NZ 20 /* numeric string, zoned sign */ #define DSC$K_DTYPE_P 21 /* packed decimal string */ #define DSC$K_DTYPE_V 1 /* aligned bit string */ #define DSC$K_DTYPE_VU 34 /* unaligned bit string */ /* * IEEE data types: */ #define DSC$K_DTYPE_FS 52 /* IEEE float basic single S */ #define DSC$K_DTYPE_FT 53 /* IEEE float basic double T */ #define DSC$K_DTYPE_FSC 54 /* IEEE float basic single S complex */ #define DSC$K_DTYPE_FTC 55 /* IEEE float basic double T complex */ /* * Miscellaneous data types: */ #define DSC$K_DTYPE_ZI 22 /* sequence of instructions */ #define DSC$K_DTYPE_ZEM 23 /* procedure entry mask */ #define DSC$K_DTYPE_DSC 24 /* descriptor */ #define DSC$K_DTYPE_BPV 32 /* bound procedure value */ #define DSC$K_DTYPE_BLV 33 /* bound label value */ #define DSC$K_DTYPE_ADT 35 /* absolute date and time */ /* * Reserved data type codes: * codes 38-191 are reserved to DIGITAL; * codes 160-191 are reserved to DIGITAL facilities for facility-specific purposes; * codes 192-255 are reserved for DIGITAL's Computer Special Systems Group * and for customers for their own use. */ /* * Codes for dsc$b_class: */ #define DSC$K_CLASS_S 1 /* fixed-length descriptor */ #define DSC$K_CLASS_D 2 /* dynamic string descriptor */ /* DSC$K_CLASS_V ** variable buffer descriptor; reserved for use by DIGITAL */ #define DSC$K_CLASS_A 4 /* array descriptor */ #define DSC$K_CLASS_P 5 /* procedure descriptor */ /* DSC$K_CLASS_PI ** procedure incarnation descriptor; obsolete */ /* DSC$K_CLASS_J ** label descriptor; reserved for use by the VMS Debugger */ /* DSC$K_CLASS_JI ** label incarnation descriptor; obsolete */ #define DSC$K_CLASS_SD 9 /* decimal string descriptor */ #define DSC$K_CLASS_NCA 10 /* noncontiguous array descriptor */ #define DSC$K_CLASS_VS 11 /* varying string descriptor */ #define DSC$K_CLASS_VSA 12 /* varying string array descriptor */ #define DSC$K_CLASS_UBS 13 /* unaligned bit string descriptor */ #define DSC$K_CLASS_UBA 14 /* unaligned bit array descriptor */ #define DSC$K_CLASS_SB 15 /* string with bounds descriptor */ #define DSC$K_CLASS_UBSB 16 /* unaligned bit string with bounds descriptor */ /* * Reserved descriptor class codes: * codes 15-191 are reserved to DIGITAL; * codes 160-191 are reserved to DIGITAL facilities for facility-specific purposes; * codes 192-255 are reserved for DIGITAL's Computer Special Systems Group * and for customers for their own use. */ /* * A simple macro to construct a 32-bit string descriptor: */ #define $DESCRIPTOR(name,string) struct dsc$descriptor_s name = { sizeof(string)-1, DSC$K_DTYPE_T, DSC$K_CLASS_S, string } /* * 64-BIT DESCRIPTOR DEFINITIONS */ #ifdef __INITIAL_POINTER_SIZE #pragma __required_pointer_size 64 /* * 64-bit Descriptor Prototype - each class of descriptor consists of at least the following fields: */ struct dsc64$descriptor { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code */ unsigned char dsc64$b_class; /* descriptor class code */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* quadword length */ char *dsc64$pq_pointer; /* address of first byte of data storage */ }; /* * 64-bit Fixed-Length Descriptor: */ struct dsc64$descriptor_s { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_S */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of data item in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_V, bits, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ char *dsc64$pq_pointer; /* address of first byte of data storage */ }; /* * 64-bit Dynamic String Descriptor: */ struct dsc64$descriptor_d { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_D */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of data item in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_V, bits, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ char *dsc64$pq_pointer; /* address of first byte of data storage */ }; /* * 64-bit Array Descriptor: */ struct dsc64$descriptor_a { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_A */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of an array element in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_V, bits, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ char *dsc64$pq_pointer; /* address of first byte of data storage */ char dsc64$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc64$v_fl_binscale, to convert from internal to external form */ unsigned char dsc64$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc64$v_fl_binscale : 1; /* if set, dsc64$b_scale is a power-of-two, otherwise, -ten */ unsigned dsc64$v_fl_redim : 1; /* if set, indicates the array can be redimensioned */ unsigned dsc64$v_fl_column : 1; /* if set, indicates column-major order (FORTRAN) */ unsigned dsc64$v_fl_coeff : 1; /* if set, indicates the multipliers block is present */ unsigned dsc64$v_fl_bounds : 1; /* if set, indicates the bounds block is present */ } dsc64$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc64$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #else unsigned long dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #endif unsigned __int64 dsc64$q_arsize; /* total size of array in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ /* * One or two optional blocks of information may follow contiguously at this point; * the first block contains information about the dimension multipliers (if present, * dsc64$b_aflags.dsc64$v_fl_coeff is set), the second block contains information about * the dimension bounds (if present, dsc64$b_aflags.dsc64$v_fl_bounds is set). If the * bounds information is present, the multipliers information must also be present. * * The multipliers block has the following format: * char *dsc64$pq_a0; (quad) Address of the element whose subscripts are all zero * __int64 dsc64$q_m [DIMCT]; Addressing coefficients (multipliers) * * The bounds block has the following format: * struct * { * __int64 dsc64$q_l; Lower bound * __int64 dsc64$q_u; Upper bound * } dsc64$bounds [DIMCT]; * * (DIMCT represents the value contained in dsc64$b_dimct.) */ }; /* * 64-bit Procedure Descriptor: */ struct dsc64$descriptor_p { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* function value data type code */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_P */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length associated with the function value */ int (*dsc64$pq_pointer)(); /* address of function entry mask */ }; /* * 64-bit Decimal String Descriptor: */ struct dsc64$descriptor_sd { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_SD */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of data item in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_V, bits, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ char *dsc64$pq_pointer; /* address of first byte of data storage */ char dsc64$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc64$v_fl_binscale, to convert from internal to external form */ unsigned char dsc64$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc64$v_fl_binscale : 1; /* if set, dsc64$b_scale is a power-of-two, otherwise, -ten */ unsigned : 4; /* reserved; must be zero */ } dsc64$b_sflags; /* scalar flag bits */ #pragma __member_alignment unsigned : 8; /* reserved; must be zero */ #if defined(__clang__) unsigned int dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #else unsigned long dsc64$l_mbz;/* MBZ field to preserve quad alignment */ #endif }; /* * 64-bit Noncontiguous Array Descriptor: */ struct dsc64$descriptor_nca { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_NCA */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of an array element in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_V, bits, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ char *dsc64$pq_pointer; /* address of first byte of data storage */ char dsc64$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc64$v_fl_binscale, to convert from internal to external form */ unsigned char dsc64$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc64$v_fl_binscale : 1; /* if set, dsc64$b_scale is a power-of-two, otherwise, -ten */ unsigned dsc64$v_fl_redim : 1; /* must be zero */ unsigned : 3; /* reserved; must be zero */ } dsc64$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc64$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #else unsigned long dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #endif unsigned __int64 dsc64$q_arsize; /* if elements are actually contiguous, total size of array in bytes, or if dsc64$b_dtype is DSC64$K_DTYPE_P, digits (4 bits each) */ /* * Two blocks of information must follow contiguously at this point; the first block * contains information about the difference between the addresses of two adjacent * elements in each dimension (the stride). The second block contains information * about the dimension bounds. * * The strides block has the following format: * char *dsc64$pq_a0; (quad) Address of the element whose subscripts are all zero * __int64 dsc64$q_s [DIMCT]; Strides * * The bounds block has the following format: * struct * { * __int64 dsc64$q_l; Lower bound * __int64 dsc64$q_u; Upper bound * } dsc64$bounds [DIMCT]; * * (DIMCT represents the value contained in dsc64$b_dimct.) */ }; /* * The Varying String Descriptor and Varying String Array Descriptor are used with strings * of the following form: * * struct * { * unsigned short CURLEN; The current length of BODY in bytes * char BODY [MAXSTRLEN]; A fixed-length area containing the string * }; * * where MAXSTRLEN is the value contained in the dsc64$w_maxstrlen field in the descriptor. */ /* * 64-bit Varying String Descriptor: */ struct dsc64$descriptor_vs { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code = DSC64$K_DTYPE_VT */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_VS */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_maxstrlen; /* maximum length of the BODY field of the varying string in bytes */ char *dsc64$pq_pointer; /* address of the CURLEN field of the varying string */ }; /* * 64-bit Varying String Array Descriptor: */ struct dsc64$descriptor_vsa { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code = DSC64$K_DTYPE_VT */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_VSA */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_maxstrlen; /* maximum length of the BODY field of the varying string in bytes */ char *dsc64$pq_pointer; /* address of first actual byte of data storage */ char dsc64$b_scale; /* signed power-of-two or -ten multiplier, as specified by dsc64$v_fl_binscale, to convert from internal to external form */ unsigned char dsc64$b_digits; /* if nonzero, number of decimal digits in internal representation */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc64$v_fl_binscale : 1; /* if set, dsc64$b_scale is a power-of-two, otherwise, -ten */ unsigned dsc64$v_fl_redim : 1; /* must be zero */ unsigned : 3; /* reserved; must be zero */ } dsc64$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc64$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #else unsigned long dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #endif unsigned __int64 dsc64$q_arsize; /* if elements are actually contiguous, total size of array in bytes */ /* * Two blocks of information must follow contiguously at this point; the first block * contains information about the difference between the addresses of two adjacent * elements in each dimension (the stride). The second block contains information * about the dimension bounds. * * The strides block has the following format: * char *dsc64$pq_a0; (quad) Address of the element whose subscripts are all zero * __int64 dsc64$q_s [DIMCT]; Strides * * The bounds block has the following format: * struct * { * __int64 dsc64$q_l; Lower bound * __int64 dsc64$q_u; Upper bound * } dsc64$bounds [DIMCT]; * * (DIMCT represents the value contained in dsc64$b_dimct.) */ }; /* * 64-bit Unaligned Bit String Descriptor: */ struct dsc64$descriptor_ubs { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code = DSC64$K_DTYPE_VU */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_UBS */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of data item in bits */ char *dsc64$pq_base; /* address to which dsc64$l_pos is relative */ __int64 dsc64$q_pos; /* bit position relative to dsc64$a_base of first bit in string */ }; /* * 64-bit Unaligned Bit Array Descriptor: */ struct dsc64$descriptor_uba { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code = DSC64$K_DTYPE_VU */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_UBA */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of data item in bits */ char *dsc64$pq_base; /* address to which effective bit offset is relative */ char dsc64$b_scale; /* reserved; must be zero */ unsigned char dsc64$b_digits; /* reserved; must be zero */ #pragma __nomember_alignment struct { unsigned : 3; /* reserved; must be zero */ unsigned dsc64$v_fl_binscale : 1; /* must be zero */ unsigned dsc64$v_fl_redim : 1; /* must be zero */ unsigned : 3; /* reserved; must be zero */ } dsc64$b_aflags; /* array flag bits */ #pragma __member_alignment unsigned char dsc64$b_dimct; /* number of dimensions */ #if defined(__clang__) unsigned int dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #else unsigned long dsc64$l_mbz; /* MBZ field to preserve quad alignment */ #endif unsigned __int64 dsc64$q_arsize; /* total size of array in bits */ /* * Three blocks of information must follow contiguously at this point; the first block * contains information about the difference between the bit addresses of two adjacent * elements in each dimension (the stride). The second block contains information * about the dimension bounds. The third block is the relative bit position with * respect to dsc64$a_base of the first actual bit of the array. * * The strides block has the following format: * __int64 dsc64$q_v0; Bit offset of the element whose subscripts are all zero, * with respect to dsc64$a_base * __int64 dsc64$q_s [DIMCT]; Strides * * The bounds block has the following format: * struct * { * __int64 dsc64$q_l; Lower bound * __int64 dsc64$q_u; Upper bound * } dsc64$bounds [DIMCT]; * * The last block has the following format: * __int64 dsc64$q_pos; * * (DIMCT represents the value contained in dsc64$b_dimct.) */ }; /* * 64-bit String with Bounds Descriptor: */ struct dsc64$descriptor_sb { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code = DSC64$K_DTYPE_T */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_SB */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of string in bytes */ char *dsc64$pq_pointer; /* address of first byte of data storage */ __int64 dsc64$q_sb_l1; /* lower bound */ __int64 dsc64$q_sb_u1; /* upper bound */ }; /* * 64-bit Unaligned Bit String with Bounds Descriptor: */ struct dsc64$descriptor_ubsb { unsigned short dsc64$w_mbo; /* must-be-one field overlays 16-bit length field */ unsigned char dsc64$b_dtype; /* data type code = DSC64$K_DTYPE_VU */ unsigned char dsc64$b_class; /* descriptor class code = DSC64$K_CLASS_UBSB */ #if defined(__clang__) int dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #else long dsc64$l_mbmo; /* must-be-minus-one field overlays 32-bit pointer */ #endif unsigned __int64 dsc64$q_length; /* length of data item in bits */ char *dsc64$pq_base; /* address to which dsc64$l_pos is relative */ __int64 dsc64$q_pos; /* bit position relative to dsc64$a_base of first bit in string */ __int64 dsc64$q_ubsb_l1; /* lower bound */ __int64 dsc64$q_ubsb_u1; /* upper bound */ }; /* * Codes for dsc64$b_dtype: */ /* * Atomic data types: */ #define DSC64$K_DTYPE_Z 0 /* unspecified */ #define DSC64$K_DTYPE_BU 2 /* byte (unsigned); 8-bit unsigned quantity */ #define DSC64$K_DTYPE_WU 3 /* word (unsigned); 16-bit unsigned quantity */ #define DSC64$K_DTYPE_LU 4 /* longword (unsigned); 32-bit unsigned quantity */ #define DSC64$K_DTYPE_QU 5 /* quadword (unsigned); 64-bit unsigned quantity */ #define DSC64$K_DTYPE_OU 25 /* octaword (unsigned); 128-bit unsigned quantity */ #define DSC64$K_DTYPE_B 6 /* byte integer (signed); 8-bit signed 2's-complement integer */ #define DSC64$K_DTYPE_W 7 /* word integer (signed); 16-bit signed 2's-complement integer */ #define DSC64$K_DTYPE_L 8 /* longword integer (signed); 32-bit signed 2's-complement integer */ #define DSC64$K_DTYPE_Q 9 /* quadword integer (signed); 64-bit signed 2's-complement integer */ #define DSC64$K_DTYPE_O 26 /* octaword integer (signed); 128-bit signed 2's-complement integer */ #define DSC64$K_DTYPE_F 10 /* F_floating; 32-bit single-precision floating point */ #define DSC64$K_DTYPE_D 11 /* D_floating; 64-bit double-precision floating point */ #define DSC64$K_DTYPE_G 27 /* G_floating; 64-bit double-precision floating point */ #define DSC64$K_DTYPE_H 28 /* H_floating; 128-bit quadruple-precision floating point */ #define DSC64$K_DTYPE_FC 12 /* F_floating complex */ #define DSC64$K_DTYPE_DC 13 /* D_floating complex */ #define DSC64$K_DTYPE_GC 29 /* G_floating complex */ #define DSC64$K_DTYPE_HC 30 /* H_floating complex */ #define DSC64$K_DTYPE_CIT 31 /* COBOL Intermediate Temporary */ /* * String data types: */ #define DSC64$K_DTYPE_T 14 /* character string; a single 8-bit character or a sequence of characters */ #define DSC64$K_DTYPE_VT 37 /* varying character string; 16-bit count, followed by a string */ #define DSC64$K_DTYPE_NU 15 /* numeric string, unsigned */ #define DSC64$K_DTYPE_NL 16 /* numeric string, left separate sign */ #define DSC64$K_DTYPE_NLO 17 /* numeric string, left overpunched sign */ #define DSC64$K_DTYPE_NR 18 /* numeric string, right separate sign */ #define DSC64$K_DTYPE_NRO 19 /* numeric string, right overpunched sign */ #define DSC64$K_DTYPE_NZ 20 /* numeric string, zoned sign */ #define DSC64$K_DTYPE_P 21 /* packed decimal string */ #define DSC64$K_DTYPE_V 1 /* aligned bit string */ #define DSC64$K_DTYPE_VU 34 /* unaligned bit string */ /* * IEEE data types: */ #define DSC64$K_DTYPE_FS 52 /* IEEE float basic single S */ #define DSC64$K_DTYPE_FT 53 /* IEEE float basic double T */ #define DSC64$K_DTYPE_FSC 54 /* IEEE float basic single S complex */ #define DSC64$K_DTYPE_FTC 55 /* IEEE float basic double T complex */ /* * Miscellaneous data types: */ #define DSC64$K_DTYPE_ZI 22 /* sequence of instructions */ #define DSC64$K_DTYPE_ZEM 23 /* procedure entry mask */ #define DSC64$K_DTYPE_DSC 24 /* descriptor */ #define DSC64$K_DTYPE_BPV 32 /* bound procedure value */ #define DSC64$K_DTYPE_BLV 33 /* bound label value */ #define DSC64$K_DTYPE_ADT 35 /* absolute date and time */ /* * Reserved data type codes: * codes 38-191 are reserved to DIGITAL; * codes 160-191 are reserved to DIGITAL facilities for facility-specific purposes; * codes 192-255 are reserved for DIGITAL's Computer Special Systems Group * and for customers for their own use. */ /* * Codes for dsc64$b_class: */ #define DSC64$K_CLASS_S 1 /* fixed-length descriptor */ #define DSC64$K_CLASS_D 2 /* dynamic string descriptor */ /* DSC64$K_CLASS_V ** variable buffer descriptor; reserved for use by DIGITAL */ #define DSC64$K_CLASS_A 4 /* array descriptor */ #define DSC64$K_CLASS_P 5 /* procedure descriptor */ /* DSC64$K_CLASS_PI ** procedure incarnation descriptor; obsolete */ /* DSC64$K_CLASS_J ** label descriptor; reserved for use by the VMS Debugger */ /* DSC64$K_CLASS_JI ** label incarnation descriptor; obsolete */ #define DSC64$K_CLASS_SD 9 /* decimal string descriptor */ #define DSC64$K_CLASS_NCA 10 /* noncontiguous array descriptor */ #define DSC64$K_CLASS_VS 11 /* varying string descriptor */ #define DSC64$K_CLASS_VSA 12 /* varying string array descriptor */ #define DSC64$K_CLASS_UBS 13 /* unaligned bit string descriptor */ #define DSC64$K_CLASS_UBA 14 /* unaligned bit array descriptor */ #define DSC64$K_CLASS_SB 15 /* string with bounds descriptor */ #define DSC64$K_CLASS_UBSB 16 /* unaligned bit string with bounds descriptor */ /* * Reserved descriptor class codes: * codes 15-191 are reserved to DIGITAL; * codes 160-191 are reserved to DIGITAL facilities for facility-specific purposes; * codes 192-255 are reserved for DIGITAL's Computer Special Systems Group * and for customers for their own use. */ /* * A simple macro to construct a 64-bit string descriptor: */ #define $DESCRIPTOR64(name,string) struct dsc64$descriptor_s name = { 1, DSC64$K_DTYPE_T, DSC64$K_CLASS_S, -1, sizeof(string)-1, string } /* * A macro to distinguish a 64-bit descriptor: */ #define $is_desc64(desc) ((((struct dsc64$descriptor *)desc)->dsc64$l_mbmo == -1) && (((struct dsc64$descriptor *)desc)->dsc64$w_mbo == 1)) #endif /* __INITIAL_POINTER_SIZE */ #ifdef __cplusplus } #endif #pragma __member_alignment __restore #ifdef __INITIAL_POINTER_SIZE # pragma __required_pointer_size __restore #endif #pragma __standard /* This file uses non-ANSI-Standard features */ #endif /* __DESCRIP_LOADED */