         PCC      0                                                             
         SYSTEM   SIG5P                                                         
         SYSTEM   OPTIONS                                                       
         DO       #SYMB                                                         
*   ENTRY POINTS                                                                
         DEF      SYM3,SIMIKEY                                                  
         DEF      RCEXU,RCFEOD,RCGETF                                           
         DEF      WCGETJOB,RCJOB,SMJOBFIN                                       
         DEF      WCSTSYM,SMBSYF,SMINIT,SMFINDF                                 
*   EXIT POINTS                                                                 
         DEF      SYM3X3,SYM3X4,SYM3X5,SYM3X6                                   
OLAYFLAG EQU      'SYM3'                                                        
         SYSTEM   CPRMON                                                        
         PAGE                                                                   
*                                                                               
*                                                                               
SYM3     RES      0                                                             
*                                                                               
*   EXITS                                                                       
*                                                                               
SYM3X3P  PULL     R5                                                            
SYM3X3   B        1,R5                                                          
SYM3X4P  PULL     R5                                                            
SYM3X4   B        0,R5                                                          
SYM3X5   B        *R8                                                           
SYM3X6P  PULL     R5                                                            
SYM3X6   B        2,R5                                                          
         TITLE    '** SYM3 **'                                                  
         TITLE    '** SYM3 -  RGGETF SUBROUTINE **'                             
**************                                                                  
*   RCGETF   *                                                                  
**************                                                                  
*                                                                               
*   SUBROUTINE TO GET THE NEXT IS FILE TO READ                                  
*                                                                               
*                                                                               
*   AT ENTRY:   R5   LINK                                                       
*               R10  BUFFER ADDRESS                                             
*               R11  BYTE COUNT                                                 
*                                                                               
*   ROUTINE EXITS +1 IF ERROR (R9= TYC)                                         
*                 +2 IF NO MORE FILES (FIN PROVIDED)                            
*                 +3 NEXT FILE HAS BEEN SELECTED                                
*                                                                               
RCGETF   RES      0                                                             
         PUSH     R5                                                            
         PUSH     2,R10                                                         
         LI,R8    KIS               IS AREA TEXT                                
         STW,R8   RCAREA            STORE IN AREA BLOCK                         
         BAL,R5   FMMASTX           GET AREA INDEX VALUE                        
         NOP                                                                    
*                                                                               
         LD,R12   ZEROS             NULL FILE NAME                              
         BAL,R8   SMGETF            GET NEXT FILE TO READ                       
         B        RCGETF2           ERROR EXIT                                  
         B        RCGETF4           NO MORE FILES, PROCESS !FIN                 
* R12/13 NEXT FILE NAME TO READ                                                 
         LCI      2                                                             
         STM,R12  RCAREA+1          STORE FILE NAME                             
*                                                                               
         LW,R8    RCPBITS           PICK UP PBITS                               
         AI,R8    -P14              REMOVE ACCOUNT BIT                          
         STW,R8   RCASSIGN+1        SET UP FPT                                  
*                                                                               
         LI,R9    RCGETF6           ERROR EXIT                                  
         CAL1,1   RCASSIGN          ASSIGN RCDCB TO NEXT FILE                   
         PULL     2,R10             CLEANUP STACK                               
         B        SYM3X6P           EXIT NORMALLY (+3)                          
*                                                                               
*   PROCESS ERRORS                                                              
*                                                                               
RCGETF2  RES      0                                                             
         PULL     2,R10                                                         
         LW,R9    R15               R9= TYC                                     
         B        SYM3X4P           TAKE ERROR EXIT (+1)                        
*                                                                               
RCGETF4  RES      0                                                             
         PULL     2,R10             R10,R11= BUFFER ADDR, SIZE                  
         BAL,R5   RCFIN             PROCESS A FIN                               
         B        SYM3X4P           TAKE ERROR EXIT (+1), R9= TYC               
         B        SYM3X3P           TAKE +2 EXIT, NO MORE FILES                 
*                                                                               
RCGETF6  RES      0                                                             
         LB,R9    R10               PICK UP ERROR CODE                          
         PULL     2,R10                                                         
         B        SYM3X4P           TAKE ERROR EXIT                             
         TITLE    '** SYM3 - RCEXU SUBROUTINE **'                               
*************                                                                   
*   RCEXU   *                                                                   
*************                                                                   
*                                                                               
*   AT ENTRY      R5    LINK                                                    
*                 R6     BYTE ADDRESS OF !EXU CARD IMAGE                        
*                 R7     BYTE COUNT OF !EXU CARD IMAGE                          
*                                                                               
*   ROUTINE RETURNS +1  IF ERRORS WITH TYC IN R9                                
*                   +2  IF NO ERRORS                                            
*                                                                               
*                                                                               
*   AN EXU COMMMAND HAS BEEN READ.   CLOSE AND DELETE THE JOB FILE              
*   THEN SWITCH INPUT TO THE USER'S BATCH FILE.                                 
*                                                                               
RCEXU    RES      0                                                             
         PUSH     R5                                                            
         LI,R9    RCEXU6            ERROR RETURN FOR CLOSE                      
         CAL1,1   RCLOSE            CLOSE JOB FILE                              
         BAL,R5   RCDELETE          DELETE THE JOB FILE AND POLL SYMBIONT       
         B        RCEXU2            ERROR                                       
*                                                                               
         LI,R5    6                                                             
         LB,R5    RCDCB,R5          AREA INDEX OF CURRENT FILE                  
         LH,R8    MDNAME,R5         AREA NAME                                   
         AND,R8   M16                                                           
         CI,R8    KIS               IS A INPUT SYMBIONT FILE                    
         BNE      RCEXU1            NO, SKIP FILE NAME SAVE                     
*                                   YES, CHECK TO SEE IF IT IS A BF FILE        
         LW,R8    RCDCB+5           FILE NAME WORD 0                            
         SLS,R8   -16                                                           
         CI,R8    'BF'              IS IT A BATCH FILE                          
         BNE      RCEXU1            NO, SKIP FILE NAME SAVE                     
*                                   YES, SAVE FILE NAME                         
         LCI      2                                                             
         LM,R8    RCDCB+5           GET CURRENT FILE NAME                       
         STM,R8   BATCHF            SAVE FILE NAME                              
*                                   YES                                         
RCEXU1   AW,R7    R6                                                            
         SW,R6    R7                                                            
         STB,R6   R7                FORM CONTROL WORD FOR SCAN                  
         MTB,5    R7                SKIP OVER BANG JOB SPACE                    
*                                                                               
         LW,R6    RCPBITS                                                       
         STW,R6   RCGIOBLK          INITIALIZE GETIOID BLOCK                    
*                                                                               
         LI,R9    RCGIOBLK                                                      
         BAL,R8   GETIOID           GET ASSIGNMENT FROM !EXU CARD               
*                                                                               
         LW,R8    RCGIOBLK          PICK UP PBITS                               
         STW,R8   RCASSIGN+1        SET UP ASSIGN FPT                           
*                                                                               
         LI,R9    RCEXU6            ERROR EXIT                                  
         CAL1,1   RCASSIGN          ASSIGN RCDCB TO EXU FILE                    
         B        SYM3X3P           PULL, EXIT +2                               
*                                                                               
*   PROCESS ERRORS                                                              
*                                                                               
RCEXU2   RES      0                                                             
         LW,R9    R15               R9= TYC                                     
         B        SYM3X4P           EXIT +1 (ERROR)                             
*                                                                               
RCEXU4   RES      0                                                             
         LI,R9    TYC70             ILLEGAL AREA NAME                           
         B        SYM3X4P           EXIT +1                                     
*                                                                               
RCEXU6   RES      0                                                             
         LB,R9    R10               R9= ERROR                                   
         B        SYM3X4P           EXIT +1                                     
         TITLE    '** SYM3 - RCJOB SUBROUTINE **'                               
*************                                                                   
*   RCJOB   *                                                                   
*************                                                                   
*                                                                               
*   ROUTINE SUPPLIES DEFAULT PARAMETERS FOR THE JOB CARD IF                     
*   NECESSARY AND APPENDS THE CALLER'S JOB NUMBER TO THE JOB CARD.              
*                                                                               
*   AT ENTRY:     R5   LINK                                                     
*                 R6   BYTE POINTER TO JOB CARD ACCOUNT PARAMETER               
*                      IN THE CALLER'S BUFFER.                                  
*                                                                               
*   ROUTINE RETURNS +2 NORMALLY                                                 
*   ROUTINE RETURNS +1 IF JOB CARD IS NOT FIRST FOR THIS FILE                   
*                                                                               
*                                                                               
RCJOB    RES      0                                                             
         PUSH     R5                SAVE LINK                                   
         LW,R1    SM:C              GET RFT INDEX                               
         LW,R1    RFT12,R1          GET CURRENT RECORD NUMBER                   
         CI,R1    2                 IS IT THE FIRST RECORD                      
         BG       SYM3X4P           NO, TAKE +1 EXIT                            
         LW,R1    R6                SET UP POINTERS                             
         LW,R2    R6                                                            
         BAL,R5   JSCAN             GET DEFAULT PARAMETERS                      
         NOP                        NO ERRORS SINCE CARD ALREADY VERIFIED       
         LW,R6    R2                ADDRESS TO STORE JOB NUMBER                 
         AI,R6    -1                R6 = ADDRESS TO STORE PRIORITY              
         LW,R13   SM:PRIO           R13 = PRIORITY THIS JOB                     
         BAL,R8   SMHEXBCD          CONVERT PRIORITY TO EBCDIC                  
         STB,R13  0,R6              STORE PRIORITY IN JOB CARD IMAGE            
         AI,R6    1                 R6= ADDRESS TO STORE JOB#                   
         LI,R15   ','                                                           
         STB,R15  0,R6              STORE A COMMA                               
         AI,R6    1                                                             
         LW,R4    R6                MOVE JOB# TO BYTE ADDR IN R4                
         LW,R1    SM:C              GET RFT INDEX FOR C FILE                    
         LB,R1    RFT8,R1           R1= AREA INDEX                              
         LH,R1    MDNAME,R1         GET AREA NAME                               
         AND,R1   M16               MASK                                        
         LI,R6    BA(BATCHF)+2      R6= ADDR OF JOB# WITHIN SAVED NAME          
         CI,R1    KIS               IS THE AREA A SYMBIONT AREA                 
         BNE      %+2               NO, BRANCH                                  
         LI,R6    BA(RCDCB)+22      POINTER TO JOB# WITHIN FILE NAME            
         LI,R14   3                 NUMBER OF CHARACTERS TO MOVE                
         BAL,R9   MOVEBYTS          MOVE IT TO THE INPUT BUFFER                 
         LI,R6    BA(KPBBB)         TERMINATE WITH '.   '                       
         LI,R14   4                                                             
         BAL,R9   MOVEBYTS                                                      
         CI,R1    KIS                                                           
         BE       SYM3X3P           EXIT IF NOT "!BATCH"ED FILE                 
         LI,R6    BA(RCDCB)+20      FILE NAME                                   
         LI,R14   8                                                             
         BAL,R9   MOVEBYTS                                                      
         SLS,R1   8                                                             
         AW,R1    KP00P             .AREA.                                      
         LI,R6    4                                                             
         LI,R14   4                                                             
         BAL,R9   MOVEBYTS                                                      
         DO       #DFACNT                                                       
         LI,R6    BA(RCDCB)+36      ACCOUNT NAME                                
         LI,R14   8                                                             
         BAL,R9   MOVEBYTS                                                      
         FIN                        #DFACNT                                     
         B        SYM3X3P                                                       
*                                                                               
KPBBB    DATA     '.   '                                                        
KP00P    DATA     X'4B00004B'       X'4B'='.'                                   
         TITLE    '** SYM3 - RCFIN SUBROUTINE **'                               
*************                                                                   
*   RCFIN   *                                                                   
*************                                                                   
*                                                                               
*                                                                               
*   THERE ARE NO MORE FILES IN THE IS AREA.  GIVE THE CALLER A                  
*   FIN RECORD.                                                                 
*                                                                               
*   AT ENTRY:     R5   LINK                                                     
*                 R10  BUFFER ADDRESS                                           
*                 R11  BYTE COUNT                                               
*                                                                               
*   ROUTINE RETURNS +2 IF JCP READ                                              
*   ROUTINE RETURNS +1 IF NON JCP READ                                          
*                                                                               
*                                                                               
*                                                                               
RCFIN    RES      0                                                             
         PUSH     R5                SAVE LINK                                   
         CI,R11   120               IS BYTE COUNT GREATER THAN MAX              
         BLE      %+2               NO                                          
         LI,R11   120               YES, SET TO MAX                             
         LI,R6    BA(XFIN)          BYTE ADDRESS OF FIN RECORD                  
         LW,R4    R10               R4= BYTE ADDRESS OF USERS BUFFER            
         LI,R14   '!'               PRECEDE FIN WITH BANG                       
         STB,R14  0,R4              STORE IN USER'S BUFFER                      
         AI,R4    1                                                             
         LI,R14   3                 REMAINING NUMBER OF BYTES TO MOVE           
         BAL,R9   MOVEBYTS          MOVE FIN                                    
         LW,R14   R11                                                           
         AI,R14   -4                BLANK FILL BUFFER                           
         LI,R0    ' '                                                           
         STB,R0   0,R4                                                          
         AI,R4    1                 BUMP POINTER                                
         BDR,R14  %-2               LOOP TIL DONE                               
         LI,R5    0                 ZERO SM:C (RFTX FOR FILE                    
         STW,R5   SM:C              REPRESENTING THE C DEVICE)                  
         STW,R5   CFLAG             INSURE CFLAG = 0                            
         PULL     R5                RESTORE LINK REGISTER                       
         MTW,0    K:JCP1            IS JCP EXECUTING                            
         BLZ      1,R5              YES, TAKE +2 EXIT                           
         LI,R9    K7                NO,  TAKE +1 EXIT (TYC=EOF)/                
         B        0,R5                                                          
         TITLE    '** SYM3 - RCFEOD SUBROUTINE **'                              
**************                                                                  
*   RCFEOD   *                                                                  
**************                                                                  
*                                                                               
*   SUBROUTINE TO PROCESS EOD ON INPUT FILE.                                    
*                                                                               
*   AT ENTRY:     R5   LINK                                                     
*                 R10  BUFFER ADDRESS                                           
*                 R11  BYTE COUNT                                               
*                                                                               
*   ROUTINE RETURNS   +1  IF ERRORS (R9=TYC)                                    
*                      +2  IF NO MORE FILES                                     
*                      +3  IF READY FOR NEXT READ                               
*                                                                               
RCFEOD   RES      0                                                             
         PUSH     R5                                                            
*   GET THE RECORD AND CHECK FOR !EOD                                           
         LW,R6    R10               MOVE FROM USER'S BUFFER                     
         LI,R4    R15*4             MOVE TO R15                                 
         LI,R14   4                 # OF BYTES TO MOVE                          
         BAL,R9   MOVEBYTS                                                      
         CW,R15   EODREC            IS IT BANG EOD RECORD                       
         BNE      RCFEOD1           NO, BRANCH                                  
         LI,R9    K6                YES, SET TYC TO EOD                         
         B        SYM3X4P           TAKE ERROR EXIT (+1)                        
RCFEOD1  RES      0                                                             
*   THE EOD RESULTED FROM THE FILE READ                                         
         LI,R9    0                                                             
         STW,R9   SM:C              RESET C FILE INDEX                          
         LI,R9    RCFEOD2           ERROR RETURN FOR CLOSE                      
         CAL1,1   RCLOSE            CLOSE RDCB                                  
         LI,R1    6                                                             
         LB,R1    RCDCB,R1          R1= AREA INDEX                              
         LH,R1    MDNAME,R1                                                     
         AND,R1   M16               R1= AREA NAME                               
         CI,R1    KIS               IS DCB ASSIGNED TO IS AREA FILE             
         BNE      RCFEOD4           NO, THIS IS A USER FILE                     
         PUSH     2,R10             SAVE BUFFER, BYTE COUNT                     
         BAL,R5   RCDELETE          YES, DELETE THE FILE                        
         B        RCFEOD6           ERROR                                       
         LI,R1    6                                                             
         LB,R6    RCDCB,R1          R6= IS AREA INDEX                           
         LW,R12   RCDCB+5           R12,R13= FILE NAME TO CONTINUE              
         LW,R13   RCDCB+6                                                       
         BAL,R8   SMGETF            GET NEXT FILE                               
         B        RCFEOD6           +1 ERROR                                    
         B        RCFEOD8           +2 NO MORE FILES                            
         PULL     2,R10             CLEANUP STACK                               
         STW,R12  RCDCB+5           STORE NEW FILE IN DCB                       
         STW,R13  RCDCB+6                                                       
         B        SYM3X6P           RETURN +3 (NEW FILE FOUND)                  
*                                                                               
*   PROCESS ERRORS                                                              
*                                                                               
RCFEOD2  RES      0                                                             
         LB,R9    R10               R9= ERROR CODE                              
         B        SYM3X4P           ERROR EXIT (+1)                             
*                                                                               
RCFEOD4  RES      0                                                             
         BAL,R5   RCGETF            GET THE NEXT FILE                           
         B        SYM3X4P           +1...ERROR, R9= TYC                         
         B        SYM3X3P           +2...NO MORE FILES, FIN SUPPLIED            
         B        SYM3X6P           +3...READY FOR NEXT READ                    
*                                                                               
RCFEOD6  RES      0                                                             
         PULL     2,R10             R10,R11= BUFFER ADDRESS, SIZE               
         LW,R9    R15               R9= TYC                                     
         B        SYM3X4P           ERROR EXIT                                  
*                                                                               
RCFEOD8  RES      0                                                             
         PULL     2,R10                                                         
         BAL,R5   RCFIN             PROCESS FIN RECORD                          
         B        SYM3X4P           TAKE ERROR EXIT                             
         B        SYM3X3P           TAKE FIN EXIT                               
         TITLE    '** SYM3 - WCGETJOB SUBROUTINE **'                            
****************                                                                
*   WCGETJOB   *                                                                
****************                                                                
*                                                                               
*   SUBROUTINE TO DEFINE A NEW JOB FILE                                         
*                                                                               
*   AT ENTRY:     R5   LINK                                                     
*                                                                               
*   ROUTINE RETURNS +1 IF ERROR (R8,R10 SET FOR STD ERROR RET)                  
*                    +2 IF NO ERRORS                                            
*                                                                               
WCGETJOB RES      0                                                             
         PUSH     R5                SAVE LINK                                   
         LI,R9    WCGJ2             ERROR RETURN FOR JOB AND CLOSE              
         LW,R0    WCDCB             GET WRITE DCB WORD 0                        
         CW,R0    Y002              IS IT OPEN                                  
         BAZ      WCGJ1             NO, BRANCH                                  
         LI,R14   WCDCB             YES, CLOSE IT                               
         CAL1,1   FPTCLOS                                                       
WCGJ1    RES      0                                                             
         CAL1,7   WCJOB             M:JOB CALL                                  
         LW,R12   WCJOBN+1          R12,R13= NEW JOB FILE                       
         LW,R13   WCJOBN+2                                                      
         STW,R12  WCDCB+5           STORE FILE NAME IN WRITE DCB                
         STW,R13  WCDCB+6                                                       
         LI,R8    KOS                                                           
         BAL,R5   FMMASTX           SET R6 = 'OS' AREA INDEX                    
         NOP                                                                    
         LI,R2    6                                                             
         STB,R6   WCDCB,R2          AND SET IN OUTPUT DCB                       
*   OPEN THE OUTPUT COOP DCB                                                    
         LI,R14   WCDCB             R14= ADDR OF DCB TO OPEN                    
         LI,R9    WCGJ2             ERROR ADDRESS                               
         CAL1,1   FPTOPEN           OPEN THE DCB                                
         B        SYM3X3P           TAKE NORMAL EXIT                            
*                                                                               
*   ERROR PROCESSING                                                            
*                                                                               
WCGJ2    RES      0                 ERRORS FROM M:JOB AND M:CLOSE               
         B        SYM3X4P           TAKE ERROR EXIT                             
         TITLE    '** SYM3 - WCSTSYM SUBROUTINE **'                             
***************                                                                 
*   WCSTSYM   *                                                                 
***************                                                                 
*                                                                               
*   ROUTINE FREES FILE SPACE FOR THE OUTPUT COOPERATIVE.   CALLED               
*   WHEN THE COOPERATIVE HAS RUN OUT OF ROOM IN THE OS AREA.                    
*                                                                               
*   AT ENTRY:     R5   LINK                                                     
*                                                                               
*   RETURNS +2 NORMALLY                                                         
*   RETURNS +1 IF ERRORS. R8,R10 SET AS IN CAL ERROR RETURN                     
*                                                                               
WCSTSYM  RES      0                                                             
         LI,R1    SYMBOFLO          SET OVERFLO INDICATOR FOR                   
         STS,R1   SYMB               SYMBIONT TASK.                             
         BAL,R8   SIMIKEY           SIMULATE SYYNDD,I KEYIN                     
         LI,R9    WCSTSM2           ERROR RETURN FOR ALL CALLS                  
         CAL1,7   WCSIG             SIGNAL SYBM TASK FOR SPACE                  
         CAL1,7   WCSTART           START SYMBIONT TASK                         
         CAL1,1   CKSIG             CHECK SIGNAL WITH WAIT                      
         LI,R0    0                                                             
         STS,R0   SYMB              RESET OVERFLOW INDICATOR                    
         B        SYM3X3            EXIT +2                                     
*                                                                               
*                                                                               
WCSTSM2  RES      0                                                             
         B        SYM3X4            TAKE ERROR EXIT                             
         PAGE                                                                   
***************                                                                 
*   RCDELETE  *                                                                 
***************                                                                 
*                                                                               
*   ROUTINE DELETES THE INPUT SYMBIONT FILE WHICH IS CURRENTLY                  
*   IN THE RCDCB DCB.                                                           
*   ROUTINE ALSO POLLS THE SYMBIONT TASK IN CASE                                
*   IT IS SIGNALLING FOR MORE DISC FILE SPACE.                                  
*                                                                               
*                                                                               
*    AT ENTRY:   R5   LINK                                                      
*                                                                               
*   ROUTINE EXITS  +1 IF ERROR(R15= TYC)                                        
*   ROUTINE EXITS +2 IF NO ERRORS                                               
*                                                                               
RCDELETE RES      0                                                             
         LI,R1    6                                                             
         LB,R1    RCDCB,R1          GET AREA INDEX                              
*                                                                               
         LH,R1    MDNAME,R1         GET AREA NAME                               
         AND,R1   M16               MASK IT OFF                                 
*                                                                               
         CI,R1    KIS               IS IT IS AREA                               
         BNE      1,R5              NO, EXIT                                    
*                                                                               
         LCI      3                                                             
         LM,R11   RCDLTE            MOVE DELETE FPT INTO R11-R15                
         LW,R14   RCDCB+5           FILE NAME TO DELETE                         
         LW,R15   RCDCB+6                                                       
         LI,R9    RCDEL1            ERROR RETURN FOR DELTE,POLL,POST            
         CAL1,7   R11               DELETE THE FILE                             
*   NOW POLL SYMBIONT TASK                                                      
         CAL1,7   RCPOLL            POLL                                        
         LI,R1    K1FFFF                                                        
         LS,R0    RCPOLL            GET SIGNAL ECB ID                           
         STS,R0   RCPOST            STORE IT IN THE POST FPT                    
*   POST THE SIGNAL ECB IN THE SYMBIONT TASK                                    
         CAL1,7   RCPOST            POST                                        
         B        1,R5              RETURN NORMAL (+2)                          
*                                                                               
*                                                                               
RCDEL1   RES      0                 ERROR EXIT FOR DLTE,POLL,POST               
         LB,R15   R10               GET TYC IN R15                              
         CI,R15   TYC83             IS ERROR BECAUSE THERE WAS NO SIGNAL        
         BE       1,R5              YES, TAKE NORMAL EXIT                       
         B        0,R5              NO, ERROR EXIT                              
         TITLE    '** SYM3 - SIMIKEY SUBROUTINE **'                             
***************                                                                 
*   SIMIKEY   *                                                                 
***************                                                                 
*                                                                               
*   ROUTINE SIMULATES THE SYYNDD,I KEYIN FOR ALL LINE PRINTERS                  
*   WHICH ARE IN USE BY  SYMBIONTS.                                             
*                                                                               
*   AT ENTRY:     R8    LINK                                                    
*                                                                               
SIMIKEY  RES      0                                                             
         LH,R7    DCT1              R7= # OF DCT ENTRIES                        
         LI,R15   DCTSYMI                                                       
SIMIK10  RES      0                                                             
         LB,R0    DCTSYM1,R7        GET SYMBIONT FLAGS                          
         CI,R0    DCTSYMU           IS IT IN USE BY SYMBIONTS                   
         BAZ      SIMIK20           NO, BRANCH                                  
         CI,R0    DCTSYML+DCTSYMT+DCTSYMQ IS THE DEVICE LOCKED                  
         BANZ     SIMIK20           YES, DON'T SET 'I'                          
         LB,R14   DCT3,R7           YES, USE THIS ONE IF     THE DEVICE         
         CI,R14   K80                IS AN OUTPUT DEVICE AND                    
         BAZ      SIMIK20            IS NOT MARKED 'DOWN'.                      
         CI,R14   K20                                                           
         BANZ     SIMIK20                                                       
         OR,R0    R15               SET 'I'= 1                                  
         STB,R0   DCTSYM1,R7        STORE SYMBIONT FLAGS BACK                   
SIMIK20  RES      0                                                             
         BDR,R7   SIMIK10                                                       
         B        SYM3X5                                                        
         TITLE    '** SYM3 - SMBSYF SUBROUTINE **'                              
**************                                                                  
*   SMBSYF   *                                                                  
**************                                                                  
*                                                                               
*   ROUTINE PROCESSES 'BUSY FILE' ERROR RETURN WHICH OCCURS                     
*   WHEN THE OUTPUT SYMBIONT CATCHES UP WITH THE OUTPUT COOP.                   
*   ROUTNE DELETES FILES WHICH HAVE ALREADY BEEN OUTPUT.                        
*                                                                               
*   AT ENTRY:     R1   DCT INDEX                                                
*                 R5   LINK                                                     
*                                                                               
*   ROUTINE RETURNS +1 IF ERRORS (R8,R10 SET AS IN CAL                          
*                          ERROR EXIT.                                          
*   ROUTINE RETURNS +2 IF NO ERRORS                                             
*                                                                               
SMBSYF   RES      0                                                             
         PUSH     R5                SAVE LINK                                   
         PUSH     R1                SAVE DCT INDEX                              
         LI,R1    -1                PHONY FPT CODE FOR FINDBB                   
         BAL,R5   FINDBB            GET A BLK BUF                               
         B        SMBSYF2           ERROR                                       
         LI,R8    KOS                                                           
         BAL,R5   FMMASTX           SET 'OS' AREA INDEX IN R6                   
         NOP                                                                    
         LW,R10   R15               SET BBCW LOC FOR JOB DELETE                 
         PULL     R1                                                            
         PUSH     R1                                                            
         LW,R7    DCTSYM2,R1        R7= TSPACE POINTER                          
         LW,R7    SYMCNTX,R7        THEN ADDRESS OF CONTEXT                     
         LW,R12   TSRWFDCB+5,R7     GET CURRENT FILE NAME IN R12,R13            
         LW,R13   TSRWFDCB+6,R7                                                 
         BAL,R8   JOBDLTEA          DELETE ALL FILES IN OS FOR THIS             
*                                    JOB EXCEPT CURRENT FILE.                   
         B        SMBSYF4           ERROR, R15= ERROR                           
         LW,R6    R10               SET BBCW LOC SO WE CAN                      
         BAL,R11  RELADBUF          RELEASE THE BLK BUF                         
SMBSYF0  RES      0                                                             
         LI,R9    SMBSYF1           ERROR RETURN FOR POLL POST (IGN)            
         CAL1,7   FPTPOLBK          POLL BKGD                                   
         LI,R5    K1FFFF                                                        
         LS,R4    FPTPOLBK          GET SIGNAL ECBID                            
         STS,R4   FPTPSTBK          STORE IN POST FPT                           
         CAL1,7   FPTPSTBK          POST THE ECB                                
         B        SMBSYF0           POLL AGAIN UNTIL NO MORE SIGNALS            
SMBSYF1  RES      0                                                             
         LI,R1    SYMBDO            GO INTO 'DO' MODE                           
         CW,R1    SYMB               ARE WE ALREADY IN DO MODE                  
         BANZ     SMBSYF3           YES, BRANCH                                 
         STS,R1   SYMB              NO, SET DO BIT                              
         PUSH     9,R2              SAVE R2-R10                                 
         LI,R2    SMSG6             OUTPUT 'OS AREA FULL' MESSAGE               
         BAL,R5   JOBMSG                                                        
         PULL     9,R2                                                          
SMBSYF3  RES      0                                                             
         PULL     R1                                                            
         LW,R7    DCTSYM2,R1        GET TSPACE POINTER                          
         LW,R7    SYMCNTX,R7        THEN ADDRESS OF CONTEXT                     
         B        SYM3X3P           EXIT NORMALLY                               
*                                                                               
*   PROCESS ERRORS                                                              
*                                                                               
SMBSYF2  RES      0                                                             
         LI,R15   K55               ERROR CODE                                  
         STB,R15  R10                                                           
         B        SMBSYF10                                                      
*                                                                               
SMBSYF4  RES      0                                                             
         STB,R15  R10                                                           
*                                                                               
SMBSYF8  RES      0                                                             
         BAL,R11  RELADBUF          RELEASE THE BLK BUF                         
SMBSYF10 PULL     R1                                                            
         B        SYM3X4P           EXIT                                        
         TITLE    '** SYM3 - SMINIT SUBROUTINE **'                              
**************                                                                  
*   SMINIT   *                                                                  
**************                                                                  
*                                                                               
*   ROUTINE GETS AND INITIALIZES TSPACE FOR A SYMBIONT DEVICE                   
*                                                                               
*   AT ENTRY:   R1   DCT INDEX                                                  
*               R5   LINK                                                       
*               R12  1ST TWO CHARACTERS OF DEVICE NAME (CR, LP, DTC.)           
*                                                                               
*   ROUTINE RETURNS +1 IF ERROR WITH ERROR CODE IN R15                          
*   ROUTINE RETURNS +2 IF NO ERRORS                                             
*                                                                               
*                                                                               
SMINIT   RES      0                                                             
         PUSH     R5                SAVE LINK                                   
         LI,R7    2                                                             
         BAL,R8   GETTEMP           GET TSPACE                                  
         B        SMINIT6           ERROR, CAN'T GET TSPACE                     
         ENABLE                                                                 
         PUSH     R1                                                            
         LI,R1    -1                                                            
         BAL,R5   FINDBB            GET A CONTEXT BLOCK                         
         B        SMINIT5             NONE, GIVE ERROR                          
*                                                                               
         PULL     R1                RECOVER DEVICE INDEX                        
         LW,R8    *R15              GET ADDRESS OF THE BUFFER                   
         AND,R8   M17               REMOVE CONTROL FLAGS                        
         DISABLE                                                                
         STW,R7   DCTSYM2,R1        STORE TSPACE POINTER                        
         STW,R8   SYMCNTX,R7        SET ADDRESS OF CONTEXT IN TSPACE            
         LW,R7    R8                                                            
         STW,R15  TSBBCW,R7         AND SAVE ADDRESS OF CONTROL WORD            
         ENABLE                                                                 
*                                                                               
         CI,R12   KCR               IS THIS A CARD READER                       
         BE       SMINIT2           YES, BRANCH                                 
*                                                                               
*   HERE THE DEVICE IS AN OUTPUT DEVICE.                                        
*   SET UP TSPACE FOR LP OUTPUT.                                                
*                                                                               
         LW,R0    R7                MOVE FPT'S, DCB'S TO TSPACE                 
         AI,R0    TSRWFPT-1                                                     
         LI,R2    SIZEOS            R2= # OF WORDS TO MOVE                      
         LW,R14   FPTLP-1,R2                                                    
         STW,R14  *R0,R2                                                        
         BDR,R2   %-2                                                           
         B        SMINIT4                                                       
*                                                                               
*   HERE THE DEVICE IS A CARD READER.                                           
*   SET UP TSPACE FOR CR INPUT.                                                 
*                                                                               
SMINIT2  RES      0                                                             
         LW,R0    R7                MOVE FPT'S, DCB'S TO TSPACE                 
         AI,R0    TSRWFPT-1         R0= 1ST ADDR TO STORE INTO                  
         LI,R2    SIZEIS            NUMBER OF WORDS TO MOVE                     
         LW,R14   FPTCR-1,R2                                                    
         STW,R14  *R0,R2                                                        
         BDR,R2   %-2                                                           
*                                                                               
*   REGISTERS CONTAIN:                                                          
*        R1       DCT INDEX                                                     
*        R7       TSPACE POINTER                                                
*        R12      1ST TWO CHARACTERS OF DEVICE NAME (EBCDIC)                    
*                                                                               
SMINIT4  RES      0                                                             
         LI,R0    0                                                             
         STW,R0   TSJOBN,R7         INITIALIZE JOB# FOR THIS DEVICE             
         AWM,R7   TSRWFPT,R7        FIX DCB ADDRESS FOR READ/WRITE FPT          
         AWM,R7   TSRWDCB+2,R7      FIX BUFFER ADDRESS IN DCB                   
         AWM,R7   TSRWFFPT,R7       FIX DCB ADDRESS FOR SYMBIONT FILE I/O       
         AWM,R7   TSRWFDCB+2,R7     FIX BUFFER ADDRESS IN FILE DCB              
*                                                                               
*                 NOTE: THESE CHANGE UNUSED SPACE FOR 'CR' CONTEXTS             
         AWM,R7   TSREADA,R7        FIX DCB ADDRESSES IN READ/WRITE             
         AWM,R7   TSWRITEA,R7       ALTERNATE BUFFER FPTS                       
         AWM,R7   TSREADP+SYMBUFFR,R7   FIX UP ADDRESSES OF THE                 
         AWM,R7   TSWRITEP+SYMBUFFR,R7  BUFFERS TOO                             
         AWM,R7   TSREADA+SYMBUFFR,R7                                           
         AWM,R7   TSWRITEA+SYMBUFFR,R7                                          
*                                                                               
*                                                                               
*   SET UP DEVICE PARAMETERS IN DCB                                             
         LW,R0    R7                                                            
         AI,R0    TSRWDCB           R0= DEVICE DCB ADDRESS                      
         LI,R3    6                 BYTE OFFSET FOR 'TYPE' FIELD                
         LB,R14   DCT4,R1           R14= DEVICE TYPE                            
         AI,R14   K80               DEVF BIT                                    
         STB,R14  *R0,R3            STORE IN DCB                                
         LI,R3    7                 BYTE OFFSET FOR DEVICE INDEX FIELD          
         STB,R1   *R0,R3            STORE IN DCB                                
*   SET UP FILE DCB PARAMETERS                                                  
         LW,R0    R7                                                            
         AI,R0    TSRWFDCB          R0= FILE DCB ADDRESS                        
         LI,R3    6                 BYTE OFFSET FOR 'AREA INDEX' FIELD          
         LI,R8    KIS               SET AREA NAME= IS                           
         CI,R12   KCR               IS THE DEVICE A CARD READER                 
         BE       %+2               YES                                         
         LI,R8    KOS               NO, SET AREA NAME TO OS                     
         BAL,R5   FMMASTX           GET AREA INDEX IN R6                        
         BAL,R0   SYMCRSH           CRASH                                       
         STB,R6   *R0,R3            SET DCB WITH THE AREA INDEX                 
*   OPEN THE DEVICE DCB                                                         
         LW,R14   TSRWFPT,R7        R14= ADDR OF DCB TO OPEN                    
         AND,R14  M17               MASK                                        
         LI,R9    SMINIT8           ERROR RETURN FOR OPEN                       
         CAL1,1   FPTOPEN           OPEN                                        
         B        SYM3X3P           EXIT BACK TO RESIDENT SYMBIONT              
*                                                                               
*   ERROR PROCESSING FOR THIS SUBROUTINE                                        
*                                                                               
SMINIT5  EQU      %         NO BLOCKING BUFFER FOR CONTEXT BLOCK                
         LI,R15   X'55'             SET ERROR CODE                              
         PULL     R1                RECOVER DEVICE INDEX                        
         STW,R7   DCTSYM2,R1        STORE TSPACE ADDR FOR CLEANUP               
*                                                                               
SMINIT6  RES      0                                                             
         STB,R15  R10               MAKE R10 LOOK LIKE RETURN FROM CAL          
         LI,R2    SMSG3             MESSAGE= 'ERROR'                            
         BAL,R5   SYMCUP            DO GENERAL CLEANUP                          
         B        SYM3X4P           EXIT +1 (ERROR)                             
*                                                                               
SMINIT8  RES      0                                                             
         LB,R15   R10               R15= ERROR CODE                             
         LI,R2    SMSG1             PRESET ERROR= DEVICE UNAVAILABLE            
         CI,R15   TYC83             IS IT A NON-SHARABLE DEVICE                 
         BE       SMINIT10          YES, MSG= 'UNAVAILABLE'                     
         CI,R15   K3                IS IT DEVICE DOWN                           
         BE       SMINIT10          YES, BRANCH                                 
         LI,R2    SMSG3             NO, OUTPUT GENERAL 'ERROR' MSG              
SMINIT10 RES      0                                                             
         BAL,R5   SYMCUP            DO GENERAL CLEANUP                          
         B        SYM3X4P           TAKE ERROR EXIT (+1)                        
         TITLE    '** SYM3 - SMFINDF SUBROUTINE **'                             
***************                                                                 
*   SMFINDF   *                                                                 
***************                                                                 
*                                                                               
*   ROUTINE VERIFYS THAT THE FILE SELECTED BY THE SYMBIONTS                     
*   FOR OUTPUT IS NOT CURRENTLY OPEN BY BKGD.                                   
*                                                                               
*   AT ENTY:      R1   DCT INDEX                                                
*                 R5   LINK                                                     
*                 R7   CONTEXT POINTER                                          
*                 R8   ADDR FOR RETURN AFTER STIMER (USED BY CALLER             
*                       IF BUSY EXIT TAKEN)                                     
*                                                                               
SMFINDF  RES      0                                                             
         LW,R12   TSRWFDCB+5,R7     GET SELECTED FILE IN R12,R13                
         LW,R13   TSRWFDCB+6,R7                                                 
         LH,R2    RFT4              GET NUMBER OF RFT ENTRIES                   
*                                                                               
SMFINF1  RES      0                                                             
         CD,R12   RFT1,R2           DOES NAME COMPARE                           
         BE       SMFINF3           YES, BRANCH                                 
         BDR,R2   SMFINF1           NO, TRY NEXT                                
         B        SYM3X3            FILE OK, TAKE +2 EXIT                       
*                                                                               
SMFINF3  RES      0                                                             
         MTB,0    RFT15,R2          IS FILE OPEN BY BKGD (COOP)                 
         BNEZ     SYM3X4            YES, TAKE +1 EXIT                           
         MTB,0    RFT13,R2          TEST FOR Q-FILE                             
         BEZ      SYM3X4            NO OPEN DCBS, CANT BE Q-FILE.               
         B        SYM3X3            OPEN BY SYMBIONTS (Q-FILE)                  
         TITLE    '** SYM3 - SMJOBFIN SUBROUTINE **'                            
****************                                                                
*   SMJOBFIN   *                                                                
****************                                                                
*                                                                               
*   ROUTINE TO PROCESS JOB & FIN CONTROL CARDS IN THE INPUT SYMBIONT            
*                                                                               
*   AT ENTRY:     R1   DCT INDEX                                                
*                 R5   LINK                                                     
*                 R12  JOB OR FIN IN HEX                                        
*                                                                               
*                                                                               
*   ROUTINE EXITS +1 IF RECOVERABLE ERROR (R15=TYC)                             
*                 +2 IF FIN OR NON-RECOVERABLE ERROR (CLEANUP DONE)             
*                 +3 IF JOB CARD SUCESSFULLY PROCESSED                          
*                                                                               
*                                                                               
SMJOBFIN RES      0                                                             
         PUSH     R5                SAVE LINK                                   
*   CLOSE THE FILE DCB.                                                         
         BAL,R5   SMCLOSF                                                       
         BAL,R0   SYMCRSH           SHOULDN'T GET ERROR                         
         CW,R12   XJOB              IS IT A JOB CARD                            
         BNE      SMJF6             NO, BRANCH TO PROCESS FIN                   
*                                                                               
*  PROCESS JOB CARD                                                             
*                                                                               
         LB,R0    DCTSYM1,R1        GET SYMBIONT FLAGS                          
         CI,R0    DCTSYMT           IS THE 'T' BIT SET                          
         BANZ     SMJF6             YES, PROCESS LIKE FIN                       
         CI,R0    DCTSYML           IS THE 'L' BIT SET                          
         BAZ      SMJF2             NO, BRANCH                                  
         AND,R0   X7F               YES, RESET 'I'                              
         STB,R0   DCTSYM1,R1        STORE FLAGS                                 
         B        SMJF22            TAKE +2 EXIT                                
SMJF2    RES      0                                                             
*                                                                               
*   VALIDATE PARAMETERS ON THE JOB CARD, SUPPLY DEFAULTS WHERE                  
*   NECESSARY AND CONSTRUCT THE JOB MESSAGE FOR OC OUTPUT.                      
         PUSH     R1                                                            
         LW,R1    R7                                                            
         AI,R1    TSRWBUF           R1= INPUT BUFFER ADDRESS                    
         LI,R2    BATCHMSG          R2= OUTPUT BUFFER ADDRESS                   
         BAL,R5   JOBSCAN           VALIDATE JOB CARD, ETC.                     
         B        SMJF8             ERROR                                       
         PULL     R1                                                            
*                                                                               
*   DEFINE A NEW JOB FILE.                                                      
*   REGISTERS ARE:                                                              
*        R1       DCT INDEX                                                     
*        R14      PRIORITY TO BE ASSOCIATED WITH THE NEW JOB FILE               
*                                                                               
         LW,R7    DCTSYM2,R1        GET TSPACE POINTER                          
         LW,R7    SYMCNTX,R7        GET ADDRESS OF THE CONTEXT BLOCK            
         LW,R12   R7                                                            
         AI,R12   TSMSCFPT-1        LOC TO MOVE FPT TO IN TSPACE                
         LI,R15   R11               RETURN AREA, FILE NAME IN R11-R13           
         LI,R2    SIZEFPTJ          # OF WORDS IN JOB FPT                       
         LW,R13   FPTJOB-1,R2       MOVE FPT TO TPACE                           
         STW,R13  *R12,R2                                                       
         BDR,R2   %-2                                                           
         STW,R14  TSMSCFPT+5,R7     STORE PRIORITY IN FPT                       
         LI,R9    SMJF12            ERROR ADDRESS FOR JOB CALL                  
         CAL1,7   TSMSCFPT,R7       JOB CALL                                    
*                                                                               
         STW,R12  TSRWFDCB+5,R7     STORE FILE NAME IN DCB                      
         STW,R13  TSRWFDCB+6,R7                                                 
*   STORE JOB NUMBER IN MESSAGE BUFFER.                                         
         SLD,R12  8                                                             
         STW,R12  TSJOBN,R7         SAVE CURRENT JOB NUMBER                     
         LI,R0    ','                                                           
         STB,R0   R12               R12= '',JJJ'' WHERE JJJ= JOB NUMBER         
         LI,R2    0                 BYTE INDEX FOR LOAD                         
         LB,R3    BATCHMSG          BYTE INDEX FOR STORE                        
         LI,R15   4                 # OF BYTES TO MOVE                          
SMJF4    RES      0                                                             
         LB,R0    R12,R2            GET A BYTE                                  
         STB,R0   BATCHMSG,R3       STORE A BYTE                                
         AI,R2    1                                                             
         AI,R3    1                                                             
         BDR,R15  SMJF4             MOVE ',JJJ' TO MESSAGE BUFFER               
         STB,R3   BATCHMSG          STORE COUNT IN BYTE 0 OF BUFFER             
         LI,R2    BATCHMSG          R2= WORD ADDR OF MESSAGE                    
*   OUTPUT JOB MESSAGE                                                          
         PUSH     R1                                                            
         PUSH     R7                                                            
         BAL,R5   JOBMSG            OUTPUT JOB MESSAGE                          
         PULL     R7                                                            
         PULL     R1                                                            
         B        SMJF23            RETURN TO WRITE THE RECORD TO FILE          
         SPACE    5                                                             
*                                                                               
*   PROCESS FIN CARD                                                            
*                                                                               
SMJF6    RES      0                                                             
         LW,R14   TSRWFPT,R7        GET ADDR OF DEVICE DCB                      
         AND,R14  M17                                                           
         LI,R9    SMJF14                                                        
         CAL1,1   FPTCLOS           CLOSE THE DEVICE DCB                        
         LW,R0    TSRWFDCB+6,R7     GET CURRENT EXTENT # NOW AND                
         AND,R0   M16               SAVE IT BECAUSE CONTEXT WILL BE             
         PUSH     R0                GONE AFTER CALL TO SYMCUP.                  
         LI,R2    SMSG2             OUTPUT 'IDLE' MSG                           
         BAL,R5   SYMCUP            CLEANUP                                     
*   START UP BACKGROUND IF IT IS NOT ALREADY RUNNING                            
         PULL     R0                GET SAVED EXTENT NUMBER                     
         CI,R0    '00'              WORKING ON EXTENT 0                         
         BNE      SMJF22            NO, BKGD ALREADY STARTED                    
         LW,R0    SYMB              GET SYMBIONT FLAGS                          
         CI,R0    SYMBC             IN 'AUTO BKG START' MODE                    
         BAZ      SMJF22            NO, EXIT                                    
         PUSH     R1                YES, SAVE DCT INDEX                         
         BAL,R8   BKGSEQ            START UP BKGD                               
         NOP                        BKGD ALREADY RUNNING                        
         PULL     R1                RESTORE DCT INDEX                           
         B        SMJF22            TAKE +2 EXIT                                
*                                                                               
*   PROCESS ERRORS IN JOB CARD                                                  
*                                                                               
SMJF8    RES      0                                                             
         PULL     R1                                                            
         LI,R15   TYC7A             TYC FOR ILLEGAL JOB CARD                    
         STB,R15  R10               STORE ERROR CODE                            
SMJF10   RES      0                                                             
         LI,R2    SMSG3             MESSAGE= 'ERROR'                            
         BAL,R5   SYMCUP            CLEANUP                                     
         B        SMJF22            EXIT +2                                     
*                                                                               
*   PROCESS ERRORS IN M:JOB CALL                                                
*                                                                               
SMJF12   RES      0                                                             
         LW,R7    DCTSYM2,R1        GET TSPACE POINTER                          
         LW,R7    SYMCNTX,R7        GET ADDRESS OF THE CONTEXT BLOCK            
         LB,R15   R10               R15= ERROR CODE                             
         CI,R15   K72               IS IT AREA OVERFLOW                         
         BE       SMJF21            YES, EXIT +1 (SIGNAL BKGD)                  
         CI,R15   K55               IS IT NO BLK BUF                            
         BE       SMJF21            YES, EXIT +1 (STIMER DELAY)                 
         B        SMJF10            CLEANUP AND RETURN TO EXEC                  
*                                                                               
*   PROCESS ERRORS IN DEVICE DCB M:CLOSE                                        
*                                                                               
SMJF14   RES      0                                                             
         BAL,R5   SMDEVERR          CLEANUP                                     
         LB,R15   R10               SET R15= TYC                                
         B        SMJF22            TAKE +2 EXIT                                
*                                                                               
*   EXITS: START BKGD THEN TAKE APPROPRIATE EXIT                                
*                                                                               
SMJF21   RES      0                                                             
         B        SYM3X4P           +1 EXIT                                     
*                                                                               
SMJF22   RES      0                                                             
         B        SYM3X3P           +2 EXIT                                     
*                                                                               
SMJF23   RES      0                                                             
         B        SYM3X6P           +3 EXIT                                     
         OLAYEND                                                                
         FIN      #SYMB                                                         
         END                                                                    
