*-------------------------------------- * DU: Disk Usage - Bobbi June 2021 *-------------------------------------- .LIST OFF .OP 65C02 .OR $2000 .TF bin/du *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/kernel.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 *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPFileName .BS 2 ZPFileStat .BS 2 ZPPW .BS 2 bCRLF .BS 1 hLineBuf .BS 1 ZPLineBuf .BS 2 bPass2 .BS 1 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.REGEXT .DA MSG.REGEXT L.MSG.DIREXT .DA MSG.DIREXT L.MSG.DIRSUMM .DA MSG.DIRSUMM L.MSG.BDEV .DA MSG.BDEV L.MSG.BDEVEXT .DA MSG.BDEVEXT L.MSG.ENTER .DA MSG.ENTER L.MSG.EXIT .DA MSG.EXIT L.MSG.TOTSUMM .DA MSG.TOTSUMM J.CS.RUN.PRINT .DA CS.RUN.PRINT.REG .DA CS.RUN.PRINT.DIR .DA CS.RUN.PRINT.CDEV .DA CS.RUN.PRINT.BDEV .DA CS.RUN.PRINT.CDEV .DA CS.RUN.PRINT.CDEV .DA CS.RUN.PRINT.CDEV .DA CS.RUN.PRINT.CDEV .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 >LDYAI 256 >SYSCALL GetMem bcs .9 >STYA ZPLineBuf stx hLineBuf * ldy #S.PS.hStdOut * lda (pPS),y * tax * lda OF.Table.hFD-1,x * >SYSCALL GetMemPtr * >STYA ZPPtr1 * lda (ZPPtr1) S.FD.T * beq CS.RUN.LOOP S.FD.T.REG * cmp #S.FD.T.PIPE * beq CS.RUN.LOOP dec bCRLF *-------------------------------------- CS.RUN.LOOP stz bPass2 .1 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 beq .99 Abort.... cmp #$13 Ctrl-S bne .2 >LDA.G bPause eor #$ff sta (pData),y bne .1 .2 >LDA.G bPause bne .1 jsr GetEntry First entry bcs .9 jsr FilterMatch Filter filename bcs .8 no match, skip.... lda (ZPFileName) cmp #'.' beq .8 .4 ldy #S.STAT.MODE+1 lda (ZPFileStat),y and #$70 lsr lsr lsr tax jsr CS.RUN.PRINT.JMP bcs .99 .8 jsr GetNextEntry Next entry bcc .1 If there is one, go again bit bPass2 bmi .9 jsr MyResetSrcDir bcs .99 dec bPass2 bra .1 .9 >LDA.G bSummary bne .91 jsr CS.RUN.PrintDirSumm jsr CS.RUN.EXIT.MSG jsr CS.RUN.NewLine .91 jsr LeaveSubDir "cd .." bcs .98 This means we are done jsr BasePath.. Prune pathname * jsr CS.RUN.ENTER.MSG * bcs .99 jsr GetNextEntry Get next entry jmp CS.RUN.LOOP Go again .98 jsr CS.RUN.PrintTotSumm jsr CS.RUN.NewLine.1 lda #0 sec .99 rts *-------------------------------------- CS.RUN.PRINT.JMP jmp (J.CS.RUN.PRINT,x) *-------------------------------------- CS.RUN.PRINT.REG bit bPass2 bpl .8 ldy #S.STAT.BLOCKS+1 lda (ZPFileStat),y pha dey lda (ZPFileStat),y clc >ADC.G DirBlksL sta (pData),y pla iny adc (pData),y sta (pData),y ldy #S.STAT.BLOCKS+1 lda (ZPFileStat),y pha dey lda (ZPFileStat),y clc >ADC.G TotBlksL sta (pData),y pla iny adc (pData),y sta (pData),y * >PUSHW L.MSG.REGEXT * ldy #S.STAT.BLOCKS+1 * ldx #2 *.2 lda (ZPFileStat),y * >PUSHA * dey * dex * bne .2 (2) * >PUSHW ZPFileName (2) * >PUSHBI 4 * >SYSCALL PrintF * bcs .9 * jmp CS.RUN.NewLine.1 .8 clc .9 rts *-------------------------------------- CS.RUN.PRINT.DIR bit bPass2 bmi .8 * >PUSHW L.MSG.DIREXT * >PUSHW ZPFileName * >PUSHBI 2 * >SYSCALL PrintF * bcs .9 * jsr CS.RUN.NewLine.1 * bcs .9 lda (ZPFileName) cmp #'.' beq .8 * jsr CS.RUN.NewLine.1 * bcs .9 >LDYA ZPFileName jmp EnterSubDirYA jmp CS.RUN.ENTER.MSG .8 clc .9 rts *-------------------------------------- CS.RUN.PRINT.CDEV clc rts *-------------------------------------- CS.RUN.PRINT.BDEV bit bPass2 bmi .8 >PUSHW L.MSG.BDEVEXT >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 jsr CS.RUN.NewLine.1 bcs .9 >LDYA ZPFileName jsr EnterSubDirYA bcs .9 jmp CS.RUN.ENTER.MSG .8 clc .9 rts *-------------------------------------- CS.RUN.PrintDirSumm >PUSHW L.MSG.DIRSUMM >LDA.G DirBlksL >PUSHW.G DirBlksL >PUSHBI 2 >SYSCALL PrintF lda #$00 >STA.G DirBlksL >STA.G DirBlksH rts *-------------------------------------- CS.RUN.PrintTotSumm >PUSHW L.MSG.TOTSUMM >LDA.G TotBlksL >PUSHW.G TotBlksL >PUSHBI 2 >SYSCALL PrintF rts *-------------------------------------- CS.RUN.ENTER.MSG >PUSHW L.MSG.ENTER ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 2 >SYSCALL PrintF bcc CS.RUN.NewLine.1 rts *-------------------------------------- CS.RUN.EXIT.MSG >PUSHW L.MSG.EXIT ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 2 >SYSCALL PrintF rts *-------------------------------------- CS.RUN.NewLine CS.RUN.NewLine.1 lda #C.CR >SYSCALL PutChar * bit bCRLF * bpl CS.RUN.NewLine.8 lda #C.LF >SYSCALL PutChar CS.RUN.NewLine.8 clc rts *-------------------------------------- MyResetSrcDir jsr GethDIR Not in Kernel I am building against >SYSCALL CloseDir >LDA.G hSrcBasePath >SYSCALL GetMemPtr >SYSCALL OpenDir bcs .9 pha >LDA.G index clc adc #hDIRs-1 tay pla sta (pData),y * clc .9 rts *---------------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.QUIT jsr LeaveSubDir bcc CS.QUIT >LDA.G hFilter beq .3 >SYSCALL FreeMem .3 >LDA.G hPW beq .4 >SYSCALL FreeMem .4 lda hLineBuf beq .8 >SYSCALL FreeMem .8 clc rts *-------------------------------------- .INB usr/src/shared/x.fileenum.s *-------------------------------------- CS.END *-------------------------------------- OptionList .AS "Ss" OptionVars .DA #bSummary,#bSummary *-------------------------------------- MSG.REGEXT .AZ "%5D %s" MSG.DIREXT .AZ "