! *** PREDECLARED TYPES %IF %DECLARED ( %BASIC$QUADWORD_DECLARED ) = 0 %THEN RECORD BASIC$QUADWORD LONG FILL ( 2 ) END RECORD %LET %BASIC$QUADWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$OCTAWORD_DECLARED ) = 0 %THEN RECORD BASIC$OCTAWORD LONG FILL ( 4 ) END RECORD %LET %BASIC$OCTAWORD_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$HFLOAT_AXP_DECLARED ) = 0 %THEN RECORD BASIC$HFLOAT_AXP LONG FILL ( 4 ) END RECORD %LET %BASIC$HFLOAT_AXP_DECLARED = 1 %END %IF %IF %DECLARED ( %BASIC$F_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$F_FLOATING_COMPLEX SINGLE REAL_PART SINGLE IMAGINARY_PART END RECORD %LET %BASIC$F_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$D_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$D_FLOATING_COMPLEX DOUBLE REAL_PART DOUBLE IMAGINARY_PART END RECORD %LET %BASIC$D_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$G_FLOATING_COMPLEX_DECL ) = 0 %THEN RECORD BASIC$G_FLOATING_COMPLEX GFLOAT REAL_PART GFLOAT IMAGINARY_PART END RECORD %LET %BASIC$G_FLOATING_COMPLEX_DECL = 1 %END %IF %IF %DECLARED ( %BASIC$H_FLOAT_AXP_CMPLX_DCL ) = 0 %THEN RECORD BASIC$H_FLOATING_COMPLEX_AXP BASIC$HFLOAT_AXP REAL_PART BASIC$HFLOAT_AXP IMAGINARY_PART END RECORD %LET %BASIC$H_FLOAT_AXP_CMPLX_DCL = 1 %END %IF ! Define Procedure argument data types ! The following encoding is used for atomic data elements: ! Mnemonic Code Description DECLARE LONG CONSTANT DSC$K_DTYPE_Z = 0 ! Unspecified. The calling program has DECLARE LONG CONSTANT DSC64$K_DTYPE_Z = 0 ! specified no data type/* the called ! procedure should assume the argument is of ! the correct type. DECLARE LONG CONSTANT DSC$K_DTYPE_BU = 2 ! Byte Logical. 8-bit unsigned quantity. DECLARE LONG CONSTANT DSC64$K_DTYPE_BU = 2 DECLARE LONG CONSTANT DSC$K_DTYPE_WU = 3 ! Word Logical. 16-bit unsigned quantity. DECLARE LONG CONSTANT DSC64$K_DTYPE_WU = 3 DECLARE LONG CONSTANT DSC$K_DTYPE_LU = 4 ! Longword Logical. 32-bit unsigned DECLARE LONG CONSTANT DSC64$K_DTYPE_LU = 4 ! quantity. DECLARE LONG CONSTANT DSC$K_DTYPE_QU = 5 ! Quadword Logical. 64-bit unsigned DECLARE LONG CONSTANT DSC64$K_DTYPE_QU = 5 ! quantity. DECLARE LONG CONSTANT DSC$K_DTYPE_OU = 25 ! Octaword Logical. 128-bit unsigned DECLARE LONG CONSTANT DSC64$K_DTYPE_OU = 25 ! quantity. DECLARE LONG CONSTANT DSC$K_DTYPE_B = 6 ! Byte Integer. 8-bit signed 2's-complement DECLARE LONG CONSTANT DSC64$K_DTYPE_B = 6 ! integer. DECLARE LONG CONSTANT DSC$K_DTYPE_W = 7 ! Word Integer. 16-bit signed 2's-complement DECLARE LONG CONSTANT DSC64$K_DTYPE_W = 7 ! integer. DECLARE LONG CONSTANT DSC$K_DTYPE_L = 8 ! Longword Integer. 32-bit signed DECLARE LONG CONSTANT DSC64$K_DTYPE_L = 8 ! 2's-complement integer. DECLARE LONG CONSTANT DSC$K_DTYPE_Q = 9 ! Quadword Integer. 64-bit signed DECLARE LONG CONSTANT DSC64$K_DTYPE_Q = 9 ! 2's-complement integer. DECLARE LONG CONSTANT DSC$K_DTYPE_O = 26 ! Octaword Integer. 128-bit signed DECLARE LONG CONSTANT DSC64$K_DTYPE_O = 26 ! 2's-complement integer. DECLARE LONG CONSTANT DSC$K_DTYPE_F = 10 ! F_floating. 32-bit F_floating quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_F = 10 ! a single-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_D = 11 ! D_floating. 64-bit D_floating quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_D = 11 ! a double-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_G = 27 ! G_floating. 64-bit G_floating quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_G = 27 ! a double-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_H = 28 ! H_floating. 128-bit H_floating quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_H = 28 ! a quadruple-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_FC = 12 ! F_floating complex. Ordered pair of F_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_FC = 12 ! quantities representing a single-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_DC = 13 ! D_floating complex. Ordered pair of D_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_DC = 13 ! quantities representing a double-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_GC = 29 ! G_floating complex. Ordered pair of G_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_GC = 29 ! quantities representing a double-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_HC = 30 ! H_floating complex. Ordered pair of H_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_HC = 30 ! quantities representing a quadruple-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_FS = 52 ! IEEE floating basic single S. 32-bit quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_FS = 52 ! a single-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_FT = 53 ! IEEE floating basic double T. 64-bit quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_FT = 53 ! a double-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_FSC = 54 ! IEEE floating basic single S complex. Ordered pair of S_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_FSC = 54 ! quantities representing a single-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_FTC = 55 ! IEEE floating basic double T complex. Ordered pair of T_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_FTC = 55 ! quantities representing a double-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_FX = 57 ! IEEE floating basic quadruple X. 128-bit quantity representing DECLARE LONG CONSTANT DSC64$K_DTYPE_FX = 57 ! an extended-precision number. DECLARE LONG CONSTANT DSC$K_DTYPE_FXC = 58 ! IEEE floating basic quadruple X complex. Ordered pair of X_floating DECLARE LONG CONSTANT DSC64$K_DTYPE_FXC = 58 ! quantities representing an extended-precision complex ! number. The lower addressed quantity is the ! real part, the higher addressed quantity is the ! imaginary part. DECLARE LONG CONSTANT DSC$K_DTYPE_CIT = 31 ! COBOL Intermediate Temporary. Floating point DECLARE LONG CONSTANT DSC64$K_DTYPE_CIT = 31 ! 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. ! The following string types are ordinarily described by a string ! descriptor. The data type codes below occur in those descriptors: DECLARE LONG CONSTANT DSC$K_DTYPE_T = 14 ! Character-coded text. A single 8-bit character DECLARE LONG CONSTANT DSC64$K_DTYPE_T = 14 ! (atomic data type) or a sequence of 0 to ! 2**16-1 8-bit characters (string data type). DECLARE LONG CONSTANT DSC$K_DTYPE_VT = 37 ! Varying Character-coded Text Data Type. DECLARE LONG CONSTANT DSC64$K_DTYPE_VT = 37 DECLARE LONG CONSTANT DSC$K_DTYPE_T2 = 38 ! 16-bit Text (Asian workstations) DECLARE LONG CONSTANT DSC64$K_DTYPE_T2 = 38 DECLARE LONG CONSTANT DSC$K_DTYPE_NU = 15 ! Numeric string, unsigned. DECLARE LONG CONSTANT DSC64$K_DTYPE_NU = 15 DECLARE LONG CONSTANT DSC$K_DTYPE_NL = 16 ! Numeric string, left separate sign. DECLARE LONG CONSTANT DSC64$K_DTYPE_NL = 16 DECLARE LONG CONSTANT DSC$K_DTYPE_NLO = 17 ! Numeric string, left overpunched sign. DECLARE LONG CONSTANT DSC64$K_DTYPE_NLO = 17 DECLARE LONG CONSTANT DSC$K_DTYPE_NR = 18 ! Numeric string, right separate sign. DECLARE LONG CONSTANT DSC64$K_DTYPE_NR = 18 DECLARE LONG CONSTANT DSC$K_DTYPE_NRO = 19 ! Numeric string, right overpunched sign. DECLARE LONG CONSTANT DSC64$K_DTYPE_NRO = 19 DECLARE LONG CONSTANT DSC$K_DTYPE_NZ = 20 ! Numeric string, zoned sign. DECLARE LONG CONSTANT DSC64$K_DTYPE_NZ = 20 DECLARE LONG CONSTANT DSC$K_DTYPE_P = 21 ! Packed decimal string. DECLARE LONG CONSTANT DSC64$K_DTYPE_P = 21 DECLARE LONG CONSTANT DSC$K_DTYPE_V = 1 ! Bit. An aligned bit string. DECLARE LONG CONSTANT DSC64$K_DTYPE_V = 1 DECLARE LONG CONSTANT DSC$K_DTYPE_VU = 34 ! Bit Unaligned. DECLARE LONG CONSTANT DSC64$K_DTYPE_VU = 34 ! The following encodings are used for miscellaneous data types: DECLARE LONG CONSTANT DSC$K_DTYPE_ZI = 22 ! Sequence of instructions. DECLARE LONG CONSTANT DSC64$K_DTYPE_ZI = 22 DECLARE LONG CONSTANT DSC$K_DTYPE_ZEM = 23 ! Procedure entry mask. DECLARE LONG CONSTANT DSC64$K_DTYPE_ZEM = 23 DECLARE LONG CONSTANT DSC$K_DTYPE_DSC = 24 ! Descriptor. This data type allows a descriptor DECLARE LONG CONSTANT DSC64$K_DTYPE_DSC = 24 ! to be an argument data type, thereby allowing ! the use of levels of descriptors. DECLARE LONG CONSTANT DSC$K_DTYPE_BPV = 32 ! Bound Procedure Value. A two longword entity DECLARE LONG CONSTANT DSC64$K_DTYPE_BPV = 32 ! 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. DECLARE LONG CONSTANT DSC$K_DTYPE_BLV = 33 ! Bound label value. DECLARE LONG CONSTANT DSC64$K_DTYPE_BLV = 33 DECLARE LONG CONSTANT DSC$K_DTYPE_ADT = 35 ! Absolute Date and Time DECLARE LONG CONSTANT DSC64$K_DTYPE_ADT = 35 ! 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.\ DECLARE LONG CONSTANT DSC$K_DTYPE_CAD = 178 ! Address calculation command DECLARE LONG CONSTANT DSC64$K_DTYPE_CAD = 178 DECLARE LONG CONSTANT DSC$K_DTYPE_ENT = 179 ! Entry global definition DECLARE LONG CONSTANT DSC64$K_DTYPE_ENT = 179 DECLARE LONG CONSTANT DSC$K_DTYPE_GBL = 180 ! Global symbol definition DECLARE LONG CONSTANT DSC64$K_DTYPE_GBL = 180 DECLARE LONG CONSTANT DSC$K_DTYPE_EPT = 181 ! Entry point to routine. DECLARE LONG CONSTANT DSC64$K_DTYPE_EPT = 181 DECLARE LONG CONSTANT DSC$K_DTYPE_R11 = 182 ! Line number relative to R11 correlation DECLARE LONG CONSTANT DSC64$K_DTYPE_R11 = 182 ! table. DECLARE LONG CONSTANT DSC$K_DTYPE_FLD = 183 ! BLISS FIELD name. DECLARE LONG CONSTANT DSC64$K_DTYPE_FLD = 183 DECLARE LONG CONSTANT DSC$K_DTYPE_PCT = 184 ! PSECT information. DECLARE LONG CONSTANT DSC64$K_DTYPE_PCT = 184 DECLARE LONG CONSTANT DSC$K_DTYPE_DPC = 185 ! PC correlation table for FORTRAN IV+ DECLARE LONG CONSTANT DSC64$K_DTYPE_DPC = 185 DECLARE LONG CONSTANT DSC$K_DTYPE_LBL = 186 ! LITERAL or LABEL DECLARE LONG CONSTANT DSC64$K_DTYPE_LBL = 186 DECLARE LONG CONSTANT DSC$K_DTYPE_SLB = 187 ! Label in non-assembly language modules DECLARE LONG CONSTANT DSC64$K_DTYPE_SLB = 187 DECLARE LONG CONSTANT DSC$K_DTYPE_MOD = 188 ! Beginning of new module DECLARE LONG CONSTANT DSC64$K_DTYPE_MOD = 188 DECLARE LONG CONSTANT DSC$K_DTYPE_EOM = 189 ! End of module DECLARE LONG CONSTANT DSC64$K_DTYPE_EOM = 189 DECLARE LONG CONSTANT DSC$K_DTYPE_RTN = 190 ! Beginning of new routine DECLARE LONG CONSTANT DSC64$K_DTYPE_RTN = 190 DECLARE LONG CONSTANT DSC$K_DTYPE_EOR = 191 ! End of routine DECLARE LONG CONSTANT DSC64$K_DTYPE_EOR = 191 ! The following type codes are RESERVED for future use: ! 37-177 RESERVED to DEC ! 192-255 RESERVED to CSS and customers ! ! 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. ! ! 32-bit Descriptor Prototype ! ! Each class of 32-bit 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 ! <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. ! ! 64-bit Descriptor Prototype ! ! Each class of 64-bit descriptor consists of at least 3 aligned ! quadwords in the following format: ! ! +-------+-------+---------------+ ! | CLASS | DTYPE | MBO (=1) | :Descriptor ! +-------+-------+---------------+ ! | MBMO (=-1) | ! +-------------------------------+ ! | | : 8 ! +- LENGTH -+ ! | | ! +-------------------------------+ ! | | : 16 ! +- POINTER -+ ! | | ! +-------------------------------+ ! ! DSC64$W_MBO A one-word field which must contain the value 1. ! <0,15:0> ! ! DSC64$B_DTYPE A one-byte atomic data type code ! <0,23:16> ! ! DSC64$B_CLASS A one-byte descriptor class code (see below) ! <0,31:24> ! ! DSC$L_MBMO A longword field which must contain the value -1. ! <1,31:0> ! ! DSC64$Q_LENGTH A quadword containing the length of the ! <2,63:0> data element described. ! ! DSC64$PQ_POINTER A quadword pointing to the first byte of the ! <4,63:0> data element described. ! ! Define the descriptor class codes ! DECLARE LONG CONSTANT DSC$K_CLASS_Z = 0 ! Unspecified DECLARE LONG CONSTANT DSC64$K_CLASS_Z = 0 ! Unspecified DECLARE LONG CONSTANT DSC$K_CLASS_S = 1 ! Scalar, String Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_S = 1 ! Scalar, String Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_D = 2 ! Dynamic String Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_D = 2 ! Dynamic String Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_V = 3 ! Reserved for use by Digital DECLARE LONG CONSTANT DSC64$K_CLASS_V = 3 ! Reserved for use by Digital DECLARE LONG CONSTANT DSC$K_CLASS_A = 4 ! Array Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_A = 4 ! Array Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_P = 5 ! Procedure Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_P = 5 ! Procedure Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_PI = 6 ! Procedure Incarnation Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_PI = 6 ! Procedure Incarnation Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_J = 7 ! Reserved for use by Digital DECLARE LONG CONSTANT DSC64$K_CLASS_J = 7 ! Reserved for use by Digital DECLARE LONG CONSTANT DSC$K_CLASS_JI = 8 ! Obsolete DECLARE LONG CONSTANT DSC$K_CLASS_SD = 9 ! Decimal Scalar String Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_SD = 9 ! Decimal Scalar String Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_NCA = 10 ! Non-contiguous Array Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_NCA = 10 ! Non-contiguous Array Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_VS = 11 ! Varying String Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_VS = 11 ! Varying String Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_VSA = 12 ! Varying String Array Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_VSA = 12 ! Varying String Array Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_UBS = 13 ! Unaligned Bit String Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_UBS = 13 ! Unaligned Bit String Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_UBA = 14 ! Unaligned Bit Array Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_UBA = 14 ! Unaligned Bit Array Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_SB = 15 ! String with Bounds Descriptor DECLARE LONG CONSTANT DSC64$K_CLASS_SB = 15 ! String with Bounds Descriptor DECLARE LONG CONSTANT DSC$K_CLASS_UBSB = 16 ! Unaligned Bit String with Bounds Descriptor DECLARE LONG CONSTANT DSC64$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. DECLARE LONG CONSTANT 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 32-bit 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 | ! +-------------------------------+ ! ! Block 1 of a 64-bit array descriptor has the following ! form. Blocks 2 and 3 have the same form as above, ! EXCEPT that the entries are QUADWORDS rather than ! longwords. ! ! +-------+-------+---------------+ ! | 4 | DTYPE | MBO | :Descriptor ! +-------+-------+---------------+ ! | MBMO | ! +-------+-------+---------------+ ! | | : 8 ! +- LENGTH -+ ! | | ! +-------------------------------+ ! | | : 16 ! +- POINTER -+ ! | | ! +-------------------------------+ ! | DIMCT | AFLAGS|DIGITS | SCALE | : 24 ! +-------+-------+---------------+ ! | MBZ | ! +-------+-------+---------------+ ! | | : 32 ! +- ARSIZE -+ ! | | ! +-------------------------------+ ! ! ! Define descriptor fields. 32-bit versions are defined first, followed ! by the 64-bit equivalents. ! ! \The following three fields are only valid for descriptor ! class DSC$K_CLASS_BFA (see above). \ DECLARE LONG CONSTANT DSC$S_DSCDEF = 14 record DSCDEF LONG 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. LONG 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. LONG 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. ! ! WORD DSC$W_LENGTH ! A one-word field specifiec to the descriptor class; ! typically a 16-bit (unsigned) length. end record DSCDEF DECLARE LONG CONSTANT DSC$S_DSCDEF1 = 8 record DSCDEF1 WORD 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 ! 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. LONG DSC$A_POINTER ! An address pointing to the first byte of the data ! element described. end record DSCDEF1 DECLARE LONG CONSTANT DSC$K_Z_BLN = 8 ! Block length in bytes for Z class descr. DECLARE LONG CONSTANT DSC$C_Z_BLN = 8 ! Block length in bytes for Z class descr. DECLARE LONG CONSTANT DSC$K_S_BLN = 8 ! Block length in bytes for S class descr. DECLARE LONG CONSTANT DSC$C_S_BLN = 8 ! Block length in bytes for S class descr. DECLARE LONG CONSTANT DSC$K_D_BLN = 8 ! Block length in bytes for D class descr. DECLARE LONG CONSTANT DSC$C_D_BLN = 8 ! Block length in bytes for D class descr. DECLARE LONG CONSTANT DSC$K_P_BLN = 8 ! Block length in bytes for P class descr. DECLARE LONG CONSTANT DSC$C_P_BLN = 8 ! Block length in bytes for P class descr. DECLARE LONG CONSTANT DSC$K_J_BLN = 8 ! Block length in bytes for J class descr. DECLARE LONG CONSTANT DSC$C_J_BLN = 8 ! Block length in bytes for J class descr. DECLARE LONG CONSTANT DSC$K_VS_BLN = 8 ! Block length in bytes for VS class descr. DECLARE LONG CONSTANT DSC$C_VS_BLN = 8 ! Block length in bytes for VS class descr. DECLARE LONG CONSTANT DSC$S_DSCDEF2 = 8 record DSCDEF2 BYTE DSCDEF$$_FILL_3 ( 1 to 4 ) LONG 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 record DSCDEF2 ! + ! End of common definitions for all descriptors. ! - DECLARE LONG CONSTANT DSC$K_UBS_BLN = 12 ! Block length in bytes for UBS class descr. DECLARE LONG CONSTANT DSC$C_UBS_BLN = 12 ! Block length in bytes for UBS class descr. DECLARE LONG CONSTANT DSC$S_DSCDEF3 = 12 record DSCDEF3 BYTE DSCDEF$$_FILL_4 ( 1 to 8 ) LONG 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. end record DSCDEF3 ! + ! *Obsolete* Varying type descriptor definition ! This form should not be used. ! - DECLARE LONG CONSTANT DSC$S_DSCDEF4 = 12 record DSCDEF4 BYTE DSCDEF$$_FILL_5 ( 1 to 8 ) WORD DSC$W_MAXLEN ! An unsigned word specifying the ! maximum length of the data item ! (i.e., the space allocated) WORD DSCDEF$$_FILL_1 ! reserved word end record DSCDEF4 ! + ! Array Descriptor definitions ! - DECLARE LONG CONSTANT DSC$K_SD_BLN = 12 ! Block length in bytes for SD class descr. DECLARE LONG CONSTANT DSC$C_SD_BLN = 12 ! Block length in bytes for SD class descr. DECLARE LONG CONSTANT DSC$S_DSCDEF5 = 20 record DSCDEF5 BYTE DSCDEF_64$$_FILL_6 ( 1 to 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. group DSC$R_AFLAGS_OVERLAY variant case BYTE DSC$B_AFLAGS ! Array flag bits. case group DSC$R_AFLAGS_BITS ! reserved to Digital ! 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). ! If set, the elements of the array are ! stored by columns (FORTRAN)> Otherwise ! the elements are stored by rows. ! If set, the multiplicative coefficients in ! Block 2 are present. ! If set, the bounds information in Block 3 ! is present. BYTE FILL_2_bits ! COMMENT ADDED BY SDL - FILL_2_bits contains bits FILL_2 through FL_BOUNDS end group DSC$R_AFLAGS_BITS end variant end group DSC$R_AFLAGS_OVERLAY BYTE DSC$B_DIMCT ! Number of dimensions LONG DSC$L_ARSIZE ! Total size of array (in bytes unless DTYPE is ! EQUL DSC$K_DTYPE_V or DSC$K_DTYPE_P). LONG 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 record DSCDEF5 DECLARE LONG CONSTANT DSC$S_DSCDEF6 = 28 record DSCDEF6 BYTE DSCDEF$$_FILL_7 ( 1 to 16 ) LONG 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). LONG DSC$L_S1 ! Stride of the first dimension, i.e. the ! difference between the addresses of ! successive elements of the first dimension. LONG DSC$L_S2 ! Stride of the second dimension. end record DSCDEF6 DECLARE LONG CONSTANT DSC$S_DSCDEF7 = 28 record DSCDEF7 BYTE DSCDEF$$_FILL_8 ( 1 to 20 ) LONG DSC$L_M1 ! Addressing coefficient M1 = U1-L1+1 LONG DSC$L_M2 ! Addressing coefficient M2 = U2-L2+1 end record DSCDEF7 ! + ! Procedure Incarnation descriptor (DSC$K_CLASS_PI) and ! Label Incarnation descriptor (DSC$K_CLASS_JI). ! - DECLARE LONG CONSTANT DSC$K_PI_BLN = 12 ! Block length in bytes for PI class descr. DECLARE LONG CONSTANT DSC$C_PI_BLN = 12 ! Block length in bytes for PI class descr. DECLARE LONG CONSTANT DSC$K_JI_BLN = 12 ! block length in bytes for JI class descr. DECLARE LONG CONSTANT DSC$C_JI_BLN = 12 ! block length in bytes for JI class descr. DECLARE LONG CONSTANT DSC$S_DSCDEF8 = 12 record DSCDEF8 BYTE DSCDEF$$_FILL_9 ( 1 to 8 ) LONG DSC$A_FRAME ! Address of frame end record DSCDEF8 ! + ! String with Bounds descriptor (DSC$K_CLASS_SB). ! - DECLARE LONG CONSTANT DSC$S_DSCDEF9 = 16 record DSCDEF9 BYTE DSCDEF$$_FILL_10 ( 1 to 8 ) LONG DSC$L_SB_L1 ! Signed lower bound of first dimension LONG DSC$L_SB_U1 ! Signed upper bound of first dimension end record DSCDEF9 ! + ! Unaligned Bit String with Bounds descriptor (DSC$K_CLASS_UBSB). ! - DECLARE LONG CONSTANT DSC$S_DSCDEF10 = 20 record DSCDEF10 BYTE DSCDEF$$_FILL_11 ( 1 to 12 ) LONG DSC$L_UBSB_L1 ! Signed lower bound of first dimension LONG DSC$L_UBSB_U1 ! Signed upper bound of first dimension end record DSCDEF10 ! ! 64-bit versions of the descriptors defined above. These are expected ! to be quadword aligned. ! - DECLARE LONG CONSTANT DSC64$S_DSCDEF64 = 16 record DSCDEF64 BYTE DSCDEF_64$$_FILL_1 ( 1 to 8 ) ! No 64-bit versions of handle/byteoff/logunit BASIC$QUADWORD DSC64$Q_LENGTH ! 64-bit LENGTH field end record DSCDEF64 DECLARE LONG CONSTANT DSC64$S_DSCDEF1_64 = 24 record DSCDEF1_64 WORD DSC64$W_MBO ! 32-bit LENGTH field is MBO in 64-bit descs BYTE DSC64$B_DTYPE ! Identical to 32-bit form BYTE DSC64$B_CLASS ! Identical to 32-bit form LONG DSC64$L_MBMO ! 32-bit POINTER field is MBMO in 64-bit descs BASIC$QUADWORD DSC64$Q_MAXSTRLEN ! 64-bit MAXSTRLEN field BASIC$QUADWORD DSC64$PQ_POINTER ! 64-bit pointer field end record DSCDEF1_64 DECLARE LONG CONSTANT DSC64$K_Z_BLN = 24 ! Block length in bytes for 64-bit Z class descr. DECLARE LONG CONSTANT DSC64$C_Z_BLN = 24 ! Block length in bytes for 64-bit Z class descr. DECLARE LONG CONSTANT DSC64$K_S_BLN = 24 ! Block length in bytes for 64-bit S class descr. DECLARE LONG CONSTANT DSC64$C_S_BLN = 24 ! Block length in bytes for 64-bit S class descr. DECLARE LONG CONSTANT DSC64$K_D_BLN = 24 ! Block length in bytes for 64-bit D class descr. DECLARE LONG CONSTANT DSC64$C_D_BLN = 24 ! Block length in bytes for 64-bit D class descr. DECLARE LONG CONSTANT DSC64$K_P_BLN = 24 ! Block length in bytes for 64-bit P class descr. DECLARE LONG CONSTANT DSC64$C_P_BLN = 24 ! Block length in bytes for 64-bit P class descr. DECLARE LONG CONSTANT DSC64$K_J_BLN = 24 ! Block length in bytes for 64-bit J class descr. DECLARE LONG CONSTANT DSC64$C_J_BLN = 24 ! Block length in bytes for 64-bit J class descr. DECLARE LONG CONSTANT DSC64$K_VS_BLN = 24 ! Block length in bytes for 64-bit VS class descr. DECLARE LONG CONSTANT DSC64$C_VS_BLN = 24 ! Block length in bytes for 64-bit VS class descr. DECLARE LONG CONSTANT DSC64$S_DSCDEF2_64 = 24 record DSCDEF2_64 BYTE DSCDEF_64$$_FILL_3 ( 1 to 16 ) BASIC$QUADWORD DSC64$PQ_BASE ! 64-bit BASE field end record DSCDEF2_64 ! + ! End of common definitions for all descriptors. ! - DECLARE LONG CONSTANT DSC64$K_UBS_BLN = 32 ! Block length in bytes for 64-bit UBS class descr. DECLARE LONG CONSTANT DSC64$C_UBS_BLN = 32 ! Block length in bytes for 64-bit UBS class descr. DECLARE LONG CONSTANT DSC64$S_DSCDEF3_64 = 32 record DSCDEF3_64 BYTE DSCDEF_64$$_FILL_4 ( 1 to 24 ) BASIC$QUADWORD DSC64$Q_POS ! 64-bit POS field end record DSCDEF3_64 ! ! 64-bit version of the array descriptor ! DECLARE LONG CONSTANT DSC64$K_SD_BLN = 32 ! Block length in bytes for 64-bit SD class descr. DECLARE LONG CONSTANT DSC64$C_SD_BLN = 32 ! Block length in bytes for 64-bit SD class descr. DECLARE LONG CONSTANT DSC64$S_DSCDEF5_64 = 48 record DSCDEF5_64 BYTE DSCDEF_64$$_FILL_6 ( 1 to 24 ) BYTE DSC64$B_SCALE ! 64-bit descriptor SCALE BYTE DSC64$B_DIGITS ! 64-bit descriptor DIGITS group DSC64$R_AFLAGS_OVERLAY ! variant case BYTE DSC64$B_AFLAGS ! 64-bit descriptor AFLAGS case group DSC64$R_AFLAGS_BITS BYTE FILL_2_bits ! COMMENT ADDED BY SDL - FILL_2_bits contains bits FILL_2 through FL_BOUNDS end group DSC64$R_AFLAGS_BITS end variant end group DSC64$R_AFLAGS_OVERLAY BYTE DSC64$B_DIMCT ! 64-bit descriptor DIMCT LONG DSC64$L_MBZ ! MBZ field for quad alignment. BASIC$QUADWORD DSC64$Q_ARSIZE ! 64-bit descriptor ARSIZE BASIC$QUADWORD DSC64$PQ_A0 ! 64-bit descriptor A0 end record DSCDEF5_64 DECLARE LONG CONSTANT DSC64$S_DSCDEF6_64 = 64 record DSCDEF6_64 BYTE DSCDEF_64$$_FILL_7 ( 1 to 40 ) BASIC$QUADWORD DSC64$Q_V0 ! 64-bit descriptor V0 BASIC$QUADWORD DSC64$Q_S1 ! Stride of the first dimension BASIC$QUADWORD DSC64$Q_S2 ! Stride of the second dimension. end record DSCDEF6_64 DECLARE LONG CONSTANT DSC64$S_DSCDEF7_64 = 64 record DSCDEF7_64 BYTE DSCDEF_64$$_FILL_8 ( 1 to 48 ) BASIC$QUADWORD DSC64$Q_M1 ! Addressing coefficient M1 = U1-L1+1 BASIC$QUADWORD DSC64$Q_M2 ! Addressing coefficient M2 = U2-L2+1 end record DSCDEF7_64 DECLARE LONG CONSTANT DSC64$K_PI_BLN = 32 ! Block length in bytes for 64-bit PI class descr. DECLARE LONG CONSTANT DSC64$C_PI_BLN = 32 ! Block length in bytes for 64-bit PI class descr. DECLARE LONG CONSTANT DSC64$K_JI_BLN = 32 ! block length in bytes for 64-bit JI class descr. DECLARE LONG CONSTANT DSC64$C_JI_BLN = 32 ! block length in bytes for 64-bit JI class descr. DECLARE LONG CONSTANT DSC64$S_DSCDEF8_64 = 32 record DSCDEF8_64 BYTE DSCDEF_64$$_FILL_9 ( 1 to 24 ) BASIC$QUADWORD DSC64$PQ_FRAME ! Address of frame end record DSCDEF8_64 DECLARE LONG CONSTANT DSC64$S_DSCDEF9_64 = 40 record DSCDEF9_64 BYTE DSCDEF_64$$_FILL_10 ( 1 to 24 ) BASIC$QUADWORD DSC64$Q_SB_L1 ! Signed lower bound of first dimension BASIC$QUADWORD DSC64$Q_SB_U1 ! Signed upper bound of first dimension end record DSCDEF9_64 DECLARE LONG CONSTANT DSC64$S_DSCDEF10_64 = 48 record DSCDEF10_64 BYTE DSCDEF_64$$_FILL_11 ( 1 to 32 ) BASIC$QUADWORD DSC64$Q_UBSB_L1 ! Signed lower bound of first dimension BASIC$QUADWORD DSC64$Q_UBSB_U1 ! Signed upper bound of first dimension end record DSCDEF10_64