--- psiconv/trunk/lib/psiconv/parse_aux.c 2000/12/10 20:27:27 60 +++ psiconv/trunk/lib/psiconv/parse_aux.c 2000/12/13 00:42:04 61 @@ -26,57 +26,107 @@ #include "parse_routines.h" #include "data.h" +static void psiconv_default_error_handler(int kind, psiconv_u32 off, + const char *message) +{ + fprintf(stderr,"%s\n",message); +} + +int psiconv_verbosity = PSICONV_VERB_WARN; + +psiconv_error_handler_t psiconv_error_handler = psiconv_default_error_handler; + + +#define MAX_MESSAGE 160 + void psiconv_fatal(int level, psiconv_u32 off, const char *format,...) { + char buffer[MAX_MESSAGE]; va_list ap; + size_t curlen; + va_start(ap,format); - fprintf(stderr,"Fatal error (offset %08x): ",off); - vfprintf(stderr,format,ap); - fputs("\n",stderr); + snprintf(buffer,MAX_MESSAGE,"Fatal error (offset %08x): ",off); + curlen = strlen(buffer); + + vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); + psiconv_error_handler(PSICONV_VERB_FATAL,off,buffer); va_end(ap); + exit(1); } -void psiconv_progress(int level, psiconv_u32 off, const char *format,...) +void psiconv_warn(int level, psiconv_u32 off, const char *format,...) { - int i; + char buffer[MAX_MESSAGE]; va_list ap; + size_t curlen; + va_start(ap,format); - if (psiconv_verbosity >= PSICONV_VERB_PROGRESS) { - fprintf(stderr,"%08x ",off); - for (i = 0; i < level; i++) - fputs("=",stderr); - fprintf(stderr,"> "); - vfprintf(stderr,format,ap); - fputs("\n",stderr); + + if (psiconv_verbosity >= PSICONV_VERB_WARN) { + snprintf(buffer,MAX_MESSAGE,"WARNING (offset %08x): ",off); + curlen = strlen(buffer); + + vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); + psiconv_error_handler(PSICONV_VERB_WARN,off,buffer); } va_end(ap); } -void psiconv_warn(int level, psiconv_u32 off, const char *format,...) +void psiconv_progress(int level, psiconv_u32 off, const char *format,...) { + char buffer[MAX_MESSAGE]; va_list ap; + size_t curlen; + int i; + va_start(ap,format); - if (psiconv_verbosity >= PSICONV_VERB_WARN) { - fprintf(stderr,"WARNING (offset %08x): ",off); - vfprintf(stderr,format,ap); - fputs("\n",stderr); + if (psiconv_verbosity >= PSICONV_VERB_PROGRESS) { + snprintf(buffer,MAX_MESSAGE,"%08x ",off); + curlen = strlen(buffer); + + for (i = 0; (i < level) && (i+curlen+3 < MAX_MESSAGE); i++) + buffer[i+curlen] = '='; + curlen += i; + + buffer[curlen] = '>'; + buffer[curlen+1] = ' '; + buffer[curlen+2] = '\0'; + curlen += 2; + + vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); + + psiconv_error_handler(PSICONV_VERB_PROGRESS,off,buffer); } va_end(ap); } + void psiconv_debug(int level, psiconv_u32 off, const char *format,...) { - int i; + char buffer[MAX_MESSAGE]; va_list ap; + size_t curlen; + int i; + va_start(ap,format); if (psiconv_verbosity >= PSICONV_VERB_DEBUG) { - fprintf(stderr,"%08x ",off); - for (i = 0; i < level; i++) - fputs("-",stderr); - fprintf(stderr,"> "); - vfprintf(stderr,format,ap); - fputs("\n",stderr); + snprintf(buffer,MAX_MESSAGE,"%08x ",off); + curlen = strlen(buffer); + + for (i = 0; (i < level) && (i+curlen+3 < MAX_MESSAGE); i++) + buffer[i+curlen] = '-'; + curlen += i; + + buffer[curlen] = '>'; + buffer[curlen+1] = ' '; + buffer[curlen+2] = '\0'; + curlen += 2; + + vsnprintf(buffer+curlen,MAX_MESSAGE-curlen,format,ap); + + psiconv_error_handler(PSICONV_VERB_DEBUG,off,buffer); } va_end(ap); }