#include "axl_io.h" #include #include "axl_string.h" i32 axl_putchar(i32 c) { u8 buf[4]; int len = 0; if (c <= 0x7F) { buf[0] = (u8)c; len = 1; } else if (c <= 0x07FF) { buf[0] = 0xC0 | (u8)(c >> 6); buf[1] = 0x80 | (u8)(c & 0x3F); len = 2; } else if (c <= 0xFFFF) { buf[0] = 0xE0 | (u8)(c >> 12); buf[1] = 0x80 | (u8)((c >> 6) & 0x3F); buf[2] = 0x80 | (u8)(c & 0x3F); len = 3; } else if (c <= 0x10FFFF) { buf[0] = 0xF0 | (u8)(c >> 18); buf[1] = 0x80 | (u8)((c >> 12) & 0x3F); buf[2] = 0x80 | (u8)((c >> 6) & 0x3F); buf[3] = 0x80 | (u8)(c & 0x3F); len = 4; } else { return AXL_EOF; } HANDLE console_handle = GetStdHandle(STD_OUTPUT_HANDLE); if (console_handle == INVALID_HANDLE_VALUE) { return AXL_EOF; } DWORD bytes_written = 0; BOOL status = WriteConsoleA(console_handle, buf, len, &bytes_written, NULL); if (!status || bytes_written != (DWORD)len) { return AXL_EOF; } return c; } i32 axl_puts(const i8* str) { HANDLE console_handle = GetStdHandle(STD_OUTPUT_HANDLE); if(console_handle == INVALID_HANDLE_VALUE) { return AXL_EOF; } DWORD str_length = (DWORD)axl_strlen(str); DWORD bytes_written = 0; BOOL status = WriteConsoleA(console_handle, str, str_length, &bytes_written, NULL); if(!status || bytes_written != str_length) { return AXL_EOF; } if(axl_putchar('\n') != '\n') { return AXL_EOF; } return AXL_SUCCESS; }