NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF BIN/WC *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/MLI.I .INB INC/MLI.E.I *-------------------------------------- X.ENTER.SUBDIR .EQ 0 X.COPY.TO.DEST .EQ 0 X.DELETE.SOURCE .EQ 0 *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPFileName .BS 2 ZPFileStat .BS 2 ZPFullPath .BS 2 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize .DA #64 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table *-------------------------------------- .1 .DA CS.INIT .DA CS.RUN .DA CS.DOEVENT .DA CS.QUIT L.MSG.USAGE .DA MSG.USAGE L.MSG.DIR .DA MSG.DIR L.MSG.FILE .DA MSG.FILE L.MSG.OK .DA MSG.OK L.MSG.ERR .DA MSG.ERR .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN >INC.G ArgIndex >SYSCALL ArgV bcs .8 >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .4 ldy #1 lda (ZPPtr1),y ldx OptionList .2 cmp OptionList,x beq .3 dex bne .2 .9 >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL printf lda #E.SYN sec .99 rts .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra CS.RUN *-------------------------------------- .4 >LDA.G hSrcBasePath bne .9 >LDYA ZPPtr1 jsr InitSrcDirYA bcc CS.RUN rts .8 >LDA.G hSrcBasePath beq .9 >LDYAI 256 >SYSCALL getmem bcs .99 >STYA ZPFullPath txa >STA.G hSrcFullPath *-------------------------------------- CS.RUN.LOOP ldy #S.PS.hStdIn lda (pPS),y >SYSCALL feof bcs .99 tay bne .10 >SYSCALL GetChar bcs .99 cmp #$03 Ctrl-C beq .99 Abort.... cmp #$13 Ctrl-S bne .10 >LDA.G bPause eor #$ff sta (pData),y bne CS.RUN.LOOP .10 >LDA.G bPause bne CS.RUN.LOOP Pause... jsr GetEntry bcs .9 ldy #S.STAT.P.DRIVE lda (ZPFileStat),y ProDOS Device ? bne .5 jsr CS.RUN.DEV bcc CS.RUN.LOOP rts .5 ldy #S.STAT.P.TYPE lda (ZPFileStat),y cmp #$0F Directory ? bne .6 jsr CS.RUN.DIR bcc CS.RUN.LOOP rts .6 jsr CS.RUN.FILE bcc CS.RUN.LOOP rts .9 jsr LeaveSubDir bcs .90 jsr BasePath.. .8 jsr GetNextEntry jmp CS.RUN.LOOP .90 lda #0 sec .99 rts *-------------------------------------- CS.RUN.DIR jsr CS.RUN.GetFilePath >PUSHW ZPFullPath >PUSHBI 2 >LDYA L.MSG.DIR >SYSCALL printf bcs .9 .8 jsr GetNextEntry clc .9 rts *-------------------------------------- CS.RUN.DEV .8 jsr GetNextEntry clc .9 rts *-------------------------------------- CS.RUN.FILE jsr FilterMatch bcs .8 no match, skip.... jsr CS.RUN.GetFilePath >PUSHW ZPFullPath >PUSHBI 2 >LDYA L.MSG.FILE >SYSCALL printf bcs .9 jsr CS.RUN.CheckErr >LDA.G bRecurse bpl .8 lda (ZPFileName) cmp #'.' beq .8 >LDYA ZPFileName jsr EnterSubDirYA rts .8 jsr GetNextEntry clc .9 rts *-------------------------------------- CS.RUN.CheckErr bcs .1 >LDYA L.MSG.OK >SYSCALL puts rts .1 pha >PUSHA >PUSHBI 1 >LDYA L.MSG.ERR >SYSCALL printf >LDA.G bContinue eor #$80 asl pla rts *-------------------------------------- CS.RUN.GetFilePath >LDA.G hSrcBasePath >SYSCALL GetMemPtr >PUSHYA >LDYA ZPFullPath >SYSCALL StrCpy >PUSHW ZPFileName >LDYA ZPFullPath >SYSCALL StrCat rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr LeaveSubDir bcc CS.QUIT >LDA.G hFilter beq .1 >SYSCALL FreeMem .1 >LDA.G hSrcFullPath beq .8 >SYSCALL FreeMem .8 clc rts *-------------------------------------- .INB USR/SRC/BIN/X.FILEENUM.S *-------------------------------------- CS.END *-------------------------------------- OptionList >PSTR "CRMLWcrmlw" OptionVars .DA #bContinue,#bRecurse,#bChar,#bLine,#bWord .DA #bContinue,#bRecurse,#bChar,#bLine,#bWord *-------------------------------------- MSG.USAGE .AS "Usage : PAK Archive [File *,? wildcards allowed]\r\n" .AS " -C : Continue on error\r\n" .AS " -R : Recurse subdirectories\r\n" .AS " -M : Print the CHAR counts\r\n" .AS " -L : Print the LINE counts\r\n" .AZ " -W : Print the WORD counts\r\n" MSG.OK .AZ "[OK]" MSG.ERR .AZ "[%h]\r\n" MSG.DIR .AZ "Adding Dir :%S..." MSG.FILE .AZ "Adding File:%S..." *-------------------------------------- .DUMMY .OR 0 DS.START ArgIndex .BS 1 bContinue .BS 1 bRecurse .BS 1 bChar .BS 1 bLine .BS 1 bWord .BS 1 bPrintTotal .BS 1 fCharCount .BS 4 fLineCount .BS 4 fWordCount .BS 4 tCharCount .BS 4 tLineCount .BS 4 tWordCount .BS 4 bPause .BS 1 hFullPath .BS 1 hSrcFullPath .BS 1 STAT .BS S.STAT Index .BS 1 hDIRs .BS X.MAX.RECURSE hDIRENTs .BS X.MAX.RECURSE oDIRENTs .BS X.MAX.RECURSE*2 hSrcBasePath .BS 1 hFilter .BS 1 DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/BIN/WC.S ASM