#include /* for va_start(), va_end() */ #include /* for sprintf(), stderr, ... */ #include /* for exit() */ #include /* for clock_gettime() */ #include "funcs.h" /* for infomsg(), errormsg() */ /* $HeadURL$ $LastChangedRevision$' */ /* * Macros */ #define PREFIX_TIME_FLAG FALSE /* * Global variables */ unsigned int verboselevel; /* * Forward declarations */ void real_fmessage(const char *, FILE *, char *, va_list); /* * Functions */ double doubletime( ) { struct timespec now; static double start = 0.0; /* clock_gettime() has superceded gettimeofday() */ clock_gettime(CLOCK_REALTIME, &now); if (start == 0.0) start = now.tv_sec + now.tv_nsec/1000000000.0; return(now.tv_sec + now.tv_nsec/1000000000.0 - start); } void real_debugmsg( const char *func, unsigned int level, char *fmt, ...) { va_list argp; if (verboselevel < level) return; va_start(argp, fmt); real_fmessage(func, stderr, fmt, argp); va_end(argp); } void real_infomsg( const char *func, char *fmt, ...) { va_list argp; if (verboselevel < 3) return; va_start(argp, fmt); real_fmessage(func, stderr, fmt, argp); va_end(argp); } void real_warningmsg( const char *func, char *fmt, ...) { va_list argp; if (verboselevel < 2) return; va_start(argp, fmt); real_fmessage(func, stderr, fmt, argp); va_end(argp); } void real_errormsg( const char *func, char *fmt, ...) { va_list argp; if (verboselevel < 1) return; va_start(argp, fmt); real_fmessage(func, stderr, fmt, argp); va_end(argp); exit(EXIT_FAILURE); } #if 0 void real_finfomsg( const char *func, FILE *fp, char *fmt, ...) { va_list argp; va_start(argp, fmt); real_fmessage(func, fp, fmt, argp); va_end(argp); } void real_ferrormsg( const char *func, FILE *fp, char *fmt, ...) { va_list argp; va_start(argp, fmt); real_fmessage(func, fp, fmt, argp); va_end(argp); exit(EXIT_FAILURE); } #endif void real_fmessage( const char *func, FILE *fp, char *fmt, va_list argp) { #if PREFIX_TIME_FLAG fprintf(fp, "%.06lf: %s: ", doubletime(), func); #else fprintf(fp, "%s: ", func); #endif vfprintf(fp, fmt, argp); fprintf(fp, "\n"); }