COMCARM 
COMMON
          CTEXT  COMCARM - MULTIPLE WORD ARGUMENT PROCESSOR.
 ARM      SPACE  4,10 
 QUAL$    IF     -DEF,QUAL$,1 
          QUAL   COMCARM
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 ARM      SPACE  4,10 
***       COMCARM - MULTIPLE WORD ARGUMENT PROCESSOR. 
*         D. A. HIVELEY.     72/03/19.
*         A. D. FORET.       74/12/04. RESEQUENCED. 
*         H. G. VARNIS.      79/02/19.
 ARM      SPACE  4,10 
***       ARM - MULTIPLE WORD ARGUMENT PROCESSOR. 
* 
*                *COMCARM* USES *COMCPOP* TO PICK PARAMETERS OUT
*         OF A STRING BUFFER.  THE PARAMETERS ARE THEN
*         PROCESSED BY THE USE OF AN EQUIVALENCED TABLE.
* 
*         ENTRY  (B3) = ADDRESS OF THE ARGUMENT TABLE.
*                (B6) = ADDRESS OF THE NEXT ENTRY IN THE STRING BUFFER. 
*T ARGT   12/OP,18/ASV,9/ST,3/WC,18/ADDR
*         OR
*T ARGT   12/77B,18/ASV,9/ST,3/WC,18/ADDR 
*T,       42/OP,18/0
*         77B    INDICATION OF TWO-WORD ENTRY TABLE FORMAT IS USED. 
*         OP     ONE TO SEVEN CHARACTER OPTION (ARGUMENT KEYWORD).
*         ASV    ADDRESS OF ASSUMED VALUE.
*         ST     STATUS OF ZERO ENTRY.
*         WC     WORD COUNT OF PARAMETER. 
*         ADDR   ADDRESS OF LOCATION IN WHICH TO PLACE RESULT.
* 
*         PROCESSING OPTIONS -
* 
*                IF  *WC* = 0, THE LOWER 18 BITS OF THE CONTENTS OF 
*                *ASV* WILL BE RETAINED AS THE LOWER 18 BITS OF THE 
*                RESULT VALUE.  IF THE ENTERED PARAMETER IS 
*                EQUIVALENCED, THE UPPER 42 BITS OF THE RESULT ARE
*                THOSE OF THE ENTERED VALUE.  OTHERWISE, THEY ARE 
*                THOSE OF THE ASSUMED VALUE.  THE SECOND AND
*                FOLLOWING WORDS OF THE ENTERED VALUE ARE IGNORED.
* 
*                IF *ASV* = *ADDR*, ONLY ONE ENTRY OF THE ARGUMENT WILL 
*                BE ALLOWED (*OP* IN THE ARGUMENT TABLE IS SET TO -0).
* 
*                IF *ST* = 400B, A PARAMETER WHICH IS EQUIVALENCED TO 
*                0 WILL HAVE DISPLAY 0 (LEFT JUSTIFIED) STORED IN THE 
*                RESULT LOCATION.  IF *ST* .NE. 400B, SUCH A PARAMETER
*                WILL RECEIVE A VALUE OF BINARY 0.
* 
*                IF *ASV* .LT. 0, THE PARAMETER MUST NOT BE 
*                EQUIVALENCED.
* 
*         NOTE   THE WORD COUNT OF ENTERED VALUES CANNOT EXCEED THE 
*                MINIMUM OF *WC* AND *COMCPOP* ASSEMBLY CONSTANT
*                *POPL*.  IF *WC* .GT. *POPL*, DEFAULT VALUES WITH
*                LENGTHS GREATER THAN *POPL* ARE PROCESSED CORRECTLY, 
*                BUT ENTERED VALUES ARE FLAGGED AS ERRORS.
* 
*         EXIT   (X1) .NE. 0, IF ARGUMENT ERROR DETECTED. 
*                            OPTION NOT IN TABLE, SINGLE ARGUMENT 
*                            EQUIVALENCED, NO TERMINATOR FOUND OR 
*                            INCORRECT RE-ENTRY OF ARGUMENT.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 2, 3, 4, 7.
*                B - 2, 4, 5, 6, 7. 
* 
*         CALLS  POP. 
  
  
 ARM      SUBR               ENTRY/EXIT 
 ARM0     SX1    B0+         CLEAR ERROR
 ARM1     ZR     B6,ARM      IF NO ARGUMENTS
          RJ     POP         PICK OUT PARAMETER 
          MX1    12 
          NG     B5,ARM      IF ERROR 
          SX2    B0 
  
*         SEARCH FOR MATCH IN ARGUMENT TABLE. 
  
          SA4    POPA 
          ZR     X4,ARM      IF BLANK ARGUMENT
          SA3    B3-B1
          SB4    12 
          ZR     B6,ARM2     IF TERMINATOR ENCOUNTERED
          SA2    B6-B1       PICK SEPARATOR 
 ARM2     SA3    A3+B1       PICK NEXT OPTION 
          BX7    X1*X3
          ZR     X3,ARM      IF END OF TABLE
          SB2    B0 
          LX6    X7,B4       CHECK IF TWO WORD ENTRY
          SX6    X6-77B 
          NZ     X6,ARM2.1   IF NOT TWO WORD ENTRY
          SB2    B1 
          MX6    42 
          SA3    A3+B1       GET SECOND WORD OF ENTRY 
          BX7    X6*X3       GET OPTION 
 ARM2.1   BX6    X7-X4
          NZ     X6,ARM2     IF NO MATCH
  
*         CHECK EQUIVALENCED OPTION.
  
          ZR     B2,ARM2.2   IF ONE WORD ENTRY
          SA3    A3-B1
 ARM2.2   SA4    X3 
          SX7    X2-1R= 
          LX3    30 
          SB4    X3 
          MX6    -18
          PL     B4,ARM3     IF EQUIVALENCE ALLOWED 
          SA2    -B4         ASSUMED VALUE
          SB4    -B4
          BX4    -X6*X2      ASSUMED STATUS 
          NZ     X7,ARM5     IF ARGUMENT NOT EQUIVALENCED 
          EQ     ARM         RETURN 
  
*         PROCESS EQUIVALENCE.
  
 ARM3     SA2    B4 
          BX4    -X6*X2      ASSUMED STATUS 
          NZ     X7,ARM5     IF ARGUMENT NOT EQUIVALENCED 
          RJ     POP         PICK OUT PARAMETER 
          SB4    A2          SAVE ADDRESS OF ASSUMED VALUE
          SX1    B1 
          NG     B5,ARM      IF ERROR 
          SA2    POPA 
          ZR     X2,ARM0     IF NULL PARAMETER
          BX1    X2 
          LX1    -42
          SA3    A3 
          LX3    30 
          NG     X3,ARM4     IF *0* REQUESTED 
          SX3    X1-1L0 
 ARM4     SX1    B1+         RESET ERROR FLAG 
          NZ     X3,ARM5     IF NOT *0* 
          SX2    B0          CLEAR EQUIVALENCE
          BX4    X4-X4       CLEAR STATUS 
  
*         ENTER ARGUMENT. 
  
 ARM5     SA3    A3          PICK UP WORD COUNT 
          MX6    -3 
          AX3    18 
          BX3    -X6*X3 
          SB2    X3 
          MX6    42 
          ZR     B2,ARM9     IF *WC* = 0
          SB5    B5+B1
          ZR     X7,ARM6     IF PREVIOUS PARAMETER WAS EQUIVALENCED 
          SB5    B2 
 ARM6     GT     B5,B2,ARM   IF PARAMETER TOO LARGE 
          SB7    B0+
 ARM7     BX7    X2 
          SA7    A4+B7       STORE WORD OF ARGUMENT 
          SB7    B7+B1
          SA2    A2+B1
          LT     B7,B5,ARM7  IF MORE PARAMETER
          SX7    B0+         CLEAR REMAINDER OF RESULT PARAMETER AREA 
 ARM8     EQ     B7,B2,ARM10 IF NO WORDS LEFT 
          SA7    A4+B7
          SB7    B7+B1
          EQ     ARM8        PROCESS NEXT WORD
  
 ARM9     BX4    -X6*X4      MERGE ARGUMENT AND STATUS
          BX2    X6*X2
          BX7    X2+X4
          SA7    A4 
 ARM10    SB4    A4-B4
          SX1    B0          CLEAR ERROR
          SA3    A3 
          MX7    12 
          NZ     B4,ARM1     IF PARAMETER ADDRESSES NOT EQUAL 
          BX7    X7+X3
          AX3    48 
          SX3    X3-77B 
          NZ     X3,ARM11    IF ONE WORD ENTRY
          SA3    A3+1 
          MX7    42 
 ARM11    SA7    A3 
          EQ     ARM1        PROCESS NEXT ARGUMENT
          SPACE  4
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 ARM      EQU    /COMCARM/ARM 
 QUAL$    ENDIF 
          BASE   *
          ENDX
