game/axl_io.c

84 lines
1.7 KiB
C
Raw Normal View History

2025-12-02 21:30:20 +03:00
#include "axl_io.h"
#include <windows.h>
#include "axl_string.h"
2025-12-04 16:52:03 +03:00
i32 axl_putchar(i32 c)
2025-12-02 21:30:20 +03:00
{
2025-12-04 16:52:03 +03:00
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;
}
2025-12-02 21:30:20 +03:00
HANDLE console_handle = GetStdHandle(STD_OUTPUT_HANDLE);
2025-12-04 16:52:03 +03:00
if (console_handle == INVALID_HANDLE_VALUE)
2025-12-02 21:30:20 +03:00
{
return AXL_EOF;
}
2025-12-04 16:52:03 +03:00
2025-12-02 21:30:20 +03:00
DWORD bytes_written = 0;
2025-12-04 16:52:03 +03:00
BOOL status = WriteConsoleA(console_handle, buf, len, &bytes_written, NULL);
2025-12-02 21:30:20 +03:00
2025-12-04 16:52:03 +03:00
if (!status || bytes_written != (DWORD)len)
2025-12-02 21:30:20 +03:00
{
return AXL_EOF;
}
2025-12-04 16:52:03 +03:00
return c;
2025-12-02 21:30:20 +03:00
}
2025-12-02 22:29:15 +03:00
i32 axl_puts(const i8* str)
2025-12-02 21:30:20 +03:00
{
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;
}