#pragma once #define STRUCTURE(NAME, ...) \ typedef struct NAME NAME; struct NAME { __VA_ARGS__ } #define HOLD() (void)fgetc(stdin); #define LOG(FD, COLOR, ...) fprintf(FD, COLOR), fprintf(FD, "%s:%d: ", __FILE__, __LINE__), fprintf(FD, __VA_ARGS__), fprintf(FD, "\033[0m"), fflush(FD) #define COMMENT(...) LOG(stdout, "\033[38;5;78m", __VA_ARGS__) #define WARNING(...) LOG(stdout, "\033[38;5;208m", __VA_ARGS__), HOLD() #define INFO(...) LOG(stdout, "\033[38;5;228m", __VA_ARGS__) #define ERROR(...) { LOG(stderr, "\033[38;5;196m", __VA_ARGS__); exit(EXIT_FAILURE); } #define CALLBACK_ON_FILE(FNAME, ...) \ if (FNAME != NULL) { __VA_ARGS__; } \ else WARNING("\"%s\" not set, skipping", #FNAME);