mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-24 15:31:17 +00:00
Updated module stringx
This commit is contained in:
parent
d4d3453b59
commit
71fa944e55
@ -1,48 +1,48 @@
|
||||
; C02 library stringx.h02 assembly language subroutines
|
||||
; Requires the subroutines and definitions from string.asm
|
||||
; Requires subroutines and definitions from string.asm
|
||||
|
||||
SUBROUTINE STRINGX
|
||||
|
||||
;Common Code - Initialize Variables
|
||||
STRXSI: JSR SETSRC ;Initialize Source String
|
||||
.INIVAR 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
|
||||
.CHKNXT LDY TEMP1
|
||||
LDA (DSTPTR),Y ;Get Next Character in Destination String
|
||||
BEQ .POPRET ;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
|
||||
.POPRET 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
|
||||
.RETNOF TXA ;Load End of String Flag into Accumulator
|
||||
BNE .RETURN ;If 0 Then
|
||||
.RETPOS LDA TEMP1 ; Load Character Position into Accumulator
|
||||
.RETURN RTS ;Return
|
||||
|
||||
;strpbk(&s) - Return position of first character in Destination
|
||||
; also contained in Source
|
||||
;Requires: DSTLO, dsthi - Pointer to destination string
|
||||
;Requires: DSTPTR - Pointer to destination string
|
||||
;Args: X,Y = Pointer to source string
|
||||
;Sets: srclo,srchi = Pointer to source string
|
||||
;Sets: SRCPTR = 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
|
||||
STRPBK: JSR .INIVAR ;Initialize Variables
|
||||
DEX ;Change End of String Flag to $FF
|
||||
BNE STRBRL ;Jump into strbrk subroutine
|
||||
BNE .STRBRK ;Jump into strbrk subroutine
|
||||
|
||||
;strbrk(&s) - Return length of Destination with characters
|
||||
; not contained in Source
|
||||
;Requires: DSTLO, dsthi - Pointer to destination string
|
||||
;Requires: DSTPTR - Pointer to destination string
|
||||
;Args: X,Y = Pointer to source string
|
||||
;Sets: srclo,srchi = Pointer to source string
|
||||
;Sets: SRCPTR = Pointer to source string
|
||||
; TEMP1 = Return value
|
||||
;Uses: TEMP0
|
||||
;Affects: C,X,Y
|
||||
@ -50,30 +50,30 @@ STRPBK: JSR STRXSI ;Initialize Variables
|
||||
; 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
|
||||
STRBRK: JSR .INIVAR ;Initialize Variables
|
||||
.STRBRK JSR .CHKNXT ;and Search for Character in Source String
|
||||
BCS .RETPOS ;If Not Found
|
||||
INC TEMP1 ; Increment Destination Pointer
|
||||
BPL STRBRL ; and Loop if < 128
|
||||
BMI STRXSX ;and Return Not Found
|
||||
BPL .STRBRK ; and Loop if < 128
|
||||
BMI .RETNOF ;and Return Not Found
|
||||
|
||||
;strspn(&s) - Return length of Destination with characters
|
||||
; contained in Source
|
||||
;Requires: DSTLO, dsthi - Pointer to destination string
|
||||
;Requires: DSTPTR - Pointer to destination string
|
||||
;Args: X,Y = Pointer to source string
|
||||
;Sets: srclo,srchi = Pointer to source string
|
||||
;Sets: SRCPTR = 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
|
||||
STRSPN: JSR .INIVAR ;Initialize Variables
|
||||
.SPLOOP JSR .CHKNXT ;and Search for Character in Source String
|
||||
BCC .RETPOS ;If Found
|
||||
INC TEMP1 ; Increment Destination Pointer
|
||||
BPL STRSPL ; and Loop if < 128
|
||||
BMI STRXSP ;Else Return Position
|
||||
BPL .SPLOOP ; and Loop if < 128
|
||||
BMI .RETPOS ;Else Return Position
|
||||
|
||||
;strtok(c, &s) - Split String by Specified Character
|
||||
;Args: A = Delimiter, 0 = Set String to Tokenize
|
||||
@ -113,7 +113,7 @@ STRTOK: ORA #0
|
||||
BCC .STLOOP ; Loop
|
||||
DEX ;Else Set End of Buffer Flag
|
||||
.STDONE LDA #0 ;Terminate String
|
||||
STA (DSTLO),Y ;
|
||||
STA (DSTPTR),Y ;
|
||||
.STRTN STY TEMP0 ;Save String Length
|
||||
INY ;Increment Past Delimiter
|
||||
TYA ; and Add to Buffer Position
|
||||
@ -126,5 +126,4 @@ STRTOK: ORA #0
|
||||
.STRTRN LDA TEMP0 ;Return String Length
|
||||
RTS
|
||||
|
||||
|
||||
ENDSUBROUTINE
|
||||
|
Loading…
Reference in New Issue
Block a user