// target-independent standard I/O routines import string #if ZX_SPECTRUM import stdio_zxspectrum #endif #if not(ZX_SPECTRUM) void putstr(pointer str, byte len) { byte index index = 0 while (index != len) { putchar(str[index]) index += 1 } } #endif #if NEC_PC_88 asm void putstrz(pointer hl) @$5550 extern #endif #if not(ZX_SPECTRUM) && not(NEC_PC_88) void putstrz(pointer str) { byte index index = 0 while str[index] != nullchar { putchar(str[index]) index += 1 } } #endif void putword(word w) { byte digits byte lastdigit digits = 0 word mask for mask:[40000,4000,400,40,4] { lastdigit = 0 while w >= mask { w -= mask lastdigit += 4 } mask >>= 2 while w >= mask { w -= mask lastdigit += 1 } if digits != 0 || lastdigit != 0 { putchar('0' + lastdigit) digits += 1 } } if digits == 0 { putchar('0') } } void putsigned16(signed16 x) { if x < 0 { putchar('-') x = 0000-x } putword(x) } #if CBM_PET inline asm void ensure_mixedcase() { ? lda #14 ! sta 59468 ? rts } #elseif CBM inline void ensure_mixedcase() { putchar(14) } #else inline void ensure_mixedcase() { } #endif void putpstr(pointer pstr) { putstr(pstr + 1, pstr[0]) }