1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-06-09 16:29:34 +00:00
millfork/include/internal/string_fastpointers.mfk

78 lines
1.4 KiB
Plaintext

#pragma zilog_syntax
byte strzlen(pointer str) {
pointer end
end = str
while end[0] != nullchar {
end += 1
}
return lo(end - str)
}
sbyte strzcmp(pointer str1, pointer str2) {
while true {
if str1[0] == nullchar {
if str2[0] == nullchar {
return 0
} else {
return -1
}
} else if str1[0] != str2[0] {
if str1[0] < str2[0] { return -1 }
return 1
}
str1 += 1
str2 += 1
}
}
#if CPUFEATURE_Z80 || CPUFEATURE_8080
void strzcopy(pointer dest, pointer src) {
asm {
? LD HL,(src)
? LD DE,(dest)
___strzcopy_loop:
LD A,(HL)
LD (DE),A
INC HL
INC DE
? CP nullchar
? JP NZ, ___strzcopy_loop
}
}
void strzpaste(pointer dest, pointer src) {
asm {
? LD HL,(src)
? LD DE,(dest)
___strzpaste_loop:
LD A,(HL)
? CP nullchar
? RET Z
LD (DE),A
INC HL
INC DE
? JP ___strzpaste_loop
}
}
#else
void strzcopy(pointer dest, pointer src) {
byte c
do {
c = src[0]
dest[0] = c
src += 1
dest += 1
} while c != nullchar
}
void strzpaste(pointer dest, pointer src) {
byte c
while true {
c = src[0]
if c == nullchar { return }
dest[0] = c
src += 1
dest += 1
}
}
#endif