www.pudn.com > mp3decoder.rar > CONSOLE.C


#include "..\inc\board.h"
#include "..\inc\console.h"
#include 
 
#define CONSOLE_OUTPUT	1
#define NULL			0

int console_init(int mclk,int baud)
{  
	outl(0x00, rUFCON0);
	outl(0x00, rUFCON1);
	outl(0x00, rUMCON0);
	outl(0x00, rUMCON0);  
	  
	outl(0x03, rULCON0);
	outl(0x245, rUCON0);
//	outl(( (int)(mclk/16./baud + 0.5) -1 ), rUBRDIV0);
	outl(32,rUBRDIV0);
	return 0;
}

int console_write(int ch)
{
#ifdef CONSOLE_OUTPUT
	while (!(inl(rUTRSTAT0) & 0x04));
	outl(ch, rUTXH0);
#endif

	return 0;
}

int console_read(void)
{
	while (!(inl(rUTRSTAT0) & 0x01));

	return (int)inl(rURXH0);
}

int kbhit(void)
{
	return ((inl(rUTRSTAT0) & 0x01));
}

int getch(void)
{
	return console_read();
}

int putch(int ch)
{
	return console_write(ch);
}

int puts(const unsigned char *s)
{
	while (*s != 0) {
		putch(*s++);
	}
	return 0;
}

char *gets(char *s, int n)
{
	char *p;
	int ch;

	p = s;
	while (1) {
		ch = getch();
		if (ch == KEY_ENTER)
			break;
		if (ch == KEY_BACKSPACE && p > s) {
			p--;
			putch(ch);
		} else if ((p - s) < (n - 1)) {
			*p++ = (char)ch;
			putch(ch);
		}
	}
	*p = '\0';

	return s;
}

unsigned long getul(unsigned long def)
{
	char buf[9];

	gets(buf, 9);
	if (buf[0] == '\0')
		return def;
	return strtoul(buf, NULL, 16);
}

void print_0nx(char ch2, unsigned long l)
{
	unsigned char ch;
	int i;

	ch2 = ch2 - '0';
	for (i = ch2 - 1; i >= 0; i--) {
		ch = (l >> (i * 4)) & 0x0f;
		if (ch < 10)
			putch(ch + '0');
		else
			putch(ch - 10 + 'a');
	}
}

void print_d(unsigned long l)
{
	unsigned long prod, t;
	int flag = 0;
	unsigned char ch;
	int i, j;

	for (i = 15; i >= 0; i--) {
		prod = 1;
		t = l;
		for (j = 0; j < i; j++) {
			prod = prod * 10;
			t = t / 10;
		}
		ch = t;
		l -= prod * t;

		if (ch == 0 && flag == 0)
			continue;

		if (ch < 10)
			putch(ch + '0');
		else
			putch('?');

		flag = 1;
	}
}

int printf(const char *s, ...)
{
	va_list ap;
	unsigned long arg;
	const unsigned char *str;
	char ch1, ch2, ch3;

	va_start(ap, s);
	while (*s != 0) {
		if (*s == '%') {
			s++;
			ch1 = *s++;
			if (ch1 == 's') {
				str = va_arg(ap, unsigned char *);
				puts(str);
			} else if (ch1 == 'd') {
				arg = va_arg(ap, unsigned long);
				print_d(arg);
			} else {
				ch2 = *s++;
				ch3 = *s++;
				arg = va_arg(ap, unsigned long); 
				print_0nx(ch2, arg);
			}
		} else
			putch(*s++);
	}
	va_end(ap);
	return 0;
}

int get_select(char min, char max)
{
	int select;
	int ch;

	while (1) {
		ch = getch();
		if (ch >= min && ch <= max) {
			putch(ch);
			select = ch - min + 1;
			break;
		}
		if (ch == KEY_ESC) {
			select = -1;
			break;
		}
	}

	return select;
}