summaryrefslogtreecommitdiff
path: root/libopenjpeg/event.c
diff options
context:
space:
mode:
authorAntonin Descampe <antonin@gmail.com>2005-12-08 09:38:47 +0000
committerAntonin Descampe <antonin@gmail.com>2005-12-08 09:38:47 +0000
commit95bc884365deb41c357583874c23d82eac7cad2d (patch)
treecbeb4c538d1bf2f253bc5d3aa21da2871032b670 /libopenjpeg/event.c
parente45e87cfb7c7a131fcd7412e3fb228b61f3c999e (diff)
OpenJPEG version 1.1
Diffstat (limited to 'libopenjpeg/event.c')
-rw-r--r--libopenjpeg/event.c251
1 files changed, 142 insertions, 109 deletions
diff --git a/libopenjpeg/event.c b/libopenjpeg/event.c
index 9b87f734..d105cca2 100644
--- a/libopenjpeg/event.c
+++ b/libopenjpeg/event.c
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 2005, Hervé Drolon, FreeImage Team
* All rights reserved.
@@ -25,124 +24,158 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "opj_includes.h"
+// ==========================================================
+// Utility functions
+// ==========================================================
+
+#ifndef WIN32
+static char*
+i2a(unsigned i, char *a, unsigned r) {
+ if (i/r > 0) a = i2a(i/r,a,r);
+ *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
+ return a+1;
+}
+
+/**
+ Transforms integer i into an ascii string and stores the result in a;
+ string is encoded in the base indicated by r.
+ @param i Number to be converted
+ @param a String result
+ @param r Base of value; must be in the range 2 - 36
+ @return Returns a
+*/
+static char *
+_itoa(int i, char *a, int r) {
+ r = ((r < 2) || (r > 36)) ? 10 : r;
+ if(i < 0) {
+ *a = '-';
+ *i2a(-i, a+1, r) = 0;
+ }
+ else *i2a(i, a, r) = 0;
+ return a;
+}
+
+#endif // !WIN32
+
+/* ----------------------------------------------------------------------- */
+
opj_event_mgr_t* 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;
- cinfo->client_data = context;
- return previous;
- }
+ if(cinfo) {
+ opj_event_mgr_t *previous = cinfo->event_mgr;
+ cinfo->event_mgr = event_mgr;
+ cinfo->client_data = context;
+ return previous;
+ }
- return NULL;
+ return NULL;
}
-bool opg_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
+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;
+ opj_msg_callback msg_handler = NULL;
- opj_event_mgr_t *event_mgr = cinfo->event_mgr;
- 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 false;
- }
- } else {
- return false;
- }
+ opj_event_mgr_t *event_mgr = cinfo->event_mgr;
+ 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 false;
+ }
+ } else {
+ return false;
+ }
- if ((fmt != NULL) && (event_mgr != NULL)) {
- va_list arg;
- int str_length, i, j;
- 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' */
- 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];
- };
- }
- /* deinitialize the optional parameter list */
- va_end(arg);
+ if ((fmt != NULL) && (event_mgr != NULL)) {
+ va_list arg;
+ int str_length, i, j;
+ 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' */
+ 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];
+ };
+ }
+ /* deinitialize the optional parameter list */
+ va_end(arg);
- /* output the message to the user program */
- msg_handler(message, cinfo->client_data);
- }
+ /* output the message to the user program */
+ msg_handler(message, cinfo->client_data);
+ }
- return true;
+ return true;
}