         PCC      0                                                             
         SYSTEM   SIG5P                                                         
         SYSTEM   OPTIONS                                                       
         DO       #SYMB                                                         
*   ENTRY POINTS                                                                
         DEF      SYM1                                                          
*   EXIT POINTS                                                                 
         DEF      SYM1X1,SYM1X2                                                 
         DEF      SYM1X9                                                        
OLAYFLAG EQU      'SYM1'                                                        
         SYSTEM   CPRMON                                                        
         PAGE                                                                   
*                                                                               
*   EXITS                                                                       
*                                                                               
SYM1X1P  PULL     R5                                                            
SYM1X1   B        0,R5                                                          
SYM1X2P  PULL     R5                                                            
SYM1X2   B        1,R5                                                          
SYM1X9   B        SEX1                                                          
         PAGE                                                                   
*                                                                               
*   THE FOLLOWING ARE NORMAL AND ERROR RETURNS TO BE TAKEN                      
*   BY THE TEST CALL DEPENDING ON WHETHER THE SERVICE COMPLETED                 
*   NORMALLY OR IN ERROR.   THE ADDRESS OF THE RETURN LOCATION                  
*   IS STORED PRIOR TO EXECUTING THE CALL.                                      
*                                                                               
RRET     RES      0                 READ CR DEVICE RETURNS                      
         B        SYMB80            NORMAL RETURN                               
         B        SYMB75            ERROR RETURN                                
*                                                                               
WRET     RES      0                 WRITE LP DEVICE RETURNS                     
         B        SYMB170           NORMAL RETURN                               
         B        SYMB164           ERROR RETURN                                
*                                                                               
STIMRET  RES      0                 STIMER RETURNS                              
         B        TIMESUP           NORMAL RETURN                               
         B        RWERR14           ERROR RETURN                                
*                                                                               
SIGRET   RES      0                 SIGNAL BKGD RETURNS                         
         B        TIMESUP           NORMAL RETURN                               
         B        SYMERR8           ERROR RETURN                                
         TITLE    '** SYM1 - SYMBIONT EXECUTIVE **'                             
SYM1     RES      0                                                             
         LI,R15   0                                                             
         STW,R15  SYMCOUNT          SET ACTIVITY COUNT=0                        
SYMB5    RES      0                                                             
         LH,R1    DCT1              R1= NUMBER OF DCT ENTRIES                   
SYMB10   RES      0                                                             
         LB,R0    DCTSYM1,R1        GET FLAGS FOR THIS DEVICE                   
         CI,R0    DCTSYMI           IS IT ON-LINE                               
         BANZ     SYMB20            YES, BRANCH                                 
SYMB15   RES      0                                                             
         BDR,R1   SYMB10            NO, TRY NEXT                                
         MTW,0    SYMCOUNT          WERE ANY SERVICES STARTED                   
         BNEZ     SYMB300           YES, WAIT FOR COMPLETION                    
         B        SYM1X9            EXIT AND STOP SYMBIONT TASK                 
*                                                                               
*                                                                               
SYMB20   RES      0                                                             
         LD,R12   DCT16,R1                                                      
         SLD,R12  8                                                             
         AND,R12  M16               R12=  'CR' OR 'LP' OR ....                  
         CI,R0    DCTSYMS+DCTSYMQ   SUSPENDED ('S'), OR Q'ED ('Q')              
         BANZ     SYMB15            YES, TRY NEXT                               
*                                                                               
SYMB27   RES      0                                                             
         DO       #MEDIA                                                        
         DISABLE                                                                
         LB,R0    DCTRBM,R1         GET FLAGS                                   
         CI,R0    DCTRBMS           DOES SYMBIONTS HAVE THE DEVICE              
         BANZ     SYMB40            YES, BRANCH                                 
         CI,R0    DCTRBMMR          IS MEDIA REQUESTING DEVICE                  
         BANZ     SYMB28            YES, CAN'T GET IT YET                       
         CI,R0    DCTRBMM           NO, DOES MEDIA HAVE THE DEVICE              
         BAZ      SYMB30            NO                                          
SYMB28   RES      0                                                             
         OR,R0    XDCTRBMR          YES, SET REQUEST BIT                        
         STB,R0   DCTRBM,R1         STORE FLAGS BACK                            
         ENABLE                                                                 
         B        SYMB15            CONTINUE WITH LOOP                          
SYMB30   RES      0                                                             
         OR,R0    XDCTRBMS          SET 'IN USE' BY SYMBIONTS                   
         AND,R0   X7F               RESET REQUEST BIT                           
         STB,R0   DCTRBM,R1                                                     
SYMB40   RES      0                                                             
         ENABLE                                                                 
         FIN      #MEDIA                                                        
         LW,R7    DCTSYM2,R1        GET TSPACE POINTER                          
         BNEZ     SYMB44            B IF TSPACE ALREADY OBTAINED                
         BAL,R5   SMINIT            GET TSPACE AND INITIALIZE IT                
         B        SYMB5             +1, ERROR                                   
         B        SYMB70            OK, CONTINUE                                
*                                                                               
*                                                                               
SYMB44   EQU      %         ALREADY GOTTEN; GET ADDRESS OF THE CONTEXT          
         LW,R7    SYMCNTX,R7                                                    
*                                                                               
*                                                                               
SYMB70   RES      0                                                             
*   REGISTERS CONTAIN:                                                          
*        R1       DCTX                                                          
*        R7       CONTEXT POINTER                                               
*        R12      1ST TWO CHARACTERS OF DEVICE NAME (EBCDIC)                    
*                                                                               
         CI,R12   KCR               IS THIS A CARD READER                       
         BNE      SYMB150           NO, OUTPUT SYMBIONT DEVICE                  
         TITLE    '** SYM1 - CARD READER SYMBIONT **'                           
*                                                                               
*   PROCESS INPUT SYMBIONT DEVICE                                               
*                                                                               
         LW,R0    TSRWDCB,R7        GET DCB WORD 0                              
         CI,R0    BIT19             IS THE DCB BUSY                             
         BANZ     SYMB15            YES, DON'T START ANYTHING                   
         LB,R0    DCTSYM1,R1        GET SYMBIONT FLAGS                          
         CI,R0    DCTSYMX           IS X KEY-IN IN EFFECT                       
         BAZ      SYMB72            NO, BRANCH                                  
         BAL,R5   SMXKEY            YES, PROCESS                                
         B        SYMB5             RETURN TO EXEC                              
SYMB72   RES      0                                                             
         LI,R8    RRET              SET LOCATION OF RETURN ADDRESSES            
         STW,R8   TSRWRET,R7        STORE IN TSPACE BLOCK                       
         LI,R9    SYMB75            ADDR TO PROCESS IMMEDIATE ERRS              
RDCAL    CAL1,1   TSRWFPT,R7        READ A CARD                                 
         MTW,1    SYMCOUNT          INCREMENT SERVICES STARTED                  
         B        SYMB5             RETURN TO TOP OF LOOP                       
         SPACE    3                                                             
*                                                                               
*   PROCESS ERRORS FROM CR READ                                                 
*                                                                               
SYMB75   RES      0                                                             
         LI,R8    RDCAL+1           R8 CLOBBERED BY TEST CALL                   
         LB,R15   R10               R15= ERROR CODE                             
         CI,R15   K5                IS IT EOD                                   
         BE       SYMB130           YES, OK                                     
         B        SYMB164C          PROCESS DEVICE ERROR OR MANUAL              
         SPACE    3                                                             
*                                                                               
*   RETURN HERE WHEN READ IS DONE AND CHECKED.                                  
*        R1       DCT INDEX                                                     
*        R7       TSPACE POINTER                                                
*                                                                               
SYMB80   RES      0                                                             
         LW,R12   TSRWBUF,R7        GET WORD IN BUFFER                          
         LB,R14   R12               GET 1ST CHARACTER                           
         CI,R14   '!'               IS IT A CONTROL CARD (BANG)                 
         BNE      SYMB130           NO, BRANCH                                  
         LW,R13   TSRWBUF+1,R7      GET SECOND WORD                             
         SCD,R12  8                                                             
         CW,R12   XJOB              IS IT A JOB CARD                            
         BE       SYMB85            YES, BRANCH                                 
         CW,R12   XFIN              IS IT A FIN CARD                            
         BNE      SYMB130           NO, GO WRITE THE CARD IMAGE                 
SYMB85   RES      0                                                             
         BAL,R5   SMJOBFIN          PROCESS JOB/FIN                             
         B        SYMB140           +1...RECOVERABLE ERROR (R15=TYC)            
         B        SYMB5             +2...FIN OR ERROR (CLEANUP DONE)            
*                                   +3...NORMAL EXIT                            
SYMB130  RES      0                                                             
*                                                                               
*   WRITE THE CARD IMAGE TO THE SYMBIONT FILE                                   
*                                                                               
         LW,R14   TSRWDCB+4,R7      GET DEVICE DCB WORD 4                       
         LW,R15   YFFFE                                                         
         STS,R14  TSRWFDCB+3,R7     STORE ARS IN FILE DCB (RSZ)                 
         LI,R9    SYMB134           ERROR RETURN FOR FILE WRITE                 
         CAL1,1   TSRWFFPT,R7       WRITE TO THE IS AREA FILE                   
         B        SYMB5             RETURN TO TOP OF EXEC                       
         SPACE    3                                                             
*                                                                               
*   PROCESS IS AREA FILE WRITE REQUEST ERRORS                                   
*                                                                               
SYMB134  RES      0                                                             
         LW,R7    DCTSYM2,R1        R7= 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       SYMERR62          YES, SIGNAL BKGD                            
         CI,R15   K55               IS IT NO BLK BUF                            
         BE       RWERR10           YES, STIMER                                 
         BAL,R5   SMDEVERR          PROCESS GENERAL ERROR                       
         B        SYMB5             RETURN TO EXEC                              
*                                                                               
*   PROCESS RECOVERABLE ERRORS FROM SMJOBFIN SUBR                               
*                                                                               
SYMB140  RES      0                                                             
         LI,R8    SYMB80+2          SET UP RETURN AFTER SIG/STIMER              
         CI,R15   K72               IS IT AREA OVERFLOW                         
         BE       SYMERR62          YES, SIGNAL BKGD                            
         B        RWERR10           OTHERWISE DO STIMER                         
         TITLE    '** SYM1 - LINE PRINTER SYMBIONT **'                          
*                                                                               
*                                                                               
SYMB150  EQU      %         PROCESS OUTPUT SYMBIONT DEVICE                      
         LW,R0    TSRWDCB,R7        GET DEVICE DCB WORD 0                       
         CI,R0    BIT19             WAS THE DCB FUDGED BUSY ?                   
         BANZ     SYMB15            YES, WAIT FOR COMPLETION                    
         LW,R0    TSRWFDCB,R7       GET FILE DCB WORD 0                         
         CW,R0    Y002              IS IT OPEN                                  
         BANZ     SYMB160           YES, BRANCH                                 
*                                                                               
         BAL,R5   SMGETOF           NO, GET NEXT FILE TO OUTPUT                 
         B        SYMB5             ERROR OR NONE LEFT                          
*                                                                               
         LI,R8    WRET              SET RETURNS FOR DEVICE WRITE                
         STW,R8   TSRWRET,R7        STORE IN SPACE                              
*   CALL ROUTINE TO SEE IF FILE IS OPEN BY BKGD.                                
         LI,R8    %+2               SET RET TO HERE AFTER STIMER                
         BAL,R5   SMFINDF                                                       
         B        RWERR10           +1..FILE OPEN, DO STIMER                    
*                                   +2..FILE NOT OPEN, PROCEED                  
*                                                                               
SYMB150A EQU      %         START UP PRINT OF A NEW FILE                        
         LI,R9    TSWRITEP          SET WRITING PRIMARY BUFFER                  
         AW,R9    R7                ADDRESS OF FPT LAST USED TO PRINT           
         STW,R9   TSCURBUF,R7       (REALLY A FUDGE FOR 1ST SWITCH)             
RDFCAL   LI,R10   0                 SET NO ERRORS FOUND IN READ                 
         LI,R9    SYMB160X          SET ERROR EXIT FOR THE READ                 
         CAL1,1   TSREADA,R7        READ 1ST REC TO ALT BUFFER                  
         LW,R15   TSREADA+SYMTYC,R7  GET TYC/BYTE COUNT FROM FPT                
         STB,R10  R15               AND SET R10 CODE INTO TYC BYTE              
         STW,R15  TSREADA+SYMTYC,R7  TO SAVE THE R10 CODE FOR LATER             
*                                                                               
SYMB160  EQU      %      PRINT ACTION WAS POSSIBLE; TEST IF ONE WAS             
         LW,R5    TSCURBUF,R7       ACTION COMPLETED ON CURRENT FPT ?           
         LW,R15   SYMTYC,R5         I.E., IS THE BUSY BIT RESET IN              
         CW,R15   Y008              CURRENT FPT ?                               
         BANZ     SYMB15              NO,  NOT DONE; CONTINUE SCAN              
         PAGE                                                                   
         SPACE    2                                                             
         LB,R0    DCTSYM1,R1        GET SYMBIONT FLAGS                          
         CI,R0    DCTSYMX           IS X KEY-IN IN EFFECT                       
         BAZ      SYMB160A          NO, BRANCH                                  
         BAL,R5   SMXKEY            YES, PROCESS                                
         B        SYMB5             RETURN TO EXEC                              
*                                                                               
*                                                                               
SYMB160A EQU      %         TEST FOR 'REWIND' OR 'BACKSPACE' REQUESTS           
         LB,R0    DCTSYM3,R1        FETCH OPTION BYTE 2                         
         CI,R0    DCTSYMB           'R' OR 'B' BEEN REQUESTED ?                 
         BAZ      SYMB160B            NO, CONTINUE OUTPUT                       
*                                                                               
         BAL,R5   SMBACKUP          REPOSITION ACCORDING TO REQUEST             
         B        SYMB150A          RESET OK; RESTART OUTPUT                    
*                                   CONTINUE WHERE WE WERE                      
*                                                                               
*                                                                               
SYMB160B EQU      %         PREPARE TO OUTPUT NEXT LINE                         
         LW,R5    TSCURBUF,R7       RESTORE CURRENT BUFFER TO R5                
         LI,R15   TSWRITEP          DECIDE WHICH BUFFER'S FPT WAS USED          
         AW,R15   R7                LAST TO KNOW WHICH TO USE NEXT              
         CW,R5    R15               WRITE FROM PRIMARY BUFFER ?                 
         BE       SYMB160C            YES, SET TO WRITE FROM ALT                
*                                                                               
*                           JUST WROTE ALTERNATE: SET TO WRITE PRIMARY          
         LW,R10   TSREADP+SYMTYC,R7   GET SAVED R10 CODE/ REC SIZE              
         LI,R5    TSWRITEP          SET FPT TO WRITE WITH NEXT                  
         LI,R6    TSREADA           AND FPT TO READ WITH NEXT                   
         B        SYMB160D            THEN DO COMMON TEST / SET-UP              
         PAGE                                                                   
*                                                                               
*                                                                               
SYMB160C EQU      %         JUST WROTE PRIMARY: SET TO WRITE ALTERNATE          
         LW,R10   TSREADA+SYMTYC,R7   GET SAVED R10 CODE / REC SIZE             
         LI,R5    TSWRITEA          SET FPT TO WRITE WITH NEXT                  
         LI,R6    TSREADP           AND FPT TO READ NEXT REC WITH               
*                                                                               
SYMB160D EQU      %         TEST FOR ERRORS ON THE READ-AHEAD                   
         LB,R15   R10               GET THE R10 CODE BACK AGAIN                 
         BNEZ     SYMB162             ERROR WAS FOUND; PROCESS                  
*                                                                               
         AW,R5    R7                COMPUTE ACTUAL ADDRESSES OF THE             
         AW,R6    R7                NEW CURRENT AND NEXT FPT'S; SAVE            
         STW,R5   TSCURBUF,R7       THEM FOR NEXT PASS THROUGH HERE             
         STW,R6   TSNXTBUF,R7       AND IN CASE OF ERRORS ON PRINT CAL          
         AND,R10  M16               EXTRACT OUT THE RECORD LENGTH               
         STW,R10  SYMBYTES,R5       AND SET AS NUMBER TO WRITE (PRINT)          
*   WRITE A LINE PRINTER RECORD FOLLOWED BY FILE READ                           
         LI,R9    SYMB164           SET DEVICE WRITE ERROR ROUTINE ADDR         
WTCAL    LW,R5    TSCURBUF,R7       GET SAVED ADDRESS OF FPT TO USE             
         CAL1,1   *R5               WRITE THE LINE                              
         MTW,+1   SYMCOUNT          BUMP SERVICES STARTED COUNT                 
         BOUND    4                                                             
*                                                                               
*                                                                               
         LI,R10   0                 SET NO ERRORS                               
         LI,R9    SYMB160X          SET ERROR ROUTINE                           
         LW,R6    TSNXTBUF,R7       RECOVER FPT ADDRESS TO USE AND              
         CAL1,1   *R6               READ THE NEXT RECORD                        
*                                                                               
         LW,R15   SYMTYC,R6         FETCH TYC WORD                              
         STB,R10  R15               STORE R10 CODE OVER TYC CODE                
         STW,R15  SYMTYC,R6         AND SAVE IT & REC SIZE                      
         B        SYMB5             RETURN TO EXEC TO SCAN DEVICES              
*                                                                               
*                                                                               
*                                                                               
*                                                                               
*                                                                               
SYMB160X EQU      %         ERROR ROUTINE FOR FILE READ                         
         LB,R10   R10               MOVE CODE TO RIGHTMOST BYTE                 
         CI,R10   X'07'             TOO MUCH DATA FOR BUFFER ?                  
         BNE      *R8                 NO, SOME FATALISH TYPE ERROR              
*                                                                               
         LI,R10   0                 YES, SET THIS AS NO ERROR                   
         B        *R8               AND RETURN                                  
         PAGE                                                                   
         SPACE    2                                                             
*                                                                               
*   PROCESS ERRORS DETECTED IN FILE READ                                        
*                                                                               
SYMB162  RES      0                                                             
         LB,R15   R10               GET ERROR CODE                              
         CI,R15   TYC6A             IS IT MODE ERROR IN OPEN                    
         BE       SYMB162E           YES, STIMER THEN RETRY                     
         CI,R15   K60               IS IT A BUSY FILE                           
         BE       SYMB162D          YES, DELAY FOR A LITTLE TIME                
         CI,R15   K5                IS IT AN EOD                                
         BNE      SYMB162C          NO,  BRANCH                                 
*                                                                               
SYMB162A RES      0                                                             
         LW,R14   TSRWFFPT,R7       R14= FILE DCB ADDRESS                       
         LI,R2    7                                                             
         LB,R2    *R14,R2           R2= FILE INDEX                              
         LW,R14   RFT6,R2           GET FILE SIZE                               
         BEZ      SYMB162B          EMPTY, WAIT FOR BKGD                        
         BAL,R5   SMFEOD            PROCESS EOD ON READING OS FILE              
         B        SYMB5             ERROR OR NO NEXT FILE TO READ               
*   VERIFY THAT BKGD DOES NOT HAVE THE FILE OPEN.                               
         LI,R8    %+2               SET RET TO HERE IF STIMER NEEDED            
         BAL,R5   SMFINDF           SEARCH FOR OPEN FILE                        
         B        SYMB162D          +1..FILE OPEN, DO STIMER                    
*                                   +2..FILE NOT OPEN, PROCEED.                 
         B        SYMB150A          THE NEXT FILE TO READ WAS SELECTED          
*                                                                               
SYMB162B RES      0                 CLOSE THE FILE                              
         BAL,R5   SMCLOSF           CLOSE                                       
         B        SYMB162C          ERROR                                       
         B        RWERR10           NOW DO STIMER                               
*                                                                               
SYMB162C RES      0                 DO GENERAL CLEANUP                          
         BAL,R5   SMDEVERR                                                      
         B        SYMB5             RETURN TO EXEC                              
*                                                                               
*   PROCESS BUSY FILE ERROR RETURN (ERROR 60)                                   
*                                                                               
SYMB162D RES      0                                                             
         BAL,R5   SMCLOSF           CLOSE THE DCB                               
         B        SYMB162C          ERROR, R8,R10 SET                           
SYMB162E RES      0                                                             
         LW,R0    SYMB              GET SYMBIONT STATUS WORD                    
         CI,R0    SYMBOFLO          IS BKGD OUT OF SPACE                        
         BAZ      RWERR10           NO, DO STIMER                               
         PUSH     R8                SAVE RETURN                                 
         BAL,R5   SMBSYF            YES, PROCESS                                
         B        SYMB162F          ERROR,R10 BYTE 0 CONTAINS ERROR             
         PULL     R8                RET ADDRESS AFTER STIMER                    
         B        RWERR10           DO STIMER                                   
*                                                                               
SYMB162F RES      0                                                             
         PULL     R0                CLEANUP STACK                               
         B        SYMB162C          PROCESS UNRECOVERABLE ERROR                 
         PAGE                                                                   
*                                                                               
*   ERRORS FROM DEVICE WRITE HERE                                               
*                                                                               
SYMB164  RES      0                                                             
*   CHECK IF THIS IS AN ERROR THE SYMBIONT OR THE OPERATOR                      
*   CAN RECOVER FROM.                                                           
         LB,R15   R10               GET ERROR FROM R10                          
         LB,R5    ERRCODES          GET # OF TABLE ENTRIES                      
         CB,R15   ERRCODES,R5                                                   
         BE       SYMB164B          FOUND A MATCH, BRANCH                       
         BDR,R5   %-2               NO, TRY NEXT                                
         BAL,R5   SMDEVERR          CAN'T FIX SO CLEANUP AND QUIT               
         B        SYMB5             RETURN TO TOP OF EXEC                       
*                                                                               
SYMB164B RES      0                                                             
         CI,R15   K1C               IS IT EOT ?                                 
         BE       SYMB164G            YES, TERMINATE THE TAPE                   
         BAL,R5   SMPRECB           "BACKSPACE" CURRENT FILE 1 RECORD           
*                                                                               
         LI,R8    SYMB5+2           RETURN AFTER STIMER                         
SYMB164C RES      0                                                             
         CI,R15   K30               TEST FOR DEVICE MANUAL ERROR CODE           
         BE       RWERR10           BRANCH IF DEVICE MANUAL                     
         LI,R2    SMSG3             OUTPUT 'SYYNDD ERROR XX' MSG                
*                                                                               
SYMB164E RES      0         COMMON ERROR MSG OUTPUTTER                          
         BAL,R5   SMWMSG                                                        
         LI,R2    SMSG4             OUTPUT 'SYYNDD SUSPENDED' MSG               
         BAL,R5   SMWMSG                                                        
         LB,R0    DCTSYM1,R1        GET SYMBIONT FLAGS                          
         OR,R0    X10               SET 'SUSPENDED' BIT                         
         STB,R0   DCTSYM1,R1        STORE FLAGS                                 
         B        SYMB5             RETURN TO TOP OF EXEC                       
*                                                                               
ERRCODES RES      0                                                             
         DATA,1   BA(ERRCODE%)-BA(ERRCODES)                                     
         DATA,1   X'03'             DEVICE DOWN OR UNAVAILABLE                  
         DATA,1   X'1C'             END-OF-TAPE ON OUTPUT                       
         DATA,1   X'83'             CAN'T GET EXCLUSIVE DEVICE                  
         DATA,1   X'30'                                                         
         DATA,1   X'41'                                                         
         DATA,1   X'4B'                                                         
ERRCODE% DATA,1   X'4C'                                                         
         BOUND    4                                                             
*                                                                               
*   RETURN HERE WHEN WRITE IS DONE AND CHECKED.                                 
*   AT RETURN REGISTERS CONTAIN:                                                
*        R1       DCT INDEX                                                     
*        R7       TSPACE POINTER                                                
*                                                                               
SYMB170  RES      0                                                             
         B        SYMB5             RETURN TO TOP OF EXEC                       
         PAGE                                                                   
*                                                                               
*                                                                               
*                                                                               
SYMB164G RES      0         PROCESS EOT ON OUTPUT                               
         BAL,R5   SMWEOF            WRITE DOUBLE EOF'S IF A TAPE                
         NOP      0                 NO ERROR RETURNS                            
         LW,R14   TSRWFFPT,R7       GET ADDRESS OF THE DCB                      
         AND,R14  M17                                                           
         LI,R0    X'03'+X'80'       SET UNLOAD + INDIRECT DCB                   
         STB,R0   R14               FORM THE 1 WORD FPT                         
         LI,R9    %+2               SET RETURN                                  
         CAL1,1   R14               UNLOAD THE TAPE                             
         LI,R2    SMSG8             SET MSG TO OUTPUT                           
         B        SYMB164E          AND GO OUT IT                               
         TITLE    '** SYM1 - SYMBIONT CHECK PROCESSING **'                      
*                                                                               
*  WAIT FOR A SERVICE TO COMPLETE, CHECK IT, RETURN TO                          
*   APPROPRIATE LOCATION.                                                       
*                                                                               
SYMB300  RES      0                                                             
         LI,R8    0                 INITIALIZE FLAG FOR ERROR CONDITIONS        
         LI,R9    TESTERR           ERROR RETURN                                
         CAL1,7   TESTACAL          TEST FOR COMPLETED SERVICE                  
SYMB305  RES      0                                                             
         LW,R15   TESTACAL          GET FPT WORD 0                              
         AND,R15  M17               R15= FPT ADDR OF COMPLETED CALL             
         BNEZ     SYMB310           B IF A SERVICE FINISHED                     
         CAL1,9   9                 SUPER WAIT                                  
         B        SYMB300           SOMETHING COMPLETED, FIND OUT WHAT          
SYMB310  RES      0                                                             
         MTW,-1   SYMCOUNT          DECREMENT COUNT OF ACTIVE SERVICES          
         LH,R1    DCT1              R1= NUMBER OF DCT ENTRIES                   
SYMB320  RES      0                                                             
         LW,R7    DCTSYM2,R1        IS THIS ONE IN USE                          
         BEZ      SYMB325             NO, TRY ANOTHER                           
*                                                                               
         LW,R7    SYMCNTX,R7          YES, IS IT THE ONE WE WANT ?              
         B        SYMB330           FIND OUT                                    
*                                                                               
SYMB325  RES      0                                                             
         BDR,R1   SYMB320           NO, TRY NEXT                                
         B        SYMB5             CONTEXT ALREADY CLEANED UP.  TRY            
*                                    NEXT DEVICE.                               
*                                                                               
*                                                                               
SYMB330  RES      0                                                             
         ANLZ,R9  ADDRRW            GET EFFECTIVE ADDRESS OF READ/WRITE FPT     
         CW,R9    R15               IS THIS THE ONE ?                           
         BE       SYM331              YES, TEST IF ANY ERRORS                   
*                                                                               
         ANLZ,R9  ADDRRW+1          TRY FPT FOR THE OTHER PRINT BUFFER          
         CW,R9    R15               IS THIS THE ONE                             
         BE       SYM331              YES, TEST IF ANY ERRORS                   
*                                                                               
         ANLZ,R9  ADDRRW+2          TRY FPR FOR FIRST PRINT BUFFER              
         CW,R9    R15               IS THIS THE ONE?                            
         BNE      SYMB340           NO, TRY MISC. FPT ADDR                      
*                                                                               
SYM331   EQU      %         CORRECT FPT FOUND; PROCESS ERRORS.                  
         LW,R6    TSRWRET,R7        GET ADDRESS OF CAL RETURNS                  
         CI,R8    0                 DID AN ERROR OCCUR                          
         BNE      %+2               YES, BRANCH                                 
         B        0,R6              NO, TAKE NORMAL EXIT                        
         B        1,R6              TAKE ERROR RETURN                           
SYMB340  RES      0                                                             
         ANLZ,R9  ADDRMSC           GET ADDR OF MISC FPT                        
         CW,R9    R15               IS THIS THE ONE                             
         BNE      SYMB325           NO, TRY NEXT DEVICE                         
         LW,R6    TSMSCRET,R7       GET ADDRESS OF CAL RETURNS                  
         CI,R8    0                 YES, WAS THERE AN ERROR                     
         BNE      %+2               YES, TAKE ERROR RETURN                      
         B        0,R6              TAKE NORMAL RETURN                          
         B        1,R6              ERROR RETURN                                
*                                                                               
*   ERROR RETURNS FROM TEST COME HERE WITH R8, R10 SET AS USUAL.                
*                                                                               
TESTERR  RES      0                                                             
         B        SYMB305           GET THE CALL THAT ERRORED                   
         TITLE    '** SYM1 - SYMBIONT ERROR PROCESSING **'                      
*                                                                               
*   PROCESS STIMER OF SEVERAL SEC THEN RETRY THE FAILED OPERATION.              
*                                                                               
RWERR10  RES      0                                                             
         LW,R7    DCTSYM2,R1        GET TSPACE POINTER                          
         LW,R7    SYMCNTX,R7        GET ADDRESS OF THE CONTEXT BLOCK            
         STW,R8   TSRWCAL,R7        SAVE CAL ADDRESS FOR RETRY                  
         LI,R0    STIMRET           SETUP RETURN ADDR FOR TEST                  
         STW,R0   TSMSCRET,R7       STORE IN TSPACE                             
RWERR12  RES      0                                                             
         LCI      4                                                             
         LM,R2    FPTSTIM           GET STIMER FPT IN R2-R5                     
         LCI      4                                                             
         STM,R2   TSMSCFPT,R7       STORE FPT IN TSPACE                         
         LI,R3    X'1000'                                                       
         STS,R3   TSRWDCB,R7        SET DEVICE DCB BUSY                         
         LI,R9    RWERR14           ERROR RETURN FOR STIMER                     
         CAL1,7   TSMSCFPT,R7       STIMER CALL                                 
         MTW,1    SYMCOUNT          INCR # OF SERVICES IN PROCESS               
         B        SYMB5             RETURN TO EXEC                              
         SPACE    3                                                             
*                                                                               
*   ERRORS FROM STIMER HERE                                                     
*                                                                               
RWERR14  RES      0                                                             
         BAL,R5   SMDEVERR          CLEANUP                                     
         B        SYMB5             RETURN TO EXEC                              
*                                                                               
*                                                                               
*   RETURN HERE WHEN STIMER OR SIGNAL IS DONE                                   
*                                                                               
TIMESUP  RES      0                                                             
         LI,R3    X'1000'                                                       
         LI,R2    0                                                             
         STS,R2   TSRWDCB,R7        RESET BUSY BIT IN DEVICE DCB                
         LB,R0    DCTSYM1,R1        GET SYMB CONTROL FLAGS                      
         CI,R0    DCTSYMX                                                       
         BAZ      TSUP10            B IF NOT X                                  
         BAL,R5   SMXKEY            PROCESS X KEYIN NOW                         
         B        SYMB5             AND RETURN TO CONTROL LOOP                  
*                                                                               
TSUP10   RES      0                                                             
         CI,R0    DCTSYMQ           WAS Q KEY-IN RECEIVED                       
         BANZ     SYMB5             YES, RETURN TO CONTROL LOOP                 
         CI,R0    DCTSYMS           WAS S KEYIN MADE                            
         BANZ     RWERR12           YES, REPEAT STIMER                          
*                                   NO CONTROL NEEDED. REPEAT CAL               
         LW,R8    TSRWCAL,R7                                                    
         AI,R8    -2                R8= ADDRESS OF INSTRUCTION BEFORE CALL      
         B        *R8               TRY IT AGAIN                                
         PAGE                                                                   
*                                                                               
*   SIGNAL THE BACKGROUND TASK                                                  
*                                                                               
SYMERR62 RES      0                                                             
*   OUTPUT  MESSAGE TO LET OPERATOR KNOW THAT THE INPUT                         
*   SYMBI0NT AREA IS FULL.                                                      
         PUSH     10,R1             SAVE R1-R10                                 
         LI,R2    SMSG5             MESSAGE ADDRESS                             
         BAL,R5   JOBMSG            OUTPUT MESSAGE                              
         PULL     10,R1             CLEANUP STACK                               
         LW,R7    DCTSYM2,R1        GET TSPACE POINTER                          
         LW,R7    SYMCNTX,R7        GET ADDRESS OF THE CONTEXT BLOCK            
         STW,R8   TSRWCAL,R7        STORE ADDR OF WRITE OR JOB CAL+1            
         LI,R0    SIGRET                                                        
         STW,R0   TSMSCRET,R7       SET RETURN AFTER CAL COMPLETION             
         LCI      5                                                             
         LM,R2    FPTSIG            SIGNAL FPT TO R2-R6                         
         LCI      5                                                             
         STM,R2   TSMSCFPT,R7       STORE IN MISC FPT IN TSPACE                 
         LI,R3    X'1000'                                                       
         STS,R3   TSRWDCB,R7        SET BUSY BIT IN DCB SO THE SERVICE          
*                                    WILL NOT BE RETRIED TOO SOON.              
         LI,R9    SYMERR8           ERROR RETURN FOR SIGNAL                     
SIGCAL   CAL1,7   TSMSCFPT,R7       SIGNAL BKG TASK                             
         MTW,1    SYMCOUNT          INCREMENT # SERVICES STARTED                
         B        SYMB5             RETURN TO EXEC                              
*                                                                               
*   ERROR RETURN FROM SIGNAL CALL                                               
*                                                                               
SYMERR8  RES      0                                                             
         LI,R8    SIGCAL+1          ADDRESS OF SIGNAL CAL (CLOBBERED)           
         LB,R15   R10               R15= ERROR CODE                             
         CI,R15   TYC62             IS BACKGROUND INACTIVE                      
         BE       RWERR12           YES, DO STIMER INSTEAD                      
         CI,R15   TYC68             HAS BKGD TERMINATED                         
         BE       RWERR12           YES, DO STIMER                              
         CI,R15   TYC6F             HAS BKGD TERMED ABNORMALLY                  
         BE       RWERR12           YES, DO STIMER                              
         BAL,R5   SMDEVERR          NO, GENERAL ERROR                           
         B        SYMB5             RETURN TO EXEC                              
         OLAYEND                                                                
         FIN      #SYMB                                                         
         END                                                                    
