A2osX/SYS/KERNEL.S.ENV.txt

593 lines
11 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
2015-03-14 21:48:35 +00:00
INC 1
AUTO 6
*/--------------------------------------
* # ExpandStr.YA
* ## In:
* Y,A = PTR to String to Expand (C-String)
* ## Out:
* X = hMem to Expanded String (C-String)
* Y,A = PTR to Expanded String
*\--------------------------------------
K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string...
.1 >STYA ZPPtr2
stz K.ExpandStr.BufLen init Expanded String len=0
stz K.ExpandStr.bFound No var found yet
stz K.ExpandStr.bNoExp Reset no expand flag
2015-03-14 21:48:35 +00:00
ldy #0
.10 stz K.ExpandStr.VarLen
stz K.ExpandStr.bInVar
.11 lda (ZPPtr2),y End of CSTR?
beq .8
2015-03-14 21:48:35 +00:00
iny
cmp #'''
bne .21
lda K.ExpandStr.bNoExp
eor #$ff
sta K.ExpandStr.bNoExp toggle flag
bra .11
.21 bit K.ExpandStr.bNoExp
bpl .23
.22 ldx K.ExpandStr.BufLen
sta K.Buf256,x
inx
stx K.ExpandStr.BufLen
bra .11
.23 ldx K.ExpandStr.bInVar already in a var?
bne .3 yes...
cmp #'$' no, found one ?
bne .22 no, store...
sta K.ExpandStr.bFound Toggle flag
sta K.ExpandStr.bInVar
bra .11 skip this char
.3 cmp #'{' we are in var, "{" after "$"?
bne .31
ldx K.ExpandStr.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
jsr K.ExpandStrValidChar
bcc .32 yes, add to varname
ldx K.ExpandStr.VarLen
bne .5 varname has already chars...end of var
inx must be a $? or ?x.....go expand
stx K.ExpandStr.VarLen
sta K.ExpandStr.VarName
bra .51 go Expand....
.32 ldx K.ExpandStr.VarLen
cpx #16
beq .11 varname longer than 15....ignore
sta K.ExpandStr.VarName,x
inx
stx K.ExpandStr.VarLen
bra .11
.5 dey last char was invalid...move back
.50 ldx K.ExpandStr.VarLen
beq .52 var name is empty...start over
.51 stz K.ExpandStr.VarName,x
phy save current index
jsr K.ExpandStrGetValue
ply restore index in string...
.52 jmp .10 reset start flag and continue
.8 ldx K.ExpandStr.VarLen end of STR,are we in a var?
beq .80 no...exit...
stz K.ExpandStr.VarName,x
jsr K.ExpandStrGetValue yes, expand and add to STR
.80 lda K.ExpandStr.hPStr working from our temp string ?
beq .81 no...
jsr K.FreeMem.A yes, discard....
.81 ldx K.ExpandStr.BufLen
stz K.Buf256,x
>LDYAI K.Buf256
jsr K.NewStr.YA
bcs .9
stx K.ExpandStr.hPStr save this as temp string, in case of recurse
ldx K.ExpandStr.bFound Did we expand something ?
beq .82
jmp .1 Yes, start over with hPStr
.82 ldx K.ExpandStr.hPStr
* or exit with Y,A from K.NewStrYA
.9 rts
*--------------------------------------
K.ExpandStrValidChar
cmp #'_'
beq .8
cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'Z'+1
* bcc .8
rts
.8 clc
rts
.9 sec
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
K.ExpandStrGetValue
jsr ENV.ExpandSysVar
bcc .9
>LDYAI K.ExpandStr.VarName
jsr K.GetEnv.YA
bcs .9
>STYA ZPPtr3
jsr ENV.AppendPtr3ToBuf
.9 rts
*--------------------------------------
K.ExpandStr.BufLen .BS 1
K.ExpandStr.bNoExp .BS 1
K.ExpandStr.bInVar .BS 1
K.ExpandStr.bFound .BS 1
K.ExpandStr.hPStr .BS 1
K.ExpandStr.VarLen .BS 1
K.ExpandStr.VarName .BS 16
*/--------------------------------------
* # PutEnv.YA
* ## In:
* Y,A = PTR to String NAME=VALUE (C-String)
* ## Out:
*\--------------------------------------
K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE
2016-08-17 06:25:58 +00:00
ldy #0
2016-06-07 06:10:18 +00:00
.1 lda (ZPPtr1),y copy STR to K.Buf256
2016-08-17 06:25:58 +00:00
beq .9
cmp #'='
beq .2
sta K.Buf256,y
iny
bne .1
2016-08-17 06:25:58 +00:00
.2 lda #0
sta K.Buf256,y
tya
sec
adc ZPPtr1
sta ZPPtr2
lda ZPPtr1+1
adc #0
2017-01-12 17:43:45 +00:00
sta ZPPtr2+1
>LDYAI K.Buf256
>STYA ZPPtr1
bra K.SetEnvPtr1Ptr2
2016-08-17 06:25:58 +00:00
.9 sec
rts
*/--------------------------------------
* # SetEnv
* ## In:
* PUSHW = PTR To Value (PSTR)
* PUSHW = PTR To Name (PSTR)
* ## Out:
*\--------------------------------------
K.SetEnv jsr PullPtr1Ptr2 Ptr1=NAME,Ptr2=VALUE
K.SetEnvPtr1Ptr2
jsr S.UnsetEnvPtr1
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
jsr ENV.InitEnvPtr3 ZPPtr3 -> Env
ldy #0
ldx #0
2016-08-17 06:25:58 +00:00
.10 lda (ZPPtr3) End of ENV
beq .15
2016-08-17 06:25:58 +00:00
.11 iny Compute ENV size in X,Y
bne .12
inx
2016-08-17 06:25:58 +00:00
.12 inc ZPPtr3
bne .13
inc ZPPtr3+1
2016-08-17 06:25:58 +00:00
.13 lda (ZPPtr3) End of string
bne .11
2015-03-14 21:48:35 +00:00
iny
bne .14
inx
2016-08-17 06:25:58 +00:00
.14 inc ZPPtr3
bne .10
2017-01-12 17:43:45 +00:00
inc ZPPtr3+1
bra .10
.15 sty ZPPtr4
stx ZPPtr4+1
ldy #0
2016-08-17 06:25:58 +00:00
.16 lda (ZPPtr1),y
beq .17
iny
bne .16
2016-08-17 06:25:58 +00:00
.17 tya
sec
adc ZPPtr4
sta ZPPtr4
bcc .18
inc ZPPtr4+1
2016-08-17 06:25:58 +00:00
.18 ldy #0
.19 lda (ZPPtr2),y
beq .20
iny
bne .19
2016-08-17 06:25:58 +00:00
.20 tya
sec
adc ZPPtr4
tax
bcc .21
inc ZPPtr4+1
.21 cpx #K.ENV.SIZE
lda ZPPtr4+1
sbc /K.ENV.SIZE
bcs .99
2016-08-17 06:25:58 +00:00
ldy #$ff
2016-08-17 06:25:58 +00:00
.22 iny
lda (ZPPtr1),y
sta (ZPPtr3),y
bne .22
2016-08-17 06:25:58 +00:00
tya
sec
adc ZPPtr3
sta ZPPtr3
bcc .23
inc ZPPtr3+1
2016-08-17 06:25:58 +00:00
.23 ldy #$ff
.24 iny
lda (ZPPtr2),y
sta (ZPPtr3),y
bne .24
iny
sta (ZPPtr3),y don't forget array ending 0
2015-03-14 21:48:35 +00:00
clc
rts
2016-08-17 06:25:58 +00:00
2015-03-14 21:48:35 +00:00
.99 lda #SYSMGR.ERRENVF
* sec
2015-03-14 21:48:35 +00:00
rts
*/--------------------------------------
* # GetEnv.YA
* ## In:
* Y,A = PTR to NAME (PSTR)
* ## Out:
* CC : Y,A = PTR to VALUE (PSTR)
2016-08-17 06:25:58 +00:00
* CS : not found
*\--------------------------------------
K.GetEnv.YA >STYA ZPPtr1
jsr ENV.FindVarPtr1
2016-08-17 06:25:58 +00:00
bcs .9
jsr ENV.NextEnvPtr3 Skip NAME
clc just in case ADC in NextEnvPtr1 disturb CC
.9 >LDYA ZPPtr3
rts
*/--------------------------------------
* # UnsetEnv.YA
* ## In:
* Y,A = PTR To Name (PSTR)
* ## Out:
*\--------------------------------------
K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name
S.UnsetEnvPtr1 jsr ENV.FindVarPtr1
bcs .8 not found, quit
jsr ENV.DiscardVarPtr3 Ptr3 -> ENVNAME
.8 clc
rts
*--------------------------------------
2015-03-14 21:48:35 +00:00
* PRIVATE
*--------------------------------------
* ENV.ExpandSysVar
2015-03-14 21:48:35 +00:00
* In:
* K.ExpandStr.VarName
2016-08-17 06:25:58 +00:00
* Out:
* CC: Found
* Append VALUE to K.Buf256
2016-08-17 06:25:58 +00:00
* CS: Not Found
*--------------------------------------
ENV.ExpandSysVar
ldx K.ExpandStr.VarLen
cpx #1 is name 1 char?
2016-08-17 06:25:58 +00:00
bne .9
lda K.ExpandStr.VarName
cmp #'0'-1 $0...$9 ??
bcc .1
2016-08-17 06:25:58 +00:00
cmp #'9'+1
bcs .1
2016-08-17 06:25:58 +00:00
and #$0F
jsr K.GetArg.A
bcs .8 Arg# is undefined, do not append anything
2017-01-12 17:43:45 +00:00
>STYA ZPPtr3
jmp ENV.AppendPtr3ToBuf
.8 clc
rts
.1 ldx #ENV.SysVarsJmp-ENV.SysVars-1
.2 cmp ENV.SysVars,x
beq .3
dex
bpl .2
2016-08-17 06:25:58 +00:00
.9 sec
.99 rts
2016-08-17 06:25:58 +00:00
.3 txa
asl
tax
jmp (ENV.SysVarsJmp,x)
ENV.SysVars .AS "*#?@$!"
ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsArgC
.DA ENV.SysVarsRC
.DA ENV.SysVarsPPID
.DA ENV.SysVarsPID
.DA ENV.SysVarsCPID
*--------------------------------------
ENV.SysVarsArgs lda #1
jsr K.GetArg.A
bcs .8
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq .8
jsr ENV.AppendPtr3ToBuf
.2 jsr ENV.NextEnvPtr3
lda (ZPPtr3)
beq .8
inx
beq .8 make sure not overlapping buf 256
lda #' '
sta K.Buf256,x
stx K.ExpandStr.BufLen
jsr ENV.AppendPtr3ToBuf
bra .2
.8 clc
rts
*--------------------------------------
ENV.AppendPtr3ToBuf
ldx K.ExpandStr.BufLen
ldy #$ff
dex
.1 iny
inx
lda (ZPPtr3),y
sta K.Buf256,x
bne .1
stx K.ExpandStr.BufLen
rts
*--------------------------------------
ENV.SysVarsArgC ldy #S.PS.ARGC
.HS 2C
ENV.SysVarsRC ldy #S.PS.RC
.HS 2C
ENV.SysVarsPPID ldy #S.PS.PPID
.HS 2C
ENV.SysVarsPID ldy #S.PS.PID
.HS 2C
ENV.SysVarsCPID ldy #S.PS.CPID
lda (pPS),y
stz .2+1
stz .3+1
ldx #8
sed
.1 asl
pha
.2 lda #$ff Self Modified
adc .2+1
sta .2+1
.3 lda #$ff Self Modified
adc .3+1
sta .3+1
2016-08-17 06:25:58 +00:00
pla
dex
bne .1
cld
ldx K.ExpandStr.BufLen
lda .3+1
beq .4
sta K.Buf256,x
inx
.4 lda .2+1
lsr
lsr
lsr
lsr
beq .5
ora #$30
sta K.Buf256,x
inx
.5 lda .2+1
and #$0f
ora #$30
sta K.Buf256,x
inx
stx K.ExpandStr.BufLen
clc
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
* ENV.FindVarPtr1
2016-08-17 06:25:58 +00:00
* In:
2017-01-12 17:43:45 +00:00
* ZPPtr1 -> NAME
2015-03-14 21:48:35 +00:00
* Out:
* CC: Found
2017-01-12 17:43:45 +00:00
* ZPPtr1 -> NAME
* ZPPtr3 -> ENV.NAME
2015-03-14 21:48:35 +00:00
* CS: Not Found
2017-01-12 17:43:45 +00:00
* ZPPtr1 -> NAME
* ZPPtr3 -> PTR to Ending 0
2015-03-14 21:48:35 +00:00
*--------------------------------------
ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV
.1 lda (ZPPtr3)
2016-08-17 06:25:58 +00:00
beq .9 end of ENV
ldy #0
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
.2 lda (ZPPtr1),y
cmp (ZPPtr3),y
2016-08-17 06:25:58 +00:00
bne .3
ora #0
beq .8
iny
2015-03-14 21:48:35 +00:00
bne .2
.8 clc
2016-08-17 06:25:58 +00:00
rts
.3 jsr ENV.NextEnvPtr3 Skip NAME
jsr ENV.NextEnvPtr3 Skip VALUE
bra .1
2016-08-17 06:25:58 +00:00
.9 sec
rts
2016-08-17 06:25:58 +00:00
*--------------------------------------
* ENV.DiscardVarPtr3
2016-08-17 06:25:58 +00:00
* In:
2017-01-12 17:43:45 +00:00
* ZPPtr3 -> ENV.NAME to Discard
2016-08-17 06:25:58 +00:00
*--------------------------------------
ENV.DiscardVarPtr3
>LDYA ZPPtr3 save actual Ptr
>STYA ZPPtr4
jsr ENV.NextEnvPtr3 Skip current NAME....
jsr ENV.NextEnvPtr3 Skip current VALUE....
ldy #0
2016-08-17 06:25:58 +00:00
.1 lda (ZPPtr3),y Move back CSTRs...
.2 sta (ZPPtr4),y
beq .3 0 ended....
2015-03-14 21:48:35 +00:00
iny
bne .1
inc ZPPtr3+1
inc ZPPtr4+1
bra .1
.3 iny
bne .4
inc ZPPtr3+1
inc ZPPtr4+1
.4 lda (ZPPtr3),y
bne .2 Until array ending 0
sta (ZPPtr4),y
2016-08-17 06:25:58 +00:00
.8 rts
*--------------------------------------
ENV.InitEnvPtr3 ldy #S.PS.hENV
2016-08-17 06:25:58 +00:00
lda (pPs),y
jsr K.GetMemPtr.A
>STYA ZPPtr3 Store ENV
2016-08-17 06:25:58 +00:00
rts
*--------------------------------------
ENV.NextEnvPtr3 ldy #0
.1 lda (ZPPtr3),y
beq .2
iny
bne .1
.2 tya
2015-03-14 21:48:35 +00:00
sec
adc ZPPtr3
2017-01-12 17:43:45 +00:00
sta ZPPtr3
2016-08-17 06:25:58 +00:00
bcc .8
2017-01-12 17:43:45 +00:00
inc ZPPtr3+1
.8 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.ENV
LOAD /A2OSX.SRC/SYS/KERNEL.S
2015-03-14 21:48:35 +00:00
ASM