PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/BIN/LS *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/A2OSX.API.I .INB INC/LIBSTR.I *-------------------------------------- * 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.LIBSTR .DA LIBSTR L.MSG.VOL.HEADER .DA MSG.VOL.HEADER L.MSG.DIR.HEADER .DA MSG.DIR.HEADER L.MSG.VOL .DA MSG.VOL L.MSG.DIR .DA MSG.DIR L.MSG.FILE .DA MSG.FILE L.MSG.VOL.END .DA MSG.VOL.END L.MSG.DIR.END .DA MSG.DIR.END L.PRODOS.FT.TXT .DA PRODOS.FT.TXT .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBSTR >LOADLIBYA sta hLIBSTR lda #0 ldy #DS.END-DS.START-1 .11 sta (pData),y dey bpl .11 ldy #S.PS.hARGS lda (pPs),y beq .1 no arg, go get current prefix >SYSCALL SYS.GetMemPtrA >STYA ZPQuickPtr1 lda (ZPQuickPtr1) beq .1 ldy #1 lda (ZPQuickPtr1),y cmp #'/' full path starting with '/'? bne .10 no, append to current prefix ldy #S.PS.hARGS yes, get back arg... lda (pPs),y bra .3 .10 ldy #S.PS.hARGS lda (pPs),y >PUSHA ldy #S.PS.hPREFIX lda (pPs),y >PUSHA >SYSCALL SYS.PStrCat sta hDIRPATH bra .3 .1 ldy #S.PS.hPREFIX lda (pPs),y .3 pha >SYSCALL SYS.CheckPrefixA is it a existing directory? bcs .4 no, let ListDirInitA extract pattern pla pha >SYSCALL SYS.GetMemPtrA >STYA ZPQuickPtr1 lda (ZPQuickPtr1) tay lda #'/' cmp (ZPQuickPtr1),y beq .31 iny sta (ZPQuickPtr1),y .31 iny lda #'*' sta (ZPQuickPtr1),y .4 pla >SYSCALL SYS.ListDirInitA bcs .9 ldy #hS.LISTDIR sta (pData),y lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc rts .9 sec rts *-------------------------------------- CS.RUN ldy #bCANCEL lda (pData),y beq .1 sec rts .1 ldy #bSTOP lda (pData),y beq .2 clc rts .2 ldy #hS.LISTDIR lda (pData),y >SYSCALL SYS.ListDirNextA bcc .3 jmp Push.Footer .3 pha >SYSCALL SYS.GetMemPtrA >STYA ZPQuickPtr1 lda (ZPQuickPtr1) pha and #$0F sta (ZPQuickPtr1) Adjust Filename len pla and #$F0 cmp #$F0 Volume ($F) HEADER ? bne .31 pla ldy #hVOLHEADER sta (pData),y >PUSHW ZPQuickPtr1 >PUSHW L.MSG.VOL.HEADER >LIBCALL hLIBSTR,LIBSTR.PRINTF clc rts .31 cmp #$E0 Dir ($E) HEADER ? bne .4 pla ldy #hDIRHEADER sta (pData),y >PUSHW ZPQuickPtr1 >PUSHW L.MSG.DIR.HEADER >LIBCALL hLIBSTR,LIBSTR.PRINTF clc rts .4 cmp #$D0 Directory ? bne .5 jsr Push.Dates jsr Push.Dir >PUSHW L.MSG.DIR bra .8 .5 cmp #$C0 Volume Name ? bne .6 >PUSHW ZPQuickPtr1 >PUSHW L.MSG.VOL bra .8 .6 jsr Push.Dates File jsr Push.File >PUSHW L.MSG.FILE .8 >LIBCALL hLIBSTR,LIBSTR.PRINTF .9 pla >SYSCALL SYS.FreeMemA clc rts *-------------------------------------- Push.Dir ldy #$1E get access mask lda (ZPQuickPtr1),y >PUSHA >PUSHW ZPQuickPtr1 rts *-------------------------------------- Push.File >PUSHBI 0 4th byte of file len=0 ldy #$17 get file len (3 bytes) lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA ldy #$1E get access mask lda (ZPQuickPtr1),y >PUSHA ldy #$20 get aux type lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA ldy #$10 get filetype lda L.PRODOS.FT.TXT sta ZPQuickPtr2 lda L.PRODOS.FT.TXT+1 sta ZPQuickPtr2+1 ldx #0 .1 lda (ZPQuickPtr1),y cmp PRODOS.FT.ID,x beq .3 lda ZPQuickPtr2 clc adc #4 sta ZPQuickPtr2 bcc .2 inc ZPQuickPtr2+1 .2 inx cpx PRODOS.FT.COUNT bne .1 lda (ZPQuickPtr1),y lsr lsr lsr lsr tax lda HEXDIGIT,x sta PRODOS.FT.DFLT+2 lda (ZPQuickPtr1),y and #$0F tax lda HEXDIGIT,x sta PRODOS.FT.DFLT+3 .3 >PUSHW ZPQuickPtr2 >PUSHW ZPQuickPtr1 >LIBCALL hLIBSTR,LIBSTR.LCASEP >PUSHW ZPQuickPtr1 rts *-------------------------------------- Push.Dates ldy #$24 get modification time lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA ldy #$22 lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA ldy #$1B get creation time lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA ldy #$19 lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA rts *-------------------------------------- Push.Footer ldy #hVOLHEADER lda (pData),y beq .20 >SYSCALL SYS.GetMemPtrA >STYA ZPQuickPtr1 ldy #$22 file_count lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA >PUSHW L.MSG.VOL.END >LIBCALL hLIBSTR,LIBSTR.PRINTF .20 ldy #hDIRHEADER lda (pData),y beq .21 >SYSCALL SYS.GetMemPtrA >STYA ZPQuickPtr1 ldy #$22 file_count lda (ZPQuickPtr1),y >PUSHA dey lda (ZPQuickPtr1),y >PUSHA >PUSHW L.MSG.DIR.END >LIBCALL hLIBSTR,LIBSTR.PRINTF .21 sec rts *-------------------------------------- CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? lda (pEvent),y ldy #S.PS.hINDEV 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 ldy #hVOLHEADER lda (pData),y beq .1 >SYSCALL SYS.FreeMemA .1 ldy #hDIRHEADER lda (pData),y beq .2 >SYSCALL SYS.FreeMemA .2 ldy #hS.LISTDIR lda (pData),y >SYSCALL SYS.ListDirCloseA ldy #hDIRPATH lda (pData),y beq .3 >SYSCALL SYS.FreeMemA .3 lda hLIBSTR >SYSCALL SYS.UnloadLibA clc rts *-------------------------------------- CS.END LIBSTR >PSTRING "libstr.o" MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n" MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n" MSG.VOL >CSTRING "/%S\n" MSG.DIR >CSTRING "/%15S