#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