From d258260ee4fd48948bb0c61d22ee96b97c934c5e Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Thu, 1 Jun 2017 14:38:57 +0200 Subject: Use TYPE for the standard output instead of io_putchar() All stdout text from the C code of the paflof binary (e.g. all output from printf() and friends) is currently only written via io_putchar() to the hvterm console. If the user decided to use a VGA display instead, the text is currently not shown there. This is especially affecting the output of the TFTP boot functions which are using printf() to provide valuable information like IP addresses and progress indication to the user. Let's fix this nuisance by routing the stdout text through the TYPE Forth word instead, so that it now shows up on both, the hvterm console and the VGA console. Signed-off-by: Thomas Huth Signed-off-by: Alexey Kardashevskiy --- slof/ppc64.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'slof/ppc64.c') diff --git a/slof/ppc64.c b/slof/ppc64.c index a3e84ae..83a8e82 100644 --- a/slof/ppc64.c +++ b/slof/ppc64.c @@ -71,19 +71,36 @@ static long writeLogByte_wrapper(long x, long y) */ ssize_t write(int fd, const void *buf, size_t count) { - int i; char *ptr = (char *)buf; + int len; if (fd != 1 && fd != 2) return 0; - for (i = 0; i < count; i++) { - if (*ptr == '\n') - io_putchar('\r'); - io_putchar(*ptr++); + if (!init_engine || fd == 2) { + len = count; + while (len-- > 0) { + if (*ptr == '\n') + io_putchar('\r'); + io_putchar(*ptr++); + } + return count; + } + + while ((ptr = strchr(buf, '\n')) != NULL) { + forth_push((long)buf); + forth_push((long)ptr - (long)buf); + forth_eval("type cr"); + buf = ptr + 1; + } + len = strlen(buf); + if (len) { + forth_push((long)buf); + forth_push(len); + forth_eval("type"); } - return i; + return count; } /* This should probably be temporary until a better solution is found */ -- cgit v1.1