COMCCIO 
COMMON
          CTEXT  COMCCIO - I/O FUNCTION PROCESSOR.
 CIO      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCCIO
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CIO      SPACE  4
***       CIO - I/O FUNCTION PROCESSOR. 
*         G. R. MANSFIELD.  70/10/09. 
 CIO      SPACE  4
***              CIO PERFORMS I/O FUNCTIONS VIA THE PP PROGRAM *CIO*. 
*         OPERATION WILL BE PROCESSED WHEN BUFFER IS NOT BUSY.
*         IF FILE STATUS WORD = 0, OPERATION WILL NOT BE PROCESSED, 
*         AND IN AND OUT WILL BE SET TO FIRST.
* 
*         ENTRY  (X2) (BITS 17 - 0) = ADDRESS OF FET FOR FILE.
*                (X2) (BITS 35 - 18) = SKIP COUNT TO CIO. 
*                (X2) (BIT 59) = 1 IF ASTERISK OPTION SPECIFIED ON
*                     *CPCOM* MACRO FOR WHICH THE FUNCTION CODE IS
*                     SET IN THE FET BUT *CIO* IS NOT CALLED (THAT
*                     IS, THE I/O FUNCTION IS NOT PERFORMED). 
*                     THIS CONDITION WILL ALSO OVERRIDE THE PRESENCE OF 
*                     THE ERROR PROCESSING OPTIONS *ERP$* OR *ERP1$*. 
*                (X7) = FUNCTION CODE.
*                IF (X7) < 0, (X7) IS COMPLEMENT OF REQUEST, AND
*                AUTO RECALL WILL BE REQUESTED. 
*                IF *LVN$* IS DEFINED, THE LEVEL NUMBER IN
*                FET+0, BITS 17-14 WILL BE PRESERVED. 
*                OTHERWISE, THESE BITS WILL BE MASKED OFF.
* 
*         EXIT   (X2) = ADDRESS OF FET FOR FILE.
*                (X7) = 0.
* 
*                IF *ERP$* IS DEFINED - 
*                (X2) = FET ADDRESS.
*                (X7) = 0 IF NO ERROR CODE IN FET.  FUNCTION ISSUED.
*                       NORMAL EXIT.
*                (X7) = ERROR CODE FROM FET.  FUNCTION NOT ISSUED.
*                       EXIT TO *ERP$*. 
*                PROCESS CAN BE REENTERED AT *ERPX$*. 
*                *ERP$* ROUTINE MUST CLEAR ERROR CODE FROM FET+0
*                BITS 10 - 13 BEFORE PROCESS CAN BE RESUMED AT *ERPX$*. 
* 
*                IF *ERP1$* IS DEFINED -
*                (X2) = FET ADDRESS.
*                (X7) = 0 IF NO ERROR CODE IN FET.  FUNCTION ISSUED.
*                       NORMAL EXIT.
*                (X7) = ERROR CODE FROM FET.  FUNCTION NOT ISSUED.
*                       NORMAL EXIT.
* 
*         USES   X - 1, 2, 6, 7.
*                B - NONE.
*                A - 1, 6, 7. 
* 
*         CALLS  SYS=.
  
  
 ERP$     IF     DEF,ERP$ 
 CIOA     CON    0           FUNCTION SAVED DURING ERROR PROCESSING 
  
 CIO1     BX7    X1          SET ERROR STATUS 
          SX2    A1          SET FET ADDRESS
          EQ     ERP$        EXIT TO ERROR PROCESSOR
  
  
 ERPX$    SA1    CIOA        RESTORE FUNCTION 
          BX7    X1 
          EQ     CIO3        RESUME PROCESSING
  
 ERP$     ELSE
 ERP$     IF     DEF,ERP1$
 CIO1     BX7    X1          SET ERROR STATUS 
          SX2    A1          SET FET ADDRESS
          EQ     CIO=        EXIT 
 ERP$     ENDIF 
  
 CIO2     RECALL X2          WAIT COMPLETION OF LAST REQUEST
 LVN$     IF     -DEF,LVN$
 CIO3     MX6    42          SET MASK FOR FILE NAME 
 LVN$     ELSE
 CIO3     MX6    46          SET MASK FOR FILE NAME AND LEVEL NUMBER
 LVN$     ENDIF 
 ERP$     IF     -DEF,ERP$
 ERP$     IF     -DEF,ERP1$ 
          SX1    2           FILE MODE MASK 
 ERP$     ELSE
          SX1    36002B      ERROR CODE AND FILE MODE MASK
 ERP$     ENDIF 
          BX6    X6+X1
          SA1    X2          SET NAME, LEVEL NUMBER, MODE, ERROR CODE 
          BX1    X6*X1
          SX6    3RCIO       SET *CIO* REQUEST
          PL     X2,CIO4     IF NOT ASTERISK OPTION 
          BX7    X1+X7       MERGE FUNCTION CODE WITH FILE NAME 
          SX2    X2          CLEAR BIT 2**59
          SA7    A1          STORE FET STATUS 
          BX7    X7-X7       CLEAR ERROR STATUS 
          EQ     CIO=        RETURN 
  
 CIO4     BSS    0
 ERP$     IF     DEF,ERP$ 
          SA7    CIOA 
 ERP$     ENDIF 
          PL     X7,CIO5     IF NO AUTO RECALL WITH REQUEST 
          BX7    -X7
          PX6    X6          SET AUTO RECALL
 CIO5     BX7    X1+X7       MERGE FUNCTION CODE WITH FILE NAME 
          LX6    42 
 ERP$     IF     -DEF,ERP$
 ERP$     IF     -DEF,ERP1$ 
          SA7    X2          STORE FET STATUS 
          BX6    X6+X2       MERGE *CIO* REQUEST AND FET ADDRESS
 ERP$     ELSE
          BX6    X6+X2       MERGE *CIO* REQUEST AND FET ADDRESS
          AX1    10          CHECK ERROR CODE 
          MX2    -4 
          BX1    -X2*X1 
          NZ     X1,CIO1     IF ERROR ON LAST OPERATION 
          SA7    A1+         STORE FET STATUS 
 ERP$     ENDIF 
          SX2    A1          SET FET ADDRESS
          BX7    X7-X7       CLEAR ERROR STATUS 
          RJ     =XSYS=      MAKE REQUEST TO *CIO*
  
 CIO=     PS                 ENTRY/EXIT 
          SA1    X2          CHECK FET STATUS 
          LX1    59-0 
          NG     X1,CIO3     IF FET NOT BUSY
          NZ     X1,CIO2     IF NOT BLANK FET STATUS
 QUAL$    IF     DEF,B1=1 
          SA1    X2+B1       SET FIRST = IN = OUT 
          SX6    X1 
          SA6    A1+B1
          SA6    A6+B1
 QUAL$    ELSE
          SA1    X2+1        SET FIRST = IN = OUT 
          SX6    X1+
          SA6    X2+2 
          SA6    X2+3 
 QUAL$    ENDIF 
          SX2    X2          SET FET ADDRESS
          BX7    X7-X7       CLEAR ERROR STATUS 
          EQ     CIO=        RETURN 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 CIO=     EQU    /COMCCIO/CIO=
 ERP$     IF     DEF,ERP$ 
 ERPX$    EQU    /COMCCIO/ERPX$ 
 ERP$     ENDIF 
 QUAL$    ENDIF 
          ENDX
