PR#3 PREFIX /A2OSX.BUILD NEW INC 1 AUTO 6 .LIST OFF .OP 65C02 .OR $2000 .TF /A2OSX.BUILD/BIN/LS *-------------------------------------- .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I *-------------------------------------- X.COPY.TO.DEST .EQ 0 X.DELETE.SOURCE .EQ 0 *-------------------------------------- MAX.COL .EQ 4 *-------------------------------------- ZPPtr1 .EQ ZPBIN ZPPtr2 .EQ ZPBIN+2 ZPFileName .EQ ZPBIN+4 ZPFileStat .EQ ZPBIN+6 *-------------------------------------- * 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 >SYSCALL GetC bcs .10 no char cmp #$03 Ctrl-C beq .92 Abort.... cmp #$13 Ctrl-S bne .10 ldy #bPause lda (pData),y eor #$ff sta (pData),y bne .8 .10 ldy #bPause lda (pData),y bne .8 Pause... jsr GetEntry bcs .9 ldy #hFilter lda (pData),y beq .4 No filter.... >SYSCALL GetMemPtrA >PUSHYA >PUSHW ZPFileName >SYSCALL PStrMatch bcs .8 no match, skip.... .4 ldy #S.STAT.P.DRIVE lda (ZPFileStat),y ProDOS Device ? bne .5 ldy #S.STAT.P.TYPE lda (ZPFileStat),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.. jsr GetNextEntry .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 (ZPFileStat),y dey >PUSHB (ZPFileStat),y ldy #S.STAT.BLOCKS+1 >PUSHB (ZPFileStat),y dey >PUSHB (ZPFileStat),y ldy #S.STAT.P.DRIVE >PUSHB (ZPFileStat),y dey SLOT >PUSHB (ZPFileStat),y >PUSHW ZPFileName >LDYA L.MSG.DEVEXT >SYSCALL CPrintFYA bcs .9 ldy #bRecurse lda (pData),y bpl .8 >LDYA ZPFileName jsr EnterSubDirYA bcs .9 jsr CS.RUN.ENTER.MSG rts .8 jsr GetNextEntry clc .9 rts *-------------------------------------- CS.RUN.DIR ldy #bAllmostAll lda (pData),y bpl .10 ldy #1 lda (ZPFileName),y cmp #'.' beq .5 .10 ldy #bLong lda (pData),y bmi .4 >PUSHW ZPFileName >LDYA L.MSG.DIR >SYSCALL CPrintFYA bcs .9 lda #80/MAX.COL-2 sec sbc (ZPFileName) beq .2 tax .1 lda #' ' phx >SYSCALL PutCA 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 (ZPFileStat),y >PUSHA dey lda (ZPFileStat),y >PUSHA File Mode >PUSHW ZPFileName >LDYA L.MSG.DIREXT >SYSCALL CPrintFYA bcs .9 .5 ldy #bRecurse lda (pData),y bpl .8 ldy #1 lda (ZPFileName),y cmp #'.' beq .8 jsr CS.RUN.NewLine bcs .9 >LDYA ZPFileName jsr EnterSubDirYA bcs .9 jsr CS.RUN.ENTER.MSG rts .8 jsr GetNextEntry clc .9 rts *-------------------------------------- CS.RUN.FILE ldy #bLong lda (pData),y bmi .8 >PUSHW ZPFileName >LDYA L.MSG.FILE >SYSCALL CPrintFYA bcs .9 jsr CS.RUN.UpdateColCnt jsr GetNextEntry clc rts .8 jsr CS.RUN.PUSHEXTRA lda ZPFileStat clc adc #S.STAT.SIZE tay lda ZPFileStat+1 adc #0 >PUSHYA File Size ldy #S.STAT.MODE+1 lda (ZPFileStat),y >PUSHA dey lda (ZPFileStat),y >PUSHA File Mode ldy #S.STAT.P.AUXTYPE+1 lda (ZPFileStat),y >PUSHA dey lda (ZPFileStat),y >PUSHA AuxType dey lda (ZPFileStat),y jsr FileType2PSTR >PUSHYA Type >PUSHW ZPFileName >LDYA L.MSG.FILEEXT >SYSCALL CPrintFYA bcs .9 jsr GetNextEntry clc .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 (ZPFileStat),y beq .1 Month=0.....invalid date/time >PUSHW L.TIME.Mod >PUSHW L.TIME.Format lda ZPFileStat clc adc #S.STAT.MTIME tay lda ZPFileStat+1 adc #0 >PUSHYA >SYSCALL PStrFTime .1 ldy #S.STAT.CTIME+S.TIME.MONTH lda (ZPFileStat),y beq .2 Month=0.....invalid date/time >PUSHW L.TIME.Create >PUSHW L.TIME.Format lda ZPFileStat clc adc #S.STAT.CTIME tay lda ZPFileStat+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 PutCA lda #10 >SYSCALL PutCA 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 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 /A2OSX.SRC/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\r\n" MSG.DIR >CSTR "%S/" MSG.ENTER >CSTR "Directory:%S\r\n" MSG.DIREXT >CSTR "%16S %a %S %S\r\n" MSG.FILE >CSTR "%19S" MSG.FILEEXT >CSTR "%15S %S $%H %a %10u %S %S\r\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 bPause .BS 1 bAllmostAll .BS 1 bLong .BS 1 bRecurse .BS 1 ColCount .BS 1 DS.END .ED *-------------------------------------- MAN SAVE /A2OSX.SRC/BIN/LS.S ASM