#include #include #include int Num_Errors; int Num_Warnings; static void prefix(file, line, msg) char *file, *msg; int line; { fflush(stdout); if (file) { fprintf(stderr, "%s, ", file); } if (line) { fprintf(stderr, "line %d, ", line); } if (msg) { fprintf(stderr, "%s: ", msg); } } static void endmsg() { fputc('\n', stderr); fflush(stderr); } void fatal(char *f, int l, char *fmt, ...) { va_list ap; va_start(ap, fmt); prefix(f,l,"Internal error"); vfprintf(stderr, fmt, ap); endmsg(); va_end(ap); exit(1); } void error(char *f, int l, char *fmt, ...) { va_list ap; va_start(ap, fmt); Num_Errors++; prefix(f,l,"Error"); vfprintf(stderr, fmt, ap); endmsg(); va_end(ap); } void warning(char *f, int l, char *fmt, ...) { va_list ap; va_start(ap, fmt); Num_Warnings++; prefix(f,l,"Warning"); vfprintf(stderr, fmt, ap); endmsg(); va_end(ap); } void inform(char *f, int l, char *fmt, ...) { va_list ap; va_start(ap, fmt); prefix(f,l,"Info"); vfprintf(stderr, fmt, ap); endmsg(); va_end(ap); } void assert_failed(f, l, msg) char *f, *msg; int l; { prefix(f,l,"Assertion Failed"); fputs(msg, stderr); endmsg(); exit(1); } static void unix_error() { if (errno != 0) { if (errno > 0 && errno < sys_nerr) { fputs(sys_errlist[errno], stderr); } else { fprintf(stderr, "errno = %d", errno); } } } void syserr(file, line) char *file; int line; { Num_Errors++; prefix(file,line,"Error"); unix_error(); endmsg(); }