meillo@1: #include meillo@1: #include "io.h" meillo@1: meillo@1: void prints(const char* str); meillo@1: meillo@1: static unsigned short* vidmem = (unsigned short*) 0xb8000; meillo@1: static unsigned short color = 0x0700; meillo@1: static int pos = 0; meillo@1: meillo@1: void meillo@1: cls(void) meillo@1: { meillo@1: unsigned short* v; meillo@1: meillo@1: for (v = vidmem; v < vidmem+(80*25); v++) { meillo@1: *v = 0; meillo@1: } meillo@1: pos = 0; meillo@1: } meillo@1: meillo@1: meillo@1: void meillo@1: setcolor(int fg, int bg) meillo@1: { meillo@1: color = (char) ((fg<<2) & (bg<<3)); meillo@1: } meillo@1: meillo@1: void meillo@1: setpos(int line, int col) meillo@1: { meillo@1: pos = line * 80 + col; meillo@1: } meillo@1: meillo@1: void meillo@1: relpos(int move) meillo@1: { meillo@1: pos += move; meillo@1: } meillo@1: meillo@1: meillo@1: void meillo@1: printp(unsigned int n) meillo@1: { meillo@1: int i, h; meillo@1: char str[11]; meillo@1: //int n = (int) p; meillo@1: meillo@1: str[0] = '0'; meillo@1: str[1] = 'x'; meillo@1: str[10] = '\0'; meillo@1: for (i=9; i>1; i--) { meillo@1: h = n % 16; meillo@1: str[i] = ('0' + h); meillo@1: if (h > 9) { meillo@1: str[i] += 'a' - '9' - 1; meillo@1: } meillo@1: n /= 16; meillo@1: } meillo@1: prints(str); meillo@1: } meillo@1: meillo@1: meillo@1: meillo@1: meillo@1: void meillo@1: printc(char c) meillo@1: { meillo@1: putchar(c); meillo@1: } meillo@1: meillo@1: void meillo@1: prints(const char* str) meillo@1: { meillo@1: const char* c; meillo@1: meillo@1: for (c = str; *c; c++) { meillo@1: printc(*c); meillo@1: } meillo@1: } meillo@1: meillo@1: void meillo@1: printd(int n) meillo@1: { meillo@1: int i; meillo@1: char str[32]; meillo@1: meillo@1: str[31] = '\0'; meillo@1: for (i=30; i>0; i--) { meillo@1: str[i] = ('0' + n%10); meillo@1: if (n == 0) { meillo@1: i++; meillo@1: break; meillo@1: } meillo@1: n /= 10; meillo@1: } meillo@1: prints(&str[i]); meillo@1: } meillo@1: meillo@1: meillo@1: int meillo@1: putchar(int c) meillo@1: { meillo@1: if (c == '\n') { meillo@1: pos = ((pos/80)+1) * 80; meillo@1: } else { meillo@1: vidmem[pos++] = (unsigned short)c | color; meillo@1: } meillo@1: return (unsigned char)c; meillo@1: } meillo@1: meillo@1: int meillo@1: puts(const char* s) meillo@1: { meillo@1: prints(s); meillo@1: putchar('\n'); meillo@1: return 1; meillo@1: } meillo@1: meillo@1: int meillo@1: printf(const char* fmt, ...) meillo@1: { meillo@1: va_list ap; meillo@1: int i; meillo@1: meillo@1: va_start(ap, fmt); meillo@1: for (i=0; fmt[i]; i++) { meillo@1: if (fmt[i] != '%') { meillo@1: printc(fmt[i]); meillo@1: continue; meillo@1: } meillo@1: switch (fmt[++i]) { meillo@1: case '%': meillo@1: printc('%'); meillo@1: break; meillo@1: case 'c': meillo@1: printc((char)va_arg(ap, int)); meillo@1: break; meillo@1: case 's': meillo@1: prints(va_arg(ap, char*)); meillo@1: break; meillo@1: case 'd': meillo@1: printd(va_arg(ap, int)); meillo@1: break; meillo@1: case 'p': meillo@1: printp(va_arg(ap, unsigned int)); meillo@1: break; meillo@1: } meillo@1: } meillo@1: va_end(ap); meillo@1: return 0; meillo@1: }