X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libopenjpeg%2Fevent.c;h=2a7006559c9e5bde82df70715158182f340ef1bc;hb=67d04dd9ba5fdf9124b34e56cba0ea07a8abe196;hp=0826046f8810da151cb165912f1f776419b305c8;hpb=cc3e813786a5f5f7b50a923ab31267200d202bd0;p=openjpeg.git diff --git a/libopenjpeg/event.c b/libopenjpeg/event.c index 0826046f..2a700655 100644 --- a/libopenjpeg/event.c +++ b/libopenjpeg/event.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Hervé Drolon, FreeImage Team + * Copyright (c) 2005, Herve Drolon, FreeImage Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,7 +30,8 @@ Utility functions ==========================================================*/ -#ifndef _MSC_VER +#ifdef OPJ_CODE_NOT_USED +#ifndef _WIN32 static char* i2a(unsigned i, char *a, unsigned r) { if (i/r > 0) a = i2a(i/r,a,r); @@ -57,11 +58,11 @@ _itoa(int i, char *a, int r) { return a; } -#endif /* !WIN32 */ +#endif /* !_WIN32 */ +#endif /* ----------------------------------------------------------------------- */ - -opj_event_mgr_t* opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) { +opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) { if(cinfo) { opj_event_mgr_t *previous = cinfo->event_mgr; cinfo->event_mgr = event_mgr; @@ -72,7 +73,8 @@ opj_event_mgr_t* opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_ return NULL; } -bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { +/* ----------------------------------------------------------------------- */ +opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { #define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */ opj_msg_callback msg_handler = NULL; @@ -92,15 +94,15 @@ bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { break; } if(msg_handler == NULL) { - return false; + return OPJ_FALSE; } } else { - return false; + return OPJ_FALSE; } if ((fmt != NULL) && (event_mgr != NULL)) { va_list arg; - int str_length, i, j; + int str_length/*, i, j*/; /* UniPG */ char message[MSG_SIZE]; memset(message, 0, MSG_SIZE); /* initialize the optional parameter list */ @@ -108,67 +110,7 @@ bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { /* check the length of the format string */ str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt); /* parse the format string and put the result in 'message' */ - for (i = 0, j = 0; i < str_length; ++i) { - if (fmt[i] == '%') { - if (i + 1 < str_length) { - switch(tolower(fmt[i + 1])) { - case '%' : - message[j++] = '%'; - break; - case 'o' : /* octal numbers */ - { - char tmp[16]; - _itoa(va_arg(arg, int), tmp, 8); - strcat(message, tmp); - j += strlen(tmp); - ++i; - break; - } - case 'i' : /* decimal numbers */ - case 'd' : - { - char tmp[16]; - _itoa(va_arg(arg, int), tmp, 10); - strcat(message, tmp); - j += strlen(tmp); - ++i; - break; - } - case 'x' : /* hexadecimal numbers */ - { - char tmp[16]; - _itoa(va_arg(arg, int), tmp, 16); - strcat(message, tmp); - j += strlen(tmp); - ++i; - break; - } - case 's' : /* strings */ - { - char *tmp = va_arg(arg, char*); - strcat(message, tmp); - j += strlen(tmp); - ++i; - break; - } - case 'f' : /* floats */ - { - char tmp[16]; - double value = va_arg(arg, double); - sprintf(tmp, "%f", value); - strcat(message, tmp); - j += strlen(tmp); - ++i; - break; - } - }; - } else { - message[j++] = fmt[i]; - } - } else { - message[j++] = fmt[i]; - }; - } + vsprintf(message, fmt, arg); /* UniPG */ /* deinitialize the optional parameter list */ va_end(arg); @@ -176,6 +118,116 @@ bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) { msg_handler(message, cinfo->client_data); } - return true; + return OPJ_TRUE; } +/* ----------------------------------------------------------------------- */ +opj_bool opj_event_msg_v2(opj_event_mgr_t* event_mgr, int event_type, const char *fmt, ...) { +#define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */ + opj_msg_callback msg_handler = NULL; + + if(event_mgr != NULL) { + switch(event_type) { + case EVT_ERROR: + msg_handler = event_mgr->error_handler; + break; + case EVT_WARNING: + msg_handler = event_mgr->warning_handler; + break; + case EVT_INFO: + msg_handler = event_mgr->info_handler; + break; + default: + break; + } + if(msg_handler == NULL) { + return OPJ_FALSE; + } + } else { + return OPJ_FALSE; + } + + if ((fmt != NULL) && (event_mgr != NULL)) { + va_list arg; + int str_length/*, i, j*/; /* UniPG */ + char message[MSG_SIZE]; + memset(message, 0, MSG_SIZE); + /* initialize the optional parameter list */ + va_start(arg, fmt); + /* check the length of the format string */ + str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt); + /* parse the format string and put the result in 'message' */ + vsprintf(message, fmt, arg); /* UniPG */ + /* deinitialize the optional parameter list */ + va_end(arg); + + /* output the message to the user program */ + msg_handler(message, event_mgr->client_data); + } + + return OPJ_TRUE; +} + +/* ----------------------------------------------------------------------- */ +void OPJ_CALLCONV opj_initialize_default_event_handler(opj_event_mgr_t * p_event, opj_bool verbose) +{ + if (! p_event){ + fprintf(stderr, "[ERROR] Event structure provided to the opj_set_default_event_handler is equal to null pointer.\n"); + return; + } + + p_event->client_data = NULL; + p_event->error_handler = opj_error_default_callback; + + if (verbose) { + p_event->info_handler = opj_info_default_callback; + p_event->warning_handler = opj_warning_default_callback; + } + else { + /* FIXME (MSD) This message should be remove when the documentation will be updated */ + fprintf(stdout, "[INFO] Verbose mode = OFF => no other info/warning output.\n"); + p_event->info_handler = opj_default_callback ; + p_event->warning_handler = opj_default_callback ; + } +} + +/* ---------------------------------------------------------------------- */ +/* Default callback functions */ + +/** + * Default callback function. + * Do nothing. + */ +void opj_default_callback (const char *msg, void *client_data) +{ +} + +/** + * Default info callback function. + * Output = stdout. + */ +void opj_info_default_callback (const char *msg, void *client_data) +{ + (void)client_data; + fprintf(stdout, "[INFO] %s", msg); +} + +/** + * Default warning callback function. + * Output = stderr. + */ +void opj_warning_default_callback (const char *msg, void *client_data) +{ + (void)client_data; + fprintf(stderr, "[WARNING] %s", msg); +} + +/** + * Default error callback function. + * Output = stderr. + */ +void opj_error_default_callback (const char *msg, void *client_data) +{ + (void)client_data; + fprintf(stderr, "[ERROR] %s", msg); +}