NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF bin/stat *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- .DUMMY .OR ZPBIN ZS.START ArgIndex .BS 1 ArgFile .BS 1 ZPPtr1 .BS 2 bFormatStr .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 #S.PS.F.EVENT S.PS.F .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS .DA #64 SS .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.Filename .DA MSG.Filename L.MSG.Access .DA MSG.Access L.MSG.Mod .DA MSG.Mod L.MSG.UIDGIDSIZE .DA MSG.UIDGIDSIZE L.FMT.DateTime .DA FMT.DateTime L.MSG.CMATimes .DA MSG.CMATimes .DA 0 *-------------------------------------- CS.INIT clc rts *-------------------------------------- CS.RUN .1 inc ArgIndex lda ArgIndex >SYSCALL ArgV bcs .3 >STYA ZPPtr1 lda (ZPPtr1) cmp #'-' bne .2 jsr CS.RUN.CheckOpt bcc .1 .99 >PUSHW L.MSG.USAGE >PUSHBI 0 >SYSCALL PrintF lda #E.SYN sec rts .2 lda ArgFile bne .99 lda ArgIndex sta ArgFile bra .1 .3 lda ArgFile beq .99 >SYSCALL ArgV >PUSHYA >PUSHW pData >SYSCALL Stat bcs .9 jsr CS.RUN.DUMP bcs .9 lda #0 sec .9 CS.RUN.RTS rts *-------------------------------------- CS.RUN.DUMP lda ArgFile >SYSCALL ArgV >PUSHYA >PUSHWI 0 Allocate >SYSCALL RealPath bcs CS.RUN.RTS >STYA ZPPtr1 phx >PUSHW L.MSG.Filename >PUSHW ZPPtr1 >PUSHBI 2 >SYSCALL PrintF pla >SYSCALL FreeMem jsr Access2CSTR >PUSHW L.MSG.Access >PUSHEA.G ATTR >PUSHBI 2 >SYSCALL PrintF jsr Mod2CSTR >PUSHW L.MSG.MOD >PUSHEA.G MOD >PUSHBI 2 >SYSCALL PrintF >PUSHW L.MSG.UIDGIDSIZE >PUSHW.G StatBuf+S.STAT.UID >PUSHW.G StatBuf+S.STAT.GID >PUSHL.G StatBuf+S.STAT.SIZE >PUSHL.G StatBuf+S.STAT.BLOCKS >PUSHBI 12 >SYSCALL PrintF jsr CS.RUN.PrintAMCTime rts *-------------------------------------- Access2CSTR ldy #S.STAT.P.ACCESS lda (pData),y ldy #ATTR+15 ldx #15 .1 lsr pha bcc .2 lda ATTRS,x sta (pData),y dex dey lda ATTRS,x sta (pData),y bra .3 .2 lda #'-' sta (pData),y dex dey sta (pData),y .3 pla dey dex bpl .1 rts *-------------------------------------- Mod2CSTR ldy #S.STAT.MODE+1 lda (pData),y lsr php lsr lsr lsr tax lda TYPES,x >STA.G MOD plp ldx #8 ldy #S.STAT.MODE lda (pData),y ldy #MOD+1 .1 pha lda #'-' bcc .2 lda ACCESS,x .2 sta (pData),y iny pla asl dex bpl .1 rts *-------------------------------------- CS.RUN.PrintAMCTime ldy #TIME.Access-1 Set NODATE as default jsr CS.RUN.PrintAMCTime.NODATE ldy #TIME.Mod-1 Set NODATE as default jsr CS.RUN.PrintAMCTime.NODATE ldy #TIME.Create-1 Set NODATE as default jsr CS.RUN.PrintAMCTime.NODATE >LDA.G StatBuf+S.STAT.ATIME+S.TIME.MONTH beq .1 Month=0.....invalid date/time >PUSHEA.G TIME.Access >PUSHW L.FMT.DateTime >PUSHEA.G StatBuf+S.STAT.ATIME >SYSCALL StrFTime .1 >LDA.G StatBuf+S.STAT.MTIME+S.TIME.MONTH beq .2 Month=0.....invalid date/time >PUSHEA.G TIME.Mod >PUSHW L.FMT.DateTime >PUSHEA.G StatBuf+S.STAT.MTIME >SYSCALL StrFTime .2 >LDA.G StatBuf+S.STAT.CTIME+S.TIME.MONTH beq .8 Month=0.....invalid date/time >PUSHEA.G TIME.Create >PUSHW L.FMT.DateTime >PUSHEA.G StatBuf+S.STAT.CTIME >SYSCALL StrFTime .8 >PUSHW L.MSG.CMATimes >PUSHEA.G TIME.Create >PUSHEA.G TIME.Mod >PUSHEA.G TIME.Access >PUSHBI 6 >SYSCALL PrintF rts *-------------------------------------- CS.RUN.PrintAMCTime.NODATE ldx #$ff .1 inx iny lda MSG.NODATE,x sta (pData),y bne .1 rts *-------------------------------------- CS.QUIT .8 clc rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- CS.RUN.CheckOpt ldy #1 lda (ZPPtr1),y ldx #OptionVars-OptionList-1 .2 cmp OptionList,x beq .3 dex bpl .2 sec rts .3 ldy OptionVars,x lda #$ff sta 0,y clc rts *-------------------------------------- CS.END *-------------------------------------- OptionList .AS "Cc" OptionVars .DA #bFormatStr,#bFormatStr ATTRS .AS "DeReBn----InWrRd" TYPES .AS "-dbclssp" ACCESS .AS "xwrxwrxwr" MSG.NODATE .AZ "" FMT.DateTime .AZ "%d-%b-%y %H:%M:%S" *-------------------------------------- MSG.USAGE .AS "Usage : STAT File\r\n" .AZ " -C : Format\r\n" MSG.Filename .AZ "Filename : %s\r\n" MSG.Access .AZ "Access : %s\r\n" MSG.Mod .AZ "Mod : %s\r\n" MSG.UIDGIDSIZE .AS "UID : %10D\r\n" .AS "GID : %10D\r\n" .AS "Size : %10u\r\n" .AZ "Blocks : %10u\r\n" MSG.CMATimes .AS "Created : %s\r\n" .AS "Modified : %s\r\n" .AZ "Accessed : %s\r\n" *-------------------------------------- .DUMMY .OR 0 DS.START StatBuf .BS S.STAT ATTR .BS 17 MOD .BS 11 drwxrwxrwx + \0 TIME.Access .BS 20 TIME.Mod .BS 20 TIME.Create .BS 20 DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/stat.s ASM