summaryrefslogtreecommitdiff
path: root/plugins/AdvaImg/src/FreeImage/FreeImage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/AdvaImg/src/FreeImage/FreeImage.cpp')
-rw-r--r--plugins/AdvaImg/src/FreeImage/FreeImage.cpp226
1 files changed, 226 insertions, 0 deletions
diff --git a/plugins/AdvaImg/src/FreeImage/FreeImage.cpp b/plugins/AdvaImg/src/FreeImage/FreeImage.cpp
new file mode 100644
index 0000000000..b36f10aca1
--- /dev/null
+++ b/plugins/AdvaImg/src/FreeImage/FreeImage.cpp
@@ -0,0 +1,226 @@
+// ==========================================================
+// FreeImage implementation
+//
+// Design and implementation by
+// - Floris van den Berg (flvdberg@wxs.nl)
+// - Hervé Drolon (drolon@infonie.fr)
+// - Karl-Heinz Bussian (khbussian@moss.de)
+//
+// This file is part of FreeImage 3
+//
+// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
+// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
+// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
+// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
+// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
+// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
+// THIS DISCLAIMER.
+//
+// Use at your own risk!
+// ==========================================================
+
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#include "FreeImage.h"
+#include "Utilities.h"
+
+//----------------------------------------------------------------------
+
+static const char *s_copyright = "This program uses FreeImage, a free, open source image library supporting all common bitmap formats. See http://freeimage.sourceforge.net for details";
+
+//----------------------------------------------------------------------
+
+#if defined(_WIN32) && !defined(__MINGW32__)
+#ifndef FREEIMAGE_LIB
+
+BOOL APIENTRY
+DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
+ switch (ul_reason_for_call) {
+ case DLL_PROCESS_ATTACH :
+ FreeImage_Initialise(FALSE);
+ break;
+
+ case DLL_PROCESS_DETACH :
+ FreeImage_DeInitialise();
+ break;
+
+ case DLL_THREAD_ATTACH :
+ case DLL_THREAD_DETACH :
+ break;
+ }
+
+ return TRUE;
+}
+
+#endif // FREEIMAGE_LIB
+
+#else // !_WIN32
+#ifndef FREEIMAGE_LIB
+
+void FreeImage_SO_Initialise() __attribute__((constructor));
+void FreeImage_SO_DeInitialise() __attribute__((destructor));
+
+void FreeImage_SO_Initialise() {
+ FreeImage_Initialise(FALSE);
+}
+
+void FreeImage_SO_DeInitialise() {
+ FreeImage_DeInitialise();
+}
+#endif // FREEIMAGE_LIB
+
+#endif // _WIN32
+
+//----------------------------------------------------------------------
+
+const char * DLL_CALLCONV
+FreeImage_GetVersion() {
+ static char s_version[16];
+ sprintf(s_version, "%d.%d.%d", FREEIMAGE_MAJOR_VERSION, FREEIMAGE_MINOR_VERSION, FREEIMAGE_RELEASE_SERIAL);
+ return s_version;
+}
+
+const char * DLL_CALLCONV
+FreeImage_GetCopyrightMessage() {
+ return s_copyright;
+}
+
+//----------------------------------------------------------------------
+
+BOOL DLL_CALLCONV
+FreeImage_IsLittleEndian() {
+ union {
+ DWORD i;
+ BYTE c[4];
+ } u;
+ u.i = 1;
+ return (u.c[0] != 0);
+}
+
+//----------------------------------------------------------------------
+
+static FreeImage_OutputMessageFunction freeimage_outputmessage_proc = NULL;
+static FreeImage_OutputMessageFunctionStdCall freeimage_outputmessagestdcall_proc = NULL;
+
+void DLL_CALLCONV
+FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf) {
+ freeimage_outputmessage_proc = omf;
+}
+
+void DLL_CALLCONV
+FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf) {
+ freeimage_outputmessagestdcall_proc = omf;
+}
+
+void DLL_CALLCONV
+FreeImage_OutputMessageProc(int fif, const char *fmt, ...) {
+ const int MSG_SIZE = 512; // 512 bytes should be more than enough for a short message
+
+ if ((fmt != NULL) && ((freeimage_outputmessage_proc != NULL) || (freeimage_outputmessagestdcall_proc != NULL))) {
+ char message[MSG_SIZE];
+ memset(message, 0, MSG_SIZE);
+
+ // initialize the optional parameter list
+
+ va_list arg;
+ va_start(arg, fmt);
+
+ // check the length of the format string
+
+ int str_length = (int)( (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt));
+
+ // parse the format string and put the result in 'message'
+
+ for (int 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 += (int)strlen(tmp);
+
+ ++i;
+
+ break;
+ }
+
+ case 'i' : // decimal numbers
+ case 'd' :
+ {
+ char tmp[16];
+
+ _itoa(va_arg(arg, int), tmp, 10);
+
+ strcat(message, tmp);
+
+ j += (int)strlen(tmp);
+
+ ++i;
+
+ break;
+ }
+
+ case 'x' : // hexadecimal numbers
+ {
+ char tmp[16];
+
+ _itoa(va_arg(arg, int), tmp, 16);
+
+ strcat(message, tmp);
+
+ j += (int)strlen(tmp);
+
+ ++i;
+
+ break;
+ }
+
+ case 's' : // strings
+ {
+ char *tmp = va_arg(arg, char*);
+
+ strcat(message, tmp);
+
+ j += (int)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
+
+ if (freeimage_outputmessage_proc != NULL)
+ freeimage_outputmessage_proc((FREE_IMAGE_FORMAT)fif, message);
+
+ if (freeimage_outputmessagestdcall_proc != NULL)
+ freeimage_outputmessagestdcall_proc((FREE_IMAGE_FORMAT)fif, message);
+ }
+}