/* INT32 must hold at least signed 32-bit values. */
-/* Modified JACS 23/4/99. 1200 means VC++ 6 */
-#if !defined(XMD_H) && !(_MSC_VER >= 1200) /* X11/xmd.h correctly defines INT32 */
-typedef long INT32;
-#endif
-
-/* Added JACS 23/4/99, to get INT32 definition */
-#if (_MSC_VER >= 1200)
-#include <windows.h>
-#endif
+/*
+ VZ: due to the horrible mess resulting in INT32 being defined in windows.h
+ for some compilers but not for the other ones, I have globally replace
+ INT32 with JPEG_INT32 in libjpeg code to avoid the eight level ifdef
+ which used to be here. The problem is that, of course, now we'll have
+ conflicts when upgrading to the next libjpeg release -- however
+ considering their frequency (1 in the last 5 years) it seems that
+ it is not too high a price to pay for the clean compilation with all
+ versions of mingw32 and cygwin
+ */
+typedef long JPEG_INT32;
/* Datatype used for image dimensions. The JPEG standard only supports
* images up to 64K*64K due to 16-bit fields in SOF markers. Therefore
* or code profilers that require it.
*/
-#if defined(__VISAGECPP__) && !defined(JPEGLOCAL) /* need this for /common/imagjpeg.obj but not loclly */
-/* a function called through method pointers: */
-#define METHODDEF(type) static type _Optlink
-/* a function used only in its module: */
-#define LOCAL(type) static type _Optlink
-/* a function referenced thru EXTERNs: */
-#define GLOBAL(type) type
-/* a reference to a GLOBAL function: */
-#define EXTERN(type) extern type _Optlink
-#else
+#if defined(__VISAGECPP__)
+#define JPEG_CALLING_CONV _Optlink
+#else /* !Visual Age C++ */
+#define JPEG_CALLING_CONV
+#endif
+
+/* We can't declare a static function as extern "C" as we need to do in C++
+ * programs, so suppress static in METHODDEF when using C++.
+ */
+#if defined(__cplusplus)
+#define JPEG_METHOD_LINKAGE
+#else /* !__cplusplus */
+#define JPEG_METHOD_LINKAGE static
+#endif
+
/* a function called through method pointers: */
-#define METHODDEF(type) static type
+#define METHODDEF(type) JPEG_METHOD_LINKAGE type JPEG_CALLING_CONV
/* a function used only in its module: */
-#define LOCAL(type) static type
+#define LOCAL(type) static type JPEG_CALLING_CONV
/* a function referenced thru EXTERNs: */
#define GLOBAL(type) type
/* a reference to a GLOBAL function: */
-#define EXTERN(type) extern type
-#endif
+#define EXTERN(type) extern type JPEG_CALLING_CONV
/* This macro is used to declare a "method", that is, a function pointer.
* We want to supply prototype parameters if the compiler can cope.
* Again, you can customize this if you need special linkage keywords.
*/
+#if defined(__VISAGECPP__) /* need this for /common/imagjpeg.obj but not loclly */
+#ifdef HAVE_PROTOTYPES
+#define JMETHOD(type,methodname,arglist) type (_Optlink *methodname) arglist
+#else
+#define JMETHOD(type,methodname,arglist) type (_Optlink *methodname) ()
+#endif
+
+#else
+
#ifdef HAVE_PROTOTYPES
#define JMETHOD(type,methodname,arglist) type (*methodname) arglist
#else
#define JMETHOD(type,methodname,arglist) type (*methodname) ()
#endif
+#endif
/* Here is the pseudo-keyword for declaring pointers that must be "far"
* on 80x86 machines. Most of the specialized coding for 80x86 is handled
#ifdef NEED_FAR_POINTERS
#define FAR far
#else
+#ifndef FAR
#define FAR
#endif
+#endif
/*