*COMDECK  COMQUPC 
          CTEXT  COMQUPC - UNPACK CONTROL CARD. 
 UPC      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMQUPC
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC. 1994.
 UPC      SPACE  4
***       UPC - UNPACK CONTROL CARD.
*         G. R. MANSFIELD.  70/12/12. 
 UPC      SPACE  4
***              UPC UNPACKS A CONTROL CARD TO INDIVIDUAL PARAMETERS. 
*         THE FOLLOWING CONDITIONS ARE NOTED. 
*         (1.)  IMBEDDED SPACES ARE IGNORED.
*         (2.)  THE CHARACTERS  /=,(  ARE CONSIDERED AS PARAMETER 
*                SEPARATORS.
*         (3.)  THE CHARACTERS ). ARE CONSIDERED AS THE TERMINATION OF
*                THE CONTROL CARD.
*         (4.)  CHARACTERS WITH DISPLAY CODE VALUE 00B ARE ILLEGAL
*                BEFORE THE TERMINATOR. 
*         (5.)  PARAMETERS IN EXCESS OF 7 CHARACTERS WILL 
*                NOT HAVE A SEPARATOR.
*         (6.)  THE PARAMETERS ARE STORED LEFT JUSTIFIED WITH ZERO
*                FILL.
*         (7.)  ONLY THE *=* CHARACTER WILL BE PLACED IN THE LOWER
*                18 BITS OF THE KEYWORD PARAMETER.
*         (8.)  TWO SUCCESSIVE SEPARATORS OR A SEPARATOR FOLLOWED BY
*                A TERMINATOR RESULTS IN A PARAMETER OF ALL ZERO. 
* 
*         ENTRY  (X5) = FIRST WORD OF CONTROL CARD. 
*                (A5) = ADDRESS OF FIRST WORD.
*                (B7) = ADDRESS FOR FIRST PARAMETER.
*                (B1) = 1.
* 
*         EXIT   (X6) = 0 IF NO ERROR DURING UNPACK.
*                (B6) = PARAMETER COUNT.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 2, 3, 4, 5, 6. 
*                A - 1, 2, 5, 6, 7. 
* 
*         CALLS  NONE.
  
  
 UPC      PS                 ENTRY/EXIT 
          SX1    6560B       (X1) = MASK FOR SEPARATORS AND TERMINATORS 
          SX3    4100B       (X3) = MASK FOR TERMINATORS
          SB5    60          (B5) = CONSTANT 60 
          MX0    -6          (X0) = CHARACTER MASK
          BX6    X6-X6       CLEAR ASSEMBLY 
          SB2    B5          CLEAR CHARACTER COUNT
          MX2    0           SET TERMINATOR NOT FOUND 
          MX4    1           (X4) = CHARACTER COUNTER 
          SB6    B0          (B6) = ASSEMBLY INDEX
          EQ     UPC2        ENTER LOOP 
  
 UPC1     LX6    6           ADVANCE ASSEMBLY 
          SB2    B2-6 
          BX6    X6+X7
          ZR     B2,UPC4     IF 10 CHARACTERS ASSEMBLED 
 UPC2     LX5    6           NEXT CHARACTER 
          BX7    -X0*X5 
          SB3    X7-1R9      CHECK CHARACTER
          LX4    6           ADVANCE DISASSEMBLY
          PL     X4,UPC3
          SA5    A5+B1
 UPC3     ZR     X7,UPC5     IF CHARACTER = 00
          LT     B3,B1,UPC1  IF ALPHA/NUMERIC 
          SB4    X7-1R       CHECK CHARACTER
          ZR     B4,UPC2     IF CHARACTER = * * 
          AX2    X1,B3
          LX2    59 
          PL     X2,UPC1     IF NOT A SEPARATOR OR TERMINATOR 
          SB4    X7-1R= 
          AX2    X3,B3
          LX6    B2          LEFT JUSTIFY ASSEMBLY
          LX2    59 
          ZR     B4,UPC4     IF *=* SEPARATOR 
          MX7    0
 UPC4     BX6    X6+X7       ADD SEPARATOR
          SA6    B7+B6       STORE ASSEMBLY 
          SB2    B5          RESET ASSEMBLY 
          BX6    X6-X6
          SB6    B6+B1
          SA6    A6+B1       CLEAR LAST + 1 
          PL     X2,UPC2     LOOP IF NOT TERMINATOR 
          EQ     UPC         RETURN 
  
 UPC5     SX6    B1          RETURN ERROR 
          SB6    B0 
          EQ     UPC         RETURN 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 UPC      EQU    /COMQUPC/UPC 
 QUAL$    ENDIF 
          ENDX
