diff --git a/.Floppies/A2OSX.BOOT.woz b/.Floppies/A2OSX.BOOT.woz index 7be70421..10b0d1ee 100644 Binary files a/.Floppies/A2OSX.BOOT.woz and b/.Floppies/A2OSX.BOOT.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 46250cfe..8a62edbd 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 03df0678..4a8e93f8 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index bb051f3e..56f5fd8c 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -518,7 +518,7 @@ CS.RUN.SeekToX >PUSHB DSSS0000 CS.RUN.ZeroPtr1 >LDYA ZPPtr1 >STYA ZPPtr2 - lda #0 + lda #$AA tay .10 sta (ZPPtr2),y diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index 4e708d5e..298a6b42 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -5,10 +5,10 @@ NEW .OR $2000 .TF bin/ls *-------------------------------------- - .INB INC/MACROS.I - .INB INC/A2OSX.I - .INB INC/MLI.I - .INB INC/MLI.E.I + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.i + .INB inc/mli.e.i *-------------------------------------- X.ENTER.SUBDIR .EQ 1 X.COPY.TO.DEST .EQ 0 @@ -59,9 +59,8 @@ L.MSG.CRLF .DA MSG.CRLF L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.FMT.Date .DA FMT.Date L.FMT.Time .DA FMT.Time +L.FMT.string6 .DA FMT.string6 L.FMT.int16 .DA FMT.int16 -L.MSG.Users .DA MSG.Users -L.MSG.Root .DA MSG.Root J.CS.RUN.PRINT .DA CS.RUN.PRINT.REG .DA CS.RUN.PRINT.DIR .DA CS.RUN.PRINT.CDEV @@ -166,6 +165,7 @@ CS.RUN.LOOP ldy #S.PS.hStdIn .4 ldy #S.STAT.MODE+1 lda (ZPFileStat),y + and #$70 lsr lsr @@ -225,7 +225,8 @@ CS.RUN.PRINT.REG .1 >PUSHW L.MSG.REGEXT jsr Mod2CSTR (2) - jsr CS.RUN.PushGidUid (4) + + jsr CS.RUN.PushUidGid (4) ldy #S.STAT.SIZE+3 ldx #4 @@ -312,7 +313,7 @@ CS.RUN.PRINT.DIR jsr Mod2CSTR - jsr CS.RUN.PushGidUid + jsr CS.RUN.PushUidGid jsr CS.RUN.PUSHDATES >PUSHW ZPFileName >PUSHBI 12 @@ -432,35 +433,19 @@ CS.RUN.PRINT.SRCPATH >SYSCALL PrintF rts *-------------------------------------- -CS.RUN.PushGidUid - >PUSHW L.MSG.Root - >PUSHW L.MSG.Root - clc - rts - - ldy #S.STAT.GID - lda (ZPFileStat),y - beq .1 - - >LDYA L.MSG.Users - bra .2 - -.1 >LDYA L.MSG.Root - -.2 >PUSHYA - +CS.RUN.PushUidGid ldy #S.STAT.UID lda (ZPFileStat),y >PUSHA >PUSHW ZPPW >SYSCALL GetPWUID - bcs .3 + bcs .2 + + >PUSHEA.G USER + jsr CS.RUN.PushUidGidStr + bra .3 - >PUSHW ZPPW -* clc - rts - -.3 >PUSHEA.G UID +.2 >PUSHEA.G USER >PUSHW L.FMT.int16 ldy #S.STAT.UID+1 @@ -471,10 +456,42 @@ CS.RUN.PushGidUid >PUSHA >PUSHBI 2 >SYSCALL sprintf + +.3 ldy #S.STAT.GID + lda (ZPFileStat),y + >PUSHA + >PUSHW ZPPW + >SYSCALL GetGRGID + bcs .5 - >PUSHEA.G UID + >PUSHEA.G GROUP + jsr CS.RUN.PushUidGidStr + + bra .8 + +.5 >PUSHEA.G GROUP + >PUSHW L.FMT.int16 + + ldy #S.STAT.GID+1 + lda (ZPFileStat),y + >PUSHA + dey + lda (ZPFileStat),y + >PUSHA + >PUSHBI 2 + >SYSCALL sprintf + +.8 >PUSHEA.G USER + >PUSHEA.G GROUP clc rts + +CS.RUN.PushUidGidStr + >PUSHW L.FMT.string6 + >PUSHW ZPPW + >PUSHBI 2 + >SYSCALL sprintf + rts *-------------------------------------- CS.RUN.PUSHDATES ldy #TIME.Mod-1 Set NODATE as default @@ -647,35 +664,38 @@ FileType2PSTR ldy #0 Mod2CSTR ldy #S.STAT.MODE+1 lda (ZPFileStat),y lsr + php C = RU + lsr lsr lsr tax lda TYPES,x >STA.G MOD - ldx #0 + + plp + + ldx #8 + ldy #S.STAT.MODE lda (ZPFileStat),y ldy #MOD+1 -.1 lsr - pha + +.1 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 (ZPFileStat),y - lsr - lda #'-' - bcc .4 - lda ACCESS,x -.4 >STA.G MOD+9 + asl + + dex + bpl .1 >PUSHEA.G MOD rts @@ -708,14 +728,13 @@ PRODOS.FT.TXT >PSTR "txt" >PSTR "pak" >PSTR "sys" PRODOS.FT.DFLT >PSTR "$ " -MSG.Users .AZ "users" -MSG.Root .AZ "root" MSG.NODATE .AZ "" FMT.Date .AZ "%d-%b-%y" FMT.Time .AZ "%H:%M:%S " -FMT.int16 .AZ "%i" +FMT.string6 .AZ "%6s" +FMT.int16 .AZ "%6D" TYPES .AS "-dbclssp" -ACCESS .AS "rwxrwxrwx" +ACCESS .AS "xwrxwrxwr" *-------------------------------------- .DUMMY .OR 0 @@ -723,10 +742,12 @@ DS.START ArgCount .BS 1 MOD .BS 11 drwxrwxrwx0 +USER .BS 7 +GROUP .BS 7 + TIME.Create .BS 20 TIME.Mod .BS 20 TIME.SysTime .BS S.TIME -UID .BS 6 bPause .BS 1 bAllmostAll .BS 1 @@ -738,10 +759,10 @@ bRecurse .BS 1 ColCount .BS 1 hPW .BS 1 - .INB USR/SRC/BIN/X.FILEENUM.G + .INB usr/src/bin/x.fileenum.g DS.END .ED *-------------------------------------- MAN -SAVE USR/SRC/BIN/LS.S +SAVE usr/src/bin/ls.s ASM diff --git a/BIN/STAT.S.txt b/BIN/STAT.S.txt index ad002fac..be8f17b0 100644 --- a/BIN/STAT.S.txt +++ b/BIN/STAT.S.txt @@ -135,6 +135,8 @@ CS.RUN.DUMP lda ArgFile Mod2CSTR ldy #S.STAT.MODE+1 lda (pData),y lsr + php + lsr lsr lsr @@ -142,35 +144,29 @@ Mod2CSTR ldy #S.STAT.MODE+1 lda TYPES,x >STA.G MOD - ldx #0 + plp + + ldx #8 + ldy #S.STAT.MODE lda (pData),y ldy #MOD+1 -.1 lsr - pha +.1 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 + asl + + dex + bpl .1 rts *-------------------------------------- @@ -257,7 +253,7 @@ CS.END OptionList .AS "Cc" OptionVars .DA #bFormatStr,#bFormatStr TYPES .AS "-dbclssp" -ACCESS .AS "rwxrwxrwx" +ACCESS .AS "xwrxwrxwr" MSG.NODATE .AZ "" FMT.DateTime .AZ "%d-%b-%y %H:%M:%S" *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 4a9afb1a..f5e0fe54 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -477,7 +477,10 @@ S.FD.REG .EQ 4 S.FD.DIR.EL .EQ 4 S.FD.DIR.EPB .EQ 5 S.FD.DIR.FC .EQ 6 word -S.FD.DIR.ACL .EQ 8 +S.FD.DIR.ACL .EQ 8 57.00 +S.FD.DIR.UID .EQ 10 +S.FD.DIR.GID .EQ 12 +S.FD.DIR.MODE .EQ 14 * S.FD.DIR .EQ 16 *-------------------------------------- @@ -604,14 +607,19 @@ S.STAT.MODE .EQ 0 S.STAT.MODE.XO .EQ $0001 S.STAT.MODE.WO .EQ $0002 S.STAT.MODE.RO .EQ $0004 + S.STAT.MODE.FO .EQ $0007 + S.STAT.MODE.XG .EQ $0008 S.STAT.MODE.WG .EQ $0010 S.STAT.MODE.RG .EQ $0020 + S.STAT.MODE.FG .EQ $0038 + S.STAT.MODE.XU .EQ $0040 S.STAT.MODE.WU .EQ $0080 S.STAT.MODE.RU .EQ $0100 + S.STAT.MODE.FU .EQ $01C0 *S.STAT.MODE.SST .EQ $0200 *S.STAT.MODE.SGID .EQ $0400 @@ -658,9 +666,10 @@ S.PW.SHELL .EQ 182 64+1 * S.PW .EQ 247 *-------------------------------------- -S.GRP.GID .EQ 0 -S.GRP.NAME .EQ 1 16+1 -S.GRP.MEMBERS .EQ 18 +S.GRP.NAME .EQ 0 16+1 +S.GRP.GID .EQ 17 +* +S.GRP .EQ 18 *-------------------------------------- S.SESSION.P .EQ 0 S.SESSION.P.ROOT .EQ %10000000 diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 9b0fd0d2..92997275 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -IO.D2.SeekTime .EQ 200 +IO.D2.SeekTime .EQ 60 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0On .EQ $C081 diff --git a/INC/MLI.I.txt b/INC/MLI.I.txt index bd3ebb9e..c3a1f61d 100644 --- a/INC/MLI.I.txt +++ b/INC/MLI.I.txt @@ -80,7 +80,7 @@ S.FIEX.AUXTYPE .EQ 31 S.FIEX.MTIME .EQ 33 S.FIEX.BLKPTR .EQ 37 -S.FIEX.ACL .EQ 40 75.00 +S.FIEX.ACL .EQ 40 57.00 S.FIEX.ACL.UID .EQ 42 S.FIEX.ACL.GID .EQ 44 S.FIEX.ACL.MOD .EQ 46 diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index 9d791253..797e4acd 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -16,18 +16,6 @@ D2MotorControl >PULLB MotorOn tax lda $C000,x - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec clc .9 rts @@ -41,21 +29,10 @@ D2Recalibrate >PULLB DrvSlt lda IO.D2.DrvOn,x - ldy #30 - -.10 jsr D2.Wait25600usec - dey - bne .10 - ldy #168 - -* ldx Slotn0 - + .1 lda IO.D2.Ph0Off,x -* lda #IO.D2.SeekTime -* jsr D2.Wait100usecA - dey dey @@ -72,16 +49,10 @@ D2Recalibrate >PULLB DrvSlt tya bne .1 - jsr D2.Wait25600usec - jsr D2.Wait25600usec jsr D2.Wait25600usec ldx Slotn0 lda IO.D2.Ph0Off,x - - jsr D2.Wait25600usec - jsr D2.Wait25600usec - jsr D2.Wait25600usec clc .9 rts @@ -114,14 +85,18 @@ D2MoveHead.1 tay lda IO.D2.Ph0On,x + nop + nop lda IO.D2.Ph0On,y + nop + nop lda #IO.D2.SeekTime jsr D2.Wait100usecA pla cmp MoveTo - beq .8 + beq .7 bcs .2 @@ -137,17 +112,17 @@ D2MoveHead.1 sta MoveFrom - lda IO.D2.Ph0Off,x - lda IO.D2.Ph0Off,y + jsr .8 bra .1 -.8 jsr D2.Wait25600usec -*-------------------------------------- -D2.AllPhasesOff ldx Slotn0 +.7 jsr D2.Wait25600usec + +.8 lda IO.D2.Ph0Off,y + nop + nop lda IO.D2.Ph0Off,x - lda IO.D2.Ph1Off,x - lda IO.D2.Ph2Off,x - lda IO.D2.Ph3Off,x + nop + nop rts *-------------------------------------- D2.Wait25600usec @@ -210,13 +185,6 @@ D2TrkWrite16s >PULLW ZPPtr1 jsr CheckDiskII bcs .9 - ldx Slotn0 - - lda IO.D2.Ph0Off,x - lda IO.D2.Ph1Off,x - lda IO.D2.Ph2Off,x - lda IO.D2.Ph3Off,x - >LDYAI TRACK16.LEN+1 >SYSCALL2 getmem bcs .9 @@ -432,10 +400,11 @@ PutData stz Checksum pla ora D2.0000XX00,x + tax + eor Checksum sta Checksum - tax lda FC2Nib,x jsr PutBytePtr2 @@ -446,10 +415,14 @@ PutData stz Checksum .4 lda (ZPPtr1),y and #$FC + + tax + eor Checksum sta Checksum - tax + lda FC2Nib,x + jsr PutBytePtr2 iny diff --git a/ProDOS.FX/ProDOS.S.XDOS.B.txt b/ProDOS.FX/ProDOS.S.XDOS.B.txt index 0d7f7597..b648bb1f 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.B.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.B.txt @@ -166,22 +166,27 @@ L386C asl movhead jsr movhed0 move directory info. jmp lookfil0 do next local pathname. -movhed0 .DO ACL=1 - ldx #9+8 - .ELSE - ldx #9 move this directory info - .FIN - -.1 .DO ACL=1 - lda gbuf+$14,x - sta h_acl,x - .ELSE - lda gbuf+1C,x +movhed0 ldx #9 move this directory info + +.1 lda gbuf+$1C,x sta h_credt,x - .FIN dex bpl .1 + .DO ACL=1 + lda gbuf+$14 + cmp #$57 + bne .20 + + ldx #7 + +.2 lda gbuf+$14,x + sta h_acl,x + dex + bpl .2 + +.20 .FIN + lda gbuf+4 if this is root, then nothing to do and #$F0 eor #$F0 test header type. @@ -189,10 +194,10 @@ movhed0 .DO ACL=1 ldx #$03 otherwise, save owner info about -.2 lda gbuf+$27,x this header. +.3 lda gbuf+$27,x this header. sta own_blk,x dex - bpl .2 + bpl .3 .8 rts *-------------------------------------- @@ -628,7 +633,7 @@ L3ACE .DO LOWERCASE=1 * cpy #4 * bne .1 - lda gbuf+39,y save address of the 1st bitmap. + lda gbuf+39 save address of the 1st bitmap. sta VCBs+VCB.BMAP,x lda gbuf+40 sta VCBs+VCB.BMAP+1,x diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index b42f7f81..7031bcda 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -758,13 +758,15 @@ XRW.Seek ldx XRW.UnitIndex tay lda IO.D2.Ph0On,x + nop + nop lda IO.D2.Ph0On,y jsr XRW.WaitSeekTime pla cmp XRW.TargetQTrack - beq .8 + beq .7 bcs .2 @@ -780,11 +782,18 @@ XRW.Seek ldx XRW.UnitIndex sta XRW.CurrentQTrack - lda IO.D2.Ph0Off,x - lda IO.D2.Ph0Off,y + jsr .8 bra .1 -.8 jsr XRW.Wait25600usec +.7 jsr XRW.Wait25600usec + +.8 lda IO.D2.Ph0Off,y + nop + nop + lda IO.D2.Ph0Off,x + nop + nop + rts *-------------------------------------- XRW.AllPhasesOff ldx A2L diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index ec3706af..8dddfa4b 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -6,8 +6,8 @@ NEW * `int hDIR opendir (const char * dirpath);` * ## ASM * `>LDYA dirpath` -* `>SYSCALL opendir` -* ## RETURN VALUE +* `>SYSCALL opendir` +* ## RETURN VALUE * CC : success * A = hDIR * CS : error @@ -23,21 +23,24 @@ K.OpenDir jsr PFT.CheckPathYA lda K.Buf256+1 One char ("/") ? beq .8 No, Go open dir.... - >MLICALL MLIGETFILEINFO + jsr FS.Stat bcs .98 file/dir does not exists....quit - lda K.MLI.PARAMS+4 - cmp #$0F Directory ? - bne .98 + + lda K.S.STAT+S.STAT.MODE+1 + and #$f0 + cmp /S.STAT.MODE.DIR + bne .97 jsr IO.MLI.OPEN - bcs .98 + bcs .98 .8 jsr STDIO.NewHFile + bcs .98 - bcc K.ReadDir.RTS +.9 rts + +.97 lda #MLI.E.UNSUPST .98 jmp UNISTD.Open.ERR - -.9 >RET 2 */-------------------------------------- * # ReadDir * ## C @@ -46,7 +49,7 @@ K.OpenDir jsr PFT.CheckPathYA * `>PUSHW dirent` * `lda hDIR` * `>SYSCALL readdir` -* ## RETURN VALUE +* ## RETURN VALUE * CC : success * X = hDIRENT * Y,A = PTR to S.DIRENT @@ -54,13 +57,15 @@ K.OpenDir jsr PFT.CheckPathYA * A = EC * note : A = 0 means no more entry *\-------------------------------------- - .DUMMY - .OR ZPTMP 8 Bytes + .DUMMY + .OR ZPTMP 9 Bytes K.ReadDir.hBlk .BS 1 K.ReadDir.ECIB .BS 1 + K.ReadDir.EL .BS 1 K.ReadDir.EPB .BS 1 K.ReadDir.EC .BS 2 + K.ReadDir.BufSize .BS 2 K.ReadDir.hBuf .BS 1 .ED @@ -71,9 +76,9 @@ K.ReadDir jsr PFT.CheckNodeA ldy #S.FD.REG.REF lda (pFD),y beq K.ReadDir.ROOT - + bpl .1 - + jmp K.ReadDir.DEV .1 jmp K.ReadDir.DIR @@ -97,10 +102,10 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? jsr K.ReadDir.GetBufYA bcs K.ReadDir.RTS - + lda #16 sta K.ReadDir.EC - + .1 lda (ZPPtr2) and #$0F beq .6 @@ -111,22 +116,22 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? lda #'/' sta K.MLI.PATH+1 ldy #1 - + .2 lda (ZPPtr2),y sta K.MLI.PATH+1,y jsr K.ReadDir.AddToBuf iny dex bne .2 - - txa Add ending 0 for C String + + txa Add ending 0 for C String jsr K.ReadDir.AddToBuf - + jsr SHARED.ClrStat lda /S.STAT.MODE.BDEV sta K.S.STAT+S.STAT.MODE+1 - + lda (ZPPtr2) asl DRIVE in Carry pha @@ -162,19 +167,19 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? sta ZPPtr2 bcc .7 inc ZPPtr2+1 - + .7 dec K.ReadDir.EC - bne .1 - + bne .1 + * lda #0 done by S.MEM.F.INIT0 * sta (ZPPtr4) Ending 0 ldy #S.FD.DIR.FC lda #16 - sta (pFD),y Flag that we returned something for next time + sta (pFD),y Flag that we returned something for next time jmp K.ReadDir.EXIT *-------------------------------------- -K.ReadDir.DEV +K.ReadDir.DEV jmp K.ReadDir.NoMore *-------------------------------------- K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF @@ -188,7 +193,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF pha tya * clc CC from K.GetMem - adc #4 Skip 4 bytes linked list + adc #4 Skip 4 bytes linked list sta ZPPtr2 PTR to Buffer for PASS #1 sta ZPPtr3 PTR to Buffer for PASS #2 pla @@ -214,6 +219,31 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF dex bpl .1 + ldx #8 + + ldy #16 + +.10 lda (ZPPtr2),y + pha + iny + dex + bne .10 + + ldx #8 + + ldy #S.FD.DIR.ACL+7 + +.20 pla + cpy #S.FD.DIR.MODE+1 + bne .30 + + and #$0F + +.30 sta (pFD),y + dey + dex + bne .20 + inc K.ReadDir.EC Add one to EC because we include VOL/DIR Header bne .4 @@ -316,15 +346,14 @@ K.ReadDir.DIR2 jsr K.ReadDir.GetBuf bne .3 jsr K.ReadDir.ADD. - jsr SHARED.DirEnt2Stat - jsr K.ReadDir.AddStat + jsr K.ReadDir.AddStatACL + jsr K.ReadDir.ADD.. bra .4 .3 jsr K.ReadDir.AddFNToBuf - -.4 jsr SHARED.DirEnt2Stat - jsr K.ReadDir.AddStat + +.4 jsr K.ReadDir.AddStatACL lda K.ReadDir.EC decrease global counter... sec @@ -345,7 +374,7 @@ K.ReadDir.DIR2 jsr K.ReadDir.GetBuf sta ZPPtr3 bcc .1 - inc ZPPtr3+1 + inc ZPPtr3+1 bra .1 .8 ldx #3 @@ -414,7 +443,7 @@ K.ReadDir.AddFNToBuf beq .3 lda (ZPPtr3),y - ora #$20 convert a-z to A-Z adding from $4x to $6x + ora #$20 convert a-z to A-Z adding from $4x to $6x sta (ZPPtr3),y .3 asl .2+1 @@ -432,7 +461,7 @@ K.ReadDir.AddFNToBuf tax ldy #1 -.8 lda (ZPPtr3),y +.8 lda (ZPPtr3),y jsr K.ReadDir.AddToBuf iny dex @@ -450,6 +479,29 @@ K.ReadDir.AddToBuf inc ZPPtr4+1 .8 rts *-------------------------------------- +K.ReadDir.AddStatACL + jsr FS.DirEnt2Stat + + ldy #S.FD.DIR.UID + ldx #S.STAT.UID + +.1 lda (pFD),y + sta K.S.STAT,x + iny + inx + cpx #S.STAT.GID+2 + bne .1 + + ldy #S.FD.DIR.MODE+1 + ldx #1 + +.2 lda (pFD),y + ora K.S.STAT+S.STAT.MODE,x + sta K.S.STAT+S.STAT.MODE,x + dey + dex + bpl .2 + K.ReadDir.AddStat ldy #0 @@ -468,7 +520,7 @@ K.ReadDir.AddStat * `lda hDIR` * `>SYSCALL closedir` * ## RETURN VALUE -* none, always succeed. +* none, always succeed. *\------------------------------------- *K.CloseDir .EQ K.FClose *-------------------------------------- diff --git a/SYS/KERNEL.S.FS.txt b/SYS/KERNEL.S.FS.txt index 2e474e91..32af7c7b 100644 --- a/SYS/KERNEL.S.FS.txt +++ b/SYS/KERNEL.S.FS.txt @@ -154,43 +154,32 @@ IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based * clc -.9 rts -*-------------------------------------- -SHARED.ClrStat ldx #S.STAT-1 - -.1 stz K.S.STAT,x - dex - bpl .1 - - lda CORE.FSID - sta K.S.STAT+S.STAT.FSID -SHARED.ClrStat.RTS - rts +.9 +FS.OPEN.RTS rts *-------------------------------------- FS.Stat bit CORE.FSID - bpl .1 + bmi FS.StatEX - >MLICALL MLIGETFILEINFOEX - bcs SHARED.ClrStat.RTS - - >LDYAI K.MLI.PARAMS+3 - >STYA ZPPtr3 - - jmp SHARED.DirEnt2Stat - -.1 >MLICALL MLIGETFILEINFO - bcs SHARED.ClrStat.RTS + >MLICALL MLIGETFILEINFO + bcs FS.OPEN.RTS jsr SHARED.ClrStat - lda K.MLI.PARAMS+S.FI.A - jsr SHARED.Access2Mode + lda K.MLI.PARAMS+S.FI.T + cmp #S.FI.T.DIR + bne .1 + + lda /S.STAT.MODE.DIR + sta K.S.STAT+S.STAT.MODE+1 + +.1 lda K.MLI.PARAMS+S.FI.A + jsr FS.Access2Mode - ldx #SHARED.GFI.Cnt + ldx #FS.GFI.Cnt -.3 ldy SHARED.GFI.Src-1,x +.3 ldy FS.GFI.Src-1,x lda K.MLI.PARAMS,y - ldy SHARED.Stat.Dst-1,x + ldy FS.Stat.Dst-1,x sta K.S.STAT,y dex bne .3 @@ -203,8 +192,13 @@ FS.Stat bit CORE.FSID ldx #K.S.STAT+S.STAT.MTIME jmp SHARED.PTime2StatYAX *-------------------------------------- -SHARED.DirEnt2Stat - jsr SHARED.ClrStat +FS.StatEX >MLICALL MLIGETFILEINFOEX + bcs FS.OPEN.RTS + + >LDYAI K.MLI.PARAMS+3 + >STYA ZPPtr3 +*-------------------------------------- +FS.DirEnt2Stat jsr SHARED.ClrStat lda (ZPPtr3) and #$F0 @@ -214,62 +208,75 @@ SHARED.DirEnt2Stat lda /S.STAT.MODE.DIR sta K.S.STAT+S.STAT.MODE+1 -.1 ldx #SHARED.DirEnt.Cnt +.1 ldx #FS.DirEnt.Cnt -.2 ldy SHARED.DirEnt.Src-1,x +.2 ldy FS.DirEnt.Src-1,x lda (ZPPtr3),y - ldy SHARED.Stat.Dst-1,x + ldy FS.Stat.Dst-1,x sta K.S.STAT,y dex bne .2 - ldy #$1E ProDOS Access + ldy #S.FIEX.ACCESS lda (ZPPtr3),y - jsr SHARED.Access2Mode + jsr FS.Access2Mode + + ldy #S.FIEX.ACL + lda (ZPPtr3),y + cmp #$57 + bne .7 - lda #$18 creation Date/time + ldy #S.FIEX.ACL.UID + lda (ZPPtr3),y + sta K.S.STAT+S.STAT.UID + + ldy #S.FIEX.ACL.GID + lda (ZPPtr3),y + sta K.S.STAT+S.STAT.GID + + ldy #S.FIEX.ACL.MOD + lda (ZPPtr3),y + tsb K.S.STAT+S.STAT.MODE + iny + lda (ZPPtr3),y + tsb K.S.STAT+S.STAT.MODE+1 + +.7 lda #S.FIEX.CTIME ldx #K.S.STAT+S.STAT.CTIME jsr SHARED.PTime2StatAX - lda #$21 mod Date/time + lda #S.FIEX.MTIME ldx #K.S.STAT+S.STAT.MTIME jmp SHARED.PTime2StatAX *-------------------------------------- -SHARED.Mode2Access - clc +SHARED.ClrStat ldx #S.STAT-1 + +.1 stz K.S.STAT,x + dex + bpl .1 + + lda CORE.FSID + sta K.S.STAT+S.STAT.FSID + rts *-------------------------------------- -SHARED.Access2Mode - and #S.FI.A.FULL +FS.Mode2Access clc + rts +*-------------------------------------- +FS.Access2Mode and #S.FI.A.FULL cmp #S.FI.A.FULL beq .7 - tay - ldx #S.STAT.MODE.RO+S.STAT.MODE.RG+S.STAT.MODE.RU+S.STAT.MODE.XO+S.STAT.MODE.XG+S.STAT.MODE.XU - bit #S.FI.A.W - beq .1 - txa - ora #S.STAT.MODE.WO - tax - tya + lda #S.STAT.MODE.XU -.1 asl D in C - - bpl .2 RN in N - txa - ora #S.STAT.MODE.WG - tax -.2 txa - bcc .8 - ora #S.STAT.MODE.WU .HS 2C BIT ABS -.7 lda #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU rwxrwxrwx +.7 lda #S.STAT.MODE.FU + .8 sta K.S.STAT+S.STAT.MODE - lda /S.STAT.MODE.RU ??????R?? - ora K.S.STAT+S.STAT.MODE+1 preserve DIR - sta K.S.STAT+S.STAT.MODE+1 + lda /S.STAT.MODE.RU + tsb K.S.STAT+S.STAT.MODE+1 preserve DIR rts *-------------------------------------- @@ -288,15 +295,16 @@ SHARED.PTime2StatYAX >SYSCALL2 PTime2Time rts *-------------------------------------- -SHARED.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1 +FS.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1 .DA #S.FI.UBLKS,#S.FI.UBLKS+1 -SHARED.GFI.Cnt .EQ *-SHARED.GFI.Src +FS.GFI.Cnt .EQ *-FS.GFI.Src *-------------------------------------- -SHARED.DirEnt.Src - .HS 10.1f20.1314.151617 -SHARED.DirEnt.Cnt .EQ *-SHARED.DirEnt.Src +FS.DirEnt.Src .DA #S.FIEX.T,#S.FIEX.AUXTYPE,#S.FIEX.AUXTYPE+1 + .DA #S.FIEX.BLKUSED,#S.FIEX.BLKUSED+1 + .DA #S.FIEX.EOF,#S.FIEX.EOF+1,#S.FIEX.EOF+2 +FS.DirEnt.Cnt .EQ *-FS.DirEnt.Src *-------------------------------------- -SHARED.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 +FS.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1 .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 .DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2 *-------------------------------------- diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index 13c894d7..686de0c4 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -203,8 +203,38 @@ PWDX.PutPW.1 jsr K.GetmemPtr sec .99 rts *-------------------------------------- -PWDX.GetGRGID +PWDX.GetGRGID lda PWD.hGrpDB + beq PWD.GetGR.9 + jsr K.GetmemPtr + >STYA ZPPtr3 + +.1 lda (ZPPtr3) + beq PWD.GetGR.99 EOF + + ldy #0 + jsr PWD.NextString skip USERNAME + + jsr PWD.GetByte get UID + cmp ZPPtr1+1 + beq PWD.GetGR.8 + + jsr PWD.NextLine + bra .1 + +PWD.GetGR.8 ldx FORPNT+1 + beq .8 Dry run, no output + jmp PWD.Record2GR + +.8 clc a = UID + rts + +PWD.GetGR.9 lda #E.IPWDDB + .HS 2C BIT ABS + +PWD.GetGR.99 lda #E.IUSR + sec +PWD.GetGR.RTS rts *-------------------------------------- PWDX.GetGRName @@ -385,24 +415,6 @@ PWD.FindRecord lda PWD.hUsrDB sec rts *-------------------------------------- -PWD.NextString lda (ZPPtr3),y - iny - cmp #':' - bne PWD.NextString - rts -*-------------------------------------- -PWD.NextLine iny - lda (ZPPtr3),y - cmp #C.CR - bne PWD.NextLine - tya - sec - adc ZPPtr3 - sta ZPPtr3 - bcc .8 - inc ZPPtr3+1 -.8 rts -*-------------------------------------- * USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR *-------------------------------------- PWD.Record2Session @@ -412,9 +424,14 @@ PWD.Record2Session jsr PWD.NextString skip PASSWORD jsr PWD.GetByte get UID sta ZPPtr1 + + iny + jsr PWD.GetByte get GID sta ZPPtr1+1 + iny + lda #0 ldx ZPPtr1 bne .1 @@ -475,9 +492,11 @@ PWD.Record2PW ldy #0 iny cmp #':' beq .2 + jsr SHARED.FORPNT.PutNext inx bra .1 + .2 lda #0 jsr SHARED.FORPNT.PutNext inx @@ -502,9 +521,13 @@ PWD.Record2PW ldy #0 jsr PWD.GetByte UID jsr SHARED.FORPNT.PutNext + iny + jsr PWD.GetByte GID jsr SHARED.FORPNT.PutNext + iny + ldx #S.PW.GECOS .5 lda (ZPPtr3),y @@ -546,10 +569,59 @@ PWD.Record2PW ldy #0 clc rts *-------------------------------------- -PWD.GetByte stz .8+1 +PWD.Record2GR ldy #0 + + ldx #0 NAME .1 lda (ZPPtr3),y iny + cmp #':' + beq .2 + + jsr SHARED.FORPNT.PutNext + inx + bra .1 + +.2 lda #0 + jsr SHARED.FORPNT.PutNext + + jsr PWD.GetByte UID + jsr SHARED.FORPNT.PutNext + + clc + rts +*-------------------------------------- +PWD.NextString lda (ZPPtr3),y + beq .8 + + iny + cmp #':' + bne PWD.NextString +.8 rts +*-------------------------------------- +PWD.NextLine lda (ZPPtr3),y + beq .8 + + iny + cmp #C.CR + bne PWD.NextLine + + tya + clc + adc ZPPtr3 + sta ZPPtr3 + bcc .8 + inc ZPPtr3+1 +.8 rts +*-------------------------------------- +PWD.GetByte stz .8+1 + +.1 lda (ZPPtr3),y + beq .8 + + cmp #C.CR + beq .8 + cmp #':' beq .8 @@ -566,6 +638,9 @@ PWD.GetByte stz .8+1 clc adc .8+1 sta .8+1 + + iny + bra .1 .8 lda #$ff SELF MODIFIED @@ -574,7 +649,6 @@ PWD.GetByte stz .8+1 rts *-------------------------------------- PWD.AppendRecord - .1 lda (ZPPtr3) beq .8 @@ -636,10 +710,10 @@ PWD.GetRecordLen PWD.GetRecordLen.RTS rts *-------------------------------------- -PWD.StoreString iny - jsr SHARED.TXTPTR.GetY +PWD.StoreString jsr SHARED.TXTPTR.GetY beq PWD.GetRecordLen.RTS jsr PWD.StoreChar + iny bra PWD.StoreString *-------------------------------------- PWD.StoreByte php @@ -647,7 +721,9 @@ PWD.StoreByte php jsr MATH32.A2STR10NP plx plp + ldy #0 + .1 lda A2osX.NumStrBuf,y beq PWD.GetRecordLen.RTS iny