jankos/stlio.c

96 lines
1.6 KiB
C

#include "stlio.h"
static u8 COLOR_FG = Green;
static u8 COLOR_BG = White;
#define write_char(c) write_cell_fb(c, COLOR_FG, COLOR_BG)
// We are assuming null-terminated strings here
u32 strlen(char* buffer) {
char* c;
for(c = buffer; *c != '\0'; c++); // LULW
return (u32)(c - buffer);
}
u32 write(const char* buffer, const u32 size) {
u32 i;
for(i = 0; i < size; i++) {
// cheesy but whatever
if(buffer[i] == '\n') {
frame_buffer_newline();
}
else {
write_char(buffer[i]);
}
}
return i;
}
u32 read(const u32 n) {
// read n bytes from keyboard
return n;
}
char* tohex(u32* data, u32 size) {
static char ret[19] = {'\0'}; // 8 bytes + \0
ret[0] = '0'; ret[1] = 'x';
const char* map = "0123456789abcdef"; // muh 'tism
switch(size) {
// (unsigned)char/u8/s8
case (1): {
u8 idx;
u8 val = (u8)*data;
for(u32 i = 0; i<2; i++ ) {
idx = val & 0x0f;
ret[19-i] = map[idx];
vall >>= 4;
}
break;
}
// s16/u16
case (2): {
for(u32 i = 0; i<4; i++) {
}
break;
}
// s32/u64
case (4): {
break;
}
// s64/u64
case (8): {
break;
}
default: return "Bad-Size";
}
return "sadf";
}
void printf(char* fmt) {
u32 i;
u32 size = strlen(fmt);
for(i = 0; i < size;i++) {
char c = fmt[i];
switch(c) {
case '\n': {
frame_buffer_newline();
break;
}
case '%': {
/* only do something if the situation calls for it
* NOTE: this call might not do anything interesting
*/
if((i+1) < size) {
write_char(c);
i += 2;
}
break;
}
default: {
write_char(c);
}
}
}
}