;›; smaller slicker hand-coded line-parsing routine›;›; assemble this with global.m65›;›; _parseline(line, argv) char * line; int * argv;›;› .globl __parseli›__parseli:› ldy #0› sty tmp1 ; use tmp1 as counter› jsr popax ; get argv ptr› sta ptr2 ; save into ptr2› stx ptr2+1› jsr popax ; get line pointer› sta ptr1 ; save in ptr1› stx ptr1+1› cpx #0› bne parse1 ; test line pointer for zero-ness...› lda ptr1› beq parse8›parse1: ; skip whitespace› ldy #0 ; get a char› lda (ptr1),y› beq parse8 ; done! finish up and leave› cmp #$9B ; EOL?› beq parse8 ; yup, same as nul› jsr white_p› bcc parse2 ; not white›parse1w:› inc ptr1 ; bump string ptr› bne parse1› inc ptr1+1› bne parse1››parse2: ; remember the ptr, bump arg count› ldy #0› lda ptr1› sta (ptr2),y ; store ptr lo› iny› lda ptr1+1› sta (ptr2),y ; ... ptr hi› inc tmp1 ; and bump arg count› clc› lda ptr2› adc #2 ; bump argv ptr› sta ptr2› bcc parse3› inc ptr2+1››parse3: ; find next whitespace› ldy #0› lda (ptr1),y ; get a char› beq parse8 ; nul, we're done› jsr white_p ; white?› bcs parse4 ; yes, found end of this arg› inc ptr1› bne parse3› inc ptr1+1› bne parse3›parse4:› pha ; save the char for a sec› lda #0› sta (ptr1),y ; zap in eos› pla ; get orig char back› beq parse8 ; done!› cmp #$9B› bne parse1w ; nope, go bump ptr and keep scanning››parse8: ; load up arg count and return› ldx #0› lda tmp1› rts››;›; return cond codes carry set if white, clear if non-white›;›white_p:› cmp #$7F ; > 7F?› bcs w_ret1 ; yes, that's white› cmp #$21 ; <= space?› bcs w_ret0 ; no, it's data.›w_ret1:› sec› rts›w_ret0:› clc› rts›