79 lines
1.5 KiB
C
79 lines
1.5 KiB
C
#include <defs.h>
|
|
#include <stdio.h>
|
|
#include <console.h>
|
|
|
|
/* HIGH level console I/O */
|
|
|
|
/* *
|
|
* cputch - writes a single character @c to stdout, and it will
|
|
* increace the value of counter pointed by @cnt.
|
|
* */
|
|
static void
|
|
cputch(int c, int *cnt) {
|
|
cons_putc(c);
|
|
(*cnt) ++;
|
|
}
|
|
|
|
/* *
|
|
* vcprintf - format a string and writes it to stdout
|
|
*
|
|
* The return value is the number of characters which would be
|
|
* written to stdout.
|
|
*
|
|
* Call this function if you are already dealing with a va_list.
|
|
* Or you probably want cprintf() instead.
|
|
* */
|
|
int
|
|
vcprintf(const char *fmt, va_list ap) {
|
|
int cnt = 0;
|
|
vprintfmt((void*)cputch, &cnt, fmt, ap);
|
|
return cnt;
|
|
}
|
|
|
|
/* *
|
|
* cprintf - formats a string and writes it to stdout
|
|
*
|
|
* The return value is the number of characters which would be
|
|
* written to stdout.
|
|
* */
|
|
int
|
|
cprintf(const char *fmt, ...) {
|
|
va_list ap;
|
|
int cnt;
|
|
va_start(ap, fmt);
|
|
cnt = vcprintf(fmt, ap);
|
|
va_end(ap);
|
|
return cnt;
|
|
}
|
|
|
|
/* cputchar - writes a single character to stdout */
|
|
void
|
|
cputchar(int c) {
|
|
cons_putc(c);
|
|
}
|
|
|
|
/* *
|
|
* cputs- writes the string pointed by @str to stdout and
|
|
* appends a newline character.
|
|
* */
|
|
int
|
|
cputs(const char *str) {
|
|
int cnt = 0;
|
|
char c;
|
|
while ((c = *str ++) != '\0') {
|
|
cputch(c, &cnt);
|
|
}
|
|
cputch('\n', &cnt);
|
|
return cnt;
|
|
}
|
|
|
|
/* getchar - reads a single non-zero character from stdin */
|
|
int
|
|
getchar(void) {
|
|
int c;
|
|
while ((c = cons_getc()) == 0)
|
|
/* do nothing */;
|
|
return c;
|
|
}
|
|
|