*DECK     VCP 
          IDENT  VCP
          TITLE  VCP - VALIDATE CONTROL CARD PARAMETERS.
          SST 
          SYSCOM B1 
  
  
          ENTRY  VCP
  
  
          COMMENT  VALIDATE CONTROL CARD PARAMETERS.
          COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1994. 
          SPACE  4,10 
**        VCP - VALIDATE CONTROL CARD PARAMETERS. 
* 
*         J. G. CLARK        79/12/17.
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL COMCMAC 
*CALL COMCAPR 
*CALL COMCPTF 
 VCP      SPACE  4,10 
**               VCP IS CALLED AFTER THE CONTROL CARD HAS 
*         BEEN CRACKED.  ALL PARAMETERS ARE CHECKED TO MEET 
*         PARAMETER SPECINICATIONS CONTAINED IN THE VALID 
*         PARAMETER TABLE.  PARAMETER VALUES ARE STORED IN
*         THE DESIGNATED LOCATIONS. 
* 
*         ENTRY  (A3) IS THE ADDRESS OF THE PARAMETERS AND
*                VALUES AS CRACKED. 
*                RA.ACT CONTAINS A COUNT OF THE NUMBER OF 
*                PARAMETERS AND VALUES. 
*                (B5) IS THE ADDRESS OF THE VALID PARAMETER NAMES AND 
*                SPECIFICATIONS.
* 
*         EXIT   (X1) IS AN ERROR MESSAGE ADDRESS WHEN A
*                PARAMETER ERROR IS FOUND.
*                PARAMETER VALUES HAVE BEEN STORED. 
* 
*         USES   A - 0,1,2,3,5,6. 
*                B - 2,3,4,6,7. 
*                X - 0,1,2,3,4,5,6,7. 
* 
*         CALLS  DXB=, ZTB=.
  
  
 VCP7     SA3    IVMM+1      SET *NO VALUE* 
 VCP8     BX5    X3 
 VCP9     RJ     =XZTB=      CHANGE COLONS TO BLANKS
          SA6    IPVM        STORE PARAMETER NAME 
          BX1    X5 
          RJ     =XZTB=      CHANGE COLONS TO BLANKS
          SX1    A6-1        SET ERROR MESSAGE ADDRESS
          SA6    A6+1 
  
 VCP      SUBR               ENTRY/EXIT 
          SA2    RA.ACT 
          IF     -DEF,RA.ACT,1
 RA.ACT   EQU    ACTR        EQUATE NOS AND NOS/BE SYMBOLS
          MX1    0           CLEAR ERROR MESSAGE ADRESS 
          SB6    X2 
          ZR     B6,VCPX     IF NO PARAMETERS TO PROCESS
          SB7    B0 
          SA2    B5 
 VCP1     SA5    A2          FETCH FIRST TABLE ENTRY
          BX1    X3 
          MX0    12 
          SB7    B7+B1
 VCP2     ZR     X5,VCP9     IF PARAMETER NOT IN TABLE
          BX2    X0*X5
          BX7    X5 
          SA5    A5+B1       FETCH NEXT TABLE ENTRY 
          MI     X7,VCP5     IF POSITIONAL PARAMETER
          IX2    X3-X2
          AX2    18 
          NZ     X2,VCP2     IF NOT A MATCH 
          LX7    12 
          SX4    X3-1R= 
          NZ     X4,VCP3     IF NO VALUE GIVEN
          SA3    A3+1        GET PARAMETER VALUE
          SB7    B7+1 
 VCP3     LX7    -12
          SA5    X7          SET ADDRESS TO STORE VALUE AT
          LX7    -18
          MX2    -11         GET MAXIMUM MASK COUNT 
          BX6    -X2*X7 
          SB2    X6 
          LX7    -11
          BX6    -X2*X7 
          SA0    B2-6*10     (A0)=0, IF 10 CHARACTER PARAMETER ALLOWED
          SB4    X6          GET MINIMUM MASK COUNT 
          ZR     B2,VCP3.4   IF NO VALUE CHECK REQUIRED 
          NZ     X4,VCP7     IF NO VALUE GIVEN
          MX6    B2,X2
          BX6    -X6*X3 
          ZR     X6,VCP3.1   IF NOT TOO MANY CHARACTERS 
          SX2    X6-1R= 
          NZ     X2,VCP8     IF TOO MANY CHARACTERS 
          AX6    6
          NZ     X6,VCP8     IF TOO MANY CHARACTERS 
 VCP3.1   SB2    3000B       CHECK NEGATIVE VALUE 
          BX6    X6-X6
          GT     B4,B2,VCP3.2  IF MINIMUM CHARACTER .EQ. 0
          MX6    B4,X2       GET PARAMETER
 VCP3.2   BX6    -X6*X3 
          GT     B4,B2,VCP3.3  IF MINIMUM CHARACTER .EQ. 0
          ZR     X6,VCP8     IF TOO FEW CHARACTERS
 VCP3.3   SX2    X6-1R= 
          NZ     X2,VCP3.4   IF ENOUGH CHARACTERS 
          AX6    6
          ZR     X6,VCP8     IF TOO FEW CHARACTERS
 VCP3.4   LX7    59-40+11+18
          BX6    X3 
          PL     X7,VCP4     IF NO VALUE CONVERSION REQUIRED
          BX5    X3 
          RJ     =XDXB=      CONVERT DISPLAY CODE TO BINARY 
          SA1    A3-B1       RESET PARAMETER
          SA3    A3          RESET VALUE
          NZ     X4,VCP8     IF ERROR IN CONVERSION 
 VCP4     SX4    X3-1R= 
          SB3    A0+
          NZ     B3,VCP4.0   IF 10 CHARACTER PARAMETER NOT ALLOWED
          MX2    -6 
          BX2    -X2*X6 
          ZR     X2,VCP4.0   IF LESS THAN 10 CHARACTERS 
          SA3    A3+1        GET NEXT WORD
          SB6    B6-B1       DECREMENT TOTAL
          LX7    60-46+40 
          ZR     X3,VCP4.0   IF PARAMETER 10 CHARACTERS EXACTLY 
          PL     X7,VCP8     IF PARAMETER GREATER THAN 10 CHARACTERS
*                            AND NOT ALLOWED
          SB6    B6+B1       RESET TOTAL
          SA3    A3-B1       RESET CURRENT PARAMETER
  
 VCP4.0   BSS    0
          SA3    A3+B1       FETCH NEXT PARAMETER 
          NZ     X4,VCP4.1   IF NOT EQUATED 
          MX2    42 
          BX6    X2*X6       EXTRACT PARAMETER
 VCP4.1   SA6    A5          STORE PARAMETER VALUE
          MX1    0
          LT     B7,B6,VCP1  IF MORE PARAMETERS TO PROCESS
          EQ     VCPX        RETURN 
  
 VCP5     AX2    48-0 
          SB3    X2+B7
          NZ     B3,VCP2     IF NOT THIS POSITION 
          LX7    12 
          MI     X7,VCP6     IF EQUIVALENCE REQUIRED
          BX4    X4-X4
 VCP6     NZ     X4,VCP2     IF NOT POSITIONAL
          EQ     VCP3        CHECK POSITIONAL PARAMETER 
          SPACE  4
          END 
