Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-09-09 17:38:37 +02:00
parent e3b51a6017
commit 3bfe0a6921
2 changed files with 106 additions and 142 deletions

View File

@ -1307,7 +1307,9 @@ CMD.NEXT.LINE lda (pData)
lda #0 lda #0
* clc * clc
.9 rts .9
CMD.NEXT.LINE.RTS
rts
*-------------------------------------- *--------------------------------------
CMD.WHILE CMD.WHILE
CMD.IF jsr CORE.StkGetCtx CMD.IF jsr CORE.StkGetCtx
@ -1316,23 +1318,22 @@ CMD.IF jsr CORE.StkGetCtx
beq .3 beq .3
jsr EXP.TEST jsr EXP.TEST
bcs .9 bcs CMD.NEXT.LINE.RTS
.3 lda CORE.IntCmd .3 lda CORE.IntCmd
cmp #C.WHILE cmp #C.WHILE
bne .8 bne .8
lda #3
jsr CORE.StkCheck
bcs CMD.NEXT.LINE.RTS
>LDYA ZPInputCmdPtr >LDYA ZPInputCmdPtr
jsr CORE.StkPushYA Push BEFORE WHILE/IF jsr CORE.StkPushYA Push BEFORE WHILE/IF
bcs .9
.8 lda CORE.TestResult .8 lda CORE.TestResult
ora CORE.IntCmd ora CORE.IntCmd
jsr CORE.StkPush jmp CORE.StkPush
clc
.9 rts
*-------------------------------------- *--------------------------------------
CMD.LOOP jsr CORE.StkPull CMD.LOOP jsr CORE.StkPull
bcs .9 bcs .9

View File

@ -12,30 +12,23 @@ NEW
.OR ZPDRV .OR ZPDRV
ENV.SearchPath .BS 2 ENV.SearchPath .BS 2
ENV.BufLen .BS 1 ENV.BufLen .BS 1
ENV.VarEndChar .BS 1
ENV.bNoExp .BS 1 ENV.bNoExp .BS 1
ENV.VarLen .BS 1
ENV.hMem .BS 1 ENV.hMem .BS 1
ENV.bInVar .BS 1
ENV.bExp .BS 1 ENV.bExp .BS 1
ENV.VarName .BS 16
.ED .ED
*-------------------------------------- *--------------------------------------
K.ExpandStr stz ENV.hMem Reset Intermediate string... K.ExpandStr stz ENV.hMem Reset Intermediate string...
.1 >STYA ZPPtr2 .1 >STYA ZPPtr1
stz ENV.BufLen init Expanded String len=0 stz ENV.BufLen init Expanded String len=0
stz ENV.bExp No var found yet stz ENV.bExp No var found yet
stz ENV.bNoExp Reset no expand flag stz ENV.bNoExp Reset no expand flag
ldy #0 .10
.11 jsr SHARED.GetCharPtr1 End of CSTR?
.10 stz ENV.VarLen beq .80
stz ENV.bInVar reset In var flag
.11 lda (ZPPtr2),y End of CSTR?
beq .8
iny
cmp #''' cmp #'''
bne .21 bne .21
@ -51,64 +44,71 @@ K.ExpandStr stz ENV.hMem Reset Intermediate string...
.22 jsr ENV.AddAToBuf .22 jsr ENV.AddAToBuf
bra .11 bra .11
.23 ldx ENV.bInVar already in a var? .23 cmp #'$' no, found one ?
bne .3 yes...
cmp #'$' no, found one ?
bne .22 no, store... bne .22 no, store...
ror ENV.bExp Toggle Expanded flag ror ENV.bExp Toggle Expanded flag
sta ENV.bInVar Set In Var flag lda (ZPPtr1)
bne .3
bra .11 skip this char lda #'$' End of string, output $
bra .22
.3 cmp #'{' we are in var, "{" after "$"? .3 stz ENV.VarEndChar
cmp #'{' "${VAR]""?
bne .31 bne .31
ldx ENV.VarLen No char in var yet ?
beq .11 normal, "${" syntax is ok,skip
bne .5 not allowed char in varname, end of var dec ENV.VarEndChar "}" expected
.31 cmp #'}' end of var? jsr SHARED.NextCharPtr1 skip "{"
beq .50 bra .40
jsr SHARED.IsIDValid _,.,a-z,A-Z,0-9 ? .31 jsr ZP.IsDigit $0 ... $9 ?
bcc .32 yes, add to varname bcs .32
ldx ENV.VarLen and #$0f
bne .5 varname has already chars...end of var
inx must be a $? or ?x.....go expand jsr K.ArgV
stx ENV.VarLen bcs .10 Arg# is undefined, do not append anything
sta ENV.VarName
bra .51 go Expand....
.32 ldx ENV.VarLen jsr ENV.AddYAToBuf
cpx #16 bra .10
beq .11 varname longer than 15....ignore
sta ENV.VarName,x .32 ldx #ENV.SysVars.Cnt-1
inx
stx ENV.VarLen
bra .11
.5 dey last char was invalid...move back .33 cmp ENV.SysVars,x
beq .34
dex
bpl .33
bra .40
.50 ldx ENV.VarLen .34 txa
beq .10 var name is empty...start over bne .35
.51 stz ENV.VarName,x jsr ENV.SysVarsAllArgs
phy save current index bra .10
jsr ENV.GetValue
ply restore index in string...
.52 bra .10 reset start flag and continue
.8 ldx ENV.VarLen end of STR,are we in a var? .35 ldy ENV.SysVars.PS-1,x
beq .80 no...exit... lda (pPS),y
jsr ENV.SysVarsNum
bra .10
stz ENV.VarName,x .40
jsr ENV.GetValue yes, expand and add to STR
.50 jsr ENV.FindVarP1
bcs .10
jsr SHARED.AddYToPtr1
jsr ENV.NextEnvP3
jsr ENV.AddP3ToBuf
.70 lda ENV.VarEndChar
beq .10
jsr SHARED.GetCharPtr1 skip "}"
jmp .10
.80 lda ENV.hMem working from our temp string ? .80 lda ENV.hMem working from our temp string ?
beq .81 no... beq .81 no...
@ -126,6 +126,8 @@ K.ExpandStr stz ENV.hMem Reset Intermediate string...
bit ENV.bExp SELF MODIFIED Did we expand something ? bit ENV.bExp SELF MODIFIED Did we expand something ?
bpl K.FileSearch.RTS No, exit with Y,A from STRDUP bpl K.FileSearch.RTS No, exit with Y,A from STRDUP
jmp .1 Yes, start over with hPStr jmp .1 Yes, start over with hPStr
.99 >DEBUG
rts
*/-------------------------------------- */--------------------------------------
* # FileSearch * # FileSearch
* Search a file in the provided PATH list * Search a file in the provided PATH list
@ -400,7 +402,7 @@ K.GetEnv >STYA ZPPtr1
jsr ENV.NextEnvP3 Skip NAME jsr ENV.NextEnvP3 Skip NAME
clc just in case ADC in NextEnvPtr3 disturb CC clc just in case ADC in NextEnvPtr3 disturb CC
.9 >LDYA ZPPtr3 .9 >LDYA ZPPtr3 \0
rts rts
*/-------------------------------------- */--------------------------------------
* # UnsetEnv * # UnsetEnv
@ -424,13 +426,6 @@ K.UnsetEnv.I.9 rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
ENV.GetValue jsr ENV.ExpandSysVar
bcc K.UnsetEnv.I.9
>LDYAI ENV.VarName
jsr K.GetEnv
bcs K.UnsetEnv.I.9
*--------------------------------------
ENV.AddYAToBuf >STYA ZPPtr3 ENV.AddYAToBuf >STYA ZPPtr3
*-------------------------------------- *--------------------------------------
ENV.AddP3ToBuf ldx ENV.BufLen ENV.AddP3ToBuf ldx ENV.BufLen
@ -446,75 +441,37 @@ ENV.AddP3ToBuf ldx ENV.BufLen
stx ENV.BufLen stx ENV.BufLen
rts rts
*-------------------------------------- *--------------------------------------
* ENV.ExpandSysVar
* In:
* ENV.VarLen,ENV.VarName
* Out:
* CC: Found
* Append VALUE to K.Buf256
* CS: Not Found
*--------------------------------------
ENV.ExpandSysVar ENV.ExpandSysVar
ldx ENV.VarLen >LDYAI ENV.StrVars
cpx #1 is name 1 char?
bne .4
lda ENV.VarName
jsr ZP.IsDigit $0...$9 ??
bcs .1
and #$0F
jsr K.ArgV
bcs K.UnsetEnv.I.8 Arg# is undefined, do not append anything
jmp ENV.AddYAToBuf
.1 ldx #ENV.SysVars.Cnt-1
.2 cmp ENV.SysVars,x
beq .3
dex
bpl .2
.9 sec
rts
.3 txa
beq ENV.SysVarsArgs
ldy ENV.SysVars.PS-1,x
bra ENV.SysVars.PSY
.4 >LDYAI ENV.StrVars
>STYA ZPPtr3 >STYA ZPPtr3
ldx #0 ldx #0
.5 lda (ZPPtr3) .4 ldy #$ff
beq .9
cmp ENV.VarLen .5 iny
bne .7 lda (ZPPtr3),y
cmp (ZPPtr3),y
tay
.6 lda (ZPPtr3),y
dey
cmp ENV.VarName,y
bne .7 bne .7
tya tya
bne .6 bne .7
jmp (ENV.StrVarsJmp,x) jmp (ENV.StrVarsJmp,x)
.7 inx .7 inx
inx inx
lda (ZPPtr3) lda (ZPPtr3)
beq .9
jsr ENV.NextEnvP3A jsr ENV.NextEnvP3A
bra .5 bra .4
.9 sec
rts
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgs lda #1 ENV.SysVarsAllArgs
lda #1
jsr K.ArgV jsr K.ArgV
bcs ENV.SysVarsNum.8 bcs ENV.SysVarsNum.8
@ -533,8 +490,6 @@ ENV.SysVarsArgs lda #1
jsr ENV.AddAToBuf jsr ENV.AddAToBuf
bra .2 bra .2
*-------------------------------------- *--------------------------------------
ENV.SysVars.PSY lda (pPS),y
ENV.SysVarsNum jsr MATH.A2STR10NP ENV.SysVarsNum jsr MATH.A2STR10NP
ldy #0 ldy #0
@ -555,6 +510,15 @@ ENV.SysVars .AS "*#?@$!"
ENV.SysVars.Cnt .EQ *-ENV.SysVars ENV.SysVars.Cnt .EQ *-ENV.SysVars
ENV.SysVars.PS .DA #S.PS.ARGC,#S.PS.RC,#S.PS.PPID,#S.PS.PID,#S.PS.CPID ENV.SysVars.PS .DA #S.PS.ARGC,#S.PS.RC,#S.PS.PPID,#S.PS.PID,#S.PS.CPID
*-------------------------------------- *--------------------------------------
ENV.StrVars .AZ "LOGNAME"
.AZ "GECOS"
.AZ "HOME"
.AZ "SHELL"
.AZ "PWD"
.AZ "UID"
.AZ "GID"
.DA #0
*--------------------------------------
ENV.StrVarsJmp .DA ENV.StrVarsSession ENV.StrVarsJmp .DA ENV.StrVarsSession
.DA ENV.StrVarsSession .DA ENV.StrVarsSession
.DA ENV.StrVarsSession .DA ENV.StrVarsSession
@ -602,6 +566,7 @@ ENV.StrVarsSession
* ZPPtr1 -> NAME * ZPPtr1 -> NAME
* Out: * Out:
* CC: Found * CC: Found
* Y = NAME len
* ZPPtr1 -> NAME * ZPPtr1 -> NAME
* ZPPtr3 -> ENV.NAME * ZPPtr3 -> ENV.NAME
* CS: Not Found * CS: Not Found
@ -617,16 +582,23 @@ ENV.FindVarP1 jsr ENV.InitEnvP3 Store ENV
.2 iny .2 iny
lda (ZPPtr1),y lda (ZPPtr1),y
cmp (ZPPtr3),y beq .3
bne .3
ora #0 jsr SHARED.IsIDValid
bne .2 bcs .3
cmp (ZPPtr3),y
beq .2
bra .4
.3 lda (ZPPtr3),y
bne .4
clc clc
rts rts
.3 jsr ENV.NextEnvP3x2 Skip NAME & VALUE .4 jsr ENV.NextEnvP3x2 Skip NAME & VALUE
bra .1 bra .1
.9 sec .9 sec
@ -740,15 +712,6 @@ ENV.Dup.A sta .8+1 Store target page Count
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
ENV.StrVars >PSTR "LOGNAME"
>PSTR "GECOS"
>PSTR "HOME"
>PSTR "SHELL"
>PSTR "PWD"
>PSTR "UID"
>PSTR "GID"
.DA #0
*--------------------------------------
ENV.VARS .DA .1 ENV.VARS .DA .1
.DA .2 .DA .2
.DA .3 .DA .3