Index: printf.c
===================================================================
RCS file: /DOCUME~1/Rich/MYDOCU~1/cvsnt/project/sources/printf.c,v
retrieving revision 1.51
retrieving revision 1.53
diff -u -b -p -r1.51 -r1.53 --- printf.c 26 Feb 2010 13:59:42 -0000 1.51 +++ printf.c 14 Mar 2010 15:02:49 -0000 1.53 @@ -274,21 +274,55 @@ sprintf(char *buffer, const char *format return n; } +#if ! MCF51QE128 && ! MC9S08QE128 +#define FASTPRINT 1 +#endif + #if ! STICK_GUEST +#if FASTPRINT +static char abuffer[BASIC_LINE_SIZE+2]; // 2 for \r\n +#endif static char bbuffer[BASIC_LINE_SIZE+2]; // 2 for \r\n #else +#if FASTPRINT +static char abuffer[BASIC_LINE_SIZE+1]; // 1 for \n +#endif static char bbuffer[BASIC_LINE_SIZE+1]; // 1 for \n #endif +static int tprintf(char *buffer, int n); + int printf(const char *format, ...) { int n; +#if FASTPRINT + int m; +#endif va_list ap; +#if FASTPRINT + if (run_printf) { + m = strlen(abuffer); + va_start(ap, format); + n = vsnprintf(abuffer+m, sizeof(abuffer)-m, format, ap); + va_end(ap); + if (strchr(format, '\n')) { + n = tprintf(abuffer, m+n); + abuffer[0] = '\0'; + } + } else { + if (abuffer[0]) { + tprintf(abuffer, strlen(abuffer)); + } + abuffer[0] = '\0'; +#endif va_start(ap, format); n = vprintf(format, ap); va_end(ap); +#if FASTPRINT + } +#endif return n; } @@ -362,20 +396,29 @@ int vprintf(const char *format, va_list ap) { int n; - static uint32 last_scsi_attached_count; assert(gpl() == 0); n = vsnprintf(bbuffer, sizeof(bbuffer), format, ap); assert(! bbuffer[sizeof(bbuffer)-1]); + n = tprintf(bbuffer, MIN(n, sizeof(bbuffer)-1)); + return n; +} + +static +int +tprintf(char *buffer, int n) +{ + static uint32 last_scsi_attached_count; + #if STICK_GUEST - write(1, bbuffer, MIN(n, sizeof(bbuffer)-1)); + write(1, buffer, n); return n; #else #if BADGE_BOARD && STICKOS if (run_printf && run2_scroll) { - jm_scroll(bbuffer, MIN(n, sizeof(bbuffer)-1)); + jm_scroll(buffer, n); return n; } #endif @@ -388,12 +431,12 @@ vprintf(const char *format, va_list ap) } if (open) { - open = append_log_file(bbuffer); + open = append_log_file(buffer); } } #endif - terminal_print((byte *)bbuffer, MIN(n, sizeof(bbuffer)-1)); + terminal_print((byte *)buffer, n); return n; #endif }