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/LIBSTR.I *-------------------------------------- ZPPtr1 .EQ ZPBIN ZPPtr2 .EQ ZPBIN+2 ZPPtr3 .EQ ZPBIN+4 *-------------------------------------- * 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 >SYSCALL SYS.LoadLibYA sta hLIBSTR stz TmpBuffer256 >SYSCALL SYS.GetArgC cmp #1 bne .1 jsr CS.INIT.GETPFX no arg, go get current prefix bra .3 .1 lda #1 >SYSCALL SYS.GetArgA >STYA ZPPtr1 ldy #1 lda (ZPPtr1),y cmp #'/' full path starting with '/'? beq .2 yes, do not append to current prefix jsr CS.INIT.GETPFX .2 >PUSHW ZPPtr1 >PUSHWI TmpBuffer256 >SYSCALL SYS.PStrCat .3 >LDYAI TmpBuffer256 >SYSCALL SYS.CheckPrefixYA is it a existing directory? bcs .5 no, let ListDirInitYA extract pattern lda TmpBuffer256 tay lda #'/' cmp TmpBuffer256,y beq .4 iny sta TmpBuffer256,y .4 iny lda #'*' sta TmpBuffer256,y .5 >LDYAI TmpBuffer256 >SYSCALL SYS.ListDirInitYA 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.INIT.GETPFX ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL SYS.GetMemPtrA >PUSHYA >PUSHWI TmpBuffer256 >SYSCALL SYS.PStrCpy 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 ZPPtr1 lda (ZPPtr1) pha and #$0F sta (ZPPtr1) Adjust Filename len pla and #$F0 cmp #$F0 Volume ($F) HEADER ? bne .31 pla ldy #hVOLHEADER sta (pData),y >PUSHW ZPPtr1 >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 ZPPtr1 >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 ZPPtr1 >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 (ZPPtr1),y >PUSHA >PUSHW ZPPtr1 rts *-------------------------------------- Push.File >PUSHBI 0 4th byte of file len=0 ldy #$17 get file len (3 bytes) lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA ldy #$1E get access mask lda (ZPPtr1),y >PUSHA ldy #$20 get aux type lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA ldy #$10 get filetype lda L.PRODOS.FT.TXT sta ZPPtr2 lda L.PRODOS.FT.TXT+1 sta ZPPtr2+1 ldx #0 .1 lda (ZPPtr1),y cmp PRODOS.FT.ID,x beq .3 lda ZPPtr2 clc adc #4 sta ZPPtr2 bcc .2 inc ZPPtr2+1 .2 inx cpx PRODOS.FT.COUNT bne .1 lda (ZPPtr1),y lsr lsr lsr lsr tax lda HEXDIGIT,x sta PRODOS.FT.DFLT+2 lda (ZPPtr1),y and #$0F tax lda HEXDIGIT,x sta PRODOS.FT.DFLT+3 .3 >PUSHW ZPPtr2 >PUSHW ZPPtr1 >LIBCALL hLIBSTR,LIBSTR.LCASEP >PUSHW ZPPtr1 rts *-------------------------------------- Push.Dates ldy #$24 get modification time lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA ldy #$22 lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA ldy #$1B get creation time lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA ldy #$19 lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA rts *-------------------------------------- Push.Footer ldy #hVOLHEADER lda (pData),y beq .20 >SYSCALL SYS.GetMemPtrA >STYA ZPPtr1 ldy #$22 file_count lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA >PUSHW L.MSG.VOL.END >LIBCALL hLIBSTR,LIBSTR.PRINTF .20 ldy #hDIRHEADER lda (pData),y beq .21 >SYSCALL SYS.GetMemPtrA >STYA ZPPtr1 ldy #$22 file_count lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),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 %a %T %t %T %t\n" MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n" MSG.VOL.END >CSTRING "%D Files In Volume.\n" MSG.DIR.END >CSTRING "%D Files In Directory.\n" *-------------------------------------- PRODOS.FT.COUNT .HS 07 PRODOS.FT.ID .HS 0406FAFCFDE2FF PRODOS.FT.TXT T04 >PSTRING "TXT" T06 >PSTRING "BIN" TFA >PSTRING "S-C" TFC >PSTRING "BAS" TFD >PSTRING "VAR" TE2 >PSTRING "ATK" TFF >PSTRING "SYS" PRODOS.FT.DFLT >PSTRING "$ " HEXDIGIT .AS '0123456789ABCDEF' hLIBSTR .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START hDIRPATH .BS 1 hS.LISTDIR .BS 1 hVOLHEADER .BS 1 hDIRHEADER .BS 1 bSTOP .BS 1 bCANCEL .BS 1 DS.END .ED *-------------------------------------- MAN SAVE BIN/LS.S ASM