A2osX/SYS/KERNEL.S.ENVX.txt
2020-02-03 16:17:34 +01:00

323 lines
5.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
ENVX.hEnv .BS 1
*--------------------------------------
ENVX.PutEnv ldy #$ff
.1 iny
jsr SHARED.TXTPTR.GetY NAME=
beq .9
cmp #'='
bne .1
tya
sec skip =
adc TXTPTR
sta FORPNT
lda #0
adc TXTPTR+1
sta FORPNT+1
bra ENVX.SetEnv
.9 lda #E.SYN
sec
rts
*--------------------------------------
ENVX.SetEnv jsr ENVX.UnsetEnv
.1 jsr ENVX.InitEnvP3 ZPPtr3 -> Env (SETREADAUX)
lda #1
sta ZPPtr4
stz ZPPtr4+1 ZPPtr4 = ENVSIZE = 1
.10 lda (ZPPtr3) End of ENV
beq .15
jsr ENVX.GetP3LenY
jsr ENVX.NextEnvP3Y
jsr ENVX.NextEnvP4Y
bra .10
.15 ldy #$ff
.16 iny
jsr SHARED.TXTPTR.GetY
beq .17
jsr SHARED.IsIDValid
bcc .16
.17 jsr ENVX.NextEnvP4Y ZPPtr4 = ENVSIZE + VAR
ldy #$ff
.19 iny
jsr SHARED.FORPNT.getY
bne .19
jsr ENVX.NextEnvP4Y ZPPtr4 = ENVSIZE + VALUE
lda ZPPtr4
beq .20
inc ZPPtr4+1
.20 lda ENVX.hEnv
jsr MEM.GetMemByID
lda ZPPtr4+1
ldy #S.MEM.LEN+1
cmp (ZPMemMgrSPtr),y
bcs .22 env is large enough
sta MEM.NewSize+1
stz MEM.NewSize
jsr K.realloc.I
bcs .9
stx ENVX.hEnv
txa
sta CLRWRITEAUX
ldy #S.PS.hENV
lda (pPs),y
sta SETWRITEAUX
bra .1 Start over
.22 ldy #$ff
.23 iny
jsr SHARED.TXTPTR.GetY
sta (ZPPtr3),y
beq .24
jsr SHARED.IsIDValid
bcc .23
.24 lda #'='
sta (ZPPtr3),y
jsr ENVX.NextEnvP3Y
ldy #$ff
.25 iny
jsr SHARED.FORPNT.getY
sta (ZPPtr3),y
bne .25
iny
sta (ZPPtr3),y don't forget array ending 0
clc
.9 rts
*--------------------------------------
ENVX.GetEnv sta ENVX.hEnv
jsr ENVX.FindVar
bcs .9
jsr ENVX.NextEnvP3Y Skip NAME=
lda FORPNT+1
bne .3
ldy #$ff
.1 iny
lda (ZPPtr3),y
bne .1
iny
bne .2
inc
.2 ldx #SYS.GetMem
jsr K.SYSCALL2.MAIN !!! Get a buffer In MAIN Mem !!!
bcs .99
>STYA FORPNT
.3 ldy #$ff
.4 iny
lda (ZPPtr3),y
jsr SHARED.FORPNT.PutY
bne .4
>LDYA FORPNT
clc
rts
.9 >LDYAI 0
* sec
.99 rts
*--------------------------------------
ENVX.UnsetEnv sta ENVX.hEnv
jsr ENVX.FindVar
bcs .8 not found, quit
jsr ENVX.DelVarP3 Ptr3 -> NAME=VALUE
.8 clc
rts
*--------------------------------------
* ENV.FindVar
* In:
* TXTPTR -> NAME
* Out:
* CC: Found
* Y = NAME len
* TXTPTR -> NAME
* ZPPtr3 -> NAME=VALUE
* CS: Not Found
* TXTPTR -> NAME
* ZPPtr3 -> PTR to Ending 0
*--------------------------------------
ENVX.FindVar jsr ENVX.InitEnvP3 Store ENV
.1 lda (ZPPtr3)
beq .9 end of ENV
ldy #$ff
.2 iny
jsr SHARED.TXTPTR.GetY
beq .3
jsr SHARED.IsIDValid
bcs .3
cmp (ZPPtr3),y
beq .2
bra .4
.3 lda (ZPPtr3),y
cmp #'='
bne .4
clc
rts
.4 jsr ENVX.NextEnvP3 Skip NAME=VALUE
bra .1
.9 sec
rts
*--------------------------------------
* ENV.DelVarP3
* In:
* ZPPtr3 -> ENV.NAME to Discard
*--------------------------------------
ENVX.DelVarP3 >LDYA ZPPtr3 save actual Ptr
>STYA ZPPtr4
jsr ENVX.NextEnvP3 Skip NAME=VALUE
.1 ldy #$ff
.2 iny
lda (ZPPtr3),y Move back CSTRs...
sta (ZPPtr4),y
bne .2
tya
beq .8 we moved back ending \0
jsr ENVX.NextEnvP3Y
jsr ENVX.NextEnvP4Y
bra .1
.8 rts
*--------------------------------------
ENVX.InitEnvP3 lda ENVX.hEnv
jsr K.GetMemPtr
>STYA ZPPtr3 Store ENV
rts
*--------------------------------------
ENVX.NextEnvP3 jsr ENVX.GetP3LenY
*--------------------------------------
ENVX.NextEnvP3Y tya
ENVX.NextEnvP3A sec
adc ZPPtr3
sta ZPPtr3
bcc .8
inc ZPPtr3+1
.8 rts
*--------------------------------------
ENVX.GetP3LenY ldy #$ff
.1 iny
lda (ZPPtr3),y
bne .1
rts
*--------------------------------------
ENVX.NextEnvP4Y tya
sec
adc ZPPtr4
sta ZPPtr4
bcc .8
inc ZPPtr4+1
.8 rts
*--------------------------------------
* ENV.Dup
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
* X = Page Count
*--------------------------------------
ENVX.Dup ldy #S.PS.ENVPAGECNT
lda (pPs),y
ENVX.Dup.A sta .8+1 Store target page Count
ldy #S.PS.ENVPAGECNT get SOURCE page count
lda (pPs),y
sta .10+1
ldy #S.PS.hENV
lda (pPs),y
jsr K.GetMemPtr
>STYA .1+1
ldy #0
lda .8+1
jsr K.GetMem
bcs .9
>STYA .2+1 Target Buffer
phx save hMem
jsr Mem.SetOwner Set Ownership
ldy #0
.10 ldx #$ff SELF MODIFIED
.1 lda $ffff,y SELF MODIFIED
.2 sta $ffff,y SELF MODIFIED
iny
bne .1
inc .1+2
inc .2+2
dex
bne .1
.8 ldx #$ff SELF MODIFIED Target Page Count
pla hMem
clc
.9 rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.ENVX
LOAD USR/SRC/SYS/KERNEL.S
ASM