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