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 *-------------------------------------- .DO X.COPY.TO.DEST=1 bne .5 Already have a Src dir... .ELSE bne .99 .FIN *-------------------------------------- >LDYA ZPPtr1 jsr InitSrcDirPatYA bcc .1 success, scan for any other args rts *-------------------------------------- .DO X.COPY.TO.DEST=1 .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 .FIN *-------------------------------------- .7 ldy #index processed all args lda (pData),y beq .99 , no src ? ERROR *-------------------------------------- .DO X.COPY.TO.DEST=1 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 .FIN *-------------------------------------- .8 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts *-------------------------------------- CS.RUN >SYSCALL GetC bcs .11 no char cmp #$03 Ctrl-C bne .10 sec rts Abort.... .10 cmp #$13 Ctrl-S bne .11 ldy #bPause lda (pData),y eor #$ff sta (pData),y .11 ldy #bPause lda (pData),y bmi .8 *-------------------------------------- .1 .DO X.COPY.TO.DEST=1 ldy #bCopy lda (pData),y bpl .2 jmp CS.RUN.Copy .FIN *-------------------------------------- .2 .DO X.DELETE.SOURCE=1 ldy #hToDelete lda (pData),y beq .3 jmp CS.RUN.Delete .FIN *-------------------------------------- .3 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 *-------------------------------------- .DO X.DELETE.SOURCE=1 ldy #hSrcBasePath jsr CS.RUN.GetBasePath >SYSCALL RemoveYA jsr CS.RUN.CheckErr bcs .99 .FIN *-------------------------------------- ldy #bRecurse lda (pData),y bpl .8 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.CheckErr >LDYA ZPPtr1 jmp EnterSubDirYA .8 clc .9 rts *-------------------------------------- CS.RUN.DIR 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.CheckErr bcs .9 .FIN *-------------------------------------- ldy #bRecurse lda (pData),y bpl .1 >LDYA ZPPtr1 jmp EnterSubDirYA *-------------------------------------- .1 .DO X.DELETE.SOURCE=1 ldy #hSrcBasePath jsr CS.RUN.GetFilePath >LDYAI UsrBuf256 >SYSCALL RemoveYA jsr CS.RUN.CheckErr bcs .9 .FIN *-------------------------------------- .8 clc .9 rts *-------------------------------------- CS.RUN.FILE jsr CS.RUN.PrintFile bcs .9 *-------------------------------------- .DO X.COPY.TO.DEST=1 jsr CS.RUN.CopyStart bcs .9 .FIN *-------------------------------------- .DO X.DELETE.SOURCE=1 ldy #hSrcBasePath jsr CS.RUN.GetFilePath >LDYAI UsrBuf256 >SYSCALL NewPStrYA bcs .99 txa ldy #hToDelete sta (pData),y .FIN *-------------------------------------- rts .9 jsr CS.RUN.CheckErr .99 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 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 #hSrcFile lda (pData),y >SYSCALL FCloseA bcc .1 jsr CS.RUN.CheckErr .1 ldy #hDstFile lda (pData),y >SYSCALL FCloseA bcc .2 jsr CS.RUN.CheckErr .2 ldy #bCopy lda #$0 sta (pData),y clc ldy #CopyRC lda (pData),y beq CS.RUN.CheckErr sec jmp CS.RUN.CheckErr .FIN *-------------------------------------- .DO X.DELETE.SOURCE=1 CS.RUN.Delete pha lda #0 sta (pData),y pla >SYSCALL GetMemPtrA >SYSCALL RemoveYA jmp CS.RUN.CheckErr .FIN *-------------------------------------- CS.RUN.CheckErr bcs .1 >LDYA L.MSG.OK >SYSCALL CPrintFYA rts .1 sta .2+1 >PUSHA >LDYA L.MSG.ERR >SYSCALL CPrintFYA bcs .9 ldy #bContinue lda (pData),y bmi .9 CC .2 lda #$ff sec rts .9 rts *-------------------------------------- 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 #hToDelete lda (pData),y beq .1 >SYSCALL FreeMemA .1 ldy #bCopy lda (pData),y bpl .2 ldy #hSrcFile lda (pData),y >SYSCALL FCloseA ldy #hDstFile lda (pData),y >SYSCALL FCloseA .2 ldy #hFilter lda (pData),y beq .8 >SYSCALL FreeMemA .8 clc rts *-------------------------------------- MAN SAVE BIN/X.CPMVRM.S LOAD BIN/RM.S ASM