From e31204235d4d1aa110136216a1c11d74156ed960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Sat, 24 Feb 2018 20:23:14 +0100 Subject: [PATCH] renamed BaS sprintf to xsprintf to avoid conflicts in TOS programs --- BaS_gcc.files | 1 - tos/fpga_test/Makefile | 3 +- tos/fpga_test/sources/fpga_test.c | 1 + tos/fpga_test/sources/ser_printf.c | 480 ----------------------------- util/bas_printf.c | 2 +- 5 files changed, 3 insertions(+), 484 deletions(-) delete mode 100755 tos/fpga_test/sources/ser_printf.c diff --git a/BaS_gcc.files b/BaS_gcc.files index 611eeba..e63751a 100644 --- a/BaS_gcc.files +++ b/BaS_gcc.files @@ -217,7 +217,6 @@ tos/fpga_test/Makefile tos/fpga_test/m5475/mshort/fpga_test.prg tos/fpga_test/m5475/fpga_test.prg tos/fpga_test/sources/fpga_test.c -tos/fpga_test/sources/ser_printf.c tos/fpga_test/sources/vmem_test.c tos/jtagwait/include/bas_printf.h tos/jtagwait/include/bas_string.h diff --git a/tos/fpga_test/Makefile b/tos/fpga_test/Makefile index 4b0b950..31eab82 100755 --- a/tos/fpga_test/Makefile +++ b/tos/fpga_test/Makefile @@ -52,8 +52,7 @@ INCDIR=include INCLUDE+=-I$(INCDIR) CSRCS=\ - $(SRCDIR)/fpga_test.c \ - $(SRCDIR)/ser_printf.c + $(SRCDIR)/fpga_test.c ASRCS= diff --git a/tos/fpga_test/sources/fpga_test.c b/tos/fpga_test/sources/fpga_test.c index f58b319..6e30c20 100644 --- a/tos/fpga_test/sources/fpga_test.c +++ b/tos/fpga_test/sources/fpga_test.c @@ -1,5 +1,6 @@ #include #include + #include #include #include diff --git a/tos/fpga_test/sources/ser_printf.c b/tos/fpga_test/sources/ser_printf.c deleted file mode 100755 index 2b3dd95..0000000 --- a/tos/fpga_test/sources/ser_printf.c +++ /dev/null @@ -1,480 +0,0 @@ - -/* - * tc.printf.c: A public-domain, minimal printf/sprintf routine that prints - * through the putchar() routine. Feel free to use for - * anything... -- 7/17/87 Paul Placeway - */ -/*- - * Copyright (c) 1980, 1991 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -#include -#include "MCF5475.h" -#include "bas_printf.h" -#include "bas_string.h" - -/* - * Lexical definitions. - * - * All lexical space is allocated dynamically. - * The eighth/sixteenth bit of characters is used to prevent recognition, - * and eventually stripped. - */ -#define META 0200 -#define ASCII 0177 -#define QUOTE ((char) 0200) /* Eighth char bit used for 'ing */ -#define TRIM 0177 /* Mask to strip quote bit */ -#define UNDER 0000000 /* No extra bits to do both */ -#define BOLD 0000000 /* Bold flag */ -#define STANDOUT META /* Standout flag */ -#define LITERAL 0000000 /* Literal character flag */ -#define ATTRIBUTES 0200 /* The bits used for attributes */ -#define CHAR 0000177 /* Mask to mask out the character */ - -#define INF 32766 /* should be bigger than any field to print */ - -static char snil[] = "(nil)"; - -bool conoutstat(void) -{ - bool stat; - - stat = MCF_PSC0_PSCSR & MCF_PSC_PSCSR_TXRDY; /* TX FIFO can take data */ - - return stat; -} - -bool coninstat(void) -{ - bool stat; - - stat = MCF_PSC0_PSCSR & MCF_PSC_PSCSR_RXRDY; /* RX FIFO has data available */ - - return stat; -} - -void xputchar(int c) -{ - do { ; } while (!conoutstat()); - MCF_PSC_PSCRB_8BIT(0) = (char) c; -} - -char xgetchar(void) -{ - char c; - - do { ; } while (!coninstat()); - c = MCF_PSC_PSCTB_8BIT(0); - - return c; -} - -static void doprnt(void (*addchar)(int), const char *sfmt, va_list ap) -{ - char buf[128]; - char *bp; - const char *f; - float flt; - long l; - unsigned long u; - int i; - int fmt; - unsigned char pad = ' '; - int flush_left = 0; - int f_width = 0; - int prec = INF; - int hash = 0; - int do_long = 0; - int sign = 0; - int attributes = 0; - - f = sfmt; - for (; *f; f++) - { - if (*f != '%') - { - /* then just out the char */ - (*addchar)((int) (((unsigned char) *f) | attributes)); - } - else - { - f++; /* skip the % */ - - if (*f == '-') - { /* minus: flush left */ - flush_left = 1; - f++; - } - - if (*f == '0' || *f == '.') - { - /* padding with 0 rather than blank */ - pad = '0'; - f++; - } - if (*f == '*') - { - /* field width */ - f_width = va_arg(ap, int); - f++; - } - else if (isdigit((unsigned char)*f)) - { - f_width = atoi(f); - while (isdigit((unsigned char)*f)) - f++; /* skip the digits */ - } - - if (*f == '.') - { /* precision */ - f++; - if (*f == '*') - { - prec = va_arg(ap, int); - f++; - } - else if (isdigit((unsigned char)*f)) - { - prec = atoi(f); - while (isdigit((unsigned char)*f)) - f++; /* skip the digits */ - } - } - - if (*f == '#') - { /* alternate form */ - hash = 1; - f++; - } - - if (*f == 'l') - { /* long format */ - do_long++; - f++; - if (*f == 'l') - { - do_long++; - f++; - } - } - - fmt = (unsigned char) *f; - if (fmt != 'S' && fmt != 'Q' && isupper(fmt)) - { - do_long = 1; - fmt = tolower(fmt); - } - bp = buf; - switch (fmt) - { /* do the format */ - case 'd': - switch (do_long) - { - case 0: - l = (long) (va_arg(ap, int)); - break; - case 1: - default: - l = va_arg(ap, long); - break; - } - - if (l < 0) - { - sign = 1; - l = -l; - } - do - { - *bp++ = (char) (l % 10) + '0'; - } while ((l /= 10) > 0); - if (sign) - *bp++ = '-'; - f_width = f_width - (int) (bp - buf); - if (!flush_left) - while (f_width-- > 0) - (*addchar)((int) (pad | attributes)); - for (bp--; bp >= buf; bp--) - (*addchar)((int) (((unsigned char) *bp) | attributes)); - if (flush_left) - while (f_width-- > 0) - (*addchar)((int) (' ' | attributes)); - break; - - case 'f': - /* this is actually more than stupid, but does work for now */ - flt = (float) (va_arg(ap, double)); /* beware: va_arg() extends float to double! */ - if (flt < 0) - { - sign = 1; - flt = -flt; - } - { - int quotient, remainder; - - quotient = (int) flt; - remainder = (flt - quotient) * 10E5; - - for (i = 0; i < 6; i++) - { - *bp++ = (char) (remainder % 10) + '0'; - remainder /= 10; - } - *bp++ = '.'; - do - { - *bp++ = (char) (quotient % 10) + '0'; - } while ((quotient /= 10) > 0); - if (sign) - *bp++ = '-'; - f_width = f_width - (int) (bp - buf); - if (!flush_left) - while (f_width-- > 0) - (*addchar)((int) (pad | attributes)); - for (bp--; bp >= buf; bp--) - (*addchar)((int) (((unsigned char) *bp) | attributes)); - if (flush_left) - while (f_width-- > 0) - (*addchar)((int) (' ' | attributes)); - } - break; - - case 'p': - do_long = 1; - hash = 1; - fmt = 'x'; - /* no break */ - case 'o': - case 'x': - case 'u': - switch (do_long) - { - case 0: - u = (unsigned long) (va_arg(ap, unsigned int)); - break; - case 1: - default: - u = va_arg(ap, unsigned long); - break; - } - if (fmt == 'u') - { /* unsigned decimal */ - do - { - *bp++ = (char) (u % 10) + '0'; - } while ((u /= 10) > 0); - } - else if (fmt == 'o') - { /* octal */ - do - { - *bp++ = (char) (u % 8) + '0'; - } while ((u /= 8) > 0); - if (hash) - *bp++ = '0'; - } - else if (fmt == 'x') - { /* hex */ - do - { - i = (int) (u % 16); - if (i < 10) - *bp++ = i + '0'; - else - *bp++ = i - 10 + 'a'; - } while ((u /= 16) > 0); - if (hash) - { - *bp++ = 'x'; - *bp++ = '0'; - } - } - i = f_width - (int) (bp - buf); - if (!flush_left) - while (i-- > 0) - (*addchar)((int) (pad | attributes)); - for (bp--; bp >= buf; bp--) - (*addchar)((int) (((unsigned char) *bp) | attributes)); - if (flush_left) - while (i-- > 0) - (*addchar)((int) (' ' | attributes)); - break; - - case 'c': - i = va_arg(ap, int); - (*addchar)((int) (i | attributes)); - break; - - case 'S': - case 'Q': - case 's': - case 'q': - bp = va_arg(ap, char *); - if (!bp) - bp = snil; - f_width = f_width - strlen((char *) bp); - if (!flush_left) - while (f_width-- > 0) - (*addchar)((int) (pad | attributes)); - for (i = 0; *bp && i < prec; i++) - { - if (fmt == 'q' && (*bp & QUOTE)) - (*addchar)((int) ('\\' | attributes)); - (*addchar)( - (int) (((unsigned char) *bp & TRIM) | attributes)); - bp++; - } - if (flush_left) - while (f_width-- > 0) - (*addchar)((int) (' ' | attributes)); - break; - - case 'a': - attributes = va_arg(ap, int); - break; - - case '%': - (*addchar)((int) ('%' | attributes)); - break; - - default: - break; - } - flush_left = 0, f_width = 0, prec = INF, hash = 0, do_long = 0; - sign = 0; - pad = ' '; - } - } -} - -static char *xstring, *xestring; - -void xaddchar(int c) -{ - if (xestring == xstring) - *xstring = '\0'; - else - *xstring++ = (char) c; -} - -int sprintf(char *str, const char *format, ...) -{ - va_list va; - va_start(va, format); - - xstring = str; - - doprnt(xaddchar, format, va); - va_end(va); - *xstring++ = '\0'; - - return 0; -} - -void xsnprintf(char *str, size_t size, const char *fmt, ...) -{ - va_list va; - va_start(va, fmt); - - xstring = str; - xestring = str + size - 1; - doprnt(xaddchar, fmt, va); - va_end(va); - *xstring++ = '\0'; -} - -void xprintf(const char *fmt, ...) -{ - va_list va; - va_start(va, fmt); - doprnt(xputchar, fmt, va); - va_end(va); -} - -void xvprintf(const char *fmt, va_list va) -{ - doprnt(xputchar, fmt, va); -} - -void xvsnprintf(char *str, size_t size, const char *fmt, va_list va) -{ - xstring = str; - xestring = str + size - 1; - doprnt(xaddchar, fmt, va); - *xstring++ = '\0'; -} - - -void display_progress() -{ - static int _progress_index; - char progress_char[] = "|/-\\"; - - xputchar(progress_char[_progress_index++ % strlen(progress_char)]); - xputchar('\r'); -} - -void hexdump(uint8_t buffer[], int size) -{ - int i; - int line = 0; - volatile uint8_t *bp = buffer; - - while (bp < buffer + size) { - volatile uint8_t *lbp = bp; - - xprintf("%08x ", line); - - for (i = 0; i < 16; i++) { - uint8_t c = *lbp++; - if (bp + i > buffer + size) { - break; - } - xprintf("%02x ", c); - } - - lbp = bp; - for (i = 0; i < 16; i++) { - volatile int8_t c = *lbp++; - - if (bp + i > buffer + size) { - break; - } - if (c > ' ' && c < '~') { - xprintf("%c", c); - } else { - xprintf("."); - } - } - xprintf("\r\n"); - - bp += 16; - line += 16; - } -} diff --git a/util/bas_printf.c b/util/bas_printf.c index 35afd81..3be0b50 100644 --- a/util/bas_printf.c +++ b/util/bas_printf.c @@ -382,7 +382,7 @@ void xaddchar(int c) *xstring++ = (char) c; } -int sprintf(char *str, const char *format, ...) +int xsprintf(char *str, const char *format, ...) { va_list va; va_start(va, format);