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