2026-03-31 19:42:54 +01:00

103 lines
1.9 KiB
C

#include "log.h"
#include <stdarg.h>
#include <stdio.h>
#include <time.h>
unsigned int flogf(unsigned short flags, const char *Format, ...) {
va_list args;
va_start(args, Format);
unsigned int char_counter = 0;
time_t t = time(NULL);
struct tm *tm_info = localtime(&t);
if (flags & LOG_TIME_STAMP) {
printf("%02d:%02d:%02d - ", tm_info->tm_hour, tm_info->tm_min, tm_info->tm_sec);
} else {
printf(" ");
}
if (flags & LOG_LEVEL_WARN) {
if (flags & LOG_COLOR_OUT) {
printf(COLOR_YELLOW);
}
printf("[WARNING]: \t");
if (flags & LOG_COLOR_OUT) {
printf(COLOR_RESET);
}
} else if (flags & LOG_LEVEL_ERROR) {
if (flags & LOG_COLOR_OUT) {
printf(COLOR_RED);
}
printf("[ERROR]: \t");
if (flags & LOG_COLOR_OUT) {
printf(COLOR_RESET);
}
} else if (flags & LOG_LEVEL_INFO) {
if (flags & LOG_COLOR_OUT) {
printf(COLOR_BLUE);
}
printf("[INFO]: \t");
if (flags & LOG_COLOR_OUT) {
printf(COLOR_RESET);
}
} else if (flags & LOG_LEVEL_SUCCESS) {
if (flags & LOG_COLOR_OUT) {
printf(COLOR_GREEN);
}
printf("[SUCCESS]: \t");
if (flags & LOG_COLOR_OUT) {
printf(COLOR_RESET);
}
}
// Format string processing
while (*Format) {
if (*Format == '%') {
Format++;
switch (*Format) {
case 'd':
printf("%d", va_arg(args, int));
break;
case 'f':
printf("%f", va_arg(args, double));
break;
case 's':
printf("%s", va_arg(args, char *));
break;
case 'c':
printf("%c", va_arg(args, int));
break;
case 'x':
printf("%x", va_arg(args, unsigned int));
break;
case 'p':
printf("%p", va_arg(args, void *));
break;
case '%':
printf("%%");
break;
default:
printf("%%");
printf("%c", *Format);
break;
}
} else {
putchar(*Format);
}
Format++;
char_counter++;
}
putchar('\n'); // Optional newline
va_end(args);
return char_counter;
}