toaruos/text.h

63 lines
1.1 KiB
C
Raw Normal View History

2018-03-06 12:18:53 +03:00
#pragma once
2018-03-06 17:09:06 +03:00
static int _debug = 0;
2018-03-06 12:18:53 +03:00
unsigned short * textmemptr = (unsigned short *)0xB8000;
static void placech(unsigned char c, int x, int y, int attr) {
unsigned short *where;
unsigned att = attr << 8;
where = textmemptr + (y * 80 + x);
*where = c | att;
}
static int x = 0;
static int y = 0;
2018-03-06 17:09:06 +03:00
static void print_(char * str) {
2018-03-06 12:18:53 +03:00
while (*str) {
if (*str == '\n') {
for (; x < 80; ++x) {
placech(' ', x, y, 0x00);
}
x = 0;
y += 1;
if (y == 24) {
y = 0;
}
} else {
placech(*str, x, y, 0x07);
x++;
if (x == 80) {
x = 0;
y += 1;
if (y == 24) {
y = 0;
}
}
}
str++;
}
}
2018-03-06 17:09:06 +03:00
static void print_hex_(unsigned int value) {
2018-03-06 12:18:53 +03:00
char out[9] = {0};
for (int i = 7; i > -1; i--) {
out[i] = "0123456789abcdef"[(value >> (4 * (7 - i))) & 0xF];
}
2018-03-06 17:09:06 +03:00
print_(out);
2018-03-06 12:18:53 +03:00
}
2018-03-06 17:09:06 +03:00
static void clear_() {
2018-03-06 12:18:53 +03:00
x = 0;
y = 0;
for (int y = 0; y < 24; ++y) {
for (int x = 0; x < 80; ++x) {
placech(' ', x, y, 0x00);
}
}
}
2018-03-06 17:09:06 +03:00
#define print(s) do {if (_debug) {print_(s);}} while(0)
#define clear() do {if (_debug) {clear_();}} while(0)
#define print_hex(d) do {if (_debug) {print_hex_(d);}} while(0)
2018-03-06 12:18:53 +03:00