NEW PREFIX AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 .TF BIN/LS *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I .INB INC/MLI.I .INB INC/MLI.E.I *-------------------------------------- X.COPY.TO.DEST .EQ 0 X.DELETE.SOURCE .EQ 0 *-------------------------------------- MAX.COL .EQ 4 *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPFileName .BS 2 ZPFileStat .BS 2 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- CS.START cld jmp (.1,x) .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA #0 S.PS.F.EVENT .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize .DA #64 Stack Size .DA #ZS.END-ZS.START Zero Page Size .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.MSG.CRLF .DA MSG.CRLF L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.FMT.DateTime .DA FMT.DateTime .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN .1 >INC.G ArgCount >SYSCALL ArgV bcs .6 >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .4 ldy #1 lda (ZPPtr1),y ldx OptionList .2 cmp OptionList,x beq .3 dex bne .2 lda #E.SYN sec rts .3 ldy OptionVars-1,x lda #$80 sta (pData),y bra .1 .4 >LDYA ZPPtr1 jsr InitSrcDirYA bcc .1 scan for any other args .9 rts .6 >LDA.G index do we have a Source dir ? bne CS.RUN.LOOP ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtr jsr InitSrcDirYA bcs .9 *-------------------------------------- CS.RUN.LOOP bra .2 >SYSCALL GetChar bcs .2 no char cmp #$03 Ctrl-C bne .1 Abort.... rts CS .1 cmp #$13 Ctrl-S bne .2 >LDA.G bPause eor #$ff sta (pData),y bne CS.RUN.LOOP .2 >LDA.G bPause bne CS.RUN.LOOP jsr GetEntry bcs .9 >LDA.G hFilter beq .4 No filter.... pha ldy #S.STAT.FSID lda (ZPFileStat),y bne .11 not prodos... pla >SYSCALL GetMemPtr >SYSCALL strupr bra .12 .11 pla >SYSCALL GetMemPtr .12 jsr StrMatch 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 jsr CS.RUN.PRINT.DIR bcs .99 bra .8 .5 jsr CS.RUN.PRINT.DEV bcs .99 bra .8 .6 jsr CS.RUN.PRINT.FILE bcs .99 .8 jsr GetNextEntry bcc .92 .9 ldy #bLong lda (pData),y bmi .91 jsr CS.RUN.NewLine bcs .99 .91 jsr LeaveSubDir bcs .98 jsr BasePath.. jsr GetNextEntry .92 jmp CS.RUN.LOOP .98 lda #0 sec .99 rts *-------------------------------------- CS.RUN.PRINT.DEV >LDA.G bLong bpl CS.RUN.PRINT.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 >PUSHBI 8 >LDYA L.MSG.DEVEXT >SYSCALL printf bcs .9 ldy #bRecurse lda (pData),y bpl .8 >LDYA ZPFileName jsr EnterSubDirYA bcs .9 jmp CS.RUN.ENTER.MSG .8 clc .9 rts *-------------------------------------- CS.RUN.PRINT.DIR >LDA.G bAllmostAll bmi .10 lda (ZPFileName) cmp #'.' bne .10 jmp .5 .10 >LDA.G bLong bmi .4 >LDA.G bColumn bpl .22 >LDYA ZPFileName >SYSCALL puts rts .22 >PUSHW ZPFileName >PUSHBI 2 >LDYA L.MSG.DIR >SYSCALL printf bcs .99 ldy #0 .1 iny lda (ZPFileName),y bne .1 .11 iny cpy #19 bcs .2 lda #' ' phy >SYSCALL PutChar ply bcc .11 rts .2 jsr CS.RUN.UpdateColCnt bcc .5 rts .4 jsr CS.RUN.PUSHDATES jsr Mod2CSTR >PUSHEA.G MOD File Mod >PUSHW ZPFileName >PUSHBI 8 >LDYA L.MSG.DIREXT >SYSCALL printf .99 bcs .9 .5 ldy #bRecurse lda (pData),y bpl .8 lda (ZPFileName) cmp #'.' beq .8 jsr CS.RUN.NewLine bcs .9 >LDYA ZPFileName jsr EnterSubDirYA bcs .9 jmp CS.RUN.ENTER.MSG .8 clc .9 rts *-------------------------------------- CS.RUN.PRINT.FILE ldy #bLong lda (pData),y bmi .1 >LDA.G bColumn bpl .22 >LDYA ZPFileName >SYSCALL puts rts .22 >PUSHW ZPFileName >PUSHBI 2 >LDYA L.MSG.FILE >SYSCALL printf bcs .9 jmp CS.RUN.UpdateColCnt .1 jsr CS.RUN.PUSHDATES ldy #S.STAT.SIZE+3 ldx #4 .2 lda (ZPFileStat),y >PUSHA dey dex bne .2 jsr Mod2CSTR >PUSHEA.G MOD File Mod ldy #S.STAT.P.AUXTYPE+1 lda (ZPFileStat),y >PUSHA dey lda (ZPFileStat),y >PUSHA dey Type lda (ZPFileStat),y jsr FileType2PSTR >PUSHYA >PUSHW ZPFileName >PUSHBI 16 >LDYA L.MSG.FILEEXT >SYSCALL printf .9 rts *-------------------------------------- CS.RUN.PUSHDATES ldx #$ff ldy #TIME.Mod-1 Set NODATE as default .10 inx iny lda MSG.NODATE,x sta (pData),y bne .10 ldx #$ff ldy #TIME.Create-1 Set NODATE as default .11 inx iny lda MSG.NODATE,x sta (pData),y bne .11 ldy #S.STAT.MTIME+S.TIME.MONTH lda (ZPFileStat),y beq .1 Month=0.....invalid date/time lda ZPFileStat clc adc #S.STAT.MTIME tay lda ZPFileStat+1 adc #0 >PUSHYA >PUSHW L.FMT.DateTime >LEA.G TIME.Mod >SYSCALL StrFTime .1 ldy #S.STAT.CTIME+S.TIME.MONTH lda (ZPFileStat),y beq .2 Month=0.....invalid date/time lda ZPFileStat clc adc #S.STAT.CTIME tay lda ZPFileStat+1 adc #0 >PUSHYA >PUSHW L.FMT.DateTime >LEA.G TIME.Create >SYSCALL StrFTime .2 >PUSHEA.G TIME.Mod >PUSHEA.G TIME.Create rts *-------------------------------------- CS.RUN.UpdateColCnt >INC.G ColCount cmp #MAX.COL bne CS.RUN.NewLine.8 lda #0 sta (pData),y bra CS.RUN.NewLine.1 *-------------------------------------- CS.RUN.NewLine >LDA.G ColCount beq CS.RUN.NewLine.8 CS.RUN.NewLine.1 >PUSHBI 0 >LDYA L.MSG.CRLF >SYSCALL printf rts CS.RUN.NewLine.8 clc rts *-------------------------------------- CS.RUN.ENTER.MSG ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 2 >LDYA L.MSG.ENTER >SYSCALL printf rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr LeaveSubDir bcc CS.QUIT >LDA.G hFilter beq .3 >SYSCALL FreeMem .3 clc rts *-------------------------------------- FileType2PSTR ldy #0 .1 cmp PRODOS.FT.HEX,y beq .8 iny cpy #PRODOS.FT.TXT-PRODOS.FT.HEX bne .1 pha lsr lsr lsr lsr ora #$30 cmp #$3A bcc .2 adc #6 .2 sta PRODOS.FT.DFLT+2 pla and #$0F ora #$30 cmp #$3A bcc .3 adc #6 .3 sta PRODOS.FT.DFLT+3 .8 tya asl asl CC adc L.PRODOS.FT.TXT tay lda L.PRODOS.FT.TXT+1 adc #0 rts *-------------------------------------- Mod2CSTR ldy #S.STAT.MODE+1 lda (ZPFileStat),y lsr lsr lsr lsr tax lda TYPES,x >STA.G MOD ldx #0 ldy #S.STAT.MODE lda (ZPFileStat),y ldy #MOD+1 .1 lsr pha lda #'-' bcc .2 lda ACCESS,x .2 sta (pData),y iny pla inx cpx #8 bne .1 .3 ldy #S.STAT.MODE+1 lda (ZPFileStat),y lsr lda #'-' bcc .4 lda ACCESS,x .4 >STA.G MOD+9 rts *-------------------------------------- .INB USR/SRC/BIN/X.FILEENUM.S *-------------------------------------- CS.END *-------------------------------------- OptionList >PSTR "ACLRalr" OptionVars .DA #bAllmostAll,#bColumn,#bLong,#bRecurse,#bAllmostAll,#bColumn,#bLong,#bRecurse *-------------------------------------- MSG.DEVEXT .AZ "/%15s S%dD%d Blocks Used:%5D Total:%5D\r\n" MSG.DIR .AZ "\e[32m%s/\e[0m" MSG.ENTER .AZ "Directory:%s\r\n" MSG.DIREXT .AZ "\e[32m%16s\e[0m %s %s %s\r\n" MSG.FILE .AZ "%19s" MSG.FILEEXT .AS "%15s %S $%H %s %10u %s %s" MSG.CRLF .AZ "\r\n" *-------------------------------------- PRODOS.FT.HEX .HS 0406FAFCFDE2CBCCFF PRODOS.FT.TXT >PSTR "TXT" >PSTR "BIN" >PSTR "ASM" >PSTR "BAS" >PSTR "VAR" >PSTR "ATK" >PSTR "PIX" >PSTR "FON" >PSTR "SYS" PRODOS.FT.DFLT >PSTR "$ " MSG.NODATE .AZ " " FMT.DateTime .AZ "%d-%b-%y %H:%M" TYPES .AS "-dbclssp" ACCESS .AS "rwxrwxrwx" *-------------------------------------- .DUMMY .OR 0 DS.START ArgCount .BS 1 MOD .BS 11 drwxrwxrwx0 TIME.Create .BS 20 TIME.Mod .BS 20 hFilter .BS 1 bPause .BS 1 bAllmostAll .BS 1 bColumn .BS 1 bLong .BS 1 bRecurse .BS 1 ColCount .BS 1 .INB USR/SRC/BIN/X.FILEENUM.G DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/BIN/LS.S ASM