A2osX/SYS/KERNEL.S.ARG.txt

224 lines
3.6 KiB
Plaintext
Raw Permalink 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
*/--------------------------------------
* # Shift
* ## ASM
* A = argument index.
* ## RETURN VALUE
* CC : success
* Y,A = PTR To Arg[A]
* CS : Out Of Bound
*\--------------------------------------
K.Shift jsr K.ArgV
bcs .9
>STYA ZPPtr1
* >STYA ZPPtr2 already set from ArgV
ldy #$ff
.1 iny
lda (ZPPtr1),y
bne .1
.2 jsr SHARED.AddYp12P1
ldy #$ff
.3 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .3
tya
beq .8
jsr SHARED.AddYp12P2
bra .2
.8 ldy #S.PS.ARGC
lda (pPS),y
dec
sta (pPS),y
clc
.9 rts
*/--------------------------------------
* # ArgV
* ## ASM
* 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 ZPPtr2 Use Ptr2, called from ExpandStr
.1 lda (ZPPtr2) end of ARGV[] ?
beq .9 yes, not found....
dex
bmi .7
.3 jsr SHARED.GetCP2 skip str
bne .3
jsr SHARED.NextCP2 skip \0
bra .1
.7 >LDYA ZPPtr2
.8 clc
rts
.9 lda #E.OOB
sec
rts
*/--------------------------------------
* # Arg2ArgV
* Expand String and convert to StrV List
* ## C
* short int arg2argv(char* args, char* argv[])
* ## ASM
* `>PUSHW args`
* `>PUSHW argv`
* `>SYSCALL Arg2ArgV`
* ## RETURN VALUE
* A = Arg count
*\--------------------------------------
K.Arg2ArgV >PULLW ZPPtr2 Get target buffer
>PUSHWZ allocate a new buffer
jsr K.Expand args on stack
bcs .9
>STYA ZPPtr1
stx .80+1
ldx #0 Arg Count
ldy #0 bInQuote
.1 jsr SHARED.GetCP1
beq .8
cmp #C.SPACE
beq .1 skip leading spaces
.2 cmp #'"' found a quote ?
bne .3
tya
eor #$ff
tay
bra .7 skip quote and check next char
.3 cmp #C.SPACE
bne .6 regular char ...store...
tya
bmi .4 between quotes... store space...
inx Found one arg !!!
lda #0 set this token End
jsr SHARED.PutCP2
bra .1
.4 lda #C.SPACE
.6 jsr SHARED.PutCP2
.7 jsr SHARED.GetCP1
bne .2
inx
.8 jsr SHARED.PutCP2 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
.9 rts
*/--------------------------------------
* # ArgVDup
* ## ASM
* Y,A = Src StrV
* ## RETURN VALUE
* X = hMem of new StrV
* A = Str Count
*\--------------------------------------
K.ArgVDup >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
sta (ZPPtr2),y
beq .6
.5 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
sta (ZPPtr2),y Ending \0 ?
bne .5
txa Count
plx hMem
clc
.9 rts
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.arg
LOAD usr/src/sys/kernel.s
ASM