#include "error_handler.h" ErrorHandler::ErrorHandler(int debug_level) { debug = debug_level; reg = NULL; depth = 0; if (debug) { fprintf(stderr, "Instantiating Error Handler.\n"); } } ErrorHandler::~ErrorHandler() { function_registry *temp; if (debug) { fprintf(stderr, "Closing Down Error Handler.\n"); while(reg) { temp = reg; reg = reg->next; if(temp->function_name) free(temp->function_name); free(temp); } } } void ErrorHandler::Register(char *func_name) { function_registry *temp; if (debug) { depth++; temp = (function_registry *)malloc(sizeof(function_registry)); temp->next = reg; if (func_name) temp->function_name = strdup(func_name); else temp->function_name = strdup("(null)"); reg = temp; if (debug > 4) { int i; for (i = 0; i < depth; i++) fprintf(stderr, " "); fprintf(stderr, "Entering Function: %s\n", func_name); } } } void ErrorHandler::Unregister() { function_registry *temp; if (debug) { if (reg) { if (debug > 4) { int i; for (i = 0; i < depth; i++) fprintf(stderr, " "); fprintf(stderr, "Leaving Function: %s\n", reg->function_name); } temp = reg; if (reg->function_name) free(reg->function_name); reg = reg->next; free(temp); } else { fprintf(stderr, "Error: Attempt to leave unregistered function\n"); } depth--; } } void ErrorHandler::Error(char *error_string) { if (debug) { fprintf(stderr, "Error: %s\n", error_string); if (debug > 1) { print_registry(); } } exit(1); } void ErrorHandler::LogEvent(char *event) { if (debug > 2) { int i; for (i = 0; i < depth; i++) fprintf(stderr, " "); fprintf(stderr, "Event: %s\n", event); if (debug > 3) { print_registry(); } } } void ErrorHandler::print_registry() { function_registry *temp; temp = reg; fprintf(stderr, "In function: %s", temp->function_name); while((temp = temp->next)) { fprintf(stderr, " <- %s", temp->function_name); } fprintf(stderr, "\n"); }