#include "log.h" #include #include #include 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; }