; C02 library stringx.h02 assembly language subroutines
; Requires the subroutines and definitions from string.asm

;Common Code - Initialize Variables
STRXSI: JSR SETSRC      ;Initialize Source String
        STY TEMP1       ;Save Destination Pointer
        LDX #0          ;Set End of String Flag
        RTS             ;  and Return

;Common Code - Check Next Character in Destination String
STRXSL: LDY TEMP1
        LDA (DSTLO),Y   ;Get Next Character in Destination String
        BEQ STRXST      ;If NUL, Return from Calling Routine
        LDY #0          ;Initialize Source Pointer
        JMP STRCHA      ;Search for Character in Source and Return

;Common Code - Exit with Result
STRXST: PLA             ;Pop Return Address Off Stack
        PLA             ;  to force exit from Calling Routine
STRXSX: TXA             ;Load End of String Flag into Accumulator 
        BNE STRXSR      ;If 0 Then
STRXSP: LDA TEMP1       ;  Load Character Position into Accumulator
STRXSR: RTS             ;Return 

;strpbk(&s) - Return position of first character in Destination
;             also contained in Source
;Requires: DSTLO, dsthi - Pointer to destination string
;Args: X,Y = Pointer to source string
;Sets: srclo,srchi = Pointer to source string
;      TEMP1 = Position of last character checked
;Uses: TEMP0
;Affects: C,X,Y
;Returns: A = Position of first character that matches
;             $FF if no characters matched
STRPBK: JSR STRXSI      ;Initialize Variables
        DEX             ;Change End of String Flag to $FF
        BNE STRBRL      ;Jump into strbrk subroutine

;strbrk(&s) - Return length of Destination with characters 
;             not contained in Source
;Requires: DSTLO, dsthi - Pointer to destination string
;Args: X,Y = Pointer to source string
;Sets: srclo,srchi = Pointer to source string
;      TEMP1 = Return value
;Uses: TEMP0
;Affects: C,X,Y
;Returns: A = Length of matching string segment
;         Z = 1 if no characters matched 
;         N = 1 if > 127 characters matched
STRCSP:                 ;Alias to strbrk 
STRBRK: JSR STRXSI      ;Initialize Variables
STRBRL: JSR STRXSL      ;and Search for Character in Source String
        BCS STRXSP      ;If Not Found
        INC TEMP1       ;  Increment Destination Pointer
        BPL STRBRL      ;  and Loop if < 128 
        BMI STRXSX      ;and Return Not Found

;strspn(&s) - Return length of Destination with characters 
;             contained in Source
;Requires: DSTLO, dsthi - Pointer to destination string
;Args: X,Y = Pointer to source string
;Sets: srclo,srchi = Pointer to source string
;      TEMP1 = Return value
;Uses: TEMP0
;Affects: C,X,Y
;Returns: A = Length of matching string segment
;         Z = 1 if no characters matched 
;         N = 1 if > 127 characters matched
STRSPN: JSR STRXSI      ;Initialize Variables
STRSPL: JSR STRXSL      ;and Search for Character in Source String
        BCC STRXSP      ;If Found
        INC TEMP1       ;  Increment Destination Pointer
        BPL STRSPL      ;  and Loop if < 128 
        BMI STRXSP      ;Else Return Position

