*DECK CKCRD 
          IDENT  CKCRD
 CKCRD    TITLE  CKCRD - UNPACK CONTROL STATEMENT.
          ENTRY  CKCRD
          SPACE  4,10 
**        CKCRD - UNPACK CONTROL STATEMENT. 
* 
*         CKCRD CALLS UPC= TO UNPACK A CONTROL STATEMENT.  THE REPLY
*         BUFFER SPECIFIED BY THE CALLER CONTAINS ONE PARAMETER PER WORD
*         IN THE FORM  42/CHARSTRING, 18/SEPCHAR. 
* 
*         CKCRD(ADR,REP)   SYMPL CALL FORMAT. 
* 
*         ENTRY  ADR = WORD CONTAINING FWA OF CONTROL 
*                      STATEMENT BUFFER.
*                REP = ADDR OF WORD CONTAINING FWA OF 
*                      BUFFER RECEIVING PARAMETERS. 
* 
*         EXIT   (REP) = PARAMETER COUNT. 
*                      = -1 IF ERRORS.
*                (REP) + 1, FF. = PARAMETERS. 
* 
*         CALLS  UPC=.
* 
*         USES   A - 1 2   4 5 6 7. 
*                B - 1. 
*                X - 1 2   4 5 6 7. 
          SPACE  4,10 
 CKCRD    SUBR
          SB1    1                 CONSTANT 1 
          SA2    X1                GET 1ST PARAMETER ADDR 
          SA1    A1+B1             GET 2D PARAMETER ADDR
          SA5    X2                SOURCE ADDR FOR UPC= 
          SA4    X1                DESTINATION ADDR FOR UPC=
          SB7    X4+B1
          SX6    X4 
          SA6    REPADDR           SAVE REPLY BUFFER ADDRESS
          RJ     UPC               UNPACK CONTROL CARD
          SA1    REPADDR           GET REPLY BUFFER ADDRESS 
          SX7    B6                NUMBER OF PARAMETERS 
          ZR     X6,CKC1           IF NO UNPACK ERRORS
          SX7    -1                INDICATE ERROR 
 CKC1     SA7    X1                STORE PARAMETER COUNT
          EQ     CKCRD             EXIT 
  
 REPADDR  BSS    1                 REPLY BUFFER ADDR
  
 UPC      SPACE  4,30 
***              UPC UNPACKS A CONTROL CARD TO INDIVIDUAL PARAMETERS WIT
*         BLANK FILL.  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 VALUES 0, OR 60B - 77B 
*                ARE ILLEGAL BEFORE THE TERMINATOR. 
*         (5.)  THE PARAMETER MUST CONTAIN 7 OR LESS CHARACTERS.
*         (6.)  THE PARAMETERS ARE STORED LEFT JUSTIFIED WITH ZERO
*                FILL.
*         (7.)   THE CHARACTER , WILL NOT 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 
          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    18          (X2) = EXCESS CHARACTER MASK 
          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
 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* 
          ZR     B4,UPC1     IF CHARACTER = * 
          SB4    X7-1R       CHECK CHARACTER
          ZR     B4,UPC2     IF CHARACTER = * * 
          BX1    X2*X6       CHECK ASSEMBLY 
          LX6    X6,B2       LEFT JUSTIFY ASSEMBLY
          NZ     X1,UPC5     IF > 7 CHARACTERS ASSEMBLED
          AX1    X3,B3       CHECK FOR TERMINATOR 
          EQ     B4,B1,UPC4  IF SEPARATOR = *,* 
          BX6    X6+X7       INSERT SEPARATOR 
 UPC4     SA2    UPCA        REPLACE BLANK
          NE     B2,B5,UPC4.1  IF NOT A BLANK PARAMETER 
          BX6    X2 
          MX2    18          RESTORE (X2) 
          EQ     UPC4.2 
  
 UPC4.1   SB2    B5-B2       SET MASK FIELD 
          SB2    B2-B1
          MX7    1
          AX7    X7,B2
          BX7    -X7*X2      CLEAR UPER PORTION 
          MX2    18 
          BX6    X6+X7       ADD BLANK
 UPC4.2   SA6    B7+B6       STORE ASSEMBLY 
          SB2    B5          RESET ASSEMBLY 
          BX6    X6-X6
          LX1    59 
          SB6    B6+B1
          SA6    A6+B1       CLEAR LAST + 1 
          PL     X1,UPC2     LOOP IF NOT TERMINATRO 
          SA2    A6-1        CLEAR TERMINATOR 
          MX3    42 
          BX7    X3*X2
          SA7    A2 
          SA2    UPCA 
          BX6    X2 
          SA6    A6          BLANK WORD TERMINATION 
          BX6    X6-X6
          EQ     UPC         RETURN 
  
 UPC5     SX6    B1          RETURN ERROR 
          SB6    B0 
          EQ     UPC
  
 UPCA     VFD    42/7L       ,18/0  BLANK WORD
          END 
