From aa82c562dbbbdabac2acc43d5002bfe8b46ca646 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Sat, 11 Apr 2026 16:30:26 -0400 Subject: strlen() => strlen8(), save a measly 4 bytes. 7597 bytes free. --- src/complete.c | 3 ++- src/strlen8.s | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/strlen8.s (limited to 'src') diff --git a/src/complete.c b/src/complete.c index 0a7055b..fd889b2 100644 --- a/src/complete.c +++ b/src/complete.c @@ -47,12 +47,13 @@ void comp_add_pm_chan(const char *n) { } char match(const char *p, const char *q) { + extern unsigned char strlen8(const char *str); char len; while(*p == '#') p++; while(*q == '#') q++; - len = strlen(p); + len = strlen8(p); if(!len) return 0; return strneq_i(p, q, len); diff --git a/src/strlen8.s b/src/strlen8.s new file mode 100644 index 0000000..c622d73 --- /dev/null +++ b/src/strlen8.s @@ -0,0 +1,24 @@ + ; strlen() implementation that only looks at the first 256 + ; byte of the string. returns 255 if the length is >=255. + ; saves a measly 4 bytes over the cc65 strlen(). + + ; extern unsigned char strlen8(const char *str); + + .importzp ptr1 + .export _strlen8 + +_strlen8: + sta ptr1 + stx ptr1+1 + ldy #0 +@loop: + lda (ptr1),y + beq @done + iny + bne @loop + dey ; return(255) if Y rolls over +@done: + tya + ldx #0 ; sadly necessary even though we return a char... + rts + -- cgit v1.2.3