Added printf2 header...

This commit is contained in:
xolatile 2024-07-29 21:41:20 -04:00
parent 69485b126a
commit b0a1774e3d
4 changed files with 73 additions and 10 deletions

View File

@ -13,6 +13,7 @@
#include "unix.h" #include "unix.h"
#include "safety.h" #include "safety.h"
#include "debug.h" #include "debug.h"
#include "printf2.h"
unsigned int * token_array = NULL; unsigned int * token_array = NULL;
unsigned int token_count = 0; unsigned int token_count = 0;
@ -96,6 +97,9 @@ int compile(void) {
dump_variables_to_assembler(); dump_variables_to_assembler();
// Anon: Example usage, delete or modify it...
printf2("[@yTest@-] Begining assembling @c%c%u@- process... @b@@%f@-\n", 'A', 6, 0.666);
if (assemble(token_count, token_array)) { if (assemble(token_count, token_array)) {
issue_internal_error(); issue_internal_error();
return 1; return 1;

View File

@ -1,4 +1,4 @@
#ifndef DEBUG_H #ifndef DEBUG_H
#define DEBUG_H #define DEBUG_H
#if DEBUG == 1 #if DEBUG == 1
@ -64,7 +64,7 @@ void dump_function(void * data) {
} }
__attribute__((unused)) __attribute__((unused))
static static
void debug_dump_functions(void) { void debug_dump_functions(void) {
puts("# Functions:"); puts("# Functions:");
tommy_hashtable_foreach(&symbol_table, dump_function); tommy_hashtable_foreach(&symbol_table, dump_function);
@ -75,7 +75,8 @@ static
void debug_dump_symbols(void) { void debug_dump_symbols(void) {
debug_dump_variables(); debug_dump_variables();
debug_dump_functions(); debug_dump_functions();
printf("# Total variable size: '%d'\n", variable_size_sum()); printf("# Total variable size: '%d'\n",
variable_size_sum());
} }
__attribute__((unused)) __attribute__((unused))

49
source/printf2.h Normal file
View File

@ -0,0 +1,49 @@
#ifndef PRINTF2_H
#define PRINTF2_H
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
static
int parse_color(char * buf, char * fmt) {
switch (*fmt) {
case 'a': memcpy (buf, "\x1b[1;30m", 7ul); return 7; // gray
case 'r': memcpy (buf, "\x1b[1;31m", 7ul); return 7; // red
case 'g': memcpy (buf, "\x1b[1;32m", 7ul); return 7; // green
case 'y': memcpy (buf, "\x1b[1;33m", 7ul); return 7; // yellow
case 'b': memcpy (buf, "\x1b[1;34m", 7ul); return 7; // blue
case 'p': memcpy (buf, "\x1b[1;35m", 7ul); return 7; // pink
case 'c': memcpy (buf, "\x1b[1;36m", 7ul); return 7; // cyan
case 'w': memcpy (buf, "\x1b[1;37m", 7ul); return 7; // white
case '-': memcpy (buf, "\x1b[0m", 4ul); return 4; // reset
case '@': memcpy (buf, "@", 1ul); return 1;
default: return 1;
}
}
static
int parse_chars(char * buf, char * fmt) {
memcpy (buf, fmt, 1ul);
return 1;
}
static
void printf2(char * fmt, ...) {
va_list args;
char buf[1024] = "";
for (int l = 0; *fmt != '\0'; ++fmt) {
switch (*fmt) {
case '@': l += parse_color(&buf[l], ++fmt); break;
default: l += parse_chars(&buf[l], fmt); break;
}
}
va_start(args, fmt);
vprintf(buf, args);
va_end(args);
}
#endif

View File

@ -1,12 +1,21 @@
unix program hello unix program hello
begin begin
mov al 0x11 inc eax
mov ax 0x1122 inc ecx
mov eax 0x11223344 inc edx
inc ebx
mov cl 0x11 inc esp
mov cx 0x1122 inc ebp
mov ecx 0x11223344 inc esi
inc edi
inc r8d
inc r9d
inc r10d
inc r11d
inc r12d
inc r13d
inc r14d
inc r15d
exit 0 exit 0
end program end program