! *** 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 ! ! key definition xab field definitions ! $xabkeydef ! DECLARE LONG CONSTANT XAB$C_KEY = 21 ! xabkey id code DECLARE LONG CONSTANT XAB$M_DUP = x'00000001' DECLARE LONG CONSTANT XAB$M_CHG = x'00000002' DECLARE LONG CONSTANT XAB$M_NUL = x'00000004' DECLARE LONG CONSTANT XAB$M_IDX_NCMPR = x'00000008' DECLARE LONG CONSTANT XAB$M_KEY_NCMPR = x'00000040' DECLARE LONG CONSTANT XAB$M_DAT_NCMPR = x'00000080' DECLARE LONG CONSTANT XAB$C_STG = 0 ! string DECLARE LONG CONSTANT XAB$C_IN2 = 1 ! signed 15 bit integer (2 bytes) DECLARE LONG CONSTANT XAB$C_BN2 = 2 ! 2 byte binary DECLARE LONG CONSTANT XAB$C_IN4 = 3 ! signed 31 bit integer (4 bytes) DECLARE LONG CONSTANT XAB$C_BN4 = 4 ! 4 byte binary DECLARE LONG CONSTANT XAB$C_PAC = 5 ! packed decimal (1-16 bytes) DECLARE LONG CONSTANT XAB$C_IN8 = 6 ! signed 63 bit integer (4 bytes) DECLARE LONG CONSTANT XAB$C_BN8 = 7 ! 8 byte binary DECLARE LONG CONSTANT XAB$C_COL = 8 ! collated DECLARE LONG CONSTANT XAB$C_MAX_ASCEND = 8 ! maximum ascending type DECLARE LONG CONSTANT XAB$C_DSTG = 32 ! descending string DECLARE LONG CONSTANT XAB$C_DIN2 = 33 ! " signed word DECLARE LONG CONSTANT XAB$C_DBN2 = 34 ! " unsigned word DECLARE LONG CONSTANT XAB$C_DIN4 = 35 ! " signed longword DECLARE LONG CONSTANT XAB$C_DBN4 = 36 ! " unsigned longword DECLARE LONG CONSTANT XAB$C_DPAC = 37 ! " packed decimal DECLARE LONG CONSTANT XAB$C_DIN8 = 38 ! " signed quadword DECLARE LONG CONSTANT XAB$C_DBN8 = 39 ! " unsigned quadword DECLARE LONG CONSTANT XAB$C_DCOL = 40 ! " collated DECLARE LONG CONSTANT XAB$C_MAXDTP = 40 ! max. legal data type DECLARE LONG CONSTANT XAB$K_KEYLEN_V2 = 64 ! old xabkey length DECLARE LONG CONSTANT XAB$C_KEYLEN_V2 = 64 ! old xabkey length ! DECLARE LONG CONSTANT XAB$C_PRG3 = 3 ! Prologue version three DECLARE LONG CONSTANT XAB$C_PRG2 = 2 ! Prologue version two DECLARE LONG CONSTANT XAB$C_PRG1 = 1 ! Prologue versoin one DECLARE LONG CONSTANT XAB$K_KEYLEN_V4 = 76 ! xabkey length until V5 DECLARE LONG CONSTANT XAB$C_KEYLEN_V4 = 76 ! xabkey length until V5 DECLARE LONG CONSTANT XAB$S_XABKEYDEF = 100 record XABKEYDEF BYTE XABKEYDEF$$_FILL_1 BYTE XABKEYDEF$$_FILL_2 WORD XABKEYDEF$$_FILL_3 LONG XABKEYDEF$$_FILL_4 ! HAS SAME COD, BLN, SPARE AND NXT FIELD ! THESE 4 FIELDS ARE COMMON TO ALL XABS AND ! HAVE BEEN DEFINED BY $XABDEF ! ! the field layout of the key xab is such that it matchs as ! closely as possible the layout of a key decriptor in the ! index file prologue. this is so the contents may be moved ! between the two structures as efficiently as possible. ! BYTE XAB$B_IAN ! index level area number BYTE XAB$B_LAN ! lowest index level area number BYTE XAB$B_DAN ! data level area number BYTE XAB$B_LVL ! level of root bucket BYTE XAB$B_IBS ! size of index buckets in virtual blocks BYTE XAB$B_DBS ! size of data buckets in virtual blocks LONG XAB$L_RVB ! root bucket start vbn group XAB$R_FLG_OVERLAY variant case BYTE XAB$B_FLG ! key option flags case group XAB$R_FLG_BITS0 ! duplicate key values allowed ! alt key only --key field may change on update ! alt key only --null key value enable ! indicate index records for given key are not compressed ! spare ! indicates key is not compressed in data record BYTE DUP_bits ! COMMENT ADDED BY SDL - DUP_bits contains bits DUP through FILL_14_ end group XAB$R_FLG_BITS0 case group XAB$R_FLG_BITS1 ! space over dup ! spare ! space over idx_ncmpr ! spare ! space over key_ncmpr ! data record is not compressed BYTE FILL_6_bits ! COMMENT ADDED BY SDL - FILL_6_bits contains bits FILL_6 through DAT_NCMPR end group XAB$R_FLG_BITS1 end variant end group XAB$R_FLG_OVERLAY BYTE XAB$B_DTP ! key field data type BYTE XAB$B_NSG ! number of key segments BYTE XAB$B_NUL ! nul key character BYTE XAB$B_TKS ! total key field size (bytes) BYTE XAB$B_REF ! key of reference (0=prim key, ! 1-254 = alternate keys) WORD XAB$W_MRL ! minimun record length to contain key field WORD XAB$W_IFL ! index bucket fill size (bytes) WORD XAB$W_DFL ! data bucket fil size (bytes) group XAB$R_POS_OVERLAY variant case WORD XAB$W_POS ( 1 to 8 ) ! key field record offset positions case group XAB$R_POS_FIELDS WORD XAB$W_POS0 ! segment 0 WORD XAB$W_POS1 ! segment 1 WORD XAB$W_POS2 ! segment 2 WORD XAB$W_POS3 ! segment 3 WORD XAB$W_POS4 ! segment 4 WORD XAB$W_POS5 ! segment 5 WORD XAB$W_POS6 ! segment 6 WORD XAB$W_POS7 ! segment 7 end group XAB$R_POS_FIELDS end variant end group XAB$R_POS_OVERLAY group XAB$R_SIZ_OVERLAY variant case BYTE XAB$B_SIZ ( 1 to 8 ) ! key field segment sizes case group XAB$R_SIZ_FIELDS BYTE XAB$B_SIZ0 ! segment 0 BYTE XAB$B_SIZ1 ! segment 1 BYTE XAB$B_SIZ2 ! segment 2 BYTE XAB$B_SIZ3 ! segment 3 BYTE XAB$B_SIZ4 ! segment 4 BYTE XAB$B_SIZ5 ! segment 5 BYTE XAB$B_SIZ6 ! segment 6 BYTE XAB$B_SIZ7 ! segment 7 end group XAB$R_SIZ_FIELDS end variant end group XAB$R_SIZ_OVERLAY WORD XABKEYDEF$$_FILL_11 ! spare ! ! the positions of the above fields are dictated by the key descriptor ! record layout in the index file prologue. ! LONG XAB$L_KNM ! pointer to 32 character key name buffer LONG XAB$L_DVB ! first data bucket start vbn ! Additions for prologue 3 files ! group XAB$R_TYP_OVERLAY variant case BYTE XAB$B_TYP ( 1 to 8 ) ! key field segment types case group XAB$R_TYP_FIELDS BYTE XAB$B_TYP0 ! segment 0 BYTE XAB$B_TYP1 ! segment 1 BYTE XAB$B_TYP2 ! segment 2 BYTE XAB$B_TYP3 ! segment 3 BYTE XAB$B_TYP4 ! segment 4 BYTE XAB$B_TYP5 ! segment 5 BYTE XAB$B_TYP6 ! segment 6 BYTE XAB$B_TYP7 ! segment 7 end group XAB$R_TYP_FIELDS end variant end group XAB$R_TYP_OVERLAY BYTE XAB$B_PROLOG ! indicate prologue version desired (primary key only) BYTE XABKEYDEF$$_FILL_12 ! spare WORD XABKEYDEF$$_FILL_13 ! spare LONG XAB$L_COLTBL ! address of collate table LONG XAB$L_COLSIZ ! size of collate table LONG XAB$L_COLNAM ! name of collate table LONG XABKEYDEF$$_FILL_14 ! spare LONG XABKEYDEF$$_FILL_15 ! spare LONG XABKEYDEF$$_FILL_16 ! spare ! -- ! ++ end record XABKEYDEF ! basealign on aggregate XABKEYDEF operates after aggregate end DECLARE LONG CONSTANT XAB$K_KEYLEN = 100 ! xabkey length for V5 DECLARE LONG CONSTANT XAB$C_KEYLEN = 100 ! xabkey length for V5