PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- COPY.BUF.SIZE .EQ 4096 *-------------------------------------- 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 stz ArgIndex .1 dec ArgCount beq .7 inc ArgIndex lda ArgIndex >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 .99 >LDYA L.MSG.USAGE >SYSCALL CPrintFYA lda #SYSMGR.ERRSYN sec rts .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra .1 .4 ldy #index lda (pData),y bne .5 Already have a Src dir... >LDYA ZPPtr1 jsr InitSrcDirYA bcc .1 success, scan for any other args rts .5 ldy #hDstBasePath lda (pData),y bne .99 we already have a second arg....error! >LDYA ZPPtr1 jsr InitDstDirYA bcc .1 success, scan for any other args rts .7 ldy #index processed all args lda (pData),y beq .99 , no src ? ERROR ldy #hDstBasePath lda (pData),y bne .8 we also have a Dst folder ldy #S.PS.hPREFIX no dst folder, use actual prefix lda (pPs),y >SYSCALL GetMemPtrA jsr InitDstDirYA bcs .99 .8 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts *-------------------------------------- CS.RUN >SYSCALL GetC bcs .1 no char cmp #$03 Ctrl-C beq .99 Abort.... cmp #$13 Ctrl-S bne .1 ldy #bPause lda (pData),y eor #$ff sta (pData),y bne .8 .1 .DO X.COPY.TO.DEST=1 ldy #bCopy lda (pData),y bpl .2 jmp CS.RUN.Copy .FIN .2 jsr GetNextEntry Ptr1=NAME, Ptr2=STAT 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 ? beq .6 jmp CS.RUN.FILE .5 jmp CS.RUN.DEV .6 jmp CS.RUN.DIR .9 jsr LeaveSubDir bcs .99 ldy #bRecurse lda (pData),y bpl .8 .DO X.DELETE.SOURCE=1 jsr CS.RUN.DELETE.DIR jsr CS.RUN.PRINT.RC bcs .99 .FIN 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.PrintFile bcs .9 lda #0 clc jsr CS.RUN.PrintErr >LDYA ZPPtr1 jmp EnterSubDirYA .8 clc .9 rts *-------------------------------------- CS.RUN.DIR ldy #bRecurse lda (pData),y bpl .8 ldy #1 lda (ZPPtr1),y cmp #'.' beq .8 jsr CS.RUN.PrintDir bcs .9 .DO X.COPY.TO.DEST=1 ldy #hDstBasePath jsr CS.RUN.GetFilePath >LDYAI UsrBuf256 >SYSCALL MKDirYA jsr CS.RUN.PrintErr bcc .1 cmp #MLI.ERR.DUPFILE beq .1 .FIN .1 >LDYA ZPPtr1 jmp EnterSubDirYA .8 clc rts .9 rts *-------------------------------------- CS.RUN.FILE jsr CS.RUN.PrintFile bcs .9 jsr CS.RUN.CopyStart bcs .9 rts * .DO X.DELETE.SOURCE=1 * jsr CS.RUN.DelFile * bcs .9 * .FIN .9 jsr CS.RUN.PrintErr rts *-------------------------------------- CS.RUN.PrintDir ldy #hDstBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >PUSHW ZPPtr1 ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >LDYA L.MSG.DIR >SYSCALL CPrintFYA rts *-------------------------------------- CS.RUN.PrintFile ldy #hDstBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >PUSHW ZPPtr1 ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >LDYA L.MSG.FILE >SYSCALL CPrintFYA rts *-------------------------------------- .DO X.COPY.TO.DEST=1 *-------------------------------------- CS.RUN.CopyStart ldy #S.STAT.P.AUXTYPE+1 >PUSHB (ZPPtr2),y dey >PUSHB (ZPPtr2),y ldy #S.STAT.P.TYPE >PUSHB (ZPPtr2),y >PUSHBI SYS.FOpen.R ldy #hSrcBasePath jsr CS.RUN.GetFilePath >PUSHWI UsrBuf256 >SYSCALL FOpen bcs .9 ldy #hSrcFile sta (pData),y ldy #S.STAT.P.AUXTYPE+1 >PUSHB (ZPPtr2),y dey >PUSHB (ZPPtr2),y ldy #S.STAT.P.TYPE >PUSHB (ZPPtr2),y >PUSHBI SYS.FOpen.W+SYS.FOpen.X ldy #hDstBasePath jsr CS.RUN.GetFilePath >PUSHWI UsrBuf256 >SYSCALL FOpen bcc .1 >DEBUG pha ldy #hSrcFile lda (pData),y >SYSCALL FCloseA pla sec rts .1 ldy #hDstFile sta (pData),y ldy #bCopy lda #$ff sta (pData),y clc .9 rts *-------------------------------------- CS.RUN.Copy stz .90+1 >PUSHWI COPY.BUF.SIZE >PUSHBI 0 >SYSCALL GetMem bcs .9 >STYA ZPPtr1 stx .90+1 >PUSHW ZPPtr1 Dst Ptr >PUSHWI COPY.BUF.SIZE Bytes To Read ldy #hSrcFile >PUSHB (pData),y >SYSCALL FRead bcc .1 cmp #MLI.ERR.EOF bne .9 lda #0 bra .9 .1 >STYA ZPPtr2 >PUSHW ZPPtr1 Src Ptr >PUSHW ZPPtr2 Bytes To Write ldy #hDstFile >PUSHB (pData),y >SYSCALL FWrite bcs .9 lda .90+1 >SYSCALL FreeMemA lda #'.' >SYSCALL PutCA rts .9 ldy #CopyRC sta (pData),y .90 lda #$00 beq CS.RUN.CopyEnd >SYSCALL FreeMemA *-------------------------------------- CS.RUN.CopyEnd ldy #hDstFile lda (pData),y >SYSCALL FCloseA ldy #hSrcFile lda (pData),y >SYSCALL FCloseA ldy #bCopy lda #$0 sta (pData),y clc ldy #CopyRC lda (pData),y beq CS.RUN.PrintErr sec *-------------------------------------- .FIN *-------------------------------------- CS.RUN.PrintErr pha php bcs .1 >LDYA L.MSG.OK bra .8 .1 >PUSHA >LDYA L.MSG.ERR .8 >SYSCALL CPrintFYA bcs .9 plp bcc .81 ldy #bContinue lda (pData),y eor #$80 asl .81 pla rts .9 plx plx rts *-------------------------------------- .DO X.DELETE.SOURCE=1 *-------------------------------------- CS.RUN.DelDir ldy #hSrcBasePath jsr CS.RUN.GetBasePath >SYSCALL RemoveYA rts *-------------------------------------- CS.RUN.DelFile ldy #hSrcBasePath jsr CS.RUN.GetFilePath >SYSCALL RemoveYA rts *-------------------------------------- .FIN *-------------------------------------- CS.RUN.GetFilePath jsr CS.RUN.GetBasePath >PUSHW ZPPtr1 >PUSHWI UsrBuf256 >SYSCALL PStrCat rts *-------------------------------------- CS.RUN.GetBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >PUSHWI UsrBuf256 >SYSCALL PStrCpy rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr LeaveSubDir bcc CS.QUIT ldy #hFilter lda (pData),y beq .8 >SYSCALL FreeMemA .8 clc rts *-------------------------------------- MAN SAVE BIN/X.CPMV.S LOAD BIN/CP.S ASM