128 lines
1.8 KiB
C
128 lines
1.8 KiB
C
// kout.c
|
|
// Author: Josh Holtrop
|
|
// Date: 08/02/04
|
|
// Modified: 08/16/04
|
|
|
|
#include "hos_defines.h"
|
|
#include "char/parallel.h"
|
|
#include "kout.h"
|
|
#include "lang/conv.h"
|
|
#include "fs/devices.h"
|
|
|
|
extern int activeConsole;
|
|
|
|
char buffer[64];
|
|
|
|
// print a character
|
|
void putc(int c)
|
|
{
|
|
#ifdef PARALLEL_DEBUG
|
|
char_write(MAJORC_PARALLEL, 0, c);
|
|
#endif
|
|
char_write(MAJORC_VCONSOLE, activeConsole, c);
|
|
}
|
|
|
|
|
|
// print a formatted string
|
|
void kprintf(char *fmt, ...)
|
|
{
|
|
u32_t *params = ((u32_t *)(&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': case 'i': case 'I':
|
|
putDec(*params);
|
|
params++;
|
|
break;
|
|
case 'u': case 'U':
|
|
putDecu(*params);
|
|
params++;
|
|
break;
|
|
case 'x': case 'X':
|
|
putHex(*params);
|
|
params++;
|
|
break;
|
|
case 'b': case 'B':
|
|
kio_putBCD(*params);
|
|
params++;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (fmt[i])
|
|
{
|
|
case '%':
|
|
special = 1;
|
|
break;
|
|
case 0:
|
|
return;
|
|
default:
|
|
putc(fmt[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// This function prints a raw string
|
|
void puts(char *str)
|
|
{
|
|
while (*str)
|
|
{
|
|
putc(*str++);
|
|
}
|
|
}
|
|
|
|
|
|
// This function prints a signed, decimal integer
|
|
void putDec(int num)
|
|
{
|
|
itoa(num, buffer);
|
|
puts(buffer);
|
|
}
|
|
|
|
|
|
// This function prints an unsigned, decimal integer
|
|
void putDecu(u32_t num)
|
|
{
|
|
utoa(num, buffer);
|
|
puts(buffer);
|
|
}
|
|
|
|
|
|
// This function displays a number in hexadecimal
|
|
void putHex(u32_t num)
|
|
{
|
|
itox(num, buffer);
|
|
puts(buffer);
|
|
}
|
|
|
|
|
|
// This function prints a two-digit binary-coded-decimal value
|
|
void kio_putBCD(u32_t bcd)
|
|
{
|
|
bcdtoa(bcd, buffer);
|
|
|
|
}
|
|
|