*                                                                     *         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *         
*                                                                     *         
*                                                                     *         
*                                                                     *         
*        K E Y - I N   P A R T   N I N E                              *         
*                                                                     *         
*                                                                     *         
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *         
*                                                                     *         
         PCC      0                                                             
         SPACE    2                                                             
         SYSTEM   SIG5P                                                         
         SYSTEM   OPTIONS                                                       
         SPACE    1                                                             
         DEF      KEY9              ENTRY                                       
         SPACE    1                                                             
         DEF      KEY9EXB           NORMAL EXIT                                 
         DEF      KEY9A04           KEY ERR EXIT                                
         SPACE    1                                                             
OLAYFLAG EQU      'KEY9'                                                        
         SYSTEM   CPRMON            SYSTEM DEFINITION BASE                      
         TITLE    '** KEY9 - CONTROL SECTION **'                                
         SPACE    2                                                             
*        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 KEY9 TABLE BASE                          
*        R6 = SCAN COMPLETION CODE FROM FIRST SCAN CALL                         
*        R7 = KEYIN TEXT POINTER AS REQUIRED FOR SCAN                           
         SPACE    2                                                             
KEY9     RES      0                                                             
         PUSH     R7                SAVE SCAN POINTER                           
         LI,R7    64                                                            
         BAL,R8   GETTEMP           GET TSPACE FOR CONTEXT                      
         B        KEY9NOTS          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                                   
         SPACE    2                                                             
KEY9NOTS RES      0                 NOT ENUF TSPACE                             
         PULL     R7                BALANCE STACK                               
         B        KEY9A04           GO TO KEY ERR EXIT                          
         SPACE    1                                                             
KEYERR   RES      0                 ERROR AFTER GETTEMP                         
         PULL     R7                RECOVER TSPACE POINTER                      
         BAL,R8   RELTEMP           RELEASE CONTEXT TSPACE                      
KEY9A04  B        KEY1A04           EXIT TO RETRY KEYIN                         
         SPACE    2                                                             
KEY9EXIT RES      0                 NORMAL EXIT                                 
         PULL     R7                RECOVER CONTEXT POINTER                     
         BAL,R8   RELTEMP           RELEASE CONTEXT TSPACE                      
KEY9EXB  B        CT1               EXIT TO CONTROL TASK                        
         TITLE    '** KEY9 - CONTROL TABLES **'                                 
         SPACE    2                                                             
*        KEYIN PROCESSOR START ADDRESSES                                        
*        HALF-WORD PER ENTRY                                                    
*        INDEXED BY KEYIN NUMBER, BIASED TO KEY9 TABLES                         
         SPACE    1                                                             
A91      RES      0                                                             
         DATA,2   GAP               GAP PROCESSING                              
         DATA,2   PMODEKEY          PREFMODE                                    
         BOUND    4                                                             
         SPACE    2                                                             
*        ADDRESS OF CONTEXT AREA INITIAL CONTENTS                               
*        WORD PER ENTRY                                                         
*        INDEXED BY KEYIN NUMBER, BIASED TO KEY9 TABLES                         
         SPACE    1                                                             
A92      RES      0                                                             
         DATA     GAPDATA           GAP                                         
         DATA     PMODEFPT          PMODEKEY                                    
#KEYINS  EQU      %-A92             NR OF KEYINS PROCESSED IN KEY9              
         TITLE    '** KEY9 - GAP PROCESSING '                                   
* TO MOVE GAP                                                                   
*        GAP (OFWA,XXXX),(NFWA,YYYY)                                            
         SPACE  1                                                               
* TO MOVE GAP AND CHANGE LENGTH                                                 
*        GPA (OFWA,XXXX),(NFWA,YYYY),(NLWA,ZZZZ)                                
          SPACE  1                                                              
* TO RELEASE GAP TO STM                                                         
*        GAP (OFWA,XXXX),REL                                                    
         SPACE   1                                                              
* TO RECOVER GAP FROM STM                                                       
*        GAP (OFWA,XXXX),REC                                                    
         SPACE 2                                                                
GAP      EQU      %                                                             
         CI,R6    0                                                             
         BE       KEYERR            B IF NO PARAMATERS                          
         SPACE    1                                                             
GAP10    RES      0                                                             
         CI,R6    2                                                             
         BE       GAP30             B IF NO MORE PARAMETERSS                    
         SPACE    1                                                             
         BAL,R13  GETOPT            GET NEXT PARAMETR SET                       
         GEN,8,24 (GAPOE-GAPOB)/2,GAPOB                                         
         B        KEYERR                                                        
         B        GAP20                                                         
         B        GAP21                                                         
         B        GAP22                                                         
         B        GAP23                                                         
         B        GAP24                                                         
         SPACE    1                                                             
GAP20    RES      0                 OLD FWA                                     
         STW,R8   0,R3                                                          
         B        GAP10                                                         
GAP21    RES      0                 NEW FWA                                     
         STW,R8   2,R3                                                          
         B        GAP10                                                         
GAP22    RES      0                 NEW LWA                                     
         STW,R8   3,R3                                                          
         B        GAP10                                                         
GAP23    RES      0                 RELEASE  GAP                                
         MTW,1    5,R3                                                          
         B        GAP10                                                         
GAP24    RES      0                 RECOVER GAP                                 
         MTW,-1   5,R3                                                          
         B        GAP10                                                         
         PAGE                                                                   
*        ALL PARAMETERS SET                                                     
*        SEARCH FOR GAP PARTITION                                               
*                                                                               
GAP30    RES      0                                                             
         MTW,0    0,R3              GAP FWA MUST ALWAYS BE SPECIFIED            
         BEZ      KEYERR                                                        
         LB,R4    K:RMPT                                                        
GAP31    LW,R13   PPT,R4                                                        
         LB,R13   R13                                                           
         AND,R13  XPPTTYPE                                                      
         CI,R13   PPTTYPE6          IS IT GAP PARTITION                         
         BNE      GAP34                                                         
         LD,R12   RMPT,R4                                                       
         CW,R12   0,R3              DOES FWA MATCH                              
         BE       GAP40                                                         
         MTW,0    5,R3              SEE IF RECOVER MODE                         
         BGEZ     GAP34                                                         
         CW,R13   0,R3              COULD BE EXCHANGED                          
         BE       GAP40                                                         
GAP34    BDR,R4   GAP31                                                         
         B        KEYERR            PARTITION NOT FOUND                         
*                                                                               
*        SET NEW GAP LIMITS                                                     
*                                                                               
GAP40    RES      0                                                             
         STW,13   1,R3                                                          
         MTW,0    5,R3              TEST MODE                                   
         BEZ      GAP90             B IF MOVE-GAP MODE                          
         LW,R6    2,R3              R6 = NFWA+NLWA                              
         AW,R6    3,R3                                                          
         BGZ      KEYERR            NEITHER ALLOWED IN REL/REC MODE             
         MTW,0    5,R3              RELEASE - RECOVER                           
         BLZ      GAP80             B IF RECOVER MODE                           
GAP70    RES      0                 RELEASE                                     
         XW,R12   13                                                            
         STD,12   RMPT,R4                                                       
         B        GAP91                                                         
GAP80    RES      0                 RECOVER                                     
         CW,12    13                                                            
         BL       %+2                                                           
         XW,12    13                                                            
         STD,12   RMPT,R4                                                       
         STW,R12  2,R3                                                          
         STW,R13  3,R3                                                          
         STW,R13  1,R3                                                          
         B        GAP91                                                         
GAP90    RES      0                 MOVE MODE                                   
         LW,R6    2,R3              R6 = NFWA+NLWA                              
         AW,R6    3,R3                                                          
         BEZ      KEYERR            MOVE REQUIRES EITHER NFWA OR NLWA           
         CW,12    13                IS GAP RELEASEED                            
         BG       KEYERR            YES, CANT MOVE GAP NOW                      
         MTW,0    2,R3              SEE IF NEW FWA                              
         BEZ      %+2                                                           
         LW,R12   2,R3              NEW FWA                                     
         MTW,0    3,R3              SEE IF NEW LWA                              
         BEZ      %+2                                                           
         LW,R13   3,R3              YES, USE IT                                 
         STD,R12  RMPT,R4                                                       
         B        GAP91                                                         
         PAGE                                                                   
*                                                                               
*        RELEASE UNUSED PAGES IN OLD GAP                                        
*                                                                               
GAP91    RES      0                 FIND STM PART PCT ADR                       
         LI,R7    1                                                             
GAP91E   RES      0                                                             
         LW,R6    PPT,R7                                                        
         LB,R6    R6                                                            
         AND,R6   XPPTTYPE                                                      
         CI,R6    PPTTYPE5                                                      
         BE       GAP91F                                                        
         AI,R7    1                                                             
         CB,R7    K:RMPT                                                        
         BLE      GAP91E                                                        
         B        %                 CRASH SYSTEM ERROR                          
GAP91F   RES      0                                                             
         LW,R7    PPT,R7            R7 = STM PCT ADDRESS                        
         MTW,0    5,R3               TEST MODE                                  
         BLZ      GAP92             RECOVER MODE,SKIP RELEASE                   
         LW,R2    0,R3              R2 = GAP OLD FWA                            
GAP91B   RES      0                                                             
         CLM,R2   R12                                                           
         BCR,9    GAP91A            B IF INSIDE NEW GAP RANGE                   
*                                   RELEASE THIS PAGE TO STM                    
         DISABLE                                                                
         DO1      #SIGMA9                                                       
         WD,0     X'47'             SET REAL EXTENDED                           
         DO       #SIGMA9M                                                      
         LPSD,0   PSDRE1                                                        
         BOUND    8                                                             
PSDRE1   DATA     %+2                                                           
         DATA     X'00800000'                                                   
         FIN       #SIGMA9M                                                     
         MTW,1    PCTFPAGE,R7       INC FREE PAGE CNT                           
         MTW,1    MMTPAGES          INC TOTAL PAGE COUNT                        
         LW,R0    PCTCHAIN,R7       R0 = OLD CHAIN HEAD                         
         STW,R2   PCTCHAIN,R7       R2  = NEW CHAIN HEAD                        
         STW,R0   *R2                                                           
         DO1      #SIGMA9                                                       
         WD,0     X'46'             RESET REAL EXTENDED                         
         DO       #SIGMA9M                                                      
         LPSD,0   PSDRE2                                                        
         BOUND    8                                                             
PSDRE2   DATA     %+2                                                           
         DATA     X'00000000'                                                   
         FIN       #SIGMA9M                                                     
         ENABLE                                                                 
GAP91A   RES      0                                                             
         AI,R2    512                                                           
         CW,R2    1,R3              OLD GAP LWA                                 
         BL       GAP91B                                                        
         MTW,0    5,R3              TEST MODE                                   
         BEZ      GAP92             GAP MOVE                                    
         BGZ      KEY9EXIT          RELEASE                                     
         BLZ      %                 RECOVER (INTERNAL ERROR)                    
         PAGE                                                                   
*                                                                               
*        GET NEEDED PAGES IN NEW GAP                                            
*                                                                               
GAP92    RES      0                                                             
         LW,R2    2,R3              R2 = GAP NEW FWA                            
GAP92H   RES      0                                                             
         DISABLE                                                                
         DO1      #SIGMA9                                                       
         WD,0     X'47'             GO TO REAL EXTENDED                         
         DO       #SIGMA9M                                                      
         LPSD,0   PSDRE3                                                        
         BOUND    8                                                             
PSDRE3   DATA     %+2                                                           
         DATA     X'00800000'                                                   
         FIN       #SIGMA9M                                                     
         LW,R1    PCTFPAGE,R7       LOOP INDEX                                  
         LW,R0    PCTCHAIN,R7       HEAD                                        
         LI,R4    PCTCHAIN          R4 = HEAD IS LAST LINK                      
         AW,R4    R7                                                            
GAP92C   RES      0                 SEARCH STM CHAIN FOR PAGE                   
         CW,R2    R0                                                            
         BE       GAP92D            FOUND                                       
         LW,R4    R0                SAVE LAST LINK                              
         LW,R0    *R0                                                           
         BDR,R1   GAP92C                                                        
*        NOT FOUND IN CHAIN                                                     
         MTW,1    6,R3              SET FLAG = PAGES NOT AVAIL                  
         B        GAP92G                                                        
GAP92D   RES      0                 FOUND, REMOVE FROM CHAIN                    
         LW,R5    *R0               R5= PONTER IN LAST PAGE                     
         STW,R5   *R4               SAVE IN LAST PAGE                           
         MTW,-1   PCTFPAGE,R7       DEC FREE PAGE CNT                           
         MTW,-1   MMTPAGES          DEC TOTAL PAGE COUNT                        
GAP92G   RES      0                                                             
         DO1      #SIGMA9                                                       
         WD,0     X'46'             TURN EXT. MODE OFF                          
         DO       #SIGMA9M                                                      
         LPSD,0   PSDRE4                                                        
         BOUND    8                                                             
PSDRE4   DATA     %+2                                                           
         DATA     X'00000000'                                                   
         FIN       #SIGMA9M                                                     
         ENABLE                                                                 
*                                                                               
         AI,R2    512               GO TO NEXT PAGE                             
         CW,R2    3,R3              END OF NEW GAP                              
         BL       GAP92H                                                        
         MTW,0    6,R3              WERE SOME PAGES NOT AVAIL?                  
         BEZ      KEY9EXIT                                                      
         CRASH    ' SOME STM PAGES UNAVAILABLE'                                 
         PAGE                                                                   
         BOUND    8                                                             
GAPOB    RES      0                                                             
         TEXT     'OFWA'            OLD FWA                                     
         GEN,8,24 X'02',0                                                       
         TEXT     'NFWA'            NEW FWA                                     
         GEN,8,24 2,0                                                           
         TEXT     'NLWA'            NEW LWA                                     
         GEN,8,24 X'02',0                                                       
         TEXT     'REL '            RELEASE FLAG                                
         DATA     0                                                             
         TEXT     'REC '            RECOVER FLAG                                
         DATA     0                                                             
GAPOE    RES      0                                                             
         SPACE     1                                                            
GAPDATA  DATA     0                                                             
         DATA     0                                                             
         DATA     0                                                             
         DATA     0                                                             
         DATA     0                                                             
         DATA     0                                                             
         DATA     0                                                             
         SPACE     1                                                            
         TITLE    '** KEY4 - PREFMODE KEY-IN **'                                
         SPACE    2                                                             
*                REL        ,ALL                                                
*        PRE   -------  | ---------------  ~                                    
*                REC        ,(PBA,XXXX)                                         
         SPACE    2                                                             
PMODEKEY RES      0                                                             
         CI,R6    0                                                             
         BE       KEYERR            B IF NO PARAMETERS                          
          SPACE 1                                                               
PM10     RES      0                                                             
         CI,R6    2                                                             
         BE       PM50              B IF NO MORE PARAMETERS                     
          SPACE 1                                                               
         BAL,R13  GETOPT            GET NEXT PARAMETER GROUP                    
         GEN,8,24 (PMO%-PMODEOPT)/2,PMODEOPT                                    
         B        KEYERR                                                        
         B        PM20              REL(EASE)                                   
         B        PM20              REC(OVER)                                   
         B        PM30              ALL                                         
         B        PM30              PBA,XXXXX                                   
          SPACE 1                                                               
PM20     RES      0                                                             
         LW,R9    Y00C              MASK FOR REL/REC                            
         B        PM40              B TO SET FLAG                               
          SPACE 1                                                               
PM30     RES      0                                                             
         LW,R9    X7FFFF            MASK FOR PBA                                
          SPACE 1                                                               
PM40     RES      0                                                             
         STS,R8   0,R3              SET FIELD                                   
         B        PM10              GET NEXT PARAMETER                          
          SPACE 1                                                               
PM50     RES      0                                                             
         CAL1,7   0,R3                                                          
         B        KEY9EXIT                                                      
          SPACE 1                                                               
PMODEFPT DATA     X'50800000'                                                   
         DATA     P1                                                            
         DATA     KEYERR            ERROR ADDRESS                               
          SPACE 1                                                               
         BOUND    8                                                             
PMODEOPT RES      0                                                             
         TEXT     'REL '                                                        
         GEN,8,24 0,X'C00000'                                                   
         TEXT     'REC '                                                        
         GEN,8,24 0,X'800000'                                                   
         TEXT     'ALL '                                                        
         GEN,8,24 0,0                                                           
         TEXT     'PBA '                                                        
         GEN,8,24 X'82',0                                                       
PMO%     RES      0                                                             
         TITLE    '** KEY9 - GET OPTION SUBROTUTINE **'                         
*                                                                               
* CALL IS                                                                       
*        BAL,R13  GETOPT                                                        
*        GEN,8,24 #OPT,OPTIONLIST                                               
* WHERE                                                                         
*        #OPT IS THE NUMBER OF OPTIONS AVAILABLE FOR THE KEYIN                  
*                                                                               
*        OPTIONLIST IS THE ADDRESS OF A DW TABLE WITH                           
*        ONE DW ENTRY/OPTION AS FOLLOWS:                                        
*                                                                               
*        WORD 1: OPTION KEYWORD IN EBCDIC                                       
*                 (LEFT JUSTIFIED - BLANK FILLED)                               
*                                                                               
*        WORD 2: PARAMATER CONTROL WORD AS FOLLOWS:                             
*                 BITS 0-7                                                      
*                   00 NO PARAMETER ALLOWED                                     
*                     ON RETURN R8 WILL HAVE THE CONTENTS OF THIS WORD          
*                                                                               
*                   01 CONVERT TO EBCDIC                                        
*                   02 CONVERT TO HEX                                           
*                   04 CONVERT TO DECIMAL                                       
*                                                                               
*                   8X IF NO PARAMETER TETURN                                   
*                      CONTENTS OF THIS WORD IN R8                              
*                      IF PARAMETER IS PRESET,                                  
*                      CONVERT ACCORDING TO X AND RETURN IT                     
*                      IN R8. (X AS ABOVE)                                      
*                                                                               
* RETURN IS TO CALL LOCATION+(N+2)                                              
*        WHERE N IS 0 IF ANY ERRORS ARE DETECTED                                
*        OTHERWIZE, N WILL BE THE INDEX INTO THE OPTION LIST                    
*        TABLE CORRESPONDING TO THE OPTION BEING PROCESSED.                     
*                                                                               
* UESE REGISTRS R0,R5-R11                                                       
* USES SCAN ROUTINE                                                             
* NOTE: CAN'T BE MOVED TO KEYSCN BECAUSE OF PARAMETER LIST IN CORE              
*                                                                               
GETOPT   PUSH     4,R1              SAVE R1-R4                                  
         LI,R11   1                                                             
         BAL,R14  SCAN              GET KEYWORD                                 
         CI,R6    0                                                             
         BGE      GO02              B IF NO SCAN ERROR                          
GO01     AI,R13   1                 TAKE ERROR EXIT                             
         PULL     4,R1                                                          
         B        GETOPTX                                                       
GO02     LI,R1    0                 OPTION SEARCH INDEX                         
         LW,R0    *R13              GET ADDRES OF OPTION LIST                   
GO03     LD,R2    *R0,R1            R2 = OPTION DESCRIPTOR                      
         CW,R8    R2                IS IT THIS OPTION                           
         BE       GO04              B IF YES                                    
         AI,R1    1                 MOVE TO NEXT OPTION                         
         CB,R1    *R13              LIMIT REACHED YET                           
         BL       GO03              B IF NO                                     
         B        GO01              YES, TAKE ERROR EXIT                        
GO04     LB,R11   R3                GET CONVERT TYPE                            
         BEZ      GO09              B IF NO PARAMETER                           
         CI,R11   X'80'             IS IT A NO PARAMETR OPTION                  
         BANZ     GO010             B IF YES                                    
GO05     AND,R11  M7                                                            
         BAL,R14  SCAN              GET  PARAMETER                              
         CI,R6    0                                                             
         BL       GO01              B IF SCAN ERROR                             
GO07     AI,R13   2                 POINT TO FIRST EXIT                         
         AW,R13   R1                NOW POINT TO CORRECT OPTION EXIT            
         PULL     4,R1                                                          
GETOPTX  B        *R13              RETURN                                      
GO09     LW,R8    R3                GET RETURN PARAMETER                        
         B        GO07                                                          
GO010    LW,R8    R3                GET DUMMY PARAMETER                         
         CI,R6    0                                                             
         BG       GO07              B IF END OF PAREN FIELD                     
         B        GO05              PROCESS FIRST OPTION                        
         OLAYEND                                                                
         END                                                                    
