PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BOOT/BIN/LS *-------------------------------------- .INB /A2OSX.DEV/INC/MACROS.I .INB /A2OSX.DEV/INC/A2OSX.I *-------------------------------------- X.MAX.RECURSE .EQ 8 X.DST.BASE.PATH .EQ 0 X.DELETE.SOURCE .EQ 0 *-------------------------------------- MAX.COL .EQ 4 *-------------------------------------- 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.DEVEXT .DA MSG.DEVEXT L.MSG.DIR .DA MSG.DIR L.MSG.ENTER .DA MSG.ENTER L.MSG.DIREXT .DA MSG.DIREXT L.MSG.FILE .DA MSG.FILE L.MSG.FILEEXT .DA MSG.FILEEXT L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.STAT .DA STAT L.TIME.Format .DA TIME.Format L.TIME.Create .DA TIME.Create L.TIME.Mod .DA TIME.Mod .DA 0 *-------------------------------------- CS.INIT >SYSCALL GetArgC sta ArgCount .1 dec ArgCount beq .5 lda ArgCount >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 lda #SYSMGR.ERRSYN sec rts .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra .1 .4 >LDYA ZPPtr1 jsr InitSrcDirYA bcs .9 bra .1 scan for any other args .5 ldy #index lda (pData),y bne .8 ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtrA jsr InitSrcDirYA bcs .9 .8 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc .9 rts *-------------------------------------- CS.RUN ldy #bCANCEL lda (pData),y bmi .92 ldy #bSTOP lda (pData),y bmi .8 jsr GetNextEntry 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 ? bne .6 jmp CS.RUN.DIR .5 jmp CS.RUN.DEV .6 jmp CS.RUN.FILE .9 ldy #bLong lda (pData),y bmi .91 jsr CS.RUN.NewLine bcs .99 .91 jsr LeaveSubDir bcs .92 jsr BasePath.. .8 clc rts .92 lda #0 sec .99 rts *-------------------------------------- CS.RUN.DEV ldy #bLong lda (pData),y bpl CS.RUN.DIR ldy #S.STAT.P.DEVBLOCKS+1 >PUSHB (ZPPtr2),y dey >PUSHB (ZPPtr2),y ldy #S.STAT.BLOCKS+1 >PUSHB (ZPPtr2),y dey >PUSHB (ZPPtr2),y ldy #S.STAT.P.DRIVE >PUSHB (ZPPtr2),y dey SLOT >PUSHB (ZPPtr2),y >PUSHW ZPPtr1 >LDYA L.MSG.DEVEXT >SYSCALL CPrintFYA bcs .9 ldy #bRecurse lda (pData),y bpl .8 >LDYA ZPPtr1 jsr EnterSubDirYA bcs .9 jsr CS.RUN.ENTER.MSG bcs .9 .8 clc .9 rts *-------------------------------------- CS.RUN.DIR ldy #bAllmostAll lda (pData),y bpl .10 ldy #1 lda (ZPPtr1),y cmp #'.' beq .5 .10 ldy #bLong lda (pData),y bmi .4 >PUSHW ZPPtr1 >LDYA L.MSG.DIR >SYSCALL CPrintFYA bcs .9 lda #80/MAX.COL-2 sec sbc (ZPPtr1) beq .2 tax .1 lda #' ' phx >SYSCALL COutA plx bcs .9 dex bne .1 .2 jsr CS.RUN.UpdateColCnt bcc .5 rts .4 jsr CS.RUN.PUSHEXTRA ldy #S.STAT.MODE+1 lda (ZPPtr2),y >PUSHA dey lda (ZPPtr2),y >PUSHA File Mode >PUSHW ZPPtr1 >LDYA L.MSG.DIREXT >SYSCALL CPrintFYA bcs .9 .5 ldy #bRecurse lda (pData),y bpl .8 ldy #1 lda (ZPPtr1),y cmp #'.' beq .8 jsr CS.RUN.NewLine bcs .9 >LDYA ZPPtr1 jsr EnterSubDirYA bcs .9 jsr CS.RUN.ENTER.MSG bcs .9 .8 clc .9 rts *-------------------------------------- CS.RUN.FILE ldy #bLong lda (pData),y bmi .8 >PUSHW ZPPtr1 >LDYA L.MSG.FILE >SYSCALL CPrintFYA bcs .9 jmp CS.RUN.UpdateColCnt .8 jsr CS.RUN.PUSHEXTRA lda ZPPtr2 clc adc #S.STAT.SIZE tay lda ZPPtr2+1 adc #0 >PUSHYA File Size ldy #S.STAT.MODE+1 lda (ZPPtr2),y >PUSHA dey lda (ZPPtr2),y >PUSHA File Mode ldy #S.STAT.P.AUXTYPE+1 lda (ZPPtr2),y >PUSHA dey lda (ZPPtr2),y >PUSHA AuxType dey lda (ZPPtr2),y jsr FileType2PSTR >PUSHYA Type >PUSHW ZPPtr1 >LDYA L.MSG.FILEEXT >SYSCALL CPrintFYA .9 rts *-------------------------------------- CS.RUN.PUSHEXTRA ldy TIME.NODATE Set NODATE as default .10 lda TIME.NODATE,y sta TIME.Mod,y sta TIME.Create,y dey bpl .10 ldy #S.STAT.MTIME+S.TIME.MONTH lda (ZPPtr2),y beq .1 Month=0.....invalid date/time >PUSHW L.TIME.Mod >PUSHW L.TIME.Format lda ZPPtr2 clc adc #S.STAT.MTIME tay lda ZPPtr2+1 adc #0 >PUSHYA >SYSCALL PStrFTime .1 ldy #S.STAT.CTIME+S.TIME.MONTH lda (ZPPtr2),y beq .2 Month=0.....invalid date/time >PUSHW L.TIME.Create >PUSHW L.TIME.Format lda ZPPtr2 clc adc #S.STAT.CTIME tay lda ZPPtr2+1 adc #0 >PUSHYA >SYSCALL PStrFTime .2 >PUSHW L.TIME.Mod ModTime >PUSHW L.TIME.Create Create Time rts *-------------------------------------- CS.RUN.UpdateColCnt ldy #ColCount lda (pData),y inc sta (pData),y cmp #MAX.COL bne CS.RUN.NewLine.8 lda #0 sta (pData),y bra CS.RUN.NewLine.1 *-------------------------------------- CS.RUN.NewLine ldy #ColCount lda (pData),y beq CS.RUN.NewLine.8 CS.RUN.NewLine.1 lda #13 >SYSCALL COutA rts CS.RUN.NewLine.8 clc rts *-------------------------------------- CS.RUN.ENTER.MSG ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtrA >PUSHYA >LDYA L.MSG.ENTER >SYSCALL CPrintFYA 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 jsr LeaveSubDir bcc CS.QUIT ldy #hFilter lda (pData),y beq .3 >SYSCALL FreeMemA .3 clc rts *-------------------------------------- FileType2PSTR ldy #0 .1 cmp PRODOS.FT.HEX,y beq .2 iny cpy #PRODOS.FT.TXT-PRODOS.FT.HEX bne .1 pha lsr lsr lsr lsr tax lda HEXDIGIT,x sta PRODOS.FT.DFLT+2 pla and #$0F tax lda HEXDIGIT,x sta PRODOS.FT.DFLT+3 .2 tya asl asl CC adc L.PRODOS.FT.TXT tay lda L.PRODOS.FT.TXT+1 adc #0 rts *-------------------------------------- .INB BIN/X.FILEENUM.S *-------------------------------------- CS.END *-------------------------------------- OptionList >PSTR "ALR" OptionVars .DA #bAllmostAll,#bLong,#bRecurse *-------------------------------------- MSG.DEVEXT >CSTR "%15S S%d,D%d Blocks Used:%5D,Total:%5D\n" MSG.DIR >CSTR "%S/" MSG.ENTER >CSTR "Directory:%S\n" MSG.DIREXT >CSTR "%16S %a %S %S\n" MSG.FILE >CSTR "%19S" MSG.FILEEXT >CSTR "%15S %S $%H %a %10u %S %S\n" *-------------------------------------- PRODOS.FT.HEX .HS 0406FAFCFDE2FF PRODOS.FT.TXT >PSTR "TXT" >PSTR "BIN" >PSTR "S-C" >PSTR "BAS" >PSTR "VAR" >PSTR "ATK" >PSTR "SYS" PRODOS.FT.DFLT >PSTR "$ " TIME.NODATE >PSTR " " TIME.Format >PSTR "%d-%b-%y %H:%M" TIME.Create .BS 20 TIME.Mod .BS 20 HEXDIGIT .AS '0123456789ABCDEF' STAT .BS S.STAT ArgCount .BS 1 *-------------------------------------- .DUMMY .OR 0 DS.START Index .BS 1 hDIRs .BS X.MAX.RECURSE hDIRENTs .BS X.MAX.RECURSE oDIRENTs .BS X.MAX.RECURSE*2 hSrcBasePath .BS 1 hFilter .BS 1 bSTOP .BS 1 bCANCEL .BS 1 bAllmostAll .BS 1 bLong .BS 1 bRecurse .BS 1 ColCount .BS 1 DS.END .ED *-------------------------------------- MAN SAVE BIN/LS.S ASM