A2osX/SYS/KERNEL.S.ARG.txt

224 lines
3.6 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
2019-05-25 19:24:07 +00:00
AUTO 3,1
*/--------------------------------------
2020-02-06 16:23:59 +00:00
* # 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
2021-05-04 17:31:21 +00:00
.2 jsr SHARED.AddYp12P1
2020-02-06 16:23:59 +00:00
ldy #$ff
.3 iny
lda (ZPPtr1),y
sta (ZPPtr2),y
bne .3
tya
beq .8
2021-05-04 17:31:21 +00:00
jsr SHARED.AddYp12P2
2020-02-06 16:23:59 +00:00
bra .2
.8 ldy #S.PS.ARGC
lda (pPS),y
dec
sta (pPS),y
clc
.9 rts
*/--------------------------------------
2018-10-16 15:48:03 +00:00
* # ArgV
2018-06-18 06:22:50 +00:00
* ## ASM
2018-06-14 15:31:36 +00:00
* A = argument index.
2018-10-11 15:23:06 +00:00
* ## RETURN VALUE
2018-06-14 15:31:36 +00:00
* CC : success
* Y,A = PTR To Arg[A]
* CS : Out Of Bound
*\--------------------------------------
2018-10-18 15:32:57 +00:00
K.ArgV tax save requested arg#
2018-10-16 15:48:03 +00:00
ldy #S.PS.hARGV
2020-02-28 07:21:46 +00:00
lda (pPS),y
2018-06-21 15:12:10 +00:00
jsr K.GetMemPtr
2019-09-10 10:22:57 +00:00
>STYA ZPPtr2 Use Ptr2, called from ExpandStr
.1 lda (ZPPtr2) end of ARGV[] ?
2018-10-18 15:32:57 +00:00
beq .9 yes, not found....
2018-10-18 15:32:57 +00:00
dex
bmi .7
2021-05-04 17:31:21 +00:00
.3 jsr SHARED.GetCP2 skip str
bne .3
2021-05-04 17:31:21 +00:00
jsr SHARED.NextCP2 skip \0
2018-10-18 15:32:57 +00:00
bra .1
2019-09-10 10:22:57 +00:00
.7 >LDYA ZPPtr2
2018-06-14 15:31:36 +00:00
.8 clc
rts
2019-02-19 16:34:43 +00:00
.9 lda #E.OOB
sec
rts
2020-02-07 12:53:46 +00:00
*/--------------------------------------
* # Arg2ArgV
* Expand String and convert to StrV List
* ## C
* short int arg2argv(char* args, char* argv[])
* ## ASM
2020-02-14 07:21:56 +00:00
* `>PUSHW args`
2020-02-07 12:53:46 +00:00
* `>PUSHW argv`
* `>SYSCALL Arg2ArgV`
* ## RETURN VALUE
* A = Arg count
*\--------------------------------------
2020-02-14 07:21:56 +00:00
K.Arg2ArgV >PULLW ZPPtr2 Get target buffer
2021-07-24 20:42:23 +00:00
>PUSHWZ allocate a new buffer
2020-02-14 07:21:56 +00:00
jsr K.Expand args on stack
2020-02-07 12:53:46 +00:00
bcs .9
2020-02-14 07:21:56 +00:00
2020-02-07 12:53:46 +00:00
>STYA ZPPtr1
stx .80+1
ldx #0 Arg Count
ldy #0 bInQuote
2021-05-04 17:31:21 +00:00
.1 jsr SHARED.GetCP1
2020-02-07 12:53:46 +00:00
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...
2020-02-07 12:53:46 +00:00
tya
bmi .4 between quotes... store space...
inx Found one arg !!!
lda #0 set this token End
2021-05-04 17:31:21 +00:00
jsr SHARED.PutCP2
2020-02-07 12:53:46 +00:00
bra .1
.4 lda #C.SPACE
2021-05-04 17:31:21 +00:00
.6 jsr SHARED.PutCP2
2020-02-07 12:53:46 +00:00
2021-05-04 17:31:21 +00:00
.7 jsr SHARED.GetCP1
2020-02-07 12:53:46 +00:00
bne .2
inx
2021-05-04 17:31:21 +00:00
.8 jsr SHARED.PutCP2 set Argv[x] Ending 0
2020-02-07 12:53:46 +00:00
sta (ZPPtr2) set Array Ending 0
phx
.80 lda #$FF SELF MODIFIED
jsr K.FreeMem Discard expanded string
pla get back Arg Count
* clc
2020-02-14 07:21:56 +00:00
.9 rts
2020-02-07 15:35:52 +00:00
*/--------------------------------------
* # 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
2021-05-04 17:31:21 +00:00
ldx #0
2021-04-29 11:56:34 +00:00
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
2021-05-04 17:31:21 +00:00
txa Count
plx hMem
clc
.9 rts
2021-04-29 11:56:34 +00:00
*--------------------------------------
2016-08-17 06:25:58 +00:00
MAN
2020-08-02 12:19:43 +00:00
SAVE usr/src/sys/kernel.s.arg
LOAD usr/src/sys/kernel.s
2016-08-17 06:25:58 +00:00
ASM