COMKDPB 
COMMON
          CTEXT  COMKDPB - DETECT POTENTIALLY BLOCKED TASKS.
          SPACE  4,10 
          IF     -DEF,QUAL$ 
          QUAL   COMKDPB
          ENDIF 
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DPB      SPACE  4,10 
***       DPB - DETECT POTENTIALLY BLOCKED TASKS. 
* 
*         S. M. KEEFER       80/04/11.
          SPACE  4,10 
***       THIS COMMON DECK CONTAINS SUBROUTINES USED IN THE DETECTION 
*         OF POTENTIALLY BLOCKED TASKS.  A TASK IS BLOCKED IF IT
*         CANNOT BE LOADED WITH ITS INITIAL FIELD LENGTH, AND IS
*         POTENTIALLY BLOCKED IF IT CANNOT BE LOADED WITH ITS INITIAL 
*         PLUS EXPANDABLE FIELD LENGTH. 
          SPACE  4,10 
**        GLOBAL STORAGE. 
  
  
 DPBA     DATA   C* FL TOO LARGE  - XXXXXXB, +++++++, $$$$$$$.* 
 DPBB     DATA   C* MFL TOO LARGE - XXXXXXB, +++++++, $$$$$$$.* 
 DPBD     DATA   C* POSSIBLE BLOCKAGE AMONG CM RESIDENT TASKS.* 
 DPBE     DATA   C* BLOCKAGE AMONG CM RESIDENT TASKS.*
 DPBF     DATA   C* MINIMUM TAF MFL NEEDED = XXXXXXB.*
  
 DPBG     BSS    1           FIRST WORD OF CURRENT TLD ENTRY
 DPBH     BSS    1           TASK LIBRARY NAME TO PUT IN MESSAGE
 DPBI     BSS    1           MINIMUM MFL NEEDED 
 DPBJ     BSS    1           STORAGE FOR MFL
 DPBK     BSS    1           FWA OF NEW DIRECTORY FOR LIBRARY UPDATE
 DPBM     BSS    1           NAME OF LIBRARY BEING UPDATED
 AEM      SPACE  4,15 
**        AEM - ASSEMBLE ERROR MESSAGE. 
* 
*         ASSEMBLE AND PUT AN ERROR MESSAGE IN *TAF*-S DAYFILE. 
* 
*         ENTRY  (B5) = FWA OF MESSAGE. 
*                (X1) = FIELD LENGTH OF TASK. 
*                (DPBG) = TASK NAME.
*                (DPBH) = TASK LIBRARY NAME.
* 
*         USES   A - 1. 
*                X - 0, 1.
*                B - 2, 3, 5. 
* 
*         CALLS  COD, SNM.
* 
*         MACROS MESSAGE. 
  
  
 AEM      SUBR               ENTRY/EXIT 
  
*         PUT FIELD LENGTH IN MESSAGE.
  
          RJ     COD         CONSTANT TO OCTAL DISPLAY CODE 
          BX1    X6 
          LX1    24 
          SB5    -B5         FWA OF MESSAGE 
          SB2    1RX         REPLACEMENT CHARACTER
          SB3    DAYB        ALTERNATE ASSEMBLY AREA
          RJ     SNM         SET NAME IN MESSAGE
  
*         PUT TASK NAME IN MESSAGE. 
  
          SB2    1R+         REPLACEMENT CHARACTER
          SA1    DPBG        GET TASK NAME
          MX0    TLTNN
          BX1    X0*X1
          SB5    DAYB        FWA OF PARTIALLY ASSEMBLED MESSAGE 
          RJ     SNM         SET NAME IN MESSAGE
  
*         PUT TASK LIBRARY NAME IN MESSAGE. 
  
          SA1    DPBH        GET TASK LIBRARY NAME
          SB2    1R$         REPLACEMENT CHARACTER
          SB5    DAYB        FWA OF PARTIALLY ASSEMBLED MESSAGE 
          RJ     SNM         SET NAME IN MESSAGE
          MESSAGE  DAYB      ISSUE MESSAGE TO DAYFILE 
          EQ     AEMX        RETURN 
 CBN      SPACE  4,25 
**        CBN - COMPUTATIONS FOR BLOCKED NON CM RESIDENT TASKS. 
* 
*         THIS ROUTINE EXTRACTS THE INITIAL AND EXPANDABLE FL FROM EACH 
*         *TLD* ENTRY IN A TASK LIBRARY AND DETERMINES IF A NON CM
*         RESIDENT TASK IS BLOCKED OR NOT.  A MESSAGE WILL BE ISSUED
*         AND AN ERROR FLAG RETURNED IF A TASK IS BLOCKED.
* 
*         ENTRY  (B6) = 0 ON FIRST CALL.
*                (B7) = 0 TO INITIALIZE ERROR FLAG. 
*                (A5/X5) = FWA OF TLD ENTRY TO SEARCH.
*                (MINXT) = MINIMUM SIZE OF TRANSIENT TASK AREA. 
* 
*         EXIT   (B6) = NEGATIVE VALUE WHICH MUST BE ADDED TO MINXT 
*                       BEFORE NO BLOCKED TASKS IN LIBRARY. 
*                (B7) = 0, IF NO BLOCKED TASKS DETECTED.
*                     = 1, IF BLOCKED TASKS DETECTED. 
* 
*         USES   A - 1, 2, 3, 5, 6. 
*                X - 1, 2, 3, 5, 6. 
*                B - 3, 4, 5, 6, 7. 
* 
*         CALLS  AEM, RTD.
  
  
 CBN      SUBR               ENTRY/EXIT 
 CBN1     SB3    B0+         GET DATA FOR NEXT NON CM RESIDENT ENTRY
          RJ     RTD         RETURN TASK LIBRARY DATA 
          ZR     X5,CBNX     IF NO MORE TLD ENTRIES 
          SA5    B4+         RESET FWA OF CURRENT TLD ENTRY 
  
*         CHECK IF ENOUGH SPACE FOR INITIAL FL LOAD.
  
          BX1    X2 
          IX6    X1+X3
          SA2    MINXT
          SA6    CBNA        POTENTIAL TASK FL
          SA3    B4 
          BX6    X3 
          SA6    DPBG        FIRST WORD OF TLD ENTRY
          IX2    X2-X1
          PL     X2,CBN2     IF ENOUGH FL 
          SB7    B1+         SET ERROR FLAG 
          SB5    DPBA        FWA OF MESSAGE 
          RJ     AEM         ASSEMBLE ERROR MESSAGE 
  
*         CHECK IF ENOUGH SPACE FOR INCREASE TO POTENTIAL FL. 
  
 CBN2     SA1    CBNA 
          SA2    MINXT
          IX2    X2-X1
          PL     X2,CBN4     IF ENOUGH FL 
          SB4    X2 
          GE     B4,B6,CBN3  IF NEW INCREMENT NOT LARGER
          SB6    B4+
 CBN3     SB7    B1          SET ERROR FLAG 
          SB5    DPBB        FWA OF MESSAGE 
          RJ     AEM         ASSEMBLE ERROR MESSAGE 
 CBN4     SA5    A5+TLDLE    GET NEXT TLD ENTRY 
          ZR     X5,CBNX     IF LAST ENTRY IN TLD 
          EQ     CBN1        CHECK NEXT ENTRY 
  
 CBNA     BSS    1           TASK POTENTIAL FIELD LENGTH
 DBC      SPACE 4,25
**        DBC - DETECT BLOCKS IN CM RESIDENT TASKS. 
* 
*         DETECT CM RESIDENT TASKS WHICH EITHER WILL NOT
*         OR MIGHT NOT BE ABLE TO GET ENOUGH FIELD LENGTH 
*         TO EXECUTE. 
* 
*         ENTRY  (CMRFL) = SUM OF CM RESIDENT INITIAL FL. 
*                (CMRPF) = SUM OF CM RESIDENT POTENTIAL FL. 
*                (DPBJ) = MFL OF *TAF*.  FOR *K.MAXFL* IT IS THE
*                         REQUESTED MFL.
* 
*         EXIT   (B7) = 0, IF NO BLOCKS DETECTED. 
*                     = 1, IF BLOCKS DETECTED.
*                (MAXTTA) = MAXIMUM SIZE OF TOTAL TASK AREA.
*                (MINTTA) = MINIMUM SIZE OF TOTAL TASK AREA.
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                X - 1, 2, 3, 4, 6, 7.
*                B - 7. 
* 
*         CALLS  COD, SNM.
* 
*         MACROS MESSAGE. 
  
  
 DBC      SUBR               ENTRY/EXIT 
          SA2    DPBJ        MFL OF TAF 
          TX1    -1,VFSCP    INITIAL LWA OF CMM BUFFER
          SA3    VCMM        GET CMM FIELD LENGTH 
          AX3    18          EXPANDABLE FL OF CMM BUFFER
          SB7    B0          CLEAR ABORT FLAG 
          SX3    X3 
  
*         CAN ALL CM RESIDENT TASKS BE LOADED WITH THEIR MINIMUM RFL. 
  
          IX6    X2-X1
          SA6    MAXTTA      MAXIMUM SIZE OF TOTAL TASK AREA
          SA4    CMRFL       SUM OF CM RESIDENT INITIAL FL
          IX7    X6-X3
          SA7    MINTTA      MINIMUM SIZE OF TOTAL TASK AREA
          IX4    X6-X4
          PL     X4,DBC1     IF ENOUGH FL 
          MESSAGE  DPBE      * BLOCKAGE AMONG CM RESIDENT TASKS.* 
  
*         CAN ALL CM RESIDENT TASKS BE LOADED WITH THEIR MAXIMUM RFL. 
  
 DBC1     SA4    CMRPF       POTENTIAL MEMORY RESIDENT FL 
          SA3    MINTTA      MINIMUM SIZE OF TOTAL TASK AREA
          IX4    X3-X4
          PL     X4,DBCX     IF ENOUGH FL 
          SB7    B1          SET ABORT FLAG 
          MESSAGE  DPBD      POSSIBLE BLOCKAGE IN CM RESIDENT TASKS 
          SA1    DPBJ        MFL OF TAF 
          IX6    X1-X4       COMPUTE NEEDED MFL 
          SA6    DPBI        REPLACE LARGEST INCREMENT
          EQ     DBCX        RETURN 
 DBN      SPACE  4,20 
**        DBN - DETECT BLOCKS IN NON CM RESIDENT TASKS. 
* 
*         DETECT NON CM RESIDENT TASKS WHICH EITHER ARE TOO LARGE TO
*         BE LOADED INITIALLY OR WILL BE TOO LARGE TO LOAD IF THEIR 
*         FIELD LENGTH INCREASES. 
* 
*         ENTRY  (DPBJ) = MFL OF *TAF*.  FOR *K.MAXFL* IT IS THE
*                         REQUESTED MFL.
*                (DPBK) = FWA OF NEW DIRECTORY IF LIBRARY UPDATE. 
*                       = 0 IF NOT LIBRARY UPDATE.
*                (DPBM) = NAME OF LIBRARY BEING UPDATED.
*                (MINTTA) = MINIMUM SIZE OF TOTAL TASK AREA.
* 
*         EXIT   (MINXT) = MINIMUM SIZE OF TRANSIENT TASK AREA. 
*                (B7) = 0, IF NO BLOCKED TASKS DETECTED.
*                     = 1, IF BLOCKED TASKS DETECTED. 
* 
*         USES   A - 1, 2, 4, 5, 6, 7.
*                X - 1, 2, 4, 5, 6, 7.
*                B - 2, 3, 6, 7.
* 
*         CALLS  CBN. 
  
  
 DBN      SUBR               ENTRY/EXIT 
          SA4    MINTTA      MINIMUM SIZE OF TOTAL TASK AREA
          SA2    CMRPF
          SA1    VTFL        GET NAME OF SYSTEM TASK LIBRARY
          MX5    42 
          BX6    X1*X5
          IX7    X4-X2
          SA6    DPBH 
          SA7    MINXT       MINIMUM SIZE OF TRANSIENT TASK AREA
  
*         CHECK SYSTEM TASK LIBRARY.
  
          TA5    0,VTLD      FWA OF SYSTEM TLD
          SA1    DPBK        FWA OF NEW DIRECTORY 
          ZR     X1,DBN1     IF NOT LIBRARY UPDATE
          SA2    DPBM        NAME OF LIBRARY BEING UPDATED
          IX2    X2-X6
          NZ     X2,DBN2     IF LIBRARY NOT UPDATED 
          SA5    X1+
 DBN1     SB6    B0+         INITIALIZE LARGEST INCREMENT 
          RJ     CBN         CHECK FOR BLOCKED TASKS
  
*         CHECK USER TASK LIBRARY DIRECTORIES.
  
 DBN2     TA4    0,VEDT      USER TLD SEARCH
          BX1    X4          CHECK EDT COUNT
          LX1    -18
 DBN3     SX1    X1+
          ZR     X1,DBN6     IF LAST EDT IN CHAIN 
          SX6    X4 
          SX7    X1 
          SA6    DBNA        SAVE FWA OF NEXT EDT 
          SA7    DBNB        SAVE EDT COUNT 
          SA5    A4+4        GET FWA OF TLD 
          LX5    -18
          MX2    42 
          ZR     X5,DBN5     IF TL IS EMPTY (NO XXTASKL)
          SA1    X5-1 
          BX6    X1*X2
          SA5    X5          SET UP SEARCH ADDRESS
          SA6    DPBH        NAME OF CURRENT LIBRARY
          SA1    DPBK        FWA OF NEW DIRECTORY 
          ZR     X1,DBN4     IF NOT LIBRARY UPDATE
          SA2    DPBM        NAME OF LIBRARY BEING UPDATED
          IX2    X2-X6
          NZ     X2,DBN5     IF LIBRARY NOT UPDATED 
          SA5    X1 
 DBN4     RJ     CBN         CHECK FOR BLOCKED TASKS
 DBN5     SA1    DBNB        REDUCE EDT COUNT 
          SX1    X1-1 
          SA4    DBNA        GET ADDRESS OF NEXT EDT
          SA4    X4+
          EQ     DBN3        PROCESS NEXT TLD 
  
 DBN6     ZR     B7,DBNX     IF NO BLOCKED TASKS, RETURN
          SA2    DPBJ        MFL OF TAF 
          SA1    DPBI 
          SX4    B6 
          IX4    X2-X4
          IX6    X4-X1
          NG     X6,DBN7     IF NOT ENOUGH FL 
          BX1    X4 
 DBN7     RJ     COD         CONSTANT TO OCTAL DISPLAY
          SB2    1RX         REPLACEMENT CHARACTER
          SB3    DAYB        SET ALTERNATE ASSEMBLY AREA
          SB5    -DPBF       FWA OF MESSAGE 
          BX1    X6 
          LX1    24 
          RJ     SNM         SET NAME IN MESSAGE
          MESSAGE  DAYB      * MINIMUM TAF MFL NEEDED = XXXXXXB.* 
          EQ     DBNX        RETURN 
  
 DBNA     BSS    1           FWA OF NEXT EDT
 DBNB     BSS    1           EDT COUNT
 RTD      SPACE  4,30 
**        RTD - RETURN TASK LIBRARY DATA. 
* 
*         READ EACH *TLD* AND ACCUMULATE THE TASK INITIAL (FL) AND
*         EXPANDABLE (EF) FIELD LENGTHS FOR CM RESIDENT 
*         TASKS AND A COUNT OF CM RESIDENT TASKS. 
*         OPTIONALLY, THE *FL* AND *EF* OF THE NEXT NON CM
*         RESIDENT TASK IS RETURNED.
* 
*         ENTRY  (A5/X5) = FWA OF *TLD* TO SEARCH.
*                (B3) = 0, RETURN DATA FOR NEXT NON CM RESIDENT ENTRY.
*                     =-1, RETURN DATA FOR ALL CM RESIDENT ENTRIES. 
*                (B5) = 0, ONLY ON FIRST ENTRY TO COUNT CM RESIDENT 
*                       TASKS.
* 
*         EXIT   (B4) = FWA OF CURRENT *TLD* ENTRY. 
*                (B5) = COUNT OF CM RESIDENT TASKS, IF (B3)=-1. 
*                (X2) = TASK FL WHEN (B3)=0.
*                (X3) = TASK EF WHEN (B3)=0.
*                (CMRPF) = SUM OF CM RESIDENT POTENTIAL FL. 
*                (CMRFL) = SUM OF CM RESIDENT INITIAL FL. 
*                (RTDA) = 0, IF (B3)=-1 AND NO NON CM RESIDENT TASKS. 
*                         1, IF (B3)=-1 AND NON CM RESIDENT TASKS.
* 
*         USES   A - 4, 5, 6. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 4, 5.
  
 RTD3     ZR     B3,RTDX     IF NON CM RESIDENT TASK NEEDED 
          SX6    1
          SA6    RTDA        NON CM RESIDENT TASKS EXIST
          SA5    A5+1        WORD 1 OF NEXT TLD ENTRY 
          NZ     X5,RTD1     IF NOT DONE
  
 RTD      SUBR               ENTRY/EXIT 
          ZR     X5,RTDX     IF NO MORE ENTRIES 
          MX7    -TLFLN      MASK FOR FL
          LX7    TLFLS-TLFLN+1
          MX1    -TLEFN      MASK FOR EF
          LX1    TLEFS-TLEFN+1
 RTD1     SB4    A5          SAVE FWA OF CURRENT TLD ENTRY
          SA5    A5+B1       WORD 2 OF TLD ENTRY
          BX2    -X7*X5      GET TASK FL
          LX2    TLFLN-TLFLS-1+6
          BX3    -X1*X5      GET TASK EF
          LX3    TLEFN-TLEFS-1+6
          SA5    A5+1        WORD 3 OF TLD ENTRY
          LX5    59-TLDLS 
          NG     X5,RTD2     IF TASK LOGICALLY DELETED
          LX5    59-TLCMS-59+TLDLS
          PL     X5,RTD3     IF A NON CM RESIDENT ENTRY 
          ZR     B3,RTD2     IF NEED NEXT NON CM RESIDENT ENTRY 
          SB5    B5+1        ACCUMULATE CM RESIDENT TASK COUNT
          SX4    NUAPL       ADD TASK NEGATIVE FL 
          IX2    X2+X4
          SA4    CMRFL       ACCUMULATE FL
          IX6    X2+X4
          SA6    CMRFL
          SA4    CMRPF       ACCUMULATE POTENTIAL FL
          IX3    X2+X3       INITIAL + EXTRA FL 
          IX6    X4+X3
          SA6    CMRPF
 RTD2     SA5    A5+1        WORD 1 OF NEXT TLD ENTRY 
          NZ     X5,RTD1     IF NOT LAST TLD ENTRY
          EQ     RTDX        RETURN 
  
 RTDA     BSSZ   1           NON CM RESIDENT TASK INDICATOR 
  
  
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CBN      EQU    /COMKDPB/CBN 
 DBN      EQU    /COMKDPB/DBN 
 DBC      EQU    /COMKDPB/DBC 
 RTD      EQU    /COMKDPB/RTD 
 QUAL$    ENDIF 
 DPB      ENDX
