Added its prototype. Documented it.
<title>cc65 function reference
<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
<url url="mailto:greg.king5@verizon.net" name="Greg King">
-<date>2018-05-23
+<date>2018-05-29
<abstract>
cc65 is a C compiler for 6502 based systems. This function reference describes
<item><ref id="strncmp" name="strncmp">
<item><ref id="strncpy" name="strncpy">
<item><ref id="strnicmp" name="strnicmp">
+<item><ref id="strpbrk" name="strpbrk">
<item><ref id="strqtok" name="strqtok">
<item><ref id="strrchr" name="strrchr">
<item><ref id="strspn" name="strspn">
</itemize>
<tag/Availability/ISO 9899
<tag/See also/
+<ref id="strpbrk" name="strpbrk">,
<ref id="strqtok" name="strqtok">,
<ref id="strspn" name="strspn">,
<ref id="strstr" name="strstr">,
</quote>
+<sect1>strpbrk<label id="strpbrk"><p>
+
+<quote>
+<descrip>
+<tag/Function/Find a character in a string, from a set of characters.
+<tag/Header/<tt/<ref id="string.h" name="string.h">/
+<tag/Declaration/<tt/char* __fastcall__ strpbrk (const char* str, const char* set);/
+<tag/Description/<tt/strpbrk()/ searches within <tt/str/ for the first
+occurance of any character from <tt/set/. It returns a pointer to that
+character if found; otherwise, it returns <tt/NULL/.
+<tag/Notes/<itemize>
+<item>The function is available only as a fastcall function;
+so, it should be used only in the presence of a prototype.
+</itemize>
+<tag/Availability/ISO 9899
+<tag/See also/
+<ref id="strchr" name="strchr">,
+<ref id="strcspn" name="strcspn">,
+<ref id="strqtok" name="strqtok">,
+<ref id="strspn" name="strspn">,
+<ref id="strtok" name="strtok">
+<tag/Example/None.
+</descrip>
+</quote>
+
+
<sect1>strqtok<label id="strqtok"><p>
<quote>
<tag/Availability/cc65
<tag/See also/
<ref id="strcspn" name="strcspn">,
-<!-- <ref id="strpbrk" name="strpbrk">, -->
+<ref id="strpbrk" name="strpbrk">,
<ref id="strspn" name="strspn">,
<ref id="strtok" name="strtok">
<tag/Example/None.
<tag/Availability/ISO 9899
<tag/See also/
<ref id="strcspn" name="strcspn">,
+<ref id="strpbrk" name="strpbrk">,
<ref id="strstr" name="strstr">
<tag/Example/None.
</descrip>
<tag/Availability/ISO 9899
<tag/See also/
<ref id="strcspn" name="strcspn">,
-<!-- <ref id="strpbrk" name="strpbrk">, -->
+<ref id="strpbrk" name="strpbrk">,
<ref id="strqtok" name="strqtok">,
<ref id="strspn" name="strspn">
<tag/Example/None.
char* __fastcall__ strncat (char* s1, const char* s2, size_t count);
int __fastcall__ strncmp (const char* s1, const char* s2, size_t count);
char* __fastcall__ strncpy (char* dest, const char* src, size_t count);
+char* __fastcall__ strpbrk (const char* str, const char* set);
char* __fastcall__ strrchr (const char* s, int c);
size_t __fastcall__ strspn (const char* s1, const char* s2);
char* __fastcall__ strstr (const char* str, const char* substr);
-;
-; Ullrich von Bassewitz, 11.06.1998
;
-; char* strpbrk (const char* s1, const char* s2);
+; 1998-06-11, Ullrich von Bassewitz
+; 2018-05-29, Greg King
+;
+; char* __fastcall__ strpbrk (const char* str, const char* set);
;
.export _strpbrk
- .import popax, return0
- .importzp ptr1, ptr2, tmp1, tmp2, tmp3
+
+ .import popax
+ .importzp ptr1, ptr2, tmp2, tmp3
_strpbrk:
- jsr popax ; get s2
- sta ptr2
+ sta ptr2 ; store set
stx ptr2+1
- jsr popax ; get s1
- sta ptr1
- stx ptr1+1
- ldy #$00
+ jsr popax
+ stx ptr1+1 ; store str's high byte
+ ldx #<$0000
+ stx ptr1
+ tay ; use str's low byte as index
-L1: lda (ptr1),y ; get next char from s1
+L1: lda (ptr1),y ; get next char from str
beq L9 ; jump if done
sta tmp2 ; save char
- iny
- bne L2
- inc ptr1+1
-L2: sty tmp3 ; save index into s1
+ sty tmp3 ; save index into str
- ldy #0 ; get index into s2
-L3: lda (ptr2),y ;
+ ldy #$00
+L3: lda (ptr2),y ; look at each char in set
beq L4 ; jump if done
cmp tmp2
- beq L6
+ beq L6 ; break out of loops if something found
iny
bne L3
-; The character was not found in s2. Increment the counter and start over
+; The character was not found in set. Increment the counter; and start over.
L4: ldy tmp3 ; reload index
- inx
- bne L1
- inc tmp1
+ iny
bne L1
+ inc ptr1+1
+ bne L1 ; branch always
-; A character was found. Calculate a pointer to this char in s1 and return it.
+; A character was found. Return its str pointer.
L6: ldx ptr1+1
- lda tmp3 ; get y offset
- clc
- adc ptr1
- bcc L7
- inx
-L7: rts
-
-; None of the characters in s2 was found - return NULL
-
-L9: jmp return0
-
-
+ lda tmp3 ; get .Y offset
+ rts
+; None of the characters in set was found -- return NULL.
+L9: ;ldx #>$0000 ; (set by prolog)
+ ;lda #<$0000 ; (set by '\0' at end of str)
+ rts
--- /dev/null
+#include <stdio.h>
+#include <string.h>
+
+static const char fox[] = "The quick brown fox jumped over the lazy dogs.";
+
+void main (void)
+{
+ printf ("Testing strpbrk():\n");
+ if (strpbrk (fox, "qwerty") != &fox[2]) {
+ printf ("\nThe first 'e' wasn't found.\n");
+ }
+ if (strpbrk (fox, "QWERTY") != &fox[0]) {
+ printf ("The 'T' wasn't found.\n");
+ }
+ if (strpbrk (fox, "asdfg") != &fox[16]) {
+ printf ("The 'f' wasn't found.\n");
+ }
+ if (strpbrk (fox, "nxv,zmb") != &fox[10]) {
+ printf ("The 'b' wasn't found.\n");
+ }
+ if (strpbrk (fox, "!@#$%^&*()-+=[];:',/?<>.") != &fox[45]) {
+ printf ("The '.' wasn't found.\n");
+ }
+
+ printf ("\nFinished.\n");
+}