         SYSTEM   SIG9P                                                         
         SYSTEM   OPTIONS                                                       
         DEF      GETNRT                                                        
         DEF      GETDCBAD,GETDCTX,FMOPL2AD,TESTBUF                             
         DEF      FMBLDECB                                                      
         DEF      SETOVR,SETOVRX    ENTRY, EXIT                                 
         DO       #ECB                                                          
         DEF      TESTWT4                                                       
         DO       #SYMB                                                         
         DEF      COOP              COOPERATIVE ENTRY                           
         FIN      #SYMB                                                         
*   EXIT POINTS                                                                 
         DEF      GX10,GX15,GX16,GX17,GX18                                      
         FIN      #ECB                                                          
         DEF      GX1,GX2A,GX3A,GX4,GX5,GX6,GX8                                 
         DEF      GX12,GX13,GX14,GX19                                           
         DO       #SYMB                                                         
         DEF      GX20,GX21                                                     
         DEF      COOPXIT,COOPXITR,COOPXITW                                     
         FIN      #SYMB                                                         
         PSYS     0                                                             
OLAYFLAG EQU      'GETN'                                                        
         SYSTEM   CPRMON                                                        
         PAGE                                                            1386000
****************                                                         1387000
*   GETDCBAD   *                                                         1388000
****************                                                         1389000
*                                                                        1390000
*   ROUTINE DETERMINES THE ADDRESS OF A DCB GIVEN THE TRUE ADDRESS OF    1391000
*        THE FPT                                                         1392000
*                                                                        1393000
*   AT ENTRY:  R3   FPT ADDRESS                                          1394000
*              R4   RETURN LINK                                          1395000
*                                                                        1396000
*   AT RETURN: R3   FPT ADDRESS                                          1397000
*              R2   DCB ADDRESS                                          1398000
*              R1   FPT CODE                                             1398500
*                                                                        1399000
*                                                                        1400000
*                                                                        1401000
GETDCBAD LW,R5    R4                SAVE RETURN                                 
         LW,R0    0,R3              FPT WORD 0 TO R0                            
         BGEZ     %+3               B IF NOT INDIRECT                    1402500
         BAL,R4   GETWD             TRUE ADDRESS TO R0                   1403000
         LW,R0    *R0               DCB ADDRESS TO R0                    1403500
         BAL,R4   GETWD             TRUE DCB ADDRESS TO R0               1404000
         LW,R2    R0                DCB ADDRESS TO R2                           
         LB,R1    *R3               FUNCTION CODE TO R1                         
         AND,R1   M7                ZERO INDIRECT BIT                    1405000
GX1      B        0,R5              RETURN                                      
         PAGE                                                            1407000
***************                                                          1408000
*   GETDCTX   *                                                          1409000
***************                                                          1410000
*                                                                        1411000
*   ROUTINE GETS THE DCT INDEX FOR DCB'S ASSIGNED TO PHYSICAL            1412000
*    DEVICES OR OPERATIONAL LABELS                                       1413000
*                                                                        1414000
*   AT ENTRY:  R8   WORD 0 OF THE DCB                                    1415000
*              R7   WORD 1 OF THE DCB                                    1416000
*              R4   LINK                                                 1417000
*              R13  PRIORITY                                             1418000
*                                                                        1419000
*   AT EXIT:   R7   TRUE DCT INDEX                                       1420000
*                                                                        1421000
*   RETURN IS +1 IF AN ERROR IS FOUND, +2 OTHERWISE                      1422000
*                                                                        1423000
*                                                                        1425000
GETDCTX  RES      0                                                             
         PUSH     R14               SAVE R14                                    
         CI,R8    K1                IS DCB ASSIGNED TO NULL (ASN=0)             
         BANZ     %+3               NO, CONTINUE                                
         LI,R7    0                 YES, SET R7= NULL ASSIGNMENT                
         B        GX2               EXIT NORMALLY                               
         LW,R14   R7                DCB WORD 1 TO R14                           
         AND,R7   XFF               EXTRACT BYTE 3                       1427000
         BEZ      GX3               ERROR RETURN  (ZERO DCT X)                  
         CI,R14   K8000             TEST DEVF (BIT 16)                   1428000
         BANZ     %0010             B IF ASSIGNED DIRECTLY TO A DEVICE   1429000
*  ASSIGNMENT IS TO AN OPERATIONAL LABEL                                 1430000
         CH,R7    OPLBS1            COMPARE TO NO. OF OP LABELS                 
         BG       GX3               ERROR, TOO LARGE                            
%0012    PUSH     6,R0              SAVE R0-R5                                  
         BAL,R4   FMOPL2AD          GET ADDRESS OF OPLBS2 TABLE IN R5           
         LB,R7    *R5,R7            GET OP LABEL ASSIGNMENT                     
         PULL     6,R0                                                          
         B        GX2               RETURN +2                                   
GETDCTX3 RES      0                 ENTRY FOR GETDOD                            
%0010    CH,R7    DCT7              COMPARE TO NO. OF DCT ENTRIES               
         BG       GX3               ERROR RETURN                                
GX2      PULL     R14                                                           
GX2A     B        1,R4              RETURN NORMAL                               
*******                                                                         
GX3      PULL     R14               RESTORE R14                                 
GX3A     B        0,R4              RETURN ABNORMAL                             
         PAGE                                                                   
******************                                                              
*    FMOPL2AD    *                                                              
******************                                                              
*                                                                               
*                                                                               
*   ROUTINE GETS THE ADDRESS OF THE OPLBS2 TABLE IN THE                         
*    ACTIVE JOB.                                                                
*                                                                               
*        BAL,R4   FMOPL2AD                                                      
*                                                                               
*   REGISTERS USED:  R4,R5                                                      
*   AT EXIT:      R5= ADDRESS OF OPLBS2 TABLE IN USERS JCB                      
*                                                                               
FMOPL2AD RES      0                                                             
         LB,R5    TCBPOINT          STI INDEX                                   
         LB,R5    STIJID,R5         JOB I.D.                                    
         LW,R5    SJI1,R5           JCB ADDRESS                                 
         LW,R5    JCBOPL2,R5        OPLBS2 ADDRESS TO R5                        
GX4      B        0,R4              RETURN                                      
         PAGE                                                                   
***************                                                                 
*   TESTBUF   *                                                                 
***************                                                                 
*                                                                               
*   ROUTINE TESTS THE USER BUFFER ADDRESS & BYTE COUNT TO VERIFY                
*     THAT THE BUFFER LIES IN THE PROPER AREA (BGRND OR FGRND)                  
*                                                                               
*   AT ENTRY:     R10   USER BUFFER ADDRESS (BYTE)                              
*                 R11   USER BYTE COUNT                                         
*                 R5    LINK                                                    
*                 R1    FPT CODE                                                
*                                                                               
*   ROUTINE RETURNS +1 IF BUFFER NOT VALID, +2 OTHERWISE                        
*                                                                               
*                                                                               
TESTBUF  RES      0                                                             
         BIFRBM   GX5               DON'T VALIDATE IF RBM                       
         PUSH     6,R8              SAVE R8-R13                                 
         LW,R9    R10               BUFFER FBA                                  
         SLS,R9   -2                CONVERT TO WORD ADDRESS                     
         AW,R10   R11                                                           
         AI,R10   -1                BUFFER LBA                                  
         SLS,R10  -2                CONVERT TO WORD ADDRESS                     
         CI,R1    K11               IS THIS A WRITE REQUEST                     
         BE       TESTBUF2          YES, DON'T DO RTS CHECK                     
*   MAKE SURE BUFFER DOES NOT CROSS USER'S RTS                                  
         LD,R12   *K:RTS            GET SPD                                     
         LW,R11   R13                                                           
         LH,R13   R13                                                           
         AND,R13  M15               MASK                                        
         AW,R13   R12               R13= LWA OF RTS                             
         AND,R11  M15                                                           
         SW,R12   R11               R12= FWA OF RTS -1                          
         AI,R12   +1                R12= FWA OF RTS                             
         CW,R9    R13               TEST BUFFER FWA                             
         BG       TESTBUF2          OK, BRANCH                                  
         CW,R10   R12               TEST BUFFER LWA                             
         BGE      TESTBUF3          ERROR, BUFFER INTERSECTS RTS                
TESTBUF2 RES      0                                                             
*   TEST ACCESS                                                                 
         LW,R11   Y3                TAKE ERR RET IF CORE NO ACCESS              
         CI,R1    K10               IS IT A READ                                
         BNE      %+2               NO                                          
         LI,R11   0                 TAKE ERR RET IF CORE NOT WRITEABLE          
         BAL,R8   TMCKADP           CHECK ADDRESS RANGE                         
         B        TESTBUF3          ERROR                                       
         PULL     6,R8                                                          
GX5      B        1,R5              RETURN                                      
TESTBUF3 PULL     6,R8              BUFFER NOT OK, ERROR EXIT                   
GX6      B        0,R5              TAKE ERROR RETURN(+1)                       
         PAGE                                                            1730000
**************                                                           1731000
*   GETNRT   *                                                           1732000
**************                                                           1733000
*                                                                        1734000
*                                                                        1735000
*    ROUTINE GETS NUMBER OF RETRIES FROM DCB TO R6                       1736000
*      AND SETS UP CLEANUP INFO IN R8, R9                                1737000
*                                                                        1738000
* IN:                                                                           
*        R2       DCB ADDRESS                                                   
*        R3       FPT ADDRESS                                                   
*        R4       FUNCTION CODE                                                 
*        R7       DCT INDEX                                                     
*        R10      BUFFER ADDRESS                                                
*        R11      BYTE COUNT                                                    
*        R12      IOQ STUFF                                                     
*        R13      PRIORITY                                                      
*                                                                               
GETNRT   EQU      %                                                             
         LW,R8    R4                SAVE FUNCTION CODE                          
         LI,R15   9                                                             
         BAL,R4   CKENACT           GET END ACTION PARAM                        
GX8      B        TRAPX             ERROR IN USER END-ACTION DATA               
         LW,R4    R8                RESTORE FUNCTION CODE                       
         LI,R8    0                                                             
         LW,R9    R15                                                           
         BEZ      %+2               B IF NO END ACTION                          
         OR,R8    Y004              SET BIT 9 IN END ACTION DATA                
         LW,R2    R2                READING C DEVICE                            
         BGZ      %+3               NO (BIT 0=1 IF READING C DEVICE)            
         OR,R8    Y008              YES, SET BIT 8 IN CLEANUP WORD 1            
         AND,R2   M17                                                           
         LI,R15   KA                SET N = 10                           1740000
         BAL,R5   GETFPTN           GET STATUS PARAMETER ADDRESS IN R14  1741000
         B        %0035             B IF NOT REAL-TIME                   1742000
         AND,R14  M17               MASK CUP ADDRESS                            
         OR,R8    CUPCOD1           CODE TO POST STATUS IN FPT                  
         OR,R8    R14               PUT ADDRESS IN R8                    1744000
         B        %0036                                                  1746000
*                                                                        1747000
%0035    OR,R8    CUPCOD2           CODE TO POST STATUS IN DCB                  
         OR,R8    R2                SET DCB ADDRESS                      1749000
         LW,R14   2,R2              DCB WORD 2 TO R14                    1750000
         AND,R14  M17               ZERO ALL BUT ADDRESS                 1751000
         STW,R14  2,R2              RESTORE DCB WORD 2                   1752000
%0036    LW,R5    1,R2              WORD 1 OF DCB TO R5                  1753000
         LB,R6    R5                NRT TO R6                            1754000
*                                                                        1755000
         LW,R1    R2                SAVE DCB ADDRESS IN R1                      
         DO       #SYMB                                                         
         PUSH     2,R2              SAVE R2,R3                                  
         BAL,R5   COOP              CALL COOPERATIVE                            
         B        GETNRT1           ERROR, R9= TYC                              
         B        GETNRT2           DONE, R9= NORMAL TYC                        
         PULL     2,R2                                                          
         FIN      #SYMB                                                         
         BAL,R5   SETOVR            SET OVERRIDE IF REQUESTED                   
         LI,R15   -1                FLAG FOR NO REENTRANCE CHECK                
         BAL,R5   FMQUEUE           BUILD ECB,LOCK,QUEUE, ETC.                  
         B        GETNRTER          ERROR, R9= ERROR CODE                       
         LW,R7    R2                ECB I.D. TO R7                              
         LW,R2    R1                DCB ADDR. TO R2                             
         B        TESTWAIT                                                      
*                                                                               
*                                                                               
GETNRTER RES      0                                                             
         LW,R2    R1                DCB ADDR TO R2                              
GX10     B        DCBERR                                                        
         DO       #SYMB                                                         
GETNRT1  RES      0                 ERROR IN COOPERATIVE (R9=TYC)               
         PULL     2,R2                                                          
         LW,R12   R9                MOVE ERROR TO R12                           
GX20     B        POST              POST THE TYC                                
*                                                                               
GETNRT2  RES      0                                                             
         PULL     2,R2                                                          
GX21     B        POST01            POST NORMAL TYC                             
         FIN      #SYMB                                                         
         PAGE                                                            1760000
****************                                                         1761000
*   TESTWAIT   *                                                         1762000
****************                                                         1763000
*                                                                        1764000
*   ROUTINE TESTS FOR REQUESTS WITH WAIT                                 1765000
*   IF WAIT IS SPECIFIED, AN IMPLICIT CHECK IS DONE                      1766000
*   IF NOT, ROUTINE EXITS                                                1767000
*                                                                        1768000
*                                                                        1770000
*                                                                               
*   AT ENTRY:     R2     DCB ADDRESS                                            
*                 R3     FPT ADDRESS                                            
*                 R7     ECB I.D.                                               
*                                                                               
TESTWAIT LW,R4    1,R3              FPT WORD 1                                  
         LB,R5    *R3               FPT CODE               /SIG7-2064/*C5732 C01
         AND,R5   M7                                       /SIG7-2064/*C5732 C01
         CLM,R5   DATA1C1D          PFIL/PREC              /SIG7-2064/*C5732 C01
         BCR,9    TESTWT            YES                    /SIG7-2064/*C5732 C01
         CI,R4    K10               TEST F3 (WAIT INDICATOR)                    
         BAZ      TESTWT2           NO WAIT, EXIT                               
TESTWT1  RES      0                 WAIT FOR I/O COMPLETION                     
         LB,R4    TCBPOINT          R4= TASK ID                                 
         BAL,R8   FMCK1             GO WAIT FOR I/O TO COMPLETE                 
GX12     B        BADCAL                                                        
         CI,R15   X'F0'             TEST TYC                                    
         BGE      GX17              B IF SYSTEM ERROR                           
GX13     B        CALEXIT                                                       
TESTWT   RES      0                                                             
         LW,R5    0,R3              FPT WORD 1                                  
         CW,R5    Y008              IS L-BIT SET                                
         BAZ      TESTWT1           NO, WAIT FOR COMPLETION                     
         CI,R4    K8                YES, CHECK WAIT BIT                         
         BANZ     TESTWT1           WAIT, LOOP BACK                             
TESTWT2  RES      0                                                             
         DO       #ECB                                                          
         LW,R5    1,R3              FPT WORD 1                                  
         CI,R5    K100              IS F8= 1                                    
         BANZ     TESTWT3           YES, BRANCH                                 
         LW,R2    R7                ECB I.D. TO R2                              
         LW,R3    1,R2              GET FLAGS AND FPT/DCB ADDR.                 
         AND,R3   M17               R3= FPT/DCB ADDRESS                         
         BAL,R8   EMGETFPT          GET REGISTER ADDRESS IF FPT/DCB IS          
*                                    IN REGISTERS; RETURNED IN R0.              
         DISABLE                                                                
         LW,R4    1,R2              GET DCB/FPT ADDRESS FROM ECB                
         LB,R4    R4                R4= ECB FLAGS                               
         STB,R4   R0                STORE INTO NEW ECB WORD 1                   
         AND,R0   XECBNCHK          RESET 'CHECK' BIT                           
         STW,R0   1,R2              STORE WORD BACK INTO ECB                    
         ENABLE                                                                 
         FIN      #ECB                                                          
GX14     B        CALEXIT                                                       
*                                                                               
*                                                                               
         DO       #ECB                                                          
TESTWT3  RES      0                                                             
         LW,R2    R7                ECB ID. TO R2                               
*                                                                               
*   HERE WE WILL DELETE THE ECB WHEN THE I/O IS DONE.                           
*   (I.E. AT I/O POST TIME)                                                     
*   ENTRY TO TESTWT4 IS ALSO FROM PRINT AND REWIND OVERLAYS.                    
*   AT ENTRY:   R2= ECB I.D.                                                    
*               R3= FPT ADDRESS                                                 
*                                                                               
TESTWT4  RES      0                                                             
         LI,R5    ECBFLAGS                                                      
         DISABLE                                                                
         LB,R6    *R2,R5            R6= ECB FLAGS                               
         CI,R6    K40               IS ECB BUSY                                 
         BAZ      TESTWT5           B IF NOT                                    
         OR,R6    X8                SET DP BIT IN ECB                           
         STB,R6   *R2,R5            STORE FLAGS BACK                            
         LI,R8    0                                                             
         STW,R8   ECBRECB,R2        ZERO R-TASK DATA                            
         ENABLE                                                                 
GX15     B        CALEXIT                                                       
*                                                                               
*   HERE IF THE I/O INTERRUPT OCCURED   AND ECB IS POSTED.                      
*   FINISH ECB CLEANUP AND EXIT BACK TO USER.                                   
*                                                                               
TESTWT5  RES      0                                                             
         ENABLE                                                                 
         BAL,R8   FMDELECB          DELETE ECB AND CLEANUP                      
GX16     B        CALEXIT           EXIT TO USER                                
*                                                                               
         FIN      #ECB                                                          
GX17     B        CALERR            EXIT FOR SYSTEM ERROR                       
         TITLE    'FMBLDECB ROUTINE'                                            
****************                                                                
*   FMBLDECB   *                                                                
****************                                                                
*                                                                               
*                                                                               
*                                                                               
*   ROUTINE GETS AN ECB AND INITIALIZES THE FOLLOWING PARAMETERS:               
*        WORD 0   DATA AREA                                                     
*        WORD 1   FPT/DCB ADDRESS AND CHECK BIT                                 
*        WORD 3   FPT CODE AND INITIAL BYTE COUNT                               
*        WORD 4   CLEANUP WORD                                                  
*        WORD 5   END-ACTION                                                    
*        WORD 7   ECB TYPE                                                      
*                                                                               
*   CALL VIA:     BAL,R5    FMBLDECB                                            
*                                                                               
*   AT ENTRY:     R3    FPT ADDRESS OR ZERO IF NO FPT                           
*                 R5    LINK                                                    
*                 R7    DCT INDEX                                               
*                 R8    CLEANUP INFO, WORD 1                                    
*                 R9    CLEANUP INFO, WORD 2                                    
*                 R10   VIRTUAL I/O BUFFER ADDRESS (BYTE) OR ZERO               
*                 R11   USER BYTE COUNT                                         
*                                                                               
*   AT EXIT:      R2    ECB I.D.                                                
*                 R10   REAL BYTE ADDRESS OF BUFFER OR DW ADDRESS               
*                       OF IOCD LIST IN TSPACE                                  
*                 R11   USER BYTE COUNT OR NO. DOUBLEWORDS IN CLIST             
*                                                                               
*   REGISTERS USED:   R0,R2,R14,R15                                             
*                                                                               
*   SUBROUTINES USED: FMGETRAD,EMGETECB,EMDELECB                                
*                                                                               
*   ROUTINE EXITS +1 IF ERROR, +2 OTHERWISE                                     
*                                                                               
FMBLDECB RES      0                                                             
         DO       #ECB                                                          
         PUSH     R8                SAVE R8                                     
         BAL,R8   EMGETECB          GET AN ECB (R2= ECB I.D. AT RETURN)         
         B        FMBECBE1          ERROR                                       
         PULL     R8                                                            
         STW,R8   CUPWORD,R2        CLEANUP WORD TO ECB                         
         CW,R8    Y004              IS USER REQUESTING END-ACTION               
         BAZ      %+2               NO                                          
         STW,R9   ECBENDAC,R2       YES, STORE E.A. WORD IN ECB                 
         LW,R15   M17               MASK                                        
         LW,R14   R11               BYTE COUNT                                  
         STS,R14  ECBRECB,R2        STORE IN ECB WORD 3                         
         LW,R14   R8                CLEANUP WORD TO R14                         
         LB,R0    R8                CLEANUP CODE TO R0                          
         CI,R0    2                 IS DCB TO BE POSTED                         
         BG       FMBECB25          NO, CUPCODE IS 3 OR 4                       
         BE       %+2               B IF POSTING DCB                            
         LW,R14   R3                POSTING FPT; GET FPT ADDR.                  
         STS,R14  1,R2              FPT/DCB ADDR. TO ECB                        
         CI,R3    0                 IS R3 AN FPT ADDRESS                        
         BE       FMBECB25          NO, BRANCH                                  
         LW,R15   Y7F                                                           
         LW,R14   0,R3              FPT WORD 0                                  
         STS,R14  ECBRECB,R2        STORE FPT CODE IN ECB                       
         DO       #TIMEOUT                                                      
         LB,R15   *R3                                                           
         AND,R15  M7                R15= FPT CODE                               
         PUSH     R5                                                            
         LB,R5    T:TOC             R5= # ENTRIES IN TOC TABLE                  
         CB,R15   T:TOC,R5          DOES IT EQUAL                               
         BE       FMBECB10          YES, TIMEOUT OK FOR THIS CALL               
         BDR,R5   %-2               NO, LOOP                                    
         B        FMBECB20          TIMEOUT NOT ALLOWED FOR THIS CALL           
FMBECB10 RES      0                                                             
         LI,R15   FPTTIME                                                       
         BAL,R5   GETFPTN           GET TIME PARAMETER                          
         B        FMBECB20          NOT PRESENT                                 
         CB,R7    DCT1                       IS IT LNXXX                        
         BLE      FMBECB11                   NO, BRANCH                         
         AW,R15   Y4                         SET HI BIT                         
         B        FMBECB12                                                      
FMBECB11 EQU      %                                                             
         AW,R15   K:UTIME           R15= TIMEOUT THRESHOLD                      
         BNEZ     %+2                                                           
FMBECB12 EQU      %                                                             
         AI,R15   1                                                             
         STW,R15  ECBTIME,R2        STORE TIMEOUT THRESHOLD IN ECB              
         LB,R5    TCBPOINT          TASK ID                                     
         LW,R0    STITIME,R5        IS THERE A TIME NOW                         
         BEZ      FMBECB15          NO, USE THIS ONE                            
         SW,R0    R15               COMPARE THE TIMES AND USE 'SMALLEST'        
         BLZ      FMBECB20          CURRENT TIME MORE CRITICAL                  
FMBECB15 RES      0                                                             
         STW,R15  STITIME,R5        STORE THE NEW TIME                          
FMBECB20 RES      0                                                             
         PULL     R5                                                            
         FIN      #TIMEOUT                                                      
FMBECB25 RES      0                                                             
         LI,R15   KFFFF             MASK FOR ECB TYPE                           
         LI,R14   IO1               ECB TYPE                                    
         DISABLE                                                                
         STS,R14  7,R2              STORE ECB TYPE                              
         LW,R15   Y04               CHECK BIT                                   
         STS,R15  1,R2              SET 'CHECK' BIT IN ECB                      
         ENABLE                                                                 
         DO       #MAP                                                          
         PUSH     R5                SAVE R5                                     
         BAL,R5   FMGETRAD          GET REAL ADDR. OF BUFFER IN R10             
         B        FMBECBE2          ERROR                                       
         BAL,R5   FLIPTEST          CHECK FOR READ REVERSE FLIPING              
         PULL     R5                                                            
         DO       #PAX                                                          
         LW,R15   DCTMOD,R7         GET MODEL NUMBER                            
         CW,R15   MDL2310           IS THIS THE PAX LINE PRINTER                
                                                                                
         BNE      FMBECB3           NO                                          
* CONVERT BUFFER TO ASCII CHARACTERS                                            
         PUSH     3,R5                                                          
         LW,R7    R10               BUFFER ADDR                                 
         CI,R4    FCWLPF            WRITE WITH FORMAT                           
         BNE      TFMBECB           NO, BRANCH                                  
         LB,R6    0,R7              YES, GET FORMAT BYTE                        
         LI,R5    X'0A'             SINGLE SPACE FORMAT                         
         CI,R6    X'F1'             IS FORMAT TOF                               
         BNE      %+2               NO, SKIP                                    
         LI,R5    X'0C'             YES, USE TOF FORMAT CODE                    
         STB,R5   0,R7              STORE CONVERTED FORMAT CODE                 
TFMBECB  RES      0                                                             
         CI,R11   80                IS IT GREATER THAN 80 BYTES                 
         BLE      TFMBECBA          NO                                          
         LI,R11   80                YES,TRUNCATE TO 80 BYTES                    
         CI,R4    FCWLPF            IS IT WRITE WITH FORMAT                     
         BNE      %+2               NO                                          
         AI,R11   1                 YES, ALLOW ONE MORE                         
TFMBECBA RES      0                                                             
         STB,R11  R7                STORE BYTE COUNT IN R7                      
         LI,R6    0                                                             
         TBS,R6   BA(ASCIITBL)      TRANSLATE TO ASCII                          
         PULL     3,R5                                                          
         FIN      #PAX                                                          
         FIN                                                                    
FMBECB3  RES      0                                                             
         AND,R8   Y00E              SAVE INDICATORS                             
         OR,R8    CUP3POST          CUPCOD3+BRANCH ADDR FOR REQCOM              
GX18     B        1,R5              RETURN +2 (NORMAL)                          
*                                                                               
*                                                                               
FMBECBE1 PULL     R8                                                            
GX19     B        0,R5              RETURN +1 (ERROR)                           
         DO       #MAP                                                          
FMBECBE2 RES      0                                                             
         PULL     R5                RESTORE LINK                                
         BAL,R8   FMDELECB          DELETE ECB AND CLEANUP                      
         B        GX19              ERROR RETURN (+1)                           
         FIN                                                                    
         ELSE     #ECB                                                          
         LB,R2    TCBPOINT          TASK ID                                     
         LB,R0    STILMID,R2        R0= LOAD MODULE ID                          
         LW,R2    R8                R2= CLEANUP WORD                            
         LB,R15   R8                R15= CLEANUP CODE                           
         CI,R15   1                 IS FPT TO BE POSTED                         
         BNE      %+2               NO, BRANCH                                  
         LW,R2    R3                YES, R2= FPT ADDRESS                        
         AND,R2   M17               MASK                                        
         STB,R0   R2                STORE LMID IN R2                            
         CI,R3    0                 IS FPT ADDR SET TO 0                        
         BE       FMB1              YES, BRANCH                                 
         LB,R0    *R3               NO, GET FPT CODE                            
         AND,R0   M7                R0= FPT CODE                                
         CI,R0    K1C               IS FPT CODE PFIL                            
         BNE      FMB1              NO, BRANCH                                  
         OR,R2    Y0008             YES, SET PFIL BIT IN R2                     
FMB1     SLS,R15  20                                                            
         STS,R15  R2                STORE CUPCODE IN R2                         
GX19     B        0,R5              RETURN                                      
         FIN      #ECB                                                          
         SPACE    5                                                             
         DO       #TIMEOUT                                                      
*                                                                               
*   TABLE OF FPT CODES OF SERVICES WHICH MAY HAVE SOFTWARE                      
*    TIMEOUT AS A PARAMETER.                                                    
*                                                                               
T:TOC    RES      0                                                             
         DATA,1   7                 NUMBER OF TABLE ENTRIES                     
         DATA,1   X'01'             REW, PRINT                                  
         DATA,1   X'02'             WEOF, TYPE                                  
         DATA,1   X'03'             UNL                                         
         DATA,1   X'10'             READ                                        
         DATA,1   X'11'             WRITE                                       
         DATA,1   X'1C'             PFIL                                        
         DATA,1   X'1D'             PREC                                        
         BOUND    4                                                             
         FIN      #TIMEOUT                                                      
         DO       #SYMB                                                         
         TITLE    'COOPERATIVE ENTRY ROUTINE'                                   
**********                                                                      
*  COOP  *                                                                      
**********                                                                      
*                                                                               
*   THE COOPERATIVE IS A SET OF ROUTINES CALLED BY APPROPRIATE                  
*   FILE MANAGEMENT ROUTINES ANYTIME INPUT OR OUTPUT TO SYMBIONT                
*   DEDICATED DEVICES MAY OCCUR.  THE INPUT COOPERATIVE READS                   
*   FROM A FILE IN THE IS AREA AS A RESULT OF A USER REQUEST                    
*   TO READ A SYMBIONT DEDICATED CARD READER.                                   
*                                                                               
*   THE OUTPUT COOPERATIVE WRITES TO A FILE IN THE OS AREA                      
*   AS A RESULT OF A USER WRITE REQUEST TO A SYMBIONT                           
*   DEDICATED LINE PRINTER.                                                     
*                                                                               
*  REGISTERS AT ENTRY:   SAME AS AT ENTRY TO FMQUEUE                            
*                                                                               
*   EXITS ARE:    +1    ERROR OCCURRED, R9= ERROR CODE                          
*                 +2    IF COOP I/O WAS SUCCESSFUL,R9= NORMAL TYC               
*                 +3    IF THE DEVICE IS NOT A SYMBIONT DEVICE.                 
*                                                                               
*   AT EXIT R10,R11 PRESERVED, ALL OTHER REGISTERS LOST                         
*                                                                               
*        BAL,R5   COOP                                                          
*                                                                               
COOP     RES      0                                                             
         BIFFGD   COOPXIT           B IF NOT BACKGROUND                         
         LB,R0    DCTSYM1,R7        GET SYMBIONT FLAGS                          
         CI,R0    DCTSYMSM          IS THIS A DEDICATED SYMBIONT DEVICE         
         BANZ     %+2               YES, GO TO COOPERATIVE                      
COOPXIT  B        2,R5              TAKE NON-SYMBIONT DEVICE EXIT               
         MTW,0    R3                IS R3 AN FPT ADDRESS                        
         BEZ      COOPXIT           NO, EXIT                                    
*                                                                               
*   HERE WE HAVE A SYMBIONT DEVICE.                                             
*                                                                               
         LW,R0    1,R3              GET FPT WORD 1                              
         CI,R0    F1                IS CALLER A DIAGNOSTIC                      
         BANZ     COOPXIT           YES, DON'T CALL COOP                        
         LB,R0    *R3                                                           
         AND,R0   M7                R0=  FPT CODE                               
         CI,R0    X'10'             IS IT A READ                                
         BNE      %+2               NO, GO TO WCOOP                             
COOPXITR B        RCOOP             YES, GO TO INPUT COOPERATIVE                
COOPXITW B        WCOOP             GO TO OUTPUT COOPERATIVE                    
         FIN      #SYMB                                                         
         PAGE                                                                   
**************                                                                  
*   SETOVR   *                                                                  
**************                                                                  
*                                                                               
*   ROUTINE TESTS F1 BIT IN CALLER'S FPT.                                       
*   IF F1=1...SET DEVICE DOWN OVERRIDE IN R8                                    
*   IF F1=0...DON'T SET OVERRIDE                                                
*                                                                               
*   REGISTERS:  R5   LINK                                                       
*                                                                               
SETOVR   RES      0                                                             
         PUSH     R15                                                           
         LB,R15   *R3                                                           
         AND,R15  M7                R15= FPT CODE                               
         CLM,R15  DATA1C1D          IS IT PFIL OR PREC                          
         BCS,9    SETOVR1           NO, BRANCH                                  
         LW,R15   0,R3              YES, GET FPT WORD 0                         
         CW,R15   Y008              IS L-BIT SET                                
         BAZ      SETOVR2           NO, EXIT                                    
SETOVR1  LW,R15   1,R3              GET FPT WORD 1                              
         CI,R15   F1                IS OVERRIDE SET                             
         BAZ      SETOVR2           NO, EXIT                                    
         OR,R8    Y002              YES, SET OVR INDICATOR                      
SETOVR2  PULL     R15                                                           
SETOVRX  B        0,R5              EXIT                                        
         TITLE    '9 TRACK TAPE READ REVERSE TEST'                              
*                                                                               
* REGISTERS IDENTICAL TO QUEUE                                                  
*                                                                               
* ALL REGISTERS PRESERVED                                                       
*                                                                               
FLIPTEST RES      0                                                             
         PUSH     R5                SAVE LINK                                   
         CI,R4    FCRB9T            IS FUNCTION A READ REVERSE                  
         BE       FLIP5             YES                                         
*                                   NO                                          
         CI,R4    FCRB7TD           IS IT 7T READ REVERSE                       
         BE       FLIP5             YES                                         
*                                   NO                                          
         CI,R4    FCRB7TB           HOW ABOUT BINARY                            
         BNE      FLIPOUT           NO                                          
FLIP5    RES      0                 YES                                         
         LB,R5    DCT4,R7           GET DEVICE TYPE                             
         CI,R5    8                 IS IT A 9T                                  
         BE       FLIP10            YES                                         
*                                   NO                                          
         CI,R5    9                 IS IT A 7T                                  
         BE       FLIP10            YES                                         
*                                   NO                                          
         CI,R5    16                IS IT NS TAPE                               
         BNE      FLIPOUT           NO                                          
FLIP10   RES      0                 YES, IT A TAPE                              
         CW,R10   XBIT0             IS IT A DATA CHAIN CASE                     
         BAZ      FLIPOUT           NO                                          
*                                   YES                                         
         BAL,R5   FLIP              FLIP DATA CHAIN                             
*                                                                               
FLIPOUT  RES      0                                                             
         PULL     R5                                                            
         B        0,R5              EXIT                                        
         TITLE    'READ REVERSE DATA CHAIN FLIP'                                
*                                                                               
* REGISTERS IDENTICAL TO QUEUE                                                  
*                                                                               
* ALL REGISTERS PRESERVED                                                       
*                                                                               
FLIP     RES      0                                                             
         PUSH     6,R4              SAVE R4 THRU R9                             
         LW,R4    R10               START OF CHAIN                              
         LW,R5    R10                                                           
         AW,R5    R11                                                           
         AI,R5    -1                END OF CHAIN                                
*                                                                               
FLIPLOOP RES      0                 REVERSE ORDER OF CHAIN                      
         LD,R6    0,R4                                                          
         LD,R8    0,R5                                                          
         STD,R6   0,R5                                                          
         STD,R8   0,R4                                                          
*                                                                               
         AI,R4    1                                                             
         AI,R5    -1                                                            
         CW,R4    R5                MIDDLE OF CHAIN                             
         BL       FLIPLOOP          NO                                          
*                                   YES                                         
         LW,R4    R10                                                           
         LW,R5    R11                                                           
*                                                                               
FIXLOOP  RES      0                 ADJUST THE BYTE ADDR IN CHAIN               
         LD,R6    0,R4                                                          
         AW,R6    R7                                                            
         AI,R6    -1                                                            
         STD,R6   0,R4                                                          
*                                                                               
         AI,R4    1                                                             
         BDR,R5   FIXLOOP                                                       
*                                                                               
         PULL     6,R4                                                          
         B        0,R5              RETURN                                      
         DO       #PAX                                                          
MDL2310  TEXT     '2310'            MODEL # OF SPECIAL PAX PRINTER              
         FIN      #PAX                                                          
         OLAYEND                                                                
         END                                                                    
