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