; ======================================================================
; STR_SKIPWS -- candidate r002. Skip ASCII 09h,0Ah,0Dh,20h.
; Inputs: $10/$11 pointer, $12 capacity, $13 start offset (0..length).
; Outputs: $0 status; $8 first non-WS offset (or NUL index),
;          $9 number of skipped bytes; both zero on failure.
; Requires: str_abi.inc once. No code helpers. Source fully validated.
; Preserves input $10..$13 and RAM. Clobbers $0,$8,$9,$16,$17,
; $20,IX,flags. UA bank, $SY=1; zero initializers are immediates; no address wrap.
; ======================================================================
#LIST
STR_SKIPWS:
        LD      $8,0
        LD      $9,0
        LD      $0,STR_BCAP
        AN      $12,$12
        JR      Z,STR_SKIPWS_RET
        PRE     IX,$10
        LD      $20,0
SW_VALID:
        LD      $16,(IX+$20)
        AN      $16,$16
        JR      Z,SW_VDONE
        AD      $20,$SY
        LD      $17,$20
        SBC     $17,$12
        JR      C,SW_VALID
        LD      $0,STR_UNTR
        RTN
SW_VDONE:
        LD      $17,$20
        SBC     $17,$13
        JR      C,SW_BDOFF
        LD      $8,$13
STR_SKIPWS_LOOP:
        LD      $17,$8
        SBC     $17,$20
        JR      Z,STR_SKIPWS_OK
        LD      $16,(IX+$8)
        LD      $17,$16
        SBC     $17,&H09
        JR      Z,STR_SKIPWS_STEP
        LD      $17,$16
        SBC     $17,&H0A
        JR      Z,STR_SKIPWS_STEP
        LD      $17,$16
        SBC     $17,&H0D
        JR      Z,STR_SKIPWS_STEP
        SBC     $16,&H20
        JR      NZ,STR_SKIPWS_OK
STR_SKIPWS_STEP:
        AD      $8,$SY
        AD      $9,$SY
        JR      STR_SKIPWS_LOOP
SW_BDOFF:
        LD      $0,STR_BOFF
STR_SKIPWS_RET:
        RTN
STR_SKIPWS_OK:
        LD      $0,STR_OK
        RTN
