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 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 ZPPtr1 lda (ZPPtr1) beq .1 ldy #1 lda (ZPPtr1),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 ldy #hDIRPATH sta (pData),y 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 ZPPtr1 lda (ZPPtr1) tay lda #'/' cmp (ZPPtr1),y beq .31 iny sta (ZPPtr1),y .31 iny lda #'*' sta (ZPPtr1),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 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