NEW PREFIX AUTO 4,1 */-------------------------------------- * # Args2ArgV * Expand String and convert to ArgV List * ## C * short int args2argv(char* args, char* argv[]) * ## ASM * `>PUSHW argv` * `>LDYA args` * `>SYSCALL Args2ArgV * ## RETURN VALUE * A = Arg count *\-------------------------------------- ARG.bInQuote .EQ ZPPtr3 *-------------------------------------- K.Args2ArgV jsr K.ExpandStr bcs .9 >STYA ZPPtr1 stx .80+1 >PULLW ZPPtr2 Get target buffer ldx #0 Arg Count stz ARG.bInQuote .1 jsr MEM.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 MEM.PutCharPtr2 bra .1 .6 jsr MEM.PutCharPtr2 .7 jsr MEM.GetCharPtr1 bne .2 inx .8 jsr MEM.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 */-------------------------------------- * # ArgV * ## ASM * **In:** * A = argument index. * ## RETURN VALUE * CC : success * Y,A = PTR To Arg[A] * CS : Out Of Bound *\-------------------------------------- K.ArgV tax save requested arg# ldy #S.PS.hARGV lda (pPs),y jsr K.GetMemPtr >STYA ZPPtr1 .1 lda (ZPPtr1) end of ARGV[] ? beq .9 yes, not found.... dex bmi .7 .3 jsr MEM.GetCharPtr1 skip str bne .3 jsr MEM.NextCharPtr1 skip \0 bra .1 .7 >LDYA ZPPtr1 .8 clc rts .9 lda #E.OOB sec rts *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.ARG LOAD USR/SRC/SYS/KERNEL.S ASM