minilzo.c

Go to the documentation of this file.
00001 /* minilzo.c -- mini subset of the LZO real-time data compression library
00002 
00003    This file is part of the LZO real-time data compression library.
00004 
00005    Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
00006    Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
00007    Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
00008    Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
00009    Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
00010    Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
00011    Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
00012    Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
00013    Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
00014    Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
00015    All Rights Reserved.
00016 
00017    The LZO library is free software; you can redistribute it and/or
00018    modify it under the terms of the GNU General Public License,
00019    version 2, as published by the Free Software Foundation.
00020 
00021    The LZO library is distributed in the hope that it will be useful,
00022    but WITHOUT ANY WARRANTY; without even the implied warranty of
00023    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00024    GNU General Public License for more details.
00025 
00026    You should have received a copy of the GNU General Public License
00027    along with the LZO library; see the file COPYING.
00028    If not, write to the Free Software Foundation, Inc.,
00029    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00030 
00031    Markus F.X.J. Oberhumer
00032    <markus@oberhumer.com>
00033    http://www.oberhumer.com/opensource/lzo/
00034  */
00035 
00036 /*
00037  * NOTE:
00038  *   the full LZO package can be found at
00039  *   http://www.oberhumer.com/opensource/lzo/
00040  */
00041 
00042 #define __LZO_IN_MINILZO
00043 #define LZO_BUILD
00044 
00045 #if defined(LZO_CFG_FREESTANDING)
00046 #  undef MINILZO_HAVE_CONFIG_H
00047 #  define LZO_LIBC_FREESTANDING 1
00048 #  define LZO_OS_FREESTANDING 1
00049 #endif
00050 
00051 #ifdef MINILZO_HAVE_CONFIG_H
00052 #  include <config.h>
00053 #endif
00054 #include <limits.h>
00055 #include <stddef.h>
00056 #if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS)
00057 
00058 #ifndef __LZODEFS_H_INCLUDED
00059 #define __LZODEFS_H_INCLUDED 1
00060 
00061 #if defined(__CYGWIN32__) && !defined(__CYGWIN__)
00062 #  define __CYGWIN__ __CYGWIN32__
00063 #endif
00064 #if defined(__IBMCPP__) && !defined(__IBMC__)
00065 #  define __IBMC__ __IBMCPP__
00066 #endif
00067 #if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER)
00068 #  define __INTEL_COMPILER __ICL
00069 #endif
00070 #if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE)
00071 #  define _ALL_SOURCE 1
00072 #endif
00073 #if defined(__mips__) && defined(__R5900__)
00074 #  if !defined(__LONG_MAX__)
00075 #    define __LONG_MAX__ 9223372036854775807L
00076 #  endif
00077 #endif
00078 #if defined(__INTEL_COMPILER) && defined(__linux__)
00079 #  pragma warning(disable: 193)
00080 #endif
00081 #if defined(__KEIL__) && defined(__C166__)
00082 #  pragma warning disable = 322
00083 #elif 0 && defined(__C251__)
00084 #  pragma warning disable = 322
00085 #endif
00086 #if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__)
00087 #  if (_MSC_VER >= 1300)
00088 #    pragma warning(disable: 4668)
00089 #  endif
00090 #endif
00091 #if 0 && defined(__WATCOMC__)
00092 #  if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060)
00093 #    pragma warning 203 9
00094 #  endif
00095 #endif
00096 #if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__)
00097 #  pragma option -h
00098 #endif
00099 #if 0
00100 #define LZO_0xffffL             0xfffful
00101 #define LZO_0xffffffffL         0xfffffffful
00102 #else
00103 #define LZO_0xffffL             65535ul
00104 #define LZO_0xffffffffL         4294967295ul
00105 #endif
00106 #if (LZO_0xffffL == LZO_0xffffffffL)
00107 #  error "your preprocessor is broken 1"
00108 #endif
00109 #if (16ul * 16384ul != 262144ul)
00110 #  error "your preprocessor is broken 2"
00111 #endif
00112 #if 0
00113 #if (32767 >= 4294967295ul)
00114 #  error "your preprocessor is broken 3"
00115 #endif
00116 #if (65535u >= 4294967295ul)
00117 #  error "your preprocessor is broken 4"
00118 #endif
00119 #endif
00120 #if (UINT_MAX == LZO_0xffffL)
00121 #if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__)
00122 #  if !defined(MSDOS)
00123 #    define MSDOS 1
00124 #  endif
00125 #  if !defined(_MSDOS)
00126 #    define _MSDOS 1
00127 #  endif
00128 #elif 0 && defined(__VERSION) && defined(MB_LEN_MAX)
00129 #  if (__VERSION == 520) && (MB_LEN_MAX == 1)
00130 #    if !defined(__AZTEC_C__)
00131 #      define __AZTEC_C__ __VERSION
00132 #    endif
00133 #    if !defined(__DOS__)
00134 #      define __DOS__ 1
00135 #    endif
00136 #  endif
00137 #endif
00138 #endif
00139 #if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL)
00140 #  define ptrdiff_t long
00141 #  define _PTRDIFF_T_DEFINED
00142 #endif
00143 #if (UINT_MAX == LZO_0xffffL)
00144 #  undef __LZO_RENAME_A
00145 #  undef __LZO_RENAME_B
00146 #  if defined(__AZTEC_C__) && defined(__DOS__)
00147 #    define __LZO_RENAME_A 1
00148 #  elif defined(_MSC_VER) && defined(MSDOS)
00149 #    if (_MSC_VER < 600)
00150 #      define __LZO_RENAME_A 1
00151 #    elif (_MSC_VER < 700)
00152 #      define __LZO_RENAME_B 1
00153 #    endif
00154 #  elif defined(__TSC__) && defined(__OS2__)
00155 #    define __LZO_RENAME_A 1
00156 #  elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)
00157 #    define __LZO_RENAME_A 1
00158 #  elif defined(__PACIFIC__) && defined(DOS)
00159 #    if !defined(__far)
00160 #      define __far far
00161 #    endif
00162 #    if !defined(__near)
00163 #      define __near near
00164 #    endif
00165 #  endif
00166 #  if defined(__LZO_RENAME_A)
00167 #    if !defined(__cdecl)
00168 #      define __cdecl cdecl
00169 #    endif
00170 #    if !defined(__far)
00171 #      define __far far
00172 #    endif
00173 #    if !defined(__huge)
00174 #      define __huge huge
00175 #    endif
00176 #    if !defined(__near)
00177 #      define __near near
00178 #    endif
00179 #    if !defined(__pascal)
00180 #      define __pascal pascal
00181 #    endif
00182 #    if !defined(__huge)
00183 #      define __huge huge
00184 #    endif
00185 #  elif defined(__LZO_RENAME_B)
00186 #    if !defined(__cdecl)
00187 #      define __cdecl _cdecl
00188 #    endif
00189 #    if !defined(__far)
00190 #      define __far _far
00191 #    endif
00192 #    if !defined(__huge)
00193 #      define __huge _huge
00194 #    endif
00195 #    if !defined(__near)
00196 #      define __near _near
00197 #    endif
00198 #    if !defined(__pascal)
00199 #      define __pascal _pascal
00200 #    endif
00201 #  elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
00202 #    if !defined(__cdecl)
00203 #      define __cdecl cdecl
00204 #    endif
00205 #    if !defined(__pascal)
00206 #      define __pascal pascal
00207 #    endif
00208 #  endif
00209 #  undef __LZO_RENAME_A
00210 #  undef __LZO_RENAME_B
00211 #endif
00212 #if (UINT_MAX == LZO_0xffffL)
00213 #if defined(__AZTEC_C__) && defined(__DOS__)
00214 #  define LZO_BROKEN_CDECL_ALT_SYNTAX 1
00215 #elif defined(_MSC_VER) && defined(MSDOS)
00216 #  if (_MSC_VER < 600)
00217 #    define LZO_BROKEN_INTEGRAL_CONSTANTS 1
00218 #  endif
00219 #  if (_MSC_VER < 700)
00220 #    define LZO_BROKEN_INTEGRAL_PROMOTION 1
00221 #    define LZO_BROKEN_SIZEOF 1
00222 #  endif
00223 #elif defined(__PACIFIC__) && defined(DOS)
00224 #  define LZO_BROKEN_INTEGRAL_CONSTANTS 1
00225 #elif defined(__TURBOC__) && defined(__MSDOS__)
00226 #  if (__TURBOC__ < 0x0150)
00227 #    define LZO_BROKEN_CDECL_ALT_SYNTAX 1
00228 #    define LZO_BROKEN_INTEGRAL_CONSTANTS 1
00229 #    define LZO_BROKEN_INTEGRAL_PROMOTION 1
00230 #  endif
00231 #  if (__TURBOC__ < 0x0200)
00232 #    define LZO_BROKEN_SIZEOF 1
00233 #  endif
00234 #  if (__TURBOC__ < 0x0400) && defined(__cplusplus)
00235 #    define LZO_BROKEN_CDECL_ALT_SYNTAX 1
00236 #  endif
00237 #elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__)
00238 #  define LZO_BROKEN_CDECL_ALT_SYNTAX 1
00239 #  define LZO_BROKEN_SIZEOF 1
00240 #endif
00241 #endif
00242 #if defined(__WATCOMC__) && (__WATCOMC__ < 900)
00243 #  define LZO_BROKEN_INTEGRAL_CONSTANTS 1
00244 #endif
00245 #define LZO_CPP_STRINGIZE(x)            #x
00246 #define LZO_CPP_MACRO_EXPAND(x)         LZO_CPP_STRINGIZE(x)
00247 #define LZO_CPP_CONCAT2(a,b)            a ## b
00248 #define LZO_CPP_CONCAT3(a,b,c)          a ## b ## c
00249 #define LZO_CPP_CONCAT4(a,b,c,d)        a ## b ## c ## d
00250 #define LZO_CPP_CONCAT5(a,b,c,d,e)      a ## b ## c ## d ## e
00251 #define LZO_CPP_ECONCAT2(a,b)           LZO_CPP_CONCAT2(a,b)
00252 #define LZO_CPP_ECONCAT3(a,b,c)         LZO_CPP_CONCAT3(a,b,c)
00253 #define LZO_CPP_ECONCAT4(a,b,c,d)       LZO_CPP_CONCAT4(a,b,c,d)
00254 #define LZO_CPP_ECONCAT5(a,b,c,d,e)     LZO_CPP_CONCAT5(a,b,c,d,e)
00255 #define __LZO_MASK_GEN(o,b)     (((((o) << ((b)-1)) - (o)) << 1) + (o))
00256 #if 1 && defined(__cplusplus)
00257 #  if !defined(__STDC_CONSTANT_MACROS)
00258 #    define __STDC_CONSTANT_MACROS 1
00259 #  endif
00260 #  if !defined(__STDC_LIMIT_MACROS)
00261 #    define __STDC_LIMIT_MACROS 1
00262 #  endif
00263 #endif
00264 #if defined(__cplusplus)
00265 #  define LZO_EXTERN_C extern "C"
00266 #else
00267 #  define LZO_EXTERN_C extern
00268 #endif
00269 #if !defined(__LZO_OS_OVERRIDE)
00270 #if defined(LZO_OS_FREESTANDING)
00271 #  define LZO_INFO_OS           "freestanding"
00272 #elif defined(LZO_OS_EMBEDDED)
00273 #  define LZO_INFO_OS           "embedded"
00274 #elif defined(__CYGWIN__) && defined(__GNUC__)
00275 #  define LZO_OS_CYGWIN         1
00276 #  define LZO_INFO_OS           "cygwin"
00277 #elif defined(__EMX__) && defined(__GNUC__)
00278 #  define LZO_OS_EMX            1
00279 #  define LZO_INFO_OS           "emx"
00280 #elif defined(__BEOS__)
00281 #  define LZO_OS_BEOS           1
00282 #  define LZO_INFO_OS           "beos"
00283 #elif defined(__Lynx__)
00284 #  define LZO_OS_LYNXOS         1
00285 #  define LZO_INFO_OS           "lynxos"
00286 #elif defined(__OS400__)
00287 #  define LZO_OS_OS400          1
00288 #  define LZO_INFO_OS           "os400"
00289 #elif defined(__QNX__)
00290 #  define LZO_OS_QNX            1
00291 #  define LZO_INFO_OS           "qnx"
00292 #elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460)
00293 #  define LZO_OS_DOS32          1
00294 #  define LZO_INFO_OS           "dos32"
00295 #elif defined(__BORLANDC__) && defined(__DPMI16__)
00296 #  define LZO_OS_DOS16          1
00297 #  define LZO_INFO_OS           "dos16"
00298 #elif defined(__ZTC__) && defined(DOS386)
00299 #  define LZO_OS_DOS32          1
00300 #  define LZO_INFO_OS           "dos32"
00301 #elif defined(__OS2__) || defined(__OS2V2__)
00302 #  if (UINT_MAX == LZO_0xffffL)
00303 #    define LZO_OS_OS216        1
00304 #    define LZO_INFO_OS         "os216"
00305 #  elif (UINT_MAX == LZO_0xffffffffL)
00306 #    define LZO_OS_OS2          1
00307 #    define LZO_INFO_OS         "os2"
00308 #  else
00309 #    error "check your limits.h header"
00310 #  endif
00311 #elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64)
00312 #  define LZO_OS_WIN64          1
00313 #  define LZO_INFO_OS           "win64"
00314 #elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__)
00315 #  define LZO_OS_WIN32          1
00316 #  define LZO_INFO_OS           "win32"
00317 #elif defined(__MWERKS__) && defined(__INTEL__)
00318 #  define LZO_OS_WIN32          1
00319 #  define LZO_INFO_OS           "win32"
00320 #elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows)
00321 #  if (UINT_MAX == LZO_0xffffL)
00322 #    define LZO_OS_WIN16        1
00323 #    define LZO_INFO_OS         "win16"
00324 #  elif (UINT_MAX == LZO_0xffffffffL)
00325 #    define LZO_OS_WIN32        1
00326 #    define LZO_INFO_OS         "win32"
00327 #  else
00328 #    error "check your limits.h header"
00329 #  endif
00330 #elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS))
00331 #  if (UINT_MAX == LZO_0xffffL)
00332 #    define LZO_OS_DOS16        1
00333 #    define LZO_INFO_OS         "dos16"
00334 #  elif (UINT_MAX == LZO_0xffffffffL)
00335 #    define LZO_OS_DOS32        1
00336 #    define LZO_INFO_OS         "dos32"
00337 #  else
00338 #    error "check your limits.h header"
00339 #  endif
00340 #elif defined(__WATCOMC__)
00341 #  if defined(__NT__) && (UINT_MAX == LZO_0xffffL)
00342 #    define LZO_OS_DOS16        1
00343 #    define LZO_INFO_OS         "dos16"
00344 #  elif defined(__NT__) && (__WATCOMC__ < 1100)
00345 #    define LZO_OS_WIN32        1
00346 #    define LZO_INFO_OS         "win32"
00347 #  else
00348 #    error "please specify a target using the -bt compiler option"
00349 #  endif
00350 #elif defined(__palmos__)
00351 #  define LZO_OS_PALMOS         1
00352 #  define LZO_INFO_OS           "palmos"
00353 #elif defined(__TOS__) || defined(__atarist__)
00354 #  define LZO_OS_TOS            1
00355 #  define LZO_INFO_OS           "tos"
00356 #elif defined(macintosh) && !defined(__ppc__)
00357 #  define LZO_OS_MACCLASSIC     1
00358 #  define LZO_INFO_OS           "macclassic"
00359 #elif defined(__VMS)
00360 #  define LZO_OS_VMS            1
00361 #  define LZO_INFO_OS           "vms"
00362 #elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
00363 #  define LZO_OS_CONSOLE        1
00364 #  define LZO_OS_CONSOLE_PS2    1
00365 #  define LZO_INFO_OS           "console"
00366 #  define LZO_INFO_OS_CONSOLE   "ps2"
00367 #elif (defined(__mips__) && defined(__psp__))
00368 #  define LZO_OS_CONSOLE        1
00369 #  define LZO_OS_CONSOLE_PSP    1
00370 #  define LZO_INFO_OS           "console"
00371 #  define LZO_INFO_OS_CONSOLE   "psp"
00372 #else
00373 #  define LZO_OS_POSIX          1
00374 #  define LZO_INFO_OS           "posix"
00375 #endif
00376 #if (LZO_OS_POSIX)
00377 #  if defined(_AIX) || defined(__AIX__) || defined(__aix__)
00378 #    define LZO_OS_POSIX_AIX        1
00379 #    define LZO_INFO_OS_POSIX       "aix"
00380 #  elif defined(__FreeBSD__)
00381 #    define LZO_OS_POSIX_FREEBSD    1
00382 #    define LZO_INFO_OS_POSIX       "freebsd"
00383 #  elif defined(__hpux__) || defined(__hpux)
00384 #    define LZO_OS_POSIX_HPUX       1
00385 #    define LZO_INFO_OS_POSIX       "hpux"
00386 #  elif defined(__INTERIX)
00387 #    define LZO_OS_POSIX_INTERIX    1
00388 #    define LZO_INFO_OS_POSIX       "interix"
00389 #  elif defined(__IRIX__) || defined(__irix__)
00390 #    define LZO_OS_POSIX_IRIX       1
00391 #    define LZO_INFO_OS_POSIX       "irix"
00392 #  elif defined(__linux__) || defined(__linux)
00393 #    define LZO_OS_POSIX_LINUX      1
00394 #    define LZO_INFO_OS_POSIX       "linux"
00395 #  elif defined(__APPLE__) || defined(__MACOS__)
00396 #    define LZO_OS_POSIX_MACOSX     1
00397 #    define LZO_INFO_OS_POSIX       "macosx"
00398 #  elif defined(__NetBSD__)
00399 #    define LZO_OS_POSIX_NETBSD     1
00400 #    define LZO_INFO_OS_POSIX       "netbsd"
00401 #  elif defined(__OpenBSD__)
00402 #    define LZO_OS_POSIX_OPENBSD    1
00403 #    define LZO_INFO_OS_POSIX       "openbsd"
00404 #  elif defined(__osf__)
00405 #    define LZO_OS_POSIX_OSF        1
00406 #    define LZO_INFO_OS_POSIX       "osf"
00407 #  elif defined(__solaris__) || defined(__sun)
00408 #    if defined(__SVR4) || defined(__svr4__)
00409 #      define LZO_OS_POSIX_SOLARIS  1
00410 #      define LZO_INFO_OS_POSIX     "solaris"
00411 #    else
00412 #      define LZO_OS_POSIX_SUNOS    1
00413 #      define LZO_INFO_OS_POSIX     "sunos"
00414 #    endif
00415 #  elif defined(__ultrix__) || defined(__ultrix)
00416 #    define LZO_OS_POSIX_ULTRIX     1
00417 #    define LZO_INFO_OS_POSIX       "ultrix"
00418 #  else
00419 #    define LZO_OS_POSIX_UNKNOWN    1
00420 #    define LZO_INFO_OS_POSIX       "unknown"
00421 #  endif
00422 #endif
00423 #endif
00424 #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
00425 #  if (UINT_MAX != LZO_0xffffL)
00426 #    error "this should not happen"
00427 #  endif
00428 #  if (ULONG_MAX != LZO_0xffffffffL)
00429 #    error "this should not happen"
00430 #  endif
00431 #endif
00432 #if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64)
00433 #  if (UINT_MAX != LZO_0xffffffffL)
00434 #    error "this should not happen"
00435 #  endif
00436 #  if (ULONG_MAX != LZO_0xffffffffL)
00437 #    error "this should not happen"
00438 #  endif
00439 #endif
00440 #if defined(CIL) && defined(_GNUCC) && defined(__GNUC__)
00441 #  define LZO_CC_CILLY          1
00442 #  define LZO_INFO_CC           "Cilly"
00443 #  if defined(__CILLY__)
00444 #    define LZO_INFO_CCVER      LZO_CPP_MACRO_EXPAND(__CILLY__)
00445 #  else
00446 #    define LZO_INFO_CCVER      "unknown"
00447 #  endif
00448 #elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__)
00449 #  define LZO_CC_SDCC           1
00450 #  define LZO_INFO_CC           "sdcc"
00451 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(SDCC)
00452 #elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__)
00453 #  define LZO_CC_PATHSCALE      (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__)
00454 #  define LZO_INFO_CC           "Pathscale C"
00455 #  define LZO_INFO_CCVER        __PATHSCALE__
00456 #elif defined(__INTEL_COMPILER)
00457 #  define LZO_CC_INTELC         1
00458 #  define LZO_INFO_CC           "Intel C"
00459 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__INTEL_COMPILER)
00460 #elif defined(__POCC__) && defined(_WIN32)
00461 #  define LZO_CC_PELLESC        1
00462 #  define LZO_INFO_CC           "Pelles C"
00463 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__POCC__)
00464 #elif defined(__llvm__) && defined(__GNUC__) && defined(__VERSION__)
00465 #  define LZO_CC_LLVM           1
00466 #  define LZO_INFO_CC           "llvm-gcc"
00467 #  define LZO_INFO_CCVER        __VERSION__
00468 #elif defined(__GNUC__) && defined(__VERSION__)
00469 #  if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
00470 #    define LZO_CC_GNUC         (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__)
00471 #  elif defined(__GNUC_MINOR__)
00472 #    define LZO_CC_GNUC         (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100)
00473 #  else
00474 #    define LZO_CC_GNUC         (__GNUC__ * 0x10000L)
00475 #  endif
00476 #  define LZO_INFO_CC           "gcc"
00477 #  define LZO_INFO_CCVER        __VERSION__
00478 #elif defined(__AZTEC_C__)
00479 #  define LZO_CC_AZTECC         1
00480 #  define LZO_INFO_CC           "Aztec C"
00481 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__AZTEC_C__)
00482 #elif defined(__BORLANDC__)
00483 #  define LZO_CC_BORLANDC       1
00484 #  define LZO_INFO_CC           "Borland C"
00485 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__BORLANDC__)
00486 #elif defined(__DMC__) && defined(__SC__)
00487 #  define LZO_CC_DMC            1
00488 #  define LZO_INFO_CC           "Digital Mars C"
00489 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__DMC__)
00490 #elif defined(__DECC)
00491 #  define LZO_CC_DECC           1
00492 #  define LZO_INFO_CC           "DEC C"
00493 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__DECC)
00494 #elif defined(__HIGHC__)
00495 #  define LZO_CC_HIGHC          1
00496 #  define LZO_INFO_CC           "MetaWare High C"
00497 #  define LZO_INFO_CCVER        "unknown"
00498 #elif defined(__IBMC__)
00499 #  define LZO_CC_IBMC           1
00500 #  define LZO_INFO_CC           "IBM C"
00501 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__IBMC__)
00502 #elif defined(__KEIL__) && defined(__C166__)
00503 #  define LZO_CC_KEILC          1
00504 #  define LZO_INFO_CC           "Keil C"
00505 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__C166__)
00506 #elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL)
00507 #  define LZO_CC_LCCWIN32       1
00508 #  define LZO_INFO_CC           "lcc-win32"
00509 #  define LZO_INFO_CCVER        "unknown"
00510 #elif defined(__LCC__)
00511 #  define LZO_CC_LCC            1
00512 #  define LZO_INFO_CC           "lcc"
00513 #  if defined(__LCC_VERSION__)
00514 #    define LZO_INFO_CCVER      LZO_CPP_MACRO_EXPAND(__LCC_VERSION__)
00515 #  else
00516 #    define LZO_INFO_CCVER      "unknown"
00517 #  endif
00518 #elif defined(_MSC_VER)
00519 #  define LZO_CC_MSC            1
00520 #  define LZO_INFO_CC           "Microsoft C"
00521 #  if defined(_MSC_FULL_VER)
00522 #    define LZO_INFO_CCVER      LZO_CPP_MACRO_EXPAND(_MSC_VER) "." LZO_CPP_MACRO_EXPAND(_MSC_FULL_VER)
00523 #  else
00524 #    define LZO_INFO_CCVER      LZO_CPP_MACRO_EXPAND(_MSC_VER)
00525 #  endif
00526 #elif defined(__MWERKS__)
00527 #  define LZO_CC_MWERKS         1
00528 #  define LZO_INFO_CC           "Metrowerks C"
00529 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__MWERKS__)
00530 #elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386)
00531 #  define LZO_CC_NDPC           1
00532 #  define LZO_INFO_CC           "Microway NDP C"
00533 #  define LZO_INFO_CCVER        "unknown"
00534 #elif defined(__PACIFIC__)
00535 #  define LZO_CC_PACIFICC       1
00536 #  define LZO_INFO_CC           "Pacific C"
00537 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__PACIFIC__)
00538 #elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__))
00539 #  define LZO_CC_PGI            1
00540 #  define LZO_INFO_CC           "Portland Group PGI C"
00541 #  define LZO_INFO_CCVER        "unknown"
00542 #elif defined(__PUREC__) && defined(__TOS__)
00543 #  define LZO_CC_PUREC          1
00544 #  define LZO_INFO_CC           "Pure C"
00545 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__PUREC__)
00546 #elif defined(__SC__) && defined(__ZTC__)
00547 #  define LZO_CC_SYMANTECC      1
00548 #  define LZO_INFO_CC           "Symantec C"
00549 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__SC__)
00550 #elif defined(__SUNPRO_C)
00551 #  define LZO_CC_SUNPROC        1
00552 #  define LZO_INFO_CC           "Sun C"
00553 #  define LZO_INFO_CCVER        "unknown"
00554 #elif defined(__TINYC__)
00555 #  define LZO_CC_TINYC          1
00556 #  define LZO_INFO_CC           "Tiny C"
00557 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__TINYC__)
00558 #elif defined(__TSC__)
00559 #  define LZO_CC_TOPSPEEDC      1
00560 #  define LZO_INFO_CC           "TopSpeed C"
00561 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__TSC__)
00562 #elif defined(__WATCOMC__)
00563 #  define LZO_CC_WATCOMC        1
00564 #  define LZO_INFO_CC           "Watcom C"
00565 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__WATCOMC__)
00566 #elif defined(__TURBOC__)
00567 #  define LZO_CC_TURBOC         1
00568 #  define LZO_INFO_CC           "Turbo C"
00569 #  define LZO_INFO_CCVER        LZO_CPP_MACRO_EXPAND(__TURBOC__)
00570 #elif defined(__ZTC__)
00571 #  define LZO_CC_ZORTECHC       1
00572 #  define LZO_INFO_CC           "Zortech C"
00573 #  if (__ZTC__ == 0x310)
00574 #    define LZO_INFO_CCVER      "0x310"
00575 #  else
00576 #    define LZO_INFO_CCVER      LZO_CPP_MACRO_EXPAND(__ZTC__)
00577 #  endif
00578 #else
00579 #  define LZO_CC_UNKNOWN        1
00580 #  define LZO_INFO_CC           "unknown"
00581 #  define LZO_INFO_CCVER        "unknown"
00582 #endif
00583 #if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER)
00584 #  error "LZO_CC_MSC: _MSC_FULL_VER is not defined"
00585 #endif
00586 #if !defined(__LZO_ARCH_OVERRIDE)
00587 #if defined(LZO_ARCH_GENERIC)
00588 #  define LZO_INFO_ARCH             "generic"
00589 #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
00590 #  define LZO_ARCH_I086             1
00591 #  define LZO_ARCH_IA16             1
00592 #  define LZO_INFO_ARCH             "i086"
00593 #elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA)
00594 #  define LZO_ARCH_ALPHA            1
00595 #  define LZO_INFO_ARCH             "alpha"
00596 #elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64)
00597 #  define LZO_ARCH_AMD64            1
00598 #  define LZO_INFO_ARCH             "amd64"
00599 #elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB))
00600 #  define LZO_ARCH_ARM              1
00601 #  define LZO_ARCH_ARM_THUMB        1
00602 #  define LZO_INFO_ARCH             "arm_thumb"
00603 #elif defined(__arm__) || defined(_M_ARM)
00604 #  define LZO_ARCH_ARM              1
00605 #  define LZO_INFO_ARCH             "arm"
00606 #elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__)
00607 #  define LZO_ARCH_AVR              1
00608 #  define LZO_INFO_ARCH             "avr"
00609 #elif defined(__bfin__)
00610 #  define LZO_ARCH_BLACKFIN         1
00611 #  define LZO_INFO_ARCH             "blackfin"
00612 #elif (UINT_MAX == LZO_0xffffL) && defined(__C166__)
00613 #  define LZO_ARCH_C166             1
00614 #  define LZO_INFO_ARCH             "c166"
00615 #elif defined(__cris__)
00616 #  define LZO_ARCH_CRIS             1
00617 #  define LZO_INFO_ARCH             "cris"
00618 #elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
00619 #  define LZO_ARCH_H8300            1
00620 #  define LZO_INFO_ARCH             "h8300"
00621 #elif defined(__hppa__) || defined(__hppa)
00622 #  define LZO_ARCH_HPPA             1
00623 #  define LZO_INFO_ARCH             "hppa"
00624 #elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386)
00625 #  define LZO_ARCH_I386             1
00626 #  define LZO_ARCH_IA32             1
00627 #  define LZO_INFO_ARCH             "i386"
00628 #elif (LZO_CC_ZORTECHC && defined(__I86__))
00629 #  define LZO_ARCH_I386             1
00630 #  define LZO_ARCH_IA32             1
00631 #  define LZO_INFO_ARCH             "i386"
00632 #elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386)
00633 #  define LZO_ARCH_I386             1
00634 #  define LZO_ARCH_IA32             1
00635 #  define LZO_INFO_ARCH             "i386"
00636 #elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64)
00637 #  define LZO_ARCH_IA64             1
00638 #  define LZO_INFO_ARCH             "ia64"
00639 #elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__)
00640 #  define LZO_ARCH_M16C             1
00641 #  define LZO_INFO_ARCH             "m16c"
00642 #elif defined(__m32r__)
00643 #  define LZO_ARCH_M32R             1
00644 #  define LZO_INFO_ARCH             "m32r"
00645 #elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(_M_M68K)
00646 #  define LZO_ARCH_M68K             1
00647 #  define LZO_INFO_ARCH             "m68k"
00648 #elif (UINT_MAX == LZO_0xffffL) && defined(__C251__)
00649 #  define LZO_ARCH_MCS251           1
00650 #  define LZO_INFO_ARCH             "mcs251"
00651 #elif (UINT_MAX == LZO_0xffffL) && defined(__C51__)
00652 #  define LZO_ARCH_MCS51            1
00653 #  define LZO_INFO_ARCH             "mcs51"
00654 #elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000)
00655 #  define LZO_ARCH_MIPS             1
00656 #  define LZO_INFO_ARCH             "mips"
00657 #elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__)
00658 #  define LZO_ARCH_MSP430           1
00659 #  define LZO_INFO_ARCH             "msp430"
00660 #elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC)
00661 #  define LZO_ARCH_POWERPC          1
00662 #  define LZO_INFO_ARCH             "powerpc"
00663 #elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x)
00664 #  define LZO_ARCH_S390             1
00665 #  define LZO_INFO_ARCH             "s390"
00666 #elif defined(__sh__) || defined(_M_SH)
00667 #  define LZO_ARCH_SH               1
00668 #  define LZO_INFO_ARCH             "sh"
00669 #elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8)
00670 #  define LZO_ARCH_SPARC            1
00671 #  define LZO_INFO_ARCH             "sparc"
00672 #elif (UINT_MAX == LZO_0xffffL) && defined(__z80)
00673 #  define LZO_ARCH_Z80              1
00674 #  define LZO_INFO_ARCH             "z80"
00675 #else
00676 #  define LZO_ARCH_UNKNOWN          1
00677 #  define LZO_INFO_ARCH             "unknown"
00678 #endif
00679 #endif
00680 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2)
00681 #  error "FIXME - missing define for CPU architecture"
00682 #endif
00683 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32)
00684 #  error "FIXME - missing WIN32 define for CPU architecture"
00685 #endif
00686 #if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64)
00687 #  error "FIXME - missing WIN64 define for CPU architecture"
00688 #endif
00689 #if (LZO_OS_OS216 || LZO_OS_WIN16)
00690 #  define LZO_ARCH_I086PM           1
00691 #  define LZO_ARCH_IA16PM           1
00692 #elif 1 && (LZO_OS_DOS16 && defined(BLX286))
00693 #  define LZO_ARCH_I086PM           1
00694 #  define LZO_ARCH_IA16PM           1
00695 #elif 1 && (LZO_OS_DOS16 && defined(DOSX286))
00696 #  define LZO_ARCH_I086PM           1
00697 #  define LZO_ARCH_IA16PM           1
00698 #elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__))
00699 #  define LZO_ARCH_I086PM           1
00700 #  define LZO_ARCH_IA16PM           1
00701 #endif
00702 #if defined(LZO_ARCH_ARM_THUMB) && !defined(LZO_ARCH_ARM)
00703 #  error "this should not happen"
00704 #endif
00705 #if defined(LZO_ARCH_I086PM) && !defined(LZO_ARCH_I086)
00706 #  error "this should not happen"
00707 #endif
00708 #if (LZO_ARCH_I086)
00709 #  if (UINT_MAX != LZO_0xffffL)
00710 #    error "this should not happen"
00711 #  endif
00712 #  if (ULONG_MAX != LZO_0xffffffffL)
00713 #    error "this should not happen"
00714 #  endif
00715 #endif
00716 #if (LZO_ARCH_I386)
00717 #  if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__)
00718 #    error "this should not happen"
00719 #  endif
00720 #  if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__)
00721 #    error "this should not happen"
00722 #  endif
00723 #  if (ULONG_MAX != LZO_0xffffffffL)
00724 #    error "this should not happen"
00725 #  endif
00726 #endif
00727 #if !defined(__LZO_MM_OVERRIDE)
00728 #if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
00729 #if (UINT_MAX != LZO_0xffffL)
00730 #  error "this should not happen"
00731 #endif
00732 #if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM)
00733 #  define LZO_MM_TINY           1
00734 #elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM)
00735 #  define LZO_MM_HUGE           1
00736 #elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL)
00737 #  define LZO_MM_SMALL          1
00738 #elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM)
00739 #  define LZO_MM_MEDIUM         1
00740 #elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM)
00741 #  define LZO_MM_COMPACT        1
00742 #elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL)
00743 #  define LZO_MM_LARGE          1
00744 #elif (LZO_CC_AZTECC)
00745 #  if defined(_LARGE_CODE) && defined(_LARGE_DATA)
00746 #    define LZO_MM_LARGE        1
00747 #  elif defined(_LARGE_CODE)
00748 #    define LZO_MM_MEDIUM       1
00749 #  elif defined(_LARGE_DATA)
00750 #    define LZO_MM_COMPACT      1
00751 #  else
00752 #    define LZO_MM_SMALL        1
00753 #  endif
00754 #elif (LZO_CC_ZORTECHC && defined(__VCM__))
00755 #  define LZO_MM_LARGE          1
00756 #else
00757 #  error "unknown memory model"
00758 #endif
00759 #define LZO_HAVE_MM_HUGE_PTR        1
00760 #define LZO_HAVE_MM_HUGE_ARRAY      1
00761 #if (LZO_MM_TINY)
00762 #  undef LZO_HAVE_MM_HUGE_ARRAY
00763 #endif
00764 #if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC)
00765 #  undef LZO_HAVE_MM_HUGE_PTR
00766 #  undef LZO_HAVE_MM_HUGE_ARRAY
00767 #elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
00768 #  undef LZO_HAVE_MM_HUGE_ARRAY
00769 #elif (LZO_CC_MSC && defined(_QC))
00770 #  undef LZO_HAVE_MM_HUGE_ARRAY
00771 #  if (_MSC_VER < 600)
00772 #    undef LZO_HAVE_MM_HUGE_PTR
00773 #  endif
00774 #elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295))
00775 #  undef LZO_HAVE_MM_HUGE_ARRAY
00776 #endif
00777 #if (LZO_ARCH_I086PM) && !defined(LZO_HAVE_MM_HUGE_PTR)
00778 #  if (LZO_OS_DOS16)
00779 #    error "this should not happen"
00780 #  elif (LZO_CC_ZORTECHC)
00781 #  else
00782 #    error "this should not happen"
00783 #  endif
00784 #endif
00785 #ifdef __cplusplus
00786 extern "C" {
00787 #endif
00788 #if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200))
00789    extern void __near __cdecl _AHSHIFT(void);
00790 #  define LZO_MM_AHSHIFT      ((unsigned) _AHSHIFT)
00791 #elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
00792    extern void __near __cdecl _AHSHIFT(void);
00793 #  define LZO_MM_AHSHIFT      ((unsigned) _AHSHIFT)
00794 #elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC)
00795    extern void __near __cdecl _AHSHIFT(void);
00796 #  define LZO_MM_AHSHIFT      ((unsigned) _AHSHIFT)
00797 #elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295))
00798    extern void __near __cdecl _AHSHIFT(void);
00799 #  define LZO_MM_AHSHIFT      ((unsigned) _AHSHIFT)
00800 #elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16)
00801 #  define LZO_MM_AHSHIFT      12
00802 #elif (LZO_CC_WATCOMC)
00803    extern unsigned char _HShift;
00804 #  define LZO_MM_AHSHIFT      ((unsigned) _HShift)
00805 #else
00806 #  error "FIXME - implement LZO_MM_AHSHIFT"
00807 #endif
00808 #ifdef __cplusplus
00809 }
00810 #endif
00811 #elif (LZO_ARCH_C166)
00812 #if !defined(__MODEL__)
00813 #  error "FIXME - C166 __MODEL__"
00814 #elif ((__MODEL__) == 0)
00815 #  define LZO_MM_SMALL          1
00816 #elif ((__MODEL__) == 1)
00817 #  define LZO_MM_SMALL          1
00818 #elif ((__MODEL__) == 2)
00819 #  define LZO_MM_LARGE          1
00820 #elif ((__MODEL__) == 3)
00821 #  define LZO_MM_TINY           1
00822 #elif ((__MODEL__) == 4)
00823 #  define LZO_MM_XTINY          1
00824 #elif ((__MODEL__) == 5)
00825 #  define LZO_MM_XSMALL         1
00826 #else
00827 #  error "FIXME - C166 __MODEL__"
00828 #endif
00829 #elif (LZO_ARCH_MCS251)
00830 #if !defined(__MODEL__)
00831 #  error "FIXME - MCS251 __MODEL__"
00832 #elif ((__MODEL__) == 0)
00833 #  define LZO_MM_SMALL          1
00834 #elif ((__MODEL__) == 2)
00835 #  define LZO_MM_LARGE          1
00836 #elif ((__MODEL__) == 3)
00837 #  define LZO_MM_TINY           1
00838 #elif ((__MODEL__) == 4)
00839 #  define LZO_MM_XTINY          1
00840 #elif ((__MODEL__) == 5)
00841 #  define LZO_MM_XSMALL         1
00842 #else
00843 #  error "FIXME - MCS251 __MODEL__"
00844 #endif
00845 #elif (LZO_ARCH_MCS51)
00846 #if !defined(__MODEL__)
00847 #  error "FIXME - MCS51 __MODEL__"
00848 #elif ((__MODEL__) == 1)
00849 #  define LZO_MM_SMALL          1
00850 #elif ((__MODEL__) == 2)
00851 #  define LZO_MM_LARGE          1
00852 #elif ((__MODEL__) == 3)
00853 #  define LZO_MM_TINY           1
00854 #elif ((__MODEL__) == 4)
00855 #  define LZO_MM_XTINY          1
00856 #elif ((__MODEL__) == 5)
00857 #  define LZO_MM_XSMALL         1
00858 #else
00859 #  error "FIXME - MCS51 __MODEL__"
00860 #endif
00861 #else
00862 #  define LZO_MM_FLAT           1
00863 #endif
00864 #if (LZO_MM_FLAT)
00865 #  define LZO_INFO_MM           "flat"
00866 #elif (LZO_MM_TINY)
00867 #  define LZO_INFO_MM           "tiny"
00868 #elif (LZO_MM_SMALL)
00869 #  define LZO_INFO_MM           "small"
00870 #elif (LZO_MM_MEDIUM)
00871 #  define LZO_INFO_MM           "medium"
00872 #elif (LZO_MM_COMPACT)
00873 #  define LZO_INFO_MM           "compact"
00874 #elif (LZO_MM_LARGE)
00875 #  define LZO_INFO_MM           "large"
00876 #elif (LZO_MM_HUGE)
00877 #  define LZO_INFO_MM           "huge"
00878 #else
00879 #  error "unknown memory model"
00880 #endif
00881 #endif
00882 #if defined(SIZEOF_SHORT)
00883 #  define LZO_SIZEOF_SHORT          (SIZEOF_SHORT)
00884 #endif
00885 #if defined(SIZEOF_INT)
00886 #  define LZO_SIZEOF_INT            (SIZEOF_INT)
00887 #endif
00888 #if defined(SIZEOF_LONG)
00889 #  define LZO_SIZEOF_LONG           (SIZEOF_LONG)
00890 #endif
00891 #if defined(SIZEOF_LONG_LONG)
00892 #  define LZO_SIZEOF_LONG_LONG      (SIZEOF_LONG_LONG)
00893 #endif
00894 #if defined(SIZEOF___INT16)
00895 #  define LZO_SIZEOF___INT16        (SIZEOF___INT16)
00896 #endif
00897 #if defined(SIZEOF___INT32)
00898 #  define LZO_SIZEOF___INT32        (SIZEOF___INT32)
00899 #endif
00900 #if defined(SIZEOF___INT64)
00901 #  define LZO_SIZEOF___INT64        (SIZEOF___INT64)
00902 #endif
00903 #if defined(SIZEOF_VOID_P)
00904 #  define LZO_SIZEOF_VOID_P         (SIZEOF_VOID_P)
00905 #endif
00906 #if defined(SIZEOF_SIZE_T)
00907 #  define LZO_SIZEOF_SIZE_T         (SIZEOF_SIZE_T)
00908 #endif
00909 #if defined(SIZEOF_PTRDIFF_T)
00910 #  define LZO_SIZEOF_PTRDIFF_T      (SIZEOF_PTRDIFF_T)
00911 #endif
00912 #define __LZO_LSR(x,b)    (((x)+0ul) >> (b))
00913 #if !defined(LZO_SIZEOF_SHORT)
00914 #  if (USHRT_MAX == LZO_0xffffL)
00915 #    define LZO_SIZEOF_SHORT        2
00916 #  elif (__LZO_LSR(USHRT_MAX,7) == 1)
00917 #    define LZO_SIZEOF_SHORT        1
00918 #  elif (__LZO_LSR(USHRT_MAX,15) == 1)
00919 #    define LZO_SIZEOF_SHORT        2
00920 #  elif (__LZO_LSR(USHRT_MAX,31) == 1)
00921 #    define LZO_SIZEOF_SHORT        4
00922 #  elif (__LZO_LSR(USHRT_MAX,63) == 1)
00923 #    define LZO_SIZEOF_SHORT        8
00924 #  elif (__LZO_LSR(USHRT_MAX,127) == 1)
00925 #    define LZO_SIZEOF_SHORT        16
00926 #  else
00927 #    error "LZO_SIZEOF_SHORT"
00928 #  endif
00929 #endif
00930 #if !defined(LZO_SIZEOF_INT)
00931 #  if (UINT_MAX == LZO_0xffffL)
00932 #    define LZO_SIZEOF_INT          2
00933 #  elif (UINT_MAX == LZO_0xffffffffL)
00934 #    define LZO_SIZEOF_INT          4
00935 #  elif (__LZO_LSR(UINT_MAX,7) == 1)
00936 #    define LZO_SIZEOF_INT          1
00937 #  elif (__LZO_LSR(UINT_MAX,15) == 1)
00938 #    define LZO_SIZEOF_INT          2
00939 #  elif (__LZO_LSR(UINT_MAX,31) == 1)
00940 #    define LZO_SIZEOF_INT          4
00941 #  elif (__LZO_LSR(UINT_MAX,63) == 1)
00942 #    define LZO_SIZEOF_INT          8
00943 #  elif (__LZO_LSR(UINT_MAX,127) == 1)
00944 #    define LZO_SIZEOF_INT          16
00945 #  else
00946 #    error "LZO_SIZEOF_INT"
00947 #  endif
00948 #endif
00949 #if !defined(LZO_SIZEOF_LONG)
00950 #  if (ULONG_MAX == LZO_0xffffffffL)
00951 #    define LZO_SIZEOF_LONG         4
00952 #  elif (__LZO_LSR(ULONG_MAX,7) == 1)
00953 #    define LZO_SIZEOF_LONG         1
00954 #  elif (__LZO_LSR(ULONG_MAX,15) == 1)
00955 #    define LZO_SIZEOF_LONG         2
00956 #  elif (__LZO_LSR(ULONG_MAX,31) == 1)
00957 #    define LZO_SIZEOF_LONG         4
00958 #  elif (__LZO_LSR(ULONG_MAX,63) == 1)
00959 #    define LZO_SIZEOF_LONG         8
00960 #  elif (__LZO_LSR(ULONG_MAX,127) == 1)
00961 #    define LZO_SIZEOF_LONG         16
00962 #  else
00963 #    error "LZO_SIZEOF_LONG"
00964 #  endif
00965 #endif
00966 #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
00967 #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
00968 #  if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__)
00969 #    if (LZO_CC_GNUC >= 0x030300ul)
00970 #      if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0)
00971 #        define LZO_SIZEOF_LONG_LONG      LZO_SIZEOF_LONG
00972 #      endif
00973 #    endif
00974 #  endif
00975 #endif
00976 #endif
00977 #if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64)
00978 #if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8)
00979 #if (LZO_ARCH_I086 && LZO_CC_DMC)
00980 #elif (LZO_CC_CILLY) && defined(__GNUC__)
00981 #  define LZO_SIZEOF_LONG_LONG      8
00982 #elif (LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
00983 #  define LZO_SIZEOF_LONG_LONG      8
00984 #elif ((LZO_OS_WIN32 || LZO_OS_WIN64) && LZO_CC_MSC && (_MSC_VER >= 1400))
00985 #  define LZO_SIZEOF_LONG_LONG      8
00986 #elif (LZO_OS_WIN64)
00987 #  define LZO_SIZEOF___INT64        8
00988 #elif (LZO_ARCH_I386 && (LZO_CC_DMC))
00989 #  define LZO_SIZEOF_LONG_LONG      8
00990 #elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700)))
00991 #  define LZO_SIZEOF_LONG_LONG      8
00992 #elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__)))
00993 #  define LZO_SIZEOF_LONG_LONG      8
00994 #elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI))
00995 #  define LZO_SIZEOF_LONG_LONG      8
00996 #elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC))
00997 #  define LZO_SIZEOF___INT64        8
00998 #elif (LZO_OS_WIN32 && (LZO_CC_MSC))
00999 #  define LZO_SIZEOF___INT64        8
01000 #elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520)))
01001 #  define LZO_SIZEOF___INT64        8
01002 #elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100)))
01003 #  define LZO_SIZEOF___INT64        8
01004 #elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64))
01005 #  define LZO_SIZEOF___INT64        8
01006 #elif (LZO_OS_OS400) && defined(__LLP64_IFC__)
01007 #  define LZO_SIZEOF_LONG_LONG      8
01008 #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
01009 #  define LZO_SIZEOF_LONG_LONG      8
01010 #elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2)
01011 #elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
01012 #  define LZO_SIZEOF_LONG_LONG      8
01013 #endif
01014 #endif
01015 #endif
01016 #if defined(__cplusplus) && defined(LZO_CC_GNUC)
01017 #  if (LZO_CC_GNUC < 0x020800ul)
01018 #    undef LZO_SIZEOF_LONG_LONG
01019 #  endif
01020 #endif
01021 #if defined(LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG)
01022 #  undef LZO_SIZEOF_LONG_LONG
01023 #endif
01024 #if !defined(LZO_SIZEOF_VOID_P)
01025 #if (LZO_ARCH_I086)
01026 #  define __LZO_WORDSIZE            2
01027 #  if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM)
01028 #    define LZO_SIZEOF_VOID_P       2
01029 #  elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE)
01030 #    define LZO_SIZEOF_VOID_P       4
01031 #  else
01032 #    error "LZO_MM"
01033 #  endif
01034 #elif (LZO_ARCH_AVR || LZO_ARCH_Z80)
01035 #  define __LZO_WORDSIZE            1
01036 #  define LZO_SIZEOF_VOID_P         2
01037 #elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430)
01038 #  define LZO_SIZEOF_VOID_P         2
01039 #elif (LZO_ARCH_H8300)
01040 #  if defined(__NORMAL_MODE__)
01041 #    define __LZO_WORDSIZE          4
01042 #    define LZO_SIZEOF_VOID_P       2
01043 #  elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__)
01044 #    define __LZO_WORDSIZE          4
01045 #    define LZO_SIZEOF_VOID_P       4
01046 #  else
01047 #    define __LZO_WORDSIZE          2
01048 #    define LZO_SIZEOF_VOID_P       2
01049 #  endif
01050 #  if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4)
01051 #    define LZO_SIZEOF_SIZE_T       LZO_SIZEOF_INT
01052 #    define LZO_SIZEOF_PTRDIFF_T    LZO_SIZEOF_INT
01053 #  endif
01054 #elif (LZO_ARCH_M16C)
01055 #  define __LZO_WORDSIZE            2
01056 #  if defined(__m32c_cpu__) || defined(__m32cm_cpu__)
01057 #    define LZO_SIZEOF_VOID_P       4
01058 #  else
01059 #    define LZO_SIZEOF_VOID_P       2
01060 #  endif
01061 #elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__))
01062 #  define __LZO_WORDSIZE            8
01063 #  define LZO_SIZEOF_VOID_P         4
01064 #elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64)
01065 #  define __LZO_WORDSIZE            8
01066 #  define LZO_SIZEOF_VOID_P         8
01067 #elif (LZO_OS_OS400) && defined(__LLP64_IFC__)
01068 #  define LZO_SIZEOF_VOID_P         LZO_SIZEOF_LONG
01069 #  define LZO_SIZEOF_SIZE_T         LZO_SIZEOF_LONG
01070 #  define LZO_SIZEOF_PTRDIFF_T      LZO_SIZEOF_LONG
01071 #elif (LZO_OS_OS400)
01072 #  define __LZO_WORDSIZE            LZO_SIZEOF_LONG
01073 #  define LZO_SIZEOF_VOID_P         16
01074 #  define LZO_SIZEOF_SIZE_T         LZO_SIZEOF_LONG
01075 #  define LZO_SIZEOF_PTRDIFF_T      LZO_SIZEOF_LONG
01076 #elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64)
01077 #  define LZO_SIZEOF_VOID_P         8
01078 #  define LZO_SIZEOF_SIZE_T         LZO_SIZEOF_LONG
01079 #  define LZO_SIZEOF_PTRDIFF_T      LZO_SIZEOF_LONG
01080 #else
01081 #  define LZO_SIZEOF_VOID_P         LZO_SIZEOF_LONG
01082 #endif
01083 #endif
01084 #if !defined(LZO_WORDSIZE)
01085 #  if defined(__LZO_WORDSIZE)
01086 #    define LZO_WORDSIZE            __LZO_WORDSIZE
01087 #  else
01088 #    define LZO_WORDSIZE            LZO_SIZEOF_VOID_P
01089 #  endif
01090 #endif
01091 #if !defined(LZO_SIZEOF_SIZE_T)
01092 #if (LZO_ARCH_I086 || LZO_ARCH_M16C)
01093 #  define LZO_SIZEOF_SIZE_T         2
01094 #else
01095 #  define LZO_SIZEOF_SIZE_T         LZO_SIZEOF_VOID_P
01096 #endif
01097 #endif
01098 #if !defined(LZO_SIZEOF_PTRDIFF_T)
01099 #if (LZO_ARCH_I086)
01100 #  if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE)
01101 #    define LZO_SIZEOF_PTRDIFF_T    LZO_SIZEOF_VOID_P
01102 #  elif (LZO_MM_COMPACT || LZO_MM_LARGE)
01103 #    if (LZO_CC_BORLANDC || LZO_CC_TURBOC)
01104 #      define LZO_SIZEOF_PTRDIFF_T  4
01105 #    else
01106 #      define LZO_SIZEOF_PTRDIFF_T  2
01107 #    endif
01108 #  else
01109 #    error "LZO_MM"
01110 #  endif
01111 #else
01112 #  define LZO_SIZEOF_PTRDIFF_T      LZO_SIZEOF_SIZE_T
01113 #endif
01114 #endif
01115 #if !defined(LZO_ABI_BIG_ENDIAN) && !defined(LZO_ABI_LITTLE_ENDIAN) && !defined(LZO_ABI_NEUTRAL_ENDIAN)
01116 #if (LZO_ARCH_AMD64 || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430)
01117 #  define LZO_ABI_LITTLE_ENDIAN     1
01118 #elif (LZO_ARCH_M68K || LZO_ARCH_S390)
01119 #  define LZO_ABI_BIG_ENDIAN        1
01120 #elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
01121 #  define LZO_ABI_BIG_ENDIAN        1
01122 #elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
01123 #  define LZO_ABI_LITTLE_ENDIAN     1
01124 #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__)
01125 #  define LZO_ABI_BIG_ENDIAN        1
01126 #elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__)
01127 #  define LZO_ABI_LITTLE_ENDIAN     1
01128 #endif
01129 #endif
01130 #if defined(LZO_ABI_BIG_ENDIAN) && defined(LZO_ABI_LITTLE_ENDIAN)
01131 #  error "this should not happen"
01132 #endif
01133 #if defined(LZO_ABI_BIG_ENDIAN)
01134 #  define LZO_INFO_ABI_ENDIAN       "be"
01135 #elif defined(LZO_ABI_LITTLE_ENDIAN)
01136 #  define LZO_INFO_ABI_ENDIAN       "le"
01137 #elif defined(LZO_ABI_NEUTRAL_ENDIAN)
01138 #  define LZO_INFO_ABI_ENDIAN       "neutral"
01139 #endif
01140 #if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
01141 #  define LZO_ABI_I8LP16         1
01142 #  define LZO_INFO_ABI_PM       "i8lp16"
01143 #elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2)
01144 #  define LZO_ABI_ILP16         1
01145 #  define LZO_INFO_ABI_PM       "ilp16"
01146 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4)
01147 #  define LZO_ABI_ILP32         1
01148 #  define LZO_INFO_ABI_PM       "ilp32"
01149 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8)
01150 #  define LZO_ABI_LLP64         1
01151 #  define LZO_INFO_ABI_PM       "llp64"
01152 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
01153 #  define LZO_ABI_LP64          1
01154 #  define LZO_INFO_ABI_PM       "lp64"
01155 #elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8)
01156 #  define LZO_ABI_ILP64         1
01157 #  define LZO_INFO_ABI_PM       "ilp64"
01158 #elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4)
01159 #  define LZO_ABI_IP32L64       1
01160 #  define LZO_INFO_ABI_PM       "ip32l64"
01161 #endif
01162 #if !defined(__LZO_LIBC_OVERRIDE)
01163 #if defined(LZO_LIBC_NAKED)
01164 #  define LZO_INFO_LIBC         "naked"
01165 #elif defined(LZO_LIBC_FREESTANDING)
01166 #  define LZO_INFO_LIBC         "freestanding"
01167 #elif defined(LZO_LIBC_MOSTLY_FREESTANDING)
01168 #  define LZO_INFO_LIBC         "mfreestanding"
01169 #elif defined(LZO_LIBC_ISOC90)
01170 #  define LZO_INFO_LIBC         "isoc90"
01171 #elif defined(LZO_LIBC_ISOC99)
01172 #  define LZO_INFO_LIBC         "isoc99"
01173 #elif defined(__dietlibc__)
01174 #  define LZO_LIBC_DIETLIBC     1
01175 #  define LZO_INFO_LIBC         "dietlibc"
01176 #elif defined(_NEWLIB_VERSION)
01177 #  define LZO_LIBC_NEWLIB       1
01178 #  define LZO_INFO_LIBC         "newlib"
01179 #elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__)
01180 #  if defined(__UCLIBC_SUBLEVEL__)
01181 #    define LZO_LIBC_UCLIBC     (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__)
01182 #  else
01183 #    define LZO_LIBC_UCLIBC     0x00090bL
01184 #  endif
01185 #  define LZO_INFO_LIBC         "uclibc"
01186 #elif defined(__GLIBC__) && defined(__GLIBC_MINOR__)
01187 #  define LZO_LIBC_GLIBC        (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100)
01188 #  define LZO_INFO_LIBC         "glibc"
01189 #elif (LZO_CC_MWERKS) && defined(__MSL__)
01190 #  define LZO_LIBC_MSL          __MSL__
01191 #  define LZO_INFO_LIBC         "msl"
01192 #else
01193 #  define LZO_LIBC_DEFAULT      1
01194 #  define LZO_INFO_LIBC         "default"
01195 #endif
01196 #endif
01197 #if (LZO_CC_GNUC >= 0x020800ul)
01198 #  define __lzo_gnuc_extension__ __extension__
01199 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01200 #  define __lzo_gnuc_extension__ __extension__
01201 #else
01202 #  define __lzo_gnuc_extension__
01203 #endif
01204 #if (LZO_CC_CILLY || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
01205 #  define lzo_alignof(e)        __alignof__(e)
01206 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700))
01207 #  define lzo_alignof(e)        __alignof__(e)
01208 #elif (LZO_CC_MSC && (_MSC_VER >= 1300))
01209 #  define lzo_alignof(e)        __alignof(e)
01210 #endif
01211 #if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295))
01212 #elif defined(__cplusplus)
01213 #  define __lzo_inline          inline
01214 #elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550))
01215 #  define __lzo_inline          __inline
01216 #elif (LZO_CC_CILLY || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
01217 #  define __lzo_inline          __inline__
01218 #elif (LZO_CC_DMC)
01219 #  define __lzo_inline          __inline
01220 #elif (LZO_CC_INTELC)
01221 #  define __lzo_inline          __inline
01222 #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405))
01223 #  define __lzo_inline          __inline
01224 #elif (LZO_CC_MSC && (_MSC_VER >= 900))
01225 #  define __lzo_inline          __inline
01226 #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
01227 #  define __lzo_inline          inline
01228 #endif
01229 #if (LZO_CC_GNUC >= 0x030200ul)
01230 #  define __lzo_forceinline     __inline__ __attribute__((__always_inline__))
01231 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && (LZO_OS_WIN32 || LZO_OS_WIN64))
01232 #  define __lzo_forceinline     __forceinline
01233 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
01234 #  define __lzo_forceinline     __inline__ __attribute__((__always_inline__))
01235 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01236 #  define __lzo_forceinline     __inline__ __attribute__((__always_inline__))
01237 #elif (LZO_CC_MSC && (_MSC_VER >= 1200))
01238 #  define __lzo_forceinline     __forceinline
01239 #endif
01240 #if (LZO_CC_GNUC >= 0x030200ul)
01241 #  define __lzo_noinline        __attribute__((__noinline__))
01242 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && (LZO_OS_WIN32 || LZO_OS_WIN64))
01243 #  define __lzo_noinline        __declspec(noinline)
01244 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
01245 #  define __lzo_noinline        __attribute__((__noinline__))
01246 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01247 #  define __lzo_noinline        __attribute__((__noinline__))
01248 #elif (LZO_CC_MSC && (_MSC_VER >= 1300))
01249 #  define __lzo_noinline        __declspec(noinline)
01250 #elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64))
01251 #  if defined(__cplusplus)
01252 #  else
01253 #    define __lzo_noinline      __declspec(noinline)
01254 #  endif
01255 #endif
01256 #if (defined(__lzo_forceinline) || defined(__lzo_noinline)) && !defined(__lzo_inline)
01257 #  error "this should not happen"
01258 #endif
01259 #if (LZO_CC_GNUC >= 0x020700ul)
01260 #  define __lzo_noreturn        __attribute__((__noreturn__))
01261 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && (LZO_OS_WIN32 || LZO_OS_WIN64))
01262 #  define __lzo_noreturn        __declspec(noreturn)
01263 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && (LZO_OS_POSIX))
01264 #  define __lzo_noreturn        __attribute__((__noreturn__))
01265 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01266 #  define __lzo_noreturn        __attribute__((__noreturn__))
01267 #elif (LZO_CC_MSC && (_MSC_VER >= 1200))
01268 #  define __lzo_noreturn        __declspec(noreturn)
01269 #endif
01270 #if (LZO_CC_GNUC >= 0x030400ul)
01271 #  define __lzo_constructor     __attribute__((__constructor__,__used__))
01272 #elif (LZO_CC_GNUC >= 0x020700ul)
01273 #  define __lzo_constructor     __attribute__((__constructor__))
01274 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01275 #  define __lzo_constructor     __attribute__((__constructor__))
01276 #endif
01277 #if (LZO_CC_GNUC >= 0x030400ul)
01278 #  define __lzo_destructor      __attribute__((__destructor__,__used__))
01279 #elif (LZO_CC_GNUC >= 0x020700ul)
01280 #  define __lzo_destructor      __attribute__((__destructor__))
01281 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01282 #  define __lzo_destructor      __attribute__((__destructor__))
01283 #endif
01284 #if defined(__lzo_destructor) && !defined(__lzo_constructor)
01285 #  error "this should not happen"
01286 #endif
01287 #if (LZO_CC_GNUC >= 0x030200ul)
01288 #  define __lzo_likely(e)       (__builtin_expect(!!(e),1))
01289 #  define __lzo_unlikely(e)     (__builtin_expect(!!(e),0))
01290 #elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800))
01291 #  define __lzo_likely(e)       (__builtin_expect(!!(e),1))
01292 #  define __lzo_unlikely(e)     (__builtin_expect(!!(e),0))
01293 #elif (LZO_CC_LLVM || LZO_CC_PATHSCALE)
01294 #  define __lzo_likely(e)       (__builtin_expect(!!(e),1))
01295 #  define __lzo_unlikely(e)     (__builtin_expect(!!(e),0))
01296 #else
01297 #  define __lzo_likely(e)       (e)
01298 #  define __lzo_unlikely(e)     (e)
01299 #endif
01300 #if !defined(LZO_UNUSED)
01301 #  if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
01302 #    define LZO_UNUSED(var)         ((void) &var)
01303 #  elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC)
01304 #    define LZO_UNUSED(var)         if (&var) ; else
01305 #  elif (LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE)
01306 #    define LZO_UNUSED(var)         ((void) var)
01307 #  elif (LZO_CC_MSC && (_MSC_VER < 900))
01308 #    define LZO_UNUSED(var)         if (&var) ; else
01309 #  elif (LZO_CC_KEILC)
01310 #    define LZO_UNUSED(var)         {extern int __lzo_unused[1-2*!(sizeof(var)>0)];}
01311 #  elif (LZO_CC_PACIFICC)
01312 #    define LZO_UNUSED(var)         ((void) sizeof(var))
01313 #  elif (LZO_CC_WATCOMC) && defined(__cplusplus)
01314 #    define LZO_UNUSED(var)         ((void) var)
01315 #  else
01316 #    define LZO_UNUSED(var)         ((void) &var)
01317 #  endif
01318 #endif
01319 #if !defined(LZO_UNUSED_FUNC)
01320 #  if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600))
01321 #    define LZO_UNUSED_FUNC(func)   ((void) func)
01322 #  elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC)
01323 #    define LZO_UNUSED_FUNC(func)   if (func) ; else
01324 #  elif (LZO_CC_LLVM)
01325 #    define LZO_UNUSED_FUNC(func)   ((void) &func)
01326 #  elif (LZO_CC_MSC && (_MSC_VER < 900))
01327 #    define LZO_UNUSED_FUNC(func)   if (func) ; else
01328 #  elif (LZO_CC_MSC)
01329 #    define LZO_UNUSED_FUNC(func)   ((void) &func)
01330 #  elif (LZO_CC_KEILC || LZO_CC_PELLESC)
01331 #    define LZO_UNUSED_FUNC(func)   {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];}
01332 #  else
01333 #    define LZO_UNUSED_FUNC(func)   ((void) func)
01334 #  endif
01335 #endif
01336 #if !defined(LZO_UNUSED_LABEL)
01337 #  if (LZO_CC_WATCOMC) && defined(__cplusplus)
01338 #    define LZO_UNUSED_LABEL(l)     switch(0) case 1:goto l
01339 #  elif (LZO_CC_INTELC || LZO_CC_WATCOMC)
01340 #    define LZO_UNUSED_LABEL(l)     if (0) goto l
01341 #  else
01342 #    define LZO_UNUSED_LABEL(l)     switch(0) case 1:goto l
01343 #  endif
01344 #endif
01345 #if !defined(LZO_COMPILE_TIME_ASSERT_HEADER)
01346 #  if (LZO_CC_AZTECC || LZO_CC_ZORTECHC)
01347 #    define LZO_COMPILE_TIME_ASSERT_HEADER(e)  extern int __lzo_cta[1-!(e)];
01348 #  elif (LZO_CC_DMC || LZO_CC_SYMANTECC)
01349 #    define LZO_COMPILE_TIME_ASSERT_HEADER(e)  extern int __lzo_cta[1u-2*!(e)];
01350 #  elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
01351 #    define LZO_COMPILE_TIME_ASSERT_HEADER(e)  extern int __lzo_cta[1-!(e)];
01352 #  else
01353 #    define LZO_COMPILE_TIME_ASSERT_HEADER(e)  extern int __lzo_cta[1-2*!(e)];
01354 #  endif
01355 #endif
01356 #if !defined(LZO_COMPILE_TIME_ASSERT)
01357 #  if (LZO_CC_AZTECC)
01358 #    define LZO_COMPILE_TIME_ASSERT(e)  {typedef int __lzo_cta_t[1-!(e)];}
01359 #  elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
01360 #    define LZO_COMPILE_TIME_ASSERT(e)  switch(0) case 1:case !(e):break;
01361 #  elif (LZO_CC_MSC && (_MSC_VER < 900))
01362 #    define LZO_COMPILE_TIME_ASSERT(e)  switch(0) case 1:case !(e):break;
01363 #  elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295))
01364 #    define LZO_COMPILE_TIME_ASSERT(e)  switch(0) case 1:case !(e):break;
01365 #  else
01366 #    define LZO_COMPILE_TIME_ASSERT(e)  {typedef int __lzo_cta_t[1-2*!(e)];}
01367 #  endif
01368 #endif
01369 #if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64)
01370 #  if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC)
01371 #  elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC)
01372 #    define __lzo_cdecl                 __cdecl
01373 #    define __lzo_cdecl_atexit
01374 #    define __lzo_cdecl_main            __cdecl
01375 #    if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
01376 #      define __lzo_cdecl_qsort         __pascal
01377 #    elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
01378 #      define __lzo_cdecl_qsort         _stdcall
01379 #    else
01380 #      define __lzo_cdecl_qsort         __cdecl
01381 #    endif
01382 #  elif (LZO_CC_WATCOMC)
01383 #    define __lzo_cdecl                 __cdecl
01384 #  else
01385 #    define __lzo_cdecl                 __cdecl
01386 #    define __lzo_cdecl_atexit          __cdecl
01387 #    define __lzo_cdecl_main            __cdecl
01388 #    define __lzo_cdecl_qsort           __cdecl
01389 #  endif
01390 #  if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC)
01391 #  elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC))
01392 #    define __lzo_cdecl_sighandler      __pascal
01393 #  elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC))
01394 #    define __lzo_cdecl_sighandler      _stdcall
01395 #  elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE)
01396 #    define __lzo_cdecl_sighandler      __clrcall
01397 #  elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700))
01398 #    if defined(_DLL)
01399 #      define __lzo_cdecl_sighandler    _far _cdecl _loadds
01400 #    elif defined(_MT)
01401 #      define __lzo_cdecl_sighandler    _far _cdecl
01402 #    else
01403 #      define __lzo_cdecl_sighandler    _cdecl
01404 #    endif
01405 #  else
01406 #    define __lzo_cdecl_sighandler      __cdecl
01407 #  endif
01408 #elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC))
01409 #  define __lzo_cdecl                   cdecl
01410 #endif
01411 #if !defined(__lzo_cdecl)
01412 #  define __lzo_cdecl
01413 #endif
01414 #if !defined(__lzo_cdecl_atexit)
01415 #  define __lzo_cdecl_atexit
01416 #endif
01417 #if !defined(__lzo_cdecl_main)
01418 #  define __lzo_cdecl_main
01419 #endif
01420 #if !defined(__lzo_cdecl_qsort)
01421 #  define __lzo_cdecl_qsort
01422 #endif
01423 #if !defined(__lzo_cdecl_sighandler)
01424 #  define __lzo_cdecl_sighandler
01425 #endif
01426 #if !defined(__lzo_cdecl_va)
01427 #  define __lzo_cdecl_va                __lzo_cdecl
01428 #endif
01429 #if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64)
01430 #  if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000))
01431 #  elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__)
01432 #  elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul)))
01433 #  else
01434 #    define LZO_HAVE_WINDOWS_H 1
01435 #  endif
01436 #endif
01437 #if (LZO_ARCH_ALPHA)
01438 #  define LZO_OPT_AVOID_UINT_INDEX  1
01439 #  define LZO_OPT_AVOID_SHORT       1
01440 #  define LZO_OPT_AVOID_USHORT      1
01441 #elif (LZO_ARCH_AMD64)
01442 #  define LZO_OPT_AVOID_INT_INDEX   1
01443 #  define LZO_OPT_AVOID_UINT_INDEX  1
01444 #  define LZO_OPT_UNALIGNED16       1
01445 #  define LZO_OPT_UNALIGNED32       1
01446 #  define LZO_OPT_UNALIGNED64       1
01447 #elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB)
01448 #elif (LZO_ARCH_ARM)
01449 #  define LZO_OPT_AVOID_SHORT       1
01450 #  define LZO_OPT_AVOID_USHORT      1
01451 #elif (LZO_ARCH_CRIS)
01452 #  define LZO_OPT_UNALIGNED16       1
01453 #  define LZO_OPT_UNALIGNED32       1
01454 #elif (LZO_ARCH_I386)
01455 #  define LZO_OPT_UNALIGNED16       1
01456 #  define LZO_OPT_UNALIGNED32       1
01457 #elif (LZO_ARCH_IA64)
01458 #  define LZO_OPT_AVOID_INT_INDEX   1
01459 #  define LZO_OPT_AVOID_UINT_INDEX  1
01460 #  define LZO_OPT_PREFER_POSTINC    1
01461 #elif (LZO_ARCH_M68K)
01462 #  define LZO_OPT_PREFER_POSTINC    1
01463 #  define LZO_OPT_PREFER_PREDEC     1
01464 #  if defined(__mc68020__) && !defined(__mcoldfire__)
01465 #    define LZO_OPT_UNALIGNED16     1
01466 #    define LZO_OPT_UNALIGNED32     1
01467 #  endif
01468 #elif (LZO_ARCH_MIPS)
01469 #  define LZO_OPT_AVOID_UINT_INDEX  1
01470 #elif (LZO_ARCH_POWERPC)
01471 #  define LZO_OPT_PREFER_PREINC     1
01472 #  define LZO_OPT_PREFER_PREDEC     1
01473 #  if defined(LZO_ABI_BIG_ENDIAN)
01474 #    define LZO_OPT_UNALIGNED16     1
01475 #    define LZO_OPT_UNALIGNED32     1
01476 #  endif
01477 #elif (LZO_ARCH_S390)
01478 #  define LZO_OPT_UNALIGNED16       1
01479 #  define LZO_OPT_UNALIGNED32       1
01480 #  if (LZO_SIZEOF_SIZE_T == 8)
01481 #    define LZO_OPT_UNALIGNED64     1
01482 #  endif
01483 #elif (LZO_ARCH_SH)
01484 #  define LZO_OPT_PREFER_POSTINC    1
01485 #  define LZO_OPT_PREFER_PREDEC     1
01486 #endif
01487 #if !defined(LZO_CFG_NO_INLINE_ASM)
01488 #if defined(LZO_CC_LLVM)
01489 #  define LZO_CFG_NO_INLINE_ASM 1
01490 #endif
01491 #endif
01492 #if !defined(LZO_CFG_NO_UNALIGNED)
01493 #if defined(LZO_ABI_NEUTRAL_ENDIAN) || defined(LZO_ARCH_GENERIC)
01494 #  define LZO_CFG_NO_UNALIGNED 1
01495 #endif
01496 #endif
01497 #if defined(LZO_CFG_NO_UNALIGNED)
01498 #  undef LZO_OPT_UNALIGNED16
01499 #  undef LZO_OPT_UNALIGNED32
01500 #  undef LZO_OPT_UNALIGNED64
01501 #endif
01502 #if defined(LZO_CFG_NO_INLINE_ASM)
01503 #elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
01504 #  define LZO_ASM_SYNTAX_MSC 1
01505 #elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC))
01506 #elif (LZO_ARCH_I386 && (LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
01507 #  define LZO_ASM_SYNTAX_GNUC 1
01508 #elif (LZO_ARCH_AMD64 && (LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE))
01509 #  define LZO_ASM_SYNTAX_GNUC 1
01510 #endif
01511 #if (LZO_ASM_SYNTAX_GNUC)
01512 #if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul))
01513 #  define __LZO_ASM_CLOBBER         "ax"
01514 #elif (LZO_CC_INTELC)
01515 #  define __LZO_ASM_CLOBBER         "memory"
01516 #else
01517 #  define __LZO_ASM_CLOBBER         "cc", "memory"
01518 #endif
01519 #endif
01520 #if defined(__LZO_INFOSTR_MM)
01521 #elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM))
01522 #  define __LZO_INFOSTR_MM          ""
01523 #elif defined(LZO_INFO_MM)
01524 #  define __LZO_INFOSTR_MM          "." LZO_INFO_MM
01525 #else
01526 #  define __LZO_INFOSTR_MM          ""
01527 #endif
01528 #if defined(__LZO_INFOSTR_PM)
01529 #elif defined(LZO_INFO_ABI_PM)
01530 #  define __LZO_INFOSTR_PM          "." LZO_INFO_ABI_PM
01531 #else
01532 #  define __LZO_INFOSTR_PM          ""
01533 #endif
01534 #if defined(__LZO_INFOSTR_ENDIAN)
01535 #elif defined(LZO_INFO_ABI_ENDIAN)
01536 #  define __LZO_INFOSTR_ENDIAN      "." LZO_INFO_ABI_ENDIAN
01537 #else
01538 #  define __LZO_INFOSTR_ENDIAN      ""
01539 #endif
01540 #if defined(__LZO_INFOSTR_OSNAME)
01541 #elif defined(LZO_INFO_OS_CONSOLE)
01542 #  define __LZO_INFOSTR_OSNAME      LZO_INFO_OS "." LZO_INFO_OS_CONSOLE
01543 #elif defined(LZO_INFO_OS_POSIX)
01544 #  define __LZO_INFOSTR_OSNAME      LZO_INFO_OS "." LZO_INFO_OS_POSIX
01545 #else
01546 #  define __LZO_INFOSTR_OSNAME      LZO_INFO_OS
01547 #endif
01548 #if defined(__LZO_INFOSTR_LIBC)
01549 #elif defined(LZO_INFO_LIBC)
01550 #  define __LZO_INFOSTR_LIBC        "." LZO_INFO_LIBC
01551 #else
01552 #  define __LZO_INFOSTR_LIBC        ""
01553 #endif
01554 #if defined(__LZO_INFOSTR_CCVER)
01555 #elif defined(LZO_INFO_CCVER)
01556 #  define __LZO_INFOSTR_CCVER       " " LZO_INFO_CCVER
01557 #else
01558 #  define __LZO_INFOSTR_CCVER       ""
01559 #endif
01560 #define LZO_INFO_STRING \
01561     LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \
01562     " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER
01563 
01564 #endif
01565 
01566 #endif
01567 
01568 #undef LZO_HAVE_CONFIG_H
01569 #include "minilzo.h"
01570 
01571 #if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2020)
01572 #  error "version mismatch in miniLZO source files"
01573 #endif
01574 
01575 #ifdef MINILZO_HAVE_CONFIG_H
01576 #  define LZO_HAVE_CONFIG_H
01577 #endif
01578 
01579 #ifndef __LZO_CONF_H
01580 #define __LZO_CONF_H
01581 
01582 #if !defined(__LZO_IN_MINILZO)
01583 #if defined(LZO_CFG_FREESTANDING)
01584 #  define LZO_LIBC_FREESTANDING 1
01585 #  define LZO_OS_FREESTANDING 1
01586 #  define ACC_LIBC_FREESTANDING 1
01587 #  define ACC_OS_FREESTANDING 1
01588 #endif
01589 #if defined(LZO_CFG_NO_UNALIGNED)
01590 #  define ACC_CFG_NO_UNALIGNED 1
01591 #endif
01592 #if defined(LZO_HAVE_CONFIG_H)
01593 #  define ACC_CONFIG_NO_HEADER 1
01594 #endif
01595 #if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED)
01596 #  error "include this file first"
01597 #endif
01598 #include "lzo/lzoconf.h"
01599 #endif
01600 
01601 #if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED)
01602 #  error "version mismatch"
01603 #endif
01604 
01605 #if (LZO_CC_BORLANDC && LZO_ARCH_I086)
01606 #  pragma option -h
01607 #endif
01608 
01609 #if (LZO_CC_MSC && (_MSC_VER >= 1000))
01610 #  pragma warning(disable: 4127 4701)
01611 #endif
01612 #if (LZO_CC_MSC && (_MSC_VER >= 1300))
01613 #  pragma warning(disable: 4820)
01614 #  pragma warning(disable: 4514 4710 4711)
01615 #endif
01616 
01617 #if defined(__LZO_MMODEL_HUGE) && (!LZO_HAVE_MM_HUGE_PTR)
01618 #  error "this should not happen - check defines for __huge"
01619 #endif
01620 
01621 #if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING)
01622 #elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16)
01623 #  define ACC_WANT_ACC_INCD_H 1
01624 #  define ACC_WANT_ACC_INCE_H 1
01625 #  define ACC_WANT_ACC_INCI_H 1
01626 #elif 1
01627 #  include <string.h>
01628 #else
01629 #  define ACC_WANT_ACC_INCD_H 1
01630 #endif
01631 
01632 #if (LZO_ARCH_I086)
01633 #  define ACC_MM_AHSHIFT        LZO_MM_AHSHIFT
01634 #  define ACC_PTR_FP_OFF(x)     (((const unsigned __far*)&(x))[0])
01635 #  define ACC_PTR_FP_SEG(x)     (((const unsigned __far*)&(x))[1])
01636 #  define ACC_PTR_MK_FP(s,o)    ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o)))
01637 #endif
01638 
01639 #if !defined(lzo_uintptr_t)
01640 #  if defined(__LZO_MMODEL_HUGE)
01641 #    define lzo_uintptr_t       unsigned long
01642 #  elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16)
01643 #    define __LZO_UINTPTR_T_IS_POINTER 1
01644      typedef char*              lzo_uintptr_t;
01645 #    define lzo_uintptr_t       lzo_uintptr_t
01646 #  elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P)
01647 #    define lzo_uintptr_t       size_t
01648 #  elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P)
01649 #    define lzo_uintptr_t       unsigned long
01650 #  elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P)
01651 #    define lzo_uintptr_t       unsigned int
01652 #  elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P)
01653 #    define lzo_uintptr_t       unsigned long long
01654 #  else
01655 #    define lzo_uintptr_t       size_t
01656 #  endif
01657 #endif
01658 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp))
01659 
01660 #if 1 && !defined(LZO_CFG_FREESTANDING)
01661 #if 1 && !defined(HAVE_STRING_H)
01662 #define HAVE_STRING_H 1
01663 #endif
01664 #if 1 && !defined(HAVE_MEMCMP)
01665 #define HAVE_MEMCMP 1
01666 #endif
01667 #if 1 && !defined(HAVE_MEMCPY)
01668 #define HAVE_MEMCPY 1
01669 #endif
01670 #if 1 && !defined(HAVE_MEMMOVE)
01671 #define HAVE_MEMMOVE 1
01672 #endif
01673 #if 1 && !defined(HAVE_MEMSET)
01674 #define HAVE_MEMSET 1
01675 #endif
01676 #endif
01677 
01678 #if 1 && defined(HAVE_STRING_H)
01679 #include <string.h>
01680 #endif
01681 
01682 #if defined(LZO_CFG_FREESTANDING)
01683 #  undef HAVE_MEMCMP
01684 #  undef HAVE_MEMCPY
01685 #  undef HAVE_MEMMOVE
01686 #  undef HAVE_MEMSET
01687 #endif
01688 
01689 #if !defined(HAVE_MEMCMP)
01690 #  undef memcmp
01691 #  define memcmp(a,b,c)         lzo_memcmp(a,b,c)
01692 #elif !defined(__LZO_MMODEL_HUGE)
01693 #  define lzo_memcmp(a,b,c)     memcmp(a,b,c)
01694 #endif
01695 #if !defined(HAVE_MEMCPY)
01696 #  undef memcpy
01697 #  define memcpy(a,b,c)         lzo_memcpy(a,b,c)
01698 #elif !defined(__LZO_MMODEL_HUGE)
01699 #  define lzo_memcpy(a,b,c)     memcpy(a,b,c)
01700 #endif
01701 #if !defined(HAVE_MEMMOVE)
01702 #  undef memmove
01703 #  define memmove(a,b,c)        lzo_memmove(a,b,c)
01704 #elif !defined(__LZO_MMODEL_HUGE)
01705 #  define lzo_memmove(a,b,c)    memmove(a,b,c)
01706 #endif
01707 #if !defined(HAVE_MEMSET)
01708 #  undef memset
01709 #  define memset(a,b,c)         lzo_memset(a,b,c)
01710 #elif !defined(__LZO_MMODEL_HUGE)
01711 #  define lzo_memset(a,b,c)     memset(a,b,c)
01712 #endif
01713 
01714 #undef NDEBUG
01715 #if defined(LZO_CFG_FREESTANDING)
01716 #  undef LZO_DEBUG
01717 #  define NDEBUG 1
01718 #  undef assert
01719 #  define assert(e) ((void)0)
01720 #else
01721 #  if !defined(LZO_DEBUG)
01722 #    define NDEBUG 1
01723 #  endif
01724 #  include <assert.h>
01725 #endif
01726 
01727 #if 0 && defined(__BOUNDS_CHECKING_ON)
01728 #  include <unchecked.h>
01729 #else
01730 #  define BOUNDS_CHECKING_OFF_DURING(stmt)      stmt
01731 #  define BOUNDS_CHECKING_OFF_IN_EXPR(expr)     (expr)
01732 #endif
01733 
01734 #if !defined(__lzo_inline)
01735 #  define __lzo_inline
01736 #endif
01737 #if !defined(__lzo_forceinline)
01738 #  define __lzo_forceinline
01739 #endif
01740 #if !defined(__lzo_noinline)
01741 #  define __lzo_noinline
01742 #endif
01743 
01744 #if 1
01745 #  define LZO_BYTE(x)       ((unsigned char) (x))
01746 #else
01747 #  define LZO_BYTE(x)       ((unsigned char) ((x) & 0xff))
01748 #endif
01749 
01750 #define LZO_MAX(a,b)        ((a) >= (b) ? (a) : (b))
01751 #define LZO_MIN(a,b)        ((a) <= (b) ? (a) : (b))
01752 #define LZO_MAX3(a,b,c)     ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c))
01753 #define LZO_MIN3(a,b,c)     ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c))
01754 
01755 #define lzo_sizeof(type)    ((lzo_uint) (sizeof(type)))
01756 
01757 #define LZO_HIGH(array)     ((lzo_uint) (sizeof(array)/sizeof(*(array))))
01758 
01759 #define LZO_SIZE(bits)      (1u << (bits))
01760 #define LZO_MASK(bits)      (LZO_SIZE(bits) - 1)
01761 
01762 #define LZO_LSIZE(bits)     (1ul << (bits))
01763 #define LZO_LMASK(bits)     (LZO_LSIZE(bits) - 1)
01764 
01765 #define LZO_USIZE(bits)     ((lzo_uint) 1 << (bits))
01766 #define LZO_UMASK(bits)     (LZO_USIZE(bits) - 1)
01767 
01768 #if !defined(DMUL)
01769 #if 0
01770 
01771 #  define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b)))
01772 #else
01773 #  define DMUL(a,b) ((lzo_xint) ((a) * (b)))
01774 #endif
01775 #endif
01776 
01777 #if 1 && !defined(LZO_CFG_NO_UNALIGNED)
01778 #if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
01779 #  if (LZO_SIZEOF_SHORT == 2)
01780 #    define LZO_UNALIGNED_OK_2
01781 #  endif
01782 #  if (LZO_SIZEOF_INT == 4)
01783 #    define LZO_UNALIGNED_OK_4
01784 #  endif
01785 #endif
01786 #endif
01787 
01788 #if defined(LZO_UNALIGNED_OK_2)
01789   LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(short) == 2)
01790 #endif
01791 #if defined(LZO_UNALIGNED_OK_4)
01792   LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4)
01793 #elif defined(LZO_ALIGNED_OK_4)
01794   LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4)
01795 #endif
01796 
01797 #define MEMCPY8_DS(dest,src,len) \
01798     lzo_memcpy(dest,src,len); dest += len; src += len
01799 
01800 #define BZERO8_PTR(s,l,n) \
01801     lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n))
01802 
01803 #define MEMCPY_DS(dest,src,len) \
01804     do *dest++ = *src++; while (--len > 0)
01805 
01806 __LZO_EXTERN_C int __lzo_init_done;
01807 __LZO_EXTERN_C const char __lzo_copyright[];
01808 LZO_EXTERN(const lzo_bytep) lzo_copyright(void);
01809 
01810 #ifndef __LZO_PTR_H
01811 #define __LZO_PTR_H
01812 
01813 #ifdef __cplusplus
01814 extern "C" {
01815 #endif
01816 
01817 #if !defined(lzo_uintptr_t)
01818 #  if defined(__LZO_MMODEL_HUGE)
01819 #    define lzo_uintptr_t   unsigned long
01820 #  else
01821 #    define lzo_uintptr_t   acc_uintptr_t
01822 #    ifdef __ACC_INTPTR_T_IS_POINTER
01823 #      define __LZO_UINTPTR_T_IS_POINTER 1
01824 #    endif
01825 #  endif
01826 #endif
01827 
01828 #if (LZO_ARCH_I086)
01829 #define PTR(a)              ((lzo_bytep) (a))
01830 #define PTR_ALIGNED_4(a)    ((ACC_PTR_FP_OFF(a) & 3) == 0)
01831 #define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0)
01832 #else
01833 #define PTR(a)              ((lzo_uintptr_t) (a))
01834 #define PTR_LINEAR(a)       PTR(a)
01835 #define PTR_ALIGNED_4(a)    ((PTR_LINEAR(a) & 3) == 0)
01836 #define PTR_ALIGNED_8(a)    ((PTR_LINEAR(a) & 7) == 0)
01837 #define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0)
01838 #define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0)
01839 #endif
01840 
01841 #define PTR_LT(a,b)         (PTR(a) < PTR(b))
01842 #define PTR_GE(a,b)         (PTR(a) >= PTR(b))
01843 #define PTR_DIFF(a,b)       (PTR(a) - PTR(b))
01844 #define pd(a,b)             ((lzo_uint) ((a)-(b)))
01845 
01846 LZO_EXTERN(lzo_uintptr_t)
01847 __lzo_ptr_linear(const lzo_voidp ptr);
01848 
01849 typedef union
01850 {
01851     char            a_char;
01852     unsigned char   a_uchar;
01853     short           a_short;
01854     unsigned short  a_ushort;
01855     int             a_int;
01856     unsigned int    a_uint;
01857     long            a_long;
01858     unsigned long   a_ulong;
01859     lzo_int         a_lzo_int;
01860     lzo_uint        a_lzo_uint;
01861     lzo_int32       a_lzo_int32;
01862     lzo_uint32      a_lzo_uint32;
01863     ptrdiff_t       a_ptrdiff_t;
01864     lzo_uintptr_t   a_lzo_uintptr_t;
01865     lzo_voidp       a_lzo_voidp;
01866     void *          a_void_p;
01867     lzo_bytep       a_lzo_bytep;
01868     lzo_bytepp      a_lzo_bytepp;
01869     lzo_uintp       a_lzo_uintp;
01870     lzo_uint *      a_lzo_uint_p;
01871     lzo_uint32p     a_lzo_uint32p;
01872     lzo_uint32 *    a_lzo_uint32_p;
01873     unsigned char * a_uchar_p;
01874     char *          a_char_p;
01875 }
01876 lzo_full_align_t;
01877 
01878 #ifdef __cplusplus
01879 }
01880 #endif
01881 
01882 #endif
01883 
01884 #define LZO_DETERMINISTIC
01885 
01886 #define LZO_DICT_USE_PTR
01887 #if 0 && (LZO_ARCH_I086)
01888 #  undef LZO_DICT_USE_PTR
01889 #endif
01890 
01891 #if defined(LZO_DICT_USE_PTR)
01892 #  define lzo_dict_t    const lzo_bytep
01893 #  define lzo_dict_p    lzo_dict_t __LZO_MMODEL *
01894 #else
01895 #  define lzo_dict_t    lzo_uint
01896 #  define lzo_dict_p    lzo_dict_t __LZO_MMODEL *
01897 #endif
01898 
01899 #endif
01900 
01901 #if !defined(MINILZO_CFG_SKIP_LZO_PTR)
01902 
01903 LZO_PUBLIC(lzo_uintptr_t)
01904 __lzo_ptr_linear(const lzo_voidp ptr)
01905 {
01906     lzo_uintptr_t p;
01907 
01908 #if (LZO_ARCH_I086)
01909     p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr));
01910 #else
01911     p = (lzo_uintptr_t) PTR_LINEAR(ptr);
01912 #endif
01913 
01914     return p;
01915 }
01916 
01917 LZO_PUBLIC(unsigned)
01918 __lzo_align_gap(const lzo_voidp ptr, lzo_uint size)
01919 {
01920 #if defined(__LZO_UINTPTR_T_IS_POINTER)
01921     size_t n = (size_t) ptr;
01922     n = (((n + size - 1) / size) * size) - n;
01923 #else
01924     lzo_uintptr_t p, n;
01925     p = __lzo_ptr_linear(ptr);
01926     n = (((p + size - 1) / size) * size) - p;
01927 #endif
01928 
01929     assert(size > 0);
01930     assert((long)n >= 0);
01931     assert(n <= s);
01932     return (unsigned)n;
01933 }
01934 
01935 #endif
01936 
01937 /* If you use the LZO library in a product, you *must* keep this
01938  * copyright string in the executable of your product.
01939  */
01940 
01941 const char __lzo_copyright[] =
01942 #if !defined(__LZO_IN_MINLZO)
01943     LZO_VERSION_STRING;
01944 #else
01945     "\r\n\n"
01946     "LZO data compression library.\n"
01947     "$Copyright: LZO (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Markus Franz Xaver Johannes Oberhumer\n"
01948     "<markus@oberhumer.com>\n"
01949     "http://www.oberhumer.com $\n\n"
01950     "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n"
01951     "$Built: " __DATE__ " " __TIME__ " $\n"
01952     "$Info: " LZO_INFO_STRING " $\n";
01953 #endif
01954 
01955 LZO_PUBLIC(const lzo_bytep)
01956 lzo_copyright(void)
01957 {
01958 #if (LZO_OS_DOS16 && LZO_CC_TURBOC)
01959     return (lzo_voidp) __lzo_copyright;
01960 #else
01961     return (const lzo_bytep) __lzo_copyright;
01962 #endif
01963 }
01964 
01965 LZO_PUBLIC(unsigned)
01966 lzo_version(void)
01967 {
01968     return LZO_VERSION;
01969 }
01970 
01971 LZO_PUBLIC(const char *)
01972 lzo_version_string(void)
01973 {
01974     return LZO_VERSION_STRING;
01975 }
01976 
01977 LZO_PUBLIC(const char *)
01978 lzo_version_date(void)
01979 {
01980     return LZO_VERSION_DATE;
01981 }
01982 
01983 LZO_PUBLIC(const lzo_charp)
01984 _lzo_version_string(void)
01985 {
01986     return LZO_VERSION_STRING;
01987 }
01988 
01989 LZO_PUBLIC(const lzo_charp)
01990 _lzo_version_date(void)
01991 {
01992     return LZO_VERSION_DATE;
01993 }
01994 
01995 #define LZO_BASE 65521u
01996 #define LZO_NMAX 5552
01997 
01998 #define LZO_DO1(buf,i)  s1 += buf[i]; s2 += s1
01999 #define LZO_DO2(buf,i)  LZO_DO1(buf,i); LZO_DO1(buf,i+1);
02000 #define LZO_DO4(buf,i)  LZO_DO2(buf,i); LZO_DO2(buf,i+2);
02001 #define LZO_DO8(buf,i)  LZO_DO4(buf,i); LZO_DO4(buf,i+4);
02002 #define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8);
02003 
02004 LZO_PUBLIC(lzo_uint32)
02005 lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len)
02006 {
02007     lzo_uint32 s1 = adler & 0xffff;
02008     lzo_uint32 s2 = (adler >> 16) & 0xffff;
02009     unsigned k;
02010 
02011     if (buf == NULL)
02012         return 1;
02013 
02014     while (len > 0)
02015     {
02016         k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX;
02017         len -= k;
02018         if (k >= 16) do
02019         {
02020             LZO_DO16(buf,0);
02021             buf += 16;
02022             k -= 16;
02023         } while (k >= 16);
02024         if (k != 0) do
02025         {
02026             s1 += *buf++;
02027             s2 += s1;
02028         } while (--k > 0);
02029         s1 %= LZO_BASE;
02030         s2 %= LZO_BASE;
02031     }
02032     return (s2 << 16) | s1;
02033 }
02034 
02035 #undef LZO_DO1
02036 #undef LZO_DO2
02037 #undef LZO_DO4
02038 #undef LZO_DO8
02039 #undef LZO_DO16
02040 
02041 #if !defined(MINILZO_CFG_SKIP_LZO_STRING)
02042 #undef lzo_memcmp
02043 #undef lzo_memcpy
02044 #undef lzo_memmove
02045 #undef lzo_memset
02046 #if !defined(__LZO_MMODEL_HUGE)
02047 #  undef LZO_HAVE_MM_HUGE_PTR
02048 #endif
02049 #define lzo_hsize_t             lzo_uint
02050 #define lzo_hvoid_p             lzo_voidp
02051 #define lzo_hbyte_p             lzo_bytep
02052 #define LZOLIB_PUBLIC(r,f)      LZO_PUBLIC(r) f
02053 #define lzo_hmemcmp             lzo_memcmp
02054 #define lzo_hmemcpy             lzo_memcpy
02055 #define lzo_hmemmove            lzo_memmove
02056 #define lzo_hmemset             lzo_memset
02057 #define __LZOLIB_HMEMCPY_CH_INCLUDED 1
02058 #if !defined(LZOLIB_PUBLIC)
02059 #  define LZOLIB_PUBLIC(r,f)    r __LZOLIB_FUNCNAME(f)
02060 #endif
02061 LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len)
02062 {
02063 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCMP)
02064     const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1;
02065     const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2;
02066     if __lzo_likely(len > 0) do
02067     {
02068         int d = *p1 - *p2;
02069         if (d != 0)
02070             return d;
02071         p1++; p2++;
02072     } while __lzo_likely(--len > 0);
02073     return 0;
02074 #else
02075     return memcmp(s1, s2, len);
02076 #endif
02077 }
02078 LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len)
02079 {
02080 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMCPY)
02081     lzo_hbyte_p p1 = (lzo_hbyte_p) dest;
02082     const lzo_hbyte_p p2 = (const lzo_hbyte_p) src;
02083     if (len <= 0 || p1 == p2)
02084         return dest;
02085     do
02086         *p1++ = *p2++;
02087     while __lzo_likely(--len > 0);
02088     return dest;
02089 #else
02090     return memcpy(dest, src, len);
02091 #endif
02092 }
02093 LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len)
02094 {
02095 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMMOVE)
02096     lzo_hbyte_p p1 = (lzo_hbyte_p) dest;
02097     const lzo_hbyte_p p2 = (const lzo_hbyte_p) src;
02098     if (len <= 0 || p1 == p2)
02099         return dest;
02100     if (p1 < p2)
02101     {
02102         do
02103             *p1++ = *p2++;
02104         while __lzo_likely(--len > 0);
02105     }
02106     else
02107     {
02108         p1 += len;
02109         p2 += len;
02110         do
02111             *--p1 = *--p2;
02112         while __lzo_likely(--len > 0);
02113     }
02114     return dest;
02115 #else
02116     return memmove(dest, src, len);
02117 #endif
02118 }
02119 LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len)
02120 {
02121 #if (LZO_HAVE_MM_HUGE_PTR) || !defined(HAVE_MEMSET)
02122     lzo_hbyte_p p = (lzo_hbyte_p) s;
02123     if __lzo_likely(len > 0) do
02124         *p++ = (unsigned char) c;
02125     while __lzo_likely(--len > 0);
02126     return s;
02127 #else
02128     return memset(s, c, len);
02129 #endif
02130 }
02131 #undef LZOLIB_PUBLIC
02132 #endif
02133 
02134 #if !defined(__LZO_IN_MINILZO)
02135 
02136 #define ACC_WANT_ACC_CHK_CH 1
02137 #undef ACCCHK_ASSERT
02138 
02139     ACCCHK_ASSERT_IS_SIGNED_T(lzo_int)
02140     ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint)
02141 
02142     ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32)
02143     ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32)
02144     ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0)
02145     ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4)
02146 
02147 #if !defined(__LZO_UINTPTR_T_IS_POINTER)
02148     ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t)
02149 #endif
02150     ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp))
02151 
02152     ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint)
02153     ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32))
02154     ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint))
02155     ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint))
02156 
02157 #endif
02158 #undef ACCCHK_ASSERT
02159 
02160 LZO_PUBLIC(int)
02161 _lzo_config_check(void)
02162 {
02163     lzo_bool r = 1;
02164     union { unsigned char c[2*sizeof(lzo_xint)]; lzo_xint l[2]; } u;
02165 
02166 #if !defined(LZO_CFG_NO_CONFIG_CHECK)
02167 #if defined(LZO_ABI_BIG_ENDIAN)
02168     u.l[0] = u.l[1] = 0; u.c[sizeof(lzo_xint) - 1] = 128;
02169     r &= (u.l[0] == 128);
02170 #endif
02171 #if defined(LZO_ABI_LITTLE_ENDIAN)
02172     u.l[0] = u.l[1] = 0; u.c[0] = 128;
02173     r &= (u.l[0] == 128);
02174 #endif
02175 #if defined(LZO_UNALIGNED_OK_2)
02176     u.l[0] = u.l[1] = 0;
02177     r &= ((* (const lzo_ushortp) (const lzo_voidp) &u.c[1]) == 0);
02178 #endif
02179 #if defined(LZO_UNALIGNED_OK_4)
02180     u.l[0] = u.l[1] = 0;
02181     r &= ((* (const lzo_uint32p) (const lzo_voidp) &u.c[1]) == 0);
02182 #endif
02183 #endif
02184 
02185     LZO_UNUSED(u);
02186     return r == 1 ? LZO_E_OK : LZO_E_ERROR;
02187 }
02188 
02189 int __lzo_init_done = 0;
02190 
02191 LZO_PUBLIC(int)
02192 __lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5,
02193                           int s6, int s7, int s8, int s9)
02194 {
02195     int r;
02196 
02197 #if defined(__LZO_IN_MINILZO)
02198 #elif (LZO_CC_MSC && ((_MSC_VER) < 700))
02199 #else
02200 #define ACC_WANT_ACC_CHK_CH 1
02201 #undef ACCCHK_ASSERT
02202 #define ACCCHK_ASSERT(expr)  LZO_COMPILE_TIME_ASSERT(expr)
02203 #endif
02204 #undef ACCCHK_ASSERT
02205 
02206     __lzo_init_done = 1;
02207 
02208     if (v == 0)
02209         return LZO_E_ERROR;
02210 
02211     r = (s1 == -1 || s1 == (int) sizeof(short)) &&
02212         (s2 == -1 || s2 == (int) sizeof(int)) &&
02213         (s3 == -1 || s3 == (int) sizeof(long)) &&
02214         (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) &&
02215         (s5 == -1 || s5 == (int) sizeof(lzo_uint)) &&
02216         (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) &&
02217         (s7 == -1 || s7 == (int) sizeof(char *)) &&
02218         (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) &&
02219         (s9 == -1 || s9 == (int) sizeof(lzo_callback_t));
02220     if (!r)
02221         return LZO_E_ERROR;
02222 
02223     r = _lzo_config_check();
02224     if (r != LZO_E_OK)
02225         return r;
02226 
02227     return r;
02228 }
02229 
02230 #if !defined(__LZO_IN_MINILZO)
02231 
02232 #if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD)
02233 
02234 #if 0
02235 BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment,
02236                           WORD wHeapSize, LPSTR lpszCmdLine )
02237 #else
02238 int __far __pascal LibMain ( int a, short b, short c, long d )
02239 #endif
02240 {
02241     LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d);
02242     return 1;
02243 }
02244 
02245 #endif
02246 
02247 #endif
02248 
02249 #define do_compress         _lzo1x_1_do_compress
02250 
02251 #if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS)
02252 
02253 #define LZO_NEED_DICT_H
02254 #define D_BITS          14
02255 #define D_INDEX1(d,p)       d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5)
02256 #define D_INDEX2(d,p)       d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f)
02257 
02258 #ifndef __LZO_CONFIG1X_H
02259 #define __LZO_CONFIG1X_H
02260 
02261 #if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z)
02262 #  define LZO1X
02263 #endif
02264 
02265 #if !defined(__LZO_IN_MINILZO)
02266 #include "lzo/lzo1x.h"
02267 #endif
02268 
02269 #define LZO_EOF_CODE
02270 #undef LZO_DETERMINISTIC
02271 
02272 #define M1_MAX_OFFSET   0x0400
02273 #ifndef M2_MAX_OFFSET
02274 #define M2_MAX_OFFSET   0x0800
02275 #endif
02276 #define M3_MAX_OFFSET   0x4000
02277 #define M4_MAX_OFFSET   0xbfff
02278 
02279 #define MX_MAX_OFFSET   (M1_MAX_OFFSET + M2_MAX_OFFSET)
02280 
02281 #define M1_MIN_LEN      2
02282 #define M1_MAX_LEN      2
02283 #define M2_MIN_LEN      3
02284 #ifndef M2_MAX_LEN
02285 #define M2_MAX_LEN      8
02286 #endif
02287 #define M3_MIN_LEN      3
02288 #define M3_MAX_LEN      33
02289 #define M4_MIN_LEN      3
02290 #define M4_MAX_LEN      9
02291 
02292 #define M1_MARKER       0
02293 #define M2_MARKER       64
02294 #define M3_MARKER       32
02295 #define M4_MARKER       16
02296 
02297 #ifndef MIN_LOOKAHEAD
02298 #define MIN_LOOKAHEAD       (M2_MAX_LEN + 1)
02299 #endif
02300 
02301 #if defined(LZO_NEED_DICT_H)
02302 
02303 #ifndef LZO_HASH
02304 #define LZO_HASH            LZO_HASH_LZO_INCREMENTAL_B
02305 #endif
02306 #define DL_MIN_LEN          M2_MIN_LEN
02307 
02308 #ifndef __LZO_DICT_H
02309 #define __LZO_DICT_H
02310 
02311 #ifdef __cplusplus
02312 extern "C" {
02313 #endif
02314 
02315 #if !defined(D_BITS) && defined(DBITS)
02316 #  define D_BITS        DBITS
02317 #endif
02318 #if !defined(D_BITS)
02319 #  error "D_BITS is not defined"
02320 #endif
02321 #if (D_BITS < 16)
02322 #  define D_SIZE        LZO_SIZE(D_BITS)
02323 #  define D_MASK        LZO_MASK(D_BITS)
02324 #else
02325 #  define D_SIZE        LZO_USIZE(D_BITS)
02326 #  define D_MASK        LZO_UMASK(D_BITS)
02327 #endif
02328 #define D_HIGH          ((D_MASK >> 1) + 1)
02329 
02330 #if !defined(DD_BITS)
02331 #  define DD_BITS       0
02332 #endif
02333 #define DD_SIZE         LZO_SIZE(DD_BITS)
02334 #define DD_MASK         LZO_MASK(DD_BITS)
02335 
02336 #if !defined(DL_BITS)
02337 #  define DL_BITS       (D_BITS - DD_BITS)
02338 #endif
02339 #if (DL_BITS < 16)
02340 #  define DL_SIZE       LZO_SIZE(DL_BITS)
02341 #  define DL_MASK       LZO_MASK(DL_BITS)
02342 #else
02343 #  define DL_SIZE       LZO_USIZE(DL_BITS)
02344 #  define DL_MASK       LZO_UMASK(DL_BITS)
02345 #endif
02346 
02347 #if (D_BITS != DL_BITS + DD_BITS)
02348 #  error "D_BITS does not match"
02349 #endif
02350 #if (D_BITS < 8 || D_BITS > 18)
02351 #  error "invalid D_BITS"
02352 #endif
02353 #if (DL_BITS < 8 || DL_BITS > 20)
02354 #  error "invalid DL_BITS"
02355 #endif
02356 #if (DD_BITS < 0 || DD_BITS > 6)
02357 #  error "invalid DD_BITS"
02358 #endif
02359 
02360 #if !defined(DL_MIN_LEN)
02361 #  define DL_MIN_LEN    3
02362 #endif
02363 #if !defined(DL_SHIFT)
02364 #  define DL_SHIFT      ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN)
02365 #endif
02366 
02367 #define LZO_HASH_GZIP                   1
02368 #define LZO_HASH_GZIP_INCREMENTAL       2
02369 #define LZO_HASH_LZO_INCREMENTAL_A      3
02370 #define LZO_HASH_LZO_INCREMENTAL_B      4
02371 
02372 #if !defined(LZO_HASH)
02373 #  error "choose a hashing strategy"
02374 #endif
02375 
02376 #undef DM
02377 #undef DX
02378 
02379 #if (DL_MIN_LEN == 3)
02380 #  define _DV2_A(p,shift1,shift2) \
02381         (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2])
02382 #  define _DV2_B(p,shift1,shift2) \
02383         (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0])
02384 #  define _DV3_B(p,shift1,shift2,shift3) \
02385         ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0])
02386 #elif (DL_MIN_LEN == 2)
02387 #  define _DV2_A(p,shift1,shift2) \
02388         (( (lzo_xint)(p[0]) << shift1) ^ p[1])
02389 #  define _DV2_B(p,shift1,shift2) \
02390         (( (lzo_xint)(p[1]) << shift1) ^ p[2])
02391 #else
02392 #  error "invalid DL_MIN_LEN"
02393 #endif
02394 #define _DV_A(p,shift)      _DV2_A(p,shift,shift)
02395 #define _DV_B(p,shift)      _DV2_B(p,shift,shift)
02396 #define DA2(p,s1,s2) \
02397         (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0])
02398 #define DS2(p,s1,s2) \
02399         (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0])
02400 #define DX2(p,s1,s2) \
02401         (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0])
02402 #define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0])
02403 #define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0])
02404 #define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0])
02405 #define DMS(v,s)        ((lzo_uint) (((v) & (D_MASK >> (s))) << (s)))
02406 #define DM(v)           DMS(v,0)
02407 
02408 #if (LZO_HASH == LZO_HASH_GZIP)
02409 #  define _DINDEX(dv,p)     (_DV_A((p),DL_SHIFT))
02410 
02411 #elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL)
02412 #  define __LZO_HASH_INCREMENTAL
02413 #  define DVAL_FIRST(dv,p)  dv = _DV_A((p),DL_SHIFT)
02414 #  define DVAL_NEXT(dv,p)   dv = (((dv) << DL_SHIFT) ^ p[2])
02415 #  define _DINDEX(dv,p)     (dv)
02416 #  define DVAL_LOOKAHEAD    DL_MIN_LEN
02417 
02418 #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A)
02419 #  define __LZO_HASH_INCREMENTAL
02420 #  define DVAL_FIRST(dv,p)  dv = _DV_A((p),5)
02421 #  define DVAL_NEXT(dv,p) \
02422                 dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2])
02423 #  define _DINDEX(dv,p)     ((DMUL(0x9f5f,dv)) >> 5)
02424 #  define DVAL_LOOKAHEAD    DL_MIN_LEN
02425 
02426 #elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B)
02427 #  define __LZO_HASH_INCREMENTAL
02428 #  define DVAL_FIRST(dv,p)  dv = _DV_B((p),5)
02429 #  define DVAL_NEXT(dv,p) \
02430                 dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5)))
02431 #  define _DINDEX(dv,p)     ((DMUL(0x9f5f,dv)) >> 5)
02432 #  define DVAL_LOOKAHEAD    DL_MIN_LEN
02433 
02434 #else
02435 #  error "choose a hashing strategy"
02436 #endif
02437 
02438 #ifndef DINDEX
02439 #define DINDEX(dv,p)        ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS)
02440 #endif
02441 #if !defined(DINDEX1) && defined(D_INDEX1)
02442 #define DINDEX1             D_INDEX1
02443 #endif
02444 #if !defined(DINDEX2) && defined(D_INDEX2)
02445 #define DINDEX2             D_INDEX2
02446 #endif
02447 
02448 #if !defined(__LZO_HASH_INCREMENTAL)
02449 #  define DVAL_FIRST(dv,p)  ((void) 0)
02450 #  define DVAL_NEXT(dv,p)   ((void) 0)
02451 #  define DVAL_LOOKAHEAD    0
02452 #endif
02453 
02454 #if !defined(DVAL_ASSERT)
02455 #if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG)
02456 static void DVAL_ASSERT(lzo_xint dv, const lzo_bytep p)
02457 {
02458     lzo_xint df;
02459     DVAL_FIRST(df,(p));
02460     assert(DINDEX(dv,p) == DINDEX(df,p));
02461 }
02462 #else
02463 #  define DVAL_ASSERT(dv,p) ((void) 0)
02464 #endif
02465 #endif
02466 
02467 #if defined(LZO_DICT_USE_PTR)
02468 #  define DENTRY(p,in)                          (p)
02469 #  define GINDEX(m_pos,m_off,dict,dindex,in)    m_pos = dict[dindex]
02470 #else
02471 #  define DENTRY(p,in)                          ((lzo_uint) ((p)-(in)))
02472 #  define GINDEX(m_pos,m_off,dict,dindex,in)    m_off = dict[dindex]
02473 #endif
02474 
02475 #if (DD_BITS == 0)
02476 
02477 #  define UPDATE_D(dict,drun,dv,p,in)       dict[ DINDEX(dv,p) ] = DENTRY(p,in)
02478 #  define UPDATE_I(dict,drun,index,p,in)    dict[index] = DENTRY(p,in)
02479 #  define UPDATE_P(ptr,drun,p,in)           (ptr)[0] = DENTRY(p,in)
02480 
02481 #else
02482 
02483 #  define UPDATE_D(dict,drun,dv,p,in)   \
02484         dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
02485 #  define UPDATE_I(dict,drun,index,p,in)    \
02486         dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK
02487 #  define UPDATE_P(ptr,drun,p,in)   \
02488         (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK
02489 
02490 #endif
02491 
02492 #if defined(LZO_DICT_USE_PTR)
02493 
02494 #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
02495         (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset)
02496 
02497 #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
02498     (BOUNDS_CHECKING_OFF_IN_EXPR(( \
02499         m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \
02500         PTR_LT(m_pos,in) || \
02501         (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) <= 0 || \
02502          m_off > max_offset )))
02503 
02504 #else
02505 
02506 #define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \
02507         (m_off == 0 || \
02508          ((m_off = pd(ip, in) - m_off) > max_offset) || \
02509          (m_pos = (ip) - (m_off), 0) )
02510 
02511 #define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \
02512         (pd(ip, in) <= m_off || \
02513          ((m_off = pd(ip, in) - m_off) > max_offset) || \
02514          (m_pos = (ip) - (m_off), 0) )
02515 
02516 #endif
02517 
02518 #if defined(LZO_DETERMINISTIC)
02519 #  define LZO_CHECK_MPOS    LZO_CHECK_MPOS_DET
02520 #else
02521 #  define LZO_CHECK_MPOS    LZO_CHECK_MPOS_NON_DET
02522 #endif
02523 
02524 #ifdef __cplusplus
02525 }
02526 #endif
02527 
02528 #endif
02529 
02530 #endif
02531 
02532 #endif
02533 
02534 #define DO_COMPRESS     lzo1x_1_compress
02535 
02536 static __lzo_noinline lzo_uint
02537 do_compress ( const lzo_bytep in , lzo_uint  in_len,
02538                     lzo_bytep out, lzo_uintp out_len,
02539                     lzo_voidp wrkmem )
02540 {
02541     register const lzo_bytep ip;
02542     lzo_bytep op;
02543     const lzo_bytep const in_end = in + in_len;
02544     const lzo_bytep const ip_end = in + in_len - M2_MAX_LEN - 5;
02545     const lzo_bytep ii;
02546     lzo_dict_p const dict = (lzo_dict_p) wrkmem;
02547 
02548     op = out;
02549     ip = in;
02550     ii = ip;
02551 
02552     ip += 4;
02553     for (;;)
02554     {
02555         register const lzo_bytep m_pos;
02556         lzo_uint m_off;
02557         lzo_uint m_len;
02558         lzo_uint dindex;
02559 
02560         DINDEX1(dindex,ip);
02561         GINDEX(m_pos,m_off,dict,dindex,in);
02562         if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
02563             goto literal;
02564 #if 1
02565         if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
02566             goto try_match;
02567         DINDEX2(dindex,ip);
02568 #endif
02569         GINDEX(m_pos,m_off,dict,dindex,in);
02570         if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
02571             goto literal;
02572         if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
02573             goto try_match;
02574         goto literal;
02575 
02576 try_match:
02577 #if 1 && defined(LZO_UNALIGNED_OK_2)
02578         if (* (const lzo_ushortp) m_pos != * (const lzo_ushortp) ip)
02579 #else
02580         if (m_pos[0] != ip[0] || m_pos[1] != ip[1])
02581 #endif
02582         {
02583         }
02584         else
02585         {
02586             if __lzo_likely(m_pos[2] == ip[2])
02587             {
02588 #if 0
02589                 if (m_off <= M2_MAX_OFFSET)
02590                     goto match;
02591                 if (lit <= 3)
02592                     goto match;
02593                 if (lit == 3)
02594                 {
02595                     assert(op - 2 > out); op[-2] |= LZO_BYTE(3);
02596                     *op++ = *ii++; *op++ = *ii++; *op++ = *ii++;
02597                     goto code_match;
02598                 }
02599                 if (m_pos[3] == ip[3])
02600 #endif
02601                     goto match;
02602             }
02603             else
02604             {
02605 #if 0
02606 #if 0
02607                 if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3)
02608 #else
02609                 if (m_off <= M1_MAX_OFFSET && lit == 3)
02610 #endif
02611                 {
02612                     register lzo_uint t;
02613 
02614                     t = lit;
02615                     assert(op - 2 > out); op[-2] |= LZO_BYTE(t);
02616                     do *op++ = *ii++; while (--t > 0);
02617                     assert(ii == ip);
02618                     m_off -= 1;
02619                     *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
02620                     *op++ = LZO_BYTE(m_off >> 2);
02621                     ip += 2;
02622                     goto match_done;
02623                 }
02624 #endif
02625             }
02626         }
02627 
02628 literal:
02629         UPDATE_I(dict,0,dindex,ip,in);
02630         ++ip;
02631         if __lzo_unlikely(ip >= ip_end)
02632             break;
02633         continue;
02634 
02635 match:
02636         UPDATE_I(dict,0,dindex,ip,in);
02637         if (pd(ip,ii) > 0)
02638         {
02639             register lzo_uint t = pd(ip,ii);
02640 
02641             if (t <= 3)
02642             {
02643                 assert(op - 2 > out);
02644                 op[-2] |= LZO_BYTE(t);
02645             }
02646             else if (t <= 18)
02647                 *op++ = LZO_BYTE(t - 3);
02648             else
02649             {
02650                 register lzo_uint tt = t - 18;
02651 
02652                 *op++ = 0;
02653                 while (tt > 255)
02654                 {
02655                     tt -= 255;
02656                     *op++ = 0;
02657                 }
02658                 assert(tt > 0);
02659                 *op++ = LZO_BYTE(tt);
02660             }
02661             do *op++ = *ii++; while (--t > 0);
02662         }
02663 
02664         assert(ii == ip);
02665         ip += 3;
02666         if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ ||
02667             m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++
02668 #ifdef LZO1Y
02669             || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++
02670             || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++
02671 #endif
02672            )
02673         {
02674             --ip;
02675             m_len = pd(ip, ii);
02676             assert(m_len >= 3); assert(m_len <= M2_MAX_LEN);
02677 
02678             if (m_off <= M2_MAX_OFFSET)
02679             {
02680                 m_off -= 1;
02681 #if defined(LZO1X)
02682                 *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
02683                 *op++ = LZO_BYTE(m_off >> 3);
02684 #elif defined(LZO1Y)
02685                 *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2));
02686                 *op++ = LZO_BYTE(m_off >> 2);
02687 #endif
02688             }
02689             else if (m_off <= M3_MAX_OFFSET)
02690             {
02691                 m_off -= 1;
02692                 *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
02693                 goto m3_m4_offset;
02694             }
02695             else
02696 #if defined(LZO1X)
02697             {
02698                 m_off -= 0x4000;
02699                 assert(m_off > 0); assert(m_off <= 0x7fff);
02700                 *op++ = LZO_BYTE(M4_MARKER |
02701                                  ((m_off & 0x4000) >> 11) | (m_len - 2));
02702                 goto m3_m4_offset;
02703             }
02704 #elif defined(LZO1Y)
02705                 goto m4_match;
02706 #endif
02707         }
02708         else
02709         {
02710             {
02711                 const lzo_bytep end = in_end;
02712                 const lzo_bytep m = m_pos + M2_MAX_LEN + 1;
02713                 while (ip < end && *m == *ip)
02714                     m++, ip++;
02715                 m_len = pd(ip, ii);
02716             }
02717             assert(m_len > M2_MAX_LEN);
02718 
02719             if (m_off <= M3_MAX_OFFSET)
02720             {
02721                 m_off -= 1;
02722                 if (m_len <= 33)
02723                     *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
02724                 else
02725                 {
02726                     m_len -= 33;
02727                     *op++ = M3_MARKER | 0;
02728                     goto m3_m4_len;
02729                 }
02730             }
02731             else
02732             {
02733 #if defined(LZO1Y)
02734 m4_match:
02735 #endif
02736                 m_off -= 0x4000;
02737                 assert(m_off > 0); assert(m_off <= 0x7fff);
02738                 if (m_len <= M4_MAX_LEN)
02739                     *op++ = LZO_BYTE(M4_MARKER |
02740                                      ((m_off & 0x4000) >> 11) | (m_len - 2));
02741                 else
02742                 {
02743                     m_len -= M4_MAX_LEN;
02744                     *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11));
02745 m3_m4_len:
02746                     while (m_len > 255)
02747                     {
02748                         m_len -= 255;
02749                         *op++ = 0;
02750                     }
02751                     assert(m_len > 0);
02752                     *op++ = LZO_BYTE(m_len);
02753                 }
02754             }
02755 
02756 m3_m4_offset:
02757             *op++ = LZO_BYTE((m_off & 63) << 2);
02758             *op++ = LZO_BYTE(m_off >> 6);
02759         }
02760 
02761 #if 0
02762 match_done:
02763 #endif
02764         ii = ip;
02765         if __lzo_unlikely(ip >= ip_end)
02766             break;
02767     }
02768 
02769     *out_len = pd(op, out);
02770     return pd(in_end,ii);
02771 }
02772 
02773 LZO_PUBLIC(int)
02774 DO_COMPRESS      ( const lzo_bytep in , lzo_uint  in_len,
02775                          lzo_bytep out, lzo_uintp out_len,
02776                          lzo_voidp wrkmem )
02777 {
02778     lzo_bytep op = out;
02779     lzo_uint t;
02780 
02781     if __lzo_unlikely(in_len <= M2_MAX_LEN + 5)
02782         t = in_len;
02783     else
02784     {
02785         t = do_compress(in,in_len,op,out_len,wrkmem);
02786         op += *out_len;
02787     }
02788 
02789     if (t > 0)
02790     {
02791         const lzo_bytep ii = in + in_len - t;
02792 
02793         if (op == out && t <= 238)
02794             *op++ = LZO_BYTE(17 + t);
02795         else if (t <= 3)
02796             op[-2] |= LZO_BYTE(t);
02797         else if (t <= 18)
02798             *op++ = LZO_BYTE(t - 3);
02799         else
02800         {
02801             lzo_uint tt = t - 18;
02802 
02803             *op++ = 0;
02804             while (tt > 255)
02805             {
02806                 tt -= 255;
02807                 *op++ = 0;
02808             }
02809             assert(tt > 0);
02810             *op++ = LZO_BYTE(tt);
02811         }
02812         do *op++ = *ii++; while (--t > 0);
02813     }
02814 
02815     *op++ = M4_MARKER | 1;
02816     *op++ = 0;
02817     *op++ = 0;
02818 
02819     *out_len = pd(op, out);
02820     return LZO_E_OK;
02821 }
02822 
02823 #endif
02824 
02825 #undef do_compress
02826 #undef DO_COMPRESS
02827 #undef LZO_HASH
02828 
02829 #undef LZO_TEST_OVERRUN
02830 #undef DO_DECOMPRESS
02831 #define DO_DECOMPRESS       lzo1x_decompress
02832 
02833 #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS)
02834 
02835 #if defined(LZO_TEST_OVERRUN)
02836 #  if !defined(LZO_TEST_OVERRUN_INPUT)
02837 #    define LZO_TEST_OVERRUN_INPUT       2
02838 #  endif
02839 #  if !defined(LZO_TEST_OVERRUN_OUTPUT)
02840 #    define LZO_TEST_OVERRUN_OUTPUT      2
02841 #  endif
02842 #  if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
02843 #    define LZO_TEST_OVERRUN_LOOKBEHIND
02844 #  endif
02845 #endif
02846 
02847 #undef TEST_IP
02848 #undef TEST_OP
02849 #undef TEST_LB
02850 #undef TEST_LBO
02851 #undef NEED_IP
02852 #undef NEED_OP
02853 #undef HAVE_TEST_IP
02854 #undef HAVE_TEST_OP
02855 #undef HAVE_NEED_IP
02856 #undef HAVE_NEED_OP
02857 #undef HAVE_ANY_IP
02858 #undef HAVE_ANY_OP
02859 
02860 #if defined(LZO_TEST_OVERRUN_INPUT)
02861 #  if (LZO_TEST_OVERRUN_INPUT >= 1)
02862 #    define TEST_IP             (ip < ip_end)
02863 #  endif
02864 #  if (LZO_TEST_OVERRUN_INPUT >= 2)
02865 #    define NEED_IP(x) \
02866             if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x))  goto input_overrun
02867 #  endif
02868 #endif
02869 
02870 #if defined(LZO_TEST_OVERRUN_OUTPUT)
02871 #  if (LZO_TEST_OVERRUN_OUTPUT >= 1)
02872 #    define TEST_OP             (op <= op_end)
02873 #  endif
02874 #  if (LZO_TEST_OVERRUN_OUTPUT >= 2)
02875 #    undef TEST_OP
02876 #    define NEED_OP(x) \
02877             if ((lzo_uint)(op_end - op) < (lzo_uint)(x))  goto output_overrun
02878 #  endif
02879 #endif
02880 
02881 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
02882 #  define TEST_LB(m_pos)        if (m_pos < out || m_pos >= op) goto lookbehind_overrun
02883 #  define TEST_LBO(m_pos,o)     if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun
02884 #else
02885 #  define TEST_LB(m_pos)        ((void) 0)
02886 #  define TEST_LBO(m_pos,o)     ((void) 0)
02887 #endif
02888 
02889 #if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
02890 #  define TEST_IP               (ip < ip_end)
02891 #endif
02892 
02893 #if defined(TEST_IP)
02894 #  define HAVE_TEST_IP
02895 #else
02896 #  define TEST_IP               1
02897 #endif
02898 #if defined(TEST_OP)
02899 #  define HAVE_TEST_OP
02900 #else
02901 #  define TEST_OP               1
02902 #endif
02903 
02904 #if defined(NEED_IP)
02905 #  define HAVE_NEED_IP
02906 #else
02907 #  define NEED_IP(x)            ((void) 0)
02908 #endif
02909 #if defined(NEED_OP)
02910 #  define HAVE_NEED_OP
02911 #else
02912 #  define NEED_OP(x)            ((void) 0)
02913 #endif
02914 
02915 #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
02916 #  define HAVE_ANY_IP
02917 #endif
02918 #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
02919 #  define HAVE_ANY_OP
02920 #endif
02921 
02922 #undef __COPY4
02923 #define __COPY4(dst,src)    * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
02924 
02925 #undef COPY4
02926 #if defined(LZO_UNALIGNED_OK_4)
02927 #  define COPY4(dst,src)    __COPY4(dst,src)
02928 #elif defined(LZO_ALIGNED_OK_4)
02929 #  define COPY4(dst,src)    __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src))
02930 #endif
02931 
02932 #if defined(DO_DECOMPRESS)
02933 LZO_PUBLIC(int)
02934 DO_DECOMPRESS  ( const lzo_bytep in , lzo_uint  in_len,
02935                        lzo_bytep out, lzo_uintp out_len,
02936                        lzo_voidp wrkmem )
02937 #endif
02938 {
02939     register lzo_bytep op;
02940     register const lzo_bytep ip;
02941     register lzo_uint t;
02942 #if defined(COPY_DICT)
02943     lzo_uint m_off;
02944     const lzo_bytep dict_end;
02945 #else
02946     register const lzo_bytep m_pos;
02947 #endif
02948 
02949     const lzo_bytep const ip_end = in + in_len;
02950 #if defined(HAVE_ANY_OP)
02951     lzo_bytep const op_end = out + *out_len;
02952 #endif
02953 #if defined(LZO1Z)
02954     lzo_uint last_m_off = 0;
02955 #endif
02956 
02957     LZO_UNUSED(wrkmem);
02958 
02959 #if defined(COPY_DICT)
02960     if (dict)
02961     {
02962         if (dict_len > M4_MAX_OFFSET)
02963         {
02964             dict += dict_len - M4_MAX_OFFSET;
02965             dict_len = M4_MAX_OFFSET;
02966         }
02967         dict_end = dict + dict_len;
02968     }
02969     else
02970     {
02971         dict_len = 0;
02972         dict_end = NULL;
02973     }
02974 #endif
02975 
02976     *out_len = 0;
02977 
02978     op = out;
02979     ip = in;
02980 
02981     if (*ip > 17)
02982     {
02983         t = *ip++ - 17;
02984         if (t < 4)
02985             goto match_next;
02986         assert(t > 0); NEED_OP(t); NEED_IP(t+1);
02987         do *op++ = *ip++; while (--t > 0);
02988         goto first_literal_run;
02989     }
02990 
02991     while (TEST_IP && TEST_OP)
02992     {
02993         t = *ip++;
02994         if (t >= 16)
02995             goto match;
02996         if (t == 0)
02997         {
02998             NEED_IP(1);
02999             while (*ip == 0)
03000             {
03001                 t += 255;
03002                 ip++;
03003                 NEED_IP(1);
03004             }
03005             t += 15 + *ip++;
03006         }
03007         assert(t > 0); NEED_OP(t+3); NEED_IP(t+4);
03008 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
03009 #if !defined(LZO_UNALIGNED_OK_4)
03010         if (PTR_ALIGNED2_4(op,ip))
03011         {
03012 #endif
03013         COPY4(op,ip);
03014         op += 4; ip += 4;
03015         if (--t > 0)
03016         {
03017             if (t >= 4)
03018             {
03019                 do {
03020                     COPY4(op,ip);
03021                     op += 4; ip += 4; t -= 4;
03022                 } while (t >= 4);
03023                 if (t > 0) do *op++ = *ip++; while (--t > 0);
03024             }
03025             else
03026                 do *op++ = *ip++; while (--t > 0);
03027         }
03028 #if !defined(LZO_UNALIGNED_OK_4)
03029         }
03030         else
03031 #endif
03032 #endif
03033 #if !defined(LZO_UNALIGNED_OK_4)
03034         {
03035             *op++ = *ip++; *op++ = *ip++; *op++ = *ip++;
03036             do *op++ = *ip++; while (--t > 0);
03037         }
03038 #endif
03039 
03040 first_literal_run:
03041 
03042         t = *ip++;
03043         if (t >= 16)
03044             goto match;
03045 #if defined(COPY_DICT)
03046 #if defined(LZO1Z)
03047         m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
03048         last_m_off = m_off;
03049 #else
03050         m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2);
03051 #endif
03052         NEED_OP(3);
03053         t = 3; COPY_DICT(t,m_off)
03054 #else
03055 #if defined(LZO1Z)
03056         t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
03057         m_pos = op - t;
03058         last_m_off = t;
03059 #else
03060         m_pos = op - (1 + M2_MAX_OFFSET);
03061         m_pos -= t >> 2;
03062         m_pos -= *ip++ << 2;
03063 #endif
03064         TEST_LB(m_pos); NEED_OP(3);
03065         *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos;
03066 #endif
03067         goto match_done;
03068 
03069         do {
03070 match:
03071             if (t >= 64)
03072             {
03073 #if defined(COPY_DICT)
03074 #if defined(LZO1X)
03075                 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3);
03076                 t = (t >> 5) - 1;
03077 #elif defined(LZO1Y)
03078                 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2);
03079                 t = (t >> 4) - 3;
03080 #elif defined(LZO1Z)
03081                 m_off = t & 0x1f;
03082                 if (m_off >= 0x1c)
03083                     m_off = last_m_off;
03084                 else
03085                 {
03086                     m_off = 1 + (m_off << 6) + (*ip++ >> 2);
03087                     last_m_off = m_off;
03088                 }
03089                 t = (t >> 5) - 1;
03090 #endif
03091 #else
03092 #if defined(LZO1X)
03093                 m_pos = op - 1;
03094                 m_pos -= (t >> 2) & 7;
03095                 m_pos -= *ip++ << 3;
03096                 t = (t >> 5) - 1;
03097 #elif defined(LZO1Y)
03098                 m_pos = op - 1;
03099                 m_pos -= (t >> 2) & 3;
03100                 m_pos -= *ip++ << 2;
03101                 t = (t >> 4) - 3;
03102 #elif defined(LZO1Z)
03103                 {
03104                     lzo_uint off = t & 0x1f;
03105                     m_pos = op;
03106                     if (off >= 0x1c)
03107                     {
03108                         assert(last_m_off > 0);
03109                         m_pos -= last_m_off;
03110                     }
03111                     else
03112                     {
03113                         off = 1 + (off << 6) + (*ip++ >> 2);
03114                         m_pos -= off;
03115                         last_m_off = off;
03116                     }
03117                 }
03118                 t = (t >> 5) - 1;
03119 #endif
03120                 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
03121                 goto copy_match;
03122 #endif
03123             }
03124             else if (t >= 32)
03125             {
03126                 t &= 31;
03127                 if (t == 0)
03128                 {
03129                     NEED_IP(1);
03130                     while (*ip == 0)
03131                     {
03132                         t += 255;
03133                         ip++;
03134                         NEED_IP(1);
03135                     }
03136                     t += 31 + *ip++;
03137                 }
03138 #if defined(COPY_DICT)
03139 #if defined(LZO1Z)
03140                 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2);
03141                 last_m_off = m_off;
03142 #else
03143                 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6);
03144 #endif
03145 #else
03146 #if defined(LZO1Z)
03147                 {
03148                     lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2);
03149                     m_pos = op - off;
03150                     last_m_off = off;
03151                 }
03152 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
03153                 m_pos = op - 1;
03154                 m_pos -= (* (const lzo_ushortp) ip) >> 2;
03155 #else
03156                 m_pos = op - 1;
03157                 m_pos -= (ip[0] >> 2) + (ip[1] << 6);
03158 #endif
03159 #endif
03160                 ip += 2;
03161             }
03162             else if (t >= 16)
03163             {
03164 #if defined(COPY_DICT)
03165                 m_off = (t & 8) << 11;
03166 #else
03167                 m_pos = op;
03168                 m_pos -= (t & 8) << 11;
03169 #endif
03170                 t &= 7;
03171                 if (t == 0)
03172                 {
03173                     NEED_IP(1);
03174                     while (*ip == 0)
03175                     {
03176                         t += 255;
03177                         ip++;
03178                         NEED_IP(1);
03179                     }
03180                     t += 7 + *ip++;
03181                 }
03182 #if defined(COPY_DICT)
03183 #if defined(LZO1Z)
03184                 m_off += (ip[0] << 6) + (ip[1] >> 2);
03185 #else
03186                 m_off += (ip[0] >> 2) + (ip[1] << 6);
03187 #endif
03188                 ip += 2;
03189                 if (m_off == 0)
03190                     goto eof_found;
03191                 m_off += 0x4000;
03192 #if defined(LZO1Z)
03193                 last_m_off = m_off;
03194 #endif
03195 #else
03196 #if defined(LZO1Z)
03197                 m_pos -= (ip[0] << 6) + (ip[1] >> 2);
03198 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
03199                 m_pos -= (* (const lzo_ushortp) ip) >> 2;
03200 #else
03201                 m_pos -= (ip[0] >> 2) + (ip[1] << 6);
03202 #endif
03203                 ip += 2;
03204                 if (m_pos == op)
03205                     goto eof_found;
03206                 m_pos -= 0x4000;
03207 #if defined(LZO1Z)
03208                 last_m_off = pd((const lzo_bytep)op, m_pos);
03209 #endif
03210 #endif
03211             }
03212             else
03213             {
03214 #if defined(COPY_DICT)
03215 #if defined(LZO1Z)
03216                 m_off = 1 + (t << 6) + (*ip++ >> 2);
03217                 last_m_off = m_off;
03218 #else
03219                 m_off = 1 + (t >> 2) + (*ip++ << 2);
03220 #endif
03221                 NEED_OP(2);
03222                 t = 2; COPY_DICT(t,m_off)
03223 #else
03224 #if defined(LZO1Z)
03225                 t = 1 + (t << 6) + (*ip++ >> 2);
03226                 m_pos = op - t;
03227                 last_m_off = t;
03228 #else
03229                 m_pos = op - 1;
03230                 m_pos -= t >> 2;
03231                 m_pos -= *ip++ << 2;
03232 #endif
03233                 TEST_LB(m_pos); NEED_OP(2);
03234                 *op++ = *m_pos++; *op++ = *m_pos;
03235 #endif
03236                 goto match_done;
03237             }
03238 
03239 #if defined(COPY_DICT)
03240 
03241             NEED_OP(t+3-1);
03242             t += 3-1; COPY_DICT(t,m_off)
03243 
03244 #else
03245 
03246             TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
03247 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
03248 #if !defined(LZO_UNALIGNED_OK_4)
03249             if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos))
03250             {
03251                 assert((op - m_pos) >= 4);
03252 #else
03253             if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4)
03254             {
03255 #endif
03256                 COPY4(op,m_pos);
03257                 op += 4; m_pos += 4; t -= 4 - (3 - 1);
03258                 do {
03259                     COPY4(op,m_pos);
03260                     op += 4; m_pos += 4; t -= 4;
03261                 } while (t >= 4);
03262                 if (t > 0) do *op++ = *m_pos++; while (--t > 0);
03263             }
03264             else
03265 #endif
03266             {
03267 copy_match:
03268                 *op++ = *m_pos++; *op++ = *m_pos++;
03269                 do *op++ = *m_pos++; while (--t > 0);
03270             }
03271 
03272 #endif
03273 
03274 match_done:
03275 #if defined(LZO1Z)
03276             t = ip[-1] & 3;
03277 #else
03278             t = ip[-2] & 3;
03279 #endif
03280             if (t == 0)
03281                 break;
03282 
03283 match_next:
03284             assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1);
03285 #if 0
03286             do *op++ = *ip++; while (--t > 0);
03287 #else
03288             *op++ = *ip++;
03289             if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
03290 #endif
03291             t = *ip++;
03292         } while (TEST_IP && TEST_OP);
03293     }
03294 
03295 #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
03296     *out_len = pd(op, out);
03297     return LZO_E_EOF_NOT_FOUND;
03298 #endif
03299 
03300 eof_found:
03301     assert(t == 1);
03302     *out_len = pd(op, out);
03303     return (ip == ip_end ? LZO_E_OK :
03304            (ip < ip_end  ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
03305 
03306 #if defined(HAVE_NEED_IP)
03307 input_overrun:
03308     *out_len = pd(op, out);
03309     return LZO_E_INPUT_OVERRUN;
03310 #endif
03311 
03312 #if defined(HAVE_NEED_OP)
03313 output_overrun:
03314     *out_len = pd(op, out);
03315     return LZO_E_OUTPUT_OVERRUN;
03316 #endif
03317 
03318 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
03319 lookbehind_overrun:
03320     *out_len = pd(op, out);
03321     return LZO_E_LOOKBEHIND_OVERRUN;
03322 #endif
03323 }
03324 
03325 #endif
03326 
03327 #define LZO_TEST_OVERRUN
03328 #undef DO_DECOMPRESS
03329 #define DO_DECOMPRESS       lzo1x_decompress_safe
03330 
03331 #if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE)
03332 
03333 #if defined(LZO_TEST_OVERRUN)
03334 #  if !defined(LZO_TEST_OVERRUN_INPUT)
03335 #    define LZO_TEST_OVERRUN_INPUT       2
03336 #  endif
03337 #  if !defined(LZO_TEST_OVERRUN_OUTPUT)
03338 #    define LZO_TEST_OVERRUN_OUTPUT      2
03339 #  endif
03340 #  if !defined(LZO_TEST_OVERRUN_LOOKBEHIND)
03341 #    define LZO_TEST_OVERRUN_LOOKBEHIND
03342 #  endif
03343 #endif
03344 
03345 #undef TEST_IP
03346 #undef TEST_OP
03347 #undef TEST_LB
03348 #undef TEST_LBO
03349 #undef NEED_IP
03350 #undef NEED_OP
03351 #undef HAVE_TEST_IP
03352 #undef HAVE_TEST_OP
03353 #undef HAVE_NEED_IP
03354 #undef HAVE_NEED_OP
03355 #undef HAVE_ANY_IP
03356 #undef HAVE_ANY_OP
03357 
03358 #if defined(LZO_TEST_OVERRUN_INPUT)
03359 #  if (LZO_TEST_OVERRUN_INPUT >= 1)
03360 #    define TEST_IP             (ip < ip_end)
03361 #  endif
03362 #  if (LZO_TEST_OVERRUN_INPUT >= 2)
03363 #    define NEED_IP(x) \
03364             if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x))  goto input_overrun
03365 #  endif
03366 #endif
03367 
03368 #if defined(LZO_TEST_OVERRUN_OUTPUT)
03369 #  if (LZO_TEST_OVERRUN_OUTPUT >= 1)
03370 #    define TEST_OP             (op <= op_end)
03371 #  endif
03372 #  if (LZO_TEST_OVERRUN_OUTPUT >= 2)
03373 #    undef TEST_OP
03374 #    define NEED_OP(x) \
03375             if ((lzo_uint)(op_end - op) < (lzo_uint)(x))  goto output_overrun
03376 #  endif
03377 #endif
03378 
03379 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
03380 #  define TEST_LB(m_pos)        if (m_pos < out || m_pos >= op) goto lookbehind_overrun
03381 #  define TEST_LBO(m_pos,o)     if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun
03382 #else
03383 #  define TEST_LB(m_pos)        ((void) 0)
03384 #  define TEST_LBO(m_pos,o)     ((void) 0)
03385 #endif
03386 
03387 #if !defined(LZO_EOF_CODE) && !defined(TEST_IP)
03388 #  define TEST_IP               (ip < ip_end)
03389 #endif
03390 
03391 #if defined(TEST_IP)
03392 #  define HAVE_TEST_IP
03393 #else
03394 #  define TEST_IP               1
03395 #endif
03396 #if defined(TEST_OP)
03397 #  define HAVE_TEST_OP
03398 #else
03399 #  define TEST_OP               1
03400 #endif
03401 
03402 #if defined(NEED_IP)
03403 #  define HAVE_NEED_IP
03404 #else
03405 #  define NEED_IP(x)            ((void) 0)
03406 #endif
03407 #if defined(NEED_OP)
03408 #  define HAVE_NEED_OP
03409 #else
03410 #  define NEED_OP(x)            ((void) 0)
03411 #endif
03412 
03413 #if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP)
03414 #  define HAVE_ANY_IP
03415 #endif
03416 #if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP)
03417 #  define HAVE_ANY_OP
03418 #endif
03419 
03420 #undef __COPY4
03421 #define __COPY4(dst,src)    * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
03422 
03423 #undef COPY4
03424 #if defined(LZO_UNALIGNED_OK_4)
03425 #  define COPY4(dst,src)    __COPY4(dst,src)
03426 #elif defined(LZO_ALIGNED_OK_4)
03427 #  define COPY4(dst,src)    __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src))
03428 #endif
03429 
03430 #if defined(DO_DECOMPRESS)
03431 LZO_PUBLIC(int)
03432 DO_DECOMPRESS  ( const lzo_bytep in , lzo_uint  in_len,
03433                        lzo_bytep out, lzo_uintp out_len,
03434                        lzo_voidp wrkmem )
03435 #endif
03436 {
03437     register lzo_bytep op;
03438     register const lzo_bytep ip;
03439     register lzo_uint t;
03440 #if defined(COPY_DICT)
03441     lzo_uint m_off;
03442     const lzo_bytep dict_end;
03443 #else
03444     register const lzo_bytep m_pos;
03445 #endif
03446 
03447     const lzo_bytep const ip_end = in + in_len;
03448 #if defined(HAVE_ANY_OP)
03449     lzo_bytep const op_end = out + *out_len;
03450 #endif
03451 #if defined(LZO1Z)
03452     lzo_uint last_m_off = 0;
03453 #endif
03454 
03455     LZO_UNUSED(wrkmem);
03456 
03457 #if defined(COPY_DICT)
03458     if (dict)
03459     {
03460         if (dict_len > M4_MAX_OFFSET)
03461         {
03462             dict += dict_len - M4_MAX_OFFSET;
03463             dict_len = M4_MAX_OFFSET;
03464         }
03465         dict_end = dict + dict_len;
03466     }
03467     else
03468     {
03469         dict_len = 0;
03470         dict_end = NULL;
03471     }
03472 #endif
03473 
03474     *out_len = 0;
03475 
03476     op = out;
03477     ip = in;
03478 
03479     if (*ip > 17)
03480     {
03481         t = *ip++ - 17;
03482         if (t < 4)
03483             goto match_next;
03484         assert(t > 0); NEED_OP(t); NEED_IP(t+1);
03485         do *op++ = *ip++; while (--t > 0);
03486         goto first_literal_run;
03487     }
03488 
03489     while (TEST_IP && TEST_OP)
03490     {
03491         t = *ip++;
03492         if (t >= 16)
03493             goto match;
03494         if (t == 0)
03495         {
03496             NEED_IP(1);
03497             while (*ip == 0)
03498             {
03499                 t += 255;
03500                 ip++;
03501                 NEED_IP(1);
03502             }
03503             t += 15 + *ip++;
03504         }
03505         assert(t > 0); NEED_OP(t+3); NEED_IP(t+4);
03506 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
03507 #if !defined(LZO_UNALIGNED_OK_4)
03508         if (PTR_ALIGNED2_4(op,ip))
03509         {
03510 #endif
03511         COPY4(op,ip);
03512         op += 4; ip += 4;
03513         if (--t > 0)
03514         {
03515             if (t >= 4)
03516             {
03517                 do {
03518                     COPY4(op,ip);
03519                     op += 4; ip += 4; t -= 4;
03520                 } while (t >= 4);
03521                 if (t > 0) do *op++ = *ip++; while (--t > 0);
03522             }
03523             else
03524                 do *op++ = *ip++; while (--t > 0);
03525         }
03526 #if !defined(LZO_UNALIGNED_OK_4)
03527         }
03528         else
03529 #endif
03530 #endif
03531 #if !defined(LZO_UNALIGNED_OK_4)
03532         {
03533             *op++ = *ip++; *op++ = *ip++; *op++ = *ip++;
03534             do *op++ = *ip++; while (--t > 0);
03535         }
03536 #endif
03537 
03538 first_literal_run:
03539 
03540         t = *ip++;
03541         if (t >= 16)
03542             goto match;
03543 #if defined(COPY_DICT)
03544 #if defined(LZO1Z)
03545         m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
03546         last_m_off = m_off;
03547 #else
03548         m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2);
03549 #endif
03550         NEED_OP(3);
03551         t = 3; COPY_DICT(t,m_off)
03552 #else
03553 #if defined(LZO1Z)
03554         t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
03555         m_pos = op - t;
03556         last_m_off = t;
03557 #else
03558         m_pos = op - (1 + M2_MAX_OFFSET);
03559         m_pos -= t >> 2;
03560         m_pos -= *ip++ << 2;
03561 #endif
03562         TEST_LB(m_pos); NEED_OP(3);
03563         *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos;
03564 #endif
03565         goto match_done;
03566 
03567         do {
03568 match:
03569             if (t >= 64)
03570             {
03571 #if defined(COPY_DICT)
03572 #if defined(LZO1X)
03573                 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3);
03574                 t = (t >> 5) - 1;
03575 #elif defined(LZO1Y)
03576                 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2);
03577                 t = (t >> 4) - 3;
03578 #elif defined(LZO1Z)
03579                 m_off = t & 0x1f;
03580                 if (m_off >= 0x1c)
03581                     m_off = last_m_off;
03582                 else
03583                 {
03584                     m_off = 1 + (m_off << 6) + (*ip++ >> 2);
03585                     last_m_off = m_off;
03586                 }
03587                 t = (t >> 5) - 1;
03588 #endif
03589 #else
03590 #if defined(LZO1X)
03591                 m_pos = op - 1;
03592                 m_pos -= (t >> 2) & 7;
03593                 m_pos -= *ip++ << 3;
03594                 t = (t >> 5) - 1;
03595 #elif defined(LZO1Y)
03596                 m_pos = op - 1;
03597                 m_pos -= (t >> 2) & 3;
03598                 m_pos -= *ip++ << 2;
03599                 t = (t >> 4) - 3;
03600 #elif defined(LZO1Z)
03601                 {
03602                     lzo_uint off = t & 0x1f;
03603                     m_pos = op;
03604                     if (off >= 0x1c)
03605                     {
03606                         assert(last_m_off > 0);
03607                         m_pos -= last_m_off;
03608                     }
03609                     else
03610                     {
03611                         off = 1 + (off << 6) + (*ip++ >> 2);
03612                         m_pos -= off;
03613                         last_m_off = off;
03614                     }
03615                 }
03616                 t = (t >> 5) - 1;
03617 #endif
03618                 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
03619                 goto copy_match;
03620 #endif
03621             }
03622             else if (t >= 32)
03623             {
03624                 t &= 31;
03625                 if (t == 0)
03626                 {
03627                     NEED_IP(1);
03628                     while (*ip == 0)
03629                     {
03630                         t += 255;
03631                         ip++;
03632                         NEED_IP(1);
03633                     }
03634                     t += 31 + *ip++;
03635                 }
03636 #if defined(COPY_DICT)
03637 #if defined(LZO1Z)
03638                 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2);
03639                 last_m_off = m_off;
03640 #else
03641                 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6);
03642 #endif
03643 #else
03644 #if defined(LZO1Z)
03645                 {
03646                     lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2);
03647                     m_pos = op - off;
03648                     last_m_off = off;
03649                 }
03650 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
03651                 m_pos = op - 1;
03652                 m_pos -= (* (const lzo_ushortp) ip) >> 2;
03653 #else
03654                 m_pos = op - 1;
03655                 m_pos -= (ip[0] >> 2) + (ip[1] << 6);
03656 #endif
03657 #endif
03658                 ip += 2;
03659             }
03660             else if (t >= 16)
03661             {
03662 #if defined(COPY_DICT)
03663                 m_off = (t & 8) << 11;
03664 #else
03665                 m_pos = op;
03666                 m_pos -= (t & 8) << 11;
03667 #endif
03668                 t &= 7;
03669                 if (t == 0)
03670                 {
03671                     NEED_IP(1);
03672                     while (*ip == 0)
03673                     {
03674                         t += 255;
03675                         ip++;
03676                         NEED_IP(1);
03677                     }
03678                     t += 7 + *ip++;
03679                 }
03680 #if defined(COPY_DICT)
03681 #if defined(LZO1Z)
03682                 m_off += (ip[0] << 6) + (ip[1] >> 2);
03683 #else
03684                 m_off += (ip[0] >> 2) + (ip[1] << 6);
03685 #endif
03686                 ip += 2;
03687                 if (m_off == 0)
03688                     goto eof_found;
03689                 m_off += 0x4000;
03690 #if defined(LZO1Z)
03691                 last_m_off = m_off;
03692 #endif
03693 #else
03694 #if defined(LZO1Z)
03695                 m_pos -= (ip[0] << 6) + (ip[1] >> 2);
03696 #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
03697                 m_pos -= (* (const lzo_ushortp) ip) >> 2;
03698 #else
03699                 m_pos -= (ip[0] >> 2) + (ip[1] << 6);
03700 #endif
03701                 ip += 2;
03702                 if (m_pos == op)
03703                     goto eof_found;
03704                 m_pos -= 0x4000;
03705 #if defined(LZO1Z)
03706                 last_m_off = pd((const lzo_bytep)op, m_pos);
03707 #endif
03708 #endif
03709             }
03710             else
03711             {
03712 #if defined(COPY_DICT)
03713 #if defined(LZO1Z)
03714                 m_off = 1 + (t << 6) + (*ip++ >> 2);
03715                 last_m_off = m_off;
03716 #else
03717                 m_off = 1 + (t >> 2) + (*ip++ << 2);
03718 #endif
03719                 NEED_OP(2);
03720                 t = 2; COPY_DICT(t,m_off)
03721 #else
03722 #if defined(LZO1Z)
03723                 t = 1 + (t << 6) + (*ip++ >> 2);
03724                 m_pos = op - t;
03725                 last_m_off = t;
03726 #else
03727                 m_pos = op - 1;
03728                 m_pos -= t >> 2;
03729                 m_pos -= *ip++ << 2;
03730 #endif
03731                 TEST_LB(m_pos); NEED_OP(2);
03732                 *op++ = *m_pos++; *op++ = *m_pos;
03733 #endif
03734                 goto match_done;
03735             }
03736 
03737 #if defined(COPY_DICT)
03738 
03739             NEED_OP(t+3-1);
03740             t += 3-1; COPY_DICT(t,m_off)
03741 
03742 #else
03743 
03744             TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
03745 #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
03746 #if !defined(LZO_UNALIGNED_OK_4)
03747             if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos))
03748             {
03749                 assert((op - m_pos) >= 4);
03750 #else
03751             if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4)
03752             {
03753 #endif
03754                 COPY4(op,m_pos);
03755                 op += 4; m_pos += 4; t -= 4 - (3 - 1);
03756                 do {
03757                     COPY4(op,m_pos);
03758                     op += 4; m_pos += 4; t -= 4;
03759                 } while (t >= 4);
03760                 if (t > 0) do *op++ = *m_pos++; while (--t > 0);
03761             }
03762             else
03763 #endif
03764             {
03765 copy_match:
03766                 *op++ = *m_pos++; *op++ = *m_pos++;
03767                 do *op++ = *m_pos++; while (--t > 0);
03768             }
03769 
03770 #endif
03771 
03772 match_done:
03773 #if defined(LZO1Z)
03774             t = ip[-1] & 3;
03775 #else
03776             t = ip[-2] & 3;
03777 #endif
03778             if (t == 0)
03779                 break;
03780 
03781 match_next:
03782             assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1);
03783 #if 0
03784             do *op++ = *ip++; while (--t > 0);
03785 #else
03786             *op++ = *ip++;
03787             if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
03788 #endif
03789             t = *ip++;
03790         } while (TEST_IP && TEST_OP);
03791     }
03792 
03793 #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
03794     *out_len = pd(op, out);
03795     return LZO_E_EOF_NOT_FOUND;
03796 #endif
03797 
03798 eof_found:
03799     assert(t == 1);
03800     *out_len = pd(op, out);
03801     return (ip == ip_end ? LZO_E_OK :
03802            (ip < ip_end  ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
03803 
03804 #if defined(HAVE_NEED_IP)
03805 input_overrun:
03806     *out_len = pd(op, out);
03807     return LZO_E_INPUT_OVERRUN;
03808 #endif
03809 
03810 #if defined(HAVE_NEED_OP)
03811 output_overrun:
03812     *out_len = pd(op, out);
03813     return LZO_E_OUTPUT_OVERRUN;
03814 #endif
03815 
03816 #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
03817 lookbehind_overrun:
03818     *out_len = pd(op, out);
03819     return LZO_E_LOOKBEHIND_OVERRUN;
03820 #endif
03821 }
03822 
03823 #endif
03824 
03825 /***** End of minilzo.c *****/
03826