103 lines
1.9 KiB
C
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;
|
|
}
|