          OVERLAY (BUILD DFT STRUCTURE IN PRESET)

*         CTEXT  CTP$DFT_PRESET_BUILD_STRUCTURE
*
*         THIS DECK IS RESPONSIBLE FOR BUILDING THE DFT OS INTERFACE FOR DFT
*         VERSION 4 AND GREATER. THERE ARE TWO RECORDS USED BY THE ROUTINES IN THIS
*         DECK *DBD*, AND *ECR*. THESE RECORDS DEFINE THE DFT BUFFER AND THE ERROR
*         CONTROL INFORMATION. BOTH OF THESE RECORDS ARE ON THE CIP TAPE AND ARE UNIQUE
*         TO A PARTICULAR DFT CLASS.

 AOFF     EQU    MP
 RUPP     EQU    MP+1
 RLOW     EQU    MP+2


 BDS      SPACE  4,10
**        BDS - BUILD DFT STRUCTURE.
*
*         THIS ROUTINE DIRECTS THE INITIALIZATION OF THE DFT OS INTERFACE AREA WHICH
*         WAS ALLOCATED BY THE HOST OPERATING SYSTEM.


          ROUTINE  BDS

          RJM    VDS         VALIDATE DFT STRUCTURE
          ZJP    BDS6        IF STRUCTURE VALIDATED
          PJP    BDS6.5      IF VERSION 3 OR LESS AND ALREADY BUILT

*         NEXT INITIALIZE THE GLOBAL POINTER TO ALLOCATED SPACE

 BDS00    LDDL   DP
          STDL   AOFF
          LDDL   DP+1
          STDL   RUPP
          LDDL   DP+2
          STDL   RLOW

*         NEXT FUNCTION 2AP TO READ IN THE *DBD* RECORD FROM THE CDA

          LDC    0#210       FUNCTION TO READ THE CDA
          STML   CALB
          LDC    0402        UPPER 12 BITS OF NAME *DB*
          STML   CALB+1
          LDC    0400        LOWER 12 BITS OF NAME *D00*
          STML   CALB+2
          RJM    ECM         EXECUTE CIP MODULE
          LDML   CALB+1
          SBN    4
          PJP    BDS0        IF NO ERRORS
          SETDAN (EPUN,DAPZ)
          LDC    DAPZ+TDFT   61D - PRESET ALLOCATION SIZE FAILURE
          STML   RTP1
          CALL   ERRH


*         AT THIS POINT THE *DBD* RECORD IS IN THE 2AP OUTPUT BUFFER, NEXT BEGIN
*         BUILDING THE DFT POINTER BLOCK.

 BDS0     RJM    RBA         RESTORE 2P INPUT BUFFER ADDRESS
          LDDL   DP
          NJN    BDS1        IF OFFSET IS NON ZERO
          LDDL   DP+2        R-LOWER VALUE
          ZJN    BDS0.2      IF R-LOWER IS ZERO
 BDS0.1   SODL   DP+2
          LDC    0#40
          STDL   DP
          UJN    BDS1        GET HANDOFF TOTAL SIZE

 BDS0.2   SODL   DP+1        BORROW 1 UNIT FROM R-UPPER
          LDC    0#1000      SETUP R-LOWER
          STDL   DP+2
          UJN    BDS0.1      SET UP OFFSET VALUE

 BDS1     LDC    -1
          RJM    IDA
          CRDL   CM          READ IN HANDOFF TOTAL SIZE
          LDDL   T1          2AP BUFFER ADDRESS
          STML   BDSE        SAVE ADDRESS
          ADC    DBDH2
          STML   BDSA
          LDC    -1
          RJM    IDA
          CWML   **,ON       WRITE STRING DFTS TO BEGINNING OF DFT POINTER BLOCK
 BDSA     EQU    *-1
          LDDL   CM+3
          STML   BDSB        SAVE TOTAL SIZE FOR ERROR TEST
          LDDL   DP
          ADC    RR
          CRDL   W0          READ THE DFT CONTROL WORD
          LDML   DCWP0,T1
          STDL   W0          SAVE NUMBER OF POINTERS, SEQ NUMBER
          RJM    SLN         SET LEVEL NUMBER
          STML   BDSD        SAVE REVISED LEVEL NUMBER
          LDML   BDSE        RESTORE *2AP* BUFFER ADDRESS
          STDL   T1
          LDML   DCWP2,T1    DFT CONTROL WORD PARAMETER 2
          STDL   W2          SAVE LBUF, NBUF VALUES
          LDN    HDRP
          RJM    IDA
          CWDL   W0          RE-WRITE DFT HEADER WORD
          LDN    2
          STD    T2
          LDN    1
          RJM    IDA
          CRML   HANDOFF,T2  READ IN HANDOFF PARAMETERS
          LDDL   W0
          SHN    -10
          SBN    1
          STDL   T2          NUMBER OF CM WORDS TO MOVE
          LDDL   T1
          ADC    DCWP3+1
          STML   DBSD
          LDN    SECP
          RJM    IDA
          CWML   **,T2       MOVE POINTER WORD SKELETONS TO DFT BLOCK
 DBSD     EQU    *-1
          LDDL   T2
          ADN    1
          RJM    IRP         INCREMENT R POINTER TO STRUCTURE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)

*         DEFINE THE SECDED ID TABLE

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    SECP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)

*         DEFINE THE MAINTENANCE REGISTER BUFFERS

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    MRBP
          RJM    DBS         DEFINE SPACE FOR MAINTENANCE REGISTER BUFFERS
          RJM    WTF         WRITE TRAILER FIELD (DFTE)

*         DEFINE THE OS REQUEST AND PP RESIDENT POINTERS FROM HANDOFF PARAMETERS

          LDN    D7TY
          RJM    IIB
          CRDL   CM
          LDDL   CM+3
          SHN    -14
          NJN    BDS3        IF NOT 180 STANDALONE
          LDN    NVEP        VE REQUEST POINTER
          RJM    IDA
          CWML   HANDOFF+4,ON   WRITE 180 REQUEST POINTER TO PROPER LOCATION IN DFT POINTERS
          UJN    BDS4

 BDS3     LDN    2
          STD    T2
          LDN    C17P        PP RESIDENT POINTER
          RJM    IDA
          CWML   HANDOFF,T2  WRITE PP RESIDENT AND OS REQUEST POINTER

*         BUILD THE BUFFER CONTROL WORD AREA

 BDS4     RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    BCWP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          RJM    DBW         DEFINE BUFFER CONTROL WORD BUFFER INTERNAL STRUCTURE

*         BUILD THE MAINFRAME ELEMENT COUNTERS BUFFER

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    MECP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          RJM    DEC         DEFINE THE ELEMENT COUNTER DATA

*         BUILD THE ERROR CONTROL RECORD

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    ECRP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          RJM    DER         DEFINE ERROR CONTROL RECORD INTERNAL STRUCTURE
          RJM    RBA

*         DEFINE THE SUPPORTIVE STATUS BUFFER

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    SSBP
          RJM    IDA
          CRML   DSSA,ON     READ IN THE BUFFER DEFINITION PARAMETERS
          LDN    SSBP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          RJM    DSS         DEFINE THE INTERNAL STRUCTURE OF SUPPORTIVE STATUS

*         DEFINE THE NON REGISTER STATUS AREA

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    NRSP
          RJM    IDA
          CRML   DNRA,ON     READ IN BUFFER DEFINITION PARAMETERS
          LDN    NRSP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          RJM    DNR         DEFINE NON REGISTER DATA AREA

*         DEFINE DFT CM RESIDENT AREA

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    DCMP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)

*         DEFINE PP REGISTER SAVE AREA FOR VERSION 5 OR GREATER

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    PRDP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   CM          GET HEADER DEFINITION
          LDDL   CM+2
          STDL   CM+3
          LDN    0
          STM    CM+2
          LDN    PRDP
          RJM    DBS         DEFINE BUFFER SIZE
          LDN    PRDP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0          POINTER WORD
          LRD    W1
          LDDL   W0
          ADC    RR
          CWDL   CM          INITIALIZE HEADER WORD
          RJM    WTF         WRITE TRAILER FIELD (DFTE)

*         DEFINE A SECONDARY *DFT* BUFFER IF THE LENGTH FIELD FROM THE
*         SECONDARY *DFT* BUFFER POINTER IN THE *DBD* IS NON-ZERO, AND
*         A SECOND IOU IS PRESENT.

          LDN    SDBP        EXAMINE LENGTH FIELD
          RJM    IDA
          CRDL   W0
          LDML   W3
          ZJN    BDS4.1      IF LENGTH IS DEFINED TO BE ZERO
          ADN    2           ACCOUNT FOR *DFTS* AND *DFTE*
          STML   BDSF        SAVE SIZE OF UNALLOCATED SECONDARY BUFFER
          LDML   IOUN        CHECK FOR NUMBER OF IOUS
          SHN    -14
          ZJN    BDS4.2      IF ONLY ONE IOU
          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    SDBP
          RJM    DBS         DEFINE BUFFER SIZE
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
 BDS4.1   LDN    0           SAVE SIZE OF UNALLOCATED SECONDARY BUFFER
          STML   BDSF
          UJN    BDS4.3      DEFINE MODEL DEPENDENT BUFFER

 BDS4.2   LDN    SDBP        ZERO OUT LENGTH IN SECONDARY POINTER
          RJM    IDA
          CRDL   W0
          LDN    0
          STDL   W3
          LDN    SDBP
          RJM    IDA
          CWDL   W0

*         DEFINE THE MODEL DEPENDENT BUFFER.

 BDS4.3   LDN    MDLP
          RJM    IDA
          CRDL   W0          READ IN THE MDB POINTER WORD
          LDDL   W3
          ZJP    BDS5        IF NO MODEL DEPENDENT BUFFER TO ALLOCATE
          RJM    DMB         DEFINE MODEL DEPENDENT BUFFER
 BDS5     LDML   BDSB        SIZE OF ALLOCATED AREA
          SBML   BDSC        SIZE OF AREA JUST BUILT
          SBML   BDSF        ACCOUNT FOR UNALLOCATED SECONDARY *DFT* BUFFER
          NJN    BDS7        IF AREAS DO NOT MATCH

 BDS6     LDN    NRSP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   W0          READ IN NRSB POINTER
          LRD    W1
          LDD    W0
          ADC    RR
          CRDL   W0          READ IN THE NRSB HEADER WORD
          LDDL   W2
          STML   NNRB        NUMBER OF NON REGISTER BUFFERS
          LDDL   W3
          STML   SNRB        SIZE OF NON REGISTER BUFFERS

 BDS6.5   CALL   PSO         PRESET STANDARD OVERLAY

*         NOTE THAT NO RETURN IS MADE BACK HERE. THE RETURN IS MADE
*         FROM *PSO* BACK TO THE MAIN LOOP.

 BDS7     SETDAN (EPUN,DAPZ)
          LDC    DAPZ+TDFT   61D - PRESET ALLOCATION SIZE FAILURE
          STML   RTP1
          CALL   ERRH

 BDSB     CON    0           TOTAL SIZE ALLOCATED BY O.S.
 BDSC     CON    1           TOTAL SIZE BUILT BY DFT
 BDSD     BSS    1           STRUCTURE VERSION
 BDSE     BSS    1           OFFSET TO START OF *DBD* IN *2AP* BUFFER
 BDSF     CON    0           SIZE OF UNALLOCATED SECONDARY *DFT* BUFFER

 HANDOFF  BSSZ   10          BUFFER FOR HANDOFF WORDS
 IRP      SPACE  4,10
**        IRP - INCREMENT R POINTER TO STRUCTURE
*
*         ENTRY  (A) = AMMOUNT TO INCREMENT BASE POINTER
*                BASE POINTER IS DEFINED BY *AOFF*, *RUPP*, *RLOW*.
*
*         EXIT   BASE R POINTER HAS BEEN UPDATED AND A OFFSET PORTION
*                IS MODULO 100(8).
*
*         USES   T7.


 IRP      SUBR               ENTRY/EXIT
          STML   IRPA
          RAML   BDSC
          LDML   IRPA
          RADL   AOFF
          SHN    -6
          NJN    IRP1        IF ROLLED OVER 100(8) IN SIZE
          UJN    IRPX

 IRP1     STDL   T7
          LDDL   AOFF
          LPN    77
          STDL   AOFF
          LDDL   T7
          RADL   RLOW
          SHN    -14
          NJN    IRP2        IF CARRY OVER
          UJN    IRPX

 IRP2     STDL   T7
          LDDL   RLOW
          LPC    0#FFF
          STDL   RLOW
          LDDL   T7
          RADL   RUPP
          LJM    IRPX

 IRPA     CON    0
 WHF      SPACE  4,10
**        WHF - WRITE HEADER FIELD.
*
*         THIS ROUTINE WILL WRITE THE STRING *DFTS* TO THE BEGINNING OF A TABLE
*         STRUCTURE. THE GLOBAL R POINTER TO THE STRUCTURE WILL BE INCREMENTED TO
*         REFLECT THE SPACE USED.
*         THIS CODE ASSUMES THAT DBDHPR2 HOLDS THE STRING VALUE TO INITIALIZE TABLE HEAD TO.

 WHF      SUBR               ENTRY/EXIT
          LDDL   T1
          ADC    DBDH2
          STML   WHFA
          LRD    RUPP
          LDDL   AOFF
          ADC    RR
          CWML   **,ON       WRITE INITIALIZATION STRING TO BEGINNING OF TABLE
 WHFA     EQU    *-1
          LDN    1
          RJM    IRP
          UJN    WHFX        RETURN
 WTF      SPACE  4,10
**        WTF - WRITE TRAILER FIELD.
*
*         THIS ROUTINE WILL WRITE THE STRING *DFTE* TO THE END OF A TABLE
*         STRUCTURE. THE GLOBAL R POINTER TO THE STRUCTURE WILL BE INCREMENTED TO
*         REFLECT THE SPACE USED.
*         THIS CODE ASSUMES THAT DBDHPR3 HOLDS THE STRING VALUE TO INITIALIZE TABLE END TO.

 WTF      SUBR               ENTRY/EXIT
          LDDL   T1
          ADC    DBDH3
          STML   WTFA
          LRD    RUPP
          LDDL   AOFF
          ADC    RR
          CWML   **,ON       WRITE INITIALIZATION STRING TO END OF TABLE
 WTFA     EQU    *-1
          LDN    1
          RJM    IRP
          UJN    WTFX        RETURN
 DBS      SPACE  4,10
**        DBS - DEFINE BUFFER SIZE.
*
*         ENTRY  (A) = ORDINAL OF THE DFT POINTER WORD
*
*         USES   T7, AOFF, RUPP, RLOW.
*
*         CALLS  IDA, IRP.


 DBS      SUBR               ENTRY/EXIT
          STD    T7
          RJM    IDA
          CRML   DBSA,ON
          LDML   AOFF
          STML   DBSA        STORE CURRENT STRUCTURE A OFFSET
          LDML   RUPP
          STML   DBSA+1      STORE CURRENT STRUCTURE R UPPER
          LDML   RLOW
          STML   DBSA+2      STORE CURRENT STRUCTURE R LOWER
          LDDL   T7
          RJM    IDA
          CWML   DBSA,ON     REWRITE CURRENT DFT POINTER WORD
          LDML   DBSA+3
          RJM    IRP         INCREMENT R POINTER FOR STRUCTURE
          UJN    DBSX

 DBSA     BSSZ   4           BUFFER FOR DFT POINTER WORD
 DMB      SPACE  4,10
**        DMB - DEFINE MODEL DEPENDENT BUFFER.
*
*         ENTRY  GLOBAL STRUCTURE POINTER (AOFF, RUPP, RLOW) DEFINED
*
*         EXIT   MODEL DEPENDENT BUFFER STRUCTURE DEFINED
*
*         USES   W0 - W3.
*
*         CALLS  IDA, IRP, ACB, FHE, WTF, WHF.


 DMB      SUBR               ENTRY/EXIT
          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    MDLP
          RJM    IDA
          CRDL   W0          GET EXISTING MDB POINTER WORD
          LDDL   AOFF
          STDL   W0          REPLACE A OFFSET WITH CURRENT ONE
          LDDL   RUPP
          STDL   W1          REPLACE R UPPER WITH CURRENT ONE
          LDDL   RLOW
          STDL   W2          REPLACE R LOWER WITH CURRENT ONE
          LDN    MDLP
          RJM    IDA
          CWDL   W0          RE WRITE MDB DFT POINTER WORD
          LDDL   W3
          RJM    IRP         INCREMENT GLOBAL STRUCTURE POINTER BY MDB LENGTH
          RJM    WTF         WRITE TRAILER FIELD (DFTE)

*         DEFINE THE PRIMARY CPU BUFFER

          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    0           CPU 0
          RJM    DCB         DEFINE CPU0 BUFFER
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          LDC    PROCID1
          RJM    FHE         LOOK FOR SECOND PROCESSOR
          MJN    DMB1        IF SINGLE CPU

*         DEFINE THE SECOND PROCESSOR BUFFER

          RJM    RBA         REBUILD BUFFER ADDRESS
          RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    1           CPU 1
          RJM    DCB         DEFINE CPU1 BUFFER
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          UJN    DMB2

*         ADJUST SIZE FOR ONLY ONE PROCESSOR

 DMB1     RJM    RBA         REBUILD BUFFER ADDRESS
          LDML   BDSC
          ADN    2           FOR HEADER/TRAILER ON MISSING BUFFER
          STML   BDSC

*         DEFINE THE OVERFLOW BUFFER

 DMB2     RJM    WHF         WRITE HEADER FIELD (DFTS)
          LDN    2           OVERFLOW BUFFER
          RJM    DCB         DEFINE OVERFLOW CPU BUFFER
          RJM    WTF         WRITE TRAILER FIELD (DFTE)
          LJM    DMBX
 DCB      SPACE  4,10
**        DCB - DEFINE CPU BUFFER.
*
*         ENTRY  (A) = CPU OFFSET (0, 1, 2)
*
*         EXIT   CPU MODEL DEPENDENT BUFFER ESTABLISHED
*
*         USES   T1, T7, W4 - W7.
*
*         CALLS  IDA, IRP.


 DCB      SUBR               ENTRY/EXIT
          STD    T7
          LDN    MDLP
          RJM    IDA
          CRDL   W0          READ IN MDB POINTER WORD
          LDDL   W0
          LRD    W1
          ADD    T7
          ADC    RR
          CRDL   W4          READ IN CPU BUFFER POINTER
          RJM    RBA         RESTORE BUFFER ADDRESS
          LDML   MDBSIZE,T1
          STDL   W7
          LDDL   AOFF        CURRENT A OFFSET
          STDL   W4
          LDDL   RUPP        CURRENT R UPPER
          STDL   W5
          LDDL   RLOW
          STDL   W6          CURRENT R LOWER
          LDDL   W0
          ADD    T7
          ADC    RR
          CWDL   W4          DEFINE CPU BUFFER POINTER
          LDDL   W7          GET BUFFER SIZE
          RJM    IRP         UPDATE GLOBAL STRUCTURE POINTER
          LJM    DCBX        RETURN
 DBW      SPACE  4,10
**        DBW - DEFINE BUFFER CONTROL WORDS.
*
*         ENTRY  (T1) IS POINTER TO DFT DEFINITION BUFFER.
*
*         EXIT   BUFFER CONTROL WORD OFFSET FIELDS DEFINED.
*
*         USES   W0 - W3.
*
*         CALLS  IDA.


 DBW      SUBR               ENTRY/EXIT
          LDML   DCWP2,T1    LBUF PARAMETER
          SHN    -10
          STD    T2
          LDN    BCWP
          RJM    IDA
          CRDL   W0          READ IN BUFFER CONTROL POINTER WORD
          SODL   W3          FOR COUNTING
          LRD    W1
 DBW1     LDDL   W0
          ADC    RR
          CWML   DBWA,ON     WRITE CONTROL WORD
          LDD    T2
          RAML   DBWA+3      UPDATE OFFSET BY LBUF
          AODL   W0          NEXT INDEX TO CONTROL WORD
          SODL   W3
          PJN    DBW1        IF NOT DONE
          LJM    DBWX

 DBWA     BSSZ   4           BUFFER CONTROL WORD BUFFER
 DER      SPACE  4,10
**        DER - DEFINE DFT ERROR CONTROL RECORD.
*
*         USES   W0 - W7.
*
*         CALLS  FINDCM, IDA


 DER      SUBR               ENTRY/EXIT
          LDN    ECRP
          RJM    IDA
          CRDL   W4
          FINDCM ECR         GET THE ERROR CONTROL RECORD
          ADN    2           GET BY HEADER WORDS
          CRML   DERA,W7    READ ERROR CONTROL RECORD INTO DFT BUFFER
          LDDL   W4
          LRD    W5
          ADC    RR
          CWML   DERA,W7    WRITE TO ERROR CONTROL RECORD IN CENTRAL MEMORY
          UJN    DERX

 DERA     BSSZ   500         SIZE FOR BIGGEST ERROR CONTROL RECORD
 DEC      SPACE  4,10
**        DEC - DEFINE ELEMENT COUNTERS.
*
*         EXIT   ELEMENT COUNTER IDS ARE INITIALIZED IN THE ELEMENT
*                COUNTERS BUFFER.
*
*         USES   T2, W0 - W3.
*
*         CALLS  IDA.


 DEC      SUBR               ENTRY/EXIT
          LDN    MECP
          RJM    IDA
          CRDL   W0          GET ELEMENT COUNTERS POINTER WORD
          SODL   W3          FOR COUNTING
          LRD    W1
          LDDL   T1
          STDL   T2          INITIALIZE OFFSET TO BUFFER BEGINNING
 DEC1     LDML   DBDH4,T2
          LMC    0#FF        TERMINATOR TAG
          ZJN    DECX        IF DONE
          LDML   DBDH4,T2
          STML   DECA
          LDD    W0
          ADC    RR
          CWML   DECA,ON
          AODL   T2          SET INDEX TO NEXT ID
          AOD    W0
          SOD    W3          DECREASE NUMBER OF ELEMENTS BY ONE
          PJN    DEC1        IF MORE TO DO
          UJN    DECX

 DECA     BSSZ   4           ELEMENT COUNTER WORD BUFFER
 DSS      SPACE  4,10
**        DSS - DEFINE SUPPORTIVE STATUS BUFFER
*
*         ENTRY  (T1) POINTS TO THE 2AP INPUT BUFFER HOLDING DBD
*
*         USES   W0 - W3.
*
*         CALLS  IDA.


 DSS      SUBR               ENTRY/EXIT
          LDML   DSSA+2
          STML   DSSA+3      SAVE ELEMENT SIZE
          LDML   DCWP2,T1
          LPC    0#FF
          STML   DSSA+2      SAVE NUMBER OF ELEMENTS
          LDN    SSBP
          RJM    IDA
          CRDL   W0          READ SUPPORTIVE STATUS POINTER
          LRD    W1
          LDD    W0
          ADC    RR
          CWML   DSSA,ON     WRITE SUPPORTIVE STATUS BUFFER HEADER
          UJN    DSSX

 DSSA     BSSZ   4           SUPPORTIVE STATUS HEADER
 DNR      SPACE  4,10
**        DNR - DEFINE NON RESIDENT STATUS BUFFER.
*
*         EXIT   NON RESIDENT STATUS BUFFER HEADER WORD DEFINES
*
*         USES   W0 - W3.
*
*         CALLS  IDA.


 DNR      SUBR               EMTRY/EXIT
          LDML   DNRA+2
          STML   DNRA+3
          LDML   DNRA+1
          STML   DNRA+2
          LDN    0
          STM    DNRA+1
          LDN    NRSP
          RJM    IDA
          CRDL   W0          READ IN DFT POINTER WORD
          LRD    W1
          LDD    W0
          ADC    RR
          CWML   DNRA,ON     WRITE NON REGISTER STATUS HEADER
          UJN    DNRX

 DNRA     BSSZ   4           NON REGISTER STATUS BUFFER HEADER WORD
 RBA      SPACE  4,10
**        RBA - RESTORE BUFFER ADDRESS.
*
*         EXIT   (T1) = OFFSET TO BEGINNING OF *DBD* DATA IN *2AP* BUFFER.
*
*         NOTE   ON THE CYBER 930 AND ON THOSE MAINFRAMES WITH A MODEL 44
*                IOU, IT IS NECESSARY TO ADD 24(8) MORE WORDS TO THE SIZE OF
*                THE 7700 TABLE.  THE TOTAL 7700 TABLE OFFSET IS KEPT IN
*                T1 WHICH MUST REMAIN VALID THRU EXECUTION OF THIS OVERLAY.


 RBA      SUBR               ENTRY/EXIT
          LDML   IOUM        CHECK IOU MODEL NUMBER
          LMC    0#43
          ZJN    RBA0        IF MODEL 43 IOU
          LMN    0#44&0#43
          ZJN    RBA0        IF MODEL 44 IOU
          LDM    CPU0M
          SHN    -4
          LMN    5
          NJN    RBA1        IF NOT AN S0
 RBA0     LDML   TOUB
          ADN    24
          UJN    RBA2        SAVE TABLE OFFSET

 RBA1     LDML   TOUB
 RBA2     STDL   T1
          UJN    RBAX        RETURN
 SLN      SPACE  4,10
**        SLN - SET LEVEL NUMBER OF DFT BUFFER STRUCTURE.
*
*         IF THE REVISION SET IN CENTRAL MEMORY BY THE OS IS
*         LESS THAN 5 THEN NO MODIFICATION OF THE REVISION LEVEL IS MADE.
*         IF THE OS BOOTS ARE NOT INSTALLED (ERGO 170 STANDALONE) THEN
*         THE REVISION LEVEL IS OBTAINED FROM THE *DBD* RECORD.
*         IF THE BOOTS ARE INSTALLED THEN THE REVISION LEVEL FROM THE
*         DFT DESCRIPTOR IS USED.
*
*         ENTRY  (W1) = 8/HEADER LEVEL NUMBER, 8/PP NUMBER.
*
*         EXIT   (A) = REVISED HEADER LEVEL NUMBER.
*                (W1) = 8/REVISED HEADER LEVEL NUMBER, 8/PP NUMBER.
*
*         USES   T1, T2, W1.
*
*         CALLS  FHE.


 SLN      SUBR               ENTRY/EXIT
          LDDL   T1
          STML   SLNB        SAVE 2AP ADDRESS
          LDDL   W1
          SHN    -10
          NJN    SLN1        IF NOT VERSION 4
          LDN    VER4
 SLN1     STML   SLNA        SAVE LEVEL NUMBER PASSED BY OS
          LDDL   W1          CLEAR LEVEL NUMBER FIELD
          LPC    0#FF
          STDL   W1
 SLN2     LDML   SLNA        HEADER VERSION NUMBER
          SBN    VER5
          MJN    SLN3        IF LESS THAN VERSION 5
          LDN    DFTID
          RJM    FHE         FIND HARDWARE ELEMENT
          LDML   HBUF+DOBIV
          SHN    -6
          STDL   T2          VALUE FROM DESCRIPTOR
          LMN    77
          ZJN    SLN5        IF BOOT NOT INSTALLED
          LDDL   T2
          STML   SLNA
 SLN3     LDML   SLNA        SET REVISED LEVEL NUMBER
          SHN    10
 SLN4     LMDL   W1
          STDL   W1
          LDML   SLNA
          UJP    SLNX        RETURN

 SLN5     LDML   SLNB
          STDL   T1
          LDML   DCWP1,T1    GET REVISION LEVEL FROM THE *DBD* RECORD
          LPC    0#FF00
          UJN    SLN4

 SLNA     BSS    1           INITIAL HEADER LEVEL NUMBER
 SLNB     BSS    1           2AP BUFFER ADDRESS
 VDS      SPACE  4,10
**        VDS - VALIDATE DFT STRUCTURE.
*
*         EXIT   (A) < 0 STRUCTURE NOT VALIDATED.
*                (A) = 0 STRUCTURE VALIDATED.
*                (A) > 0 STRUCTURE IS VERSION 3 OR LESS AND IS BUILT
*
*         CALLS  IDA, VCK.
*
*         USES   CM - CM+3, W0 - W3.

 VDS00    LDN    1
          UJN    VDSX

 VDS0     LCN    0           MINUS EXIT CONDITION
 VDS      SUBR               ENTRY/EXIT
          LDN    HDRP
          RJM    IDA         INCREMENT DFT ADDRESS
          CRDL   CM          GET RLI HANDOFF FIELD
          LDDL   CM+1
          SHN    -10
          ZJN    VDS0        IF VERSION 4 BUILD STRUCTURE
          SBN    VER4
          MJN    VDS00       IF VERSION 3 OR LESS THE STRUCTURE IS ALREADY BUILT
          UJN    VDS2

 VDS1     LDN    0
          UJN    VDSX        RETURN

 VDS2     LDDL   CM
          SHN    -10
          LPN    0#F
          ZJP    VDS0        IF STRUCTURE NEEDS TO BE BUILT
          SBN    1
          STD    T7          SAVE NUMBER OF POINTER WORDS
 VDS3     LDD    T7
          RJM    IDA         INCREMENT DFT POINTER ADDRESS
          CRDL   W0
          LDDL   W0
          ADDL   W1
          ADDL   W2
          ADDL   W3
          ZJN    VDS4        IF NIL POINTER WORD
          LDDL   W3
          ADDL   W0
          LRD    W1
          ADC    RR
          CRDL   CM
          LDDL   CM
          LMC    0#4446
          NJP    VDS0        IF NO MATCH
          LDDL   CM+1
          LMC    0#5445
          NJP    VDS0        IF NO MATCH
 VDS4     SOD    T7
          SBN    6
          ZJP    VDS5        IF AT OS REQUEST POINTERS
          LDD    T7
          ZJP    VDS1        IF AT END OF POINTERS
          UJP    VDS3

 VDS5     LDD    T7
          SBN    3
          STD    T7          SKIP OS REQUEST POINTERS
          UJP    VDS3

          OVERFLOW 5700

*         END CTP$DFT_PRESET_BUILD_STRUCTURE
