millfork/include/stdio.mfk

89 lines
1.4 KiB
Plaintext

// 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])
}