*DECK C$FILE
          IDENT  C$FILE 
          TITLE  C$FILE - PROCESS C.FILE PARAMETERS 
          COMMENT  PROCESS C.FILE PARAMETERS
          SST 
* 
**        C.FILE - PROCESS FILE CARD PARAMS FROM ENTER
* 
*         DOES   CALLED VIA ENTER - SETS VARIOUS FET FIELDS 
* 
*         CALLING SEQ 
*                ENTER COMPASS C.FILE USING FILENAME, PARAMS. 
*                            FILENAME IS THE NAME OF THE FILE 
*                            PARAMS IS A CHAR STRING OF FILE STUFF
* 
*         PARAMETERS ALLOWED
*                CF   CLOSE FLAG - R, N, U, DET, RET, DIS 
*                BBH  BUFFER BELOW HHA - YES OR NO
*                TRC  TRACE FOR DA FILES
*                ERL  RESET ERROR LIMIT.
* 
*         REGISTER USAGE THROUGHOUT 
*                A0 HAS ADDRESS OF FIT
*                A4 HAS THE ADDRESS OF THE CHAR STRING
*                B2 HAS CHARS LEFT IN LITERAL 
*                B3 HAS CHARS LEFT IN WORD
*                B4 HAS LAST DELIMITER ENCOUNTERED - 100B IF END OF LIT 
*                B5 HAS CHARACTER COUNT FOR DIAGNOSTICS 
*                X2 IS THE RETURNED PARAMETER FROM ALL GETXXX PROCS 
*                X3 IS THE RETURNED CHAR FROM GETCHAR 
*                X4 IS THE CHARACTER STRING WE ARE WORKING ON 
*CALL IOMICROS
          EJECT 
          ENTRY  C.FILE 
 C.FILE   DATA   0
          SA2    X1          GET LFN
          SA0    X1          SET FIT POINTER
          SA3    A1+B1       GET PARAMETER POINTER
*       CHECK VALIDITY OF PARAMETERS
          MX5    -6 
          LX2    6
          BX6    -X5*X2      FIRST CHAR OF LFN
          ZR     X6,ERR1     JP IF FIRST CHAR IS BINARY ZERO
          SA4    X3          GET PARAMETER CHARACTER STRING 
          SX6    X6-33B 
          PL     X6,ERR1     JP IF FIRST CHAR NOT A THRU Z
          AX3    21 
          MX5    -3 
          BX6    -X5*X3      CLASS
          SX6    X6-3 
          NZ     X6,ERR2     JP IF NOT ALPHANUMERIC 
          AX3    6+3
          MX5    -6 
          BX5    -X5*X3      BCP
          AX3    6
          SB2    X3          SIZE 
          SX6    6
          SX7    10 
          IX6    X6*X5       BCP * 6 GIVES SHIFT COUNT
          SB5    X6 
          LX4    B5          POSITION X4 TO FIRST CHAR
          IX5    X7-X5       10-BCP GIVES CHARS LEFT
          SB3    X5          CHARS LEFT IN X4 
          SB4    56B         SET TO COMMA TO FAKE OUT GETPAR
          SB5    B1          SET CHAR POS AS 1
 SCANLP   SPACE  3
*      SCAN THE PARAMETER STRING
 SCANLP   BSS    0           SCAN LOOKING AT PARAMS 
          SX6    B4-100B
          ZR     X6,C.FILE   EXIT IF DONE (AT END OF LITERAL
          SX6    B4-56B 
          NZ     X6,COMERR   JP IF NOT A COMMA - ONE MUST PRECEDE THIS
          RJ     GETPAR      GET A PARAMETER
          SX6    B4-54B 
          NZ     X6,EQERR    JP IF NOT = SIGN - ONE MUST FOLLOW PARAM 
          SB6    ENDPL-PARL-1 
 PARSCN   BSS    0
          SA5    B6+PARL     LOOK AT A PARAM
          BX7    X5-X2
          ZR     X7,PARFND   JP IF ONE FOUND
          SB6    B6-B1
          PL     B6,PARSCN
          EQ     BADPAR      JP TO ERROR - COULD NOT FIND A MATCH 
 PARFND   BSS    0
          JP     B6+PARPROC  GO TO PROCESS FOR PARAM
 BBH      SPACE  3
 BBH      BSS    0           BUFFER BELOW HIGHEST HIGH
          RJ     GETYN       GET YES OR NO VALUE
          STORE  A0,BBH=X2   SET THE VALUE
          EQ     SCANLP      GO TRY NEXT (IF ANY) 
 CF       SPACE  3
 CF       BSS    0           CLOSE FLAG 
          RJ     GETPAR      GET A PARAMETER
          SB6    CFVALE-CFVALS-1
          MX7    30 
 CFLOOP   BSS    0
          SA5    B6+CFVALS
          BX6    X7*X5
          BX6    X2-X6
          ZR     X6,CFFND    JP IF MATCH FOUND
          SB6    B6-B1
          PL     B6,CFLOOP
          EQ     BADPAR      JP IF VALUE NOT FOUND
 CFFND    BSS    0           FOUND A MATCH
          SX6    X5          VALUE OF PARAM 
          STORE  A0,CF=X6    SET VALUE
          STORE  A0,CFST=YES TELL CLOSE IT WAS SET
          EQ     SCANLP      GO PROCESS NEXT ONE (IF ANY) 
 ERL      SPACE  3
 ERL      BSS    0           ERROR LIMIT
          RJ     GETNBR      GET THE VALUE
          STORE  A0,ERL=X2   SET IT 
          EQ     SCANLP 
 TRC      SPACE  3
 TRC      BSS    0           TRACE NN IOS FOR DA FILES
          FETCH  A0,FO,X5    GET FILE ORG 
          SX5    X5-#DA#
          NZ     X5,FOERR    JP IF NOT DA FILE - ERROR
          RJ     GETNBR      GET THE VALUE
          STORE  A0,TRC=X2   SET IT 
          EQ     SCANLP 
          TITLE  COMMON ROUTINES
 GETPAR   EJECT 
 GETPAR   DATA   0           GET A PARAMETER
          MX2    0           CLEAR X2 
          SB6    60          SHIFT COUNT
          SX6    B5 
          SA6    =SPARFP     SAVE FIRST POSITION OF PARAMETER 
          SB4    100B        END FLAG 
          ZR     B2,GETPEX   NO MORE CHARACTERS 
 GETPLP   BSS    0
          RJ     GETCHAR     GET A CHARACTER
          SX5    X3-55B      TEST FOR BLANK 
          SB4    X3          SAVE DELIM IF ANY
          ZR     X5,GETPSKP  SKIP BLANKS
          SX5    X3-54B      TEST FOR = 
          ZR     X5,GETPEX   JP IF SO 
          SX5    X3-56B      TEST FOR COMMA 
          ZR     X5,GETPEX   JP IF SO 
          SX5    X3-46B 
          PL     X5,BADPAR   JP IF NOT LETTER OR NUMBER 
          ZR     X3,BADPAR   JP IF COLON - ILLEGAL
          LX2    6
          IX2    X2+X3       ADD THIS CHAR TO STRING
          SB6    B6-6        DECREMENT SHIFT COUNT
 GETPSKP  SB4    100B        END FLAG 
          ZR     B2,GETPEX   EXIT IF END OF STRING
          EQ     GETPLP 
 GETPEX   BSS    0
          LX2    B6,X2       POSITION AT TOP OF WORD
          BX6    X2 
          SA6    =SPARAM     SAVE PARAMETER 
          EQ     GETPAR      EXIT 
 GETNBR   SPACE  3           GET A NUMBER 
 GETNBR   DATA   0
          MX2    0           ZERO COUNT 
          RJ     GETPAR      GET PARAMETER
          BX5    X2 
          SX7    X2 
          NZ     X7,BADPAR   JP IF NOT ZERO - MAX OF 7 CHARS ALLOWED
          MX0    -6 
 GETNBLP  BSS    0
          LX5    6
          BX7    -X0*X5      GET NEXT CHAR
          ZR     X7,GETNBR   EXIT IF DONE 
          SX6    X7-33B      REMOVE ZERO BIAS 
          NG     X6,BADPAR   JP IF NOT A NUMBER 
          SX7    X6-10
          PL     X7,BADPAR   JP IF NOT A NUMBER 
          SX7    10 
          IX2    X2*X7       MULTIPLY VALUE SO FAR BY 10
          IX2    X2+X6       ADD IN THIS VALUE
          EQ     GETNBLP
 GETYN    SPACE  0
 GETYN    DATA   0           GET YES OR NO VALUE - 1 IN X2 IS YES, 0 NO 
          RJ     GETPAR      GET PARAMETER
          BX5    X2 
          SA3    =3LYES 
          SX2    B1 
          IX6    X5-X3
          ZR     X6,GETYN    JP IF YES
          MX2    0
          SA3    =2LNO
          IX6    X5-X3
          ZR     X6,GETYN    JP IF NO 
          EQ     BADPAR      NEITHER - ERROR
 GETCHAR  SPACE  3
 GETCHAR  DATA   0           GET A CHARACTER
          MX6    -6 
          LX4    6           POSITION NEXT CHAR 
          BX3    -X6*X4      GET CHAR 
          SB5    B5+B1       BUMP CHAR COUNT
          SB3    B3-B1
          SB2    B2-B1       DECREMENT CHAR COUNT 
          NZ     B3,GETCHAR 
          SB3    10 
          SA4    A4+B1       GET NEXT WORD
          EQ     GETCHAR
          TITLE  ERROR PROCESS
 BADPAR   BSS    0           BAD OR ILLEGAL PARAMETER 
          SX6    #CBFE3 
          EQ     ERINSCH
 COMERR   BSS    0           COMMA NEEDED HERE
          SX6    #CBFE5 
          EQ     ERINSCH
 ERR1     BSS    0           LFN NOT LEGAL FILE NAME
          SX1    #CBFE1 
          SA2    A2          FILE NAME
          MX7    42 
          BX7    X7*X2       FIRST 7 CHARS AT LEAST 
          EQ     ERINS3 
 ERR2     BSS    0           DATA ITEM NOT AN 
          SX1    #CBFE2 
          MX2    0           FLAG NO INSERTS
          EQ     ERRMSG 
 EQERR    BSS    0           = SIGN NEEDED HERE 
          SX6    #CBFE6 
          EQ     ERINSCH
 FOERR    BSS    0           FILE ORG NOT DA FOR TRC
          SX6    #CBFE5 
 ERINSCH  BSS    0
          SA1    PARFP       GET POINTER TO FIRST POS OF PARAM
          SA6    =SERRSVN    SAVE ERROR NUMBER
          RJ     =XC.MSCV    CONVERT NUMBER  TO D00 FORMAT
          SA1    ERRSVN 
 ERINS3   BSS    0
          SA7    =XC.MSINS   PUT IN INSERT PLACE
          MX2    1           FLAG INSERT
 ERRMSG   BSS    0
          SA3    C.FILE 
          AX3    30 
          SX3    X3-1        POINT TO LINE NUMBER 
          MX6    0           RETURN 
          RJ     =XC.MSG     PUT OUT MESSAGE
          EQ     C.FILE      EXIT 
          EQ     C.FILE      RETURN 
          EJECT 
          TITLE  TABLES 
 PARL     BSS    0           PARAMETER LIST 
          CON    3LBBH
          CON    2LCF 
          CON    3LERL
          CON    3LTRC
 ENDPL    BSS    0
 ENDL     BSS    0
 PARPROC  BSS    0
 +        EQ     BBH
 +        EQ     CF 
 +        EQ     ERL
 +        EQ     TRC
  
 CFVALS   BSS    0
          VFD    30/3LDET,30/#DET#
          VFD    30/1LN,30/#N#     NO REWIND
          VFD    30/1LR,30/#R#     REWIND 
          VFD    30/3LRET,30/#RET# RETURN 
          VFD    30/1LU,30/#U#     UNLOAD 
 CFVALE   BSS    0
          END 
