Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-04-15 06:40:13 +01:00
parent 5aa1fae67a
commit e27211b92e
18 changed files with 338 additions and 228 deletions

View File

@ -40,7 +40,7 @@ CS.START cld
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #64 SS
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------

View File

@ -533,7 +533,7 @@ Mod2CSTR ldy #S.STAT.MODE+1
ldy #S.STAT.MODE
lda (ZPFileStat),y
ldy #MOD+1
.1 lsr

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
@ -114,7 +113,7 @@ CS.RUN.DUMP phx
lda (ZPPSPtr),y
>PUSHA Parent PID
ldy #S.PS.UID
ldy #S.PS.hUsr
lda (ZPPSPtr),y
>PUSHA
@ -205,7 +204,7 @@ MSG0 .AZ "\e[7lID CPU\% Flags UID PID Command Line\r\n"
MSG1 .AZ "%03d %3d\% %s %03d %03d"
MSG2 .AZ " %s"
MSG3 .AZ "\r\n"
MSG.FLAGS .AS "IRQDHSed"
MSG.FLAGS .AS "IRQDHSEN"
*--------------------------------------
.DUMMY
.OR 0

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
*--------------------------------------
CMD.NOHUP >LDA.G CORE.PSFlags
@ -319,7 +318,7 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`"
jsr IO.Pipe.Out
bcs .9
>PUSHBI S.PS.F.DUPENV
>PUSHBI 0
>LDYA ZPArgVBufPtr
>SYSCALL execl
bcs .9
@ -1027,7 +1026,7 @@ FOR.EXEC jsr CORE.ArgV.NextChar skip "`"
jsr IO.Pipe.Out
bcs .9
>PUSHBI S.PS.F.DUPENV
>PUSHBI 0
>LDYA ZPArgVBufPtr
>SYSCALL execl
bcs .9

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
*--------------------------------------
CORE.Init >LDYAI 256
@ -61,7 +60,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping
lda #0 Reset ArgV Buffer
sta (ZPArgVBuf)
lda #S.PS.F.HOLD+S.PS.F.DUPENV
lda #S.PS.F.HOLD
>STA.G CORE.PSFlags
lda #$ff

112
BIN/WHO.S.txt Normal file
View File

@ -0,0 +1,112 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/WHO
*--------------------------------------
.INB INC/MACROS.I
.INB INC/MLI.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
USRID .BS 1
ZPPWPtr .BS 2
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 0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >LDYA L.MSG0
>SYSCALL puts
ldx #1
stx USRID
>DEBUG
.1 lda USR.Table.hPW-1,x
beq .7
lda USR.Table.hFile-1,x
tax
lda OF.Table.hPath-1,x
>SYSCALL GetMemPtr
>PUSHYA
ldx USRID
lda USR.Table.hPW-1,x
>SYSCALL GetMemPtr
>STYA ZPPWPtr
lda ZPPWPtr
clc
adc #19
tay
lda ZPPWPtr+1
adc #0
>PUSHYA
>PUSHB USRID
>PUSHBI 5
>LDYA L.MSG1
>SYSCALL printf
.7 inc USRID
ldx USRID
cpx #K.USR.MAX+1
bne .1
.8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
.9 rts
*--------------------------------------
CS.EVENT sec
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
CS.END
MSG0 .AZ "Usr Name Dev"
MSG1 .AZ "%3d %16s %16s\r\n"
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/WHO.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*--------------------------------------
K.VER .EQ $5D00 93.0
K.ENV.SIZE .EQ 256
@ -20,17 +19,17 @@ K.OF.MAX .EQ 32
K.EVT.MAX .EQ 4
K.SCR.MAX .EQ 6
K.TTY.MAX .EQ 4
K.USR.MAX .EQ 16
*--------------------------------------
ZPDRV .EQ $20 32 bytes
ZPLIB .EQ $40 32 bytes
*--------------------------------------
* PS Context : 48 bytes MAX
*--------------------------------------
CORE.EvtIndex .EQ $D0
CORE.EvtCount .EQ $D1
CORE.PSIndex .EQ $D2
CORE.PSCount .EQ $D3
CORE.PSIndex .EQ $D0
CORE.PSCount .EQ $D1
pUser .EQ $D2
pEvent .EQ $D4
pPs .EQ $D6
*--------------------------------------
@ -491,7 +490,6 @@ S.FD.PIPE .EQ 10
* PS STRUCT
*--------------------------------------
S.PS.F .EQ 0
S.PS.F.NOHUP .EQ %10000000
S.PS.F.INIT .EQ %10000000
S.PS.F.RUN .EQ %01000000
S.PS.F.QUIT .EQ %00100000
@ -499,7 +497,7 @@ S.PS.F.DOEVENT .EQ %00010000
S.PS.F.HOLD .EQ %00001000
S.PS.F.SLEEP .EQ %00000100
S.PS.F.EVENT .EQ %00000010
S.PS.F.DUPENV .EQ %00000001
S.PS.F.NOHUP .EQ %00000001
S.PS.PPID .EQ 1
S.PS.PID .EQ 2
S.PS.CPID .EQ 3
@ -516,7 +514,7 @@ S.PS.RC .EQ 13
S.PS.ARGC .EQ 14
S.PS.hARGV .EQ 15
S.PS.UID .EQ 16
S.PS.hUsr .EQ 16
S.PS.A .EQ 17
S.PS.X .EQ 18
@ -580,12 +578,15 @@ 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
*S.STAT.MODE.SUID .EQ $0800

View File

@ -21,7 +21,10 @@ PS.Table.Stats .EQ $13E0 K.PS.MAX
OF.Table.hPath .EQ $1400 K.OF.MAX
OF.Table.hFD .EQ $1420 K.OF.MAX
*--------------------------------------
A2osX.EndTables .EQ $1440
USR.Table.hPW .EQ $1440 K.USR.MAX
USR.Table.hFile .EQ $1450 K.USR.MAX
*--------------------------------------
A2osX.EndTables .EQ $1460
*--------------------------------------
MAN
SAVE INC/KERNEL.I

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
@ -8,11 +7,19 @@ AUTO 4,1
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBCRYPT.I
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZPRetryCnt .BS 1
ZPbValidUser .BS 1
ZPhGetLine .BS 1
ZPGetLinePtr .BS 2
ZPbGetLineSecret .BS 1
ZPGetLineLen .BS 1
ZPGetLineMax .BS 1
ZS.END
.ED
*--------------------------------------
@ -28,7 +35,7 @@ CS.START cld
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
@ -42,8 +49,9 @@ L.MSG.NOPASSWD .DA MSG.NOPASSWD
L.LIBCRYPT .DA LIBCRYPT
L.MSG.LOGIN .DA MSG.LOGIN
L.MSG.PASSWORD .DA MSG.PASSWORD
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.ECHODEL .DA MSG.ECHODEL
L.MSG.BAD .DA MSG.BAD
L.MSG.CRLF .DA MSG.CRLF
L.MSG.BS .DA MSG.BS
L.ENV.SHELL .DA ENV.SHELL
L.SHELL .DA SHELL
L.ENV.HOME .DA ENV.HOME
@ -53,7 +61,7 @@ L.HOME .DA HOME
CS.INIT clc
rts
*--------------------------------------
CS.RUN >PUSHEA.G PW
CS.RUN >PUSHW pData PW
lda #0
>SYSCALL GetPWUID
bcc CS.RUN.AUTH
@ -66,7 +74,7 @@ CS.RUN >PUSHEA.G PW
jsr CS.RUN.SETENV
bcs CS.RUN.9
>PUSHBI S.PS.F.HOLD+S.PS.F.DUPENV
>PUSHBI S.PS.F.HOLD
>LDYA L.SHELL
>SYSCALL ExecL
CS.RUN.9 rts
@ -77,51 +85,82 @@ CS.RUN.AUTH >LDYA L.LIBCRYPT
sta hLIBCRYPT
>STZ.G INPUT.PrevCR
>LDYAI 256
>SYSCALL getmem
bcs CS.RUN.9
>PUSHBI 0
>STYA ZPGetLinePtr
stx ZPhGetLine
lda #3
sta ZPRetryCnt
.1 >PUSHBI 0
>LDYA L.MSG.LOGIN
>SYSCALL printf
bcs .9
lda #0 Echo all caracters
jsr INPUT.RESET
.1 >SYSCALL GetChar
lda #16
clc
jsr CS.RUN.GetLine
bcs .9
jsr INPUT.CHARIN
jsr INPUT.LINEIN
bcc .1
>PUSHW pData
>LDYA ZPGetLinePtr
>SYSCALL GetPWName
ror ZPbValidUser
>PUSHBI 0
>LDYA L.MSG.PASSWORD
>SYSCALL printf
bcs .9
lda #'*'
jsr INPUT.RESET
.2 >SYSCALL GetChar
lda #128
sec
jsr CS.RUN.GetLine
bcs .9
jsr INPUT.CHARIN
jsr INPUT.LINEIN
bcc .2
>PUSHBI 0
>LDYA L.MSG.ECHOCRLF
>LDYA L.MSG.CRLF
>SYSCALL printf
bcs .9
jsr CS.RUN.SETENV
jsr CS.RUN.CHECK
bcc CS.RUN.LOGIN
>PUSHBI 0
>LDYA L.MSG.BAD
>SYSCALL printf
bcs .9
>PUSHBI S.PS.F.HOLD+S.PS.F.DUPENV
dec ZPRetryCnt
bne .1
lda #E.IUSR
* sec
.9 rts
*--------------------------------------
CS.RUN.LOGIN jsr CS.RUN.SETENV
bcs .9
>PUSHBI S.PS.F.HOLD
>LDYA L.SHELL
>SYSCALL ExecL
.9 rts
*--------------------------------------
CS.RUN.CHECK rol ZPbValidUser
bcs .9
>PUSHW ZPGetlinePtr
>PUSHW ZPGetlinePtr
>LIBCALL hLIBCRYPT,LIBCRYPT.MD5
>PUSHEA.G PW+S.PW.PASSWD
>LDYA ZPGetlinePtr
>SYSCALL strcmp
.9 rts
*--------------------------------------
CS.RUN.SETENV >PUSHW L.HOME
>LDYA L.ENV.HOME
>SYSCALL setenv
@ -140,7 +179,12 @@ CS.DOEVENT
sec
rts
*--------------------------------------
CS.QUIT lda hLIBCRYPT
CS.QUIT lda ZPhGetLine
beq .1
>SYSCALL freemem
.1 lda hLIBCRYPT
beq .8
>SYSCALL UnloadLib
@ -148,105 +192,70 @@ CS.QUIT lda hLIBCRYPT
.8 clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
INPUT.RESET >STA.G INPUT.PassChar
>STZ.G INPUT.BUF
>STA.G INPUT.Status
rts
*--------------------------------------
INPUT.CHARIN tax save char...
>LDA.G INPUT.Status
bmi .9
CS.RUN.GetLine sta ZPGetLineMax
ror ZPbGetLineSecret
stz ZPGetLineLen
lda #INPUT.BUF
clc
adc pData
sta ZPPTR1
lda pData+1
adc /INPUT.BUF
sta ZPPTR1+1
cpx #$20 Control Char?
bcc .2
cpx #C.DEL
beq INPUT.CHARIN.DEL
lda (ZPPTR1)
cmp #INPUT.BUF.SIZE Buffer full?
beq .9
inc
sta (ZPPTR1)
tay
txa
sta (ZPPTR1),y
>LDA.G INPUT.PassChar
bne .1
txa
.1 >SYSCALL PutChar
.1 >SYSCALL getchar
bcs .9
>STZ.G INPUT.PrevCR
rts
cmp #C.SPACE
bcc .2
.2 cpx #C.CR
bne .3
txa
>STA.G INPUT.PrevCR
lda #$80
>STA.G INPUT.Status
rts
.3 cpx #C.LF
bne .4
>LDA.G INPUT.PrevCR
ldy ZPGetLineLen
cpy ZPGetLineMax
beq .1
.4 >STZ.G INPUT.PrevCR
sta (ZPGetLinePtr),y
iny
sty ZPGetLineLen
.9 rts
*--------------------------------------
INPUT.CHARIN.DEL
lda (ZPPTR1)
bit ZPbGetLineSecret
bmi .1
>SYSCALL putchar
bra .1
.2 cmp #3 Ctrl-C
beq .9
cmp #C.CR
beq .8
dec
sta (ZPPTR1)
cmp #C.BS
bne .1
ldy ZPGetLineLen
beq .1
dec ZPGetLineLen
bit ZPbGetLineSecret
bmi .1
>PUSHBI 0
>LDYA L.MSG.ECHODEL
>LDYA L.MSG.BS
>SYSCALL printf
bra .1
.8 clc
rts
*--------------------------------------
INPUT.LINEIN ldy #INPUT.Status
lda (pData),y
asl CS if a line is in the buffer
rts
.8 ldy ZPGetLineLen
lda #0
sta (ZPGetLinePtr),y
clc
.9 rts
*--------------------------------------
CS.END
*--------------------------------------
LIBCRYPT .AZ "libcrypt"
hLIBCRYPT .BS 1
MSG.NOPASSWD .AS "\r\n\r\nA2osX-Login:No ETC/PASSWD file present, Logged as ROOT.\r\n"
.AZ "Consider adding ROOT password with USERADD command.\r\n\r\n"
.AS "Consider adding ROOT password with USERADD command.\r\n"
MSG.CRLF .AZ "\r\n"
MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:"
MSG.ECHOCRLF .AZ "\r\n"
MSG.ECHODEL .DA #C.BS,#C.SPACE,#C.BS,#0
MSG.BAD .AZ "Bad user or password\r\n"
MSG.BS .DA #C.BS,#C.SPACE,#C.BS,#0
ENV.SHELL .AZ "SHELL"
ENV.HOME .AZ "HOME"
SHELL .AZ "${ROOT}BIN/SH"
@ -256,10 +265,6 @@ HOME .AZ "${ROOT}ROOT/"
.DUMMY
.OR 0
DS.START
INPUT.BUF .BS INPUT.BUF.SIZE+1
INPUT.Status .BS 1
INPUT.PassChar .BS 1
INPUT.PrevCR .BS 1
PW .BS S.PW
DS.END
.ED

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
@ -214,7 +213,7 @@ CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK
>LEA.G CmdBuf
>SYSCALL sprintf
>PUSHBI S.PS.F.DUPENV
>PUSHBI 0
>LEA.G CmdBuf
>SYSCALL execl
bcc .8

View File

@ -145,37 +145,6 @@ CORE.UpdateParentPS
eor #S.PS.F.HOLD release Parent PS HOLD...
sta (ZPPtr1)
lda (pPs)
bit #S.PS.F.DUPENV
bne .8
ldy #S.PS.hENV no dup, check if updating Parent PS
jsr .1
ldy #S.PS.hPREFIX
*--------------------------------------
.1 lda (pPs),y hMEM...
cmp (ZPPtr1),y
beq .8 same, no update
tax save new hMEM
lda #0
sta (pPs),y reset
lda (ZPPtr1),y get parent hMEM
phy
jsr K.freemem discard....
ply
txa put new hMEM in parent
sta (ZPPtr1),y
cpy #S.PS.hENV
bne .8
dey #S.PS.ENVPAGECNT
lda (pPs),y
sta (ZPPtr1),y update page count
.8 rts
*--------------------------------------
* CORE.GetEvents :
@ -537,14 +506,10 @@ CORE.PSFree sta .10+1 Save PS ID
ldy #S.PS.hARGV
jsr .8
lda (ZPPtr1) get S.PS.F
and #S.PS.F.DUPENV do we have to discard duplicated env ?
beq .1
ldy #S.PS.hENV
jsr .8
.1 ldy #S.PS.hPREFIX
ldy #S.PS.hPREFIX
jsr .8
ldy #S.PS.hStdOut
@ -583,6 +548,9 @@ CORE.PSFree sta .10+1 Save PS ID
bne .4
.9 rts
*--------------------------------------
CORE.EvtIndex .BS 1
CORE.EvtCount .BS 1
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.CORE
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -468,20 +468,11 @@ K.ReadDir.ADDF
K.ReadDir.AddAccess
ldy #$1E ProDOS Access
lda (ZPPtr3),y
jsr STAT.Access2Mode
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 K.S.STAT+S.STAT.MODE
sty K.S.STAT+S.STAT.MODE
sta K.S.STAT+S.STAT.MODE+1
*--------------------------------------
K.ReadDir.AddTime
>PUSHWI K.S.STAT+S.STAT.CTIME

View File

@ -544,7 +544,7 @@ ENV.StrVarsPWD ldy #S.PS.hPREFIX
jsr K.GetMemPtr
jmp ENV.AddYAToBuf
*--------------------------------------
ENV.StrVarsUID ldy #S.PS.UID
ENV.StrVarsUID ldy #S.PS.hUsr
.HS 2C
*--------------------------------------
ENV.SysVarsArgC ldy #S.PS.ARGC

View File

@ -334,6 +334,12 @@ MemMgrInit >LDYAI Mem.MHiMem
dex
bpl .5
ldx #K.USR.MAX*2-1
.6 stz USR.Table.hPW,x
dex
bpl .6
rts
*--------------------------------------
SysScrInit lda #"S"
@ -1075,11 +1081,38 @@ PwdMgrInit >LDYAI MSG.PWD
>PUSHBI O.RDONLY
>LDYAI ETCPASSWD
>SYSCALL LoadStkObj
bcs .9
bcs .1
stx PWD.hDB
>STYA PWD.DBSize
.9 rts
*--------------------------------------
.1 >LDYAI PwdMgr.ROOT.Size
jsr K.Getmem
>STYA pUser
stx USR.Table.hPW
ldy #PwdMgr.ROOT.Size-1
.2 lda PwdMgr.ROOT,y
sta (pUser),y
dey
bpl .2
ldy #S.PS.hStdIn
lda (pPS),y
sta USR.Table.hFile
rts
*--------------------------------------
PwdMgr.ROOT .DA #0 UID
.DA #0 GID
.BS 17 PASSWD
.AZ "ROOT" NAME
.AZ "Root User" GECOS
.AZ "${ROOT}ROOT/" DIR
.AZ "${ROOT}BIN/SH" SHELL
PwdMgr.ROOT.Size .EQ *-PwdMgr.ROOT
*--------------------------------------
* Modified CHARGET/CHARGOT for ROM CALL
* CHRGET .EQ $B1 - C8
*--------------------------------------

View File

@ -537,7 +537,7 @@ MEM.Kernel.JMP jmp (SYS.Kernel.JMP,x)
* Y,A = File Length
* X = hMem of Loaded Object in AUX mem
*\--------------------------------------
K.LoadStkObj >SYSCALL LoadFile
K.LoadStkObj >SYSCALL LoadTxtFile To get ending \0
bcs .99
sty .81+1
sta .82+1
@ -569,11 +569,6 @@ K.LoadStkObj >SYSCALL LoadFile
sec Main To Aux
jsr AuxMove
lda #0
sta SETWRITEAUX
sta (A2L)
sta CLRWRITEAUX
.8 lda #$ff SELF MODIFIED
jsr K.FreeMem release MAIN memory

View File

@ -151,26 +151,12 @@ PS.CreateChild ldx #0
ldy #S.PS.hPREFIX
sta (PS.NewPSPtr),y
lda #S.PS.F.DUPENV
bit PS.Flags need to create ENV ?
beq .6 no...
sta (PS.NewPSPtr) Mark this PS with DUPENV flag
jsr ENV.Dup dup hENV from parent PS
bcs .9
ldy #S.PS.hENV
bra .8 A = hMem, X = PageCnt
.6 ldy #S.PS.ENVPAGECNT reuse hENV/pageCnt from parent PS
lda (pPs),y
tax
iny
lda (pPs),y
.8 sta (PS.NewPSPtr),y
sta (PS.NewPSPtr),y
txa
dey
sta (PS.NewPSPtr),y
@ -183,8 +169,9 @@ PS.CreateChild ldx #0
cpy #S.PS.hStdErr+1
bne .81
bit PS.Flags S.PS.F.NOHUP
bmi .5
lda #S.PS.F.NOHUP
bit PS.Flags
bne .5
ldy #S.PS.PID
lda (pPs),y

View File

@ -66,14 +66,21 @@ PWD.GetPWName lda PWD.hDB
jsr K.GetmemPtr
>STYA ZPPtr3
>LDYA ZPPtr1
>STYA TXTPTR
ldy #0
jsr MEM.TXTPTR.GetY
beq .99
.1 lda (ZPPtr3)
beq .99
ldy #$ff
.2 iny
lda (ZPPtr1),y
jsr MEM.TXTPTR.GetY
beq .4
cmp (ZPPtr3),y
@ -140,7 +147,9 @@ PWD.InitDB jsr PWD.GetRecordLen
clc
.9 rts
*--------------------------------------
PWD.Record2PM ldy #0
PWD.Record2PM sta CLRWRITEAUX
ldy #0
ldx #0 NAME
@ -223,6 +232,9 @@ PWD.Record2PM ldy #0
.10 lda #0
jsr MEM.PutCharPtr2
sta SETWRITEAUX
clc
rts
*--------------------------------------

View File

@ -131,22 +131,17 @@ K.Stat.I >PULLW ZPPtr1 Get StatBuf
>MLICALL MLIGETFILEINFO
bcs .9
lda K.MLI.PARAMS+S.FI.A
jsr STAT.Access2Mode
ldx K.MLI.PARAMS+S.FI.A
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
cpx #S.FI.A.FULL
beq .2
lda #S.STAT.MODE.XO+S.STAT.MODE.RO
cpx #S.FI.A.R
beq .2
lda #0
.2 ldy #S.STAT.MODE
.2 phy
ldy #S.STAT.MODE+1
sta (ZPPtr1),y
dey
pla
sta (ZPPtr1),y
ldx #K.Stat.DST-K.Stat.SRC
.3 ldy K.Stat.SRC-1,x
@ -165,6 +160,18 @@ K.Stat.SRC .DA #S.FI.T
K.Stat.DST .DA #S.STAT.P.TYPE
.DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
*--------------------------------------
STAT.Access2Mode
and #S.FI.A.FULL
cmp #S.FI.A.FULL
bne .1
ldy #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU
lda /S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU
rts
.1 ldy #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.XU+S.STAT.MODE.RU
lda /S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.XU+S.STAT.MODE.RU
rts
*/-------------------------------------
* # MKDir
* create a directory