diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2008-08-01 11:47:10 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2008-08-01 11:47:10 +0200 |
commit | aca52174a9c43aabdf5b5874c7902181a047f61a (patch) | |
tree | 9d17e41af46cddcaeff59e42dbe3f22b1248cccc /common/console_simple.c | |
parent | c10e20846ddbd0f6f062fb5faa66a9570fbcedc7 (diff) | |
download | barebox-aca52174a9c43aabdf5b5874c7902181a047f61a.tar.gz barebox-aca52174a9c43aabdf5b5874c7902181a047f61a.tar.xz |
console: add a simple console for saving space
Add a simple console layer which is not able to handle multiple
consoles for those who don't need it.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/console_simple.c')
-rw-r--r-- | common/console_simple.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/common/console_simple.c b/common/console_simple.c new file mode 100644 index 0000000000..5a80f76242 --- /dev/null +++ b/common/console_simple.c @@ -0,0 +1,117 @@ +#include <config.h> +#include <common.h> +#include <fs.h> + +static struct console_device *console; + +int printf (const char *fmt, ...) +{ + va_list args; + uint i; + char printbuffer[CFG_PBSIZE]; + + va_start (args, fmt); + + /* For this to work, printbuffer must be larger than + * anything we ever want to print. + */ + i = vsprintf (printbuffer, fmt, args); + va_end (args); + + /* Print the string */ + puts(printbuffer); + + return i; +} +EXPORT_SYMBOL(printf); + +int vprintf (const char *fmt, va_list args) +{ + uint i; + char printbuffer[CFG_PBSIZE]; + + /* For this to work, printbuffer must be larger than + * anything we ever want to print. + */ + i = vsprintf (printbuffer, fmt, args); + + /* Print the string */ + puts (printbuffer); + + return i; +} +EXPORT_SYMBOL(vprintf); + +void console_puts(unsigned int ch, const char *str) +{ + const char *s = str; + while (*s) { + console_putc(ch, *s); + if (*s == '\n') + console_putc(ch, '\r'); + s++; + } +} +EXPORT_SYMBOL(console_puts); + +void console_putc(unsigned int ch, char c) +{ + console->putc(console, c); + if (c == '\n') + console->putc(console, '\r'); +} +EXPORT_SYMBOL(console_putc); + +int fputc(int fd, char c) +{ + if (fd == 1) + putchar(c); + else if (fd == 2) + eputc(c); + else + return write(fd, &c, 1); + return 0; +} +EXPORT_SYMBOL(fputc); + +int fputs(int fd, const char *s) +{ + if (fd == 1) + puts(s); + else if (fd == 2) + eputs(s); + else + return write(fd, s, strlen(s)); + return 0; +} +EXPORT_SYMBOL(fputs); + +int tstc(void) +{ + return console->tstc(console); +} +EXPORT_SYMBOL(tstc); + +int getc(void) +{ + return console->getc(console); +} +EXPORT_SYMBOL(getc); + +#ifndef ARCH_HAS_CTRLC +/* test if ctrl-c was pressed */ +int ctrlc (void) +{ + if (tstc() && getc() == 3) + return 1; + return 0; +} +EXPORT_SYMBOL(ctrlc); +#endif /* ARCH_HAS_CTRC */ + +int console_register(struct console_device *newcdev) +{ + if (!console) + console = newcdev; + return 0; +} |