*COMDECK  COMCARG 
          CTEXT  COMCARG - PROCESS ARGUMENTS. 
 ARG      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCARG
          BASE   D
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1970.
 ARG      SPACE  4
***       ARG - PROCESS ARGUMENTS.
*         G. R. MANSFIELD.  70/10/09. 
 ARG      SPACE  4
***              ARG PROCESSES AN ARGUMENT LIST BY THE USE OF AN
*         EQUIVALENCE TABLE.
* 
*         ENTRY  (B1) = 1.
*                (B4) = ARGUMENT COUNT. 
*                (A4) = ADDRESS OF FIRST ARGUMENT.
*                (X4) = FIRST ARGUMENT. 
*                (B5) = ADDRESS OF ARGUMENT TABLE IN FOLLOWING FORM - 
*         VFD    12/OP,18/ASV,30/ADDR 
*                OP = 2 CHARACTER OPTION. 
*                ASV = ADDRESS OF ASSUMED VALUE.
*                ADDR = ADDRESS WHERE ARGUMENT PLACED.
*         LOWER 18 BITS OF ASSUMED VALUE ENTERED INTO EQUIVALENCED
*         ARGUMENT. 
*         IF ASV < 0, ARGUMENT MUST NOT BE EQUIVALENCED.
*         IF ARGUMENT EQUIVALENCED TO *0*, A VALUE OF 0 IS STORED.
* 
*         EXIT   (X1) " 0 IF ARGUMENT ERROR DETECTED. 
*                ERRORS 
*                1.  OPTION NOT FOUND IN TABLE
*                2.  SINGLE ARGUMENT EQUIVALENCED 
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                B - 2, 3, 4. 
*                A - 2, 3, 4, 7.
* 
*         CALLS  NONE.
  
  
 ARG      PS                 ENTRY/EXIT 
          MX0    42 
          SX1    B0 
          ZR     B4,ARG      RETURN IF NO ARGUMENTS 
          SX1    B1          PRESET ERROR 
  
*         SEARCH FOR MATCH IN ARGUMENT TABLE. 
  
 ARG1     ZR     X4,ARG      RETURN IF BLANK ARGUMENT 
          SA2    B5          FIRST OPTION 
          MX3    12 
 ARG2     BX6    X2-X4       COMPARE ARGUMENT AND OPTION
          BX7    X3*X6
          ZR     X7,ARG3     IF MATCH FOUND 
          SA2    A2+B1       NEXT OPTION
          NZ     X2,ARG2     LOOP TO END OF TABLE 
          EQ     ARG         RETURN 
  
*         CHECK FOR EQUIVALENCE ALLOWED.
  
 ARG3     SX7    X4-1R=      EQUIVALENCE SEPARATOR
          SB2    X2          SET VALUE ADDRESS
          LX2    30          GET ASSUMED VALUE
          SB3    X2 
          PL     B3,ARG4     IF EQUIVALENCE ALLOWED 
          SA3    -B3         ASSUMED VALUE
          BX6    -X0*X3      ASSUMED STATUS 
          NZ     X7,ARG5     IF ARGUMENT NOT EQUIVALENCED 
          EQ     ARG         RETURN 
  
*         PROCESS EQUIVALENCE.
  
 ARG4     SA3    B3          ASSUMED VALUE
          BX6    -X0*X3      ASSUMED STATUS 
          NZ     X7,ARG5     IF ARGUMENT NOT EQUIVALENCED 
          SA4    A4+B1       CHECK EQUIVALENCE
          SB4    B4-B1
          BX3    X4 
          AX4    42 
          SX2    X4-1L0 
          ZR     X3,ARG      RETURN IF BLANK
          NZ     X2,ARG5     IF NOT *0* 
          SX3    B0          CLEAR EQUIVALENCE
          SX6    B0          CLEAR STATUS 
  
*         ENTER ARGUMENT. 
  
 ARG5     BX3    X0*X3       MERGE ARGUMENT AND STATUS
          IX7    X3+X6
          SA7    B2          STORE ARGUMENT 
          SB4    B4-B1       NEXT ARGUMENT
          SA4    A4+B1
          NZ     B4,ARG1     LOOP FOR ALL ARGUMENTS 
          SX1    B0          CLEAR ERROR
          EQ     ARG         RETURN 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 ARG      EQU    /COMCARG/ARG 
 QUAL$    ENDIF 
          ENDX
