!*** MODULE $DSCDEF *** CDEC$ OPTIONS /NOALIGN ! Define Procedure argument data types ! C.9 ARGUMENT DATA TYPES ! The following encoding is used for atomic data elements: ! Mnemonic Code Description PARAMETER DSC$K_DTYPE_Z = '00000000'X ! Unspecified. The calling program has ! specified no data type/* the called ! procedure should assume the argument is of ! the correct type. PARAMETER DSC$K_DTYPE_V = '00000001'X ! Bit. An aligned bit string. PARAMETER DSC$K_DTYPE_BU = '00000002'X ! Byte Logical. 8-bit unsigned quantity. PARAMETER DSC$K_DTYPE_WU = '00000003'X ! Word Logical. 16-bit unsigned quantity. PARAMETER DSC$K_DTYPE_LU = '00000004'X ! Longword Logical. 32-bit unsigned ! quantity. PARAMETER DSC$K_DTYPE_QU = '00000005'X ! Quadword Logical. 64-bit unsigned ! quantity. PARAMETER DSC$K_DTYPE_OU = '00000019'X ! Octaword Logical. 128-bit unsigned ! quantity. PARAMETER DSC$K_DTYPE_B = '00000006'X ! Byte Integer. 8-bit signed 2's-complement ! integer. PARAMETER DSC$K_DTYPE_W = '00000007'X ! Word Integer. 16-bit signed 2's-complement ! integer. PARAMETER DSC$K_DTYPE_L = '00000008'X ! Longword Integer. 32-bit signed ! 2's-complement integer. PARAMETER DSC$K_DTYPE_Q = '00000009'X ! Quadword Integer. 64-bit signed ! 2's-complement integer. PARAMETER DSC$K_DTYPE_O = '0000001A'X ! Octaword Integer. 128-bit signed ! 2's-complement integer. PARAMETER DSC$K_DTYPE_F = '0000000A'X ! F_floating. 32-bit F_floating quantity representing ! a single-precision number. PARAMETER DSC$K_DTYPE_D = '0000000B'X ! D_floating. 64-bit D_floating quantity representing ! a double-precision number. PARAMETER DSC$K_DTYPE_G = '0000001B'X ! G_floating. 64-bit G_floating quantity representing ! a double-precision number. PARAMETER DSC$K_DTYPE_H = '0000001C'X ! H_floating. 128-bit H_floating quantity representing ! a quadruple-precision number. PARAMETER DSC$K_DTYPE_FC = '0000000C'X ! 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. PARAMETER DSC$K_DTYPE_DC = '0000000D'X ! 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. PARAMETER DSC$K_DTYPE_GC = '0000001D'X ! 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. PARAMETER DSC$K_DTYPE_HC = '0000001E'X ! 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. PARAMETER DSC$K_DTYPE_FS = '00000034'X ! IEEE floating basic single S. 32-bit quantity representing ! a single-precision number. PARAMETER DSC$K_DTYPE_FT = '00000035'X ! IEEE floating basic double T. 64-bit quantity representing ! a double-precision number. PARAMETER DSC$K_DTYPE_FSC = '00000036'X ! 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. PARAMETER DSC$K_DTYPE_FTC = '00000037'X ! 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. PARAMETER DSC$K_DTYPE_FX = '00000039'X ! IEEE floating basic quadruple X. 128-bit quantity representing ! an extended-precision number. PARAMETER DSC$K_DTYPE_FXC = '0000003A'X ! 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. PARAMETER DSC$K_DTYPE_CIT = '0000001F'X ! 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. PARAMETER DSC$K_DTYPE_VU = '00000022'X ! Bit Unaligned. ! The following string types are ordinarily described by a string ! descriptor. The data type codes below occur in those descriptors: PARAMETER DSC$K_DTYPE_T = '0000000E'X ! 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). PARAMETER DSC$K_DTYPE_VT = '00000025'X ! Varying Character-coded Text Data Type. PARAMETER DSC$K_DTYPE_T2 = '00000026'X ! 16-bit Text (Asian workstations) PARAMETER DSC$K_DTYPE_NU = '0000000F'X ! Numeric string, unsigned. PARAMETER DSC$K_DTYPE_NL = '00000010'X ! Numeric string, left separate sign. PARAMETER DSC$K_DTYPE_NLO = '00000011'X ! Numeric string, left overpunched sign. PARAMETER DSC$K_DTYPE_NR = '00000012'X ! Numeric string, right separate sign. PARAMETER DSC$K_DTYPE_NRO = '00000013'X ! Numeric string, right overpunched sign. PARAMETER DSC$K_DTYPE_NZ = '00000014'X ! Numeric string, zoned sign. PARAMETER DSC$K_DTYPE_P = '00000015'X ! Packed decimal string. ! The following encodings are used for miscellaneous data types: PARAMETER DSC$K_DTYPE_ZI = '00000016'X ! Sequence of instructions. PARAMETER DSC$K_DTYPE_ZEM = '00000017'X ! Procedure entry mask. PARAMETER DSC$K_DTYPE_DSC = '00000018'X ! Descriptor. This data type allows a descriptor ! to be an argument data type, thereby allowing ! the use of levels of descriptors. PARAMETER DSC$K_DTYPE_BPV = '00000020'X ! 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. PARAMETER DSC$K_DTYPE_BLV = '00000021'X ! Bound label value. PARAMETER DSC$K_DTYPE_ADT = '00000023'X ! 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.\ PARAMETER DSC$K_DTYPE_CAD = '000000B2'X ! Address calculation command PARAMETER DSC$K_DTYPE_ENT = '000000B3'X ! Entry global definition PARAMETER DSC$K_DTYPE_GBL = '000000B4'X ! Global symbol definition PARAMETER DSC$K_DTYPE_EPT = '000000B5'X ! Entry point to routine. PARAMETER DSC$K_DTYPE_R11 = '000000B6'X ! Line number relative to R11 correlation ! table. PARAMETER DSC$K_DTYPE_FLD = '000000B7'X ! BLISS FIELD name. PARAMETER DSC$K_DTYPE_PCT = '000000B8'X ! PSECT information. PARAMETER DSC$K_DTYPE_DPC = '000000B9'X ! PC correlation table for FORTRAN IV+ PARAMETER DSC$K_DTYPE_LBL = '000000BA'X ! LITERAL or LABEL PARAMETER DSC$K_DTYPE_SLB = '000000BB'X ! Label in non-assembly language modules PARAMETER DSC$K_DTYPE_MOD = '000000BC'X ! Beginning of new module PARAMETER DSC$K_DTYPE_EOM = '000000BD'X ! End of module PARAMETER DSC$K_DTYPE_RTN = '000000BE'X ! Beginning of new routine PARAMETER DSC$K_DTYPE_EOR = '000000BF'X ! 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/* PARAMETER DSC$K_CLASS_Z = '00000000'X ! Unspecified PARAMETER DSC$K_CLASS_S = '00000001'X ! Scalar, String Descriptor PARAMETER DSC$K_CLASS_D = '00000002'X ! Dynamic String Descriptor PARAMETER DSC$K_CLASS_V = '00000003'X ! Reserved for use by Digital PARAMETER DSC$K_CLASS_A = '00000004'X ! Array Descriptor PARAMETER DSC$K_CLASS_P = '00000005'X ! Procedure Descriptor PARAMETER DSC$K_CLASS_PI = '00000006'X ! Procedure Incarnation Descriptor PARAMETER DSC$K_CLASS_J = '00000007'X ! Reserved for use by Digital PARAMETER DSC$K_CLASS_JI = '00000008'X ! Obsolete PARAMETER DSC$K_CLASS_SD = '00000009'X ! Decimal Scalar String Descriptor PARAMETER DSC$K_CLASS_NCA = '0000000A'X ! Non-contiguous Array Descriptor PARAMETER DSC$K_CLASS_VS = '0000000B'X ! Varying String Descriptor PARAMETER DSC$K_CLASS_VSA = '0000000C'X ! Varying String Array Descriptor PARAMETER DSC$K_CLASS_UBS = '0000000D'X ! Unaligned Bit String Descriptor PARAMETER DSC$K_CLASS_UBA = '0000000E'X ! Unaligned Bit Array Descriptor PARAMETER DSC$K_CLASS_SB = '0000000F'X ! String with Bounds Descriptor PARAMETER DSC$K_CLASS_UBSB = '00000010'X ! 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. PARAMETER DSC$K_CLASS_BFA = '000000BF'X ! 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). \ STRUCTURE /DSCDEF/ INTEGER*4 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. ! INTEGER*4 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. ! INTEGER*4 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. ! ! INTEGER*2 DSC$W_LENGTH ! A one-word field specifiec to the descriptor class; ! typically a 16-bit (unsigned) length. END STRUCTURE ! DSCDEF STRUCTURE /DSCDEF1/ INTEGER*2 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) BYTE 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. BYTE 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. INTEGER*4 DSC$A_POINTER ! A longword pointing to the first byte of the data ! element described. END STRUCTURE ! DSCDEF1 PARAMETER DSC$K_Z_BLN = '00000008'X ! Block length in bytes for Z class desc. PARAMETER DSC$C_Z_BLN = '00000008'X ! Block length in bytes for Z class desc. PARAMETER DSC$K_S_BLN = '00000008'X ! Block length in bytes for S class descr. PARAMETER DSC$C_S_BLN = '00000008'X ! Block length in bytes for S class descr. PARAMETER DSC$K_D_BLN = '00000008'X ! Block length in bytes for D class descr. PARAMETER DSC$C_D_BLN = '00000008'X ! Block length in bytes for D class descr. PARAMETER DSC$K_P_BLN = '00000008'X ! Block length in bytes for P class descr. PARAMETER DSC$C_P_BLN = '00000008'X ! Block length in bytes for P class descr. PARAMETER DSC$K_J_BLN = '00000008'X ! Block length in bytes for J class descr. PARAMETER DSC$C_J_BLN = '00000008'X ! Block length in bytes for J class descr. PARAMETER DSC$K_VS_BLN = '00000008'X ! Block length in bytes for VS class descr. PARAMETER DSC$C_VS_BLN = '00000008'X ! Block length in bytes for VS class descr. ! + STRUCTURE /DSCDEF2/ BYTE %FILL(1:4) INTEGER*4 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. ! - END STRUCTURE ! DSCDEF2 PARAMETER DSC$K_UBS_BLN = '0000000C'X ! Block length in bytes for UBS class descr. PARAMETER DSC$C_UBS_BLN = '0000000C'X ! Block length in bytes for UBS class descr. ! + STRUCTURE /DSCDEF3/ BYTE %FILL(1:8) INTEGER*4 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 ! - END STRUCTURE ! DSCDEF3 STRUCTURE /DSCDEF4/ BYTE %FILL(1:8) INTEGER*2 DSC$W_MAXLEN ! An unsigned word specifying the ! maximum length of the data item ! (i.e., the space allocated) INTEGER*2 %FILL ! reserved word ! + ! Array Descriptor definitions ! - END STRUCTURE ! DSCDEF4 PARAMETER DSC$K_SD_BLN = '0000000C'X ! Block length in bytes for SD class descr. PARAMETER DSC$C_SD_BLN = '0000000C'X ! Block length in bytes for SD class descr. STRUCTURE /DSCDEF5/ BYTE %FILL(1:8) BYTE 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. BYTE 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 MAP BYTE DSC$B_AFLAGS ! Array flag bits. END MAP MAP PARAMETER DSC$S_FL_REDIM = 1 PARAMETER DSC$V_FL_REDIM = 4 ! 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). PARAMETER DSC$S_FL_COLUMN = 1 PARAMETER DSC$V_FL_COLUMN = 5 ! If set, the elements of the array are ! stored by columns (FORTRAN)> Otherwise ! the elements are stored by rows. PARAMETER DSC$S_FL_COEFF = 1 PARAMETER DSC$V_FL_COEFF = 6 ! If set, the multiplicative coefficients in ! Block 2 are present. PARAMETER DSC$S_FL_BOUNDS = 1 PARAMETER DSC$V_FL_BOUNDS = 7 ! If set, the bounds information in Block 3 ! is present. BYTE %FILL (1) END MAP END UNION BYTE DSC$B_DIMCT ! Number of dimensions INTEGER*4 DSC$L_ARSIZE ! Total size of array (in bytes unless DTYPE is ! EQUL DSC$K_DTYPE_V or DSC$K_DTYPE_P). INTEGER*4 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. END STRUCTURE ! DSCDEF5 STRUCTURE /DSCDEF6/ BYTE %FILL(1:16) INTEGER*4 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). INTEGER*4 DSC$L_S1 ! Stride of the first dimension, i.e. the ! difference between the addresses of ! successive elements of the first dimension. INTEGER*4 DSC$L_S2 ! Stride of the second dimension. END STRUCTURE ! DSCDEF6 STRUCTURE /DSCDEF7/ BYTE %FILL(1:20) INTEGER*4 DSC$L_M1 ! Addressing coefficient M1 = U1-L1+1 INTEGER*4 DSC$L_M2 ! Addressing coefficient M2 = U2-L2+1 ! + ! Procedure Incarnation descriptor (DSC$K_CLASS_PI) and ! Label Incarnation descriptor (DSC$K_CLASS_JI). ! - END STRUCTURE ! DSCDEF7 PARAMETER DSC$K_PI_BLN = '0000000C'X ! Block length in bytes for PI class descr. PARAMETER DSC$C_PI_BLN = '0000000C'X ! Block length in bytes for PI class descr. PARAMETER DSC$K_JI_BLN = '0000000C'X ! block length in bytes for JI class descr. PARAMETER DSC$C_JI_BLN = '0000000C'X ! block length in bytes for JI class descr. ! + STRUCTURE /DSCDEF8/ BYTE %FILL(1:8) INTEGER*4 DSC$A_FRAME ! Address of frame ! String with Bounds descriptor (DSC$K_CLASS_SB). ! - END STRUCTURE ! DSCDEF8 STRUCTURE /DSCDEF9/ BYTE %FILL(1:8) INTEGER*4 DSC$L_SB_L1 ! Signed lower bound of first dimension INTEGER*4 DSC$L_SB_U1 ! Signed upper bound of first dimension ! + ! Unaligned Bit String with Bounds descriptor (DSC$K_CLASS_UBSB). ! - END STRUCTURE ! DSCDEF9 STRUCTURE /DSCDEF10/ BYTE %FILL(1:12) INTEGER*4 DSC$L_UBSB_L1 ! Signed lower bound of first dimension INTEGER*4 DSC$L_UBSB_U1 ! Signed upper bound of first dimension END STRUCTURE ! DSCDEF10 CDEC$ END OPTIONS