diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 25d49970..4c0d220d 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 46ee1d34..ba3fbf71 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 406a87a8..3692eba4 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -43,20 +43,62 @@ L.TIME.Mod .DA TIME.Mod .DA 0 *-------------------------------------- CS.INIT >SYSCALL SYS.GetArgC - cmp #1 - bne .1 + sta ArgCount +.1 dec ArgCount + beq .8 + + lda ArgCount + >SYSCALL SYS.GetArgA + >STYA ZPPtr1 + + lda (ZPPtr1) + cmp #2 + bcc .7 + + ldy #1 + lda (ZPPtr1),y + cmp #'-' + bne .7 + iny + lda (ZPPtr1),y + cmp #'R' + bne .90 + ldy bRecurse + lda #$80 + sta (pData),y + bra .1 + +.7 >LDYA ZPPtr1 + jsr CS.INIT.OPENDIR + bcc .1 + bcs .99 + +.8 ldy #hDIR + lda (pData),y + bne .80 + ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.OPENDIRYA - bcc .8 A=hDir -.99 rts - -.1 lda #1 - >SYSCALL SYS.GetArgA + bcs .99 - >SYSCALL SYS.GetFullPathYA + ldy #hDIR + sta (pData),y + +.80 lda (pPs) + ora #S.PS.F.EVENT Now accept events + sta (pPs) + + clc + rts + +.90 lda #SYSMGR.ERRSYN +.99 sec + rts +*-------------------------------------- +CS.INIT.OPENDIR >SYSCALL SYS.GetFullPathYA bcs .99 stx hFullPath >STYA ZPPtr1 @@ -105,25 +147,20 @@ CS.INIT >SYSCALL SYS.GetArgC .7 >LDYA ZPPtr1 >SYSCALL SYS.OPENDIRYA bcs .9 - - jsr .9 Cleanup - -.8 ldy #hDIR A=hDir + ldy #hDIR A=hDir sta (pData),y - lda (pPs) - ora #S.PS.F.EVENT Now accept events - sta (pPs) - + jsr .9 Cleanup clc - rts +.99 rts + .9 pha lda hFullPath >SYSCALL SYS.FreeMemA pla sec - rts + rts *-------------------------------------- CS.RUN ldy #bCANCEL lda (pData),y @@ -220,6 +257,13 @@ CS.RUN.DEV ldy #S.STAT.PRODOS.DEVBLOCKS+1 *-------------------------------------- CS.RUN.DIR jsr CS.RUN.PUSHDATES + ldy #S.STAT.MODE+1 + lda (ZPPtr2),y + >PUSHA + dey + lda (ZPPtr2),y + >PUSHA File Mode + >PUSHW ZPPtr1 >LDYA L.MSG.DIR >SYSCALL SYS.PrintFYA @@ -235,6 +279,13 @@ CS.RUN.FILE jsr CS.RUN.PUSHDATES adc #0 >PUSHYA File Size + ldy #S.STAT.MODE+1 + lda (ZPPtr2),y + >PUSHA + dey + lda (ZPPtr2),y + >PUSHA File Mode + ldy #S.STAT.PRODOS.AUXTYPE+1 lda (ZPPtr2),y >PUSHA @@ -333,10 +384,10 @@ CS.QUIT ldy #hDIR FileType2PSTR ldy #0 .1 cmp PRODOS.FT.HEX,y - beq .3 + beq .2 -.2 iny - cpy #PRODOS.FT.TXT-PRODOS.FT.TXT + iny + cpy #PRODOS.FT.TXT-PRODOS.FT.HEX bne .1 pha @@ -354,7 +405,7 @@ FileType2PSTR ldy #0 lda HEXDIGIT,x sta PRODOS.FT.DFLT+3 -.3 tya +.2 tya asl asl CC adc L.PRODOS.FT.TXT @@ -364,9 +415,14 @@ FileType2PSTR ldy #0 rts *-------------------------------------- CS.END +*-------------------------------------- +hFullPath .BS 1 +STAT .BS S.STAT +ArgCount .BS 1 +*-------------------------------------- MSG.DEV >CSTRING "%15S S%d,D%d Blocks Used:%5D,Total:%5D\n" -MSG.DIR >CSTRING "/%15S %S %S\n" -MSG.FILE >CSTRING "%15S %S $%H %10u %S %S\n" +MSG.DIR >CSTRING "/%15S %a %S %S\n" +MSG.FILE >CSTRING "%15S %S $%H %a %10u %S %S\n" *-------------------------------------- PRODOS.FT.HEX .HS 0406FAFCFDE2FF PRODOS.FT.TXT >PSTRING "TXT" @@ -381,8 +437,6 @@ TIME.Format >PSTRING "%d-%b-%y %H:%M" TIME.Create .BS 20 TIME.Mod .BS 20 HEXDIGIT .AS '0123456789ABCDEF' -hFullPath .BS 1 -STAT .BS S.STAT *-------------------------------------- .DUMMY .OR 0 @@ -392,6 +446,7 @@ hDIR .BS 1 hFilter .BS 1 bSTOP .BS 1 bCANCEL .BS 1 +bRecurse .BS 1 DS.END .ED *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 23a37ca5..42f7d09a 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -439,9 +439,18 @@ S.STAT.MODE.RG .EQ $0020 S.STAT.MODE.XU .EQ $0040 S.STAT.MODE.WU .EQ $0080 S.STAT.MODE.RU .EQ $0100 -S.STAT.MODE.SST .EQ $0200 -S.STAT.MODE.SGID .EQ $0400 -S.STAT.MODE.SUID .EQ $0800 +*S.STAT.MODE.SST .EQ $0200 +*S.STAT.MODE.SGID .EQ $0400 +*S.STAT.MODE.SUID .EQ $0800 + +S.STAT.MODE.REG .EQ $0000 +S.STAT.MODE.FIFO .EQ $1000 +S.STAT.MODE.CHR .EQ $2000 +S.STAT.MODE.BLK .EQ $2000 +S.STAT.MODE.DIR .EQ $4000 +S.STAT.MODE.LNK .EQ $5000 +S.STAT.MODE.SOCK .EQ $6000 + S.STAT.DEV .EQ 2 WORD S.STAT.UID .EQ 4 WORD S.STAT.GID .EQ 6 WORD diff --git a/SYS/KERNEL.S.CIO.txt b/SYS/KERNEL.S.CIO.txt index 00063384..9ab63f99 100644 --- a/SYS/KERNEL.S.CIO.txt +++ b/SYS/KERNEL.S.CIO.txt @@ -230,6 +230,35 @@ PrintFJMP .DA PrintF.A .DA PrintF.S,PrintF.SS *-------------------------------------- PrintF.A >PULLW HEXBUF + + lda HEXBUF+1 + lsr + lsr + lsr + lsr + tax + lda TYPES,x + jsr K.COutA + + ldx #0 + +.1 lda #'-' + lsr HEXBUF + bcc .2 + lda ACCESS,x + +.2 jsr K.COutA + + inx + cpx #8 + bne .1 + +.3 lda #'-' + lsr HEXBUF+1 + bcc .4 + lda ACCESS,x + +.4 jsr K.COutA rts *-------------------------------------- PrintF.BB >PULLYA @@ -593,7 +622,8 @@ DEC2HEX stz HEXBUF * pla *.99 rts *-------------------------------------- -*ACCESS .AS "drwxrwxrwx" +TYPES .AS "-pcbdls" +ACCESS .AS "rwxrwxrwx" HEXBUF .BS 4 32 bits max BCDBUF .BS 5 5, enough to handle 10 digits (32bits) ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295) diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index ddf5924f..4de6b0c6 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -107,18 +107,13 @@ K.READDIRA jsr PFT.CheckDirA *-------------------------------------- K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes - >PUSHWI 256 Get a 256 bytes buffer for ONLINE call... - >PUSHBI 0 - jsr K.GetMem - bcs .99 - stx K.READDIRA.hMem - + >LDYAI KrnBuf256 >STYA MLICALL.PARAMS+2 - >STYA ZPQuickPtr2 For PASS #1 & #2 + >STYA ZPQuickPtr2 >MLICALL MLIONLINE bcc .10 -.98 jsr K.READDIRA.CLN + sec .99 rts * pass #1 compute BufSize..... @@ -151,7 +146,7 @@ K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes * pass #2 Fill Buffer... jsr K.READDIRA.GetBuf - bcs .98 + bcs .99 .3 lda (ZPQuickPtr2) and #$0F @@ -185,23 +180,23 @@ K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes lda #0 rol inc - sta KrnBuf256+S.STAT.PRODOS.DRIVE + sta KrnSTAT+S.STAT.PRODOS.DRIVE pla lsr CC lsr lsr lsr lsr - sta KrnBuf256+S.STAT.PRODOS.SLOT + sta KrnSTAT+S.STAT.PRODOS.SLOT >MLICALL MLIGETFILEINFO - sta KrnBuf256+S.STAT.PRODOS.DEVSTATUS + sta KrnSTAT+S.STAT.PRODOS.DEVSTATUS bcs .80 >LDYA MLICALL.PARAMS+5 AUXTYPE=TOTAL BLOCKS - >STYA KrnBuf256+S.STAT.PRODOS.DEVBLOCKS + >STYA KrnSTAT+S.STAT.PRODOS.DEVBLOCKS >LDYA MLICALL.PARAMS+8 - >STYA KrnBuf256+S.STAT.BLOCKS + >STYA KrnSTAT+S.STAT.BLOCKS .80 jsr K.READDIRA.ADDSTAT @@ -221,9 +216,7 @@ K.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes ldy #S.DIR.F lda #S.DIR.F.NOMORE sta (ZPQuickPtr1),y - - jsr K.READDIRA.CLN Discard ONLINE BUFFER - + lda K.READDIRA.hDIRENT tax jmp K.GetMemPtrA @@ -453,36 +446,61 @@ K.READDIRA.ADD.. * ldy #$25 total_blocks * lda (ZPQuickPtr3),y -* sta KrnBuf256+S.STAT.BLOCKS +* sta KrnSTAT+S.STAT.BLOCKS * iny * lda (ZPQuickPtr3),y -* sta KrnBuf256+S.STAT.BLOCKS+1 +* sta KrnSTAT+S.STAT.BLOCKS+1 *-------------------------------------- K.READDIRA.ADDD lda #$0F - sta KrnBuf256+S.STAT.PRODOS.TYPE + sta KrnSTAT+S.STAT.PRODOS.TYPE - bra K.READDIRA.ADDSTAT + lda /S.STAT.MODE.DIR + sta KrnSTAT+S.STAT.MODE+1 + bra K.READDIRA.AddAccess *-------------------------------------- -K.READDIRA.ADDF ldx #ADDF.DST-ADDF.SRC +K.READDIRA.ADDF lda /S.STAT.MODE.REG + sta KrnSTAT+S.STAT.MODE+1 + + ldx #ADDF.DST-ADDF.SRC + .1 ldy ADDF.SRC-1,x lda (ZPQuickPtr3),y ldy ADDF.DST-1,x - sta KrnBuf256,y + sta KrnSTAT,y dex bpl .1 - - >PUSHWI KrnBuf256+S.STAT.CTIME +*-------------------------------------- +K.READDIRA.AddAccess + ldy #$1E ProDOS Access + lda (ZPQuickPtr3),y + + ldx #0 + bit #$01 ProDOS R + beq .2 + ldx #S.STAT.MODE.RO + +.2 bit #$C2 ProDOS D,Rn,W + beq .3 + txa + ora #S.STAT.MODE.XO+S.STAT.MODE.WO + .HS 89 bit imm to skip txa + +.3 txa + sta KrnSTAT+S.STAT.MODE +*-------------------------------------- +K.READDIRA.AddTime + >PUSHWI KrnSTAT+S.STAT.CTIME lda #$18 creation Date/time jsr K.READDIRA.ConvertTime - >PUSHWI KrnBuf256+S.STAT.MTIME + >PUSHWI KrnSTAT+S.STAT.MTIME lda #$21 mod Date/time jsr K.READDIRA.ConvertTime *-------------------------------------- K.READDIRA.AddStat ldy #S.STAT-1 -.1 lda KrnBuf256,y +.1 lda KrnSTAT,y sta (ZPQuickPtr4),y dey bpl .1 @@ -498,7 +516,7 @@ K.READDIRA.AddStat K.READDIRA.ClrStat ldx #S.STAT-1 -.1 stz KrnBuf256,x +.1 stz KrnSTAT,x dex bpl .1 rts