************************************************************                    
*                                                          *                    
*                                                          *                    
*        K E Y - 5    K E Y - I N  P R O C E S S O R       *                    
*                                                          *                    
*                                                          *                    
************************************************************                    
         PCC      0                                                             
         SPACE    2                                                             
         SYSTEM   SIG5P                                                         
         SYSTEM   OPTIONS                                                       
         SPACE    2                                                             
         DEF      A:KEY5                                                        
         DEF      KEY5              ENTRY POINT FROM KEY1                       
         DEF      KEY5EXB                                                       
         DEF      KEY5A04                                                       
         SPACE    2                                                             
OLAYSIZ  EQU      512                                                           
*                                                                               
OLAYFLAG EQU      'KEY5'                                                        
         SYSTEM   CPRMON                                                        
*                                                                               
*                                                                               
         TITLE    '** KEY5 - CONTROL SECTION **'                                
*                                   RUNS UNDER RBM CONTROL TASK AS AN           
*                                   OVERLAY. PROCESSES KEY-INS AS AN            
*                                   EXTENSION OF THE KEY1 OVERLAY.              
KEY5     RES      0                                                             
A:KEY5   EQU      KEY5                                                          
KEYIN    EQU      Y04               KEYIN CONTROL BIT                           
*                                   ENTER HERE FOR PART 5 OF KEY-IN OLAY        
*                                                                               
*                                                                               
*        AT ENTRY,                                                              
*        R2=KEYIN INDEX                                                         
*        R6=SCAN RETURN CODE FROM FIRST SCAN CALL                               
*        R7=KEYIN TEXT POINTERS AS REQUIRED FOR SCAN ROUTINE                    
*                                                                               
*                                                                               
A01      RES      0                 ENTRY FOR THIS OVERLAY                      
         PUSH     R7                SAVE INDEX INTO KEYIN BUFFER                
         LI,R7    63                GET TSPACE FOR FPT'S                        
         BAL,R8   GETTEMP                                                       
         B        KEY5NOTS          NO TSPACE. ERROR.                           
         ENABLE                     SPACE FOUND                                 
         LW,R3    R7                KEEP TSACE PTR IN R3                        
         PULL     R7                RESTORE INDEX INTO DEYIN BUFFER             
         PUSH     R3                SAVE TEMP SPACE POINTER FOR EXIT            
         LW,R4    A92,R2            MOVE FPT FOR INDICATED KEYIN                
         BEZ      A01A              NO SPACE TO MOVE                            
         LI,R5    31                NUM OF FPT WORDS TO MOVE                    
MOVFPT   LW,R8    *R4,R5                                                        
         STW,R8   *R3,R5                                                        
         BDR,R5   MOVFPT                                                        
         LW,R8    *R4               GET LAST WORD TO MAKE ALL 32                
         STW,R8   *R3               PUT IN TEMP SPACE                           
A01A     LH,R8    A91,R2            GET ADDRESS TO PROCESS KEYIN                
         B        *R8               GO TO PROPER ROUTINE                        
*                                                                               
*                                                                               
*                                                                               
KEY5NOTS PULL     R7                ERROR EXIT: NO TSPACE                       
         B        KEY5A04                                                       
KEY5ERR  RES      0                 ERROR ENTRY, TYPE 'KEY ERROR'               
A04      EQU      KEY5ERR           OLD NAME FOR ERROR EXIT                     
         PULL     R7                                                            
         BAL,R8   RELTEMP                                                       
*                                                                               
KEY5A04  B        KEY1A04           RET TO KEY1 TO TYPE ERR MSG                 
*                                                                               
*                                                                               
KEY5EXIT RES      0                 NORMAL EXIT                                 
         PULL     R7                                                            
         BAL,R8   RELTEMP           RELEASE TSPACE                              
KEY5EXB  B        CT1               RETURN TO CONTROL TASK                      
         PAGE                                                                   
         SPACE    2                                                             
*                                                                               
A91      EQU      %                                                             
*                                                                               
*        DATA,2   HALF-WORD START ADDRESSES    OF KEY-IN                        
*                 PROCESSING ROUTINES                                           
*                                                                               
*                                                                               
         DO1      #MEDIA                                                        
         DATA,2   MEDIAKEY          MEDIA KEY-IN PROCESSOR                      
*                                                                               
         DO       #TJE                                                          
         DATA,2   ONKEY             ON                                          
         DATA,2   OFFKEY            OFF                                         
         DATA,2   SENDKEY           SEND                                        
         DATA,2   LOGONKEY          LOGON                                       
         FIN      #TJE                                                          
*                                                                               
*                                                                               
         BOUND    4                                                             
A92      EQU      %                                                             
*        DATA     ADDRESSES OF FPT'S FOR THE PROCESSORS                         
*                                                                               
*                 SHOULD BE ON A DOUBLE WORD BOUNDARY (BOUND 8)                 
*                    ( BUT MOVE CODE DOESN'T MAKE USE OF THIS. )                
*                                                                               
*                                                                               
*                 MUST BE IN SAME ORDER AS ABOVE TABLE                          
*                  IF NO FPT EXISTS, THE CORRESPONDING WORDS IS                 
*                  SET TO ZERO TO INDICATE NO MOVE                              
*                                                                               
*                                                                               
        DO1      #MEDIA                                                         
         DATA     MEDFPTBG          START OF MEDIA'S FPTS                       
         DO       #TJE                                                          
         DATA     0                 ON                                          
         DATA     0                 OFF                                         
         DATA     0                 SEND                                        
         DATA     LOGFPT            LOGON                                       
         FIN      #TJE                                                          
*                                                                               
*                                                                               
#KEYINS  EQU      %-A92             NUMBER OF KEYINS IN THIS OVERLAY            
         TITLE    '** KEY5 - GET OPTION SUBROUTINE **'                          
*        ROUTINE TO FETCH NEXT OPTION FOR A KEYIN                               
*        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              
*                                   DOUBLE WORD TABLE THAT HAS ONE              
*                                   ENTRY PER OPTION AS FOLLOWS:                
*                                                                               
*                                     FIRST WORD:  THE OPTION KEYWORD           
*                                                  IDENTIFIER  IN EBCDIC        
*                                                  LEFT   JUSTIFIED BLANK       
*                                                  FILLED                       
*                                                                               
*                                     SECOND WORD: PARAMETER CONTROL            
*                                     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 - RETURN          
*                                            CONTENTS  OF THIS WORD IN          
*                                            R8.   IF PARAMETER IS PRESENT      
*                                            CONVERT  ACCORDING TO X AND        
*                                            AND  RETURN IT IN R8.  X           
*                                            IS  DESCRIBED ABOVE.               
*        RETURN IS TO CALL LOCATION +(N+2)                                      
*                 WHERE N IS 0 IF ANY ERRORS ARE DETECTED                       
*                 IF NO ERRORS N WILL BE THE INDEX                              
*                 INTO THE OPTION LIST TABLE CORRESPONDING                      
*                 TO THE OPTION BEING PROCESSED.                                
*                                                                               
*        USES REGISTERS:                                                        
*                                                                               
*        R0,R5-R11                                                              
*                                                                               
*        USES SCAN ROUTINE                                                      
*                                                                               
*                                                                               
GETOPT   EQU      %                                                             
         PUSH     4,R1              SAVE R1-R4                                  
         LI,R11   1                                                             
         BAL,R14  SCAN              NEXT CHAR SHOULD BE '('                     
         CI,R6    0                                                             
         BGE      GO02              B IF NO SCAN ERROR                          
GO01     EQU      %                                                             
         AI,R13   1                 TAKE ERROR EXIT                             
         PULL     4,R1                                                          
         B        *R13                                                          
GO02     EQU      %                                                             
         LI,R1    0                 OPTION SEARCH INDEX                         
         LW,R0    *R13              GET ADDRESS OF OPTION LIST                  
GO03     EQU      %                                                             
         LD,R2    *R0,R1            GET OPTION DESCRIPTOR                       
         CW,R8    R2                IS IT THIS OPTION                           
         BE       GO04              B IF YES                                    
         AI,R1    1                 MOVE TO NEXT OPTION                         
         CB,R1    *R13              REACHED LIMIT YET                           
         BL       GO03              B IF NO                                     
         B        GO01              YES -TAKE ERROR EXIT                        
GO04     EQU      %                                                             
         LB,R11   R3                GET CONVERT TYPE                            
         BEZ      GO09              B IF NO PARAMETER                           
         CI,R11   X'80'             IS IT NO PRAMETER OPTION                    
         BANZ     GO010             B IF YES                                    
GO05     RES      0                                                             
         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                                                          
         B        *R13              RETURN                                      
*                                                                               
GO09     EQU      %                                                             
         LW,R8    R3                GET RETURN PARAMETER                        
         B        GO07                                                          
GO010    EQU      %                                                             
         LW,R8    R3                GET DUMMY PARAMETER                         
         CI,R6    0                                                             
         BG       GO07              B IF END OF PAREN FIELD                     
         B        GO05              PROCESS FIRST OPTION                        
*                                                                               
         TITLE    '** KEY5 - MEDIA KEY-IN **'                                   
       DO       #MEDIA                                                          
         SPACE    2                                                             
***********************************************************************         
*                                                                               
*                                                                               
*                                                                               
*        M E D I A     K E Y - I N     P R O C E S S O R                        
*                                                                               
*                                                                               
*                                                                               
**********************************************************************          
*                                                                               
*                                                                               
*        INPUTS:  R3  = ADDRESS OF 1ST FPT IN TEMPSPACE                         
*                 R7  = NEG INDEX TO INPUT CHARS IN INPUT BUFFER                
*                                                                               
*        OUTPUTS: MESSAGE: 'QUEUED AS NUM. XXXX'  XXXX = ID NUMBER              
*                 START CAL FOR THE MEDIA TASK                                  
*                 SIGNAL FOR THE MEDIA TASK WITH COPY INFO IN PACKET            
*                                                                               
*                                                                               
*        CALLS:   GETOPT  TO GET OPTIONS AND PARAMETERS   (KEY5)                
*                 GETIOID TO GET IO MEDIA TYPES AND NAMES  (KEYSCN)             
*                                                                               
*                                                                               
*        REGISTER USAGE:                                                        
*                                                                               
*                 R0 :  TEMP AND WORK REGISTERS                                 
*                 R1 :  WORK REGISTER, AND FOR INDEXING                         
*                 R2 :  INDEX IN HEX TO DECIMAL EBCDIC CONVERSION               
*                 R3 :  ADDRESS OF FPT'S AND TEMP SPACE                         
*                 R4 :  ADDR OF DATA PACKET; MSG MOVE INDEX                     
*                 R5                                                            
*                 R6                                                            
*                 R7 :  INDEX TO TYPED IN MESSAGE                               
*                 R8 :  TEMP TO FORM OPTIONS WORD, TEST AREA NAME               
*                 R9                                                            
*                 R10                                                           
*                 R11                                                           
*                 R12                                                           
*                 R13:  LINK TO GETOPT, DECBCD, ET AL                           
*                 R14:  LINK TO SCAN; DECBCD CONVERSION TEMP                    
*                 R15:  DECBCD CONVERSION TEMP                                  
*                                                                               
*        NOTE:    REGISTERS R5 - R11 USED AS SET BY GETOPT, SCAN                
*                                                                               
*                                                                               
***********************************************************************         
         PAGE                                                                   
         SPACE    2                                                             
MEDIAKEY EQU      %                                                             
         LI,R4    MEDFPTSZ          SET DATA AREA AFTER FPTS                    
         AW,R4    R3                                                            
         AND,R4   M24               REMOVE EXTRA FLAGS                          
         STW,R4   MEDSIGDT,R3       STORE ADDR OF DATA IN FPT                   
*        LI,R0    0                 CLEAR THE PACKET                            
*        STW,R0   MEDPICTL,R4                                                   
*        STW,R0   MEDPOCTL,R4       IN-, OUT- CONTROL WORDS                     
*        STW,R0   MEDPBASE,R4       CLEAR HEADER WORD TOO                       
*        LI,R1    MEDPLEN           SET LENGTH OF PACKET                        
*        STB,R1   *R4                                                           
*                                                                               
         LI,R0    MEDONVFC**8                                                   
         LI,R1    MEDPOOPT                                                      
         STH,R0   *R4,R1            DEFAULT VFC OFF                             
         BAL,R13  GETOPT            GET FIRST PARAM                             
         GEN,8,24 #MED1ST,MED1ST    LIST OF LEGAL 1ST PARAM                     
         B        A04               ERROR                                       
         B        MED35     ABORT   CONTROL FUNCTION                            
         B        MED35     END     CONTROL FUNCTION                            
         B        MED35     STOP    CONTROL FUNCTION                            
         B        MED35     GO      CONTROL FUNCTION                            
         B        MED01     IN      INPUT FILE SPEC                             
         BAL,R13  MEDFILE   FILE    INPUT FILE SPEC                             
*                                                                               
         B        MED02             NOW GET POSSIBLE OPTIONS                    
*                                                                               
*                                                                               
MED01    BAL,R13  MEDOPDEV          PROCESS OPLABEL/DEVICE                      
*                                                                               
MED02    BAL,R13  GETOPT            GET OPTION OF OUTPUT DEF                    
         GEN,8,24 #MEDOPTI,MEDOPTIN                                             
         B        A04               ERROR OF SOME SORT                          
         B        MED10     FILE    NO (MORE) INPUT OPTS; FILE NAME             
         B        MED11     OUT     NO (MORE) INPUT OPTS; OPLBL/DEV             
         B        MED04     ALL     ALL FILES ON THE INPUT                      
         B        MED04     DEL     DELETE INPUT WHEN DONE                      
         B        MED03     SFILE,N SKIP N FILES BEFORE COPY                    
         B        MED04     REW     REWIND INPUT AFTER COPY                     
         B        MED04     REWIND  REWIND INPUT AFTER COPY                     
         B        MED04     UNLOAD  UNLOAD INPUT AFTER COPY                     
*                                                                               
MED03    EQU      %         CHECK SFILE COUNT, MOVE TO PLACE                    
         LW,R15   MEDPICTL,R4       TEST IF FILE WAS SPECIFIED                  
         BL       MED02               YES, IGNORE SFILE                         
         CI,R8    255               GREATER THAN MAX ALLOWED ?/                 
         BG       A04                 YES, ERROR                                
*                                                                               
MED04    EQU      %         SHIFT OPTION BITS OR SFILE COUNT TO LEFT 8          
         SLS,R8   8                 TO BIT OR SFILE POSITION IN DATA            
         OR,R8    MEDPICTL,R4       ADD IN WITH PREVIOUS OPTIONS                
         STW,R8   MEDPICTL,R4       AND SET BACK FOR NEXT                       
         B        MED02             AND GET NEXT OPTION OR OUTPUT DEF           
         PAGE                                                                   
*                                                                               
MED10    AI,R4    MEDPOCTL-MEDPICTL STEP TO PROCESS OUTPUT DEF                  
         BAL,R13  MEDFILE           PROCESS FILENAME                            
         B        MED16             TEST IF AT END OF INPUT LINE.               
*                                                                               
MED11    AI,R4    MEDPOCTL-MEDPICTL STEP TO PROCESS OUTPUT DEVICE, OP           
         BAL,R13  MEDOPDEV          GET AND CONVERT OPLABEL/DEVICE              
         B        MED16             TEST IF AT END OF INPUT LINE.               
*                                                                               
MED12    BAL,R13  GETOPT            GET AN OUTPUT OPTION                        
         GEN,8,24 #MEDOPTO,MEDOPTOU                                             
         B        A04               ERROR                                       
         B        MED13     SFILE,N SKIP N FILES                                
         B        MED14     REW     REWIND OUTPUT AFTER COPY                    
         B        MED14     REWIND  REWIND OUTPUT AFTER COPY                    
         B        MED14     UNLOAD  UNLOAD OUTPUT AFTER COPY                    
         B        MED14     ADD     ADD TO EXISTING FILE OR TAPE                
         B        MED17     WEOF,N  WRITE EXTRA END-OF-FILES                    
         B        MED18     SPACE,N SPACE N LINES ON PRINTER                    
         B        MED14     NVFC    NO VFC IN RECORDS                           
         B        MED14     NOVFC   NO VFC IN RECORDS                           
         B        MED19     VFC     VFC IN RECORDS                              
         PAGE                                                                   
*                                                                               
* PROCESS OPTIONS                                                               
*                                                                               
*                                                                               
MED13    EQU      %         CHECK SFILE LEGALITY, SIZE                          
         LW,R15   MEDPICTL,R4       FILE SPECIFIED? CTRL WRD <0 =>YES           
         BL       MED16               YES, IGNORE THE SPECIFICATION             
         CI,R8    255               IS COUNT GREATER THAN MAX ?                 
         BG       A04                 YES, REPORT ERROR                         
*                                                                               
MED14    EQU      %         SHIFT DATA OR OPTION FLAG TO POSITION               
         SLS,R8   8                 OPTION BITS ONE BYTE TO LEFT                
*                                                                               
MED15    RES      0                                                             
         LW,R1    R8                                                            
         STS,R1   MEDPICTL,R4       PUT FLAG INTO OPTIONS                       
         PAGE                                                                   
*                                                                               
MED16    EQU      %         TEST IF AT END OF INPUT                             
         CI,R6    2                 AT  END OF INPUT ?/                         
         BNE      MED12               NO, GET ANOTHER PARAM                     
*                                                                               
*                                                                               
         DISABLE                                                                
         LB,R1    MEDRMASN          FETCH CURRENT ID NUMBER                     
         MTB,+1   MEDRMASN          STEP MOD 255                                
         BNC      %+2               IF NO OVERFLOW ( MASN =< 255 )              
         MTB,+1   MEDRMASN            OVERFLOW TO 0; SET TO 1                   
         ENABLE                                                                 
         LW,R5    MEDSIGDT,R3       FETCH ADDR OF DATA PACKET AGAIN             
         LI,R4    MEDPMASN          AND USE TO STORE THE MASN INTO              
         STB,R1   *R5,R4            THE DATA PACKET                             
*                                                                               
         LI,R4    -#MEDMSG          MOVE MESSAGE TO TYPE-OUT IMAGE              
         LW,R0    MEDMSG+#MEDMSG,R4                                             
         STW,R0   IMAGE+#MEDMSG,R4                                              
         BIR,R4   %-2                                                           
         BAL,R13  DECBCD            CONVERT MASN                                
         STW,R15  IMAGE+#MEDMSG-1    STORE ID NUMBER IN MESSAGE                 
         CAL1,2   MEDTYPE,R3        TYPE MSG AND WAIT FOR IT                    
         CAL1,7   MEDSGNL,R3        SEND SIGNAL                                 
         CAL1,7   MEDSTRT,R3        AND START MEDIA TASK (AGAIN)                
         LI,R4    MEDR#KEY          STEP COUNT OF REQUESTS IN QUEUE             
         MTB,+1   MEDIARES,R4                                                   
*                                                                               
         B        KEY5EXIT          EXIT                                        
         PAGE                                                                   
*                                                                               
* WEOF COUNT OPTION                                                             
*                                                                               
MED17    CI,R8    15        WEOF COUNT:   GREATER THAN MAX ?                    
         BG       A04                 YES, ERROR                                
         AI,R8    MEDHWEOF          ADD IN WEOF COUNT PRESENT BIT               
         SLS,R8   16                LEFT JUSTIFY FLAGS IN CONTROL WORD          
         B        MED15             AND STORE THEM AWAY                         
*                                                                               
* SPACE COUNT OPTION                                                            
*                                                                               
MED18    CI,R8    15        SPACE COUNT > 15 ?/                                 
         BG       A04                 YES, ERROR                                
         AI,R8    MEDHSPAC**-4      INSERT SPACE COUNT PRESENT BIT              
         SLS,R8   20                INDICATOR BIT, LEFT JUSTIFY,                
         B        MED15             AND STORE THEM                              
*                                                                               
* VFC OPTION                                                                    
*                                                                               
MED19    RES      0                                                             
         SLS,R8   8                                                             
         LW,R1    R8                                                            
         LI,R0    0                                                             
         STS,R0   MEDPICTL,R4                                                   
         B        MED16                                                         
         PAGE                                                                   
         SPACE    2                                                             
MED30    EQU      %         PROCESS MEDIA CONTROL PARAMETERS                    
         BAL,R13  GETOPT            GET ANOTHER CONTROL WORD                    
         GEN,8,24 #MEDCTRL,MED1ST                                               
         B        A04               ERROR                                       
         B        MED31    ABORT    TERMINATE CURR COPY                         
         B        MED31    END      STOP AT END OF CURR COPY                    
         B        MED31    STOP     SUSPEND COPY OP NOW                         
         B        MED31    GO       START OR RESUME COPIES                      
*                                                                               
MED31    OR,R8    MEDPBASE,R4       ADD IN PREVIOUS BITS                        
*                                                                               
MED35    EQU      %         ENTRY FOR FIRST OPTION                              
         STW,R8   MEDPBASE,R4       SAVE OPTION WITH PREVIOUS                   
         CI,R6    2                 MORE PARAMS ?/                              
         BNE      MED30               YES, GET THEM                             
         DISABLE                                                                
         OR,R8    MEDRCTRL          SET NEW FLAGS                               
         LW,R9    FFFF7FFF          SET STORAGE MASK FOR SETTING FLAGS          
         CI,R8    MEDRGO            IS 'GO' SET ?/                              
         BAZ      MED33               NO, FINISHED                              
         CI,R8    MEDRSTOP          IS STOP NOW SET ?/                          
         BANZ     MED32               YES, RESET IT ONLY                        
         CI,R8    MEDREND           IS 'END' NOW SET ?/                         
         BAZ      MED33               NO, NEITHER; SET NEW FLAG                 
         AI,R8    -MEDREND          RESET 'END' FLAG                            
         B        MED33                                                         
MED32    AI,R8    -MEDRSTOP         RESET 'STOP' FLAG                           
MED33    STS,R8   MEDRCTRL          SET NEW FLAGS IN RESIDENT TASK              
         ENABLE                                                                 
         CAL1,7   MEDSTRT,R3        START THE MEDIA TASK (AGAIN)                
         B        KEY5EXIT          AND EXIT                                    
         PAGE                                                                   
*                                                                               
*                                                                               
MEDFILE  EQU      %         PROCESS A FILE SPECIFICATION                        
         LW,R9    R3                                                            
         AI,R9    MEDGIO            POINT TO GETIOID CONTROL BLOCK              
         LW,R0    GIOFA                                                         
         STW,R0   *R9               SET TO SCAN FILE ID                         
         BAL,R8   GETIOID           GET IN/OUT FILE ID                          
         CI,R6    1                                                             
         BL       A04               B IF GETIOID OR SYNTAX ERROR                
MEDFILEA RES      0                 PROCESS FILE ID                             
         LW,R8    MEDGIO+1,R3       GET FILE AREA NAME                          
         OR,R8    Y8                MERGE FILE FLAG                             
         STW,R8   MEDPICTL,R4       STORE IN MEDIA CONTROL BLOCK                
         LCI      4                                                             
         LM,R8    MEDGIO+2,R3       GET FILE NAME (IF FOUND)                    
         CD,R8    BLANKS            WAS A NAME GOTTEN ?/                        
         BNE      MEDFOP              YES, STORE IT                             
         B        A04                 NO, GIVE AN ERROR                         
         PAGE                                                                   
         SPACE    2                                                             
MEDOPDEV EQU      %         PROCESS OPLABEL/ DEVICE/ FILE, AREA                 
         LW,R9    R3                                                            
         AI,R9    MEDGIO            POINTER TO GETIOID CONTROL BLOCK            
         LW,R0    GIOBITS                                                       
         STW,R0   *R9               SET TO SCAN ANY IO MEDIUM ID                
         BAL,R8   GETIOID           GET IO MEDIUM ID                            
         CI,R6    1                                                             
         BL       A04               B IF GETIOID OR SYNTAX ERROR                
         LW,R0    *R9                                                           
         CW,R0    GIOFBIT                                                       
         BANZ     MEDFILEA          B IF A FILE ID WAS SCANNED                  
         LCI      2                                                             
         LM,R8    MEDGIO+1,R3       GET DEV/OPLB NAME                           
         CW,R0    GIOOBIT                                                       
         BANZ     MEDOP3            B IF OPLABEL                                
*                                   DEVICE OR ZERO                              
MEDFOP   EQU      %         STORE NAMES IN DATA PACKET                          
         LCI      4                                                             
         STM,R8   MEDPIFIL,R4                                                   
         B        *R13              AND EXIT                                    
         PAGE                                                                   
*                                                                               
*                                                                               
MEDOP3   RES      0                 GET OPLABEL INDEX                           
         LI,R1    1                                                             
         LH,R8    R8,R1             SIGN-EXTEND OPLABEL NAME                    
         LH,R1    *K:OPLBS1         SET NUMBER TO TEST                          
MEDOP4   CH,R8    *K:OPLBS1,R1      IS THIS THE ONE ?/                          
         BE       MEDOP5              YES, GET DCT INDEX                        
         BDR,R1   MEDOP4              NO, TEST ANOTHER                          
         B        A04               NOT IN LIST; ERROR                          
*                                                                               
MEDOP5   EQU      %         CONVERT OPLABEL INTO DEVICE OR FILE NAME            
         LB,R1    OPLBS2,R1         FETCH INDEX AND TYPE OF ASSIGNMENT          
         CI,R1    X'80'             IS IT ASSIGNED TO A DEVICE ?/               
         BANZ     MEDOP6              NO, A FILE                                
*                                                                               
         LD,R8    DCT16,R1          FETCH DEVICE NAME                           
         SLD,R8   24                                                            
         OR,R9    BLANKS            L-ALIGN WITH TRAILING BLANKS                
         B        MEDFOP            AND STORE AS IF TYPED IN                    
*                                                                               
*                                                                               
MEDOP6   EQU      %         OPLABEL ASSIGNED TO FILE; CONVERT TO FILE           
         AI,R1    -X'80'            REMOVE FILE FLAG                            
         LD,R8    RFT1,R1           AND FETCH THE FILE'S NAME                   
         LB,R1    RFT8,R1           FETCH INDEX TO MASTER DICTIONARY            
*                                   WHICH IS ALSO THE AREA NAME INDEX           
         LH,R1    *K:MDNAME,R1      AND FETCH THE ACTUAL AREA NAME              
         AND,R1   XFFFF             REMOVE SIGN EXTEND BITS                     
         OR,R1    Y8                MERGE FILE FLAG                             
         STW,R1   MEDPICTL,R4       AND SET NAME IN PACKET WORD                 
         B        MEDFOP            STORE FILE NAME AS USUAL                    
         PAGE                                                                   
*                                                                               
*                                                                               
*        CONVERT A BINARY NUMBER TO GRAPHIC DECIMAL NUMBER                      
*                                                                               
*        INPUTS:  R1 :  NUMBER TO CONVERT                                       
*                                                                               
*        OUTPUT:  R14, R15 :  CONVERTED NUMBER, RIGHT JUSTIFIED                 
*                                                                               
*        LINK:    R13:  RETURN ADDRESS                                          
*                                                                               
*        USES:    R0 :  AS LEFT HALF OF DOUBLE WORD INPUT NUMBER                
*                 R4 :  INDEX FOR STORING THE OUTPUT                            
*                                                                               
*                 REGISTER R1 IS DESTROYED; IT AND R0 HAVE X'F0' ANDED          
*                 WITH THE LAST TWO DIGITS OUTPUT.                              
*                                                                               
*                                                                               
*                                                                               
*                                                                               
DECBCD   EQU      %         CONVERT FROM BINARY TO GRAPHIC                      
         LI,R4    7                 NUMBER - 1 OF DIGITS                        
DECBCD1  LI,R0    0                 CLEAR LEFT HALF OF DIVIDEND                 
         DW,R0    TEN                                                           
         AI,R0    X'F0'             CONVERT TO A GRAPHIC                        
         STB,R0   R14,R4            STORE IN R14                                
         BDR,R4   DECBCD1           GET NEXT DIGIT                              
         AI,R1    X'F0'             CONVERT LAST DIGIT                          
         STB,R1   R14               AND STORE                                   
         B        *R13              RETURN                                      
         PAGE                                                                   
         SPACE    2                                                             
MEDMSG   TEXTC    '!!QUEUED AS ID NUM XXXX'  MEDIA TYPE-IN ACCEPTED MSG         
#MEDMSG  EQU      %-MEDMSG          LENGTH OF MESSAGE                           
*                                                                               
*                                                                               
MEDERRM  TEXTC    '!!CAN''T QUEUE. TYC=ZZZZ'                                    
#MEDERRM EQU      %-MEDERRM         LENGTH OF MESSAGE                           
*                                                                               
*                                                                               
GIOBITS  DATA     X'70040000'       GETIOID FLAGS FOR ANY IO ID                 
GIOFA    DATA     X'10040000'       GETIOID FLAGS FOR FILE, ACNT                
GIOOBIT  EQU      Y4                GETIOID FLAGS FOR OPLABEL                   
GIOFBIT  EQU      Y1                GETIOID FLAGS FOR FILE                      
         PAGE                                                                   
*                                                                               
         SPACE    2                                                             
         BOUND    8                                                             
MED1ST   TEXT     C'X   '       ABORT  ABORT CURRENT COPY                       
         GEN,8,24 0,MEDRABRT                                                    
         TEXT     C'L   '       END    START NO NEW COPIES                      
         GEN,8,24 0,MEDREND                                                     
         TEXT     C'S   '       STOP   STOP (SUSPEND) CURRENT COPY              
         GEN,8,24 0,MEDRSTOP                                                    
         TEXT     C'I   '       GO     START OR CONTINUE A COPY                 
         GEN,8,24 0,MEDRGO                                                      
*                                                                               
#MEDCTRL EQU      (%-MED1ST)/2      NUMBER OF CONTROL COMMANDS                  
*                                                                               
         TEXT     'IN  '            INPUT DEVICE/OPLABEL/FILE SPEC              
         GEN,8,24 X'00',0                                                       
*                                                                               
MEDOPTIN EQU      %         INPUTS LEGAL WHEN LOOKING FOR INPUT OPTS            
*                                                                               
         TEXT     'FILE'            INPUT-, OUTPUT- FILE SPEC                   
         GEN,8,24 00,00                                                         
*                                                                               
#MED1ST  EQU      (%-MED1ST)/2      NUMBER OF FIRST POSSIBILITIES               
*                                                                               
*                                                                               
         TEXT     'OUT '            OUTPUT DEVICE/OPLABEL/FILE SPEC             
         GEN,8,24 00,00                                                         
         TEXT     'ALL '            DO ALL FILES ON DEVICE                      
         GEN,8,24 00,MEDOALL**16                                                
         TEXT     'DEL '            DELETE INPUT FILE AFTER COPY                
         GEN,8,24 00,MEDODEL**16                                                
*                                                                               
*                                                                               
MEDOPTOU TEXT     'SFIL' E,N        SKIP N FILES - IN OR OUT                    
         GEN,8,24 X'04',0                                                       
         TEXT     'REW '            REWIND IN-, OUT- FILES                      
         GEN,8,24 00,MEDOREW**16                                                
         TEXT     'REWI' ND         REWIND IN-, OUT- FILES                      
         GEN,8,24 00,MEDOREW**16                                                
         TEXT     'UNLO' AD         UNLOAD IN-, OUT-, AFTER COPY                
         GEN,8,24 00,MEDOUNLD**16                                               
*                                                                               
*                                                                               
#MEDOPTI EQU      (%-MEDOPTIN)/2    NUMBER OF INPUT OPTIONS                     
*                                                                               
*                                                                               
         TEXT     'ADD '            ADD TO EXISTING FILE OR TAPE                
         GEN,8,24 00,MEDOADD**16                                                
         TEXT     'WEOF'            WRITE EOFS AFTER COPY                       
         GEN,8,24 X'04',0                                                       
         TEXT     'SPAC' E,N        SPACE N LINES ON PRINTER                    
         GEN,8,24 X'04',00                                                      
         TEXT     'NVFC'            NO VFC CONTROL IN FILE                      
         GEN,8,24 X'00',MEDONVFC**16                                            
         TEXT     'NOVF' C          NO VFC CONTROL IN FILE                      
         GEN,8,24 00,MEDONVFC**16                                               
         TEXT     'VFC '            VFC CONTROL IN FILE                         
         GEN,8,24 00,MEDONVFC**16                                               
*                                                                               
#MEDOPTO EQU      (%-MEDOPTOU)/2    NUMBER OF OUTPUT OPTIONS                    
*                                                                               
*                                                                               
TEN      DATA     10                FOR CONVERTING BINARY TO GRAPHICS           
         PAGE                                                                   
*                                                                               
* FPT'S TO BE MOVED TO TEMP SPACE                                               
*                                                                               
MEDFPTBG EQU      %                 BEGINNING OF THE FPT'S                      
*                                                                               
* SIGNAL FPT                                                                    
*                                                                               
MEDSIGNL DATA     X'43800000'       SIGNAL CODE, P0 BIT                         
         DATA     P1+P3+P4+P5+P6+P10+F8    P-BITS                               
         DATA     KEY5ERR           ERROR RETURN                                
         TEXT     'MEDIA   '        NAME OF TASK = MEDIA                        
         DATA     X'00008000'       CLASS MASK                                  
MEDSIGDA DATA     0                 DATA ADDRESS - FILLED IN                    
MEDSGTYC DATA     0                 TYC                                         
*                                                                               
* START FPT                                                                     
*                                                                               
MEDSTART DATA     X'4A800000'       START CODE, P0 BIT                          
         DATA     P3+P4+P10+F7      P BITS, ABORT OVERRIDE                      
         TEXT     'MEDIA   '        TASK NAME                                   
         DATA     0                 TYC                                         
*                                                                               
* TYPE MESSAGE FPT                                                              
*                                                                               
MEDTYPEW DATA     X'02000000'       TYPE CODE FOR TYPEING MSG                   
         DATA     P1+F3                                                         
         DATA     IMAGE             LOCATION OF MESSAGE                         
         PAGE                                                                   
*                                                                               
* GETIOID CONTROL BLOCK                                                         
*                                                                               
MEDGIOCT RES      6                 GETIOID CONTROL BLOCK SPACE                 
*                                                                               
MEDFPTSZ EQU      %-MEDFPTBG        SIZE OF FPTS                                
*                                                                               
*                                                                               
* MEDIA SIGNAL PACKET  (MUST FOLLOW FPT'S ABOVE)                                
*                                                                               
         GEN,8,24 MEDPLEN,0                                                     
         DO1      MEDPLEN-1                                                     
         DATA     0                                                             
         PAGE                                                                   
*                                                                               
*                           DEFINITIONS OF OFFSETS INTO THE FPTS                
*                                                                               
*                                                                               
MEDSGNL  EQU      MEDSIGNL-MEDFPTBG SIGNAL CAL'S FPT                            
MEDSIGDT EQU      MEDSIGDA-MEDFPTBG DATA ADDRESS                                
MEDSTRT  EQU      MEDSTART-MEDFPTBG START CAL'S FPT                             
MEDTYPE  EQU      MEDTYPEW-MEDFPTBG TYPE CAL'S FPT                              
MEDGIO   EQU      MEDGIOCT-MEDFPTBG GETIOID CONTROL BLOCK                       
       FIN      #MEDIA                                                          
         TITLE    '** KEY5 - ON/OFF KEY-INS **'                                 
*                                                                               
*        SUBROUTINE  TO  PROCESS  TJE  ON  KEYIN                                
*                                                                               
*                                                                               
         DO       #TJE                                                          
ONKEY    EQU      %                                                             
         LI,R13   0                 SET FOR ALL OPTION                          
         CI,R6    2                                                             
         BE       ONKEY1            B IF NO OPTIONS                             
         LW,R6    R7                                                            
         SAS,R6   -24               GET INDEX TO NEXT CHAR                      
         LB,R8    *K:KEYIN,R6       GET NEXT CHAR                               
         CI,R8    'A'               IS IT THE 'ALL' OPTION                      
         BE       ONKEY1            B IF YES                                    
         LI,R11   4                 DECIMAL  CONVERSION                         
         BAL,R14  SCAN              GET OPTION                                  
         CI,R6    2                 MUST BE END OF CARD                         
         BNE      KEY5ERR           ERROR                                       
         LI,R13   1                 SET FOR VALUE OPTION                        
ONKEY1   EQU      %                                                             
         LH,R0    DCT7              TOTAL  DEVICES AND  LINES                   
         SH,R0    DCT1              YEILDS NUMBER OF LINES                      
         AI,R0    1                 ALLOW TYA01                                 
         CI,R13   0                 CHECK FOR ALL OR DEFAULT                    
         BE       ONKEY2            B IF DEFAULT                                
         CW,R8    R0                CHECK INPUT OPTION FOR RANGE                
         BG       KEY5ERR                                                       
         STW,R8   R0                                                            
ONKEY2   EQU      %                                                             
         STW,R0   TJE:NUM           CHANGE # USERS ALLOWED ON                   
         B        KEY5EXIT          RETURN - NO ERRORS                          
*                                                                               
*                                                                               
*        SUBROUTINE  TO  PROCESS  TJE 'OFF' KEYIN                               
*                                                                               
*                                                                               
OFFKEY   EQU      %                                                             
         LI,R0    0                 SET NUMBER OF USERS TO ZERO                 
         B        ONKEY2                                                        
*                                                                               
         TITLE    '** KEY5 - SEND KEY-IN **'                                    
*                                                                               
*        SUBROUTINE TO SEND AN OPERATOR MESSAGE TO                              
*                 ALL TERMINAL USERS                                            
*                                                                               
*                                                                               
SENDKEY  EQU      %                                                             
         CI,R6    2                                                             
         BE       A04               ERROR IF NO PARAMETERS                      
         LI,R11   1                 EBCDIC CONVERSION                           
         BAL,R14  SCAN              GET OPTION IDENTIFIER                       
         CI,R6    1                 END OF FIELD                                
         BNE      KEY5ERR           B IF NO-ERROR MUST BE END OF FIELD          
         CW,R8    TX:ALL            IS ALL OPTION SPECIFIED                     
         BNE      SEND03            B IF NO                                     
         BAL,R5   SETREGS           SETUP FOR BAL TO QUEUE                      
         LH,R3    DCT7              LOOP INDEX                                  
SEND01   LB,R0    DCTTJE,R3         CHECK FOR ACTIVE LINE                       
         CI,R0    TJEACT            IS IT ACTIVE                                
         BAZ      SEND02            B IF NO                                     
         STW,R3   R7                DCT INDEX                                   
         PUSH     6,R8              SAVE THE REGS                               
         BAL,R5   QUEUE             OUTPUT MESSAGE                              
         NOP                        IGNORE ERRORS                               
         PULL     6,R8              RESTORE                                     
         LW,R0    K:CTST            WAS THERE A KEYIN REQUEST                   
         CW,R0    KEYIN             WHILE PROCESSING OUTPUTS                    
         BANZ     KEY5EXIT          B IF YES - ABORT FURTHUR OUTPUT             
SEND02   BDR,R3   SEND01            B FOR NEXT                                  
         B        KEY5EXIT          DONE                                        
         PAGE                                                                   
*                                                                               
*                                                                               
*                                                                               
SEND03   EQU      %                                                             
         CI,R10   5                 5 CHARACTERS SCANNED                        
         BNE      KEY5ERR           B IF OPTION NOT CORRECT FORMAT              
         SLD,R8   -24               MAKE ROOM FOR NL!!                          
         AW,R8    Y155A5A           MAKE SAME AS DCT16                          
         LH,R3    DCT7              LOOP INDEX                                  
SEND04   CD,R8    DCT16,R3          IS IT THIS LINE                             
         BNE      SEND05            B IF NO                                     
         LB,R0    DCTTJE,R3         CHECK IF LINE IS ACTIVE                     
         CI,R0    TJEACT                                                        
         BAZ      KEY5ERR           B IF NOT ACTIVE - MISTAKE                   
         BAL,R5   SETREGS           SETUP FOR BAL TO QUEUE                      
         STW,R3   R7                SET DCT INDEX                               
         BAL,R5   QUEUE             OUTPUT MESSAGE                              
         NOP                        IGNORE ERRORS                               
         B        KEY5EXIT          DONE                                        
SEND05   EQU      %                                                             
         BDR,R3   SEND04            B FOR NEXT LINE                             
         B        KEY5ERR           HERE IF BAD LINE ID                         
TX:ALL   TEXT     'ALL'                                                         
         BOUND    8                                                             
TX:AAAA  TEXT     '****'                                                        
         PAGE                                                                   
*                                                                               
*        SUBROUTINE TO SET UP REGISTERS FOR QUEUE                               
*                 ALSO COMPUTES BUFFER ADDRESS                                  
*                 AND SETS UP FOUR **** AND                                     
*                 ALL NECESSARY NEW LINE CODES                                  
*                                                                               
*                                                                               
*                                                                               
SETREGS  EQU      %                                                             
         LW,R8    TX:AAAA           GET TEXT TO PRECEDE MESSAGE                 
         STW,R8   KEYBUF            SET IN BUFFER                               
         LI,R0    ' '               SPACE                                       
         LW,R2    R7                                                            
         SAS,R2   -24               GET INDEX TO NEXT CHAR                      
         LI,R6    (-KEYBYTES)+4     OFFSET TO START IN BUFFER                   
SETR01   RES      0                                                             
         LB,R9    *K:KEYIN,R2       MOVE MSG TO START OF BUFFER                 
         STB,R0   *K:KEYIN,R2       CLEAR MOVED BYTE                            
         STB,R9   *K:KEYIN,R6                                                   
         AI,R6    1                                                             
         BIR,R2   SETR01                                                        
         LI,R2    KEYBYTES-1        SET UP TO COMPUTE MESSAGE LENGTH            
SETR02   LB,R7    KEYBUF,R2         START AT END OF BUFFER AND                  
         CI,R7    ' '               FIND FIRST NON BLANK CHARR                  
         BNE      SETR03            B IF NOT BLANK                              
         BDR,R2   SETR02            B FOR NEXT CHAR                             
         PAGE                                                                   
*                                                                               
*                                                                               
*                                                                               
SETR03   EQU      %                                                             
*                 R2 NOW CONTAINS THE FINAL BYTE COUNT                          
         AI,R2    1                 ADJUST FOR LAST BYTE                        
         STW,R2   R11               ALSO THE BYTE COUNT                         
         LI,R2    0                 NO ECB                                      
         LI,R4    FCWKPWNL          FUNCTION CODE                               
         LI,R6    0                 NO RETRIES                                  
         LW,R8    Y04               CUP CODE 1                                  
         LI,R9    0                 CUP CODE 2                                  
         LI,R12   0                                                             
         LI,R13   X'FE'             CONTROL TASK PRIORITY                       
         LI,R10   BA(KEYBUF)        BUFFER ADDRESS                              
         B        0,R5              RETURN                                      
*                                                                               
*                                                                               
         TITLE    '** KEY5 - LOGON KEY-IN **'                                   
*                                                                               
*                                                                               
*                                                                               
*                                                                               
*                                                                               
LOGONKEY EQU      %                                                             
         CI,R6    2                                                             
         BGE      KEY5ERR           ERROR IF NO PARAMETER                       
         LI,R11   1                 SET TO EBCDIC CONVERSION                    
         BAL,R14  SCAN              FETCH PARAMETER                             
         CI,R6    2                 MUST BE END OF CARD                         
         BNE      KEY5ERR                                                       
         CI,R10   5                 MUST BE 5 CHAR SCANNED                      
         BNE      KEY5ERR                                                       
         SLD,R8   -24               MAKE ROOM FOR NL!!                          
         AW,R8    Y155A5A           MAKE SAME AS DCT16                          
         LH,R1    DCT1              LOOP INDEX                                  
LOG01    EQU      %                                                             
         CD,R8    DCT16,R1          THIS DEVICE                                 
         BE       LOG02             B IF YES                                    
         BDR,R1   LOG01             B FOR NEXT                                  
         B        KEY5ERR           NOT FOUND ERROR                             
LOG02    EQU      %                                                             
         LB,R0    DCTTJE,R1         CHECK FOR ALREADEY ACTIVE                   
         BNEZ     KEY5ERR           B IF YES                                    
         AI,R0    TJEON             SET LOGON BIT                               
         STB,R0   DCTTJE,R1         RESTORE                                     
         CAL1,7   0,R3              DO START ON TERMINAL EXEC                   
         B        KEY5EXIT                                                      
*                                                                               
* FPT'S FOR LOGON KEY-IN                                                        
*                                                                               
LOGFPT   EQU      %                                                             
         DATA     X'4A800000'       START FPT                                   
         DATA     X'20000001'       NAME AND ABORT OVERRIDE                     
         TEXT     'TEX'                                                         
*                                                                               
         FIN      #TJE                                                          
*                                                                               
*                                                                               
         OLAYEND                                                                
         END                                                                    
