* DATABASE OFFSETS/MACROS FILE
         NOLIST
         OFFSET   0
* IOSS DEVICE DRIVER LINKAGE
CH.DRIVR EQU      $4
CH.IO    EQU      $1C
CH.CLOSE EQU      $24

** THE DATABASE CONTROL BLOCK
         OFFSET   0

* MEMORY CONTROL BLOCK
DBM.JBID DS.L     1        OWNER JOB ID
DBM.MEMO DS.L     1        DATABASE MEMORY ROUTINES
DBM.ALC  EQU      0        ALLOCATE
DBM.REL  EQU      6        RELEASE
DBM.X1   DS.L     1        SPARE FOR CONTROL BLOCK REALLOCATION
DBM.X2   DS.L     1        SPARE FOR CONTROL BLOCK REALLOCATION
*
DBR.CHP  DS.L     1        RECLEN TABLE PTR
*
DBM.LEN

* DATABASE CONTROL BLOCK MAIN PART (DATABASE ID POSITION)
         OFFSET   0
DB.CHID  DS.L     1        CHANNEL ID
         DS.L     1        SPARE

* DATABASE IN-FILE HEADER
DBH.IDS  DS.B     4        "DBAS"
DBH.FLAG DS.B     1        VERSION NUMBER IN BITS 1-6
DBH..DYN EQU      0        SET=DYNAMIC RECORDS
DBH..ERR EQU      7        SET=BAD STRUCTURE
DBH.S1   DS.B     1        SPARE
DBH.RPT  DS.W     1        POINTER TO THE RECORDS
DBH.RLN  DS.W     1        (MAX) LEN OF REC
DBH.RNO  DS.W     1        NO. OF RECS
DBH.FNO  DS.W     1        NO. OF FLDS
DBH.LTAB DS.L     1        PTR TO REC LEN TABLE (FS.POSAB)
DBH.RSV0 DS.W     1        LENGTH OF RESERVED SECTION 0
DBH.RSV1 DS.W     1        LENGTH OF RESERVED SECTION 1
DBH.RSV2 DS.W     1        LENGTH OF RESERVED SECTION 2
DBH.CODE DS.W     1        LENGTH OF CODE SECTION
DBH.LN   EQU      *-DBH.IDS

* DATABASE CONTROL AREA
DBC.CUR  DS.W     1        CURRENT RECORD NO.

* DATABASE ORDER/SELECT AREA
DBO.FLAG DS.B     1        BIT 7 CLEAR = NO ORD CHP
DBO.FLG2 DS.B     1
DBO..NXC EQU      0        BIT SET IF NO EXPANSION/COMPRESSION REQUIRED
DBO..AUO EQU      1        BIT SET IF FSD.REMF KILLS THE ORDER
DBO.PARS DS.W     1        NO. OF PARS (0 IF FSD.SEL ONLY)
DBO.CUR  DS.W     1        PTR TO CURR REC ENTRY.
DBO.CNT  DS.W     1        RUNNING RECNUM FOR ORDER
DBO.FLD  DS.W     1        FIELD CURRENTLY IN USE
DBO.TOT  DS.W     1        NO. OF STORED RECORDS
DBO.NUM  DS.W     1        NUMBER OF ORDER TABLE ENTRIES
DBO.DAT  DS.W     5*4      ORDER DATA
DBO..FLD EQU      $0       FIELD NO.
DBO..DIR EQU      $2       DIRECTION
DBO..TYP EQU      $4       TYPE
DBO..FPT EQU      $6       FILE REL PTR
DBO..STO EQU      $8       STORE REL PTR
DBO..L   EQU      $A
DBO.DAT1 EQU      DBO.DAT
DBO.DAT2 EQU      DBO.DAT1+DBO..L
DBO.DAT3 EQU      DBO.DAT2+DBO..L
DBO.DAT4 EQU      DBO.DAT3+DBO..L
DBO.CHP  DS.L     1        SELECTED/ORDER CHP ADDR

*
CMP.TABL DS.L     1        COMPARE ROUTINE PTR

*
DBO.STRL DS.W     1        ORDER STRING KEY MAX LENGTH

* THE RECORD CONTROL AREA
REC.NAME DS.L     1        RECORD NAME TABLE PTR
REC.LEN  DS.W     1        CURRENT RECORD LENGTH
REC.FLAG DS.B     1        BIT 0 CLEAR = NO REC CHP
;                          BIT 1 CLEAR = NO NAME CHP
;                          BIT 2 CLEAR = NO RECLEN TABLE CHP
;                          BIT 7 CLEAR = NO DBM.X2 CHP
REC.TR4  DS.B     1        STORAGE FOR TRAP #4 FLAG
REC.CHP  DS.L     1        REC CHP ADDR
REC.SEL  DS.W     1        NO. OF SELECTED RECS.
REC.CRP  DS.W     1        CURR REC REAL RECNUM
REC.FPTR DS.L     1        CURRENT FILE PTR
REC.FLD  DS.W     0        START OF FIELDS STORAGE

DB.END   EQU      *+DBM.LEN

** A FIELD DESCRIPTOR
         OFFSET   0        FIELD DESCRIPTOR ENTRY
RCF.STOF DS.W     1        FIELD STORAGE OFFSET
RCF.TYPE DS.W     1        FIELD TYPE
RCF..IW  EQU      $1         INTEGER.W
RCF..IL  EQU      $2         INTEGER.L
RCF..FP  EQU      $3         FLOAT
RCF..S_F EQU      $0         FIXED LENGTH STRING
RCF..S_D EQU      $8000      DYNAMIC STRING
RCF.LN   DS.W     1        FIELD LENGTH
         DS.W     1        RESERVED
RCF.LEN

** RECORD LENGTH TABLE CONTROL
         OFFSET   0
RLC.RNO  DS.W     1        SIZE OF TABLE
RLC.LREC DS.W     1        REC.CRP OF LOWEST ENTRY IN TABLE
RLC.LPTR DS.L     1        REC.FPTR OF ABOVE
RLC.NUM  DS.W     1        NO. OF ENTRIES USED
RLC.TABL

** PHYSICAL DEVICE RECORD - DRJMP
         OFFSET   0
DJ.JSR   DS.B     6        JSR $NNNNNNNN.L
DJ.JMP   DS.B     6        JMP $NNNNNNNN.L
DJ.DRIVR DS.L     1        DRIVER LINK PTR
DJ.DLINK DS.L     1        LINKED LIST PTR
DJ.END   DS.W     0

** ORDER SORT BLOCK
ORC.STLN EQU      8        STRING FIELD LENGTH
ORC.FLLN EQU      2+ORC.STLN  STRING FIELD STORE LENGTH
ORC.FNO  EQU      4        FIELDS STORED (MAX)
ORC.RNO  EQU      16       RECORDS STORED (MAX)
* 
         OFFSET   0
ORCE.REC DS.W     1        REAL RECORD NUMBER
ORCE.FLD DS.B     ORC.FLLN*4
ORCE.LEN

** ORDER CONTROL BLOCK
         OFFSET   0
ORC.CHP  DS.L     1        TEMP REC STORES PTR
ORC.CE   DS.L     1        TEMP STORES END PTR
ORC.GETP DS.L     1        POINTER TO BLOCK IN WHICH TO GET NEXT RECORD'S KEYS
ORC.CUR  DS.L     1
ORC.SIZE DS.W     1        SIZE OF EACH ENTRY
ORC.NUM  DS.W     1        NUMBER OF ENTRIES
ORC.SPR  DS.L     1
ORC.CF   DS.B     1        SORT BLOCK CHP FLAG
         DS.B     1
ORC.TABP DS.L     1        POINTER TO TABLE
ORC.TMPL DS.L     1        LENGTH OF ORC.TMP/ORC.TMP2
ORC.TMP  DS.B     ORCE.LEN TEMPORARY RECORD STORE 1
ORC.TMP2 DS.B     ORCE.LEN TEMPORARY RECORD STORE 2
ORC.TABS DS.W     0

** ORDER CONTROL BLOCK RE-USAGE
         OFFSET   ORC.TMP
         DS.W     1        MOVE TO A .L BOUNDARY
ORC.SB.C DS.L     1        CURRENT SPARE ENTRY IN SORT BLOCK
ORC.SB.N DS.L     1        NEXT SPARE ENTRY IN SORT BLOCK
ORC.SB.Z DS.L     1        ORC.SIZE .L
ORC.IB.S DS.L     1        CURRENT COMPARE INDEX BLOCK START
ORC.IB.E DS.L     1        CURRENT COMPARE INDEX BLOCK END
ORC.IB.C DS.L     1        CURRENT COMPARE INDEX BLOCK COMPARE ENTRY
ORC.IB.L DS.L     1        CURRENT COMPARE INDEX BLOCK LIMIT
ORC.TB.P DS.L     1        CURRENT ORDER TABLE BLOCK POINTER

ORC.MINT EQU      1024
ORT.SEL  EQU      0        BYTE IN WHICH SEL FLAG
ORT..SEL EQU      7        BIT IN WHICH SEL FLAG
ORT..REC EQU      $7FFF    MASK TO EXTRACT RECORD NO.

** NAME TABLE BLOCK DEF
         OFFSET   0
NMC.CLEN DS.W     1        LEN OF NAME LIST CHP
NMC.FLEN DS.W     1        LEN OF FILE NAME LIST (INCLUDING <LF>)
NMC.FILE DS.W     1        LEN OF FILE NAME LIST STORED IN FILE
NMC.FLAG DS.B     1        BIT 0 SET IF CHP ALLOCATED
                          ;BIT 5 SET IF NULL NAME LIST WAS CREATED
                          ;BIT 6 SET IF TO BE REMOVED ON EXIT FROM EXPORT
                          ;BIT 7 SET IF NULL NAME LIST TO BE USED
NMC.SIZE DS.B     1        SIZE SPECIFIED TO FSD.NMLD IN D2.B
NMC.CHP  DS.L     1        NAME LIST CHP PTR
NMC.RESV DS.L     1        RESERVED
NMC.TABL                  ;START OF NAME PTR TABLE

* NAME TABLE ENTRY DEF
         OFFSET   0
NMT..OFF DS.W     1        NAME STORAGE OFFSET
NMT..LN  DS.W     1        NAME LENGTH
NMT..USR DS.L     1        USER DEFINED (EG: BASIC NAME TABLE PTR)
NMT.LEN

***************************************************************************
*
PUSH     MACRO    EA
         IFSTR [.OTYPE([EA])] = MULT GOTO PU_M
         EXPAND
[.LAB]   MOVE.[.EXT] [EA],-(A7)
         NOEXPAND
         GOTO PU_E
PU_M     MACLAB
         EXPAND
[.LAB]   MOVEM.[.EXT] [EA],-(A7)
         NOEXPAND
PU_E     MACLAB
         ENDM

POP      MACRO    EA
         IFSTR [.OTYPE([EA])] = MULT GOTO PO_M
         EXPAND
[.LAB]   MOVE.[.EXT] (A7)+,[EA]
         NOEXPAND
         GOTO PO_E
PO_M     MACLAB
         EXPAND
[.LAB]   MOVEM.[.EXT] (A7)+,[EA]
         NOEXPAND
PO_E     MACLAB
         ENDM
         LIST
