From f3853fec1784f8f7f45961f8058894fa91b0495c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 24 Jan 2020 15:21:08 +0100 Subject: [PATCH] Kernel 0.93++ --- .Docs/KERNEL.md | 66 ++++++++++------- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CSH.I.txt | 12 +++ BIN/CSH.R.txt | 2 + BIN/CSH.S.CORE.txt | 36 ++++++--- BIN/SH.S.CMD.txt | 4 +- BIN/USERDEL.S.txt | 2 +- SBIN/INITD.S.txt | 10 +-- SBIN/LOGIN.S.txt | 2 +- SBIN/NETWORKD.S.txt | 2 +- SBIN/TELNETD.S.txt | 2 +- SYS/KERNEL.S.INIT.txt | 9 +-- SYS/KERNEL.S.JMP.txt | 8 +- SYS/KERNEL.S.MD5.txt | 21 +++--- SYS/KERNEL.S.MD5X.txt | 30 ++++---- SYS/KERNEL.S.PS.txt | 141 ++--------------------------------- SYS/KERNEL.S.STRV.txt | 156 +++++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.txt | 8 +- 18 files changed, 292 insertions(+), 219 deletions(-) create mode 100644 SYS/KERNEL.S.STRV.txt diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index fc8decab..d0de8c8b 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -335,7 +335,7 @@ A = hMem To S.MD5 Add Data to MD5 computation # C -`void md5update (hMD5 md5, char* data, int len);` +`void md5update (short int md5, char* data, int len);` # ASM `>PUSHB md5` @@ -348,7 +348,7 @@ Add Data to MD5 computation ## MD5Finalize # C -`void md5finalize (hMD5 md5, char* digest);` +`void md5finalize (short int md5, char* digest);` # ASM `>PUSHB md5` @@ -433,8 +433,8 @@ Load a file in AUX memory (Stock Objects) `int execl(const char* cmdline, short int flags);` ## ASM +`>PUSHW cmdline` `>PUSHB flags` -`>LDYA cmdline` `>SYSCALL execl` ## RETURN VALUE @@ -529,28 +529,6 @@ CS : not found ## RETURN VALUE Buffer filled with memory stats -# StrVDup -**In:** - Y,A = Src StrV - -## RETURN VALUE - X = hMem of new StrV - A = Str Count - -# Str2StrV -Expand String and convert to ArgV List - -## C -short int str2strv(char* args, char* argv[]) - -## ASM -`>PUSHW argv` -`>LDYA args` -`>SYSCALL Str2StrV` - -## RETURN VALUE -A = Arg count - # GetPWUID ## C @@ -1314,6 +1292,44 @@ CS : no match CC, Y,A=0 CS, Y,A > 0 or < 0 +# NewStrV +**In:** + A = Initial Size (Page) + +## RETURN VALUE + X = hStrV + Y,A = Ptr + +# StrVGet +**In:** + A = hStrV + X = index + +## RETURN VALUE + Y,A = Ptr + +# StrVDup +**In:** + Y,A = Src StrV + +## RETURN VALUE + X = hMem of new StrV + A = Str Count + +# Str2StrV +Expand String and convert to ArgV List + +## C +short int str2strv(char* args, char* argv[]) + +## ASM +`>PUSHW argv` +`>LDYA args` +`>SYSCALL Str2StrV` + +## RETURN VALUE +A = Arg count + # Time Get System Time in Buffer diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 284667719e20931c1a572e06f7454de2dcf1558d..ef9feeaf2dd4a114103b6af3e8ec8bfbd452db0c 100644 GIT binary patch delta 51846 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 A#Q*>R delta 51295 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 diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt index 2b2fd557..84289523 100644 --- a/BIN/CSH.I.txt +++ b/BIN/CSH.I.txt @@ -135,6 +135,12 @@ CSH.FN .DA #CSH.T.INT returned value .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #0 +* int execl(const char* cmdline, short int flags); + >PSTR "execl" + .DA #CSH.T.INT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.T.UCHAR + .DA #0 * int printf ( const char * format, ... ); >PSTR "printf" .DA #CSH.T.INT returned value @@ -163,6 +169,12 @@ CSH.FN .DA #CSH.T.INT returned value .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR .DA #0 +* void md5 (const char* str, char* digest); + >PSTR "md5" + .DA #CSH.T.VOID + .DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.CHAR + .DA #CSH.Q.POINTER+CSH.T.CHAR + .DA #0 * void * malloc ( int size ); >PSTR "malloc" .DA #CSH.Q.POINTER+CSH.T.VOID returned value diff --git a/BIN/CSH.R.txt b/BIN/CSH.R.txt index bdf31874..ed68190f 100644 --- a/BIN/CSH.R.txt +++ b/BIN/CSH.R.txt @@ -73,11 +73,13 @@ J.CSH.EXEC .DA EXEC.log .DA EXEC.atan .DA EXEC.getchar .DA EXEC.puts + .DA EXEC.execl .DA EXEC.printf .DA EXEC.putenv .DA EXEC.setenv .DA EXEC.getenv .DA EXEC.unsetenv + .DA EXEC.MD5 .DA EXEC.malloc *-------------------------------------- MAN diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index a5f1b2c8..7a99751f 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -346,6 +346,7 @@ CSH.fCall ldx ZPPtr1 phx ldx ZPPtr2+1 local : variadic size phx + sta ZPPtr2 save Type stz ZPPtr2+1 Reset VARIADIC byte count >LDYA L.CSH.FN @@ -373,11 +374,9 @@ CSH.fCall ldx ZPPtr1 .11 cmp (ZPPtr1) Get Return value Type bne .91 -.1 inc ZPPtr1 advance to arg list type - bne .2 - inc ZPPtr1+1 +.1 jsr CSH.ZPPtr1Next advance to arg list type -.2 lda (ZPPtr1) get type of first arg + lda (ZPPtr1) get type of first arg beq .7 end of list, go check ending ')' *-------------------------------------- .3 eor #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0 @@ -395,11 +394,12 @@ CSH.fCall ldx ZPPtr1 adc ZPPtr2+1 sta ZPPtr2+1 Add to byte count bra .51 -.5 inc ZPPtr1 - bne .51 - inc ZPPtr1+1 + +.5 jsr CSH.ZPPtr1Next + .51 jsr CSH.GetCharNB bcs .90 + cmp #',' bne .6 @@ -408,6 +408,7 @@ CSH.fCall ldx ZPPtr1 bne .3 Another ARG.... .52 bra .90 extra args....error + .6 cmp #')' bne .90 lda (ZPPtr1) @@ -657,17 +658,26 @@ CSH.Lookup phy Y = len jsr CSH.ZPPtr1AddAp1 >LDA.G CSH.LookupOpt bpl .1 - ldy #$ff + + ldy #$0 Start at Y=1 for VOID func() + .6 iny lda (ZPPtr1),y bne .6 + tya jsr CSH.ZPPtr1AddAp1 bra .1 + .9 pla sec rts *-------------------------------------- +CSH.ZPPtr1Next inc ZPPtr1 + bne .8 + inc ZPPtr1+1 +.8 rts +*-------------------------------------- CSH.ZPPtr1AddAp1 sec adc ZPPtr1 @@ -751,8 +761,6 @@ CSH.AddVarValueFromStack sec .HS 90 BCC *-------------------------------------- -* Y,A = VarID, X=Type -*-------------------------------------- CSH.SetVarValueFromStack clc php @@ -1227,6 +1235,10 @@ EXEC.printf >SYSCALL printf2 >PUSHYA rts *-------------------------------------- +EXEC.execl >SYSCALL execl + >PUSHYA + rts +*-------------------------------------- EXEC.putenv >SYSCALL putenv >PUSHYA rts @@ -1243,12 +1255,14 @@ EXEC.unsetenv >SYSCALL unsetenv >PUSHYA rts *-------------------------------------- +EXEC.MD5 >SYSCALL MD5 + rts +*-------------------------------------- EXEC.malloc >PULLYA >SYSCALL getmem >PUSHYA rts *-------------------------------------- -*-------------------------------------- MAN SAVE USR/SRC/BIN/CSH.S.CORE LOAD USR/SRC/BIN/CSH.S diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index b796e15b..7fe1baa5 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -266,8 +266,8 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out bcs .9 + >PUSHW ZPArgVBufPtr >PUSHBI S.PS.F.CLOSEONX - >LDYA ZPArgVBufPtr >SYSCALL execl bcs .9 @@ -878,8 +878,8 @@ CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out bcs FOR.FILE.9 + >PUSHW ZPArgVBufPtr >PUSHBI S.PS.F.CLOSEONX - >LDYA ZPArgVBufPtr >SYSCALL execl bcs FOR.FILE.9 diff --git a/BIN/USERDEL.S.txt b/BIN/USERDEL.S.txt index 492edce4..bcac706f 100644 --- a/BIN/USERDEL.S.txt +++ b/BIN/USERDEL.S.txt @@ -170,8 +170,8 @@ CS.RUN.RmDir lda bDelete adc /S.PW.DIR >LDYA ZPStrPtr >SYSCALL strcat + >PUSHW ZPStrPtr >PUSHBI S.PS.F.HOLD - >LDYA ZPStrPtr >SYSCALL execl rts *-------------------------------------- diff --git a/SBIN/INITD.S.txt b/SBIN/INITD.S.txt index 2d0fe7ac..a549c781 100644 --- a/SBIN/INITD.S.txt +++ b/SBIN/INITD.S.txt @@ -4,7 +4,7 @@ AUTO 4,1 Enable MASM3 auto line num .LIST OFF .OP 65C02 Target CPU, must match CPU level in header .OR $2000 usualy $2000, but any value > $100 allowed - .TF SBIN/INITD + .TF sbin/initd *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -64,14 +64,14 @@ CS.RUN ldy #S.PS.PID bne .1 >LDYA L.MSG.CTRLR >SYSCALL puts + >PUSHW L.BINSHELL >PUSHBI S.PS.F.HOLD - >LDYA L.BINSHELL >SYSCALL ExecL >SLEEP .1 >LDYA L.MSG.ETCINIT >SYSCALL puts + >PUSHW L.ETCINIT >PUSHBI S.PS.F.HOLD - >LDYA L.ETCINIT >SYSCALL ExecL >SLEEP >LDYA L.MSG.RUNNING @@ -105,8 +105,8 @@ CS.END *-------------------------------------- MSG.CTRLR .AZ "INITD:Ctrl-R Pressed, entering ROOT mode..." MSG.ETCINIT .AS "INITD:Executing ETC/INIT Script:" -ETCINIT .AZ "${ROOT}ETC/INIT" -BINSHELL .AZ "${ROOT}BIN/SHELL" +ETCINIT .AZ "${ROOT}etc/init" +BINSHELL .AZ "${ROOT}bin/sh" MSG.RUNNING .AZ "INITD:Running..." MSH.SHUTDOWN .AZ "INITD:Shutting down..." *-------------------------------------- diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index a8f52f70..36c5f04e 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -294,8 +294,8 @@ CS.RUN.EXEC ldx #1 jsr CS.RUN.DumpFile jsr CS.CLEANUP + >PUSHW L.SHELL >PUSHBI S.PS.F.HOLD - >LDYA L.SHELL >SYSCALL ExecL bcs .9 diff --git a/SBIN/NETWORKD.S.txt b/SBIN/NETWORKD.S.txt index 42d7c627..0987ef42 100644 --- a/SBIN/NETWORKD.S.txt +++ b/SBIN/NETWORKD.S.txt @@ -194,8 +194,8 @@ CS.INIT.CONF >LDYAI 64 >LDYA L.MSG.EXEC >SYSCALL printf + >PUSHW pBuf >PUSHBI 0 S.PS.F.HOLD+S.PS.F.NOHUP - >LDYA pBuf >SYSCALL execL bra .1 diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index a5fa0f9e..1357962a 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -197,8 +197,8 @@ CS.RUN.CLIENT >SLEEP give some time for TCPIP SYN/ACK >LEA.G CmdBuf >SYSCALL sprintf + >PUSHEA.G CmdBuf >PUSHBI 0 - >LEA.G CmdBuf >SYSCALL execl bcc .8 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 842ebbeb..28e4e1e6 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -166,8 +166,7 @@ Kernel.Init3C >PUSHBI 0 >PUSHBI 0 >LDYAI MSG.CTRLR >SYSCALL2 printf - >PUSHBI 0 PS Flags - >LDYAI CTRLR.SHELL + >PUSHWI CTRLR.SHELL bra .8 .7 >PUSHWI ETCINIT.CMDLINE @@ -175,10 +174,10 @@ Kernel.Init3C >PUSHBI 0 >LDYAI MSG.EtcInit >SYSCALL2 printf - >PUSHBI 0 PS Flags - >LDYAI ETCINIT.CMDLINE + >PUSHWI ETCINIT.CMDLINE -.8 >SYSCALL2 ExecL +.8 >PUSHBI 0 PS Flags + >SYSCALL2 ExecL bcs Kernel.Init3.Err >PUSHBI 0 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 7399394e..7f567f54 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -369,13 +369,13 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA #$80 .DA #0 .DA #$80 - .DA #$C0 $C8 : MD5X + .DA #0 $C8 : MD5 .DA #$80 - .DA #$C0 + .DA #0 .DA #$80 - .DA #$C0 + .DA #0 .DA #$80 - .DA #$C0 + .DA #0 .DA #$80 .DA #$C0 $D0 : PWDX diff --git a/SYS/KERNEL.S.MD5.txt b/SYS/KERNEL.S.MD5.txt index 93534e59..7fa0f421 100644 --- a/SYS/KERNEL.S.MD5.txt +++ b/SYS/KERNEL.S.MD5.txt @@ -12,7 +12,8 @@ NEW * ## RETURN VALUE * CC *\-------------------------------------- -K.MD5 >PULLW FORPNT +K.MD5 >DEBUG + >PULLW FORPNT >PULLYA >STYA TXTPTR @@ -22,12 +23,14 @@ K.MD5 >PULLW FORPNT sta SETREADAUX sta SETWRITEAUX -.1 jsr K.MD5Init.I +.1 jsr MD5X.Init bcs .9 + pha save MD5 Context hMem - jsr MD5Update.I - jsr MD5Finalize.I + jsr MD5X.Update + jsr MD5X.Finalize + pla >SYSCALL2 FreeMem Free MD5 Context clc @@ -48,7 +51,7 @@ K.MD5 >PULLW FORPNT K.MD5Init sta SETREADAUX sta SETWRITEAUX - jsr K.MD5Init.I + jsr MD5X.Init sta CLRREADAUX sta CLRWRITEAUX @@ -57,7 +60,7 @@ K.MD5Init sta SETREADAUX * ## MD5Update * Add Data to MD5 computation * # C -* `void md5update (hMD5 md5, char* data, int len);` +* `void md5update (short int md5, char* data, int len);` * # ASM * `>PUSHB md5` * `>PUSHW data` @@ -74,7 +77,7 @@ K.MD5Update >PULLW ZPDataLen get LEN sta SETREADAUX sta SETWRITEAUX - jsr K.MD5Update.I + jsr MD5X.Update sta CLRREADAUX sta CLRWRITEAUX @@ -82,7 +85,7 @@ K.MD5Update >PULLW ZPDataLen get LEN */-------------------------------------- * ## MD5Finalize * # C -* `void md5finalize (hMD5 md5, char* digest);` +* `void md5finalize (short int md5, char* digest);` * # ASM * `>PUSHB md5` * `>PUSHW digest` @@ -98,7 +101,7 @@ K.MD5Finalize >PULLW FORPNT sta SETREADAUX sta SETWRITEAUX - jsr MD5Finalize.I + jsr MD5X.Finalize .8 lda #$ff SELF MODIFIED >SYSCALL2 FreeMem diff --git a/SYS/KERNEL.S.MD5X.txt b/SYS/KERNEL.S.MD5X.txt index 6e087341..31f7d6f6 100644 --- a/SYS/KERNEL.S.MD5X.txt +++ b/SYS/KERNEL.S.MD5X.txt @@ -80,46 +80,46 @@ ZS.END .ED bne :2 .EM *-------------------------------------- -K.MD5Init.I >LDYAI S.MD5 - >SYSCALL2 getmem +MD5X.Init >LDYAI S.MD5 + >SYSCALL2 getmem0 bcs .9 >STYA ZPCtxPtr - ldy #0 + + ldy #15 .1 lda MD5.ABCDINIT,y sta (ZPCtxPtr),y - iny - cpy #S.MD5.BITCOUNT - bne .1 - - lda #0 - -.2 sta (ZPCtxPtr),y - iny - cpy #S.MD5 Includes S.MD5.FINALIZED Flag - bne .2 + dey + bpl .1 txa clc .9 rts *-------------------------------------- -MD5Update.I ldy #S.MD5.FINALIZED +MD5X.Update ldy #S.MD5.FINALIZED lda (ZPCtxPtr),y beq .1 + sec rts + .1 lda ZPDataLen+1 More than 256 Bytes remaining to hash ? bne .3 yes + lda ZPDataLen bne .2 Len = O ? + clc All data processed rts + .2 cmp #64 More than 64 Bytes remaining to hash ? bcc .50 yes + .3 lda #64 .50 sta ZPChunkLen Save Chunk Len + jsr MD5UpdateBitCount ldy #0 @@ -166,7 +166,7 @@ MD5Update.I ldy #S.MD5.FINALIZED inc TXTPTR+1 bra .1 *-------------------------------------- -MD5Finalize.I ldy #S.MD5.FINALIZED +MD5X.Finalize ldy #S.MD5.FINALIZED lda (ZPCtxPtr),y bne .11 diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index df2a4443..0619ff4f 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -13,16 +13,16 @@ PS.NewPSPtr .BS 2 * ## C * `int execl(const char* cmdline, short int flags);` * ## ASM +* `>PUSHW cmdline` * `>PUSHB flags` -* `>LDYA cmdline` * `>SYSCALL execl` * ## RETURN VALUE * A = Child PSID *\-------------------------------------- -K.ExecL sty .1+1 - sta .2+1 - >PULLB PS.Flags - +K.ExecL >PULLB PS.Flags + >PULLB .1+1 + >PULLB .2+1 + >LDYAI 256 jsr K.GetMem bcs .99 @@ -899,137 +899,6 @@ K.GetMemStat >STYA ZPPtr1 bpl .3 clc rts -*/-------------------------------------- -* # StrVDup -* **In:** -* Y,A = Src StrV -* ## RETURN VALUE -* X = hMem of new StrV -* A = Str Count -*\-------------------------------------- -K.StrVDup >STYA ZPPtr1 - >STYA ZPPtr2 - - ldy #0 - ldx #0 - -.1 lda (ZPPtr2),y - beq .2 - -.11 iny - bne .1 - - inx - inc ZPPtr2+1 - bra .1 - -.2 iny - bne .3 - inx - inc ZPPtr2+1 - -.3 lda (ZPPtr2),y - bne .11 - - txa - - jsr K.getmem - bcs .9 - - >STYA ZPPtr2 - phx - - ldx #0 - - ldy #0 - -.4 lda (ZPPtr1),y -.5 sta (ZPPtr2),y - beq .6 - - iny - bne .4 - - inc ZPPtr1+1 - inc ZPPtr2+1 - bra .4 - -.6 inx - - iny - bne .7 - - inc ZPPtr1+1 - inc ZPPtr2+1 - -.7 lda (ZPPtr1),y - bne .5 - sta (ZPPtr2),y Ending \0 - - txa - plx hMem - - clc -.9 rts -*/-------------------------------------- -* # Str2StrV -* Expand String and convert to ArgV List -* ## C -* short int str2strv(char* args, char* argv[]) -* ## ASM -* `>PUSHW argv` -* `>LDYA args` -* `>SYSCALL Str2StrV` -* ## RETURN VALUE -* A = Arg count -*\-------------------------------------- -ARG.bInQuote .EQ ZPPtr3 -*-------------------------------------- -K.Str2StrV jsr K.Expand - - bcs .9 - >STYA ZPPtr1 - stx .80+1 - - >PULLW ZPPtr2 Get target buffer - ldx #0 Arg Count - stz ARG.bInQuote - -.1 jsr SHARED.GetCharPtr1 - beq .8 - cmp #C.SPACE - beq .1 skip leading spaces -.2 cmp #'"' found a quote ? - bne .3 - lda ARG.bInQuote - eor #$ff - sta ARG.bInQuote - bra .7 skip quote and check next char -.3 cmp #C.SPACE - bne .6 regular char ...store... - bit ARG.bInQuote - bmi .6 between quotes... store space... - - inx Found one arg !!! - lda #0 set this token End - jsr SHARED.PutCharPtr2 - bra .1 -.6 jsr SHARED.PutCharPtr2 - -.7 jsr SHARED.GetCharPtr1 - bne .2 - inx -.8 jsr SHARED.PutCharPtr2 set Argv[x] Ending 0 - - sta (ZPPtr2) set Array Ending 0 - phx -.80 lda #$FF SELF MODIFIED - jsr K.FreeMem Discard expanded string - pla get back Arg Count - -* clc - rts -.9 >RET 2 Discard target buffer *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.PS diff --git a/SYS/KERNEL.S.STRV.txt b/SYS/KERNEL.S.STRV.txt new file mode 100644 index 00000000..861c5436 --- /dev/null +++ b/SYS/KERNEL.S.STRV.txt @@ -0,0 +1,156 @@ +NEW + AUTO 3,1 +*/-------------------------------------- +* # NewStrV +* **In:** +* A = Initial Size (Page) +* ## RETURN VALUE +* X = hStrV +* Y,A = Ptr +*\-------------------------------------- +K.NewStrV +*/-------------------------------------- +* # StrVGet +* **In:** +* A = hStrV +* X = index +* ## RETURN VALUE +* Y,A = Ptr +*\-------------------------------------- +K.StrVGet +*/-------------------------------------- +* # StrVDup +* **In:** +* Y,A = Src StrV +* ## RETURN VALUE +* X = hMem of new StrV +* A = Str Count +*\-------------------------------------- +K.StrVDup >STYA ZPPtr1 + >STYA ZPPtr2 + + ldy #0 + ldx #0 + +.1 lda (ZPPtr2),y + beq .2 + +.11 iny + bne .1 + + inx + inc ZPPtr2+1 + bra .1 + +.2 iny + bne .3 + inx + inc ZPPtr2+1 + +.3 lda (ZPPtr2),y + bne .11 + + txa + + jsr K.getmem + bcs .9 + + >STYA ZPPtr2 + phx + + ldx #0 + + ldy #0 + +.4 lda (ZPPtr1),y +.5 sta (ZPPtr2),y + beq .6 + + iny + bne .4 + + inc ZPPtr1+1 + inc ZPPtr2+1 + bra .4 + +.6 inx + + iny + bne .7 + + inc ZPPtr1+1 + inc ZPPtr2+1 + +.7 lda (ZPPtr1),y + bne .5 + sta (ZPPtr2),y Ending \0 + + txa + plx hMem + + clc +.9 rts +*/-------------------------------------- +* # Str2StrV +* Expand String and convert to ArgV List +* ## C +* short int str2strv(char* args, char* argv[]) +* ## ASM +* `>PUSHW argv` +* `>LDYA args` +* `>SYSCALL Str2StrV` +* ## RETURN VALUE +* A = Arg count +*\-------------------------------------- +ARG.bInQuote .EQ ZPPtr3 +*-------------------------------------- +K.Str2StrV jsr K.Expand + + bcs .9 + >STYA ZPPtr1 + stx .80+1 + + >PULLW ZPPtr2 Get target buffer + ldx #0 Arg Count + stz ARG.bInQuote + +.1 jsr SHARED.GetCharPtr1 + beq .8 + cmp #C.SPACE + beq .1 skip leading spaces +.2 cmp #'"' found a quote ? + bne .3 + lda ARG.bInQuote + eor #$ff + sta ARG.bInQuote + bra .7 skip quote and check next char +.3 cmp #C.SPACE + bne .6 regular char ...store... + bit ARG.bInQuote + bmi .6 between quotes... store space... + + inx Found one arg !!! + lda #0 set this token End + jsr SHARED.PutCharPtr2 + bra .1 +.6 jsr SHARED.PutCharPtr2 + +.7 jsr SHARED.GetCharPtr1 + bne .2 + inx +.8 jsr SHARED.PutCharPtr2 set Argv[x] Ending 0 + + sta (ZPPtr2) set Array Ending 0 + phx +.80 lda #$FF SELF MODIFIED + jsr K.FreeMem Discard expanded string + pla get back Arg Count + +* clc + rts +.9 >RET 2 Discard target buffer +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.STRV +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index ddb94980..f0477d02 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -46,7 +46,6 @@ A2osX.AUX .DA #0 A2osX.AUX.B .PH $1000 .INB USR/SRC/SYS/KERNEL.S.OSDX - .INB USR/SRC/SYS/KERNEL.S.SLISTX Mem.XLoMem .EQ * .EP A2osX.AUX.S .EQ *-A2osX.AUX.B @@ -59,6 +58,7 @@ A2osX.AUXH.B .PH Mem.XHiMem .INB USR/SRC/SYS/KERNEL.S.MD5X .INB USR/SRC/SYS/KERNEL.S.PWDX .INB USR/SRC/SYS/KERNEL.S.TIMEX + .INB USR/SRC/SYS/KERNEL.S.SLISTX .EP A2osX.AUXH.S .EQ *-A2osX.AUXH.B @@ -107,11 +107,13 @@ A2osX.E0.B .PH $E000 .INB USR/SRC/SYS/KERNEL.S.IRQ .INB USR/SRC/SYS/KERNEL.S.MEM .INB USR/SRC/SYS/KERNEL.S.MATH + .INB USR/SRC/SYS/KERNEL.S.STRV .INB USR/SRC/SYS/KERNEL.S.TERM - .INB USR/SRC/SYS/KERNEL.S.SHARED - .INB USR/SRC/SYS/KERNEL.S.STDIO2 + .INB USR/SRC/SYS/KERNEL.S.MD5 .INB USR/SRC/SYS/KERNEL.S.PWD .INB USR/SRC/SYS/KERNEL.S.TIME + .INB USR/SRC/SYS/KERNEL.S.SHARED + .INB USR/SRC/SYS/KERNEL.S.STDIO2 * go to A2osX.D1 .INB USR/SRC/SYS/KERNEL.S.IO .INB USR/SRC/SYS/KERNEL.S.PIPE