NEW AUTO 3,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.ENTER.SUBDIR .EQ 1 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 ZPPW .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.Date .DA FMT.Date L.FMT.Time .DA FMT.Time L.FMT.int16 .DA FMT.int16 L.MSG.Users .DA MSG.Users L.MSG.Root .DA MSG.Root .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 #OptionVars-OptionList-1 .2 cmp OptionList,x beq .3 dex bpl .2 lda #E.SYN sec rts .3 ldy OptionVars,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 .8 ldy #S.PS.hCWD lda (pPS),y >SYSCALL GetMemPtr jsr InitSrcDirYA bcs .9 .8 >PUSHEA.G TIME.SysTime >SYSCALL time >LDYAI S.PW >SYSCALL GetMem bcs .9 >STYA ZPPW txa >STA.G hPW *-------------------------------------- CS.RUN.LOOP ldy #S.PS.hStdIn lda (pPS),y >SYSCALL feof bcs .99 I/O error tay bne .2 no char >SYSCALL GetChar 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 jsr FilterMatch 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 >PUSHW L.MSG.DEVEXT >PUSHW ZPFileName ldy #S.STAT.P.SLOT >PUSHB (ZPFileStat),y iny DRIVE >PUSHB (ZPFileStat),y ldy #S.STAT.BLOCKS+1 >PUSHB (ZPFileStat),y dey >PUSHB (ZPFileStat),y ldy #S.STAT.P.DEVBLOCKS+1 >PUSHB (ZPFileStat),y dey >PUSHB (ZPFileStat),y >PUSHBI 8 >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 bmi .23 >LDA.G bFullPath bpl .22 jsr CS.RUN.PRINT.SRCPATH .23 >LDYA ZPFileName >SYSCALL PutS bcs .9 >LDA.G bRecurse bpl .8 lda (ZPFileName) cmp #'.' beq .8 >LDYA ZPFileName jmp EnterSubDirYA .8 clc .9 rts .22 >PUSHW L.MSG.DIR >PUSHW ZPFileName >PUSHBI 2 >SYSCALL PrintF bcs .9 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 >PUSHW L.MSG.DIREXT jsr Mod2CSTR >PUSHEA.G MOD File Mod jsr CS.RUN.PushGidUid jsr CS.RUN.PUSHDATES >PUSHW ZPFileName >PUSHBI 12 >SYSCALL PrintF bcs .90 .5 >LDA.G bRecurse bpl .80 lda (ZPFileName) cmp #'.' beq .80 jsr CS.RUN.NewLine bcs .90 >LDYA ZPFileName jsr EnterSubDirYA bcs .90 jmp CS.RUN.ENTER.MSG .80 clc .90 rts *-------------------------------------- CS.RUN.PRINT.FILE ldy #bLong lda (pData),y bmi .1 >LDA.G bColumn bmi .23 >LDA.G bFullPath bpl .22 jsr CS.RUN.PRINT.SRCPATH .23 >LDYA ZPFileName >SYSCALL PutS rts .22 >PUSHW L.MSG.FILE >PUSHW ZPFileName >PUSHBI 2 >SYSCALL PrintF bcs .9 jmp CS.RUN.UpdateColCnt *-------------------------------------- .1 >PUSHW L.MSG.FILEEXT jsr Mod2CSTR >PUSHEA.G MOD File Mod jsr CS.RUN.PushGidUid ldy #S.STAT.SIZE+3 ldx #4 .2 lda (ZPFileStat),y >PUSHA dey dex bne .2 jsr CS.RUN.PUSHDATES ldy #S.STAT.P.TYPE lda (ZPFileStat),y jsr FileType2PSTR >PUSHYA ldy #S.STAT.P.AUXTYPE+1 lda (ZPFileStat),y >PUSHA dey lda (ZPFileStat),y >PUSHA >PUSHW ZPFileName >PUSHBI 20 >SYSCALL PrintF .9 rts *-------------------------------------- CS.RUN.PRINT.SRCPATH ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 0 >SYSCALL PrintF rts *-------------------------------------- CS.RUN.PushGidUid ldy #S.STAT.GID lda (ZPFileStat),y beq .1 >LDYA L.MSG.Users bra .2 .1 >LDYA L.MSG.Root .2 >PUSHYA ldy #S.STAT.UID lda (ZPFileStat),y >PUSHA >PUSHW ZPPW >SYSCALL GetPWUID bcs .3 >PUSHW ZPPW * clc rts .3 >PUSHEA.G UID >PUSHW L.FMT.int16 ldy #S.STAT.UID+1 lda (ZPFileStat),y >PUSHA dey lda (ZPFileStat),y >PUSHA >PUSHBI 2 >SYSCALL sprintf >PUSHEA.G UID clc rts *-------------------------------------- CS.RUN.PUSHDATES ldy #TIME.Mod-1 Set NODATE as default jsr CS.RUN.NODATES.INIT ldy #TIME.Create-1 Set NODATE as default jsr CS.RUN.NODATES.INIT ldy #S.STAT.MTIME+S.TIME.MONTH lda (ZPFileStat),y beq .1 Month=0.....invalid date/time >PUSHEA.G TIME.Mod lda ZPFileStat clc adc #S.STAT.MTIME tay lda ZPFileStat+1 adc #0 jsr CS.RUN.DATEFMT.SELECT >SYSCALL StrFTime .1 ldy #S.STAT.CTIME+S.TIME.MONTH lda (ZPFileStat),y beq .2 Month=0.....invalid date/time >PUSHEA.G TIME.Create lda ZPFileStat clc adc #S.STAT.CTIME tay lda ZPFileStat+1 adc #0 jsr CS.RUN.DATEFMT.SELECT >SYSCALL StrFTime .2 >PUSHEA.G TIME.Mod >PUSHEA.G TIME.Create rts *-------------------------------------- CS.RUN.NODATES.INIT ldx #$ff .1 inx iny lda MSG.NODATE,x sta (pData),y bne .1 rts *-------------------------------------- CS.RUN.DATEFMT.SELECT >STYA ZPPtr1 ldy #S.TIME.CENTURY lda (ZPPtr1),y ldy #TIME.SysTime+S.TIME.CENTURY cmp (pData),y bne .9 ldy #S.TIME.YEAR lda (ZPPtr1),y ldy #TIME.SysTime+S.TIME.YEAR cmp (pData),y bne .9 ldy #S.TIME.MONTH lda (ZPPtr1),y ldy #TIME.SysTime+S.TIME.MONTH cmp (pData),y bne .9 ldy #S.TIME.DAY lda (ZPPtr1),y ldy #TIME.SysTime+S.TIME.DAY cmp (pData),y bne .9 .8 >PUSHW L.FMT.Time >PUSHW ZPPtr1 rts .9 >PUSHW L.FMT.Date >PUSHW ZPPtr1 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 >PUSHW L.MSG.CRLF >PUSHBI 0 >SYSCALL PrintF rts CS.RUN.NewLine.8 clc rts *-------------------------------------- CS.RUN.ENTER.MSG >PUSHW L.MSG.ENTER ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 2 >SYSCALL PrintF rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr LeaveSubDir bcc CS.QUIT >LDA.G hFilter beq .3 >SYSCALL FreeMem .3 >LDA.G hPW beq .8 >SYSCALL FreeMem .8 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 .AS "ACFLRacflr" OptionVars .DA #bAllmostAll,#bColumn,#bFullPath,#bLong,#bRecurse,#bAllmostAll,#bColumn,#bFullPath,#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 "%s %6s %6s %s %s \e[32m%s/\e[0m\r\n" MSG.FILE .AZ "%19s" MSG.FILEEXT .AS "%s %6s %6s %10u %s %s %S %H %s" MSG.CRLF .AZ "\r\n" *-------------------------------------- PRODOS.FT.HEX .HS 0406FAFCFDE2CBCCCFFF PRODOS.FT.TXT >PSTR "txt" >PSTR "bin" >PSTR "asm" >PSTR "bas" >PSTR "var" >PSTR "atk" >PSTR "pix" >PSTR "fon" >PSTR "pak" >PSTR "sys" PRODOS.FT.DFLT >PSTR "$ " MSG.Users .AZ "users" MSG.Root .AZ "root" MSG.NODATE .AZ "" FMT.Date .AZ "%d-%b-%y" FMT.Time .AZ "%H:%M:%S " FMT.int16 .AZ "%i" 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 TIME.SysTime .BS S.TIME UID .BS 6 bPause .BS 1 bAllmostAll .BS 1 bColumn .BS 1 bFullPath .BS 1 bLong .BS 1 bRecurse .BS 1 ColCount .BS 1 hPW .BS 1 .INB USR/SRC/BIN/X.FILEENUM.G DS.END .ED *-------------------------------------- MAN SAVE USR/SRC/BIN/LS.S ASM