*COMDECK DB$OSUP
 DB$OSUP  SPACE  4,10 
*#
* *   DB$OSUP - OVCAP SUPERVISOR (COMDECK)       PAGE  1
* *   C. F. RICHARDS                             DATE  10/15/80 
* 
* DC  PURPOSE 
* 
*     DB$OSUP IS A COMDECK - IT SERVES AS A CONTAINER TO HOLD THE PROCS 
*     THAT TOGETHER MAKE UP THE INTERFACE FOR OVCAP USAGE. ALL LOADING
* 
*     AND UNLOADING OF OVCAPS IS PERFORMED BY THE PROCS CONTAINED IN
*     THIS COMDECK. 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE. 
* 
* DC  EXIT CONDITIONS 
* 
*     NONE. 
* 
* DC  CONTAINED ROUTINES
* 
          ENTRY  DB$ODLC     DECREMENT OVCAP LOCK-COUNTS FOR CURRENT RCB
          ENTRY  DB$OIUL     IMMEDIATELY UNLOCK AND UNLOAD AN OVCAP 
          ENTRY  DB$OLLO     LOAD AND LOCK AN OVCAP 
*                DB$OLOC     SUPERVISOR TO LOAD OVCAP FOR CALLED EP 
          ENTRY  DB$OUAC     UNLOAD ALL UNLOCKED OVCAPS 
          ENTRY  DB$OUEC     UNLOAD ALL EXPIRED, UNLOCKED OVCAPS
*                DB$OUOC     UNLOAD UNLOCKED OVCAPS 
*                ERRABT      ISSUE DAYFILE MESSAGE AND ABORT FOR FDL ERR
*                LOADOVC     LOAD OVCAP 
* 
*     ALSO, EVERY OVCAP ENTRY POINT NAME - E.G., DB$XXXX - WILL HAVE
*     AN ENTRY POINT ROUTINE WITH A NAME SUCH AS DB.XXXX. 
* 
* DC  CONTAINED ITEMS 
* 
          ENTRY  DB$ORCB     POINTER TO THE RCB BASED ARRAY POINTER 
* 
* DC  DESCRIPTION 
* 
* D   LOADING OVCAPS AND LINKAGE TO OVCAP ENTRY POINTS
* 
*     FOR EACH OVCAP ENTRY POINT DEFINED, A SMALL ROUTINE IS CREATED IN 
*     THIS MODULE. WHEN CALLED, THIS SMALL ROUTINE PASSES CONTROL TO
*     DB$OLOC, IDENTIFYING BOTH THE CALLED ENTRY POINT AND THE OVCAP
*     IN WHICH IT IS CONTAINED. DB$OLOC WILL TRANSFER CONTROL TO THE
*     OVCAP ENTRY POINT AFTER FIRST LOADING THE OVCAP, IF NECESSARY.
*     A PARAMETER LIST FOR THE OVCAP ROUTINE WILL BE PRESERVED
*     ACROSS THE CALL TO DB$OLOC. 
* 
*     THE RETURN LINKAGE FOR THE OVCAP ENTRY POINT IS GIVEN THE 
*     RETURN LINKAGE FROM ITS ASSOCIATED SMALL ROUTINE IN DB$OSUP.
*     THE OVCAP ENTRY POINT THEREFORE LOOKS AS IF IT WERE CALLED
*     DIRECTLY, AND NOT THROUGH THE SMALL ROUTINE AND DB$OLOC.
* 
*     THE OBJECTIVE OF THIS SCHEME IS TO FREE BOTH THE CALLER AND THE 
*     CALLEE FROM THE NEED TO KNOW ABOUT OVCAPS.
* 
* D   LOCKING OF OVCAPS - 
* 
*     THERE ARE TWO TYPES OF LOCKS THAT PREVENT AN OVCAP FROM BEING 
*     UNLOADED: INITIALIZATION LOCKS AND RCB LOCKS. AN OVCAP WILL 
*     NEVER HAVE BOTH KINDS OF LOCKS ACTIVE. FOR EFFICIENCY, RCB LOCK 
*     CHECKING AND SETTING IS BYPASSED FOR AN OVCAP WITH AN 
*     INITIALIZATION LOCK, AS WELL AS FOR AN ENTRY POINT DECLARED TO BE 
*     NON-INTERRUPTIBLE BY ITS INCAP MACRO OCCURRENCE.
* 
*     AN INITIALIZATION LOCK IS CREATED BY A CALL TO DB$OLLO, WHICH 
*     WILL LOAD A SPECIFIED OVCAP INTO MEMORY AND SET THE LOCK BIT
*     FOR THAT OVCAP. THIS MUST BE PERFORMED DURING CDCS INITIALIZATION.
*     THE LOCK WILL LAST FOR THE ENTIRE EXECUTION OF CDCS.
* 
*     AN RCB LOCK IS CREATED WHEN A CALL IS MADE TO AN INTERRUPTIBLE
*     OVCAP ENTRY POINT. THE LOCK IS OWNED BY THE CURRENT RCB, IS SET 
*     ONLY ONCE FOR THAT RCB, AND REMAINS IN EFFECT UNTIL THE 
*     TERMINATION OF THAT RCB. A LOCK-COUNT IS MAINTAINED FOR EACH
*     OVCAP - THE COUNT IS INCREMENTED BY DB$OLOC WHEN AN RCB LOCK ON 
*     THAT OVCAP IS SET FOR AN RCB, AND THE COUNT IS DECREMENTED BY 
*     DB$ODLC WHICH IS CALLED UPON TERMINATION OF AN RCB.  AN RCB CAN 
*     HOLD A LOCK ON MORE THAN ONE OVCAP - THE LOCKS ARE RECORDED AS
*     BITS IN ITEM RCOVCAPS IN THE RCB - AND AN OVCAP CAN BE LOCKED BY
*     MORE THAN ONE RCB.
* 
* D   UNLOADING OF OVCAPS - 
* 
*     THE REMOVAL OF AN OVCAP WHICH HAS BEEN LOADED IS SUBJECT TO SOME
*     RESTRICTIONS THAT AVOID REMOVAL WHILE SOME RCB EXISTS THAT MAY
*     EVENTUALLY RETURN TO THE OVCAP. 
* 
*     AN OVCAP WITH AN INITIALIZATION LOCK WILL NEVER BE UNLOADED. THIS 
*     LOCK IS PERMANENT WITH RESPECT TO CDCS EXECUTION. 
* 
*     AN OVCAP WITH A NON-ZERO LOCK-COUNT WILL NOT BE UNLOADED. THE 
*     LOCK-COUNT INDICATES THE NUMBER OF RCBS WHICH MAY STILL TRY TO
*     RETURN TO THE CODE IN THAT OVCAP. 
* 
*     THE REMAINING OVCAPS ARE THOSE WHICH CAN BE UNLOADED, AND THEY
*     FALL INTO TWO GROUPS: EXPIRED OVCAPS AND NON-EXPIRED OVCAPS.
*     ASSOCIATED WITH EACH OVCAP IS A MAXIMUM AGE WHICH IS A GRACE
*     PERIOD (IN TIMESTAMP UNITS) THAT POSTPONES THE EXPIRATION OF
*     THE OVCAP. AN OVCAP IS CONSIDERED TO BE EXPIRED IF THE ROUTINES 
*     OF THAT OVCAP HAVE NOT BEEN USED WITHIN THE LAST <MAXIMUM-AGE>
*     TIMESTAMP UNITS.
* 
*     DB$OUEC GETS CALLED PERIODICALLY TO UNLOAD EXPIRED, UNLOCKED
*     OVCAPS. DB$OUAC GETS CALLED IN AN EMERGENCY - E.G., CMM OVERFLOW
*     HANDLING - TO UNLOAD ALL UNLOCKED OVCAPS. 
* 
* D   INTERNAL TABLES - 
* 
*     INTERNAL TABLES ARE GENERATED BY THREE MACROS: OVCAP, INCAP,
*     AND PASSLOC. THESE MUST OCCUR IN THE FOLLOWING ORDER. AN OVCAP
*     MACRO DECLARES THE NAME AND MAXIMUM AGE OF AN OVCAP. AN INCAP 
*     MACRO DECLARES AN ENTRY POINT TO BE IN A PARTICULAR OVCAP. THE
*     PASSLOC MACRO TRIGGERS THE INSERTION OF AN ENTRY POINT LIST 
*     (LOADER ENTRY TABLE) WHICH WAS BUILT BY THE INCAP MACRO 
*     OCCURRENCES.
* 
*     THE ENTRY POINT LIST IS GIVEN TO FDL SO WE CAN FIND THE LOCATION
*     OF A LOADED ENTRY POINT. THERE IS ONE ENTRY IN THIS LIST FOR
*     EACH INCAP MACRO OCCURRENCE.
* 
*     THE OVCAP LIST HOLDS THE NAME OF EACH OVCAP, AND OTHER BITS AND 
*     FIELDS CONCERNED WITH WHETHER OR NOT IT IS LOADED OR CAN BE 
*     UNLOADED. THERE IS ONE ENTRY IN THIS LIST FOR EACH OVCAP
*     MACRO OCCURRENCE. 
* 
*     THE SMALL DUMMY ROUTINE FOR EACH OVCAP ENTRY POINT IS GENERATED 
*     BY THE INCAP MACRO, AND FORMS A LINK BETWEEN THE ENTRY POINT
*     LIST AND THE OVCAP LIST. EACH DUMMY ROUTINE HAS AN ENTRY POINT
*     WHOSE NAME IS RELATED TO THE OVCAP ENTRY POINT NAME (DB$XXXX
*     BECOMES DB.XXXX). EACH ROUTINE IDENTIFIES THE ASSOCIATED ENTRY
*     POINT LIST ENTRY, THE ORDINAL OF THE OVCAP CONTAINING THE ENTRY 
*     POINT, AND WHETHER THIS ENTRY POINT ROUTINE IS INTERRUPTIBLE. 
*     EACH ROUTINE CONTAINS A CALL TO THE OVCAP SUPERVISOR, DB$OLOC,
*     WHICH WILL LOAD THE OVCAP, IF NECESSARY, AND THEN TRANSFER
*     CONTROL TO THE OVCAP ENTRY POINT WHOSE ADDRESS FDL PLACED 
*     IN THE ENTRY POINT LIST.
*#
  
 DB$ODLC  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$ODLC - DECREMENT OVCAP LOCK COUNT FOR RCB
* *   C. F. RICHARDS                             DATE  10/16/80 
* 
* DC  PURPOSE 
* 
*     DB$ODLC DECREMENTS THE LOCK-COUNT OF EACH OVCAP OVER WHICH THE
*     CURRENT (TERMINATING) RCB HOLDS A LOCK. 
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     NONE. 
* 
* D   ASSUMPTIONS 
* 
*     BASED ARRAY RCB POINTS TO THE CORRECT RCB 
* 
* DC  EXIT CONDITIONS 
* 
*     RCOVCAPS FIELD OF THE RCB CLEARED TO ZERO.
*     LOCK-COUNT DECREMENTED FOR EACH OVCAP INDICATED BY RCOVCAPS.
*     TIMESTAMP INSERTED IN OVCAP ENTRY OF EACH OVCAP FROM
*     WHICH AN RCB LOCK WAS REMOVED (IN CASE IT WAS LAST LOCK). 
* 
* DC  CALLING ROUTINES
* 
*         DB$CARS -- SYSTEM RECOVERY CONTROLLER.
*     DB$WRP - WRAP-UP PROCESSING FOR AN RCB
* 
* DC  CALLED ROUTINES 
* 
*     NONE. 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     RCOVCAPS FIELD OF RCB IS CLEARED
* 
* DC  DESCRIPTION 
* 
*     OBTAIN A COPY OF ITEM RCOVCAPS FROM RCB.
*     IF NO OVCAPS LOCKED BY THIS RCB, RETURN.
*     CLEAR COPY OF RCOVCAPS IN THE RCB (LOCAL COPY INTACT).
*     FOR EACH OVCAP LOCKED BY THIS RCB 
*         DECREMENT LOCK-COUNT OF THE OVCAP.
*         INSERT TIMESTAMP OF TIME OF LOCK REMOVAL. 
*     RETURN. 
*#
  
 DB$ODLC  JP     *+1S17D     ENTRY/EXIT 
          SA1    DB$ORCB     (X1) = ADDRESS OF RCB POINTER WORD 
          SA2    X1          (X2) = LOCATION OF CURRENT RCB 
          MX6    -DFRCOVLG
          SA3    X2+DFRCOVOS (X3) = WORD CONTAINING ITEM RCOVCAPS 
          LX6    -DFRCOVLG-DFRCOVFB       (X6) = RCOVCAPS MASK
          BX0    -X6*X3 
          LX0    DFRCOVFB+DFRCOVLG (X0) = RCOVCAPS, RIGHT JUSTIFIED 
          ZR     X0,DB$ODLC  IF NO OVCAPS LOCKED BY THIS RCB
          BX6    X6*X3       (X6) = RCB WORD WITH RCOVCAPS CLEARED
          SA6    A3          REPLACE RCOVCAPS WORD IN THE RCB 
          SB2    59-EXPLG    (B2) = ORDINAL OF NORMALIZATION BIT
          MX2    -18
          SA3    =XDB$TMST   (X3) = CURRENT CDCS TIMESTAMP
          LX3    36D
          LX2    36D         (X2) = OVCAP ENTRY TIMESTAMP MASK (NEG)
          BX3    -X2*X3      (X3) = 6/0,18/TIMESTAMP,36/0 
          MX7    -18
          BX2    X7*X2       (X2) = MASK FOR TIMESTAMP AND LOCK-COUNT 
          MX5    EXPLG+1     (X5) = MASK FOR EXPONENT AND NORMALIZED BIT
 ODLC2    PX0    X0          PACKED FORMAT FOR NORMALIZATION
          NX0    X0,B3       NORMALIZE AN OVCAP LOCK BIT
          SB2    B2-B3       (B2) = ORDINAL OF NORMALIZED OVCAP LOCK BIT
          SB3    B2+B2       (B3) = OFFSET WITHIN OVCAP LIST
          SA1    OVCAP00+1+B3      (X1) = WORD +1 OF LOCKED OVCAP ENTRY 
          SX6    X1-1        (X6) = DECREMENTED LOCK COUNT
          BX1    X2*X1       CLEAR LOCK-COUNT AND TIMESTAMP 
          BX6    X6+X1       INSERT NEW LOCK-COUNT
          BX6    X6+X3       INSERT NEW TIMESTAMP 
          SA6    A1          REPLACE WORD +1 OF OVCAP ENTRY 
          BX0    -X5*X0      CLEAR OVCAP LOCK BIT JUST NORMALIZED 
          NZ     X0,ODLC2    IF MORE OVCAPS LOCK BY THIS RCB
          EQ     DB$ODLC     RETURN 
 DB$OIUL  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$OIUL - IMMEDIATELY UNLOAD AN OVCAP 
* *   R. L. MCALLESTER                           DATE  02/21/83 
* 
* DC  PURPOSE 
* 
*     UNLOAD THE OVCAP IMMEDIATELY UNLESS IT IS DURATION LOADED 
*     OR CURRENTLY IN USE BY ANOTHER USER.
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     ENTRY POINT NAME - NAME OF AN ENTRY POINT IN THE OVCAP THAT IS
*                TO BE UNLOADED.
* 
* D   ASSUMPTIONS 
* 
*     THE ENTRY POINT NAME IS A VALID OVCAP ENTRY POINT.
* 
* DC  EXIT CONDITIONS 
* 
*     THIS USERS LOCK IS RELEASED.
*     IF IT WAS THE ONLY LOCK, THE OVCAP IS UNLOADED. 
* 
* DC  CALLING ROUTINES
* 
*     CONTROLLING PROCEDURES THAT HAVE CALLED AN INFREQUENTLY USED
*     PROCEDURE THAT IS RESIDENT IN AN OVCAP. 
* 
* DC  CALLED ROUTINES 
* 
*     DB$OUOC                UNLOAD UNLOCKED OVCAPS 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     THE LOCK BIT FOR THIS OVCAP IS CLEARED IN THE  RCOVCAPS FIELD 
*     OF THE USERS RCB. 
* 
* DC  DESCRIPTION 
* 
*     LOCATE THE OVCAP LIST ENTRY THAT CORRESPONDS TO THE ENTRY POINT.
*     LOCATE THE USERS RCB.  IF THE APPROPRIATE OVCAP LOCK BIT IS 
*     SET IN THE RCB, CLEAR IT AND REDUCE THE RCB LOCK COUNT. 
*     CALL DB$OUOC TO UNLOAD THE OVCAP. 
*#
  
 DB$OIUL  JP     *+1S17 
          SB1    1
*                            (X1) = ADDRESS OF ENTRY POINT
          SA5    X1+B1       (X5) = +1 WORD OF ENTRY POINT DUMMY ROUTINE
          MX0    -6 
          LX5    -18
          SA2    DB$ORCB     (X2) = LOCATION OF P<RCB> IN CDCSCOMMN 
          BX0    -X0*X5      (X0) = OVCAP ORDINAL 
          LX3    X0,B1
          SB3    OVCAP00+X3  (B3) = OVCAP LIST ENTRY ADDRESS
          MX6    -1 
          SA2    X2          (X2) = FWA OF CURRENT RCB
          SB4    X0          (B4) = OVCAP ORDINAL AS SHIFT PARAMETER
          SA2    X2+DFRCOVOS (X2) = RCB WORD CONTAINING OVCAP LOCK BITS 
          LX6    B4          (X6) = BIT MASK FOR THIS OVCAP LOCK BIT
          BX4    -X6*X2 
          ZR     X4,OIUL4    IF BIT IS NOT SET, DONT REDUCE THE COUNT 
  
          BX6    X6*X2       CLEAR THE LOCK BIT 
          SA6    A2          REPLACE OVCAP LOCK WORD
          SA3    B3+B1       (X3) = +1 WORD OF OVCAP ENTRY
          MX6    -1 
          IX6    X3+X6       DECREMENT OVCAP LOCK COUNT 
          SA6    A3 
  
 OIUL4    SX5    -1 
          RJ     DB$OUOC     UNLOAD THE OVCAP, IF NOT STILL LOCKED
          EQ     DB$OIUL
 DB$OLLO  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$OLLO - LOAD AND LOCK AN OVCAP
* *   C. F. RICHARDS                             DATE  10/16/80 
* 
* DC  PURPOSE 
* 
*     DB$OLLO ALLOWS CDCS INITIALIZATION TO LOAD AN OVCAP AND 
*     PERMANENTLY LOCK IT.
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     ENTRY POINT NAME - NAME OF THE ANY OF THE ENTRY POINTS IN 
*                        OVCAP TO LOAD AND LOCK 
* 
* D   ASSUMPTIONS 
* 
*     THE ENTRY POINT NAME IS A VALID OVCAP ENTRY POINT 
* 
* DC  EXIT CONDITIONS 
* 
*     THE OVCAP IS LOADED AND IS LOCKED.
* 
* DC  CALLING ROUTINES
* 
*     NONE. 
* 
* DC  NON-LOCAL VARIABLES MODIFIED. 
* 
*     NONE. 
* 
* DC  DESCRIPTION 
* 
*     LOCATE OVCAP LIST ENTRY FOR THAT ORDINAL. 
*     IF OVCAP NOT LOADED, CALL LOADOVC TO LOAD IT. 
*     SET LOCK BIT IN OVCAP LIST ENTRY. 
*     RETURN. 
*#
  
 DB$OLLO  JP     *+1S17D     ENTRY/EXIT 
          SA1    X1+1 
          MX0    -6 
          LX1    -18
          BX1    -X0*X1 
          LX1    1
          SB2    OVCAP00+X1  (B2) = FWA OF OVCAP LIST ENTRY 
          SA2    B2          (X2) = 42/OVCAP NAME,1/LOADED,17/UNUSED
          SX3    X2 
          MI     X3,OLLO2    IF OVCAP ALREADY LOADED
          RJ     LOADOVC     LOAD THE OVCAP 
          SA2    B2 
          MX6    1
          LX6    18 
          BX6    X6+X2       SET LOADED BIT 
          SA6    B2          REPLACE OVCAP LIST ENTRY 
 OLLO2    SA4    B2+1        (X4) = SECOND WORD OF OVCAP LIST ENTRY 
          MX7    1
          BX7    X7+X4       SET INITIALIZATION LOCK BIT
          SA7    A4          REPLACE OVCAP LIST ENTRY 
          EQ     DB$OLLO
 DB$OLOC  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$OLOC - LOAD OVERLAY CAPSULE (SUPERVISOR) 
* *   C. F. RICHARDS                             DATE  10/20/80 
* 
* DC  PURPOSE 
* 
*     DB$OLOC PROVIDES THE LINK BETWEEN AN OVCAP ENTRY POINT AND ITS
*     CALLER. EVERY CALL TO AN OVCAP ENTRY POINT PASSES THROUGH THIS
*     ROUTINE. THIS ROUTINE IS RESPONSIBLE FOR THE LOADING OF THE 
*     OVCAP, THE INCREMENTING OF THE LOCK-COUNT FOR THAT OVCAP, AND 
*     THE SETTING OF THE APPROPRIATE OVCAP BIT IN THE RCB (EACH OF
*     THESE TASKS IS ONLY PERFORMED IF NECESSARY).
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     NONE. 
* 
* D   ASSUMPTIONS 
* 
*     THIS ROUTINE WAS CALLED BY ONE OF THE ENTRY POINT DUMMY ROUTINES. 
*     THE RETURN LINKAGE TO THE ENTRY POINT CALLER IS IN THE WORD 
*     PRECEDING THE CALL TO THIS ROUTINE. 
*     THE WORD CONTAINING THE CALL TO THIS ROUTINE IS OF THE FORMAT:  
* 
*         VFD    30/RJ DB$OLOC,1/NI,5/0,6/CAPORD,18/EPADDR
* 
*         NI = 1 IF THIS ENTRY POINT IS NOT INTERRUPTIBLE, ELSE 0.
*         CAPORD = ORDINAL OF OVCAP IN WHICH CALLED ENTRY POINT EXISTS. 
*         EPADDR = ADDRESS OF THE *ENTRY* TABLE ENTRY WHICH CONTAINS
*                  THE ADDRESS OF THE CALLED ENTRY POINT. 
* 
*     BASED ARRAY RCB POINTS TO THE RCB RESPONSIBLE FOR THIS CALL TO
*     THE OVCAP (ONLY REQUIRED FOR INTERRUPTIBLE OVCAP ROUTINES WHICH 
*     WERE NOT LOADED AND LOCKED AT INITIALIZATION TIME.
* 
* DC  EXIT CONDITIONS 
* 
*     THE REQUIRED OVCAP IS IN CENTRAL MEMORY, AND THE OVCAP ENTRY
*     LOADED BIT IS SET.
* 
*     FOR AN INTERRUPTIBLE ROUTINE IN AN OVCAP ON WHICH THERE IS NO 
*     INITIALIZATION LOCK, THE LOCK-COUNT FOR THE OVCAP IS INCREMENTED
*     AND THE BIT CORRESPONDING TO THIS OVCAP IS SET IN ITEM RCOVCAPS 
*     IN THE CURRENT RCB (THE LOCK-COUNT FOR EACH OVCAP IS INCREMENTED
*     AT MOST ONCE BY EACH RCB).
* 
*     THE RETURN LINKAGE FROM THE DUMMY ROUTINE ENTRY POINT IS PLACED 
*     IN THE OVCAP ENTRY POINT AS ITS RETURN LINK.
* 
*     CONTROL IS TRANSFERRED TO THE OVCAP ENTRY POINT (+1). 
* 
* DC  CALLING ROUTINES
* 
*     EACH DUMMY ROUTINE (CREATED BY AN INCAP MACRO OCCURRENCE).
* 
* DC  CALLED ROUTINES 
* 
*     LOADOVC - LOAD AN OVCAP 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     ITEM RCOVCAPS IN THE CURRENT RCB. 
* 
* DC  DESCRIPTION 
* 
*     LOCATE THE OVCAP ENTRY INDICATED BY THE OVCAP ORDINAL.
*     IF THERE IS NO INITIALIZATION LOCK ON THIS OVCAP THEN 
*         IF THIS OVCAP IS NOT LOADED THEN
*             CALL LOADOVC TO LOAD THE OVCAP. 
*             SET THE LOADED FLAG IN THE OVCAP ENTRY. 
*         IF THIS ENTRY POINT IS INTERRUPTIBLE THEN 
*             LOCATE THE CURRENT RCB. 
*             IF THE RCOVCAPS BIT FOR THIS OVCAP IS NOT SET THEN
*                 INCREMENT THE OVCAP ENTRY LOCK-COUNT. 
*                 SET THE RCOVCAPS BIT FOR THIS OVCAP.
*         IF THIS ENTRY POINT IS NOT INTERRUPTIBLE THEN 
*             PUT TIMESTAMP IN OVCAP ENTRY (NON-INT OVCAP STARTS AGING).
*     LOCATE ENTRY POINT ADDRESS. 
*     GET SUBROUTINE RETURN LINKAGE FROM DUMMY ROUTINE ENTRY POINT. 
*     PUT RETURN LINKAGE IN OVCAP ENTRY POINT (CODE MODIFICATION).
*     VOID INSTRUCTION STACK. 
*     TRANSFER CONTROL TO OVCAP ENTRY POINT (+1). 
*#
  
 DB$OLOC  JP     *+1S17      ENTRY/EXIT 
          SB1    1
          SA2    DB$OLOC
          LX2    30D
          SA5    X2-1        (X5) = +1 WORD OF DUMMY ROUTINE
          SB3    X5          (B3) = ADDRESS OF ENTRY POINT LIST ENTRY 
          SA0    A5          (A0) = ADDRESS OF +1 WORD OF DUMMY ROUTINE 
          MX0    -6 
          LX5    0-18        POSITION BIT 18 IN BIT 0 
          BX0    -X0*X5      (X0) = OVCAP ORDINAL 
          LX3    X0,B1       (X3) = OFFSET INTO OVCAP LIST
          SB2    OVCAP00+X3  (B2) = ADDRESS OF +0 WORD OF OVCAP ENTRY 
          SA2    B2+B1       (X2) = +1 WORD OF OVCAP ENTRY
          MI     X2,OLOC4    IF THERE IS AN INITIALIZATION LOCK 
          SA2    B2          (X2) = +0 WORD OF OVCAP ENTRY
          SX3    X2 
          MI     X3,OLOC2    IF OVCAP ALREADY LOADED
          RJ     LOADOVC     LOAD THE OVCAP 
          SA2    B2          (X2) = +0 WORD OF OVCAP ENTRY
          MX6    1
          LX6    18 
          BX6    X2+X6       MERGE IN LOADED FLAG 
          SA6    A2          REPLACE +0 WORD OF OVCAP ENTRY 
 OLOC2    LX5    59+18-29    POSITION BIT 29 IN BIT 59 (SIGN BIT) 
          SA3    B2+B1       (X3) = +1 WORD OF OVCAP ENTRY
          MI     X5,OLOC3    IF ENTRY POINT WAS DEFINED NON-INTERRUPTIBL
          SA2    DB$ORCB
          MX6    -1 
          SA2    X2          (X2) = FWA OF CURRENT RCB
          SB4    X0+60-DFRCOVFB-DFRCOVLG    SHIFT COUNT TO ALIGN MASK 
          SA2    X2+DFRCOVOS (X2) = RCB WORD CONTAINING RCOVCAPS
          LX6    B4          POSITION ONE-BIT MASK TO PROPER OVCAP BIT
          BX4    -X6*X2 
          NZ     X4,OLOC4    IF RCOVCAPS BIT ALREADY SET
          BX6    -X6+X2      SET RCOVCAPS BIT FOR THIS OVCAP
          SA6    A2          REPLACE RCB WORD CONTAINING RCOVCAPS 
          MX6    -1 
          IX6    X3-X6       INCREMENT LOCK-COUNT FOR THIS OVCAP
          SA6    A3          REPLACE +1 WORD OF OVCAP ENTRY 
          EQ     OLOC4
  
 OLOC3    SA2    DB$TMST     (X2) = CURRENT TIMESTAMP 
          LX2    36D         POSITION TIMESTAMP 
          MX6    -18
          LX6    36D         POSITION MASK FOR TIMESTAMP
          BX3    X6*X3       CLEAR OLD TIMESTAMP
          BX2    -X6*X2 
          BX6    X2+X3       MERGE CURRENT TIMESTAMP INTO OVCAP ENTRY 
          SA6    A3          REPLACE +1 WORD OF OVCAP ENTRY 
 OLOC4    SA2    B3          (X2) = ENTRY POINT LIST ENTRY
          IF     DEF,BTF,1
          SA2    X2          FOR CDCSBTF THERE IS A POINTER AT DB=XXXX
          SB7    X2+B1       (B7) = OVCAP ENTRY POINT ADDRESS (+1)
          SA5    A0-B1       (X5) = DUMMY ROUTINE RETURN LINKAGE
          BX6    X5 
          SA6    B7-B1       PLACE RETURN LINKAGE IN OVCAP ENTRY POINT
          RJ     VOIDSTK     VOID INSTRUCTION STACK (CAUSED BY AN RJ) 
 VOIDSTK  BSS    1
          JP     B7          TRANSFER CONTROL TO OVCAP ENTRY POINT (+1) 
 DB$OUAC  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$OUAC - UNLOAD ALL UNLOCKED OVCAPS
* *   C. F. RICHARDS                             DATE  10/21/80 
* 
* DC  PURPOSE 
* 
*     UNLOAD ALL LOADED OVCAPS WHICH ARE NOT HELD BY AN RCB LOCK OR AN
*     INITIALIZATION LOCK.
* 
* DC  ENTRY CONDITIONS
* 
*     NONE. 
* 
* DC  EXIT CONDITIONS 
* 
*     NONE. 
* 
* DC  CALLING ROUTINES
* 
*         DB$CARS -- SYSTEM RECOVERY CONTROLLER.
*     DB$CMOH - CMM OVERFLOW HANDLER
* 
* DC  CALLED ROUTINES 
* 
*     DB$OUOC - UNLOAD OVCAPS 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE. 
* 
* DC  DESCRIPTION 
* 
*     CALL DB$OUOC TO UNLOAD ALL OVCAPS.
*#
  
 DB$OUAC  JP     *+1S17      ENTRY/EXIT 
          SB3    OVCAP00     FIRST ENTRY IN OVCAP LIST
          SX5    1           SELECT ALL OVCAPS
          RJ     DB$OUOC     UNLOAD OVCAPS
          EQ     DB$OUAC
 DB$OUEC  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$OUEC - UNLOAD EXPIRED UNLOCKED OVCAPS
* *   C. F. RICHARDS                             DATE  10/21/80 
* 
* DC  PURPOSE 
* 
*     UNLOAD EXPIRED LOADED OVCAPS WHICH ARE NOT HELD BY AN RCB LOCK OR 
*     AN INITIALIZATION LOCK. 
* 
* DC  ENTRY CONDITIONS
* 
*     NONE. 
* 
* DC  EXIT CONDITIONS 
* 
*     NONE. 
* 
* DC  CALLING ROUTINES
* 
*     DB$CMOH - CMM OVERFLOW HANDLER
* 
* DC  CALLED ROUTINES 
* 
*     DB$OUOC - UNLOAD OVCAPS 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE. 
* 
* DC  DESCRIPTION 
* 
*     CALL DB$OUOC TO UNLOAD EXPIRED OVCAPS.
*#
 DB$OUEC  JP     *+1S17      ENTRY/EXIT 
          SB3    OVCAP00     FIRST ENTRY IN OVCAP LIST
          SX5    0           SELECT EXPIRED OVCAPS
          RJ     DB$OUOC     UNLOAD OVCAPS
          EQ     DB$OUEC
 DB$OUOC  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   DB$OUOC - UNLOAD OVCAPS 
* *   C. F. RICHARDS                             DATE  10/21/80 
* 
* DC  PURPOSE 
* 
*     DB$OUOC PERFORMS THE UNLOAD OF OVCAPS WHICH ARE NOT LOCKED. AN
*     INPUT PARAMETER SPECIFIES WHETHER OR NOT TO UNLOAD OVCAPS WHICH 
*     HAVE NOT YET ATTAINED THEIR MAXIMUM AGE (I.E. HAVE NOT EXPIRED).
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     (B3) = ADDRESS OF FIRST (OR ONLY) OVCAP LIST ENTRY TO BE UNLOADED 
* 
*     (X5) = 0 FOR UNLOADING EXPIRED OVCAPS 
*          = 1 FOR UNLOADING ALL OVCAPS 
*          = -1 FOR UNLOADING ONLY ONE OVCAP
* 
* D   ASSUMPTIONS 
* 
*     OVCAP LIST TERMINATED BY A ZERO WORD. 
* 
* DC  EXIT CONDITIONS 
* 
*     ALL LOADED, UNLOCKED OVCAPS WHICH HAVE EXPIRED ARE UNLOADED.
*     IF REQUESTED WITH THE ENTRY PARAMETER, ALL LOADED, UNLOCKED 
*     OVCAPS WHICH HAVE NOT EXPIRED ARE ALSO UNLOADED.
* 
* DC  CALLING ROUTINES
* 
*     DB$OUAC - UNLOAD ALL OVCAPS 
*     DB$OUEC - UNLOAD EXPIRED OVCAPS 
* 
* DC  CALLED ROUTINES 
* 
*     FDL.UOC - UNLOAD OVCAP
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE. 
* 
* DC  DESCRIPTION 
* 
*     FOR EACH OVCAP IN THE OVCAP LIST
*         IF THERE IS NO INITIALIZATION LOCK ON THIS OVCAP
*           AND THE LOCK-COUNT IS ZERO FOR THIS OVCAP 
*           AND THE OVCAP IS LOADED THEN
*               IF THE OVCAP HAS EXPIRED
*                 OR ALL OVCAPS ARE BEING UNLOADED THEN 
*                     CALL FDL.UOC TO UNLOAD THE OVCAP. 
*                     CLEAR LOADED BIT IN OVCAP ENTRY.
*     RETURN TO CALLER. 
*#
  
 DB$OUOC  JP     *+1S17D     ENTRY/EXIT 
*                            (B3) = FWA OF FIRST OVCAP LIST ENTRY 
 OUOC2    SA3    B3          (X3) = +0 WORD OF OVCAP ENTRY
          ZR     X3,DB$OUOC  IF NO MORE OVCAPS IN LIST
          SX4    X3          SIGN EXTEND THE LOADED BIT 
          PL     X4,OUOC4    IF THIS OVCAP NOT LOADED 
          SA2    B3+1        (X2) = +1 WORD OF OVCAP ENTRY
          MI     X2,OUOC4    IF THERE IS AN INITIALIZATION LOCK 
          SX4    X2          (X4) = LOCK-COUNT
          NZ     X4,OUOC4    IF THERE ARE SOME RCB LOCKS
          NZ     X5,OUOC3    IF UNLOADING ALL OVCAPS
          SA1    =XDB$TMST   (X1) = CURRENT TIMESTAMP 
          MX7    -18
          LX2    0-36D       POSITION BIT 36 IN BIT 0 
          BX6    -X7*X2      (X6) = TIMESTAMP WHEN LAST LOCK FREED
          SA4    =1S18
          IX1    X1+X4       BIAS CURRENT TIME TO HANDLE WRAPAROUND 
          IX4    X1-X6       (X4) = TIME SINCE LAST LOCK FREED
          BX4    -X7*X4      ELIMINATE WRAPAROUND BIAS
          LX2    0+36D-18    POSITION BIT 18 IN BIT 0 
          BX2    -X7*X2      (X2) = MAXIMUM AGE FOR THIS OVCAP
          IX6    X2-X4       (X6) = TIMESTAMP UNITS UNTIL UNLOAD TIME 
          PL     X6,OUOC4    IF CAPSULE NOT YET EXPIRED 
 OUOC3    MX2    42D
          BX2    X2*X3       (X2) = OVCAP NAME
          SX4    PASSLIST    (X4) = FWA OF LIST OF PASSLOC TABLES 
          BX6    X2 
          SA6    A3          REPLACE +0 WORD OF OVCAP ENTRY 
          SA1    GROUP       (X1) = GROUP NAME (FOR FDL TRACE INFO) 
          RJ     =XFDL.UOC   UNLOAD OVCAP 
 OUOC4    SB3    B3+2        (B3) = FWA OF NEXT OVCAP ENTRY 
          PL     X5,OUOC2    SCAN ALL ENTRIES 
          EQ     DB$OUOC     IF X5 IS NEGATIVE, EXIT AFTER ONE ENTRY
 ERRABT   SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   ERRABT - MESSAGE AND ABORT ON FDL ERROR 
* *   C. F. RICHARDS                             DATE  10/16/80 
* 
* DC  PURPOSE 
* 
*     DIAGNOSE FDL ERRORS ENCOUNTERED TRYING TO LOAD AN OVCAP, THEN 
*     ABORT.
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     (X6) = FDL ERROR CODE 
* 
* D   ASSUMPTIONS 
* 
*     (ERRMSG+3) = OVCAP NAME LEFT-JUSTIFIED WITH ZERO-FILL 
* 
* DC  EXIT CONDITIONS 
* 
*     CDCS EXECUTION TERMINATED BY ABORT MACRO. 
* 
* DC  CALLING ROUTINES
* 
*     LOADOVC 
* 
* DC  CALLED ROUTINES 
* 
*     ABORT MACRO 
*     MESSAGE MACRO 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE. 
* 
* DC  DESCRIPTION 
* 
*     CONVERT THE ERROR CODE TO DISPLAY CODE AND INSERT IT INTO THE 
*     ERROR MESSAGE. ISSUE THE ERROR MESSAGE TO THE DAYFILE.
*     ABORT CDCS SINCE ALL FDL ERRORS ARE EVIDENCE OF INSTALLATION
*     OR BUILD PROBLEMS.
*#
  
 ERRABT   BSS    0
          MX0    -3 
          BX7    -X0*X6      (X7) = 57/0,3/DIGIT2 
          LX0    3
          BX6    -X0*X6      (X6) = 54/0,3/DIGIT1,3/0 
          LX6    3
          BX6    X6+X7       (X6) = 48/0,6/DIGIT1,6/DIGIT2
          LX6    6
          MX0    -18
          SX6    X6+3R00B    CONVERT TO OCTAL D.C. (BEWARE OF SIGN EXT.)
          BX6    -X0*X6      (X6) = 42/0,18/*77B* 
          SA1    ERRMSG+1 
          BX1    X0*X1       (X1) = 42/*R CODE *,18/0 
          BX6    X6+X1       (X6) = 60/*R CODE 77B* 
          SA6    A1          PLACE ERROR CODE WORD IN MESSAGE TEXT
          MESSAGE ERRMSG     ISSUE DAYFILE MESSAGE
          ABORT              ABORT CDCS 
 LOADOVC  SPACE  4,10 
*#
* *   DB$OSUP (COMDECK)                          PAGE  1
* *   LOADOVC - LOAD OVCAP
* *   C. F. RICHARDS                             DATE  10/16/80 
* 
* DC  PURPOSE 
* 
*     LOADOVC ATTEMPTS TO LOAD A SPECIFIED CDCS OVCAP.
* 
* DC  ENTRY CONDITIONS
* 
* D   PARAMETERS
* 
*     (X2) = OVCAP NAME, LEFT-JUSTIFIED 
* 
* D   ASSUMPTIONS 
* 
*     THE OVCAP IS NOT ALREADY LOADED.
* 
* DC  EXIT CONDITIONS 
* 
* D   NORMAL
* 
*     THE OVCAP HAS BEEN LOADED INTO CENTRAL MEMORY 
* 
*     REGISTERS PRESERVED - A0, A1, X0, X5, B2, B3. 
*     (B1) = 1. 
* 
* D   ABNORMAL
* 
*     EXIT TO ERRABT IF AN FDL ERROR CODE WAS RECEIVED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$OLLO - LOAD AND LOCK AN OVCAP. 
*     DB$OLOC - SUPERVISOR LOAD OF A CALLED OVCAP.
* 
* DC  CALLED ROUTINES 
* 
*     ERRABT - DIAGNOSE FDL ERROR AND ABORT.
*     FDL.LOC - FDL ROUTINE TO LOAD AN OVCAP. 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     NONE. 
* 
* DC  DESCRIPTION 
* 
*     SAVE PARAMETER LIST POINTER.
*     SETUP REGISTERS AS PARAMETERS FOR FDL.LOC.
*     STORE OVCAP NAME IN ERROR MESSAGE TEXT. 
*     CALL FDL.LOC TO LOAD THE OVCAP. 
*     RESTORE PARAMETER LIST POINTER. 
*     IF AN FDL ERROR CODE WAS RECEIVED, EXIT TO ERRABT.
*     RETURN. 
*#
  
 LOADOVC  JP     *+1S17D     ENTRY/EXIT 
          SX6    A1 
          SA6    LOADOVCA    SAVE PARAMETER LIST POINTER
          MX6    -18
          BX2    X6*X2       (X2) = 42/OVCAP NAME,18/0
          BX7    X2 
          SA7    ERRMSG+3    SAVE OVCAP NAME IN ERROR MESSAGE TEXT
          SA1    GROUP       (X1) = 42/OVCAP GROUP NAME, 18/0 
          SX3    LIBLIST     (X3) = ADDRESS OF LIST OF LIBRARIES
          SX4    PASSLIST    (X4) = FWA OF LIST OF PASSLOC TABLES.
          RJ     =XFDL.LOC
          SA1    LOADOVCA 
          SA1    X1          RESTORE PARAMETER LIST POINTER 
          NZ     X6,ERRABT   IF AN FDL ERROR CODE RECEIVED
          EQ     LOADOVC     RETURN 
  
 LOADOVCA BSS    1           CONTAINS PARAMETER LIST POINTER
 DEF      SPACE  4,10 
*CALL DEFMACRO
 INCAP    SPACE  4,10 
***       INCAP - MACRO FOR DEFINING ENTRY POINTS IN OVCAPS.
* 
* ENTRY   INCAP  CAP,NONINT 
* 
*         ENTRY = ENTRY POINT NAME WHICH OCCURS IN OVCAP. 
*         CAP = OVCAP NAME AND ENTRY IN OVCAP LIST. 
*         NONINT = OMITTED FOR INTERRUPTIBLE OVCAP ENTRY POINTS.
* 
*              THIS MACRO IS USED TO DEFINE ENTRY POINTS WHICH WILL CALL
*         THE SUPERVISOR TO LOAD THE OVCAP IF NOT ALREADY LOADED AND
*         TO JUMP TO THE INDICATED ENTRY POINT.  THE ENTRY POINT NAMES
*         MUST BE IN ALPHANUMERIC ORDER BECAUSE A PASSLOC TABLE BODY
*         IS GENERATED IN THE REMOTE TABLE *PASSLOC* AND THE FDL
*         RESIDENT REQUIRES PASSLOCS TO BE IN INCREASING ORDER.  THE
*         OVCAP ENTRY POINT NAME CANNOT BE USED OTHERWISE LOADER
*         WOULD GENERATE DUPLICATE ENTRY POINT DIAGNOSTICS SO THE 
*         ENTRY POINT NAME"S THIRD CHARACTER IS A PERIOD INSTEAD OF A 
*         DOLLAR.   A SUBST *DB$ENTRY BECOMES DB.ENTRY*  MUST BE
*         USED IN THE (0,0) OVERLAY (SEE SKELGEN).  THE ENTRY POINT MUST
*         ALSO BE REINSTATED IN THE OVCAP BY USING *ENTRY BECOMES 
*         ENTRY* WITHIN THE OVCAP DEFINITION. 
*         THE OVCAP ORDINAL IS CALCULATED FROM THE LOCATION OF THE
*         OVCAP ENTRY. THE SET OF CAPORD BELOW INDICATES THE ASSUMED
*         SYMBOL OF THE OVCAP LIST FWA AS WELL AS THE SIZE OF EACH
*         ENTRY.
  
          PURGMAC INCAP 
  
          MACRO  INCAP,ENT,CAP,NONINT 
          NOREF  CAPORD 
          NOREF  NI 
 '?PRFX   MICRO  1,3, ENT 
 '?SUFX   MICRO  4,4, ENT 
* 
          IFC    NE, "'?PRFX" DB$ ,1
          ERR    "'?PRFX"_"'?SUFX" - ENTRY POINT MUST BEGIN WITH DB$
* 
 CAPORD   SET    ._CAP-OVCAP00
 CAPORD   SET    CAPORD/2 
* 
*         CHECK THAT EVERY INTERRUPTIBLE OVCAP HAS A FLAG 
*         REPRESENTING IT IN ITEM RCOVCAPS IN THE RCB.
* 
          IFC    EQ, NONINT  ,2 
          IFGT   CAPORD,DFRCOVLG-1,1
          ERR    TOO MANY OVCAPS DEFINED. RCOVCAPS MUST BE MADE LONGER. 
* 
          IFC    NE, NONINT  ,2 
 NI       SET    1
          SKIP   1
 NI       SET    0
* 
          ENTRY  DB._"'?SUFX" 
 DB._"'?SUFX" JP  *+1S17D 
          RJ     =XDB$OLOC
 -        VFD    1/NI,5/0,6/CAPORD,18/#_ENT 
* 
 #_ENT    PASS   "ENTPRFX"_"'?SUFX" 
          ENDM
 OVCAP    SPACE  4,10 
***       OVCAP - MACRO FOR DEFINING AN OVCAP ENTRY.
* 
*         OVCAP  NAME 
* 
*         NAME = NAME OF AN OVCAP TO BE INSERTED IN AN OVCAP LIST.
*         MAXAGE = MAX AGE UNITS ALLOWED BEFORE OVCAP IS UNLOADED 
*                  MUST BE GE ZERO AND LT (777776B - DFRETIRE)
* 
*             THIS MACRO DEFINES THE ENTRIES IN THE OVCAP LIST FOR
*         CDCS.  EACH ENTRY IS TWO WORDS OF THE FOLLOWING FORMAT: 
* 
*         42/0LCAPNAME,1/LOADED,17/UNUSED 
*         1/LOCKED,5/UNUSED/,18/LAST-UNLOCK,18/MAXAGE,18/LOCK-COUNT 
* 
*         THE ENTRY WILL BE USED BY THE *INCAP* MACRO.
  
          PURGMAC OVCAP 
  
 OVCAP    MACRO  NAME,MAXAGE
 ._NAME   VFD    42/0L_NAME,18/0
          VFD    24/0,18/MAXAGE,18/0
          ENDM
 PASS     SPACE  4,10 
***       PASS - MACRO FOR DEFINING PASSLOC ENTRY POINT ENTRIES.
* 
* SYM     PASS   ENTRY,X
* 
*         SYM = OPTIONAL SYMBOL DEFINING THE LOCATION OF THIS 
*         PASSLOC TABLE.
*         ENTRY = ENTRY POINT/EXTERNAL NAME TO BE ADDED TO A PASSLOC
*         LIST. 
*         X = IF PRESENT INDICATES THE NAME IS AN EXTERNAL RATHER THAN
*         AN ENTRY POINT PASSLOC TABLE ENTRY. 
* 
*              ENTRY POINTS AND EXTERNALS CAN BE ADDED TO A PASSLOC 
*         TABLE BY USING THIS MACRO.  THE PASSLOC HEADER MUST BE
*         DEFINED BY USING THE *PASSLOC* MACRO. 
  
          PURGMAC PASS
  
          MACRO  PASS,SYM,ENT,X 
          IFC    LE, ENT "PLOCNAM" ,1 
          ERR    ENT - OUT OF ORDER IN PASSLOC TABLE. 
 PLOCNAM  MICRO  1,, ENT
 PLOCWC   SET    PLOCWC+1 
 NOX      IFC    EQ, X
 PASSLOC  RMT 
 SYM      VFD    42/0L_ENT,18/**
          RMT 
 NOX      ELSE
 PASSLOC  RMT 
 SYM      VFD    42/0L_ENT,18/=X_ENT
          RMT 
 NOX      ENDIF 
          ENDM
 PASSLOC  SPACE  4,10 
***       PASSLOC - MACRO FOR DEFINING A PASSLOC TABLE. 
* 
*         PASSLOC 
* 
*              THIS MACRO FLUSHES ALL THE PREVIOUSLY DEFINED PASSLOC
*         TABLE ENTRIES (SEE *PASS* MACRO). 
  
          PURGMAC PASSLOC 
  
 PASSLOC  MACRO 
          IFEQ   PLOCWC,0,1 
          ERR    EMPTY PASSLOC TABLE. 
          VFD    12/0021B,12/PLOCWC,36/0  *ENTRY* TABLE HEADER
 PASSLOC  HERE
 PLOCWC   SET    0
 PLOCNAM  MICRO  1,,
          ENDM
          SPACE  4,10 
**        GLOBAL DEFINITIONS
  
 EXPLG    EQU    12D         SIZE OF EXPONENT FIELD IN FLOATING POINT 
  
 DB$ORCB  BSS    1           ADDRESS OF RCB POINTER WORD
 ERRMSG   DATA   C*  FDL ERROR CODE 77B LOADING -.......* 
*CALL RCBOSDCLS       OVCAP SUPERVISOR RCB DEFS 
  
  
*         THE FOLLOWING TEST ENSURES THAT ITEM RCOVCAPS CAN FIT ENTIRELY
*         WITHIN THE COEFFICIENT PART OF A WORD (FLOATING POINT 
*         NOTATION). THE CURRENT IMPLEMENTATION USES THE NORMALIZE
*         INSTRUCTION TO FIND THE *NEXT* SET OVCAP LOCK BIT IN RCOVCAPS.
  
          IFGT   DFRCOVLG,60-EXPLG,1
          ERR    SIZE OF RCOVCAPS TOO LONG FOR DB$ODLC IMPLEMENTATION 
