#include "plat.h" #ifdef plat_posix #define _POSIX_SOURCE #define _GNU_SOURCE #include #include #include #include #include #include extern int isatty(int); extern int fileno(FILE*); int imp_assert( int val, const char* expr, const char* file, int line ) { if (!val) { print_err( "%d:%s: Assertion failed: %s.\n", line, file, expr ); pbreak(420); return 0; } return 1; } void print(const char* fmt, ...) { va_list args; va_start(args, fmt); vfprintf(stdout, fmt, args); va_end(args); } void print_err(const char* fmt, ...) { va_list args; va_start(args, fmt); if (isatty(fileno(stderr))) { fprintf(stderr, "\033[31;31m"); } vfprintf(stderr, fmt, args); if (isatty(fileno(stderr))) { fprintf(stderr, "\033[0m"); } va_end(args); } void print_war(const char* fmt, ...) { va_list args; va_start(args, fmt); if (isatty(fileno(stderr))) { fprintf(stderr, "\033[31;35m"); } vfprintf(stderr, fmt, args); if (isatty(fileno(stderr))) { fprintf(stderr, "\033[0m"); } va_end(args); } void pbreak(int code) { #if defined(DEBUG) && defined(plat_x86) __asm__("int3;"); (void)code; #else exit(code); #endif } #endif