         PCC      0
*
*        THIS ROUTINE WILL SCAN J:CCBUF (ONLINE) FOR FILE.ACCT.PASS
*        IT WORKS CORRECTLY---NOT LIKE TEL SCAN.
*
*        INPUT:   R8 POINTER TO CALLER'S 15-WORD BUFFER
*                 R9 ARS (BT 0) AND BA(BUF) FOR SCAN:U ONLY
*                 R14 RETURN ADDRESS
*        PARAMS ARE RETURNED IN STANDARD VLP-FORMAT
*        OUTPUT BUFFER  = GARBAGE IF CC1 SET
*                       = UNTOUCHED IF NO PARAMS (CC2,CC3,CC4 =0)
*
*        RETURN CONDITION CODES:
*
*        CC0  CC1  CC2  CC3
*         1    0    0    0          ERROR DURING SCAN
*         0    -    -    -          SCAN WENT OK
*         -    -    -    1          FILENAME PRESENT
*         -    -    1    -          ACCOUNT PRESENT
*         -    1    -    -          PASSWORD PRESENT
*
*        MUST BE LOADED WITH J0 JIT PARAMS
**
**       MODIFIED: 07MAY76 TO ALLOW MULTIPLE CALLS TO
**                 SCAN:C. FILENAMES ARE SEPARATED BY COMMAS.
**
**       MODIFIED: 07JUN76 TO RUN IN BATCH. READS M:C FOR RECORD
**                 FOLLOWING !DATA CARD. MUST BE IN FORMAT:
**                (SPACE) (LMNNAME) (FILENAMES)
**
**       MODIFIED: 24 NOV 76 TO HANDLE SCAN:C DURING !XEQ (D00)
**
**       MODIFIED: 22 SEP 77 TO HANDLE SCAN:C DURING !XEQ (E00)
**
         TITLE    ' S C A N  -  TEL SCANNER THAT WORKS'
         SYSTEM   SIG5
         DEF      SCAN:C            SCAN J:CCBUF
         DEF      SCAN:U            SCAN USER'S BUFFER
         REF      JB:CCARS          ARS OF J:CCBUF
         REF      J:CCBUF           USER COMMAND
         REF      J:JIT             JIT START (FOR CPX FLAG)
         REF      M:SL
         REF      M:C
         CSECT    1
SCAN:C   EQU      %                 SCAN J:CCBUF
         LCI      0                 SAVE CALLER'S
         STM,0    SAVE               REGS
         LI,0     0                 CLEAR OUT
         STW,0    CC                CONDITIONS
         MTW,0    J:CCSAV           FIRST TIME CALLED?
         BNEZ     SCAN:C01          => NOPE.
         MTW,0    *X'4F'            ONLINE?
         BLZ      ONLINE            YES
         M:READ   M:C,(BUF,BUF),(SIZE,80),(ERR,BADDIE),;
                  (ABN,BADDIE)
         M:WRITE  M:SL,(BUF,BUF),(SIZE,80)
         LI,9     BUF
         LW,3     9
         SLS,3    2                 MAKE BUF BA
         AI,3     1                 SKIP FIRST CHAR
         STW,3    J:CCSAV
*
         LI,3     79                DROP TRAILING BLANKS
JUMP     LB,0     BUF,3
         CI,0     ' '
         BNE      JUMP2
         BDR,3    JUMP
         B        BADDIE
JUMP2    LW,0     3                 SET ARS
         LI,2     1                 INDEX
         B        MOVIT
ONLINE   EQU      %
         LB,0     JB:CCARS          GET COMMAND ARS
         AI,0     -1                DROP ACTIVATION CHAR
         LI,2     0                 INDEX
         LI,9     J:CCBUF           BUFFER ADDRESS
         LW,3     9                 GET
         SLS,3    2                  BA(BUF)
         LB,14    J:JIT             GET JIT FLAG
         CI,14    X'08'             XEQ MODE?
         BAZ      NXEQ              => NOPE
         DO       0                 E00
         AI,3     1                 BUMP OVER FIRST CHAR
         AI,2     1                  EXCLUDE FROM INDEX
         FIN
NXEQ     EQU      %
         STW,3    J:CCSAV           SAVE IT
         B        MOVIT
SCAN:C01 EQU      %
         LW,0     JB:CCARSSAV       GET ARS LEFT
         LW,9     J:CCSAV           BA(BUF)
         BLZ      DONE              => ALL DONE WITH BUFFER
         LI,2     3                 GET
         AND,2    9                  BYTE OFFSET
         SLS,9    -2                MAKE WA(BUF)
         B        SCANEM
*
*
*
SCAN:U   EQU      %                 SCAN USER'S BUFFER
         LCI      0                 SAVE CALLER'S
         STM,0    SAVE               REGS
         LI,0     0                 CLEAR OUT
         STW,0    CC                CONDITIONS
         LB,0     9                 SIZE
         LI,2     3                 GET THE
         AND,2    9                  BYTE OFFSET
         SLS,9    -2                MAKE WORD ADDRESS
         B        MOVIT3            GO START
MOVIT    EQU      %
         LB,3     *9,2              GET BYTE
         CI,3     ' '               BLANK?
         BE       SKIP              => YES. GOT F.A.P PARAMS
         AI,2     1                 NEXT
         BDR,0    MOVIT             DO ALL
         B        M05A              NO PARAMS
*
MOVIT2   EQU      %
         AI,2     1                 NEXT BYTE
MOVIT3   LB,3     *9,2              GET IT
         CI,3     ' '               BLANK?
         BNE      SCANEM            YES. START SCAN
SKIP     BDR,0    MOVIT2            DO NEXT
         LI,0     -1                SET THAT WE'RE
         STW,0    J:CCSAV            ALL DONE WITH BUFFER
         B        M05A              BLANK LINE..NOTHING THERE
*
*        FILENAME
*
SCANEM   EQU      %
         STW,0    JB:CCARSSAV       SAVE ARS
         LB,3     *9,2              GET BYTE
         CI,3     '.'               IS FIELD MISSING?
         BE       ACN               => YES. TRY NEXT.
         CI,3     ','               END OF CURRENT FILE ?
         BE       ENDF              YES
         LW,3     L(X'10000000')    SET FILE PRESENT
         STS,3    CC                 INTO CC
         LI,4     0                 FIELD TYPE=FNE
         LW,3     VLP,4             GET VLP WORD
         BAL,14   MOVE              MOVE FNE TO BUFFER
*
*        ACCOUNT
*
ACN      EQU      %
         AI,2     1                 BUMP PAST '.'
         AI,0     -1                EXCLUDE IT TOO
         BLE      M05A              END OF BUFFER
         LB,3     *9,2              GET BYTE
         CI,3     '.'               IS FIELD MISSING?
         BE       PASS              => YES. TRY NEXT.
         CI,3     ','               END OF CURRENT FILE ?
         BE       ENDF              YES
         LW,3     L(X'20000000')    SET ACN PRESENT
         STS,3    CC                 INTO CC
         LI,4     1                 FIELD TYPE=ACN
         LW,3     VLP,4             GET VLP WORD
         BAL,14   MOVE              MOVE ACN TO BUFFER
*
*        PASSWORD
*
PASS     EQU      %
         AI,2     1                 BUMP PAST '.'
         AI,0     -1                EXCLUDE IT TOO
         BLE      M05A              END OF BUFFER
         LB,3     *9,2              GET BYTE
         CI,3     '.'               IS FIELD MISSING?
         BE       DONE              => YES. NOTHING THERE.
         CI,3     ','               END OF CURRENT FILE ?
         BE       ENDF              YES
         LW,3     L(X'40000000')    SET PASS PRESENT
         STS,3    CC                 INTO CC
         LI,4     2                 FIELD TYPE=PASS
         LW,3     VLP,4             GET VLP WORD
         BAL,14   MOVE              MOVE PASS TO BUFFER
*
*        IF WE FALL THRU (I.E. NOT END-OF-DATA) THEN ERROR ANYWAY.
*
*
BADDIE   EQU      %
         LI,2     X'80'             SET CC
         STB,2    CC                 CC0 SAYS ERROR
DONE1    LCI      0                 RESTORE CALLER'S
         LM,0     SAVE               REGS
         LC       CC                SET RETURN CC
         B        *14
*
DONE     EQU      %
         LC       CC                GET CC'S
         BCS,7    DONE1             ANYTHING STORED IN USER'S VLP'S?
         LI,2     1                 NO - MUST CLEAR
         STH,2    *8                 THEM OUT!
         B        DONE1             NOW WE ARE DONE
         PAGE
MOVE     EQU      %
         STW,3    *8                TO BUFFER
         AI,8     1                 BUMP FOR DATA
         LW,7     COUNT,4           GET MAX FIELD SIZE
         LW,3     L('    ')         GOTTA PAD WITH BLANKS
         AI,7     3                 GET COUNT
         SLS,7    -2                 OF WORDS
         LI,5     0                 INDEX
MOVE2    STW,3    *8,5              BLANK IT
         AI,5     1
         BDR,7    MOVE2             CLEAR ALL WORDS
         LW,7     COUNT,4           GET BYTE SIZE AGAIN
         LW,5     INDEX,4           GET FIELD INDEX
M00      LB,3     *9,2              GET BYTE
         CI,3     '.'               END OF FIELD?
         BE       M03               YES. DONE WITH FIELD
         CI,3     ','               DONE WITH FILENAME
         BNE      M00A              => NOPE
M00A1    RES      0
         LW,3     0                 SAVE ARS
         LW,0     9
         SLS,0    2
         AW,0     2                 MAKE BUF ADDRESS
         AI,0     1                 BUMP OVER COMMA
         STW,0    J:CCSAV           SAVE IT
         LI,0     0                 SET END OF BUFFER ARS
         B        M03
M00A     EQU      %
         CI,3     ' '               SPACE?
         BE       BADDIE            YES..NOT ALLOWED AT ALL!
         STB,3    *8,5              NO. IT IS DATA
         AI,5     1                 NEXT OUT
         AI,2     1                 NEXT IN
         BDR,0    M01               MORE OF BUF TO DO
         LI,0     -1                SET THAT WE'RE
         STW,0    J:CCSAV            ALL DONE WITH BUFFER
         B        M03               BUFFER DONE
M01      BDR,7    M00               DO ONLY IF FIELD NEEDS MORE
         LB,3     *9,2              CHECK FOR END OF FIELD DELIMITER
         CI,3     '.'               END OF FIELD ?
         BE       M03               YES - DONE WITH FIELD
         CI,3     ','               END OF FID ?
         BE       M00A1             YES - DONE WITH THIS FID
         B        BADDIE            FIELD SIZE > SIZE ALLOWED
*
M03      EQU      %
         AI,3     -1                EXCLUDE COMMA IN LENGTH
         STW,3    JB:CCARSSAV       SAVE ARS
         B        %+1,4             GO GO GO
         B        M03A              FNE
         B        M03B              ACN
         B        M03B              PASS
M03A     AI,5     -1                REMOVE TEXTC COUNT
         STB,5    *8                INSERT COUNT
         AI,5     1                 ALLOW TEXTC IN SIZE
         AI,5     3                 ROUND UP
         SLS,5    -2                 TO WORD COUNT
         LI,7     -1                INDEX
         STB,5    *8,7              # RESERVED WORDS
         AI,7     -1
         STB,5    *8,7              # SIGNIFICANT WORDS
         B        M03C
M03B     EQU      %
         LI,5     2                 2 WORDS FOR ACN,PASS
M03C     EQU      %
         CI,0     0                 DONE WITH BUF?
         BLE      M04               => YES. THIS PARAM IS LAST
         AW,8     5                 BUMP SLOT FOR NEXT VLP
         B        *14
M04      LI,7     -3
         MTB,1    *8,7              SET THIS AS "LAST"
         B        DONE              ALL DONE!
M05A     LI,0     -1                SET
         STW,0    J:CCSAV            AS DONE WITH BUFFER
         B        DONE
ENDF     RES      0
         SLS,9    +2                BYTE ADDRESS
         AW,9     2                 CURRENT
         AI,9     +1                 +1
         STW,9    J:CCSAV           BA OF WHERE TO PICK UP
         AI,0     -1                DECREMENT CURRENT ARS
         BLE      M05A              AT THE END OF THE ROAD
         STW,0    JB:CCARSSAV       REMEMBER FOR NEXT TIME
         B        DONE
         PAGE
INDEX    DATA     1,0,0
COUNT    DATA     31,8,8
VLP      DATA     X'01000000',X'02000202',X'03000202'
         DEF      PATCH
PATCH    RES      20
         SPACE    5
         DEF      DATA00
DATA00   CSECT    0
SAVE     RES      16
CC       DATA     0                 RETURN CC
JB:CCARSSAV DATA  0
J:CCSAV  DATA     0
BUF      EQU      %
         DO1      20
         TEXT     ' '
         END
