*DECK DA$OPSC 
*CWEOR
          IDENT  DE$OPSC
* DE$OPSC(FILELFN,DIT,FWB,BFS)
*#
* *   DE$OPSC - OPEN SCHEMA DIRECTORY ACCESS ROUTINE. 
* *   P.L.KENNY                                  DATE  07/19/74 
* 
* DC  PURPOSE 
* 
*       OPEN THE SCHEMA FILE AND READ THE SCHEMA CONTROL WORDS INTO THE 
*     DIRECTORY INFORMATION TABLE.
* 
*     OPTION TO -GET- FROM SCHEMA FILE THRU ENTRY DE$GTSC 
* 
* DE$GTSC(WSA,RL,WA)
* 
* 
* DC  ENTRY CONDITIONS
* 
*     A1 CONTAINS ADDRESS OF PARAM LIST FOR OPEN OR GET CALL
* 
* DC  EXIT CONDITIONS 
* 
*     SUCCESSFUL OPEN 
*       DASTATE IS ZERO. (DASTATE IS WORD 22 OF THE DIT.) 
*       DAINDX,DAENTAD ARE ZERO. (WORDS 21 AND 23 OF THE DIT.)
*       THE SCHEMA FILE IS OPEN.
*       THE SCHEMA CONTROL WORDS HAVE BEEN READ INTO THE FIRST 20 WORDS 
*       OF THE DIT. 
*       THE LFN,FWB,AND BFS FIELDS OF THE SCHEMA FIT ARE SET TO THE 
*       VALUES PASSED BY THE CALLING ROUTINE. 
*     SUCCESSFUL GET
*       DASTATE = ZERO
*     UNSUCCESSFUL CALL : 
*       DASTATE IS SET TO THE REC MANAGER ERROR-STATUS VALUE. 
* 
* DC  CALLING ROUTINES
* 
*     CDCS 1.0 INVOKE MODULE. 
*     DE$NMSC 
* 
* DC  CALLED ROUTINES 
* 
*     CRM OPENM MACRO 
*     CRM GET MACRO 
*     CRM STORE MACRO 
*     CRM FETCH MACRO 
* 
* DC  NON-LOCAL VARIABLES 
* 
*     THOSE CELLS MENTIONED IN EXIT CONDITIONS. 
*     CRM BUFFER USED BY GET. 
* 
* DC  DESCRIPTION 
* 
*     SAVE ADDRESS OF PARAM LIST
*     STORE PARAMS IN FIT USING CRM STORE MACRO 
*     IF OPEN CALL, 
*       OPEN THE SCHEMA FILE
*       READ THE CONTROL WORDS OF THE SCHEMA INTO THE FIRST 20 WORDS
*     OF THE DIT
*     IF GET CALL,READ REQUESTED INFO FROM SCHEMA FILE
* 
*       IF SUCCESSFUL, SET DASTATE TO ZERO, ELSE
*     SET IT TO FIT ES FIELD VALUE. 
*       RETURN. 
*#
          EJECT 
          ENTRY  DE$OPSC
          ENTRY  DE$CLSC
          ENTRY  DE$GTSC
          ENTRY  DE$FTSC     SCHEMA FIT 
 DE$FTSC  FILE   FO=WA,RT=U,MRL=1310710,EX=DAOPERR,FWB=DITADDR,BFS=1
* 
*    EX,LFN,FWB,BFS AND OC SET PRIOR TO OPEN VIA A1 PARAM LIST
* 
* MAX VALUE ALLOWED FOR MRL IS USED - (2**17-1)*10. 
* 
* ASSUME DASTATE IS WORD 22 OF THE DIT
DE$OPSC   BSSZ   1
          SX6    A1 
          SA6    A1ADDR            SAVE ADDR OF PARAMS
          SA1    X1                FETCH LFN
          MX6    42 
          BX6    X1*X6
          STORE  DE$FTSC,LFN=X6    LFN TO FIT 
          SA1    A1ADDR 
          SA2    X1+1        FETCH DIT ADDR 
          BX6    X2 
          SA6    DITADDR           SAVE DIT ADDR
          SA1    A1ADDR 
          SA2    X1+2        FETCH FWB
          STORE DE$FTSC,FWB=X2     FWB TO FIT 
          SA1    A1ADDR 
          SA2    X1+3        FETCH BFS
          SA1    X2                FETCH BFS
          STORE  DE$FTSC,BFS=X1    BFS TO FIT 
          SX5    DAOPERR
          STORE  DE$FTSC,EX=X5     STORE ERROR EXIT ADDRESS 
          FETCH  DE$FTSC,OC,X4     FETCH OPEN/CLOSE FIELD FROM FIT
          SX5    1                 VALUE OF OPEN STATUS 
          IX5    X5-X4
          NZ     X5,OPENSC         IF NOT OPEN, JUMP
          RJ     DE$CLSC           FILE STILL OPEN, CLOSE FILE
*OPEN THE SCHEMA FILE 
OPENSC    OPENM  DE$FTSC,INPUT
          SA1    DITADDR
          GET    DE$FTSC,X1,140,DAOPERR,1 
          SA1    DITADDR           SET DASTATE TO SUCCESS 
          MX6    0
          SA6    X1+22       SET DASTATE TO 0 
          SA6    X1+21       SET DAENTAD TO 0 
          SA6    X1+23       SET DAINDX TO 0
          EQ     DE$OPSC
DE$CLSC   DATA   0
          CLOSEM DE$FTSC
          EQ     DE$CLSC
DAOPERR   DATA   0
          FETCH  DE$FTSC,ES,X6     PUT REC MNGR ERROR INTO DASTATE
          SA1    DITADDR
          SA6    X1+22
          EQ     DAOPERR
 DE$GTSC  DATA   0                 ENTRY TO GET SCHEMA DATA 
          SA2    A1+2 
          SA3    X2                WA 
          SA4    A1+1 
          SA2    X4                RL 
          GET    DE$FTSC,X1,X2,DAGTERR,X3 
          EQ     DE$GTSC           RETURN 
 DAGTERR  DATA   0                 ERROR ENTRY
          FETCH  DE$FTSC,ES,X1     FETCH ERROR CODE 
          SX3    X1-143B
          ZR     X3,DAGTERR        IF INSUFFICIENT DATA 
          BX6    X1 
          SA1    DITADDR
          SA6    X1+22             SET DASTATE NONZERO
          EQ     DAGTERR           RETURN 
 A1ADDR   BSSZ   1
DITADDR   BSSZ   1                 DIRECTORY INFO TABLE ADDRESS 
          END 
