Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-07-13 21:29:31 +02:00
parent 975a731fa9
commit 691fa6a923
15 changed files with 420 additions and 271 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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 "<no-date>"
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

View File

@ -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 "<No-Date>"
FMT.DateTime .AZ "%d-%b-%y %H:%M:%S"
*--------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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
*--------------------------------------

View File

@ -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