*                                                                     *         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *         
*                                                                     *         
*                                                                     *         
*                                                                     *         
*        K E Y - I N   P A R T   E I G H T                            *         
*                                                                     *         
*                                                                     *         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *         
*                                                                     *         
         SYSTEM   SIG5P                                                         
         SYSTEM   OPTIONS                                                       
*                                                                               
         DEF      KEY8              ENTRY                                       
*                                                                               
         DEF      KEY8EXB           NORMAL EXIT                                 
         DEF      KEY8A04           KEY ERR EXIT                                
*                                                                               
OLAYFLAG EQU      'KEY8'                                                        
         SYSTEM   CPRMON            SYSTEM DEFINITION BASE                      
*                                                                               
         TITLE    '** KEY8 - CONTROL SECTION **'                                
*                                                                               
*                                                                               
*                                                                               
*        THIS OVERLAY RUNS AS PART OF OPERATOR KEYIN PROCESSING.                
*        IT RUNS IN THE CONTEXT OF THE CONTROL TASK.                            
*        IT IS ENTERED FROM THE KEY1 OVERLAY (WHCIH FIRST SCANS                 
*        ALL KEY-INS TO DETERMINE WHERE THEY ARE TO BE PROCESSED).              
*                                                                               
*        THE NORMAL EXIT IS DIRECTLY TO THE CONTROL TASK WORK LOOP (CT1)        
*                                                                               
*        THE ERROR EXIT IS TO THE KEY1 OVERLAY (KEY1A04) WHICH WILL             
*        ISSUE 'KEY-ER' AND REQUEST A NEW KEY-IN.                               
*                                                                               
*                                                                               
*        AT ENTRY:                                                              
*        R2 = KEYIN INDEX, ADJUSTED TO KEY8 TABLE BASE                          
*        R6 = SCAN COMPLETION CODE FROM FIRST SCAN CALL                         
*        R7 = KEYIN TEXT POINTER AS REQUIRED FOR SCAN                           
*                                                                               
*                                                                               
KEY8     RES      0                                                             
         PUSH     R7                SAVE SCAN POINTER                           
         LI,R7    64                                                            
         BAL,R8   GETTEMP           GET TSPACE FOR CONTEXT                      
         B        KEY8NOTS          B IF SPACE IS NOT AVAILABLE                 
         ENABLE                     SPACE FOUND                                 
         LW,R3    R7                                                            
         PULL     R7                RESTORE SCAN POINTER                        
         PUSH     R3                SAVE TSPACE POINTER                         
         AND,R3   X1FFFF            MASK FOR JUST ADDRESS                       
*                                                                               
         LW,R4    A92,R2            GET CONTEXT INITIALIZATION PTR              
         BEZ      A10               B IF NO CONTEXT TO INITIALIZE               
         LI,R5    63                                                            
A05      RES      0                                                             
         LW,R8    *R4,R5            MOVE INITIAL CONTEXT CONTENT                
         STW,R8   *R3,R5            INTO CONTEXT AREA                           
         AI,R5    -1                                                            
         BGEZ     A05                                                           
*                                                                               
A10      RES      0                                                             
         LH,R8    A91,R2            GET PROCESSOR POINTER                       
         B        *R8               GO TO HIM                                   
         PAGE                                                                   
KEY8NOTS RES      0                 NOT ENUF TSPACE                             
         PULL     R7                                                            
         B        KEY8A04           GO TO KEY ERR EXIT                          
*                                                                               
*                                                                               
KEYERR   RES      0                 ERROR AFTER GETTEMP                         
         PULL     R7                RECOVER TSPACE POINTER                      
         BAL,R8   RELTEMP           RELEASE CONTEXT TSPACE                      
*                                                                               
*                                                                               
KEY8A04  B        KEY1A04           EXIT TO RETRY KEYIN                         
*                                                                               
*                                                                               
KEY8EXIT RES      0                 NORMAL EXIT                                 
         PULL     R7                RECOVER CONTEXT POINTER                     
         BAL,R8   RELTEMP           RELEASE CONTEXT TSPACE                      
KEY8EXB  B        CT1               RETURN TO CONTROL TASK                      
         TITLE    '** KEY8 - CONTROL TABLES **'                                 
*                                                                               
*                                                                               
*                                                                               
*        KEYIN PROCESSOR START ADDRESSES                                        
*        HALF-WORD PER ENTRY                                                    
*        INDEXED BY KEYIN NUMBER, BIASED TO KEY8 TABLES                         
*                                                                               
A91      RES      0                                                             
         DO       #PRIV                                                         
         DATA,2   MOUNT             MOU(NT)                                     
         DATA,2   UNMOUNT           UNM(OUNT)                                   
         DATA,2   DPSTATUS          DPS(TATUS)                                  
         DATA,2   DPIDLE            DPI(DLE)                                    
         FIN                        #PRIV                                       
         BOUND    4                                                             
*                                                                               
*                                                                               
*                                                                               
*        ADDRESS OF CONTEXT AREA INITIAL CONTENTS                               
*        WORD PER ENTRY                                                         
*        INDEXED BY KEYIN NUMBER, BIASED TO KEY8 TABLES                         
*                                                                               
A92      RES      0                                                             
         DO       #PRIV                                                         
         DATA     MNTDATA           MOU(NT)                                     
         DATA     MNTDATA           UNM(OUNT)                                   
         DATA     MNTDATA           DPS(TATUS)                                  
         DATA     MNTDATA           DPI(DLE)                                    
         FIN                        #PRIV                                       
#KEYINS  EQU      %-A92             NR OF KEYINS PROCESSED IN KEY8              
         TITLE    '** KEY8 - MOUNT/UNMOUNT **'                                  
         DO       #PRIV                                                         
*                                                                               
*                                                                               
*        MOUNT A PRIVATE PACK AND INCORPORATE ITS AREAS                         
*                                                                               
*        FLAG A PRIVATE PACK FOR UNMOUNTING SO ITS FILE                         
*          OPERATIONS WILL BE QUIESCED                                          
*                                                                               
*                                                                               
MOUNT    RES      0                 ENTRY FOR MOUNT                             
         LI,R0    0                 FLAG FOR MOUNT                              
         B        MOUUNM                                                        
*                                                                               
*                                                                               
UNMOUNT  RES      0                 ENTRY FOR UNMOUNT                           
         LI,R0    1                 FLAG FOR UNMOUNT                            
         PAGE                                                                   
MOUUNM   RES      0                 COMMON TO MOUNT/UNMOUNT                     
*        R0 IS 1 FOR UNMOUNT, 0 FOR MOUNT                                       
*        R3 IS CONTEXT AREA ADDRESS                                             
*        R6, R7 ARE AS FOR KEY8 ENTRY                                           
         AWM,R3   MNTASN,R3                                                     
         AWM,R3   MNTRD,R3          BIAS CONTEXT-TO-CONTEXT PTRS                
         AWM,R3   MNTCLS,R3                                                     
         STW,R0   0,R3              SAVE MOU/UNM FLAG                           
*                                                                               
*        SCAN DEVICE AND/OR VSN                                                 
*                                                                               
         LI,R11   1                 EBCDIC SCAN                                 
         BAL,R14  SCAN              GET DEV NAME OR VSN                         
         LCI      2                                                             
         STM,R8   MNTDEV,R3         ASSUME IT IS A DEVICE FOR NOW               
         LM,R8    BLANKS            DEFAULT FOR VSN                             
         CI,R6    1                                                             
         BL       KEYERR            B IF ERROR IN SCAN                          
         BG       MNT2              B IF KEYIN ENDED                            
*                                                                               
         LI,R11   1                 SCAN EBCDIC                                 
         BAL,R14  SCAN              GET VSN                                     
         CI,R6    2                                                             
         BNE      KEYERR            B IF NOT END OF KEYIN                       
*                                                                               
MNT2     RES      0                                                             
         LCI      2                                                             
         STM,R8   MNTVSN,R3         SAVE VSN                                    
*                                                                               
*        SET UP SOME REGISTERS                                                  
*                                                                               
         LI,R15   0                 BLOCKING BUFFER NOT OBTAINED                
         LW,R0    0,R3              MOU/UNM FLAG                                
         PAGE                                                                   
*                                                                               
*        LOCATE THE DEVICE DCT ENTRY                                            
*                                                                               
         LCI      2                                                             
         LM,R8    MNTDEV,R3         GET ASSUMED DEVICE NAME                     
         SLD,R8   -24                                                           
         OR,R8    NLBB              CONVERT TO DCT16 FORMAT                     
         LH,R1    DCT1              NR OF DCT ENTRIES                           
*                                                                               
         CD,R8    DCT16,R1                                                      
         BE       MNT10             B IF FOUND                                  
         BDR,R1   %-2                                                           
         PAGE                                                                   
*                                                                               
*        DEVICE NAME NOT FOUND.  ASSUME IT WAS REALLY A VSN                     
*        FIND THE DEVICE CARRYING THE PACK WITH THAT VSN                        
*                                                                               
         LCI      2                                                             
         LM,R8    MNTDEV,R3         GET WRONGLY ASSUMED DEVICE NAME             
         STM,R8   MNTVSN,R3         TREAT IT AS A VSN                           
         LI,R1    0                 (NO FPT)                                    
         BAL,R5   FINDBB            GET A BLOCKING BUFFER                       
         B        MNTKYERR          CANT GET A BLOCKING BUFFER                  
         LW,R14   *R15              BB ADDR TO R14                              
         LH,R1    DCT1              NR OF DEVICES TO CHECK                      
*                                                                               
MNT3     RES      0                                                             
         LCI      2                                                             
         LM,R8    MNTVSN,R3         GET VSN (CAL ERR IN LOOP ZAPS IT)           
         LD,R12   DCT16,R1          GET DEVICE NAME                             
         SLD,R12  8                                                             
         AND,R12  XFFFF                                                         
         CI,R12   'DP'                                                          
         BNE      MNT6              B IF IT ISNT A DISKPACK                     
         SLD,R12  16                LEFT-ALIGN DEVICE NAME                      
         OR,R13   BLANKS                                                        
MNT3A    CAL1,1   MNTASN,R3         ASSIGN DCB TO DEVICE                        
         LI,R12   0                 KEY FOR SECTOR ZERO                         
MNT4     CAL1,1   MNTRD,R3          READ SECTOR 0                               
         LW,R6    R14               BB ADDRESS                                  
         LW,R10   VTOCVTOC,R6                                                   
         CW,R10   KVTOC                                                         
         BNE      MNT5              B IF NOT A VALID VTOC                       
         CW,R8    VTOCVSN1,R6                                                   
         BNE      MNT5              B IF VSN WORD 1 WRONG                       
         CW,R9    VTOCVSN2,R6                                                   
         BNE      MNT5              B IF VSN WORD 2 WRONG                       
         LCI      2                                                             
         STM,R12  MNTDEV,R3         SET DEVICE NAME                             
         B        MNT10             NOW PROCESS REQUEST                         
*                                                                               
MNT5     RES      0                                                             
         CAL1,1   MNTCLS,R3         CLOSE DCB IF NECESSARY                      
MNT6     RES      0                                                             
         BDR,R1   MNT3              TRY NEXT DCT ENTRY                          
         B        MNT46             CANT FIND VSN MOUNTED                       
         PAGE                                                                   
*                                                                               
*        DEVICE LOCATED, R1 = DCT INDEX.  SEE IF MOUNTABLE                      
*                                                                               
MNT10    RES      0                                                             
         LI,R2    0                 INDEX MASTER DIRECTORY TABLES               
MNT11    RES      0                                                             
         CB,R1    MDDCTI,R2                                                     
         BE       MNT12             B IF THIS AREA IS ON OUR DEVICE             
         AI,R2    1                                                             
         CW,R2    K:NUMDA                                                       
         BLE      MNT11             CHECK NEXT AREA                             
*                                                                               
*        NO AREAS ON DEVICE:  IT IS A FREE PRIVATE PACK                         
*                                                                               
         CI,R0    0                                                             
         BE       MNT30             B IF MOUNT REQEST: DO IT                    
         B        MNT28             UNMOUNT BUT ALREADY UNMOUNTED               
         PAGE                                                                   
*                                                                               
*        DEVICE HAS AREAS ON IT                                                 
*                                                                               
MNT12    RES      0                                                             
         LC       MDFLAG,R2         GET AREA FLAGS                              
         BCR,USERACC  MNT20         B IF SYSGENNED AREA                         
         CI,R0    0                                                             
         BNE      MNT20             B IF DISMOUNT (PRIVATE AREA)                
         LI,R0    3                 SET FOR ABORTING MOUNT                      
         B        MNTEX2            EXIT                                        
         PAGE                                                                   
*                                                                               
*        MOUNT OR UNMOUNT ON SYSGENNED DISK                                     
*        UNMOUNT ON MOUNTED PRIVATE DISK                                        
*                                                                               
MNT20    RES      0                                                             
         DISABLE                                                                
         LB,R8    DCTRBM,R1         GET DEVICE FLAGS                            
         OR,R8    X2                ASSUME UNMOUNT                              
         CI,R0    0                                                             
         BNE      %+2               B IF IT WAS UNMOUNT                         
         EOR,R8   X2                MOUNT, RESET REMOVE FLAG                    
         STB,R8   DCTRBM,R1         REPLACE FLAGS                               
         ENABLE                                                                 
         CI,R0    0                                                             
         BE       MNTEX1            B IF MOUNT: DONE                            
*                                                                               
         LI,R7    0                 NO RFT, MD INDEX IN R2                      
         BAL,R8   CFDPIDLE          CHECK FOR PACK IDLE                         
         B        MNTEX1            EXIT                                        
         PAGE                                                                   
*                                                                               
*        UNMOUNT ON AN ALREADY UNMOUNTED PRIVATE PACK                           
*                                                                               
MNT28    RES      0                                                             
         CI,R0    4                                                             
         BE       MNTEX1            B IF ALREADY ABORTING                       
         B        MNT46             ABORT:  NOT FOUND                           
         PAGE                                                                   
*                                                                               
*        MOUNT A PRIVATE PACK                                                   
*                                                                               
MNT30    RES      0                                                             
         LD,R12   DCT16,R1                                                      
         SLD,R12  24                GET DEVICE NAME                             
MNT30A   CAL1,1   MNTASN,R3         ASSIGN DCB TO IT                            
         LW,R12   R1                SAVE DCT INDEX                              
         LI,R1    0                 NO FPT FOR FINDBB                           
         CI,R15   0                                                             
         BGZ      %+3               B IF BB ALREADY OBTAINED                    
         BAL,R5   FINDBB            GET ONE                                     
         B        MNTKYERR          B IF CANT GET ONE                           
         LW,R14   *R15              GET BB ADDRESS                              
         LW,R1    R12               RESTORE DCT INDEX                           
         LI,R12   0                 GRAN NR FOR VTOC READ                       
MNT31    CAL1,1   MNTRD,R3          READ VTOC                                   
         LW,R6    R14               BB ADDRESS                                  
         LW,R13   VTOCVTOC,R6                                                   
         CW,R13   KVTOC                                                         
         BNE      MNT40             B IF VALIDATION WORD WRONG                  
         LCI      2                                                             
         LM,R8    MNTVSN,R3         GET USER-SPECIFIED VSN                      
         CD,R8    BLANKS                                                        
         BNE      %+4               B IF GIVEN                                  
         LCI      2                                                             
         LM,R8    VTOCVSN1,R6       GET VSN FROM VOLUME                         
         STM,R8   MNTVSN,R3         FORCE VSN MATCH                             
         CW,R8    VTOCVSN1,R6                                                   
         BNE      MNT46             B IF VSNS DONT MATCH                        
         CW,R9    VTOCVSN2,R6                                                   
         BNE      MNT46             B IF VSNS DONT MATCH                        
*                                                                               
*        VSNS MATCH IN A LEGAL VTOC                                             
*        R1       DCT INDEX                                                     
*        R3       TSPACE ADDRESS FOR CONTEXT                                    
*        R6, R14  BB ADDRESS FOR VTOC READS                                     
*        R12      CURRENT VTOC SECTOR NR ( 0 )                                  
*        R15      BB CONTROL WORD                                               
*        R0       0 (FLAG FOR MOUNT, NOT UNMOUNT)                               
*                                                                               
         LI,R7    VTOCALOC          POINT TO FIRST PACKET                       
         LW,R13   VTOCNAA,R6        NR OF AREAS ON PACK                         
         BEZ      MNT40             B IF NONE, ERROR                            
         LW,R8    VTOCNDS,R6        NR OF DIRECTORY SECTORS                     
         BEZ      MNT40             B IF NONE, ERROR                            
         STB,R8   R14               SAVE IT                                     
         LW,R6    VTOCWPS,R6        NR WORDS PER SECTOR                         
         AI,R6    -SIZAPCKT         LAST WORD FOR PACKET START                  
*                                                                               
*        FIND AN AVAILABLE MD ENTRY                                             
*                                                                               
         LI,R2    0                 MD TABLES INDEX                             
MNT33    RES      0                                                             
         LC       MDFLAG,R2         GET SOME FLAGS                              
         BCR,USERACC  MNT38         B IF NOT A MOUNTABLE AREA                   
         BCS,ALLOCCC  MNT38         B IF ALREADY IN USE                         
         CI,R2    XAINDEX                                                       
         BE       MNT38             CANT USE XA SPACE, RADEDIT FREAKS           
*                                                                               
*        TRY TO INSERT NEXT AREA FROM PACK                                      
*                                                                               
         LCI      SIZAPCKT                                                      
         LM,R8    *R14,R7           LOAD PACKET (MAX SIZE 6 WORDS)              
         LH,R9    R8                AREA NAME                                   
         LW,R5    K:NUMDA           NR OF AREA NAMES TO COMPARE                 
MNT34    RES      0                                                             
         CH,R9    MDNAME,R5                                                     
         BE       MNT41             B IF ALREADY MOUNTED                        
         AI,R5    -1                                                            
         BGEZ     MNT34                                                         
*                                                                               
*        AREA NOT ALREADY MOUNTED. INSERT MD ENTRY                              
*                                                                               
         DISABLE                                                                
         STW,R10  MDBOA,R2          AREA START                                  
         STW,R11  MDEOA,R2          AREA END                                    
         STH,R9   MDNAME,R2         AREA NAME                                   
         STB,R1   MDDCTI,R2         AREA DCT INDEX                              
         LB,R10   DCTDISCI,R1                                                   
         STB,R10  MDDISCI,R2        DISC TYPE INDEX                             
         AND,R8   M3                WRITE PROTECTION CODE                       
         AI,R8    ALLOC+USERA       ALLOCATED+USER AREA                         
         STB,R8   MDFLAG,R2         AREA FLAGS                                  
         LCI      2                                                             
         LM,R8    MNTVSN,R3                                                     
         STD,R8   MDVSN,R2          VSN                                         
         ENABLE                                                                 
*                                                                               
*        AREA IS NOW ACTIVE                                                     
*                                                                               
         AI,R13   -1                                                            
         BNEZ     MNT37             B IF MORE AREAS ON PACK                     
*                                                                               
         DISABLE                                                                
         LB,R8    DCTRBM,R1         GET AREA FLAGS                              
         OR,R8    X2                                                            
         EOR,R8   X2                TURN OFF DED,R FLAG                         
         STB,R8   DCTRBM,R1         PUT FLAGS BACK                              
         B        MNTEX1                                                        
*                                                                               
*        PROCESS NEXT PACKET                                                    
*                                                                               
MNT37    RES      0                                                             
         AI,R7    SIZAPCKT          TO NEXT PACKET                              
         CW,R7    R6                                                            
         BLE      MNT38             B IF IN SAME VTOC SECTOR                    
*                                                                               
*        PROCESS NEXT VTOC SECTOR                                               
*                                                                               
         MTB,-1   R14                                                           
         BEZ      MNT40             B IF MORE AREAS, NO MORE VTOC               
         AI,R12   1                 GRAN NR FOR NEXT VTOC READ                  
MNT36    CAL1,1   MNTRD,R3          READ NEXT VTOC SECTOR                       
         LI,R7    0                 R7 POINTS TO START                          
*                                                                               
*        FIND ANOTHER AVAILABLE MD ENTRY                                        
*                                                                               
MNT38    RES      0                                                             
         AI,R2    1                                                             
         CW,R2    K:NUMDA                                                       
         BLE      MNT33             B IF THERE ARE MORE MD ENTRIES              
         B        MNT43             B IF MORE AREAS, NO MORE ENTRIES            
         PAGE                                                                   
*                                                                               
*        MOUNT/UNMOUNT ERROR RECOVERY                                           
*                                                                               
MNT40    RES      0                 VTOC ERROR                                  
         LW,R12   KVTOC             TEXT INSERT FOR MSG                         
         B        MNT44                                                         
*                                                                               
MNT41    RES      0                 DUPLICATE AREA NAME                         
         LW,R12   BLANKS                                                        
         STH,R9   R12               TEXT INSERT (AREA NAME)                     
         B        MNT44                                                         
*                                                                               
MNT43    RES      0                 MD FULL ERROR                               
         LW,R12   KFULL             TEXT INSERT                                 
*                                                                               
MNT44    RES      0                                                             
         STW,R12  MNTERRA,R3        TEXT INSERT IN ERR MSG                      
         LI,R12   MNTMSG2           MESSAGE POINTER                             
         B        MNTEX2                                                        
*                                                                               
MNT46    RES      0                 VSN OR DPNDD NOT FOUND                      
         LCI      2                                                             
         LM,R8    MNTVSN,R3                                                     
         CD,R8    BLANKS                                                        
         BNE      %+4               B IF VSN KNOWN                              
         LCI      2                                                             
         LM,R8    MNTDEV,R3         ASSUME DEV WAS ACTUALLY VSN                 
         STM,R8   MNTVSN,R3                                                     
         LI,R12   MNTMSG1           MESSAGE POINTER                             
         LI,R1    0                 CLEAR DCT INDEX. AVOID DEMOUNT              
         B        MNTEX2                                                        
*                                                                               
MNTERR   RES      0                 ERROR IN A CAL                              
         CI,R8    MNT3A+1                                                       
         BE       MNTKYERR          B IF CANT ASSIGN DCB                        
         CI,R8    MNT4+1                                                        
         BE       MNT5              B IF CANT READ DURING VSN SEARCH            
         CI,R8    MNT30A+1                                                      
         BE       MNTKYERR          B IF CANT ASSIGN DCB                        
         CI,R8    MNT31+1                                                       
         BE       MNT40             B IF CANT READ NEW PACK VTOC                
         CI,R8    MNT36+1                                                       
         BE       MNT40             B IF CANT READ NEW PACK VTOC                
         B        *R8               CLOSE DCB ERROR (IGNORE)                    
         PAGE                                                                   
*                                                                               
*        EXIT PATHS FOR MOUNT/UNMOUNT                                           
*                                                                               
MNTKYERR RES      0                 KEY ERROR DISCOVERED, CLEANUP RQD           
         LI,R0    3                 FLAG FOR KEY ERR EXIT                       
MNTEX1   RES      0                 NORMAL EXIT (NO ERR MSG)                    
         LI,R12   0                 RESET ERR MSG POINTER                       
*                                                                               
MNTEX2   RES      0                 ALL EXITS                                   
         CAL1,1   MNTCLS,R3         CLOSE ANYTHING THATS OPEN                   
*                                                                               
         LW,R6    R15                                                           
         BEZ      %+2               B IF NO BLOCKING BUF                        
         BAL,R11  RELADBUF          RELEASE BLOCKING BUF                        
         CI,R0    3                                                             
         BE       KEYERR            B IF KEY ERR EXIT                           
         CI,R12   0                                                             
         BE       KEY8EXIT          B IF NORMAL EXIT                            
         AW,R12   R3                BIAS POINTER INTO CONTEXT                   
         CAL1,2   MNTTYPE,R3        TYPE ERROR MSG                              
         CI,R1    0                                                             
         BE       KEY8EXIT          B IF NO PARTIALLY MNTED PACK                
         LI,R0    4                 FLAG FOR ABORT DEMOUNT                      
         LI,R15   0                 NO BLOCKING BUFFER                          
         B        MNT10             B TO DEMOUNT                                
*                                                                               
*                                                                               
*                                                                               
         TITLE    '** KEY8 - DISK STATUS/IDLE KEYINS **'                        
*                                                                               
*                                                                               
*        DPSTATUS/DPIDLE                                                        
*                                                                               
*                                                                               
DPSTATUS RES      0                 ENTRY FOR DPSTATUS                          
         LI,R0    4*(DPMF-DPMSG)-1                                              
         LI,R1    4*DPMSG                                                       
         STB,R0   *R3,R1            SET MSG BYTE LGTH                           
         LI,R0    0                 FLAG FOR STATUS                             
         B        DPS0                                                          
*                                                                               
DPIDLE   RES      0                 ENTRY FOR DPIDLE                            
         LI,R0    4*(DPMD-DPMSG)-1                                              
         LI,R1    4*DPMSG                                                       
         STB,R0   *R3,R1            SET MSG BYTE LGTH                           
         LI,R0    1                 FLAG FOR IDLE ONLY                          
*                                                                               
DPS0     RES      0                 DETERMINE OC OR LL OUTPUT                   
*                                                                               
         LW,R15   Y02               DEFAULT TO TYPE OUTPUT                      
         CI,R6    2                                                             
         BGE      DPS1              B IF NO MORE PARAMETERS                     
         LW,R15   Y01               PRINT FPT CODE                              
         LI,R11   1                 SCAN ALPHA STRING                           
         PUSH     R0                                                            
         BAL,R14  SCAN                                                          
         PULL     R0                                                            
         CI,R6    2                                                             
         BL       KEYERR            COMMAND SYNTAX/STRUCTURE ERR                
         CW,R8    KLL                                                           
         BNE      KEYERR            NOT A LEGAL KEYWORD                         
DPS1     RES      0                                                             
         STW,R15  DPSFPT,R3         SET PRINT/TYPE FPT CODE                     
         AWM,R3   DPSFPT+2,R3       BIAS MSG POINTER IN FPT                     
*                                                                               
         CAL1,2   DPSFPT,R3         OUTPUT HEADER                               
         PAGE                                                                   
*                                                                               
*        SCAN DEVICES FOR PACKS                                                 
*                                                                               
         LH,R1    DCT1              NR OF DEVICES                               
DPS2     RES      0                                                             
         LD,R8    DCT16,R1          GET DEVICE NAME                             
         SLD,R8   8                                                             
         AND,R8   M16                                                           
         CI,R8    'DP'                                                          
         BE       DPS10             B IF A DISKPACK                             
*                                                                               
*        NEXT DEVICE                                                            
*                                                                               
DPS5     RES      0                                                             
         BDR,R1   DPS2                                                          
*                                                                               
         B        KEY8EXIT                                                      
         PAGE                                                                   
*                                                                               
*        GOT A DEVICE                                                           
*                                                                               
DPS10    RES      0                                                             
         SLD,R8   16                                                            
         OR,R9    BLANKS                                                        
         LCI      2                                                             
         STM,R8   DPMA,R3           SET DEVICE NAME IN MSG                      
         LM,R8    BLANKS                                                        
         STM,R8   DPMB,R3           INITIALLY BLANK MOD NR FIELD                
         STM,R8   DPMC,R3           INITIALLY BLANK STATUS FIELD                
         STM,R8   DPMD,R3           INITIALLY BLANK VSN FIELD                   
         STM,R8   DPME,R3           INITIALLY BLANK AREA NAME FIELD             
         LW,R8    DCTMOD,R1                                                     
         STW,R8   DPMB,R3           SET MODEL NR                                
         LW,R8    KFREE                                                         
         STW,R8   DPMC,R3           INITIALLY ASSUME FREE DEVICE                
*                                                                               
*        TO DETERMINE DEVICE STATE, FIND A SYSTEM AREA (UNUSABLE),              
*        A PRIVATE AREA (BUSY OR IDLE), OR                                      
*        NO AREA (FREE)                                                         
*                                                                               
         LI,R2    0                 INDEX THRU MD                               
DPS12    RES      0                                                             
         CB,R1    MDDCTI,R2                                                     
         BNE      DPS15             B IF THIS AREA ON WRONG DEVICE              
         LC       MDFLAG,R2                                                     
         BCR,ALLOCCC  DPS15         B IF THIS AREA NOT ALLOCATED                
         BCR,USERACC  DPS5          B IF THIS AREA IS SYSTEM                    
         CI,R2    XAINDEX                                                       
         BNE      DPS20             B IF NOT XA: FOUND A PRIV PACK              
         B        DPS5              CANT USE XA AREA AS PRIVATE                 
DPS15    RES      0                                                             
         AI,R2    1                                                             
         CW,R2    K:NUMDA                                                       
         BLE      DPS12             B IF MORE AREAS TO CHECK                    
*                                                                               
*        FREE DEVICE FOUND                                                      
*                                                                               
         CAL1,2   DPSFPT,R3         PRINT LINE                                  
         B        DPS5              NEXT DEVICE                                 
         PAGE                                                                   
*                                                                               
*        PRIVATE DEVICE FOUND                                                   
*                                                                               
DPS20    RES      0                                                             
         LW,R8    KIDLE                                                         
         STW,R8   DPMC,R3           ASSUME DEVICE IS IDLE                       
         LD,R8    MDVSN,R2                                                      
         LCI      2                                                             
         STM,R8   DPMD,R3           SET VSN IN MSG                              
*                                                                               
*        CHECK FOR OPEN FILES (BUSY) OR NONE (IDLE)                             
*                                                                               
         LH,R4    RFT#              INDEX THRU RFT                              
DPS22    RES      0                                                             
         LD,R8    RFT1,R4                                                       
         BEZ      DPS25             B IF RFT ENTRY UNUSED                       
         LB,R2    RFT8,R4           GET MD INDEX FOR FILE                       
         CB,R1    MDDCTI,R2                                                     
         BE       DPS30             B IF OPEN FILE ON SAME DEV                  
DPS25    RES      0                                                             
         BDR,R4   DPS22             NEXT FILE                                   
*                                                                               
*        IDLE DEVICE FOUND                                                      
*                                                                               
         CAL1,2   DPSFPT,R3         PRINT LINE                                  
         LW,R0    R0                                                            
         BEZ      DPS40             B IF DPSTATUS TO LIST AREAS                 
         B        DPS5              IF DPIDLE, NEXT DEVICE                      
         PAGE                                                                   
*                                                                               
*        BUSY DEVICE FOUND                                                      
*                                                                               
DPS30    RES      0                                                             
         LW,R0    R0                                                            
         BNEZ     DPS5              IF DPIDLE, NEXT DEVICE                      
         LW,R8    KBUSY                                                         
         STW,R8   DPMC,R3           CHANGE STATUS TO BUSY                       
         CAL1,2   DPSFPT,R3         PRINT LINE                                  
*                                                                               
*        LIST AREAS ON DEVICE                                                   
*                                                                               
DPS40    RES      0                                                             
         LD,R8    BLANKS                                                        
         LCI      2                                                             
         STM,R8   DPMA,R3           BLANK OUT DEVICE NAME                       
         STM,R8   DPMB,R3           BLANK OUT MOD NR                            
         STM,R8   DPMC,R3           BLANK OUT STATUS                            
         STM,R8   DPMD,R3           BLANK OUT VSN                               
*                                                                               
         LI,R2    0                 INDEX THRU MD                               
DPS42    RES      0                                                             
         CB,R1    MDDCTI,R2                                                     
         BNE      DPS45             B IF DIFFERENT DEVICE                       
         LC       MDFLAG,R2                                                     
         BCR,ALLOCCC  DPS45         B IF AREA NOT ALLOCATED                     
         CI,R2    XAINDEX                                                       
         BE       DPS45             IGNORE XA                                   
         LH,R8    MDNAME,R2         GET AREA NAME                               
         LW,R9    YFFFF                                                         
         LS,R8    BLANKS            FIX IT READABLE                             
         STW,R8   DPME,R3           PUT IT IN MSG                               
         CAL1,2   DPSFPT,R3         PRINT LINE                                  
DPS45    RES      0                                                             
         AI,R2    1                 NEXT AREA                                   
         CW,R2    K:NUMDA                                                       
         BLE      DPS42             B IF MORE AREAS                             
         B        DPS5              NEXT DEVICE                                 
         TITLE    '** KEY8 - CONTEXT AREA PROTOTYPE **'                         
*                                                                               
*                                                                               
*                                                                               
MNTDATA  RES      0                                                             
         DATA     0                 SAVES A FLAG                                
*                                                                               
MNTDEV   EQU      %-MNTDATA         DEVICE NAME                                 
         DATA     0,0                                                           
*                                                                               
MNTRD    EQU      %-MNTDATA         FPT TO READ VTOCS                           
         GEN,8,24 X'10',MNTDCB                                                  
         DATA     P1+P2+P3+P4+P8+F3                                             
         PZE      MNTERR            ERROR ADDR                                  
         PZE      MNTERR            ABNORMAL ADDR                               
         PZE      *R14              BUFFER ADDRESS                              
         DATA     1024                                                          
         PZE      *R12              GRAN NR                                     
*                                                                               
MNTCLS   EQU      %-MNTDATA         CLOSE DCB                                   
         GEN,8,24 X'15',MNTDCB                                                  
         DATA     P1+P2                                                         
         PZE      MNTERR            ERROR ADDR                                  
         PZE      MNTERR            ABNORMAL ADDR                               
*                                                                               
MNTDCB   EQU      %-MNTDATA         DCB FOR VTOC READS                          
         GEN,8,24  5,3                                                          
         GEN,8,24  0,0              NRT, REST SET BY M:ASSIGN                   
         DATA     0                                                             
         PZE      MNTERR                                                        
         PZE      MNTERR                                                        
*                                                                               
MNTTYPE  EQU      %-MNTDATA         FPT TO TYPE ERROR MSG                       
         GEN,8,24 2,0                                                           
         DATA     P1+F3                                                         
         PZE      *R12              MESSAGE ADDRESS                             
*                                                                               
MNTASN   EQU      %-MNTDATA         ASSIGN DCB                                  
         GEN,8,1,23 X'08',1,MNTDCB                                              
         DATA     P1+P3                                                         
         PZE      MNTERR            ERROR ADDR                                  
         PZE      R12               DEV NAME BUFFER                             
*                                                                               
MNTMSG1  EQU      %-MNTDATA         DEV/VSN NOT FOUND MSG                       
         GEN,8,24 BA(MNTMSG1E)-BA(%)-1,'!! '                                    
MNTVSN   EQU      %-MNTDATA         VSN INSERT AND SAVE LOC                     
         TEXT     '        '        8 BYTES                                     
         TEXT     ' NOT FOUND '                                                 
MNTMSG1E RES      0                                                             
*                                                                               
MNTMSG2  EQU      %-MNTDATA         ASSORTED MOUNT ERRORS MSG                   
         GEN,8,24 BA(MNTMSG2E)-BA(%)-1,'!! '                                    
         TEXT     'MOUNT ERROR:'                                                
MNTERRA  EQU      %-MNTDATA         INSERT FOR ERROR IDENTIFIER                 
         TEXT     '    '            4 BYTES                                     
MNTMSG2E RES      0                                                             
*                                                                               
DPSFPT   EQU      %-MNTDATA         FPT FOR DPSTATUS REPORT                     
         DATA     0                 EITHER PRINT OR TYPE                        
         DATA     P1+F3                                                         
         PZE      DPMSG             MESSAGE BUFFER                              
*                                                                               
DPMSG    EQU      %-MNTDATA         DPSTATUS MSG BUFFER                         
*                                   INITIALLY THE HEADER TEXT                   
         TEXT     '    '            4 BYTES (1ST IS SET TO COUNTER)             
DPMA     EQU      %-MNTDATA         INSERT DEVICE NAME                          
         TEXT     'DEVICE  '                                                    
DPMB     EQU      %-MNTDATA         INSERT MODEL NR                             
         TEXT     'MODEL   '                                                    
DPMC     EQU      %-MNTDATA         INSERT DEVICE STATUS                        
         TEXT     'STATUS  '                                                    
DPMD     EQU      %-MNTDATA         INSERT VSN                                  
         TEXT     'VSN     '                                                    
DPME     EQU      %-MNTDATA         INSERT AREA NAME                            
         TEXT     'AREA'                                                        
DPMF     EQU      %-MNTDATA         END OF MESSAGE                              
*                                                                               
*        END OF CONTEXT PROTOTYPE                                               
*                                                                               
         PAGE                                                                   
*                                                                               
*        CONSTANTS                                                              
*                                                                               
NLBB     DATA     X'155A5A00'       NEWLINE, BANG, BANG                         
KVTOC    TEXT     'VTOC'                                                        
KFULL    TEXT     'FULL'                                                        
KFREE    TEXT     'FREE'                                                        
KIDLE    TEXT     'IDLE'                                                        
KBUSY    TEXT     'BUSY'                                                        
KLL      TEXT     'LL  '                                                        
*                                                                               
         FIN                        #PRIV                                       
         OLAYEND                                                                
         END                                                                    
