
                     * PAG
                     **********************************************************
                     *  CAT - PRINT DIRECTORY CONTENT                         *
                     **********************************************************
                     * OPT PAG
                     *
                     * 'CAT' UTILITY COPYRIGHT (C), 1979 BY
                     *
                     *   TECHNICAL SYSTEMS CONSULTANTS, INC.
                     *   BOX 2570
                     *   WEST LAFAYETTE, INDIANA  47906
                     *   USA
                     
                     * BY FLD ON 15-10-2011 FOR VEGAS
                     * DISASSEMBLY BY DYNAMITE OF CAT.CMD
                     * MODIFIED FOR Y2K ON 26-11-11
                     
                     **   SYMBOL DEFINITIONS. (SCANDEF)
                     
               D406  FMS     EQU    $D406     FMS CALL ENTRY
               CD03  WARMS   EQU    $CD03     FLEX WARM START
               CD42  GETHEX  EQU    $CD42     GET HEX VALUE
               CD27  NXTCH   EQU    $CD27     GET NEXT CHARACTER
               CD21  CLASS   EQU    $CD21     CLASSIFY CHARACTER
               C840  FCB     EQU    $C840     SYSTEM FCB
               CD3F  RPTERR  EQU    $CD3F     REPORT ERROR CONDITION
               CC02  EOL     EQU    $CC02     END OF COMMAND CHARACTER
               CC14  BUFPNT  EQU    $CC14     BUFFER POINTER
               CC0C  WASN    EQU    $CC0C     WORKING DRIVE NUMBER
                     * SCANDEF END
                     
               C080  LINBUF  EQU    $C080     INPUT LINE BUFFER
               CD24  PCRLF   EQU    $CD24     PRINT CR/LF
               CD39  OUTDEC  EQU    $CD39     PRINT DECIMAL DIGITS
               CD18  PUTCHR  EQU    $CD18     PRINT CHARACTER
               CD1E  PSTRNG  EQU    $CD1E     PRINT STRING
               CD3C  OUTHEX  EQU    $CD3C     PRING HEX DIGITS
                     
                     *    SCRATCH VARIABLES
                     
  0000                       ORG    $0
                     * SCANVAR
  0000               NAME    RMB    11        MATCH NAME
  000B               AF      RMB    1         "ALL FILES" FLAG
  000C               DC      RMB    1         DIRECTORY COUNT
  000D               CT      RMB    2         ENTRY COUNT
  000F               CM      RMB    2         CURRENT MATCH POINTER
  0011               WD      RMB    1         WORKING DRIVE FLAG
  0012               DS      RMB    1         DRIVE SCAN FLAG
  0013               DP      RMB    2         DRIVE POINTER
  0015               MA      RMB    2         MATCH POINTER
  0017               EC      RMB    2         END OF COMMAND POINTER
                     * SCANVAR END
                     
  0019               SECS    RMB    2         SECTOR COUNT
  001B               LARG    RMB    2         LARGEST FILE SIZE
  001D               LEFT    RMB    2         SECTORS LEFT
  001F               FTOT    RMB    2         TOTAL FILES
  0021               VARLEN  RMB    0
                     
  C100                       ORG    $C100
                     **   MAIN PROGRAM.
                     
                             
  C100 20   00       DIR     BRA    DIR0      SKIP VERSION NUMBER
                     * FCB 4 VERSION NUMBER (4).
  C102 56 65 72 73           FCC    /Version 3.0 du 6 Decembre 1982/,4
  C106 69 6F 6E 20   
  C10A 33 2E 30 20   
  C10E 64 75 20 36   
  C112 20 44 65 63   
  C116 65 6D 62 72   
  C11A 65 20 31 39   
  C11E 38 32 04      
  C121 04                    FCB    $04
                     
  C102                       ORG    $C102
  C102 32   E8 DF    DIR0    LEAS   -VARLEN,S
  C105 33   E4               LEAU   0,S
                     
  C107 17   02AB     INT0    LBSR   INIT      INITIALIZE
                     
  C10A 17   0331     DIR1    LBSR   SEL       SELECT NEXT DRIVE
  C10D 25   05               BCS    DIR2      IF END OF DRIVES
  C10F 17   02FC             LBSR   PDR       PROCESS DRIVE
  C112 20   F6               BRA    DIR1      LOOP
                     
  C114 BD   CD24     DIR2    JSR    PCRLF     PRINT TRAILING CR/LF
  C117 7E   CD03             JMP    WARMS     RETURN TO SYSTEM
                     
                     **   DRIVE - PROCESS NEXT DRIVE.
                     
  C11A 4F            DRIVE   CLRA             CLEAR VARIABLES
  C11B 5F                    CLRB
  C11C ED   C8 19            STD    SECS,U    SECTOR COUNT
  C11F ED   C8 1B            STD    LARG,U    LARGEST FILE SIZE
  C122 ED   C8 1F            STD    FTOT,U    TOTAL FILE COUNT
  C125 BD   CD24             JSR    PCRLF     OUTPUT BLANK LINE
  C128 86   10               LDA    #16       OPEN SIR
  C12A 17   022E             LBSR   FMSC
  C12D 1026 0365     DRIVE1  LBNE   FILERR    IF ERROR
  C131 86   07               LDA    #7        GET SIR
  C133 17   0225             LBSR   FMSC
  C136 26   F5               BNE    DRIVE1    IF ERROR
  C138 FC   C855             LDD    FCB+21    SAVE SECTORS LEFT
  C13B ED   C8 1D            STD    LEFT,U
  C13E 30   8D 017C          LEAX   DIRST,PCR OUTPUT TITLE
  C142 BD   CD1E             JSR    PSTRNG    PRINT IT
  C145 F6   C843             LDB    FCB+3     GET DRIVE
  C148 4F                    CLRA
  C149 34   06               PSHS   D
  C14B 30   E4               LEAX   0,S       PRINT DRIVE
  C14D 5F                    CLRB
  C14E BD   CD39             JSR    OUTDEC
  C151 32   62               LEAS   2,S
  C153 30   8D 017D          LEAX   VST,PCR   PRINT VOLUME INFORMATION
  C157 BD   CD1E             JSR    PSTRNG
  C15A 8E   C844             LDX    #FCB+4    POINT TO NAME
  C15D C6   08               LDB    #8        SET COUNT
  C15F 17   00B8             LBSR   PDC       PRINT NAME
  C162 30   8D 0177          LEAX   NMST,PCR  "NAME"
  C166 C6   03               LDB    #3        SET COUNT
  C168 17   00AF             LBSR   PDC       PRINT IT
  C16B 8E   C84F             LDX    #FCB+15   POINT TO NUMBER
  C16E BD   CD39             JSR    OUTDEC    PRINT IT
  C171 BD   CD24             JSR    PCRLF     PRINT CR & LF
  C174 30   8D 010B          LEAX   HDR,PCR   PRINT COLUMN HEADERS
  C178 BD   CD1E             JSR    PSTRNG
  C17B 39                    RTS
                     
                     **   DRVEND - END OF DRIVE PROCESSOR.
                     
  C17C BD   CD24     DRVEND  JSR    PCRLF     PRINT BLANK LINE
  C17F BD   CD24             JSR    PCRLF     PRINT AN OTHER BLANK LINE
  C182 30   8D 0120          LEAX   SST,PCR   "Secteurs occupes="
  C186 C6   11               LDB    #$11
  C188 17   008F             LBSR   PDC       PRINT IT
  C18B 30   C8 19            LEAX   SECS,U    POINT TO SECTOR COUNT
  C18E BD   CD39             JSR    OUTDEC    PRINT SECTORS
  C191 17   00D9             LBSR   OUTCOM    PRINT COMMA
  C194 30   8D 011F          LEAX   FRST,PCR  "libres="
  C198 C6   07               LDB    #$7
 >C19A 17   007D             LBSR   PDC       PRINT IT
  C19D 5F                    CLRB
  C19E 30   C8 1D            LEAX   LEFT,U    PRINT FREE SECTOR COUNT
  C1A1 BD   CD39             JSR    OUTDEC
  C1A4 39                    RTS
                     
                     **   GROUP - START OF NEXT MATCH GROUP.
                     
  C1A5 4F            GROUP   CLRA             CLEAR COUNTS
  C1A6 5F                    CLRB
  C1A7 ED   C8 1F            STD    FTOT,U
  C1AA ED   C8 19            STD    SECS,U
  C1AD 7E   CD24             JMP    PCRLF     PRINT BLANK LINE
                     
                     **   MATCH - PROCESS NEXT MATCHED ENTRY.
                     
  C1B0 BD   CD24     MATCH   JSR    PCRLF     START NEW LINE
  C1B3 8E   C844             LDX    #FCB+4    POINT TO NAME
  C1B6 C6   08               LDB    #8
  C1B8 8D   53               BSR    PRNAM     PRINT NAME
  C1BA 86   2E               LDA    #'.
  C1BC BD   CD18             JSR    PUTCHR    OUTPUT '.'
  C1BF C6   03               LDB    #3
  C1C1 8D   4A               BSR    PRNAM     PRINT EXT
  C1C3 8D   41               BSR    OUT2SP    OUTPUT SPACE
                     
  C1C5 8E   C855             LDX    #FCB+21
  C1C8 C6   01               LDB    #1
  C1CA BD   CD39             JSR    OUTDEC    OUTPUT SIZE
  C1CD 8D   37               BSR    OUT2SP
  C1CF 8D   37               BSR    OUTSP
  C1D1 108E C859             LDY    #FCB+25
  C1D5 8D   6B               BSR    OUTDAT    OUTPUT DATE
  C1D7 8D   2D               BSR    OUT2SP
  C1D9 8E   C840             LDX    #FCB      POINT TO FCB
  C1DC CC   5780             LDD    #'W<<8+$80 CHECK WRITE PROTECT
  C1DF 8D   46               BSR    OUTPR
  C1E1 CC   4440             LDD    #'D<<8+$40 CHECK DELETE PROTECT
  C1E4 8D   41               BSR    OUTPR
  C1E6 CC   4310             LDD    #'C<<8+$10 CHECK CATALOG PROTECT
  C1E9 8D   3C               BSR    OUTPR
                     * FALL THROUGH TO "SKIP"




                     ** SKIP PROCESS SKIPPED ENTRY


  C1EB FC   C855     SKIP    LDD    FCB+21    GET FILE SIZE
  C1EE 10A3 C8 1B            CMPD   LARG,U    CHECK AGAINST LARGEST
  C1F2 23   03               BLS    SKIP1     IF NOT LARGER
  C1F4 ED   C8 1B            STD    LARG,U    UPDATE LARGEST
  C1F7 E3   C8 19    SKIP1   ADDD   SECS,U    ADD TO SECTOR COUNT
  C1FA ED   C8 19            STD    SECS,U    UPDATE SECTOR COUNT
  C1FD 6C   C8 20            INC    FTOT+1,U  COUNT FILE
  C200 26   03               BNE    SKIP2
  C202 6C   C8 1F            INC    FTOT,U
  C205 39            SKIP2   RTS
                     
                     **   OUTPUT SPACE(S)
                     
  C206 8D   00       OUT2SP  BSR    OUTSP     OUTPUT FIRST SPACE
  C208 86   20       OUTSP   LDA    #'        SETUP SPACE
  C20A 7E   CD18             JMP    PUTCHR    PRINT IT
                     
                     **   PRINT FILE NAME.
                     
  C20D A6   80       PRNAM   LDA    0,X+      GET CHARACTER
  C20F 26   02               BNE    PRNAM3    IF NULL
  C211 86   20               LDA    #'        SETUP SPACE
  C213 BD   CD18     PRNAM3  JSR    PUTCHR    PRINT CHAR
  C216 5A                    DECB
  C217 26   F4               BNE    PRNAM     LOOP THROUGH NAME
  C219 39                    RTS              RETURN
                     
                     **   PDC - PRINT DATA UNDER COUNT CONTROL.
                     *    ENTRY (X)=STRING ADDRESS
                     *          (B)=COUNT
                     *    EXIT  (B)=0
                     
  C21A A6   80       PDC     LDA    0,X+      GET CHARACTER
  C21C 27   07               BEQ    PDC2      IF NULL
  C21E BD   CD18             JSR    PUTCHR    PRINT IT
  C221 5A                    DECB             DEC COUNT
  C222 26   F6               BNE    PDC       LOOP THROUGH STRING
  C224 39                    RTS              RETURN
                     
  C225 5F            PDC2    CLRB
  C226 39                    RTS
                     
                     **   OUTPR - OUTPUT PROTECTION CODE
                     *    ENTRY (B)=PROTECTION CODE MASK
                     *          (A)=LETTER TO PRINT
                     *          (X)=FCB ADDRESS
                     
  C227 E5   0F       OUTPR   BITB   15,X      TEST BYTE
  C229 26   02               BNE    OUTPR2
  C22B 86   20               LDA    #'        SETUP SPACE
  C22D 7E   CD18     OUTPR2  JMP    PUTCHR    PRINT CHARACTER
                     
                     **   OUTD - OUTPUT DATE DIGIT.
                     
  C230 34   02       OUTD    PSHS   A         SAVE DIGIT
  C232 6F   E2               CLR    0,-S      MAKE 16 BITS WIDE
  C234 81   09               CMPA   #9        LESS THAN 10?
  C236 22   02               BHI    OUTD2
  C238 8D   CE               BSR    OUTSP     OUTPUT SPACE
  C23A 5F            OUTD2   CLRB
  C23B 30   E4               LEAX   0,S
  C23D BD   CD39             JSR    OUTDEC    PRINT DIGITS
  C240 35   86               PULS   D,PC      RETURN
                     
                     **   OUTPUT DATE.
                     
  C242 A6   21       OUTDAT  LDA    1,Y       GET DAY
  C244 8D   EA               BSR    OUTD      PRINT IT
  C246 8D   2C               BSR    OUTM      "-"
  C248 30   8D 0094          LEAX   MNTH,PCR  POINT TO MONTH STRING
  C24C 4F                    CLRA
  C24D E6   A4               LDB    0,Y       GET MONTH
  C24F 27   0A               BEQ    OUTDA1
  C251 C1   0C               CMPB   #$0C
  C253 23   02               BLS    OUTDA2
  C255 86   01               LDA    #1
  C257 86   03       OUTDA2  LDA    #3        DETERMINE MONTH
  C259 5A                    DECB
  C25A 3D                    MUL
  C25B 30   8B       OUTDA1  LEAX   D,X
  C25D C6   03               LDB    #3        SET COUNT
  C25F 8D   B9               BSR    PDC       PRINT MONTH
  C261 8D   11               BSR    OUTM      "-"
  C263 A6   22               LDA    2,Y       GET YEAR
                     * Y2K MODIFICATION
  C265 81   64               CMPA   #100      COMPARE TO 100
  C267 25   02               BLO    Y2K       SKIP IF SMALLER
  C269 80   64               SUBA   #100      SUBSTRACT 100
  C26B 20   C3       Y2K     BRA    OUTD      PRINT IT
                     
                     **   OUTCOM - PRINT COMMAND AND SPACE
                     
  C26D 86   2C       OUTCOM  LDA    #',       PRINT COMMA
  C26F BD   CD18             JSR    PUTCHR
  C272 20   94               BRA    OUTSP     PRINT SPACE
                     
                     **   PRINT MINUS SIGN.
                     
  C274 86   2D       OUTM    LDA    #'-       SETUP '-'
  C276 7E   CD18             JMP    PUTCHR    PRINT IT
                     
                     **   PRINT DISK ADDRESS.
                     
  C279 BD   CD3C     OUTPNT  JSR    OUTHEX    OUTPUT DIGIT
  C27C 8D   F6               BSR    OUTM      PRINT '-'
  C27E 30   01               LEAX   1,X
  C280 7E   CD3C             JMP    OUTHEX    PRINT REST
                     
                     **   STRINGS
                     
  C283 4E 6F 6D 20   HDR     FCC    'Nom     Type Taille    '
  C287 20 20 20 20   
  C28B 54 79 70 65   
  C28F 20 54 61 69   
  C293 6C 6C 65 20   
  C297 20 20 20      
  C29A 44 61 74 65           FCC    'Date    Prt',4
  C29E 20 20 20 20   
  C2A2 50 72 74 04   
                     * FST FCC '    FILES=',4
  C2A6 53 65 63 74   SST     FCC    'Secteurs occupes='
  C2AA 65 75 72 73   
  C2AE 20 6F 63 63   
  C2B2 75 70 65 73   
  C2B6 3D            
                     * LST FCC 'LARGEST='
  C2B7 4C 69 62 72   FRST    FCC    'Libres='
  C2BB 65 73 3D      
  C2BE 43 61 74 61   DIRST   FCC    'Catalogue du lecteur ',4
  C2C2 6C 6F 67 75   
  C2C6 65 20 64 75   
  C2CA 20 6C 65 63   
  C2CE 74 65 75 72   
  C2D2 20 04         
                     * CSTR FCC '    CREATED: '
  C2D4 44 69 73 71   VST     FCC    'Disque: ',4
  C2D8 75 65 3A 20   
  C2DC 04            
  C2DD 20 20 23      NMST    FCC    '  #'
  C2E0 4A 61 6E 46   MNTH    FCC    'JanFevMarAvrMaiJun'
  C2E4 65 76 4D 61   
  C2E8 72 41 76 72   
  C2EC 4D 61 69 4A   
  C2F0 75 6E         
  C2F2 4A 75 69 41           FCC    'JuiAouSepOctNovDec'
  C2F6 6F 75 53 65   
  C2FA 70 4F 63 74   
  C2FE 4E 6F 76 44   
  C302 65 63         
                     
                     **   SCAN PROCESSORS.
                     
                     **   ANM - ASSEMBLE NEXT MATCH STRING.
                     
                     *    EXIT  EQ IF NO MORE STRINGS
                     *          NE IF STRING ASSEMBLED,AND
                     *          (NAME)=MATCH NAME
                     
  C304 AE   4F       ANM     LDX    CM,U      SET SCAN ADDRESS
  C306 BF   CC14             STX    BUFPNT
  C309 A6   84               LDA    0,X       CHECK CHARACTER
  C30B 81   0D               CMPA   #$D
  C30D 27   4B               BEQ    ANM6      IF END OF MATCHES
  C30F B1   CC02             CMPA   EOL
  C312 27   46               BEQ    ANM6      IF END OF MATCHES
  C314 30   C4               LEAX   NAME,U
  C316 31   84               LEAY   0,X
  C318 4F                    CLRA             CLEAR NAME
  C319 5F                    CLRB
  C31A ED   81               STD    0,X++
  C31C ED   81               STD    0,X++
  C31E ED   81               STD    0,X++
  C320 ED   81               STD    0,X++
  C322 ED   81               STD    0,X++
  C324 A7   84               STA    0,X
  C326 C6   08               LDB    #8        SET NAME SIZE
  C328 17   00D3     ANM1    LBSR   ANM9      GET CHARACTER SUBROUTINE
  C32B 25   0A               BCS    ANM2      IF NOT ALPHANUMERIC
  C32D A7   A0               STA    0,Y+      STORE IN NAME
  C32F 5A                    DECB             COUNT CHARACTER
  C330 26   F6               BNE    ANM1      IF NOT END OF NAME
  C332 17   00C9             LBSR   ANM9      GET CHARACTER SUBROUTINE
  C335 24   15               BCC    ANM4      IF TOO LONG
  C337 81   2E       ANM2    CMPA   #'.       CHECK CHARACTER
  C339 26   15               BNE    ANM5      IF END OF MATCH STRING
  C33B 31   48               LEAY   NAME+8,U  SET EXTENSION
  C33D C6   03               LDB    #3        SET LENGTH
  C33F 17   00BC     ANM3    LBSR   ANM9      GET CHARACTER SUBROUTINE
  C342 25   0C               BCS    ANM5      IF END OF MATCH STRING
  C344 A7   A0               STA    0,Y+      STORE IN NAME
  C346 5A                    DECB             COUNT CHARACTER
  C347 26   F6               BNE    ANM3      IF NOT END OF EXTENSION
  C349 17   00B2             LBSR   ANM9      GET CHARACTER SUBROUTINE
  C34C 1024 013F     ANM4    LBCC   SYNERR    IF TOO LONG
  C350 BE   CC14     ANM5    LDX    BUFPNT    SET NEXT ADDRESS
  C353 AF   4F               STX    CM,U
  C355 17   FE4D             LBSR   GROUP     CALL GROUP PROCESSOR
  C358 1C   FB               ANDCC  #$FB      FORCE NE
  C35A 39            ANM6    RTS              RETURN
                     
                     **   FMSC - CALL FMS.
                     
                     *    ENTRY (A)=FUNCTION NUMBER
                     *    EXIT  (CC)=FMS RESPONSE
                     
  C35B 8E   C840     FMSC    LDX    #FCB      SET FCB ADDRESS
  C35E A7   84               STA    0,X       STORE FUNCTION
  C360 7E   D406             JMP    FMS       CALL FMS
                     
                     **   GDE - GET DIRECTORY ENTRY.
                     *
                     *    EXIT  EQ SET IF NO MORE ENTRIES
                     *          NE SET IF ENTRY FOUND, AND
                     *          ENTRY IN FCB
                     
  C363 17   FE85     GDE0    LBSR   SKIP      CALL SKIP PROCESSOR
                     
  C366 86   07       GDE     LDA    #7        GET DIRECTORY ENTRY
  C368 8D   F1               BSR    FMSC
  C36A 26   36               BNE    GDE7      IF ERROR
  C36C 6C   4E               INC    14,U
  C36E 26   02               BNE    GDE99
  C370 6C   4D               INC    13,U
  C372 6D   04       GDE99   TST    4,X       CHECK NAME
  C374 2B   F0               BMI    GDE
  C376 27   29               BEQ    GDE6      IF END OF DIRECTORY
  C378 6D   4B       GDE16   TST    AF,U      CHECK "ALL FILES"
  C37A 26   23               BNE    GDE5      IF PROCESSING ALL
  C37C 30   04               LEAX   4,X
  C37E 31   C4               LEAY   NAME,U
  C380 C6   08               LDB    #8
  C382 A6   A0       GDE2    LDA    0,Y+      GET MATCH CHARACTER
  C384 27   07               BEQ    GDE3      IF END OF NAME PART
  C386 A1   80               CMPA   0,X+      CHECK AGAINST ENTRY
  C388 26   D9               BNE    GDE0      IF NO MATCH
  C38A 5A                    DECB             COUNT CHARACTER
  C38B 26   F5               BNE    GDE2      LOOP THROUGH NAME
  C38D 8E   C84C     GDE3    LDX    #FCB+12   CHECK EXTENSION
  C390 31   48               LEAY   NAME+8,U
  C392 C6   03               LDB    #3
  C394 A6   A0       GDE4    LDA    0,Y+      GET EXTENSION MATCH
  C396 27   07               BEQ    GDE5      IF MATCH
  C398 A1   80               CMPA   0,X+      CHECK AGAINST ENTRY
  C39A 26   C7               BNE    GDE0      IF NO MATCH
  C39C 5A                    DECB             COUNT CHARACTER
  C39D 26   F5               BNE    GDE4      IF NOT END OF EXTENSION
  C39F 1C   FB       GDE5    ANDCC  #$FB      SET "NE"
  C3A1 39            GDE6    RTS
                     
                     *    CHECK ERROR.
                     
  C3A2 A6   01       GDE7    LDA    1,X       CHECK ERROR NUMBER
  C3A4 81   08               CMPA   #8
  C3A6 1026 00EC             LBNE   FILERR    IF NOT END OF DIRECTORY
  C3AA 39                    RTS              RETURN EQ SET
                     
                     **   GNC - GET NEXT CHARACTER.
                     
                     *    ENTRY (X)=BUFFER POINTER
                     *    EXIT  (X) ADVANCED
                     *          (A)=CHARACTER
                     *          EQ SET IF END OF COMMAND
                     
  C3AB A6   80       GNC     LDA    0,X+      GET CHARACTER
  C3AD 81   0D               CMPA   #$D
  C3AF 27   03               BEQ    GNC1      IF END OF COMMAND
  C3B1 B1   CC02             CMPA   EOL
  C3B4 39            GNC1    RTS
                     
                     **   SCAN INITIALIZE.
                     
                     *    EXIT  (DP)=DRIVE POINTER
                     *          (MA)=MATCH POINTER
                     *          (EC)=END OF COMMAND ADDRESS
                     *          (DS) <> 0 IF SCANNING DRIVES
                     *          (AF) <> 0 IF PROCESSING ALL FILES
                     *          (WD) <> 0 IF USING WORK DRIVE
                     *          (DC) = 0
                     
  C3B5 4F            INIT    CLRA             CLEAR FLAGS
  C3B6 A7   C8 12            STA    DS,U
  C3B9 A7   4B               STA    AF,U
  C3BB A7   C8 11            STA    WD,U
  C3BE A7   4C               STA    DC,U
  C3C0 BE   CC14             LDX    BUFPNT    INITIALIZE POINTERS
  C3C3 AF   C8 13            STX    DP,U      DRIVE POINTER
  C3C6 AF   C8 15            STX    MA,U      MATCH POINTER
  C3C9 AF   C8 17            STX    EC,U      END OF COMMAND
                     
                     *    LOOK FOR END OF DRIVE LIST
                     
  C3CC 8D   DD       INIT1   BSR    GNC       GET NEXT CHARACTER
  C3CE 27   0D               BEQ    INIT2     IF END OF COMMAND
  C3D0 81   2E               CMPA   #'.       CHECK CHARACTER
  C3D2 27   09               BEQ    INIT2     IF END OF DRIVE LIST
  C3D4 BD   CD21             JSR    CLASS     CLASSIFY CHARACTER
  C3D7 25   F3               BCS    INIT1     IF SEPARATOR
  C3D9 81   39               CMPA   #'9
  C3DB 23   EF               BLS    INIT1     IF NUMBER
  C3DD 30   1F       INIT2   LEAX   -1,X      INDICATE MATCH LIST
  C3DF AF   C8 15            STX    MA,U
                     
                     *    LOOK FOR END OF MATCH LIST.
                     
  C3E2 8D   C7       INIT3   BSR    GNC       GET NEXT CHARACTER
  C3E4 26   FC               BNE    INIT3     IF NOT END OF COMMAND
                     
                     
                     *   CHECK LISTS FOR EXITENCE
                     
  C3E6 30   1F       INIT4   LEAX   -1,X      SET END OF COMMAND
  C3E8 AF   C8 17            STX    EC,U
  C3EB AC   C8 15            CMPX   MA,U      CHECK MATCH ADDRESS
  C3EE 26   02               BNE    INIT5     IF LIST EXISTS
  C3F0 6C   4B               INC    AF,U      INDICATE "ALL FILES"
  C3F2 AE   C8 15    INIT5   LDX    MA,U      CHECK DRIVE LIST
  C3F5 AC   C8 13            CMPX   DP,U
  C3F8 26   03               BNE    INIT6     IF DRIVE LIST EXISTS
  C3FA 6C   C8 11            INC    WD,U      INDICATE WORK DRIVE
  C3FD 39            INIT6   RTS              RETURN 
                     
  C3FE BD   CD27     ANM9    JSR    NXTCH     GET CHARACTER
  C401 24   0A               BCC    ANM10     EXIT
  C403 81   2D               CMPA   #$2D      CHECK CHAR '-'
  C405 27   06               BEQ    ANM10     EXIT
  C407 81   5F               CMPA   #$5F      CHECK CHAR '_'
  C409 27   02               BEQ    ANM10     EXIT
  C40B 1A   01               ORCC   #1
  C40D 39            ANM10   RTS              EXIT
                     
                     **   PDR - PROCESS DRIVE.
                     
                     *    ENTRY DRIVE NUMBER SET IN FCB
                     
  C40E AE   C8 15    PDR     LDX    MA,U      INITIALIZE MATCH ADDRESS
  C411 AF   4F               STX    CM,U
  C413 17   FD04             LBSR   DRIVE     CALL USER DRIVE ROUTINE
  C416 6D   4B               TST    AF,U
  C418 27   05               BEQ    PDR1      IF NOT PROCESSING ALL FILES
  C41A 17   FD88             LBSR   GROUP     CALL GROUP PROCESSOR
  C41D 20   05               BRA    PDR2      PROCESS DIRECTORY
                     
  C41F 17   FEE2     PDR1    LBSR   ANM       ASSEMBLE NEXT MATCH
  C422 27   19               BEQ    PDR5      IF NO MORE MATCHES
                     
                     *    OPEN DIRECTORY.
                     
  C424 86   06       PDR2    LDA    #6        OPEN DIRECTORY
  C426 17   FF32             LBSR   FMSC
  C429 26   6B               BNE    FILERR    IF ERROR
  C42B 6F   4D               CLR    CT,U      CLEAR ENTRY COUNTER
  C42D 6F   4E               CLR    CT+1,U
                     
  C42F 17   FF34     PDR3    LBSR   GDE       GET DIRECTORY ENTRY
  C432 27   05               BEQ    PDR4      IF NO MORE ENTRIES
                     
                     *  MATCH FOUND, CALL PROCESSOR
                     
  C434 17   FD79             LBSR   MATCH     CALL USER ENTRY PROCESS
                     
  C437 20   F6               BRA    PDR3      GET NEXT ENTRY
                     
                     *    END OF DIRECTORY ENCOUNTERED.
                     
  C439 6D   4B       PDR4    TST    AF,U      CHECK "ALL"
  C43B 27   E2               BEQ    PDR1      IF NOT PROCESSING ALL
  C43D 39            PDR5    RTS              RETURN
                     
                     **   SEL - SELECT NEXT DRIVE.
                     
                     *    EXIT  CS IF NO NEXT DRIVE
                     *          CC IF NEXT DRIVE, AND
                     *          DRIVE NUMBER SET IN FCB
                     *          (DC) INCREMENTED
                     
  C43E 6D   4C       SEL     TST    DC,U      CHECK DIRECTORY COUNT
  C440 26   12               BNE    SEL0      NOT FIRST TIME
  C442 6D   C8 11            TST    WD,U
  C445 27   1E               BEQ    SEL2      IF DRIVE SPECIFIED
  C447 B6   CC0C             LDA    WASN      SET WORK DRIVE
  C44A B7   C843             STA    FCB+3
  C44D 2A   33               BPL    SEL3      IF NOT "ALL"
  C44F 6C   C8 12            INC    DS,U      INDICATE "ALL"
  C452 20   03               BRA    SEL1
                     
  C454 17   FD25     SEL0    LBSR   DRVEND    END OF DRIVE CALL
  C457 6D   C8 12    SEL1    TST    DS,U      CHECK SCAN
  C45A 27   09               BEQ    SEL2      IF NOT SCANNING
                     
                     *    SCANNING, SELECT NEXT DRIVE.
                     
  C45C 86   14               LDA    #20       SELECT NEXT DRIVE
  C45E 17   FEFA             LBSR   FMSC
  C461 26   23               BNE    SEL4      IF NO MORE DRIVES
  C463 20   1D               BRA    SEL3      INDICATE FOUND
                     
                     *    NOT SCANNING, ASSEMBLE DRIVE NUMBER
                     
  C465 AE   C8 13    SEL2    LDX    DP,U      CHECK DRIVE POINTER
  C468 AC   C8 15            CMPX   MA,U
  C46B 27   19               BEQ    SEL4      IF ALL DRIVES PROCESSED
  C46D BF   CC14             STX    BUFPNT
  C470 BD   CD42             JSR    GETHEX    ASSEMBLE DRIVE NUMBER
  C473 25   1A               BCS    SYNERR    IF ERROR IN ASSEMBLY
  C475 1F   10               TFR    X,D       MASK AND SET DRIVE
  C477 C4   03               ANDB   #3
  C479 F7   C843             STB    FCB+3
  C47C BE   CC14             LDX    BUFPNT    UPDATE DRIVE POINTER
  C47F AF   C8 13            STX    DP,U
  C482 6C   4C       SEL3    INC    DC,U      COUNT DRIVE
  C484 4F                    CLRA             CLEAR CARRY
  C485 39                    RTS              RETURN
                     
                     *    ALL DRIVES PROCESSED.
                     
  C486 AE   C8 17    SEL4    LDX    EC,U      SET BUFFER POINTER
  C489 BF   CC14             STX    BUFPNT
  C48C 1A   01               ORCC   #1        SET CARRY
  C48E 39                    RTS              RETURN
                     
                     *  PROCESS SYNTAX ERROR
                     
  C48F 8E   C840     SYNERR  LDX    #FCB      SET "COMMAND ERROR"
  C492 86   1A               LDA    #26
  C494 A7   01               STA    1,X
  C496 BD   CD3F     FILERR  JSR    RPTERR    REPORT ERROR
  C499 7E   CD03             JMP    WARMS     RETURN TO SYSTEM
                     * END SCANPROC
                     
                             END    DIR

0 ERROR(S) DETECTED

SYMBOL TABLE:

AF     000B   ANM    C304   ANM1   C328   ANM10  C40D   ANM2   C337   
ANM3   C33F   ANM4   C34C   ANM5   C350   ANM6   C35A   ANM9   C3FE   
BUFPNT CC14   CLASS  CD21   CM     000F   CT     000D   DC     000C   
DIR    C100   DIR0   C102   DIR1   C10A   DIR2   C114   DIRST  C2BE   
DP     0013   DRIVE  C11A   DRIVE1 C12D   DRVEND C17C   DS     0012   
EC     0017   EOL    CC02   FCB    C840   FILERR C496   FMS    D406   
FMSC   C35B   FRST   C2B7   FTOT   001F   GDE    C366   GDE0   C363   
GDE16  C378   GDE2   C382   GDE3   C38D   GDE4   C394   GDE5   C39F   
GDE6   C3A1   GDE7   C3A2   GDE99  C372   GETHEX CD42   GNC    C3AB   
GNC1   C3B4   GROUP  C1A5   HDR    C283   INIT   C3B5   INIT1  C3CC   
INIT2  C3DD   INIT3  C3E2   INIT4  C3E6   INIT5  C3F2   INIT6  C3FD   
INT0   C107   LARG   001B   LEFT   001D   LINBUF C080   MA     0015   
MATCH  C1B0   MNTH   C2E0   NAME   0000   NMST   C2DD   NXTCH  CD27   
OUT2SP C206   OUTCOM C26D   OUTD   C230   OUTD2  C23A   OUTDA1 C25B   
OUTDA2 C257   OUTDAT C242   OUTDEC CD39   OUTHEX CD3C   OUTM   C274   
OUTPNT C279   OUTPR  C227   OUTPR2 C22D   OUTSP  C208   PCRLF  CD24   
PDC    C21A   PDC2   C225   PDR    C40E   PDR1   C41F   PDR2   C424   
PDR3   C42F   PDR4   C439   PDR5   C43D   PRNAM  C20D   PRNAM3 C213   
PSTRNG CD1E   PUTCHR CD18   RPTERR CD3F   SECS   0019   SEL    C43E   
SEL0   C454   SEL1   C457   SEL2   C465   SEL3   C482   SEL4   C486   
SKIP   C1EB   SKIP1  C1F7   SKIP2  C205   SST    C2A6   SYNERR C48F   
VARLEN 0021   VST    C2D4   WARMS  CD03   WASN   CC0C   WD     0011   
Y2K    C26B   




