feat(console coloring): removed the standard c lib

This commit is contained in:
Mineplay 2025-10-19 08:06:38 -05:00
parent 20db36cd82
commit 7447d6ab45
4 changed files with 40 additions and 18 deletions

View file

@ -10,12 +10,18 @@ file(GLOB_RECURSE SRC_FILES "${PROJECT_SOURCE_DIR}/Src/*.c")
add_library(Iony STATIC ${SRC_FILES})
add_executable(IonyTest ${PROJECT_SOURCE_DIR}/Tests/Main.c)
target_link_libraries(Iony PRIVATE ${HALLOCY_LIB_PATH})
target_include_directories(IonyTest PRIVATE ${PROJECT_SOURCE_DIR}/Tests)
target_link_libraries(IonyTest Iony)
if (MSVC)
target_compile_options(Iony PRIVATE /W4 /Zl)
target_compile_options(Iony PRIVATE /W4 /Zl /GS- /kernel)
target_link_options(IonyTest PRIVATE /NODEFAULTLIB /ENTRY:_start)
target_link_libraries(Iony PRIVATE kernel32)
target_link_libraries(IonyTest PRIVATE kernel32)
else()
target_compile_options(Iony PRIVATE -Wall -Wextra -pedantic)
target_compile_options(Iony PRIVATE -Wall -Wextra -pedantic -ffreestanding -fno-builtin)
target_link_options(Iony PRIVATE -nostdlib)
target_link_options(IonyTest PRIVATE -nostdlib)
endif()

View file

@ -23,19 +23,26 @@
#ifndef IONY_SYSTEM
#define IONY_SYSTEM
#if defined(__GNUC__)
#if defined(_WIN32)
#include <windows.h>
#elif defined(__GNUC__)
#if defined(__x86_64__)
#define IONY_SYS_READ 0
#define IONY_SYS_WRITE 1
#define IONY_SYS_EXIT 60
#elif defined(__i386__)
#define IONY_SYS_READ 3
#define IONY_SYS_WRITE 4
#define IONY_SYS_EXIT 1
#elif defined(__aarch64__)
#define IONY_SYS_READ 63
#define IONY_SYS_WRITE 64
#define IONY_SYS_EXIT 93
#elif defined(__arm__)
#define IONY_SYS_READ 3
#define IONY_SYS_WRITE 4
#define IONY_SYS_EXIT 1
#endif
static inline long iony_system_call(long number, long argument1, long argument2, long argument3, long argument4, long argument5, long argument6) {
@ -98,6 +105,16 @@ static inline long iony_system_call(long number, long argument1, long argument2,
return result;
}
#else
#error "Unsupported architecture"
#endif
static inline void iony_exit_process(int exit_code) {
#if defined(_WIN32)
ExitProcess(exit_code);
#elif defined(__GNUC__)
iony_system_call(IONY_SYS_EXIT, exit_code, 0, 0, 0, 0, 0);
#endif
}
#endif

View file

@ -20,17 +20,15 @@
* -----------------------------------------------------------------------------
*/
#include "../../Include/Iony/Core/Console.h"
#include "Iony/Utils/Error.h"
#include "../../Include/Iony/Utils/System.h"
#if defined(_WIN32)
#include <windows.h>
static HANDLE iony_standard_console_out = 0;
static HANDLE iony_standard_console_in = 0;
static WORD iony_original_console_attributes = 0;
#elif defined(__GNUC__)
#include "../../Include/Iony/Utils/System.h"
static const char IONY_RESET_COLOR[] = "\033[0m";
static const char *IONY_ANSI_COLORS[] = {

View file

@ -19,45 +19,46 @@
* Author: Mineplay
* -----------------------------------------------------------------------------
*/
#include <Iony/Utils/System.h>
#include <Iony/Utils/Error.h>
#include <Iony/Core/Console.h>
int main(void) {
void _start(void) {
if (iony_console_print("Press enter to continue...", 27) != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
char character = ' ';
if (iony_console_get_character(&character) != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
if (iony_console_clear() != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
if (iony_console_print("Enter your name: ", 18) != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
char name_input[256];
long characters_read = 0;
if (iony_console_get_line(name_input, 256, &characters_read) != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
iony_console_set_color(IONY_CONSOLE_COLOR_LIGHT_RED);
if (iony_console_print("Your name is ", 14) != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
if (iony_console_print(name_input, characters_read) != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
if (iony_console_reset_color() != IONY_ERROR_NONE) {
return -1;
iony_exit_process(-1);
}
return 0;
iony_exit_process(0);
}