PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/BIN/RM *-------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I *-------------------------------------- X.MAX.RECURSE .EQ 8 X.DST.BASE.PATH .EQ 0 X.DELETE.SOURCE .EQ 0 *-------------------------------------- ZPPtr1 .EQ ZPBIN ZPPtr2 .EQ ZPBIN+2 *-------------------------------------- * 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 Length To Relocate .DA DS.END-DS.START Data Segment to Allocate .DA 0 .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 L.STAT .DA STAT .DA 0 *-------------------------------------- CS.INIT >SYSCALL GetArgC sta ArgCount cmp #1 beq .99 .1 dec ArgCount beq .5 lda ArgCount >SYSCALL GetArgA >STYA ZPPtr1 lda (ZPPtr1) cmp #2 bne .4 ldy #1 lda (ZPPtr1),y cmp #'-' bne .4 iny lda (ZPPtr1),y ldx OptionList .2 cmp OptionList,x beq .3 dex bne .2 lda #SYSMGR.ERRSYN sec rts .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra .1 .4 >LDYA ZPPtr1 jsr InitSrcDirPatYA bcs .9 bra .1 scan for any other args .5 ldy #index lda (pData),y beq .99 .8 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts .99 >LDYA L.MSG.USAGE >SYSCALL CPrintFYA lda #SYSMGR.ERRSYN sec .9 rts *-------------------------------------- CS.RUN ldy #bCANCEL lda (pData),y bmi .99 ldy #bSTOP lda (pData),y bmi .8 jsr GetNextEntry bcs .9 ldy #hFilter lda (pData),y beq .4 No filter.... >SYSCALL GetMemPtrA >PUSHYA >PUSHW ZPPtr1 >SYSCALL PStrMatch bcs .8 no match, skip.... .4 ldy #S.STAT.P.DRIVE lda (ZPPtr2),y ProDOS Device ? bne .5 ldy #S.STAT.P.TYPE lda (ZPPtr2),y cmp #$0F Directory ? bne .6 jmp CS.RUN.DIR .5 jmp CS.RUN.DEV .6 jmp CS.RUN.FILE .9 jsr LeaveSubDir bcs .99 ldy #bRecurse lda (pData),y bpl .8 ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >LDYA L.MSG.DIR >SYSCALL CPrintFYA jsr CS.RUN.DELETE.DIR jsr CS.RUN.PRINT.RC jsr BasePath.. .8 clc rts .99 lda #0 sec rts *-------------------------------------- CS.RUN.DEV >PUSHW ZPPtr1 >LDYA L.MSG.FILE >SYSCALL CPrintFYA bcs .9 ldy #bRecurse lda (pData),y bpl .8 jsr CS.RUN.PRINT.FILE bcs .9 lda #0 clc jsr CS.RUN.PRINT.RC >LDYA ZPPtr1 jmp EnterSubDirYA .8 clc .9 rts *-------------------------------------- CS.RUN.DIR ldy #1 lda (ZPPtr1),y cmp #'.' beq .8 ldy #bRecurse lda (pData),y bpl CS.RUN.FILE >LDYA ZPPtr1 jmp EnterSubDirYA .8 clc .9 rts *-------------------------------------- CS.RUN.FILE jsr CS.RUN.PRINT.FILE bcs .9 jsr CS.RUN.DELETE.FILE jsr CS.RUN.PRINT.RC .9 rts *-------------------------------------- CS.RUN.PRINT.FILE >PUSHW ZPPtr1 ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >LDYA L.MSG.FILE >SYSCALL CPrintFYA rts *-------------------------------------- CS.RUN.DELETE.DIR jsr CS.RUN.GET.BASE.PATH bra CS.RUN.DELETE *-------------------------------------- CS.RUN.DELETE.FILE jsr CS.RUN.GET.BASE.PATH >PUSHW ZPPtr1 >PUSHWI UsrBuf256 >SYSCALL PStrCat CS.RUN.DELETE >LDYAI UsrBuf256 >SYSCALL RemoveYA rts *-------------------------------------- CS.RUN.GET.BASE.PATH ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >PUSHWI UsrBuf256 >SYSCALL PStrCpy rts *-------------------------------------- CS.RUN.PRINT.RC pha php bcs .1 >LDYA L.MSG.OK bra .8 .1 >PUSHA >LDYA L.MSG.ERR .8 >SYSCALL CPrintFYA bcs .9 plp ldy #bContinue lda (pData),y eor #$80 asl pla rts .9 plx plx rts *-------------------------------------- CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y ldy #S.PS.hStdIn cmp (pPs),y bne .9 lda (pEvent) and #S.EVT.F.KEY is it a KEY event? beq .9 ldy #S.EVT.DATAHI is it an O or SAPPLE key ? lda (pEvent),y bne .9 ldy #S.EVT.DATALO lda (pEvent),y cmp #$03 Ctrl-C bne .1 lda #$FF ldy #bCANCEL sta (pData),y bra .8 .1 cmp #$13 Ctrl-S bne .8 ldy #bSTOP lda (pData),y eor #$FF sta (pData),y .8 clc rts .9 sec rts *-------------------------------------- CS.QUIT jsr LeaveSubDir bcc CS.QUIT ldy #hFilter lda (pData),y beq .3 >SYSCALL FreeMemA .3 clc rts *-------------------------------------- .INB BIN/X.FILEENUM.S *-------------------------------------- CS.END *-------------------------------------- OptionList >PSTR "CR" OptionVars .DA #bContinue,#bRecurse *-------------------------------------- MSG.USAGE >CSTR "Usage : RM [File/Dir, *,? wildcards allowed]\n -C : Continue on error\n -R : Recurse subdirectories\n" MSG.DIR >CSTR "RM Dir :%S..." MSG.FILE >CSTR "RM File:%S%S..." MSG.OK >CSTR "[OK]\n" MSG.ERR >CSTR "[%h]\n" *-------------------------------------- STAT .BS S.STAT ArgCount .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START 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 bCANCEL .BS 1 bSTOP .BS 1 bContinue .BS 1 bRecurse .BS 1 DS.END .ED *-------------------------------------- MAN SAVE BIN/RM.S ASM