/********************************************************************************************************************************/ /* Created: 15-MAR-2001 23:37:50 by OpenVMS SDL EV1-33 */ /* Source: 15-MAR-2001 23:34:32 _$11$DUA933:[BUILD.SDL]SRMDEF.SDI;1 */ /********************************************************************************************************************************/ /*** MODULE $DSCDEF ***/ #ifndef __DSCDEF_LOADED #define __DSCDEF_LOADED 1 #pragma nostandard #ifdef __cplusplus extern "C" { #define __unknown_params ... #else #define __unknown_params #endif #if !defined(__VAXC) && !defined(VAXC) #define __struct struct #define __union union #else #define __struct variant_struct #define __union variant_union #endif /* Define Procedure argument data types */ /* C.9 ARGUMENT DATA TYPES */ /* The following encoding is used for atomic data elements: */ /* Mnemonic Code Description */ #define DSC$K_DTYPE_Z 0 /* Unspecified. The calling program has */ /* specified no data type/* the called */ /* procedure should assume the argument is of */ /* the correct type. */ #define DSC$K_DTYPE_V 1 /* Bit. An aligned bit string. */ #define DSC$K_DTYPE_BU 2 /* Byte Logical. 8-bit unsigned quantity. */ #define DSC$K_DTYPE_WU 3 /* Word Logical. 16-bit unsigned quantity. */ #define DSC$K_DTYPE_LU 4 /* Longword Logical. 32-bit unsigned */ /* quantity. */ #define DSC$K_DTYPE_QU 5 /* Quadword Logical. 64-bit unsigned */ /* quantity. */ #define DSC$K_DTYPE_OU 25 /* Octaword Logical. 128-bit unsigned */ /* quantity. */ #define DSC$K_DTYPE_B 6 /* Byte Integer. 8-bit signed 2's-complement */ /* integer. */ #define DSC$K_DTYPE_W 7 /* Word Integer. 16-bit signed 2's-complement */ /* integer. */ #define DSC$K_DTYPE_L 8 /* Longword Integer. 32-bit signed */ /* 2's-complement integer. */ #define DSC$K_DTYPE_Q 9 /* Quadword Integer. 64-bit signed */ /* 2's-complement integer. */ #define DSC$K_DTYPE_O 26 /* Octaword Integer. 128-bit signed */ /* 2's-complement integer. */ #define DSC$K_DTYPE_F 10 /* F_floating. 32-bit F_floating quantity representing */ /* a single-precision number. */ #define DSC$K_DTYPE_D 11 /* D_floating. 64-bit D_floating quantity representing */ /* a double-precision number. */ #define DSC$K_DTYPE_G 27 /* G_floating. 64-bit G_floating quantity representing */ /* a double-precision number. */ #define DSC$K_DTYPE_H 28 /* H_floating. 128-bit H_floating quantity representing */ /* a quadruple-precision number. */ #define DSC$K_DTYPE_FC 12 /* F_floating complex. Ordered pair of F_floating */ /* quantities representing a single-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_DC 13 /* D_floating complex. Ordered pair of D_floating */ /* quantities representing a double-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_GC 29 /* G_floating complex. Ordered pair of G_floating */ /* quantities representing a double-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_HC 30 /* H_floating complex. Ordered pair of H_floating */ /* quantities representing a quadruple-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_FS 52 /* IEEE floating basic single S. 32-bit quantity representing */ /* a single-precision number. */ #define DSC$K_DTYPE_FT 53 /* IEEE floating basic double T. 64-bit quantity representing */ /* a double-precision number. */ #define DSC$K_DTYPE_FSC 54 /* IEEE floating basic single S complex. Ordered pair of S_floating */ /* quantities representing a single-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_FTC 55 /* IEEE floating basic double T complex. Ordered pair of T_floating */ /* quantities representing a double-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_FX 57 /* IEEE floating basic quadruple X. 128-bit quantity representing */ /* an extended-precision number. */ #define DSC$K_DTYPE_FXC 58 /* IEEE floating basic quadruple X complex. Ordered pair of X_floating */ /* quantities representing an extended-precision complex */ /* number. The lower addressed quantity is the */ /* real part, the higher addressed quantity is the */ /* imaginary part. */ #define DSC$K_DTYPE_CIT 31 /* COBOL Intermediate Temporary. Floating point */ /* datum with an 18 digit normalized decimal */ /* fraction and a 2 digit decimal exponent. The */ /* fraction is represented as a packed decimal */ /* number. The exponent is represented as a */ /* 16-bit 2's complement integer. A detailed */ /* description of this data type can be found in */ /* Section 7.4 of SRM Appendix C. */ #define DSC$K_DTYPE_VU 34 /* Bit Unaligned. */ /* The following string types are ordinarily described by a string */ /* descriptor. The data type codes below occur in those descriptors: */ #define DSC$K_DTYPE_T 14 /* Character-coded text. A single 8-bit character */ /* (atomic data type) or a sequence of 0 to */ /* 2**16-1 8-bit characters (string data type). */ #define DSC$K_DTYPE_VT 37 /* Varying Character-coded Text Data Type. */ #define DSC$K_DTYPE_T2 38 /* 16-bit Text (Asian workstations) */ #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. */ /* The following encodings are used for 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. This data type allows a descriptor */ /* to be an argument data type, thereby allowing */ /* the use of levels of descriptors. */ #define DSC$K_DTYPE_BPV 32 /* Bound Procedure Value. A two longword entity */ /* in which the first longword contains the address */ /* of a procedure entry mask and the second longword */ /* contains the environment value. The environmeent */ /* value is determined in a language specific */ /* fashion when the original Bound Procedure Value */ /* is generated. When the bound procedure is */ /* invoked, the calling program loads the second */ /* longword into R1. This data type can be passed */ /* using the immediate value mechanism when the */ /* environment value is not needed. In this case */ /* the argument list entry contains the address of */ /* the procedure entry mask and the second longword */ /* is omitted. */ #define DSC$K_DTYPE_BLV 33 /* Bound label value. */ #define DSC$K_DTYPE_ADT 35 /* Absolute Date and Time */ /* K DTYPE_???,36 /* DTYPE code 36 is reserved for future definition */ /* The following types are used by the VAX/VMS Debug Facility: \FOR */ /* INTERNAL DOCUMENTATION ONLY. For details, see VAX/VMS Debug Facility */ /* Documentation.\ */ #define DSC$K_DTYPE_CAD 178 /* Address calculation command */ #define DSC$K_DTYPE_ENT 179 /* Entry global definition */ #define DSC$K_DTYPE_GBL 180 /* Global symbol definition */ #define DSC$K_DTYPE_EPT 181 /* Entry point to routine. */ #define DSC$K_DTYPE_R11 182 /* Line number relative to R11 correlation */ /* table. */ #define DSC$K_DTYPE_FLD 183 /* BLISS FIELD name. */ #define DSC$K_DTYPE_PCT 184 /* PSECT information. */ #define DSC$K_DTYPE_DPC 185 /* PC correlation table for FORTRAN IV+ */ #define DSC$K_DTYPE_LBL 186 /* LITERAL or LABEL */ #define DSC$K_DTYPE_SLB 187 /* Label in non-assembly language modules */ #define DSC$K_DTYPE_MOD 188 /* Beginning of new module */ #define DSC$K_DTYPE_EOM 189 /* End of module */ #define DSC$K_DTYPE_RTN 190 /* Beginning of new routine */ #define DSC$K_DTYPE_EOR 191 /* End of routine */ /* The following type codes are RESERVED for future use: */ /* 37-177 RESERVED to DEC */ /* 192-255 RESERVED to CSS and customers */ /* C.10 ARGUMENT DESCRIPTORS */ /* A uniform descriptor mechanism is defined for use by all procedures */ /* which conform to this standard. Descriptors are uniformly typed and */ /* the mechanism is extensible. As new varieties of descriptor become */ /* necessary, they will be added to this catalogue. */ /* Note: */ /* */ /* All fields represent unsigned quantities unless explicitly stated */ /* otherwise. */ /* C.10.1 Descriptor Prototype */ /* Each class of descriptor consists of at least 2 longwords in the */ /* following format: */ /* +-------+-------+---------------+ */ /* | CLASS | DTYPE | LENGTH | :Descriptor */ /* +-------+-------+---------------+ */ /* | POINTER | */ /* +-------------------------------+ */ /* DSC$W_LENGTH A one-word field specific to the descriptor */ /* <0,15:0> class/* typically a 16-bit (unsigned) length. */ /* */ /* DSC$B_DTYPE A one-byte atomic data type code (see C.9) */ /* <0,23:16> */ /* */ /* DSC$B_CLASS A one-byte descriptor class code (see below) */ /* <0,31:24> */ /* */ /* DSC$A_POINTER A longword pointing to the first byte of the */ /* <1,31:0> data element described. */ /* Note that the descriptor can be placed in a pair of registers with a */ /* MOVQ instruction and then the length and address used directly. This */ /* gives a word length, so the class and type are placed as bytes in the */ /* rest of that longword. Class 0 is unspecified and hence no more than */ /* the above information can be assumed. */ /* Define the descriptor class codes/* */ #define DSC$K_CLASS_Z 0 /* Unspecified */ #define DSC$K_CLASS_S 1 /* Scalar, String Descriptor */ #define DSC$K_CLASS_D 2 /* Dynamic String Descriptor */ #define DSC$K_CLASS_V 3 /* Reserved for use by Digital */ #define DSC$K_CLASS_A 4 /* Array Descriptor */ #define DSC$K_CLASS_P 5 /* Procedure Descriptor */ #define DSC$K_CLASS_PI 6 /* Procedure Incarnation Descriptor */ #define DSC$K_CLASS_J 7 /* Reserved for use by Digital */ #define DSC$K_CLASS_JI 8 /* Obsolete */ #define DSC$K_CLASS_SD 9 /* Decimal Scalar String Descriptor */ #define DSC$K_CLASS_NCA 10 /* Non-contiguous 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 */ /* The following descriptor class is FOR INTERNAL USE ONLY by the VAX */ /* Common Run-Time Library and Debugger. This descriptor is not passed */ /* between separately compiled modules. For further information, see */ /* VAX-11 BASIC Description of Generated Code, Software Document */ /* Retrieval Number JBS-79-004. */ #define DSC$K_CLASS_BFA 191 /* BASIC File Array Descriptor */ /* Descriptor classes 17-190 are RESERVED to DEC. Classes */ /* 192 through 255 are RESERVED to CSS and customers. */ /* Array Descriptor (DSC$K_CLASS_A) */ /* An array descriptor consists of 3 contiguous blocks. The first block */ /* contains the descriptor prototype information and is part of every */ /* array descriptor. The second and third blocks are optional. If the */ /* third block is present then so is the second. */ /* A complete array descriptor has the form: */ /* +-------+-------+---------------+ */ /* | 4 | DTYPE | LENGTH | :Descriptor */ /* +-------+-------+---------------+ */ /* | POINTER | */ /* +-------+-------+---------------+ */ /* | DIMCT | AFLAGS|DIGITS | SCALE | Block 1 - Prototype */ /* +-------+-------+---------------+ */ /* | ARSIZE | */ /* +-------------------------------+ */ /* */ /* +-------------------------------+ */ /* | A0 | */ /* +-------------------------------+ */ /* | M1 | */ /* +-------------------------------+ */ /* | ... | Block 2 - Multipliers */ /* +-------------------------------+ */ /* | M(n-1) | */ /* +-------------------------------+ */ /* | Mn | */ /* +-------------------------------+ */ /* */ /* +-------------------------------+ */ /* | L1 | */ /* +-------------------------------+ */ /* | U1 | */ /* +-------------------------------+ */ /* | ... | Block 3 - Bounds */ /* +-------------------------------+ */ /* | Ln | */ /* +-------------------------------+ */ /* | Un | */ /* +-------------------------------+ */ /* */ /* */ /*Define descriptor fields: */ /* \The following three fields are only valid for descriptor */ /* class DSC$K_CLASS_BFA (see above). \ */ struct dscdef { /* WARNING: aggregate has origin of -12 */ void *dsc$a_handle; /* The address of a vector of data concerning the */ /* current state of processing of the array. This */ /* is set to zero by the creator of the */ /* descriptor, and maintained thereafter by the */ /* BASIC file array processing functions. */ /* */ unsigned int dsc$l_byteoff; /* Byte offset in the file of element 0,0,...,0 */ /* of the array. This need not be within the */ /* array, or even within the file if the array */ /* does not have zero origin. */ /* */ unsigned int dsc$l_logunit; /* The logical unit number (BASIC channel) on */ /* which the file containing the array has */ /* been opened. This is set by the creator of the */ /* descriptor before first referencing the array. */ /* */ /* End of BASIC File Array specific descriptor fields. The remaining */ /* fields are common to all array descriptors. */ /* */ /* */ unsigned short int dsc$w_length; /* A one-word field specifiec to the descriptor class; */ /* typically a 16-bit (unsigned) length. */ } ; struct dscdef1 { unsigned short int dsc$w_maxstrlen; /* Max length of the BODY field of the varying string */ /* in bytes in the range 0 to 2**16-1. */ /* (Classes VS, VSA) */ unsigned char dsc$b_dtype; /* A one-byte atomic data type code (see C.9) */ /* Symbols used in this filed have form: DSC$K_DTYPE_t */ /* where t is the data type mnemonic from above */ /* and agrees with methodology manual. */ unsigned char dsc$b_class; /* A one-byte descriptor class code (see above). */ /* Symbols used in this field have form: DSC$K_CLASS_f */ /* where f is the argument form mnemonic from above */ /* and agrees with the methodology manual. */ void *dsc$a_pointer; /* A longword pointing to the first byte of the data */ /* element described. */ } ; #define DSC$K_Z_BLN 8 /* Block length in bytes for Z class desc. */ #define DSC$C_Z_BLN 8 /* Block length in bytes for Z class desc. */ #define DSC$K_S_BLN 8 /* Block length in bytes for S class descr. */ #define DSC$C_S_BLN 8 /* Block length in bytes for S class descr. */ #define DSC$K_D_BLN 8 /* Block length in bytes for D class descr. */ #define DSC$C_D_BLN 8 /* Block length in bytes for D class descr. */ #define DSC$K_P_BLN 8 /* Block length in bytes for P class descr. */ #define DSC$C_P_BLN 8 /* Block length in bytes for P class descr. */ #define DSC$K_J_BLN 8 /* Block length in bytes for J class descr. */ #define DSC$C_J_BLN 8 /* Block length in bytes for J class descr. */ #define DSC$K_VS_BLN 8 /* Block length in bytes for VS class descr. */ #define DSC$C_VS_BLN 8 /* Block length in bytes for VS class descr. */ /*+ */ struct dscdef2 { char dscdef$$_fill_3 [4]; void *dsc$a_base; /* Base of address relative to which the signed relative */ /* bit position, POS, is used to locate the bit string. */ /* (Classes UBS, UBA and UBSB) */ /* End of common definitions for all descriptors. */ /*- */ /*+ */ /* Unaligned bit string definitions. */ /*- */ } ; #define DSC$K_UBS_BLN 12 /* Block length in bytes for UBS class descr. */ #define DSC$C_UBS_BLN 12 /* Block length in bytes for UBS class descr. */ /*+ */ struct dscdef3 { char dscdef$$_fill_4 [8]; unsigned int dsc$l_pos; /* Signed longword relative bit position */ /* with respect to BASE of the first bit */ /* of unaligned bit string */ /* WARNING!! Do not use this symbol to reference */ /* class UBA descriptors! The DSC$L_POS in that */ /* descriptor is at a variable location after the */ /* bounds and multiplier blocks. */ /* Varying type descriptor definitions */ /*- */ } ; struct dscdef4 { char dscdef$$_fill_5 [8]; unsigned short int dsc$w_maxlen; /* An unsigned word specifying the */ /* maximum length of the data item */ /* (i.e., the space allocated) */ short int dscdef$$_fill_1; /* reserved word */ /*+ */ /* Array Descriptor definitions */ /*- */ } ; #define DSC$K_SD_BLN 12 /* Block length in bytes for SD class descr. */ #define DSC$C_SD_BLN 12 /* Block length in bytes for SD class descr. */ struct dscdef5 { char dscdef$$_fill_6 [8]; char dsc$b_scale; /* Signed power of ten multiplier to convert the */ /* internal form to external form. For example, */ /* if internal number is 123 and scale is +1, */ /* then the represented external number is 1230. */ unsigned char dsc$b_digits; /* If non-zero, unsigned number of decimal */ /* digits in the external representation. If */ /* zero, the number of digits can be computed */ /* based on DSC$W_LENGTH. */ __union { unsigned char dsc$b_aflags; /* Array flag bits. */ __struct { unsigned dscdef$$_fill_2 : 4; /* reserved to Digital */ unsigned dsc$v_fl_redim : 1; /* If set, the array can be redimensioned; */ /* i.e., DSC$A_A0, DSC$L_Mi, DSC$L_Li, and */ /* DSC$L_Ui may be changed. The redimensioned */ /* array cannot exceed the size allocated to */ /* the array (i.e. DSC$L_ARSIZE). */ unsigned dsc$v_fl_column : 1; /* If set, the elements of the array are */ /* stored by columns (FORTRAN)> Otherwise */ /* the elements are stored by rows. */ unsigned dsc$v_fl_coeff : 1; /* If set, the multiplicative coefficients in */ /* Block 2 are present. */ unsigned dsc$v_fl_bounds : 1; /* If set, the bounds information in Block 3 */ /* is present. */ } dsc$r_aflags_bits; } dsc$r_aflags_overlay; unsigned char dsc$b_dimct; /* Number of dimensions */ unsigned int dsc$l_arsize; /* Total size of array (in bytes unless DTYPE is */ /* EQUL DSC$K_DTYPE_V or DSC$K_DTYPE_P). */ void *dsc$a_a0; /* Address of element A(0,0,...,0). This */ /* need not be within the actual array/* it */ /* is the same as DSC$A_POINTER for 0-origin */ /* arrays. */ } ; #if !defined(__VAXC) && !defined(VAXC) #define dsc$b_aflags dsc$r_aflags_overlay.dsc$b_aflags #define dsc$v_fl_redim dsc$r_aflags_overlay.dsc$r_aflags_bits.dsc$v_fl_redim #define dsc$v_fl_column dsc$r_aflags_overlay.dsc$r_aflags_bits.dsc$v_fl_column #define dsc$v_fl_coeff dsc$r_aflags_overlay.dsc$r_aflags_bits.dsc$v_fl_coeff #define dsc$v_fl_bounds dsc$r_aflags_overlay.dsc$r_aflags_bits.dsc$v_fl_bounds #endif /* #if !defined(__VAXC) && !defined(VAXC) */ struct dscdef6 { char dscdef$$_fill_7 [16]; unsigned int dsc$l_v0; /* Signed bit offset of element A(0,0,...0) with */ /* respect to BASE. (Class UBA) */ /* The following two fields have meaning only if the array is of */ /* class DSC$K_CLASS_NCA (Non-contiguous array). */ unsigned int dsc$l_s1; /* Stride of the first dimension, i.e. the */ /* difference between the addresses of */ /* successive elements of the first dimension. */ unsigned int dsc$l_s2; /* Stride of the second dimension. */ } ; struct dscdef7 { char dscdef$$_fill_8 [20]; unsigned int dsc$l_m1; /* Addressing coefficient M1 = U1-L1+1 */ unsigned int dsc$l_m2; /* Addressing coefficient M2 = U2-L2+1 */ /*+ */ /* Procedure Incarnation descriptor (DSC$K_CLASS_PI) and */ /* Label Incarnation descriptor (DSC$K_CLASS_JI). */ /*- */ } ; #define DSC$K_PI_BLN 12 /* Block length in bytes for PI class descr. */ #define DSC$C_PI_BLN 12 /* Block length in bytes for PI class descr. */ #define DSC$K_JI_BLN 12 /* block length in bytes for JI class descr. */ #define DSC$C_JI_BLN 12 /* block length in bytes for JI class descr. */ /*+ */ struct dscdef8 { char dscdef$$_fill_9 [8]; void *dsc$a_frame; /* Address of frame */ /* String with Bounds descriptor (DSC$K_CLASS_SB). */ /*- */ } ; struct dscdef9 { char dscdef$$_fill_10 [8]; int dsc$l_sb_l1; /* Signed lower bound of first dimension */ int dsc$l_sb_u1; /* Signed upper bound of first dimension */ /*+ */ /* Unaligned Bit String with Bounds descriptor (DSC$K_CLASS_UBSB). */ /*- */ } ; struct dscdef10 { char dscdef$$_fill_11 [12]; int dsc$l_ubsb_l1; /* Signed lower bound of first dimension */ int dsc$l_ubsb_u1; /* Signed upper bound of first dimension */ } ; #ifdef __cplusplus } #endif #pragma standard #endif /* __DSCDEF_LOADED */