| 
							- /*
 -  * jinclude.h
 -  *
 -  * Copyright (C) 1991-1994, Thomas G. Lane.
 -  * This file is part of the Independent JPEG Group's software.
 -  * For conditions of distribution and use, see the accompanying README file.
 -  *
 -  * This file exists to provide a single place to fix any problems with
 -  * including the wrong system include files.  (Common problems are taken
 -  * care of by the standard jconfig symbols, but on really weird systems
 -  * you may have to edit this file.)
 -  *
 -  * NOTE: this file is NOT intended to be included by applications using the
 -  * JPEG library.  Most applications need only include jpeglib.h.
 -  */
 - 
 - 
 - /* Include auto-config file to find out which system include files we need. */
 - 
 - #ifndef __jinclude_h__
 - #define __jinclude_h__
 - 
 - #include "jconfig.h"		/* auto configuration options */
 - #define JCONFIG_INCLUDED	/* so that jpeglib.h doesn't do it again */
 - 
 - /*
 -  * We need the NULL macro and size_t typedef.
 -  * On an ANSI-conforming system it is sufficient to include <stddef.h>.
 -  * Otherwise, we get them from <stdlib.h> or <stdio.h>; we may have to
 -  * pull in <sys/types.h> as well.
 -  * Note that the core JPEG library does not require <stdio.h>;
 -  * only the default error handler and data source/destination modules do.
 -  * But we must pull it in because of the references to FILE in jpeglib.h.
 -  * You can remove those references if you want to compile without <stdio.h>.
 -  */
 - 
 - #ifdef HAVE_STDDEF_H
 - #include <stddef.h>
 - #endif
 - 
 - #ifdef HAVE_STDLIB_H
 - #include <stdlib.h>
 - #endif
 - 
 - #ifdef NEED_SYS_TYPES_H
 - #include <sys/types.h>
 - #endif
 - 
 - #include <stdio.h>
 - 
 - /*
 -  * We need memory copying and zeroing functions, plus strncpy().
 -  * ANSI and System V implementations declare these in <string.h>.
 -  * BSD doesn't have the mem() functions, but it does have bcopy()/bzero().
 -  * Some systems may declare memset and memcpy in <memory.h>.
 -  *
 -  * NOTE: we assume the size parameters to these functions are of type size_t.
 -  * Change the casts in these macros if not!
 -  */
 - 
 - #ifdef NEED_BSD_STRINGS
 - 
 - #include <strings.h>
 - #define MEMZERO(target,size)	bzero((void *)(target), (size_t)(size))
 - #define MEMCOPY(dest,src,size)	bcopy((const void *)(src), (void *)(dest), (size_t)(size))
 - 
 - #else /* not BSD, assume ANSI/SysV string lib */
 - 
 - #include <string.h>
 - #define MEMZERO(target,size)	memset((void *)(target), 0, (size_t)(size))
 - #define MEMCOPY(dest,src,size)	memcpy((void *)(dest), (const void *)(src), (size_t)(size))
 - 
 - #endif
 - 
 - /*
 -  * In ANSI C, and indeed any rational implementation, size_t is also the
 -  * type returned by sizeof().  However, it seems there are some irrational
 -  * implementations out there, in which sizeof() returns an int even though
 -  * size_t is defined as long or unsigned long.  To ensure consistent results
 -  * we always use this SIZEOF() macro in place of using sizeof() directly.
 -  */
 - 
 - #define SIZEOF(object)	((size_t) sizeof(object))
 - 
 - /*
 -  * The modules that use fread() and fwrite() always invoke them through
 -  * these macros.  On some systems you may need to twiddle the argument casts.
 -  * CAUTION: argument order is different from underlying functions!
 -  */
 - 
 - #define JFREAD(file,buf,sizeofbuf)  \
 -   ((size_t) fread((void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
 - #define JFWRITE(file,buf,sizeofbuf)  \
 -   ((size_t) fwrite((const void *) (buf), (size_t) 1, (size_t) (sizeofbuf), (file)))
 - 
 - 
 - 
 - typedef enum {			/* JPEG marker codes */
 -   M_SOF0  = 0xc0,
 -   M_SOF1  = 0xc1,
 -   M_SOF2  = 0xc2,
 -   M_SOF3  = 0xc3,
 - 
 -   M_SOF5  = 0xc5,
 -   M_SOF6  = 0xc6,
 -   M_SOF7  = 0xc7,
 - 
 -   M_JPG   = 0xc8,
 -   M_SOF9  = 0xc9,
 -   M_SOF10 = 0xca,
 -   M_SOF11 = 0xcb,
 - 
 -   M_SOF13 = 0xcd,
 -   M_SOF14 = 0xce,
 -   M_SOF15 = 0xcf,
 - 
 -   M_DHT   = 0xc4,
 - 
 -   M_DAC   = 0xcc,
 - 
 -   M_RST0  = 0xd0,
 -   M_RST1  = 0xd1,
 -   M_RST2  = 0xd2,
 -   M_RST3  = 0xd3,
 -   M_RST4  = 0xd4,
 -   M_RST5  = 0xd5,
 -   M_RST6  = 0xd6,
 -   M_RST7  = 0xd7,
 - 
 -   M_SOI   = 0xd8,
 -   M_EOI   = 0xd9,
 -   M_SOS   = 0xda,
 -   M_DQT   = 0xdb,
 -   M_DNL   = 0xdc,
 -   M_DRI   = 0xdd,
 -   M_DHP   = 0xde,
 -   M_EXP   = 0xdf,
 - 
 -   M_APP0  = 0xe0,
 -   M_APP1  = 0xe1,
 -   M_APP2  = 0xe2,
 -   M_APP3  = 0xe3,
 -   M_APP4  = 0xe4,
 -   M_APP5  = 0xe5,
 -   M_APP6  = 0xe6,
 -   M_APP7  = 0xe7,
 -   M_APP8  = 0xe8,
 -   M_APP9  = 0xe9,
 -   M_APP10 = 0xea,
 -   M_APP11 = 0xeb,
 -   M_APP12 = 0xec,
 -   M_APP13 = 0xed,
 -   M_APP14 = 0xee,
 -   M_APP15 = 0xef,
 - 
 -   M_JPG0  = 0xf0,
 -   M_JPG13 = 0xfd,
 -   M_COM   = 0xfe,
 - 
 -   M_TEM   = 0x01,
 - 
 -   M_ERROR = 0x100
 - } JPEG_MARKER;
 - 
 - 
 - /*
 -  * Figure F.12: extend sign bit.
 -  * On some machines, a shift and add will be faster than a table lookup.
 -  */
 - 
 - #ifdef AVOID_TABLES
 - 
 - #define HUFF_EXTEND(x,s)  ((x) < (1<<((s)-1)) ? (x) + (((-1)<<(s)) + 1) : (x))
 - 
 - #else
 - 
 - #define HUFF_EXTEND(x,s)  ((x) < extend_test[s] ? (x) + extend_offset[s] : (x))
 - 
 - static const int extend_test[16] =   /* entry n is 2**(n-1) */
 -   { 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
 -     0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 };
 - 
 - static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */
 -   { 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1,
 -     ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1,
 -     ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1,
 -     ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 };
 - 
 - #endif /* AVOID_TABLES */
 - 
 - 
 - #endif
 
 
  |