1 /*
2  * jconfig.h
3  *
4  * Copyright (C) 1991, 1992, 1993, Thomas G. Lane.
5  * This file is part of the Independent JPEG Group's software.
6  * For conditions of distribution and use, see the accompanying README file.
7  *
8  * This file contains preprocessor declarations that help customize
9  * the JPEG software for a particular application, machine, or compiler.
10  * Edit these declarations as needed (or add -D flags to the Makefile).
11  */
12 
13 
14 /*
15  * These symbols indicate the properties of your machine or compiler.
16  * The conditional definitions given may do the right thing already,
17  * but you'd best look them over closely, especially if your compiler
18  * does not handle full ANSI C.  An ANSI-compliant C compiler should
19  * provide all the necessary features; __STDC__ is supposed to be
20  * predefined by such compilers.
21  */
22 
23 /*
24  * HAVE_STDC is tested below to see whether ANSI features are available.
25  * We avoid testing __STDC__ directly for arcane reasons of portability.
26  * (On some compilers, __STDC__ is only defined if a switch is given,
27  * but the switch also disables machine-specific features we need to get at.
28  * In that case, -DHAVE_STDC in the Makefile is a convenient solution.)
29  */
30 
31 #ifdef __STDC__			/* if compiler claims to be ANSI, believe it */
32 #define HAVE_STDC
33 #endif
34 
35 
36 /* Does your compiler support function prototypes? */
37 /* (If not, you also need to use ansi2knr, see SETUP) */
38 
39 #ifdef HAVE_STDC		/* ANSI C compilers always have prototypes */
40 #define PROTO
41 #else
42 #ifdef __cplusplus		/* So do C++ compilers */
43 #define PROTO
44 #endif
45 #endif
46 
47 /* Does your compiler support the declaration "unsigned char" ? */
48 /* How about "unsigned short" ? */
49 
50 #ifdef HAVE_STDC		/* ANSI C compilers must support both */
51 #define HAVE_UNSIGNED_CHAR
52 #define HAVE_UNSIGNED_SHORT
53 #endif
54 
55 /* Define this if an ordinary "char" type is unsigned.
56  * If you're not sure, leaving it undefined will work at some cost in speed.
57  * If you defined HAVE_UNSIGNED_CHAR then it doesn't matter very much.
58  */
59 
60 /* #define CHAR_IS_UNSIGNED */
61 
62 /* Define this if your compiler implements ">>" on signed values as a logical
63  * (unsigned) shift; leave it undefined if ">>" is a signed (arithmetic) shift,
64  * which is the normal and rational definition.
65  */
66 
67 /* #define RIGHT_SHIFT_IS_UNSIGNED */
68 
69 /* Define "void" as "char" if your compiler doesn't know about type void.
70  * NOTE: be sure to define void such that "void *" represents the most general
71  * pointer type, e.g., that returned by malloc().
72  */
73 
74 /* #define void char */
75 
76 /* Define const as empty if your compiler doesn't know the "const" keyword. */
77 /* (Even if it does, defining const as empty won't break anything.) */
78 
79 #ifndef HAVE_STDC		/* ANSI C and C++ compilers should know it. */
80 #ifndef __cplusplus
81 #define const
82 #endif
83 #endif
84 
85 /* For 80x86 machines, you need to define NEED_FAR_POINTERS,
86  * unless you are using a large-data memory model or 80386 flat-memory mode.
87  * On less brain-damaged CPUs this symbol must not be defined.
88  * (Defining this symbol causes large data structures to be referenced through
89  * "far" pointers and to be allocated with a special version of malloc.)
90  */
91 
92 #ifdef MSDOS
93 #define NEED_FAR_POINTERS
94 #endif
95 
96 
97 /* The next three symbols only affect the system-dependent user interface
98  * modules (jcmain.c, jdmain.c).  You can ignore these if you are supplying
99  * your own user interface code.
100  */
101 
102 /* Define this if you want to name both input and output files on the command
103  * line, rather than using stdout and optionally stdin.  You MUST do this if
104  * your system can't cope with binary I/O to stdin/stdout.  See comments at
105  * head of jcmain.c or jdmain.c.
106  */
107 
108 #ifdef MSDOS			/* two-file style is needed for PCs */
109 #ifndef USE_FDOPEN		/* unless you have fdopen() or setmode() */
110 #ifndef USE_SETMODE
111 #define TWO_FILE_COMMANDLINE
112 #endif
113 #endif
114 #endif
115 #ifdef THINK_C			/* it's needed for Macintosh too */
116 #define TWO_FILE_COMMANDLINE
117 #endif
118 
119 /* Define this if your system needs explicit cleanup of temporary files.
120  * This is crucial under MS-DOS, where the temporary "files" may be areas
121  * of extended memory; on most other systems it's not as important.
122  */
123 
124 #ifdef MSDOS
125 #define NEED_SIGNAL_CATCHER
126 #endif
127 
128 /* By default, we open image files with fopen(...,"rb") or fopen(...,"wb").
129  * This is necessary on systems that distinguish text files from binary files,
130  * and is harmless on most systems that don't.  If you have one of the rare
131  * systems that complains about the "b" spec, define this symbol.
132  */
133 
134 /* #define DONT_USE_B_MODE */
135 
136 
137 /* If you're getting bored, that's the end of the symbols you HAVE to
138  * worry about.  Go fix the makefile and compile.
139  */
140 
141 
142 /* If your compiler supports inline functions, define INLINE
143  * as the inline keyword; otherwise define it as empty.
144  */
145 
146 #ifdef __GNUC__			/* for instance, GNU C knows about inline */
147 #define INLINE __inline__
148 #endif
149 #ifndef INLINE			/* default is to define it as empty */
150 #define INLINE
151 #endif
152 
153 /* On a few systems, type boolean and/or macros FALSE, TRUE may appear
154  * in standard header files.  Or you may have conflicts with application-
155  * specific header files that you want to include together with these files.
156  * In that case you need only comment out these definitions.
157  */
158 
159 typedef int boolean;
160 #undef FALSE			/* in case these macros already exist */
161 #undef TRUE
162 #define FALSE	0		/* values of boolean */
163 #define TRUE	1
164 
165 /* This defines the size of the I/O buffers for entropy compression
166  * and decompression; you could reduce it if memory is tight.
167  */
168 
169 #define JPEG_BUF_SIZE	4096 /* bytes */
170 
171 
172 
173 /* These symbols determine the JPEG functionality supported. */
174 
175 /*
176  * These defines indicate whether to include various optional functions.
177  * Undefining some of these symbols will produce a smaller but less capable
178  * program file.  Note that you can leave certain source files out of the
179  * compilation/linking process if you've #undef'd the corresponding symbols.
180  * (You may HAVE to do that if your compiler doesn't like null source files.)
181  */
182 
183 /* Arithmetic coding is unsupported for legal reasons.  Complaints to IBM. */
184 
185 /* Encoder capability options: */
186 #undef  C_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
187 #undef  C_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files?  (NYI) */
188 #define ENTROPY_OPT_SUPPORTED	    /* Optimization of entropy coding parms? */
189 #define INPUT_SMOOTHING_SUPPORTED   /* Input image smoothing option? */
190 /* Decoder capability options: */
191 #undef  D_ARITH_CODING_SUPPORTED    /* Arithmetic coding back end? */
192 #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */
193 #define BLOCK_SMOOTHING_SUPPORTED   /* Block smoothing during decoding? */
194 #define QUANT_1PASS_SUPPORTED	/* 1-pass color quantization? */
195 #define QUANT_2PASS_SUPPORTED	/* 2-pass color quantization? */
196 /* these defines indicate which JPEG file formats are allowed */
197 #define JFIF_SUPPORTED		/* JFIF or "raw JPEG" files */
198 #undef  JTIFF_SUPPORTED		/* JPEG-in-TIFF (not yet implemented) */
199 /* these defines indicate which image (non-JPEG) file formats are allowed */
200 #define GIF_SUPPORTED		/* GIF image file format */
201 /* #define RLE_SUPPORTED */	/* RLE image file format (by default, no) */
202 #define PPM_SUPPORTED		/* PPM/PGM image file format */
203 #define TARGA_SUPPORTED		/* Targa image file format */
204 #undef  TIFF_SUPPORTED		/* TIFF image file format (not yet impl.) */
205 
206 /* more capability options later, no doubt */
207 
208 
209 /*
210  * Define exactly one of these three symbols to indicate whether you want
211  * 8-bit, 12-bit, or 16-bit sample (pixel component) values.  8-bit is the
212  * default and is nearly always the right thing to use.  You can use 12-bit if
213  * you need to support image formats with more than 8 bits of resolution in a
214  * color value.  16-bit should only be used for the lossless JPEG mode (not
215  * currently supported).  Note that 12- and 16-bit values take up twice as
216  * much memory as 8-bit!
217  * Note: if you select 12- or 16-bit precision, it is dangerous to turn off
218  * ENTROPY_OPT_SUPPORTED.  The standard Huffman tables are only good for 8-bit
219  * precision, so jchuff.c normally uses entropy optimization to compute
220  * usable tables for higher precision.  If you don't want to do optimization,
221  * you'll have to supply different default Huffman tables.
222  */
223 
224 #define EIGHT_BIT_SAMPLES
225 #undef  TWELVE_BIT_SAMPLES
226 #undef  SIXTEEN_BIT_SAMPLES
227 
228 
229 
230 /*
231  * The remaining definitions don't need to be hand-edited in most cases.
232  * You may need to change these if you have a machine with unusual data
233  * types; for example, "char" not 8 bits, "short" not 16 bits,
234  * or "long" not 32 bits.  We don't care whether "int" is 16 or 32 bits,
235  * but it had better be at least 16.
236  */
237 
238 /* First define the representation of a single pixel element value. */
239 
240 #ifdef EIGHT_BIT_SAMPLES
241 /* JSAMPLE should be the smallest type that will hold the values 0..255.
242  * You can use a signed char by having GETJSAMPLE mask it with 0xFF.
243  * If you have only signed chars, and you are more worried about speed than
244  * memory usage, it might be a win to make JSAMPLE be short.
245  */
246 
247 #ifdef HAVE_UNSIGNED_CHAR
248 
249 typedef unsigned char JSAMPLE;
250 #define GETJSAMPLE(value)  (value)
251 
252 #else /* not HAVE_UNSIGNED_CHAR */
253 #ifdef CHAR_IS_UNSIGNED
254 
255 typedef char JSAMPLE;
256 #define GETJSAMPLE(value)  (value)
257 
258 #else /* not CHAR_IS_UNSIGNED */
259 
260 typedef char JSAMPLE;
261 #define GETJSAMPLE(value)  ((value) & 0xFF)
262 
263 #endif /* CHAR_IS_UNSIGNED */
264 #endif /* HAVE_UNSIGNED_CHAR */
265 
266 #define BITS_IN_JSAMPLE   8
267 #define MAXJSAMPLE	255
268 #define CENTERJSAMPLE	128
269 
270 #endif /* EIGHT_BIT_SAMPLES */
271 
272 
273 #ifdef TWELVE_BIT_SAMPLES
274 /* JSAMPLE should be the smallest type that will hold the values 0..4095. */
275 /* On nearly all machines "short" will do nicely. */
276 
277 typedef short JSAMPLE;
278 #define GETJSAMPLE(value)  (value)
279 
280 #define BITS_IN_JSAMPLE   12
281 #define MAXJSAMPLE	4095
282 #define CENTERJSAMPLE	2048
283 
284 #endif /* TWELVE_BIT_SAMPLES */
285 
286 
287 #ifdef SIXTEEN_BIT_SAMPLES
288 /* JSAMPLE should be the smallest type that will hold the values 0..65535. */
289 
290 #ifdef HAVE_UNSIGNED_SHORT
291 
292 typedef unsigned short JSAMPLE;
293 #define GETJSAMPLE(value)  (value)
294 
295 #else /* not HAVE_UNSIGNED_SHORT */
296 
297 /* If int is 32 bits this'll be horrendously inefficient storage-wise.
298  * But since we don't actually support 16-bit samples (ie lossless coding) yet,
299  * I'm not going to worry about making a smarter definition ...
300  */
301 typedef unsigned int JSAMPLE;
302 #define GETJSAMPLE(value)  (value)
303 
304 #endif /* HAVE_UNSIGNED_SHORT */
305 
306 #define BITS_IN_JSAMPLE    16
307 #define MAXJSAMPLE	65535
308 #define CENTERJSAMPLE	32768
309 
310 #endif /* SIXTEEN_BIT_SAMPLES */
311 
312 
313 /* Here we define the representation of a DCT frequency coefficient.
314  * This should be a signed 16-bit value; "short" is usually right.
315  * It's important that this be exactly 16 bits, no more and no less;
316  * more will cost you a BIG hit of memory, less will give wrong answers.
317  */
318 
319 typedef short JCOEF;
320 
321 
322 /* The remaining typedefs are used for various table entries and so forth.
323  * They must be at least as wide as specified; but making them too big
324  * won't cost a huge amount of memory, so we don't provide special
325  * extraction code like we did for JSAMPLE.  (In other words, these
326  * typedefs live at a different point on the speed/space tradeoff curve.)
327  */
328 
329 /* UINT8 must hold at least the values 0..255. */
330 
331 #ifdef HAVE_UNSIGNED_CHAR
332 typedef unsigned char UINT8;
333 #else /* not HAVE_UNSIGNED_CHAR */
334 #ifdef CHAR_IS_UNSIGNED
335 typedef char UINT8;
336 #else /* not CHAR_IS_UNSIGNED */
337 typedef short UINT8;
338 #endif /* CHAR_IS_UNSIGNED */
339 #endif /* HAVE_UNSIGNED_CHAR */
340 
341 /* UINT16 must hold at least the values 0..65535. */
342 
343 #ifdef HAVE_UNSIGNED_SHORT
344 typedef unsigned short UINT16;
345 #else /* not HAVE_UNSIGNED_SHORT */
346 typedef unsigned int UINT16;
347 #endif /* HAVE_UNSIGNED_SHORT */
348 
349 /* INT16 must hold at least the values -32768..32767. */
350 
351 #ifndef XMD_H			/* X11/xmd.h correctly defines INT16 */
352 typedef short INT16;
353 #endif
354 
355 /* INT32 must hold signed 32-bit values; if your machine happens */
356 /* to have 64-bit longs, you might want to change this. */
357 
358 #ifndef XMD_H			/* X11/xmd.h correctly defines INT32 */
359 typedef long INT32;
360 #endif
361