
                     * 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
                     
                     **   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   02A5     INT0    LBSR   INIT      INITIALIZE
                     
  C10A 17   032B     DIR1    LBSR   SEL       SELECT NEXT DRIVE
  C10D 25   05               BCS    DIR2      IF END OF DRIVES
  C10F 17   02F6             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   0228             LBSR   FMSC
  C12D 1026 035F     DRIVE1  LBNE   FILERR    IF ERROR
  C131 86   07               LDA    #7        GET SIR
  C133 17   021F             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 0176          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 0177          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 0171          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 0105          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 011A          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   00D3             LBSR   OUTCOM    PRINT COMMA
  C194 30   8D 0119          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   26               BSR    OUTM      "-"
  C248 30   8D 008E          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   0B               BSR    OUTM      "-"
  C263 A6   22               LDA    2,Y       GET YEAR
  C265 20   C9               BRA    OUTD      PRINT IT
                     
                     **   OUTCOM - PRINT COMMAND AND SPACE
                     
  C267 86   2C       OUTCOM  LDA    #',       PRINT COMMA
  C269 BD   CD18             JSR    PUTCHR
  C26C 20   9A               BRA    OUTSP     PRINT SPACE
                     
                     **   PRINT MINUS SIGN.
                     
  C26E 86   2D       OUTM    LDA    #'-       SETUP '-'
  C270 7E   CD18             JMP    PUTCHR    PRINT IT
                     
                     **   PRINT DISK ADDRESS.
                     
  C273 BD   CD3C     OUTPNT  JSR    OUTHEX    OUTPUT DIGIT
  C276 8D   F6               BSR    OUTM      PRINT '-'
  C278 30   01               LEAX   1,X
  C27A 7E   CD3C             JMP    OUTHEX    PRINT REST
                     
                     **   STRINGS
                     
  C27D 4E 6F 6D 20   HDR     FCC    'Nom     Type Taille    '
  C281 20 20 20 20   
  C285 54 79 70 65   
  C289 20 54 61 69   
  C28D 6C 6C 65 20   
  C291 20 20 20      
  C294 44 61 74 65           FCC    'Date    Prt',4
  C298 20 20 20 20   
  C29C 50 72 74 04   
                     * FST FCC '    FILES=',4
  C2A0 53 65 63 74   SST     FCC    'Secteurs occupes='
  C2A4 65 75 72 73   
  C2A8 20 6F 63 63   
  C2AC 75 70 65 73   
  C2B0 3D            
                     * LST FCC 'LARGEST='
  C2B1 4C 69 62 72   FRST    FCC    'Libres='
  C2B5 65 73 3D      
  C2B8 43 61 74 61   DIRST   FCC    'Catalogue du lecteur ',4
  C2BC 6C 6F 67 75   
  C2C0 65 20 64 75   
  C2C4 20 6C 65 63   
  C2C8 74 65 75 72   
  C2CC 20 04         
                     * CSTR FCC '    CREATED: '
  C2CE 44 69 73 71   VST     FCC    'Disque: ',4
  C2D2 75 65 3A 20   
  C2D6 04            
  C2D7 20 20 23      NMST    FCC    '  #'
  C2DA 4A 61 6E 46   MNTH    FCC    'JanFevMarAvrMaiJun'
  C2DE 65 76 4D 61   
  C2E2 72 41 76 72   
  C2E6 4D 61 69 4A   
  C2EA 75 6E         
  C2EC 4A 75 69 41           FCC    'JuiAouSepOctNovDec'
  C2F0 6F 75 53 65   
  C2F4 70 4F 63 74   
  C2F8 4E 6F 76 44   
  C2FC 65 63         
                     
                     **   SCAN PROCESSORS.
                     
                     **   ANM - ASSEMBLE NEXT MATCH STRING.
                     
                     *    EXIT  EQ IF NO MORE STRINGS
                     *          NE IF STRING ASSEMBLED,AND
                     *          (NAME)=MATCH NAME
                     
  C2FE AE   4F       ANM     LDX    CM,U      SET SCAN ADDRESS
  C300 BF   CC14             STX    BUFPNT
  C303 A6   84               LDA    0,X       CHECK CHARACTER
  C305 81   0D               CMPA   #$D
  C307 27   4B               BEQ    ANM6      IF END OF MATCHES
  C309 B1   CC02             CMPA   EOL
  C30C 27   46               BEQ    ANM6      IF END OF MATCHES
  C30E 30   C4               LEAX   NAME,U
  C310 31   84               LEAY   0,X
  C312 4F                    CLRA             CLEAR NAME
  C313 5F                    CLRB
  C314 ED   81               STD    0,X++
  C316 ED   81               STD    0,X++
  C318 ED   81               STD    0,X++
  C31A ED   81               STD    0,X++
  C31C ED   81               STD    0,X++
  C31E A7   84               STA    0,X
  C320 C6   08               LDB    #8        SET NAME SIZE
  C322 17   00D3     ANM1    LBSR   ANM9      GET CHARACTER SUBROUTINE
  C325 25   0A               BCS    ANM2      IF NOT ALPHANUMERIC
  C327 A7   A0               STA    0,Y+      STORE IN NAME
  C329 5A                    DECB             COUNT CHARACTER
  C32A 26   F6               BNE    ANM1      IF NOT END OF NAME
  C32C 17   00C9             LBSR   ANM9      GET CHARACTER SUBROUTINE
  C32F 24   15               BCC    ANM4      IF TOO LONG
  C331 81   2E       ANM2    CMPA   #'.       CHECK CHARACTER
  C333 26   15               BNE    ANM5      IF END OF MATCH STRING
  C335 31   48               LEAY   NAME+8,U  SET EXTENSION
  C337 C6   03               LDB    #3        SET LENGTH
  C339 17   00BC     ANM3    LBSR   ANM9      GET CHARACTER SUBROUTINE
  C33C 25   0C               BCS    ANM5      IF END OF MATCH STRING
  C33E A7   A0               STA    0,Y+      STORE IN NAME
  C340 5A                    DECB             COUNT CHARACTER
  C341 26   F6               BNE    ANM3      IF NOT END OF EXTENSION
  C343 17   00B2             LBSR   ANM9      GET CHARACTER SUBROUTINE
  C346 1024 013F     ANM4    LBCC   SYNERR    IF TOO LONG
  C34A BE   CC14     ANM5    LDX    BUFPNT    SET NEXT ADDRESS
  C34D AF   4F               STX    CM,U
  C34F 17   FE53             LBSR   GROUP     CALL GROUP PROCESSOR
  C352 1C   FB               ANDCC  #$FB      FORCE NE
  C354 39            ANM6    RTS              RETURN
                     
                     **   FMSC - CALL FMS.
                     
                     *    ENTRY (A)=FUNCTION NUMBER
                     *    EXIT  (CC)=FMS RESPONSE
                     
  C355 8E   C840     FMSC    LDX    #FCB      SET FCB ADDRESS
  C358 A7   84               STA    0,X       STORE FUNCTION
  C35A 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
                     
  C35D 17   FE8B     GDE0    LBSR   SKIP      CALL SKIP PROCESSOR
                     
  C360 86   07       GDE     LDA    #7        GET DIRECTORY ENTRY
  C362 8D   F1               BSR    FMSC
  C364 26   36               BNE    GDE7      IF ERROR
  C366 6C   4E               INC    14,U
  C368 26   02               BNE    GDE99
  C36A 6C   4D               INC    13,U
  C36C 6D   04       GDE99   TST    4,X       CHECK NAME
  C36E 2B   F0               BMI    GDE
  C370 27   29               BEQ    GDE6      IF END OF DIRECTORY
  C372 6D   4B       GDE16   TST    AF,U      CHECK "ALL FILES"
  C374 26   23               BNE    GDE5      IF PROCESSING ALL
  C376 30   04               LEAX   4,X
  C378 31   C4               LEAY   NAME,U
  C37A C6   08               LDB    #8
  C37C A6   A0       GDE2    LDA    0,Y+      GET MATCH CHARACTER
  C37E 27   07               BEQ    GDE3      IF END OF NAME PART
  C380 A1   80               CMPA   0,X+      CHECK AGAINST ENTRY
  C382 26   D9               BNE    GDE0      IF NO MATCH
  C384 5A                    DECB             COUNT CHARACTER
  C385 26   F5               BNE    GDE2      LOOP THROUGH NAME
  C387 8E   C84C     GDE3    LDX    #FCB+12   CHECK EXTENSION
  C38A 31   48               LEAY   NAME+8,U
  C38C C6   03               LDB    #3
  C38E A6   A0       GDE4    LDA    0,Y+      GET EXTENSION MATCH
  C390 27   07               BEQ    GDE5      IF MATCH
  C392 A1   80               CMPA   0,X+      CHECK AGAINST ENTRY
  C394 26   C7               BNE    GDE0      IF NO MATCH
  C396 5A                    DECB             COUNT CHARACTER
  C397 26   F5               BNE    GDE4      IF NOT END OF EXTENSION
  C399 1C   FB       GDE5    ANDCC  #$FB      SET "NE"
  C39B 39            GDE6    RTS
                     
                     *    CHECK ERROR.
                     
  C39C A6   01       GDE7    LDA    1,X       CHECK ERROR NUMBER
  C39E 81   08               CMPA   #8
  C3A0 1026 00EC             LBNE   FILERR    IF NOT END OF DIRECTORY
  C3A4 39                    RTS              RETURN EQ SET
                     
                     **   GNC - GET NEXT CHARACTER.
                     
                     *    ENTRY (X)=BUFFER POINTER
                     *    EXIT  (X) ADVANCED
                     *          (A)=CHARACTER
                     *          EQ SET IF END OF COMMAND
                     
  C3A5 A6   80       GNC     LDA    0,X+      GET CHARACTER
  C3A7 81   0D               CMPA   #$D
  C3A9 27   03               BEQ    GNC1      IF END OF COMMAND
  C3AB B1   CC02             CMPA   EOL
  C3AE 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
                     
  C3AF 4F            INIT    CLRA             CLEAR FLAGS
  C3B0 A7   C8 12            STA    DS,U
  C3B3 A7   4B               STA    AF,U
  C3B5 A7   C8 11            STA    WD,U
  C3B8 A7   4C               STA    DC,U
  C3BA BE   CC14             LDX    BUFPNT    INITIALIZE POINTERS
  C3BD AF   C8 13            STX    DP,U      DRIVE POINTER
  C3C0 AF   C8 15            STX    MA,U      MATCH POINTER
  C3C3 AF   C8 17            STX    EC,U      END OF COMMAND
                     
                     *    LOOK FOR END OF DRIVE LIST
                     
  C3C6 8D   DD       INIT1   BSR    GNC       GET NEXT CHARACTER
  C3C8 27   0D               BEQ    INIT2     IF END OF COMMAND
  C3CA 81   2E               CMPA   #'.       CHECK CHARACTER
  C3CC 27   09               BEQ    INIT2     IF END OF DRIVE LIST
  C3CE BD   CD21             JSR    CLASS     CLASSIFY CHARACTER
  C3D1 25   F3               BCS    INIT1     IF SEPARATOR
  C3D3 81   39               CMPA   #'9
  C3D5 23   EF               BLS    INIT1     IF NUMBER
  C3D7 30   1F       INIT2   LEAX   -1,X      INDICATE MATCH LIST
  C3D9 AF   C8 15            STX    MA,U
                     
                     *    LOOK FOR END OF MATCH LIST.
                     
  C3DC 8D   C7       INIT3   BSR    GNC       GET NEXT CHARACTER
  C3DE 26   FC               BNE    INIT3     IF NOT END OF COMMAND
                     
                     
                     *   CHECK LISTS FOR EXITENCE
                     
  C3E0 30   1F       INIT4   LEAX   -1,X      SET END OF COMMAND
  C3E2 AF   C8 17            STX    EC,U
  C3E5 AC   C8 15            CMPX   MA,U      CHECK MATCH ADDRESS
  C3E8 26   02               BNE    INIT5     IF LIST EXISTS
  C3EA 6C   4B               INC    AF,U      INDICATE "ALL FILES"
  C3EC AE   C8 15    INIT5   LDX    MA,U      CHECK DRIVE LIST
  C3EF AC   C8 13            CMPX   DP,U
  C3F2 26   03               BNE    INIT6     IF DRIVE LIST EXISTS
  C3F4 6C   C8 11            INC    WD,U      INDICATE WORK DRIVE
  C3F7 39            INIT6   RTS              RETURN 
                     
  C3F8 BD   CD27     ANM9    JSR    NXTCH     GET CHARACTER
  C3FB 24   0A               BCC    ANM10     EXIT
  C3FD 81   2D               CMPA   #$2D      CHECK CHAR '-'
  C3FF 27   06               BEQ    ANM10     EXIT
  C401 81   5F               CMPA   #$5F      CHECK CHAR '_'
  C403 27   02               BEQ    ANM10     EXIT
  C405 1A   01               ORCC   #1
  C407 39            ANM10   RTS              EXIT
                     
                     **   PDR - PROCESS DRIVE.
                     
                     *    ENTRY DRIVE NUMBER SET IN FCB
                     
  C408 AE   C8 15    PDR     LDX    MA,U      INITIALIZE MATCH ADDRESS
  C40B AF   4F               STX    CM,U
  C40D 17   FD0A             LBSR   DRIVE     CALL USER DRIVE ROUTINE
  C410 6D   4B               TST    AF,U
  C412 27   05               BEQ    PDR1      IF NOT PROCESSING ALL FILES
  C414 17   FD8E             LBSR   GROUP     CALL GROUP PROCESSOR
  C417 20   05               BRA    PDR2      PROCESS DIRECTORY
                     
  C419 17   FEE2     PDR1    LBSR   ANM       ASSEMBLE NEXT MATCH
  C41C 27   19               BEQ    PDR5      IF NO MORE MATCHES
                     
                     *    OPEN DIRECTORY.
                     
  C41E 86   06       PDR2    LDA    #6        OPEN DIRECTORY
  C420 17   FF32             LBSR   FMSC
  C423 26   6B               BNE    FILERR    IF ERROR
  C425 6F   4D               CLR    CT,U      CLEAR ENTRY COUNTER
  C427 6F   4E               CLR    CT+1,U
                     
  C429 17   FF34     PDR3    LBSR   GDE       GET DIRECTORY ENTRY
  C42C 27   05               BEQ    PDR4      IF NO MORE ENTRIES
                     
                     *  MATCH FOUND, CALL PROCESSOR
                     
  C42E 17   FD7F             LBSR   MATCH     CALL USER ENTRY PROCESS
                     
  C431 20   F6               BRA    PDR3      GET NEXT ENTRY
                     
                     *    END OF DIRECTORY ENCOUNTERED.
                     
  C433 6D   4B       PDR4    TST    AF,U      CHECK "ALL"
  C435 27   E2               BEQ    PDR1      IF NOT PROCESSING ALL
  C437 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
                     
  C438 6D   4C       SEL     TST    DC,U      CHECK DIRECTORY COUNT
  C43A 26   12               BNE    SEL0      NOT FIRST TIME
  C43C 6D   C8 11            TST    WD,U
  C43F 27   1E               BEQ    SEL2      IF DRIVE SPECIFIED
  C441 B6   CC0C             LDA    WASN      SET WORK DRIVE
  C444 B7   C843             STA    FCB+3
  C447 2A   33               BPL    SEL3      IF NOT "ALL"
  C449 6C   C8 12            INC    DS,U      INDICATE "ALL"
  C44C 20   03               BRA    SEL1
                     
  C44E 17   FD2B     SEL0    LBSR   DRVEND    END OF DRIVE CALL
  C451 6D   C8 12    SEL1    TST    DS,U      CHECK SCAN
  C454 27   09               BEQ    SEL2      IF NOT SCANNING
                     
                     *    SCANNING, SELECT NEXT DRIVE.
                     
  C456 86   14               LDA    #20       SELECT NEXT DRIVE
  C458 17   FEFA             LBSR   FMSC
  C45B 26   23               BNE    SEL4      IF NO MORE DRIVES
  C45D 20   1D               BRA    SEL3      INDICATE FOUND
                     
                     *    NOT SCANNING, ASSEMBLE DRIVE NUMBER
                     
  C45F AE   C8 13    SEL2    LDX    DP,U      CHECK DRIVE POINTER
  C462 AC   C8 15            CMPX   MA,U
  C465 27   19               BEQ    SEL4      IF ALL DRIVES PROCESSED
  C467 BF   CC14             STX    BUFPNT
  C46A BD   CD42             JSR    GETHEX    ASSEMBLE DRIVE NUMBER
  C46D 25   1A               BCS    SYNERR    IF ERROR IN ASSEMBLY
  C46F 1F   10               TFR    X,D       MASK AND SET DRIVE
  C471 C4   03               ANDB   #3
  C473 F7   C843             STB    FCB+3
  C476 BE   CC14             LDX    BUFPNT    UPDATE DRIVE POINTER
  C479 AF   C8 13            STX    DP,U
  C47C 6C   4C       SEL3    INC    DC,U      COUNT DRIVE
  C47E 4F                    CLRA             CLEAR CARRY
  C47F 39                    RTS              RETURN
                     
                     *    ALL DRIVES PROCESSED.
                     
  C480 AE   C8 17    SEL4    LDX    EC,U      SET BUFFER POINTER
  C483 BF   CC14             STX    BUFPNT
  C486 1A   01               ORCC   #1        SET CARRY
  C488 39                    RTS              RETURN
                     
                     *  PROCESS SYNTAX ERROR
                     
  C489 8E   C840     SYNERR  LDX    #FCB      SET "COMMAND ERROR"
  C48C 86   1A               LDA    #26
  C48E A7   01               STA    1,X
  C490 BD   CD3F     FILERR  JSR    RPTERR    REPORT ERROR
  C493 7E   CD03             JMP    WARMS     RETURN TO SYSTEM
                     * END SCANPROC
                     
                             END    DIR

0 ERROR(S) DETECTED

SYMBOL TABLE:

AF     000B   ANM    C2FE   ANM1   C322   ANM10  C407   ANM2   C331   
ANM3   C339   ANM4   C346   ANM5   C34A   ANM6   C354   ANM9   C3F8   
BUFPNT CC14   CLASS  CD21   CM     000F   CT     000D   DC     000C   
DIR    C100   DIR0   C102   DIR1   C10A   DIR2   C114   DIRST  C2B8   
DP     0013   DRIVE  C11A   DRIVE1 C12D   DRVEND C17C   DS     0012   
EC     0017   EOL    CC02   FCB    C840   FILERR C490   FMS    D406   
FMSC   C355   FRST   C2B1   FTOT   001F   GDE    C360   GDE0   C35D   
GDE16  C372   GDE2   C37C   GDE3   C387   GDE4   C38E   GDE5   C399   
GDE6   C39B   GDE7   C39C   GDE99  C36C   GETHEX CD42   GNC    C3A5   
GNC1   C3AE   GROUP  C1A5   HDR    C27D   INIT   C3AF   INIT1  C3C6   
INIT2  C3D7   INIT3  C3DC   INIT4  C3E0   INIT5  C3EC   INIT6  C3F7   
INT0   C107   LARG   001B   LEFT   001D   LINBUF C080   MA     0015   
MATCH  C1B0   MNTH   C2DA   NAME   0000   NMST   C2D7   NXTCH  CD27   
OUT2SP C206   OUTCOM C267   OUTD   C230   OUTD2  C23A   OUTDA1 C25B   
OUTDA2 C257   OUTDAT C242   OUTDEC CD39   OUTHEX CD3C   OUTM   C26E   
OUTPNT C273   OUTPR  C227   OUTPR2 C22D   OUTSP  C208   PCRLF  CD24   
PDC    C21A   PDC2   C225   PDR    C408   PDR1   C419   PDR2   C41E   
PDR3   C429   PDR4   C433   PDR5   C437   PRNAM  C20D   PRNAM3 C213   
PSTRNG CD1E   PUTCHR CD18   RPTERR CD3F   SECS   0019   SEL    C438   
SEL0   C44E   SEL1   C451   SEL2   C45F   SEL3   C47C   SEL4   C480   
SKIP   C1EB   SKIP1  C1F7   SKIP2  C205   SST    C2A0   SYNERR C489   
VARLEN 0021   VST    C2CE   WARMS  CD03   WASN   CC0C   WD     0011   





