*DECK DB$ROLL 
          IDENT  DB$ROLL
 DB$ROLL TITLE DB$ROLL  -- CDCS ROLL OUT SUPERVISOR 
          SST 
          IPARAMS 
          LIST   F
*#
* *   DB$ROLL -- CDCS ROLL OUT ROUTINE           PAGE  1
* *   C O GIMBER                                 DATE  10/24/75 
* *   R L MCALLESTER - DB$SELF INTERFACE         DATE  01/23/80 
* *   D E TRIGLIA    - ERROR PROCESSING          DATE  12/16/80 
* 
* DC  PURPOSE 
* 
*     ROLL OUT ALL BUT MINIMUM FL WHEN CDCS HAS NOTHING TO DO.
*     ROLL CDCS BACK IN AGAIN IF A NEW REQUEST IS RECEIVED
*       OR IF THE CONSOLE OPERATOR BRINGS UP THE -K/L- DISPLAY
*       OR IF A SPECIFIED PERMANENT FILE BECOMES AVAILABLE
*       OR IF AN ACTIVE USER JOB IS SWAPPED BACK IN BY THE OS.
*     CALL RECOVR TO ENSURE WE ROLLIN BEFORE REPRIEVING, IF ABORTED.
*     THIS ROUTINE CONTAINS A VERY SMALL -K/L- DISPLAY BUFFER TO TELL 
*     THE OPERATOR THAT THE FULL BUFFER IS COMING.
*     IT ALSO CONTAINS AN INPUT REQUEST BUFFER THAT IS USED WHILE CDCS
*     IS ROLLED OUT.
* 
* DC  CALLING ROUTINES
* 
*     DB$MTR -- CDCS MONITOR
* 
* DC  CALLED ROUTINES 
* 
*     DB$ROER                ROLLOUT ERROR ROUTINE
*     DB$ROLI                ROLLIN SUBROUTINE (INTERNAL) 
*     DB$ROLO                ROLLOUT SUBROUTINE (INTERNAL)
*     DB$SELF                CALL OWN SUBSYSTEM TO BLOCK OTHER INPUT
* 
*     MACE IO MACROS
*       FILEB 
*       READSKP 
*       REWIND
*       WRITER
*     SYSTEM MACROS 
*       MEMORY
*       RECALL
*       RECOVR
*       SFCALL
*#
 DB$ROLL  EJECT 
*CALL DSLMACRO
 DB$ROLL  TITLE      D B $ R O L L   E X E C U T A B L E   C O D E
*#
* 
* DC  DESCRIPTION 
*#
          ENTRY  DB$ROLL
DB$ROLL   EQ   *+1S17 
*#
* 
*     FIND CURRENT FL 
*#
          SX6    4           SET CMM STATUS 
          SA6    STATUS1
          MEMORY  CM,STATUS1,RECALL 
          SA4    STATUS1
          SX7    =XCDCS 
          LX4    30D
          SX6    X4-1 
          SA7    DB$FWAR
          SA6    DB$LWAR
*#
*     WRITE THE CURRENT FIELD LENGTH OUT TO DISC. 
*#
          RJ     DB$ROLO
          ZR     X6,OKROLO   CHECK FOR OCCURRENCE OF CIO ERROR
          SA1    FETPTR      PARAM LIST FOR ERROR ROUTINE 
          RJ     =XDB$ROER   ISSUE ERROR MESSAGE
 NOACT    RECALL             RECALL WHILE WAITING FOR ACTIVITY
          RJ     TESTA       TEST FOR ACTIVITY
          NZ     X6,DB$ROLL  ACTIVITY DETECTED
          EQ     NOACT
*#
*     TERMINATE ROLLOUT IF SOME WORK NOW EXISTS.
*#
 OKROLO   RJ     TESTA       TEST FOR ACTIVITY
          NZ   X6,DB$ROLL    EXIT IF THERE IS ACTIVITY
*#
*     CLEAR THE DB$ROLL REQUEST INPUT BUFFER. 
*#
          SX6    0
          SA6    DB$IREQ
 CLEARQ   SX1    A6+2-ENDIREQ 
          SA6    A6+1 
          MI   X1,CLEARQ
*#
*     SWITCH THE RA.SSC POINTER TO POINT TO THE DB$ROLL INPUT BUFFER. 
*#
          SA1    RA.SSC 
          BX6    X1 
          SA6    SAVESSC     SAVE RA.SSC TO BE RESTORED AFTER ROLL-IN.
          RJ     =XDB$SELF   BLOCK THE INPUT PATH WHILE IT IS ALTERED.
          ZR   X6,DB$ROLL    EXIT IF A NEW REQUEST WAS RECEIVED.
          SA1    RA.SSC 
          MX0    19 
          LX0    18 
          BX6    -X0*X1      CLEAR INPUT FLAG AND BUFFER POINTER. 
          SX1    DB$IREQ     ADDRESS OF DB$ROLL INPUT BUFFER. 
          BX6    X6+X1
          SA6    A1          READY TO RECEIVE REQUESTS WHILE ROLLED OUT.
*#
*     ENABLE REPRIEVE CONTROL IN RESIDENT.
*#
          RECOVR ABORTED,77B,0     REPRIEVE ON ALL BUT NORM TERM
*#
*     REDUCE MEMORY TO MINIMUM. 
*#
          SA1    FIRST
          SX6    X1 
          LX6    30D
          SX5    4           SET CMM STATUS 
          IX6    X5+X6
          SA6    STATUS2
          MEMORY  CM,STATUS2,RECALL 
*#
*     LOOP WITH RECALL UNTIL THERE IS SOME WORK.
*#
LOOP      RECALL             PERIODIC RECALL FOR OS DEFAULT PERIOD
          RJ     TESTA       TEST FOR ACTIVITY
          ZR   X6,LOOP       LOOP UNTIL THERE IS ACTIVITY 
 DB$ROLL  SPACE  3,10 
*#
*     IF THE ACTIVITY IS A NOTIFICATION OF A UCP END OR ABORT 
*         ISSUE AN SF.ENDT FUNCTION WITH A UCPA OF -1.
*         THAT RELEASES THE UCP FROM ALL OF ITS CONNECTIONS WITH CDCS.
*         THE OPERATING SYSTEM CAN THEN TERMINATE THE UCP BEFORE
*         THE CDCS ROLL-IN IS COMPLETED.
*         THIS IS NECESSARY WHEN THE UCP IS TOO LARGE TO BE IN
*         MEMORY AT THE SAME TIME AS THE FULL CDCS FIELD LENGTH.
*#
          SA1    RA.SSC      (X1) = SUBSYSTEM COMMUNICATION WORD
          PL   X1,ROLLIN     NO REQUEST HAS BEEN RECEIVED 
          SA2    X1 
          MX0    6
          LX0    24          MASK FOR THE STATUS FIELD IN THE REQUEST 
          BX2    X0*X2
          ZR   X2,ROLLIN     IT IS NOT A DROP/ABORT STATUS
          SA2    A2+1        FETCH THE RUN-UNIT ID
          MX6    17 
          BX7    X2 
          SA7    RUID 
          SX1    SF.ENDT
          LX6    42          UCPA = -1
          IX6    X6+X1
          SA6    FUNCTION 
          SFCALL A6          ISSUE AN SF.ENDT TO DISCONNECT THE UCP 
 DB$ROLL  SPACE  4,10 
*#
*     GET PREVIOUS MEMORY BACK
*#
 ROLLIN   SA1    STATUS1
          MX0    59D
          BX6    X0*X1
          SX0    4           SET CMM BIT
          BX6    X6+X0
          SA6    STATUS1     CLEAR COMPLETION BIT IN STATUS1
          MEMORY CM,STATUS1,RECALL
*#
*     READ IN FL WHICH WAS WRITTEN OUT. 
*#
          RJ     DB$ROLI
*#
*     CHECK FOR A CIO ERROR ON THE ROLLIN.
*#
          ZR     X6,OKROLI   CHECK FOR OCCURRENCE OF CIO ERROR
          SA1    X6          GET FET+0
          MX0    -14         ISOLATE ERROR NUMBER 
          BX1    -X0*X1 
 .OS.     IFC    EQ,*"OS.NAME"*KRONOS*
          AX1    10D
 .OS.     ELSE
          AX1    9
 .OS.     ENDIF 
          MX0    -3          INSERT ERR NUM IN MESSAGE
          BX2    -X0*X1 
          AX1    3
          LX1    6
          BX1    X1+X2
          LX1    36D
          SA2    ERRMSG+1 
          IX6    X1+X2
          SA6    ERRMSG+1 
          MESSAGE ERRMSG,0,RECALL   ISSUE MESSAGE 
*#
*         REDUCE FIELD LENGTH AND DUMP WHAT IS THERE. 
*#
          SA1    FIRST
          SX6    X1 
          LX6    30D
          SX5    4           SET CMM STATUS 
          IX6    X5+X6
          SA6    STATUS2
          MEMORY CM,STATUS2,RECALL
          SA1    FIRST
          SX7    X1-1        X7 = FL
 .OS.     IFC    EQ,*"OS.NAME"*KRONOS*
          SYSTEM DMD,R,X7,0  DUMP THE FIELD LENGTH, NOS 
          SETLOF 0           NO LIST OF FILES REPRIEVE PROC 
          SYSTEM RPV,RECALL  TURN OFF REPRIEVE
 .OS.     ELSE
          LX7    12 
          SA7    FETPTR      FETPTR USED AS PARAM WORD
          SYSTEM DMP,R,A7    DUMP FIELD LENGTH, NOS/BE
          SYSTEM RPV,RECALL,EXPKG   TURN OFF REPRIEVE 
 .OS.     ENDIF 
 ABRT     ABORT              ABORT CDCS 
*#
*     IF THIS ROLLIN IS INITIATED FROM REPRIEVE, RETURN THERE 
*     ON COMPLETION.
*#
 OKROLI   SA1    ABTFLAG     X1 NE 0 IF REPRIEVED WHILE ROLLED OUT
          NZ   X1,ABORTED    IF REPRIEVED, EXIT TO RECOVR 
*#
*     DISABLE REPRIEVE CONTROL IN RESIDENT. 
*#
          RECOVR ABORTED,0,0 NO REPRIEVE CONDITIONS 
*#
*     RESTORE RA.SSC FOR USE DURING CDCS ACTIVITY.
*#
          SA1    RA.SSC 
          MI   X1,REQYES     A REQUEST WAS RECEIVED WHILE CDCS WAS OUT
          RJ     =XDB$SELF
          ZR   X6,REQYES     ONE RECEIVED SINCE.
          SA2    SAVESSC     CONTENTS OF RA.SSC PRIOR TO THE ROLLOUT
          BX6    X2 
          SA6    RA.SSC 
          EQ   DB$ROLL       RETURN 
*#
*       IF A REQUEST WAS RECEIVED WHILE CDCS WAS ROLLED OUT 
*       THEN MOVE IT INTO THE WAITING RCB BEFORE RETURNING TO CDCS. 
*#
 REQYES   BSS    0
          SA1    RA.SSC      CURRENT CONTENT OF RA.SSC
          SA2    SAVESSC     CONTENTS PRIOR TO THE ROLLOUT
          SA3    X1          THE FIRST WORD OF THE REQUEST PACKET 
          SB2    ENDIREQ-DB$IREQ-1  SET A MOVE COUNT
          BX6    X3 
          SA6    X2 
          SB1    1
          SA3    A3+B1       READ THE SECOND WORD 
  
 MLOOP    BSS    0           MOVE LOOP
          BX6    X3 
          SA6    A6+B1
          SB2    B2-B1
          SA3    A3+B1
          NZ   B2,MLOOP 
  
          SX2    X2          EXTRACT RCB REQUEST PACKET ADDRESS 
          SX3    X1 
          IX1    X1-X3       CLEAR DB$IREQ ADDRESS FROM RA.SSC CONTENTS 
          IX6    X1+X2       INSERT THE RCB PACKET ADDRESS
  
*         NOTE THAT BIT 59 IS LEFT SET SO DB$IREC WILL FIND AND 
*         PROCESS THE NEW REQUEST.
  
          SA6    A1          REWRITE RA.SSC 
          EQ   DB$ROLL
 ABORTED  TITLE  A B O R T E D  -  R E P R I E V E   P R O C E S S O R .
*#
* *   DB$ROLL                                    PAGE  1
* *   ABORTED -- REPRIEVE PROCESSOR 
* *   BOB MCALLESTER                             DATE  03/20/83 
* 
* DC  PURPOSE 
* 
*     RECOVER THE FULL CDCS FIELD LENGTH SO THAT THE OTHER
*     REPRIEVE PROCEDURES CAN BE EXECUTED.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     CDCS HAS BEEN ABORTED, PROBABLY DUE TO AN OPERATOR DROP.
* 
* DC  EXIT CONDITIONS 
* 
*     THE CDCS SYSTEM CONTROL POINT STATUS HAS BEEN ENDED 
*     THE FULL FIELD LENGTH HAS BEEN ROLLED IN. 
* 
* DC  DESCRIPTION 
* 
*     CDCS RELINQUISHES ITS SYSTEM CONTROL POINT STATUS.
*     THIS ALLOWS THE OPERATING SYSTEM TO RELEASE ANY EXISTING USER 
*     CONNECTIONS.
*     THIS IS PARTICULARLY IMPORTANT IF THERE IS A USER SO LARGE THAT 
*     CDCS CAN NOT REGAIN ITS FIELD LENGTH WHILE THAT USER IS IN
*     MEMORY. 
*     WHEN THE USER'S SCP CONNECTIONS ARE RELEASED, THE OPERATING 
*     SYSTEM WILL BE ABLE TO TERMINATE CDCS AND ITS USERS SEPARATELY. 
*     AFTER THE USER IS TERMINATED, CDCS CAN BE GRANTED ITS FULL
*     FIELD LENGTH. 
* 
*     SET THE FLAG "ABTFLAG" SO THAT FOLLOWING THE EXECUTION OF 
*     "ROLLIN" CONTROL WILL BE RETURNED TO "RECOVR" THROUGH THE ENTRY 
*     POINT "ABORTED".
*#
  
 ABORTED  EQ   *+1S17        ENTRY/EXIT 
          SX6    SF.EXIT
          SA6    FUNCTION 
          SFCALL A6          EXIT FROM SYSTEM CONTROL POINT STATUS
          SX6    1
          SA6    ABTFLAG     FLAG WE WERE REPRIEVED WHEN ROLLED OUT 
          EQ   ROLLIN        ROLLIN, THEN EXIT THROUGH *ABORTED*
 DB$ROLI  TITLE  D B $ R O L I  -  R O L L I N   S U B R O U T I N E
*#
* *   DB$ROLL -- CDCS ROLLOUT ROUTINE            PAGE  1
* *   DB$ROLI -- ROLLIN SUBROUTINE               DATE  12/4/80
* 
* DC  PURPOSE 
* 
*     ROLL IN THE FIELD LENGTH WHICH IS NOW ON THE ROLLOUT FILE.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     THE FET CONTAINED IN THIS MODULE CONTAINS ALL OF THE CORRECT
*     VALUES TO PERFORM THE ROLLIN. (DB$ROLO LEAVES THE FET READY FOR 
*     THE ROLLIN OPERATION.) CDCS HAS ALL OF THE FIELD LENGTH IT
*     NEEDS FOR ROLLING IN. 
* 
* DC  EXIT CONDITIONS 
* 
* D   NORMAL
* 
*     X6 EQUALS ZERO. THE FIELD LENGTH WHICH WAS OUT ON THE ROLLOUT 
*     FILE IS NOW IN MEMORY.
* 
* D   ABNORMAL
* 
*     X6 EQUALS THE ADDRESS OF THE FET. A CIO ERROR OCCURRED DURING 
*     ROLLIN AND THE FIELD LENGTH WHICH IS OUT ON THE ROLLOUT 
*     FILE MAY OR MAY NOT BE IN MEMORY. 
* 
* DC  REGISTERS MODIFIED
* 
*     A -- 1, 2, 3, 6, 7
*     B -- NONE 
*     X -- 1, 2, 3, 6, 7
* 
* DC  CALLING ROUTINES
* 
*     DB$ARRO                ROLLIN AFTER AUTO RECOVERY 
*     DB$ROLL                ROLLIN WHEN ACTIVITY DETECTED
* 
* DC  CALLED ROUTINES 
* 
*     READSKP                MACE IO MACRO - READ ROLLOUT FILE
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*     READ IN THE FIELD LENGTH WHICH WAS WRITTEN OUT. 
*#
 DB$ROLI  SPACE  3,6
          ENTRY  DB$ROLI
 DB$ROLI  EQ     *+1S17 
          REWIND  ROLL,RECALL 
                             FIRST = (DB$FWAR)
                             LIMIT = (DB$LWAR)
          SA1    FIRST
          SX6    X1 
          SA6    IN          IN = FIRST 
          SA6    OUT         OUT = FIRST
          READSKP  ROLL,0,R 
          SA1    ROLL        GET FET+0
          MX6    -14         ISOLATE ERROR FIELD, LESS THE EOI BIT
          BX6    -X6*X1 
          AX6    10D
          AX6    10D
          ZR     X6,NOERR1   CONTINUE IF NO CIO ERROR 
          SX6    ROLL        RETURN POINTER TO FET
          EQ     DB$ROLI
 NOERR1   SA1    LWASAVED 
          SA2    LWASAVED+1 
          SA3    LIMIT
          BX7    X1 
          SA7    X3          RESTORE ((DB$LWAR))
          BX7    X2 
          SA7    X3-1        RESTORE ((DB$LWAR)-1)
          EQ     DB$ROLI
 DB$ROLO  TITLE  D B $ R O L O  -  R O L L O U T   S U B R O U T I N E
*#
* *   DB$ROLL -- CDCS ROLLOUT ROUTINE            PAGE  1
* *   DB$ROLO -- ROLLOUT SUBROUTINE              DATE  12/4/80
* 
* DC  PURPOSE 
* 
*     WRITE PART OF THE CDCS FIELD LENGTH OUT TO THE ROLLOUT FILE.
* 
* DC  ENTRY CONDITIONS
* 
* D   ASSUMPTIONS 
* 
*     DB$FWAR CONTAINS THE FWA OF THE FIELD LENGTH TO BE ROLLED OUT.
*     DB$LWAR CONTAINS THE LWA OF THE FIELD LENGTH TO BE ROLLED OUT.
* 
* DC  EXIT CONDITIONS 
* 
* D   NORMAL
* 
*     X6 EQUALS ZERO. ALL OF THE CDCS FIELD LENGTH FROM (DB$FWAR) TO
*     (DB$LWAR) IS WRITTEN ON THE ROLLOUT FILE. 
* 
* D   ABNORMAL
* 
*     X6 EQUALS THE ADDRESS OF THE FET. A CIO ERROR OCCURRED DURING 
*     ROLLOUT. THE CONTENTS OF THE ROLLOUT FILE ARE NOT KNOWN.
* 
* DC  REGISTERS MODIFIED
* 
*     A -- 1, 2, 3, 4, 6, 7 
*     B -- NONE 
*     X -- 0, 1, 2, 3, 4, 6, 7
* 
* DC  CALLING ROUTINES
* 
*     DB$ARRO                ROLLOUT BEFORE AUTO RECOVERY 
*     DB$ROLL                ROLLOUT WAITING WHILE WAITING FOR ACTIVITY 
* 
* DC  CALLED ROUTINES 
* 
*     MEMORY                 SYS MACRO - FIND CURRENT FIELD LENGTH
*     REWIND                 MACE IO MACRO - REWIND ROLLOUT FILE
*     WRITER                 MACE IO MACRO - WRITE FL TO ROLLOUT FILE 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
* DC  DESCRIPTION 
* 
*#
 DB$ROLO  SPACE  3,6
          ENTRY  DB$ROLO
 DB$ROLO  EQ     *+1S17 
*#
*     WRITE OUT CURRENT FIELD LENGTH. 
*#
          SA1    FIRST
          SA2    DB$FWAR
          SA3    LIMIT
          SA4    DB$LWAR
          MX0    42D
          BX1    X0*X1
          IX6    X1+X2
          SA6    FIRST       FIRST = (DB$FWAR)
          SX7    X2 
          SA7    IN          IN = FIRST 
          BX3    X0*X3
          IX6    X3+X4
          SA6    LIMIT       LIMIT = (DB$LWAR)
          SA7    OUT         OUT = FIRST
          REWIND  ROLL,RECALL 
          SA1    FIRST
          SA2    LIMIT
          SX6    X1 
          SA6    OUT         OUT = FIRST
          SX7    X2-1 
          SA7    IN          IN = (DB$LWAR)-1 
          SA4    X2          (X4) = ((DB$LWAR)) 
          SA5    X7          (X5) = ((DB$LWAR)-1) 
          BX6    X4 
          SA6    LWASAVED    SAVE ((DB$LWAR)) 
          BX7    X5 
          SA7    LWASAVED+1  SAVE ((DB$LWAR)-1) 
          WRITER  ROLL,0,RECALL 
          SA1    ROLL        GET FET+0
          MX6    -14         ISOLATE ERROR FIELD, LESS EOI BIT
          BX6    -X6*X1 
          AX6    10 
          ZR     X6,DB$ROLO  IF NO ERROR, RETURN ZERO 
          SX6    ROLL        IF ERROR, RETURN POINTER TO FET
          EQ      DB$ROLO 
 DB$ROLL  TITLE  M I S C E L L A N E O U S   D A T A
 ABTFLAG  BSSZ   1           NON ZERO IF ABORT WHILE ROLLED OUT 
  
  
          ENTRY  DB$FWAR
DB$FWAR   BSSZ   1
          ENTRY  DB$LWAR
DB$LWAR   BSSZ   1
  
 .OS.     IFC    EQ,*"OS.NAME"*KRONOS*
 ZZZZZCR  FILEB  ,,EPR       ROLLOUT FET FOR NOS
 .OS.     ELSE
 ZZZZZCR  FILEB  ,,EPR,XPR=EXFET   ROLLOUT FET FOR NOS/BE 
 EXFET    BSSZ   1
 .OS.     ENDIF 
ROLL      EQU    ZZZZZCR
FIRST     EQU    ROLL+1 
IN        EQU    ROLL+2 
OUT       EQU    ROLL+3 
LIMIT     EQU    ROLL+4 
STATUS1   BSS    1
STATUS2   BSS    1
  
 FETPTR   CON    ROLL        PARAM LIST FOR ERROR ROUTINES
 ERRMSG   DIS    ,*  CIO ERROR 00 DURING ROLLIN.* 
LWASAVED  BSS    2           SAVED LWA AND LWA-1 OF FL
  
  
          ENTRY  DB$DMMB     MINI-BUFFER CONTROL WORD 
 DB$DMMB  VFD    6/0,18/MBIN,18/MBWW,18/MBWW
 MBIN     BSSZ   7           MINI-BUFFER INPUT PORTION
 MBWW     BSSZ   1           MINI-BUFFER WATCHER WORD 
 MBOUT    BSS    0           MINI-BUFFER OUTPUT PORTION 
          DSL    10,13,(PLEASE WAIT A MOMENT.)
          DSL    12,9,(CDCS IS PREPARING ITS DISPLAY.)
          BSSZ   1           TERMINATION OF THE MINI-BUFFER 
  
  
*         DB$IREQ IS THE INPUT AREA FOR RECEIVING REQUEST PACKETS.
*         THE OPERATING SYSTEM ADDS TWO WORDS TO THE REQUEST PACKET 
*         SO THE SIZE MUST BE TWO WORDS LARGER THAN DFINRQBFSIZE. 
  
          ENTRY  DB$IREQ
 DB$IREQ  BSS    36 
 ENDIREQ  BSS    0           END OF INPUT REQUEST BUFFER
  
 SAVESSC  CON    0           SAVE RA.SSC
 .OS.     IFC    EQ,*"OS.NAME"*SCOPE *
 EXP21    EQ     ABRT        ABORT AFTER RPV CALL ON NOS/BE 
 EXPKG    EQU    EXP21 - 21B
 .OS.     ENDIF 
 TESTA    TITLE  T E S T A  -  T E S T   F O R   A C T I V I T Y
*#
* *   DB$ROLL                                    PAGE  1
* *   TESTA -- TEST FOR ACTIVITY
* *   R L MCALLESTER                             DATE  11/20/79 
* 
* DC  PURPOSE 
* 
*     TEST FOR ACTIVITY 
* 
*     - NO UCP REQUEST RECEIVED 
*     - NO OPERATOR COMMAND RECEIVED
*     - NO CONSOLE WATCHER EXISTS 
*     - NO CDCS JOBS RECORDED IN THE SWAPPED OUT LIST HAVE BEEN SWAPPED IN. 
*     - NO PERMANENT FILE HAS BECOME AVAILABLE
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     - CDCS JOB SWAP LIST HAS BEEN RECORDED BY DB$MTR. 
*     - SYSTEM COMMUNICATION AREA HAS BEEN ESTABLISHED. 
*     - IF DB$ROAF IS GREATER THAN ZERO, THE WORDS DIRECTLY FOLLOWING 
*       IT ARE THE PERMANENT FILE ATTACH PARAMETERS OF A FILE FOR 
*       WHICH CDCS IS WAITING.
* 
* DC  EXIT CONDITIONS 
* 
*     X6 CONTAINS THE FLAG FOR DETERMINING WHETHER THERE IS NOW ACTIVITY. 
* 
* DC  CALLING ROUTINES
* 
*     DB$ROLL 
* 
* DC  CALLED ROUTINES 
* 
*     NONE
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE
* 
*#
  
 YES      SX6    1           YES THERE IS ACTIVITY
  
*         TEST FOR ACTIVITIES 
 TESTA    EQ   *+1S17 
          SA1    RA.SSC      (X1) = SUBSYSTEM COMMUNICATION WORD
          NG   X1,YES        A UCP REQUEST HAS BEEN RECEIVED
          SA1    MBIN 
          NZ   X1,YES        AN OPERATOR COMMAND HAS BEEN RECEIVED
          SA1    MBWW 
          NZ   X1,YES        A CONSOLE WATCHER EXISTS 
*#
* DC  DESCRIPTION 
* 
*         IF UCP REQUEST, OR OPERATOR COMMAND, OR CONSOLE WATCHER 
*         EXISTS, OR ANY JOB HAS BEEN SWAPPED IN BY THE OPERATING 
*         SYSTEM, OR A PERMANENT FILE THAT CDCS IS WAITING FOR HAS
*         BECOME AVAILABLE, 
*         THEN ROLL CDCS BACK TO ITS FULL SIZE. 
* 
*         TEST IF A ACTIVE USER HAS BEEN SWAPPED IN.
*#
          SA1    DB$RLLA     LIST ADDRESS (LAST USER IN THE LIST) 
          BX6    X1 
          SA6    INDEX       INITIALIZE THE INDEX 
  
 LOOPA    SA1    INDEX
          SX6    X1-DB$RLLA 
          ZR   X6,TESTF      THE LIST IS EXHAUSTED, NO ACTIVITY.
                             TEST THE NEXT ACTIVITY.
          SA2    X1          THE NEXT RUNUNIT ID
          MX7    -1 
          BX6    X2 
          IX7    X7+X1       INDEX = INDEX -1 
          SA6    RUID 
          SA7    A1 
          SX6    SF.STAT
          SA6    FUNCTION 
          SFCALL A6 
          SA1    FUNCTION    RETURN CODE 44 INDICATES JOB IS SWAPPED. 
          AX1    54          IF THERE IS A 44 RETURN CODE, THE SIGN IS -
          SX6    X1+33B      ADD THE COMPLEMENT OF 44B. 
          ZR   X6,LOOPA      JOB IS SWAPPED OUT.
          EQ   YES           IF NOT SWAPPED - THERE IS ACTIVITY.
  
  
*         IF CDCS IS WAITING FOR A PERMANENT FILE,
*         TEST IF THE FILE IS NOW AVAILABLE.
  
 TESTF    BSS    0
          SA1    DB$ROAF
          ZR   X1,TESTA      EXIT IF NOT WAITING FOR A FILE.
  
          SA1    PFDELAY     COUNT DOWN THE DELAY COUNT BEFORE ATTACHING
          MX2    -1 
          IX7    X1+X2
          SA7    A1 
          SX6    B0 
          PL   X7,TESTA      DONT TRY THE ATTACH UNTIL END OF DELAY 
  
          SX6    PFDELAYC    RE-ESTABLISH THE DELAY COUNT 
          SA6    A1 
  
.BE.      IFC    EQ,*"OS.NAME"*SCOPE *
          ATTACH FDB,RC,RT,NR 
          SA1    FDB
          MX0    -9 
          LX1    -9 
          BX2    -X0*X1 
          NZ   X2,NOATCH
  
*         THE FILE IS NOW AVAILABLE.
  
          EQ   YES
  
 NOATCH   SX6    X2-36B 
          ZR   X6,TESTA      IF NO APF SPACE
          SX6    X2-37B 
          EQ   TESTA         ZERO (N0) IF FILE ATTACHED ELSEWHERE 
 TESTA    SPACE  4,10 
          ENTRY  DB$ROAF
 DB$ROAF  BSSZ   16          ROLL OUT ATTACH FLAG (1 WORD)
 FDB      EQU    DB$ROAF+5   FOLLOWED BY NOS/BE FDB.
.BE.      ENDIF 
  
.NOS.     IFC    EQ,*"OS.NAME"*KRONOS*
          ATTACH PFFET
          SA1    PFFET
          MX0    -8 
          LX1    -10
          BX6    X0*X1
          LX6    10 
          BX2    -X0*X1 
          SA6    A1 
          NZ   X2,NOATCH
  
          EQ   YES
  
 NOATCH   SX6    X2-1        FILE BUSY
          ZR   X6,TESTA 
          SX6    X2-14B      UNMOUNTED PACK 
          ZR   X6,TESTA 
          SX6    X2-16B      PF UTILITY ACTIVE
          ZR   X6,TESTA 
          SX6    X2-104B     INTERLOCK NOT AVAILABLE
          ZR   X6,TESTA 
          SX6    X2-107B     FNT FULL 
          ZR   X6,TESTA 
          SX6    X2-111B     PFM EXCESS ACTIVITY
          EQ   TESTA
 TESTA    SPACE  4,10 
          ENTRY  DB$ROAF
 DB$ROAF  BSSZ   1           ROLL OUT ATTACH FLAG 
 PFFET    BSSZ   13          FET FOR PF ATTACH
  
.NOS.     ENDIF 
  
 PFDELAYC EQU    1600        DELAY - ESTIMATED AT 40 SECONDS
                             ALSO SEE DFATCHDELAY IN CDGDFDCLS (CDCSCTX)
 PFDELAY  CON    1600 
  
  
          ENTRY  DB$RLLA
          ENTRY  DB$RLLE
* 
*         THIS IS THE AREA WHERE THE LIST OF SWAPPED OUT ACTIVE JOBS
*         IS HELD.  IF THERE ARE MORE JOBS THAN CAN BE HELD HERE, 
*         DB$ROLL IS NOT CALLED.
* 
 DB$RLLA  CON    *           POINTS TO THE LAST ID ENTERED IN THE LIST
          BSSZ   5
 DB$RLLE  BSSZ   1           THE LAST WORD IN THE AREA
  
 INDEX    BSSZ   1           TEMPORARY POINTER TO THE AREA
  
 FUNCTION BSSZ   1           THE FUNCTION WORD FOR THE SF.STAT CALL 
 RUID     BSSZ   1           THE RUN UNIT ID FOR THE SF.STAT CALL 
          END 
