Пример #1
0
int
vprintf(const char *fmt, va_list ap)
{
	const char *hex = "0123456789abcdef";
	char buf[11];
	char *s;
	unsigned u;
	int ret = 0, i, c;

	while ((c = *fmt++)) {
		if (c == '%') {
			c = *fmt++;
			switch (c) {
			case 'c':
				mon_putchar(va_arg(ap, int));
				ret++;
				continue;
			case 's':
				for (s = va_arg(ap, char *); *s; s++) {
					mon_putchar(*s);
					ret++;
				}
				continue;
			case 'd':
				i = va_arg(ap, int);
				u = (i < 0 ? -i : i);
				s = buf;
				do {
					*s++ = '0' + u % 10U;
				} while (u /= 10U);
				if (i < 0)
					*s++ = '-';
				goto dumpbuf;
			case 'u':
				u = va_arg(ap, unsigned);
				s = buf;
				do {
					*s++ = '0' + u % 10U;
				} while (u /= 10U);
				goto dumpbuf;
			case 'x':
				u = va_arg(ap, unsigned);
				s = buf;
				do {
					*s++ = hex[u & 0xfu];
				} while (u >>= 4);
			dumpbuf:
				while (--s >= buf) {
					mon_putchar(*s);
					ret++;
				}
				continue;
			}
		}
		mon_putchar(c);
		ret++;
	}
Пример #2
0
/* processChar():
 * Used by the main polling loop to deal with incoming characters
 * on the console.
 */
void
processChar(int c)
{
	static char cmd[64];
	static int cmdidx = 0;

	if (c == '\b') {
		if (cmdidx > 0) {
			cmdidx--;
			mon_printf("\b \b");
		}
	}
	else if ((c == '\n') || (c == '\r')) {
		if (cmdidx != 0) {
			cmd[cmdidx] = 0;
			mon_printf("\r\n");
			mon_docommand(cmd,0);
			cmdidx = 0;
		}
		mon_printf("\r\nPROMPT:");
	}
	else {
		if (cmdidx < (sizeof(cmd)-1)) {
			cmd[cmdidx++] = (char)c;
			mon_putchar(c);
		}
		else {
			mon_printf("\ncmd buffer overflow\n");
			cmdidx = 0;
		}
	}
}
Пример #3
0
/*
 * Write buffer to LCD
 *
 * return 1 on success, -1 on error
*/
static ssize_t umoncons_write(int minor, const char *buf, size_t len)
{
  size_t i;

  for ( i=0 ; i<len ; i++ )
    mon_putchar( buf[i] );

  return len;
}
Пример #4
0
/* This is used for putchark support */
static void umoncons_write_polled(int minor, char c)
{
  mon_putchar( c );
}