Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2020-01-17 12:23:11 +01:00
parent dc1d30d28d
commit c893bb214a
13 changed files with 323 additions and 311 deletions

View File

@ -118,33 +118,20 @@ Create a hDEV
## RETURN VALUE
none, always succeed.
# ExpandStr
**In:**
Y,A = PTR to String to Expand (C-String)
## RETURN VALUE
X = hMem to Expanded String (C-String)
Y,A = PTR to Expanded String
# FileSearch
Search a file in the provided PATH list
And return, if found, the full path to it.
# Expand
## C
`int filesearch ( char * filename, char * searchpath, char * fullpath, stat * filestat);`
`char *expand(const char *str, char *expanded);`
## ASM
**In:**
`>PUSHWI filename`
`>PUSHWI fullpath`
`>PUSHWI searchpath`
`>PUSHWI filestat`
`>PUSHW string`
`>PUSHW expanded`
`>SYSCALL expand`
## RETURN VALUE
CC : success
DstBuf = FilePath
DstStat = S.STAT
CS : not found
Y,A = PTR to Expanded String
X = hMem to Expanded String (C-String)
# PutEnv
Change or add an environment variable, string is 'NAME=VALUE'
@ -154,7 +141,7 @@ Change or add an environment variable, string is 'NAME=VALUE'
## ASM
**In:**
`>LDYA string`
`>PUSHW string`
`>SYSCALL putenv`
## RETURN VALUE
@ -167,8 +154,8 @@ Change or add an environment variable
## ASM
**In:**
`>PUSHW name`
`>PUSHW value`
`>LDYA name`
`>SYSCALL setenv`
## RETURN VALUE
@ -198,7 +185,7 @@ Remove an environment variable
## ASM
**In:**
`>LDYA name`
`>PUSHW name`
`>SYSCALL unsetenv`
## RETURN VALUE
@ -463,6 +450,26 @@ Load a file in memory
Y,A = File Length
X = hMem of Loaded File
# FileSearch
Search a file in the provided PATH list
And return, if found, the full path to it.
## C
`int filesearch ( char * filename, char * searchpath, char * fullpath, stat * filestat);`
## ASM
**In:**
`>PUSHWI filename`
`>PUSHWI fullpath`
`>PUSHWI searchpath`
`>PUSHWI filestat`
## RETURN VALUE
CC : success
DstBuf = FilePath
DstStat = S.STAT
CS : not found
# GetMemStat
**In:**
Y,A = Ptr to 24 bytes buffer

Binary file not shown.

View File

@ -12,7 +12,7 @@ CL.Init >LDYAI 256
*--------------------------------------
CL.PrintPrompt >LDYA L.PS1
>SYSCALL ExpandStr
>SYSCALL Expand
bcs .9
phx
pha

View File

@ -249,7 +249,7 @@ CMD.SET.YA pha
>SYSCALL SetEnv
rts
CMD.SET.UNSET >LDYA ZPVarNamePtr
CMD.SET.UNSET >PUSHW ZPVarNamePtr
>SYSCALL UnsetEnv
rts

View File

@ -429,7 +429,7 @@ CORE.ArgV.Add lda #C.SPACE
>LDYA ZPArgVBufPtr
>STYA ZPArgVBufPrev
>SYSCALL ExpandStr
>SYSCALL Expand
bcs .9
phx

View File

@ -270,7 +270,7 @@ SYS.StrVDup .EQ $AE
SYS.Str2StrV .EQ $B0
SYS.ArgV .EQ $B2
SYS.ExpandStr .EQ $B4
SYS.Expand .EQ $B4
SYS.FileSearch .EQ $B6
SYS.PutEnv .EQ $B8

View File

@ -126,7 +126,7 @@ CS.RUN ldy #S.PS.ARGC
CS.RUN.LOOP0 >SLEEP
>LDYA L.ENV.TERM
>PUSHW L.ENV.TERM
>SYSCALL UnSetEnv
.1 >PUSHWI TELNETOPTS.LEN

View File

@ -425,7 +425,7 @@ CS.RUN.DumpFile pha
bcs .7
>LDYA ZPBufPtr
>SYSCALL ExpandStr
>SYSCALL Expand
bcc .2
.99 php

View File

@ -1,12 +1,17 @@
NEW
AUTO 3,1
*/--------------------------------------
* # ExpandStr
* # Expand
* ## C
* `char *expand(const char *str, char *expanded);`
* ## ASM
* **In:**
* Y,A = PTR to String to Expand (C-String)
* `>PUSHW string`
* `>PUSHW expanded`
* `>SYSCALL expand`
* ## RETURN VALUE
* X = hMem to Expanded String (C-String)
* Y,A = PTR to Expanded String
* X = hMem to Expanded String (C-String)
*\--------------------------------------
.DUMMY
.OR ZPDRV
@ -17,7 +22,7 @@ ENV.hMem .BS 1
ENV.bExp .BS 1
.ED
*--------------------------------------
K.ExpandStr jsr K.strdup
K.Expand jsr K.strdup
bcc .1
rts
@ -122,127 +127,155 @@ K.ExpandStr jsr K.strdup
* clc
.9 rts
*/--------------------------------------
* # FileSearch
* Search a file in the provided PATH list
* And return, if found, the full path to it.
* ## C
* `int filesearch ( char * filename, char * searchpath, char * fullpath, stat * filestat);`
* ## ASM
* **In:**
* `>PUSHWI filename`
* `>PUSHWI fullpath`
* `>PUSHWI searchpath`
* `>PUSHWI filestat`
* ## RETURN VALUE
* CC : success
* DstBuf = FilePath
* DstStat = S.STAT
* CS : not found
*\--------------------------------------
K.FileSearch >PULLW .4+1 DstStat
>PULLW .2+1 DstBuf
>PULLW ENV.Search.2+1 path to search
>PULLW ENV.Search.4+1 filename to find
stz ENV.Search.98+1
jsr ENV.Search
bcs K.FileSearch.RTS
ldx #$ff
.1 inx
lda K.Buf256,x
.2 sta $ffff,x Self Modified
bne .1
ldx #S.STAT-1
.3 lda K.S.STAT,x
.4 sta $ffff,x Self Modified
dex
bpl .3
* clc
K.FileSearch.RTS
rts
*--------------------------------------
ENV.Search.CWD >STYA ENV.Search.4+1 filename to find
ldy #S.PS.hCWD
lda (PS.NewPSPtr),y
jsr K.GetMemPtr
>STYA ENV.Search.2+1
ENV.SysVar ldx #ENV.SysVars.Cnt-1
.1 cmp ENV.SysVars,x
beq .2
dex
bpl .1
stz ENV.Search.98+1
bra ENV.Search
ENV.Search.LIB ldx #0
.HS 2C BIT ABS
ENV.Search.DRV ldx #2
.HS 2C BIT ABS
ENV.Search.PATH ldx #4
sec
rts
>STYA ENV.Search.4+1 filename to find
>PUSHW ENV.VARS,x
>PUSHWI 0 allocate...
jsr K.GetEnv get value for Search Path
bcs K.FileSearch.RTS
>STYA ENV.Search.2+1
stx ENV.Search.98+1
ENV.Search stz ENV.Search.1+1
ENV.Search.1 ldy #0 Self Modified Index in Search list string
ldx #0
ENV.Search.2 lda $ffff,y SELF MODIFIED
beq ENV.Search.3 end of string, try it....
iny
cmp #':'
beq ENV.Search.3
sta K.Buf256,x
inx
bra ENV.Search.2
ENV.Search.3 txa
beq ENV.Search.98 String is empty....nothing to try
sty ENV.Search.1+1 save current index
.2 txa
beq ENV.SysVarsAllArgs
ldy ENV.SysVars.PS-1,x
lda (pPS),y
*--------------------------------------
ENV.SysVarsNum jsr MATH.A2STR10NP
ldy #0
ENV.Search.4 lda $ffff,y Self Modified, Append Filename...
sta K.Buf256,x
beq ENV.Search.5
.1 lda A2osX.NumStrBuf,y
beq ENV.SysVarsNum.8
iny
inx
bra ENV.Search.4
ENV.Search.5 >PUSHWI K.S.STAT
>LDYAI K.Buf256
>SYSCALL2 stat
bcs ENV.Search.1 Failed...retry next path...
lda K.S.STAT+S.STAT.P.TYPE
cmp #S.FI.T.DIR Dir ?
beq ENV.Search.1
jsr ENV.Search.98 Discard Expanded hSrch list
jsr ENV.AddAToBuf
bra .1
ENV.SysVarsNum.8
clc
rts
*--------------------------------------
ENV.SysVarsAllArgs
lda #1
jsr K.ArgV
bcs ENV.SysVarsNum.8
>STYA ZPPtr3
ENV.Search.98 lda #$ff SELF MODIFIED : Discard Search list
beq .1
jsr K.FreeMem
.1 lda (ZPPtr3)
beq ENV.SysVarsNum.8
.1 lda #MLI.E.FNOTFND
sec
.2 jsr ENV.AddP3ToBuf
jsr ENV.NextEnvP3
lda (ZPPtr3)
beq ENV.SysVarsNum.8
lda #C.SPACE
jsr ENV.AddAToBuf
bra .2
*--------------------------------------
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.ExpandStrVar
>LDYAI ENV.StrVars
>STYA ZPPtr3
ldx #0
.1 lda (ZPPtr3)
beq .9
ldy #$ff
.2 iny
lda (TXTPTR),y
beq .3
jsr SHARED.IsIDValid
bcs .3
cmp (ZPPtr3),y
beq .2
bra .4
.3 lda (ZPPtr3),y
bne .4
jmp (ENV.StrVarsJmp,x)
.4 inx
inx
jsr ENV.NextEnvP3
bra .1
.9 sec
rts
*--------------------------------------
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
.DA ENV.StrVarsSession
.DA ENV.StrVarsPWD
.DA ENV.StrVarsUID
.DA ENV.StrVarsGID
*--------------------------------------
ENV.StrVarsPWD ldy #S.PS.hCWD
lda (pPS),y
jsr K.GetMemPtr
jmp ENV.AddYAToBuf
*--------------------------------------
ENV.StrVarsUID ldy #S.SESSION.UID
.HS 2C
ENV.StrVarsGID ldy #S.SESSION.GID
lda (pSession),y
jmp ENV.SysVarsNum
ENV.StrVarsSession
lda pSession
clc
adc #S.SESSION.NAME
sta ZPPtr3
lda pSession+1
adc /S.SESSION.NAME
sta ZPPtr3+1
.1 dex
dex
bmi .3
ldy #$ff
.2 iny
lda (ZPPtr3),y
bne .2
jsr ENV.NextEnvP3Y
bra .1
.3 jmp ENV.AddP3ToBuf
*--------------------------------------
ENV.AddYAToBuf >STYA ZPPtr3
*--------------------------------------
ENV.AddP3ToBuf ldx ENV.BufLen
ldy #$ff
dex
.1 iny
inx
lda (ZPPtr3),y
sta K.Buf256,x
bne .1
stx ENV.BufLen
rts
*--------------------------------------
ENV.AddAToBuf ldx ENV.BufLen
sta K.Buf256,x
inc ENV.BufLen
rts
*/--------------------------------------
* # PutEnv
@ -251,11 +284,11 @@ ENV.Search.98 lda #$ff SELF MODIFIED : Discard Search list
* `int putenv(char *string);`
* ## ASM
* **In:**
* `>LDYA string`
* `>PUSHW string`
* `>SYSCALL putenv`
* ## RETURN VALUE
*\--------------------------------------
K.PutEnv >STYA FORPNT NAME=VALUE
K.PutEnv >PULLW FORPNT NAME=VALUE
ldy #0
@ -280,7 +313,7 @@ K.PutEnv >STYA FORPNT NAME=VALUE
.2 lda #0
sta K.Buf256,y
inc FORPNT
inc FORPNT skip =
bne .3
inc FORPNT+1
@ -443,7 +476,7 @@ K.GetEnv >PULLW FORPNT value
* `int unsetenv(const char *name);`
* ## ASM
* **In:**
* `>LDYA name`
* `>PUSHW name`
* `>SYSCALL unsetenv`
* ## RETURN VALUE
*\--------------------------------------
@ -455,137 +488,6 @@ K.UnsetEnv.I jsr ENV.FindVarTXTPTR
K.UnsetEnv.I.8 clc
K.UnsetEnv.I.9 rts
*--------------------------------------
* PRIVATE
*--------------------------------------
ENV.SysVarsAllArgs
lda #1
jsr K.ArgV
bcs ENV.SysVarsNum.8
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq ENV.SysVarsNum.8
.2 jsr ENV.AddP3ToBuf
jsr ENV.NextEnvP3
lda (ZPPtr3)
beq ENV.SysVarsNum.8
lda #' '
jsr ENV.AddAToBuf
bra .2
*--------------------------------------
ENV.SysVar ldx #ENV.SysVars.Cnt-1
.1 cmp ENV.SysVars,x
beq .2
dex
bpl .1
sec
rts
.2 txa
beq ENV.SysVarsAllArgs
ldy ENV.SysVars.PS-1,x
lda (pPS),y
*--------------------------------------
ENV.SysVarsNum jsr MATH.A2STR10NP
ldy #0
.1 lda A2osX.NumStrBuf,y
beq ENV.SysVarsNum.8
iny
jsr ENV.AddAToBuf
bra .1
ENV.SysVarsNum.8
clc
rts
*--------------------------------------
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.ExpandStrVar
>LDYAI ENV.StrVars
>STYA ZPPtr3
ldx #0
.1 lda (ZPPtr3)
beq .9
ldy #$ff
.2 iny
lda (TXTPTR),y
beq .3
jsr SHARED.IsIDValid
bcs .3
cmp (ZPPtr3),y
beq .2
bra .4
.3 lda (ZPPtr3),y
bne .4
jmp (ENV.StrVarsJmp,x)
.4 inx
inx
jsr ENV.NextEnvP3
bra .1
.9 sec
rts
*--------------------------------------
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
.DA ENV.StrVarsSession
.DA ENV.StrVarsPWD
.DA ENV.StrVarsUID
.DA ENV.StrVarsGID
*--------------------------------------
ENV.StrVarsPWD ldy #S.PS.hCWD
lda (pPS),y
jsr K.GetMemPtr
jmp ENV.AddYAToBuf
*--------------------------------------
ENV.StrVarsUID ldy #S.SESSION.UID
.HS 2C
ENV.StrVarsGID ldy #S.SESSION.GID
lda (pSession),y
jmp ENV.SysVarsNum
ENV.StrVarsSession
lda pSession
clc
adc #S.SESSION.NAME
sta ZPPtr3
lda pSession+1
adc /S.SESSION.NAME
sta ZPPtr3+1
.1 dex
dex
bmi .3
ldy #$ff
.2 iny
lda (ZPPtr3),y
bne .2
jsr ENV.NextEnvP3Y
bra .1
.3 jmp ENV.AddP3ToBuf
*--------------------------------------
* ENV.FindVarTXTPTR
* In:
* TXTPTR -> NAME
@ -682,24 +584,6 @@ ENV.NextEnvP4Y tya
inc ZPPtr4+1
.8 rts
*--------------------------------------
ENV.AddYAToBuf >STYA ZPPtr3
*--------------------------------------
ENV.AddP3ToBuf ldx ENV.BufLen
ldy #$ff
dex
.1 iny
inx
lda (ZPPtr3),y
sta K.Buf256,x
bne .1
stx ENV.BufLen
rts
*--------------------------------------
ENV.AddAToBuf ldx ENV.BufLen
sta K.Buf256,x
inc ENV.BufLen
rts
*--------------------------------------
* ENV.Dup
* In:
* A = ENV hMem To Duplicate
@ -746,13 +630,6 @@ ENV.Dup.A sta .8+1 Store target page Count
clc
.9 rts
*--------------------------------------
ENV.VARS .DA .1
.DA .2
.DA .3
.1 .AZ "LIB"
.2 .AZ "DRV"
.3 .AZ "PATH"
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.ENV
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -1035,15 +1035,15 @@ TskMgrInit >LDYAI MSG.TSK
>SYSCALL2 SetEnv
bcs .9
>LDYAI I.ENV.PATH
>PUSHWI I.ENV.PATH
>SYSCALL2 PutEnv
bcs .9
>LDYAI I.ENV.LIB
>PUSHWI I.ENV.LIB
>SYSCALL2 PutEnv
bcs .9
>LDYAI I.ENV.DRV
>PUSHWI I.ENV.DRV
>SYSCALL2 PutEnv
.9 rts
*--------------------------------------

View File

@ -108,7 +108,7 @@ K.SYSCALL .DA 0 $00
.DA K.Str2StrV $B0
.DA K.ArgV
.DA K.ExpandStr
.DA K.Expand
.DA K.FileSearch
.DA K.PutEnv
.DA K.SetEnv

View File

@ -725,6 +725,135 @@ K.LoadFile clc
clc
rts
*/--------------------------------------
* # FileSearch
* Search a file in the provided PATH list
* And return, if found, the full path to it.
* ## C
* `int filesearch ( char * filename, char * searchpath, char * fullpath, stat * filestat);`
* ## ASM
* **In:**
* `>PUSHWI filename`
* `>PUSHWI fullpath`
* `>PUSHWI searchpath`
* `>PUSHWI filestat`
* ## RETURN VALUE
* CC : success
* DstBuf = FilePath
* DstStat = S.STAT
* CS : not found
*\--------------------------------------
K.FileSearch >PULLW .4+1 DstStat
>PULLW .2+1 DstBuf
>PULLW ENV.Search.2+1 path to search
>PULLW ENV.Search.4+1 filename to find
stz ENV.Search.98+1
jsr ENV.Search
bcs K.FileSearch.RTS
ldx #$ff
.1 inx
lda K.Buf256,x
.2 sta $ffff,x Self Modified
bne .1
ldx #S.STAT-1
.3 lda K.S.STAT,x
.4 sta $ffff,x Self Modified
dex
bpl .3
* clc
K.FileSearch.RTS
rts
*--------------------------------------
ENV.Search.CWD >STYA ENV.Search.4+1 filename to find
ldy #S.PS.hCWD
lda (PS.NewPSPtr),y
jsr K.GetMemPtr
>STYA ENV.Search.2+1
stz ENV.Search.98+1
bra ENV.Search
ENV.Search.LIB ldx #0
.HS 2C BIT ABS
ENV.Search.DRV ldx #2
.HS 2C BIT ABS
ENV.Search.PATH ldx #4
>STYA ENV.Search.4+1 filename to find
>PUSHW ENV.VARS,x
>PUSHWI 0 allocate...
jsr K.GetEnv get value for Search Path
bcs K.FileSearch.RTS
>STYA ENV.Search.2+1
stx ENV.Search.98+1
ENV.Search stz ENV.Search.1+1
ENV.Search.1 ldy #0 Self Modified Index in Search list string
ldx #0
ENV.Search.2 lda $ffff,y SELF MODIFIED
beq ENV.Search.3 end of string, try it....
iny
cmp #':'
beq ENV.Search.3
sta K.Buf256,x
inx
bra ENV.Search.2
ENV.Search.3 txa
beq ENV.Search.98 String is empty....nothing to try
sty ENV.Search.1+1 save current index
ldy #0
ENV.Search.4 lda $ffff,y Self Modified, Append Filename...
sta K.Buf256,x
beq ENV.Search.5
iny
inx
bra ENV.Search.4
ENV.Search.5 >PUSHWI K.S.STAT
>LDYAI K.Buf256
>SYSCALL2 stat
bcs ENV.Search.1 Failed...retry next path...
lda K.S.STAT+S.STAT.P.TYPE
cmp #S.FI.T.DIR Dir ?
beq ENV.Search.1
jsr ENV.Search.98 Discard Expanded hSrch list
clc
rts
ENV.Search.98 lda #$ff SELF MODIFIED : Discard Search list
beq .1
jsr K.FreeMem
.1 lda #MLI.E.FNOTFND
sec
rts
*--------------------------------------
ENV.VARS .DA .1
.DA .2
.DA .3
.1 .AZ "LIB"
.2 .AZ "DRV"
.3 .AZ "PATH"
*/--------------------------------------
* # GetMemStat
* **In:**
* Y,A = Ptr to 24 bytes buffer
@ -837,7 +966,7 @@ K.StrVDup >STYA ZPPtr1
*\--------------------------------------
ARG.bInQuote .EQ ZPPtr3
*--------------------------------------
K.Str2StrV jsr K.ExpandStr
K.Str2StrV jsr K.Expand
bcs .9
>STYA ZPPtr1

View File

@ -147,8 +147,7 @@ STDLIB.realpath.I
clc
ror .82+1
ldx #SYS.ExpandStr
jsr K.SYSCALL2
>SYSCALL2 expand
bcs K.atoi.RTS
>STYA ZPPtr1