*COMDECK  COMCARG            PROCESS ARGUMENTS.                          COMCARG
 ARG      CTEXT  COMCARG - PROCESS ARGUMENTS.                            COMCARG
 ARG      SPACE  4,10                                                    COMCARG
          IF     -DEF,QUAL$,1                                            COMCARG
          QUAL   COMCARG                                                 COMCARG
          BASE   D                                                       COMCARG
*         COMMENT COPYRIGHT CONTROL DATA CORPORATION. 1970, 1978.        COMCARG
 ARG      SPACE  4,10                                                    COMCARG
***       ARG - PROCESS ARGUMENTS.                                       COMCARG
*                                                                        COMCARG
*         G. R. MANSFIELD.   70/10/09.                                   COMCARG
* 
*         ******************************************************* 
*         * THIS COMMON DECK IS PART OF THE COMMON COMMON DECKS * 
*         * RESIDING ON THE COMPASS PROGRAM LIBRARY, AND BEING  * 
*         * MAINTAINED BY THE COMPASS PROJECT.  ANY CHANGES     * 
*         * REQUIRED SHOULD BE DIRECTED TO THE COMPASS PROJECT  * 
*         * THROUGH THE PROPER PROCEDURE.                       * 
*         ******************************************************* 
* 
*                                                                        COMCARG
*         PROCESS A LIST OF ARGUMENTS BY USE OF AN EQUIVALENCE           COMCARG
*         TABLE.                                                         COMCARG
 ARG      SPACE  4,10                                                    COMCARG
***       ARG PROCESSES AN ARGUMENT LIST BY THE USE OF AN                COMCARG
*         EQUIVALENCE TABLE.                                             COMCARG
*         THE ARGUMENT LIST IS EXPECTED TO BE IN THE FORMAT GENERATED    COMCARG
*         BY *COMCUPC*.                                                  COMCARG
*         IF A KEYWORD=VALUE FORM IS FOUND IN THE ARGUMENT LIST,         COMCARG
*         (ADDR) ARE SET TO THE VALUE. IF ONLY THE KEYWORD IS FOUND      COMCARG
*         IN THE ARGUMENT LIST AS A STANDALONE ARGUMENT, (ADDR) ARE      COMCARG
*         SET TO (ASV). IF A KEYWORD DOES NOT APPEAR IN THE ARGUMENT     COMCARG
*         LIST, (ADDR) REMAIN UNCHANGED.                                 COMCARG
*                                                                        COMCARG
*         ENTRY  (B1) = 1.                                               COMCARG
*                (B4) = ARGUMENT COUNT.                                  COMCARG
*                (A4) = ADDRESS OF FIRST ARGUMENT.                       COMCARG
*                (X4) = FIRST ARGUMENT.                                  COMCARG
*                (B5) = ADDRESS OF ARGUMENT TABLE IN FOLLOWING FORM -    COMCARG
*                       AND TERMINATED BY A WORD OF ALL ZEROS 
*         VFD    12/OP,18/ASV,12/ST,18/ADDR                              COMCARG
*                OP = 1 OR 2 CHAR KEYWORD (LEFT JUSTIFIED, ZERO FILL).   COMCARG
*                ASV = ADDRESS OF ASSUMED VALUE.                         COMCARG
*                ST = STATUS.                                            COMCARG
*                ADDR = ADDRESS WHERE ARGUMENT PLACED.                   COMCARG
*         IF (ASV) ARE STORED INTO (ADDR), THE FULL 60 BITS OF (ASV)     COMCARG
*         WILL BE USED. IF AN EQUIVALENCED VALUE IS SUPPLIED IN THE      COMCARG
*         ARGUMENT LIST, (ADDR) WILL BE SET TO THE UPPER 42 BITS OF      COMCARG
*         THE ARGUMENT VALUE (IN BITS 59-18) AND THE LOWER 18 BITS       COMCARG
*         OF (ASV) IN BITS 17-0.                                         COMCARG
*         IF ASV .LT. 0, ARGUMENT MUST NOT BE EQUIVALENCED.              COMCARG
*         IF STATUS = 4000B, A ZERO *0* PARAMETER IS RETAINED AS A       COMCARG
*         DISPLAY ZERO, OTHERWISE, A VALUE OF ZERO (FULL WORD) IS        COMCARG
*         STORED AT (ADDR).                                              COMCARG
*         IF ASV = ADDR, ONLY ONE ENTRY OF THAT ARGUMENT                 COMCARG
*         WILL BE ALLOWED AND OP WILL BE SET TO -0.                      COMCARG
*                                                                        COMCARG
*         EXIT   (X1) .NE. 0 IF ARGUMENT ERROR DETECTED.                 COMCARG
*                ERRORS                                                  COMCARG
*                1.  OPTION NOT FOUND IN TABLE.                          COMCARG
*                2.  SINGLE ARGUMENT EQUIVALENCED.                       COMCARG
*                3.  ILLEGAL RE-ENTRY OF ARGUMENT.                       COMCARG
*                                                                        COMCARG
*         USES   X - 0, 1, 2, 3, 4, 6, 7.                                COMCARG
*                B - 2, 3, 4.                                            COMCARG
*                A - 2, 3, 4, 7.                                         COMCARG
*                                                                        COMCARG
*         CALLS  NONE.                                                   COMCARG
                                                                         COMCARG
                                                                         COMCARG
 ARG      SUBR               ENTRY/EXIT                                  COMCARG
          MX0    42                                                      COMCARG
          SX1    B0                                                      COMCARG
          ZR     B4,ARGX     IF NO ARGUMENTS, RETURN                     COMCARG
          SX1    B1          PRESET ERROR                                COMCARG
                                                                         COMCARG
*         SEARCH FOR MATCH IN ARGUMENT TABLE.                            COMCARG
                                                                         COMCARG
 ARG1     ZR     X4,ARGX     IF BLANK ARGUMENT, RETURN                   COMCARG
          SA2    B5          FIRST OPTION                                COMCARG
          MX3    12                                                      COMCARG
 ARG2     IX6    X2-X4       COMPARE ARGUMENT AND OPTION                 COMCARG
          BX7    X3*X6                                                   COMCARG
          ZR     X7,ARG3     IF MATCH FOUND                              COMCARG
          SA2    A2+B1       NEXT OPTION                                 COMCARG
          NZ     X2,ARG2     LOOP TO END OF TABLE                        COMCARG
          EQ     ARGX        RETURN                                      COMCARG
                                                                         COMCARG
*         CHECK FOR EQUIVALENCE ALLOWED.                                 COMCARG
                                                                         COMCARG
 ARG3     SX7    X4-1R=      EQUIVALENCE SEPARATOR                       COMCARG
          SB2    X2          SET VALUE ADDRESS                           COMCARG
          LX2    30          GET ASSUMED VALUE                           COMCARG
          SB3    X2                                                      COMCARG
          PL     B3,ARG4     IF EQUIVALENCE ALLOWED                      COMCARG
          SA3    -B3         ASSUMED VALUE                               COMCARG
          BX6    -X0*X3      ASSUMED STATUS                              COMCARG
          SB3    -B3                                                     COMCARG
          ZR     X7,ARGX     IF ARGUMENT EQUIVALENCED...RETURN
          SX7    X4-2        NOS/BE EQUIVALENCE SEPARATOR 
          NZ     X7,ARG5     IF ARGUMENT NOT EQUIVALENCED                COMCARG
          EQ     ARGX        RETURN                                      COMCARG
                                                                         COMCARG
*         PROCESS EQUIVALENCE.                                           COMCARG
                                                                         COMCARG
 ARG4     SA3    B3          ASSUMED VALUE                               COMCARG
          BX6    -X0*X3      ASSUMED STATUS                              COMCARG
          ZR     X7,ARG4.0   IF ARGUMENT EQUIVALENCED 
          SX7    X4-2        NOS/BE EQUIVALENCE SEPARATOR 
          NZ     X7,ARG5     IF ARGUMENT NOT EQUIVALENCED                COMCARG
 ARG4.0   BSS    0
          SA4    A4+B1       CHECK EQUIVALENCE                           COMCARG
          SB4    B4-B1                                                   COMCARG
          BX3    X4                                                      COMCARG
          AX4    42                                                      COMCARG
          NG     X2,ARG4.1   IF DISPLAY ZERO REQUESTED                   COMCARG
          SX2    X4-1L0                                                  COMCARG
 ARG4.1   ZR     X3,ARGX     IF BLANK, RETURN                            COMCARG
          NZ     X2,ARG5     IF NOT *0*                                  COMCARG
          SX3    B0          CLEAR EQUIVALENCE                           COMCARG
          SX6    B0          CLEAR STATUS                                COMCARG
                                                                         COMCARG
*         ENTER ARGUMENT.                                                COMCARG
                                                                         COMCARG
 ARG5     BX3    X0*X3       MERGE ARGUMENT AND STATUS                   COMCARG
          IX7    X3+X6                                                   COMCARG
          SA7    B2          STORE ARGUMENT                              COMCARG
          SB3    B2-B3       CHECK ADDR = ASV                            COMCARG
          NZ     B3,ARG6     IF NOT EQUAL                                COMCARG
          SA2    A2                                                      COMCARG
          MX3    12                                                      COMCARG
          BX4    -X3*X2                                                  COMCARG
          BX7    X3+X4       SET OP = -0 IF ONLY ONE ARGUMENT ALLOWED    COMCARG
          SA7    A2                                                      COMCARG
 ARG6     SB4    B4-B1       NEXT ARGUMENT                               COMCARG
          SA4    A4+B1                                                   COMCARG
          NZ     B4,ARG1     LOOP FOR ALL ARGUMENTS                      COMCARG
          SX1    B0          CLEAR ERROR                                 COMCARG
          EQ     ARGX        RETURN                                      COMCARG
 ARG      SPACE  4,10                                                    COMCARG
          BASE   *                                                       COMCARG
 QUAL$    IF     -DEF,QUAL$                                              COMCARG
          QUAL   *                                                       COMCARG
 ARG      EQU    /COMCARG/ARG                                            COMCARG
 ARG=     EQU    /COMCARG/ARG 
 QUAL$    ENDIF                                                          COMCARG
 ARG      ENDX                                                           COMCARG
