118 lines
1.8 KiB
C
118 lines
1.8 KiB
C
//kio.c
|
|
// Author: Josh Holtrop
|
|
// Created: 12/25/03
|
|
// Modified: 12/25/03
|
|
|
|
|
|
|
|
void printf(char *fmt, ...)
|
|
{
|
|
dword *params = ((dword *)(&fmt)) + 1; //points to the first paramater
|
|
int i;
|
|
int special = 0;
|
|
for (i = 0; ; i++)
|
|
{
|
|
if (special)
|
|
{
|
|
special = 0;
|
|
switch (fmt[i])
|
|
{
|
|
case 0:
|
|
return;
|
|
case '%':
|
|
putc('%');
|
|
break;
|
|
case 's': case 'S':
|
|
puts((char *)*params);
|
|
params++;
|
|
break;
|
|
case 'c': case 'C':
|
|
putc(*params);
|
|
params++;
|
|
break;
|
|
case 'd': case 'D':
|
|
putDec(*params);
|
|
params++;
|
|
break;
|
|
case 'u': case 'U':
|
|
putDecu(*params);
|
|
params++;
|
|
break;
|
|
case 'x': case 'X':
|
|
putHex(*params);
|
|
params++;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (fmt[i])
|
|
{
|
|
case '%':
|
|
special = 1;
|
|
break;
|
|
case 0:
|
|
return;
|
|
default:
|
|
putc(fmt[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void putc(dword chr)
|
|
{
|
|
char charac = (char)chr;
|
|
word *vidmem = (word *)0xC00B8000;
|
|
if (charac == '\n')
|
|
{
|
|
if (cursorPosition % 80)
|
|
cursorPosition = cursorPosition + 80 - (cursorPosition % 80);
|
|
else
|
|
cursorPosition += 80;
|
|
}
|
|
else if (charac == '\t')
|
|
{
|
|
if (cursorPosition % 8)
|
|
cursorPosition = cursorPosition + 8 - (cursorPosition % 8);
|
|
else
|
|
cursorPosition += 8;
|
|
}
|
|
else
|
|
{
|
|
vidmem[cursorPosition] = charac | 0x0700;
|
|
cursorPosition++;
|
|
}
|
|
if (cursorPosition >= 2000)
|
|
{
|
|
console_scroll();
|
|
cursorPosition = 2000-80;
|
|
}
|
|
writeCursorPosition(cursorPosition);
|
|
}
|
|
|
|
|
|
int putHex(dword number)
|
|
{
|
|
int hitNum = 0;
|
|
int i;
|
|
for (i = 7; i >= 0; i--)
|
|
{
|
|
dword val = (number >> (i*4)) & 0xF;
|
|
if ((val != 0) || (i == 0))
|
|
hitNum = 1;
|
|
if (hitNum)
|
|
{
|
|
val = val + '0';
|
|
if (val > '9')
|
|
val = val + ('A' - '9' - 1);
|
|
putc(val);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|