mirror of
https://github.com/KarolS/millfork.git
synced 2024-12-28 11:31:58 +00:00
78 lines
1.4 KiB
Plaintext
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
|