diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 840c452f..407fdce9 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/STAT.S.txt b/BIN/STAT.S.txt new file mode 100644 index 00000000..b3a9b4dd --- /dev/null +++ b/BIN/STAT.S.txt @@ -0,0 +1,284 @@ +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.Mode .DA MSG.Mode +L.MSG.UIDGIDSIZE .DA MSG.UIDGIDSIZE +L.FMT.DateTime .DA FMT.DateTime +L.MSG.AMCTimes .DA MSG.AMCTimes + .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 >PUSHBI 0 + >LDYA L.MSG.USAGE + >SYSCALL printf + lda #E.SYN + sec + rts + +.2 lda ArgFile + bne .99 + + lda ArgIndex + sta ArgFile + bra .1 + +.3 ldx ArgFile + beq .99 + + >PUSHW pData + txa + >SYSCALL ArgV + >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 + >SYSCALL Realpath + bcs CS.RUN.RTS + + phx + >PUSHYA + >PUSHBI 2 + >LDYA L.MSG.Filename + >SYSCALL printf + pla + >SYSCALL freemem + + jsr Mod2CSTR + >PUSHEA.G MOD + >PUSHBI 2 + >LDYA L.MSG.Mode + >SYSCALL printf + + >PUSHL.G StatBuf+S.STAT.SIZE + >PUSHW.G StatBuf+S.STAT.GID + >PUSHW.G StatBuf+S.STAT.UID + >PUSHBI 8 + >LDYA L.MSG.UIDGIDSIZE + >SYSCALL printf + + jsr CS.RUN.PrintAMCTime + + rts +*-------------------------------------- +*-------------------------------------- +Mod2CSTR ldy #S.STAT.MODE+1 + lda (pData),y + lsr + lsr + lsr + lsr + tax + lda TYPES,x + >STA.G MOD + + ldx #0 + ldy #S.STAT.MODE + lda (pData),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 (pData),y + lsr + lda #'-' + bcc .4 + + lda ACCESS,x + +.4 >STA.G MOD+9 + + 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 + + >PUSHW.G StatBuf+S.STAT.ATIME + >PUSHW L.FMT.DateTime + >LEA.G TIME.Access + >SYSCALL StrFTime + +.1 >LDA.G StatBuf+S.STAT.MTIME+S.TIME.MONTH + beq .2 Month=0.....invalid date/time + + >PUSHW.G StatBuf+S.STAT.MTIME + >PUSHW L.FMT.DateTime + >LEA.G TIME.Mod + >SYSCALL StrFTime + +.2 >LDA.G StatBuf+S.STAT.CTIME+S.TIME.MONTH + beq .8 Month=0.....invalid date/time + + >PUSHW.G StatBuf+S.STAT.CTIME + >PUSHW L.FMT.DateTime + >LEA.G TIME.Create + >SYSCALL StrFTime + +.8 >PUSHEA.G TIME.Create + >PUSHEA.G TIME.Mod + >PUSHEA.G TIME.Access + >PUSHBI 6 + >LDYA L.MSG.AMCTimes + >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 +TYPES .AS "-dbclssp" +ACCESS .AS "rwxrwxrwx" +MSG.NODATE .AZ " " +FMT.DateTime .AZ "%d-%b-%y %H:%M" +*-------------------------------------- +MSG.USAGE .AS "Usage : STAT File\r\n" + .AZ " -C : "Format Sting"\r\n" +MSG.Filename .AZ "Filename : %s\r\n" +MSG.Mode .AZ "Access : %s\r\n" +MSG.UIDGIDSIZE .AS "UID : %D\r\n" + .AS "GID : %D\r\n" + .AZ "Filesize : %u\r\n" +MSG.AMCTimes .AS "Access time : %s\r\n" + .AS "Mod time : %s\r\n" + .AZ "Creation time : %s\r\n" +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +StatBuf .BS S.STAT +MOD .BS 11 drwxrwxrwx0 +TIME.Access .BS 20 +TIME.Mod .BS 20 +TIME.Create .BS 20 +DS.END + .ED +*-------------------------------------- +MAN +SAVE USR/SRC/BIN/STAT.S +ASM diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index bca25d66..33716414 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -616,7 +616,7 @@ S.STAT.GID .EQ 6 WORD S.STAT.INO .EQ 8 QWORD S.STAT.NLINK .EQ 16 WORD S.STAT.SIZE .EQ 18 DWORD -S.STAT.ATIME .EQ 22 S.TIME +S.STAT.ATIME .EQ 22 S.TIME S.STAT.MTIME .EQ 30 S.TIME S.STAT.CTIME .EQ 38 S.TIME S.STAT.BLOCKS .EQ 46 DWORD