NEW AUTO 3,1 .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 hLineBuf .BS 1 ZPLineBuf .BS 2 bPass2 .BS 1 bDirLevel .BS 1 bIsTTY .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.USAGE .DA MSG.USAGE L.MSG.REG1 .DA MSG.REG1 L.MSG.REG2 .DA MSG.REG2 L.MSG.DIRSUMM .DA MSG.DIRSUMM L.MSG.BDEV .DA MSG.BDEV L.MSG.BDEVEXT .DA MSG.BDEVEXT L.MSG.CWD .DA MSG.CWD 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 stz bIsTTY jsr CS.RUN.ISATTY .1 stz bDirLevel >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 >PUSHW L.MSG.USAGE >PUSHBI 0 >SYSCALL PrintF 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 *-------------------------------------- CS.RUN.LOOP stz bPass2 .1 ldy #S.PS.hStdIn lda (pPS),y >SYSCALL FEOF bcc .2 rts I/O error .2 tay bne .3 no char >SYSCALL GetChar cmp #$03 Ctrl-C beq .99 Abort.... cmp #$13 Ctrl-S bne .3 >LDA.G bPause eor #$ff sta (pData),y bne .1 .3 >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 ResetSrcDir bcs .99 dec bPass2 bra .1 .9 >LDA.G bSummary bne .91 jsr CS.RUN.PrintDirSumm jsr CS.RUN.PrintCwd jsr CS.RUN.NewLine .91 dec bDirLevel jsr LeaveSubDir "cd .." bcs .97 This means we are done jsr BasePath.. Prune pathname jsr GetNextEntry Get next entry jmp CS.RUN.LOOP Go again .97 >LDA.G bSummary beq .98 inc bDirLevel jsr CS.RUN.PrintDirSumm jsr CS.RUN.PrintCwd jsr CS.RUN.NewLine .98 lda #0 sec .99 rts *-------------------------------------- CS.RUN.PRINT.JMP jmp (J.CS.RUN.PRINT,x) *-------------------------------------- CS.RUN.PRINT.REG bit bPass2 bmi .1 clc rts .1 ldx bDirLevel X is loop ctr bDirLevel..0 .2 >LEA.G BlkCounters >STYA ZPPtr1 ldy #S.STAT.BLOCKS+3 Read 32-bit number of blocks lda (ZPFileStat),y pha And push to stack dey lda (ZPFileStat),y pha dey lda (ZPFileStat),y pha dey lda (ZPFileStat),y pha txa Get loop counter asl x2 asl x2 again tay pla Do 32-bit add clc adc (ZPPtr1),y LSB sta (ZPPtr1),y pla iny adc (ZPPtr1),y sta (ZPPtr1),y pla iny adc (ZPPtr1),y sta (ZPPtr1),y pla iny adc (ZPPtr1),y MSB sta (ZPPtr1),y dex Decrement loop counter cpx #$ff Stop if -1 bne .2 >LDA.G bAllFiles beq .8 >PUSHW L.MSG.REG1 ldy #S.STAT.BLOCKS+3 ldx #4 .3 lda (ZPFileStat),y >PUSHA dey dex bne .3 (4) >PUSHBI 4 >SYSCALL PrintF bcs .9 jsr CS.RUN.PrintCwd >PUSHW L.MSG.REG2 >PUSHW ZPFileName (2) >PUSHBI 2 >SYSCALL PrintF bcs .9 jmp CS.RUN.NewLine .8 clc .9 rts *-------------------------------------- CS.RUN.PRINT.DIR bit bPass2 bmi .8 lda (ZPFileName) cmp #'.' beq .8 inc bDirLevel >LDYA ZPFileName jmp EnterSubDirYA .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 bcs .9 inc bDirLevel >LDYA ZPFileName jsr EnterSubDirYA bcs .9 .8 clc .9 rts *-------------------------------------- CS.RUN.PrintDirSumm >LEA.G BlkCounters >STYA ZPPtr1 lda bDirLevel asl asl clc adc ZPPtr1 sta ZPPtr1 lda #$00 adc ZPPtr1+1 sta ZPPtr1+1 >PUSHW L.MSG.DIRSUMM ldy #$03 lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA dey lda (ZPPtr1),y >PUSHA >PUSHBI 4 >SYSCALL PrintF ldy #$03 lda #$00 sta (ZPPtr1),y dey sta (ZPPtr1),y dey sta (ZPPtr1),y dey sta (ZPPtr1),y rts *-------------------------------------- CS.RUN.PrintCwd >PUSHW L.MSG.CWD ldy #hSrcBasePath lda (pData),y >SYSCALL GetMemPtr >PUSHYA >PUSHBI 2 >SYSCALL PrintF rts *-------------------------------------- CS.RUN.NewLine lda #C.CR >SYSCALL PutChar lda bIsTTY beq .9 lda #C.LF >SYSCALL PutChar .9 rts *-------------------------------------- CS.RUN.ISATTY ldy #S.PS.hStdOut lda (pPS),y tax lda hFDs-1,x >SYSCALL GetMemPtr >STYA ZPPtr1 lda (ZPPtr1) beq .9 inc bIsTTY .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 "SAsa" OptionVars .DA #bSummary,#bAllFiles,#bSummary,#bAllFiles *-------------------------------------- MSG.USAGE .CS "Usage : DU [-A] [-S] [filespec]\r\n" .CS " -A : Show all files (not only directories)\r\n" .CZ " -S : Show only summary\r\n" MSG.REG1 .CZ "%5u " MSG.REG2 .CZ "%s" MSG.CWD .CZ "%s" MSG.DIRSUMM .CZ "%5u " MSG.BDEVEXT .CZ "/%15s s%dd%d Blocks Used:%5D Total:%5D" MSG.BDEV .CZ "\e[32m%s/\e[0m" *-------------------------------------- .DUMMY .OR 0 DS.START ArgCount .BS 1 TIME.SysTime .BS S.TIME bPause .BS 1 bSummary .BS 1 bAllFiles .BS 1 hPW .BS 1 BlkCounters .BS 64 Array of 32 bit integers, size 16 .INB usr/src/shared/x.fileenum.g DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/du.s ASM