Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2005, HervĂ© Drolon, FreeImage Team
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  *
  14.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  15.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  18.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  19.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  20.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  21.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  22.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  23.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  24.  * POSSIBILITY OF SUCH DAMAGE.
  25.  */
  26.  
  27. #include "opj_includes.h"
  28.  
  29. /* ==========================================================
  30.      Utility functions
  31.    ==========================================================*/
  32.  
  33. #ifndef _WIN32
  34. static char*
  35. i2a(unsigned i, char *a, unsigned r) {
  36.         if (i/r > 0) a = i2a(i/r,a,r);
  37.         *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
  38.         return a+1;
  39. }
  40.  
  41. /**
  42.  Transforms integer i into an ascii string and stores the result in a;
  43.  string is encoded in the base indicated by r.
  44.  @param i Number to be converted
  45.  @param a String result
  46.  @param r Base of value; must be in the range 2 - 36
  47.  @return Returns a
  48. */
  49. static char *
  50. _itoa(int i, char *a, int r) {
  51.         r = ((r < 2) || (r > 36)) ? 10 : r;
  52.         if(i < 0) {
  53.                 *a = '-';
  54.                 *i2a(-i, a+1, r) = 0;
  55.         }
  56.         else *i2a(i, a, r) = 0;
  57.         return a;
  58. }
  59.  
  60. #endif /* !_WIN32 */
  61.  
  62. /* ----------------------------------------------------------------------- */
  63.  
  64. opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
  65.         if(cinfo) {
  66.                 opj_event_mgr_t *previous = cinfo->event_mgr;
  67.                 cinfo->event_mgr = event_mgr;
  68.                 cinfo->client_data = context;
  69.                 return previous;
  70.         }
  71.  
  72.         return NULL;
  73. }
  74.  
  75. bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
  76. #define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
  77.         opj_msg_callback msg_handler = NULL;
  78.  
  79.         opj_event_mgr_t *event_mgr = cinfo->event_mgr;
  80.         if(event_mgr != NULL) {
  81.                 switch(event_type) {
  82.                         case EVT_ERROR:
  83.                                 msg_handler = event_mgr->error_handler;
  84.                                 break;
  85.                         case EVT_WARNING:
  86.                                 msg_handler = event_mgr->warning_handler;
  87.                                 break;
  88.                         case EVT_INFO:
  89.                                 msg_handler = event_mgr->info_handler;
  90.                                 break;
  91.                         default:
  92.                                 break;
  93.                 }
  94.                 if(msg_handler == NULL) {
  95.                         return false;
  96.                 }
  97.         } else {
  98.                 return false;
  99.         }
  100.  
  101.         if ((fmt != NULL) && (event_mgr != NULL)) {
  102.                 va_list arg;
  103.                 int str_length/*, i, j*/; /* UniPG */
  104.                 char message[MSG_SIZE];
  105.                 memset(message, 0, MSG_SIZE);
  106.                 /* initialize the optional parameter list */
  107.                 va_start(arg, fmt);
  108.                 /* check the length of the format string */
  109.                 str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt);
  110.                 /* parse the format string and put the result in 'message' */
  111.                 vsprintf(message, fmt, arg); /* UniPG */
  112.                 /* deinitialize the optional parameter list */
  113.                 va_end(arg);
  114.  
  115.                 /* output the message to the user program */
  116.                 msg_handler(message, cinfo->client_data);
  117.         }
  118.  
  119.         return true;
  120. }
  121.  
  122.