4  * Copyright (c) 1988-1997 Sam Leffler 
   5  * Copyright (c) 1991-1997 Silicon Graphics, Inc. 
   7  * Permission to use, copy, modify, distribute, and sell this software and 
   8  * its documentation for any purpose is hereby granted without fee, provided 
   9  * that (i) the above copyright notices and this permission notice appear in 
  10  * all copies of the software and related documentation, and (ii) the names of 
  11  * Sam Leffler and Silicon Graphics may not be used in any advertising or 
  12  * publicity relating to the software without the specific, prior written 
  13  * permission of Sam Leffler and Silicon Graphics. 
  15  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  16  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  17  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 
  19  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 
  20  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 
  21  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  22  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  31  * Rev 5.0 Lempel-Ziv & Welch Compression Support 
  33  * This code is derived from the compress program whose code is 
  34  * derived from software contributed to Berkeley by James A. Woods, 
  35  * derived from original work by Spencer Thomas and Joseph Orost. 
  37  * The original Berkeley copyright notice appears below in its entirety. 
  39 /* Watcom C++ (or its make utility) doesn't like long filenames */ 
  40 #ifdef wxUSE_SHORTNAMES 
  43 #include "tif_predict.h" 
  50  * NB: The 5.0 spec describes a different algorithm than Aldus 
  51  *     implements.  Specifically, Aldus does code length transitions 
  52  *     one code earlier than should be done (for real LZW). 
  53  *     Earlier versions of this library implemented the correct 
  54  *     LZW algorithm, but emitted codes in a bit order opposite 
  55  *     to the TIFF spec.  Thus, to maintain compatibility w/ Aldus 
  56  *     we interpret MSB-LSB ordered codes to be images written w/ 
  57  *     old versions of this library, but otherwise adhere to the 
  58  *     Aldus "off by one" algorithm. 
  60  * Future revisions to the TIFF spec are expected to "clarify this issue". 
  62 #define LZW_COMPAT              /* include backwards compatibility code */ 
  64  * Each strip of data is supposed to be terminated by a CODE_EOI. 
  65  * If the following #define is included, the decoder will also 
  66  * check for end-of-strip w/o seeing this code.  This makes the 
  67  * library more robust, but also slower. 
  69 #define LZW_CHECKEOS            /* include checks for strips w/o EOI code */ 
  71 #define MAXCODE(n)      ((1L<<(n))-1) 
  73  * The TIFF spec specifies that encoded bit 
  74  * strings range from 9 to 12 bits. 
  76 #define BITS_MIN        9               /* start with 9 bits */ 
  77 #define BITS_MAX        12              /* max of 12 bit strings */ 
  78 /* predefined codes */ 
  79 #define CODE_CLEAR      256             /* code to clear string table */ 
  80 #define CODE_EOI        257             /* end-of-information code */ 
  81 #define CODE_FIRST      258             /* first free code entry */ 
  82 #define CODE_MAX        MAXCODE(BITS_MAX) 
  83 #define HSIZE           9001L           /* 91% occupancy */ 
  86 /* NB: +1024 is for compatibility with old files */ 
  87 #define CSIZE           (MAXCODE(BITS_MAX)+1024L) 
  89 #define CSIZE           (MAXCODE(BITS_MAX)+1L) 
  93  * State block for each open TIFF file using LZW 
  94  * compression/decompression.  Note that the predictor 
  95  * state block must be first in this data structure. 
  98         TIFFPredictorState predict
;     /* predictor super class */ 
 100         u_short         nbits
;          /* # of bits/code */ 
 101         u_short         maxcode
;        /* maximum code for lzw_nbits */ 
 102         u_short         free_ent
;       /* next free entry in hash table */ 
 103         long            nextdata
;       /* next bits of i/o */ 
 104         long            nextbits
;       /* # of valid bits in lzw_nextdata */ 
 107 #define lzw_nbits       base.nbits 
 108 #define lzw_maxcode     base.maxcode 
 109 #define lzw_free_ent    base.free_ent 
 110 #define lzw_nextdata    base.nextdata 
 111 #define lzw_nextbits    base.nextbits 
 114  * Decoding-specific state. 
 116 typedef struct code_ent 
{ 
 117         struct code_ent 
*next
; 
 118         u_short length
;                 /* string len, including this token */ 
 119         u_char  value
;                  /* data value */ 
 120         u_char  firstchar
;              /* first token of string */ 
 123 typedef int (LINKAGEMODE 
*decodeFunc
)(TIFF
*, tidata_t
, tsize_t
, tsample_t
); 
 127         long    dec_nbitsmask
;          /* lzw_nbits 1 bits, right adjusted */ 
 128         long    dec_restart
;            /* restart count */ 
 130         long    dec_bitsleft
;           /* available bits in raw data */ 
 132         decodeFunc dec_decode
;          /* regular or backwards compatible */ 
 133         code_t
* dec_codep
;              /* current recognized code */ 
 134         code_t
* dec_oldcodep
;           /* previously recognized code */ 
 135         code_t
* dec_free_entp
;          /* next free entry */ 
 136         code_t
* dec_maxcodep
;           /* max available entry */ 
 137         code_t
* dec_codetab
;            /* kept separate for small machines */ 
 141  * Encoding-specific state. 
 143 typedef uint16 hcode_t
;                 /* codes fit in 16 bits */ 
 151         int     enc_oldcode
;            /* last code encountered */ 
 152         long    enc_checkpoint
;         /* point at which to clear table */ 
 153 #define CHECK_GAP       10000           /* enc_ratio check interval */ 
 154         long    enc_ratio
;              /* current compression ratio */ 
 155         long    enc_incount
;            /* (input) data bytes encoded */ 
 156         long    enc_outcount
;           /* encoded (output) bytes */ 
 157         tidata_t enc_rawlimit
;          /* bound on tif_rawdata buffer */ 
 158         hash_t
* enc_hashtab
;            /* kept separate for small machines */ 
 161 #define LZWState(tif)           ((LZWBaseState*) (tif)->tif_data) 
 162 #define DecoderState(tif)       ((LZWDecodeState*) LZWState(tif)) 
 163 #define EncoderState(tif)       ((LZWEncodeState*) LZWState(tif)) 
 165 static  int LINKAGEMODE 
LZWDecode(TIFF
*, tidata_t
, tsize_t
, tsample_t
); 
 167 static  int LINKAGEMODE 
LZWDecodeCompat(TIFF
*, tidata_t
, tsize_t
, tsample_t
); 
 169 static  void cl_hash(LZWEncodeState
*); 
 177  * This check shouldn't be necessary because each 
 178  * strip is suppose to be terminated with CODE_EOI. 
 180 #define NextCode(_tif, _sp, _bp, _code, _get) {                         \ 
 181         if ((_sp)->dec_bitsleft < nbits) {                              \ 
 182                 TIFFWarning(_tif->tif_name,                             \ 
 183                     "LZWDecode: Strip %d not terminated with EOI code", \ 
 184                     _tif->tif_curstrip);                                \ 
 187                 _get(_sp,_bp,_code);                                    \ 
 188                 (_sp)->dec_bitsleft -= nbits;                           \ 
 192 #define NextCode(tif, sp, bp, code, get) get(sp, bp, code) 
 196 LZWSetupDecode(TIFF
* tif
) 
 198         LZWDecodeState
* sp 
= DecoderState(tif
); 
 199         static const char module[] = " LZWSetupDecode"; 
 203         if (sp
->dec_codetab 
== NULL
) { 
 204                 sp
->dec_codetab 
= (code_t
*)_TIFFmalloc(CSIZE
*sizeof (code_t
)); 
 205                 if (sp
->dec_codetab 
== NULL
) { 
 206                         TIFFError(module, "No space for LZW code table"); 
 210                  * Pre-load the table. 
 212                 for (code 
= 255; code 
>= 0; code
--) { 
 213                         sp
->dec_codetab
[code
].value 
= code
; 
 214                         sp
->dec_codetab
[code
].firstchar 
= code
; 
 215                         sp
->dec_codetab
[code
].length 
= 1; 
 216                         sp
->dec_codetab
[code
].next 
= NULL
; 
 223  * Setup state for decoding a strip. 
 226 LZWPreDecode(TIFF
* tif
, tsample_t s
) 
 228         LZWDecodeState 
*sp 
= DecoderState(tif
); 
 233          * Check for old bit-reversed codes. 
 235         if (tif
->tif_rawdata
[0] == 0 && (tif
->tif_rawdata
[1] & 0x1)) { 
 237                 if (!sp
->dec_decode
) { 
 238                         TIFFWarning(tif
->tif_name
, 
 239                             "Old-style LZW codes, convert file"); 
 241                          * Override default decoding methods with 
 242                          * ones that deal with the old coding. 
 243                          * Otherwise the predictor versions set 
 244                          * above will call the compatibility routines 
 245                          * through the dec_decode method. 
 247                         tif
->tif_decoderow 
= LZWDecodeCompat
; 
 248                         tif
->tif_decodestrip 
= LZWDecodeCompat
; 
 249                         tif
->tif_decodetile 
= LZWDecodeCompat
; 
 251                          * If doing horizontal differencing, must 
 252                          * re-setup the predictor logic since we 
 253                          * switched the basic decoder methods... 
 255                         (*tif
->tif_setupdecode
)(tif
); 
 256                         sp
->dec_decode 
= LZWDecodeCompat
; 
 258                 sp
->lzw_maxcode 
= MAXCODE(BITS_MIN
); 
 259 #else /* !LZW_COMPAT */ 
 260                 if (!sp
->dec_decode
) { 
 261                         TIFFError(tif
->tif_name
, 
 262                             "Old-style LZW codes not supported"); 
 263                         sp
->dec_decode 
= LZWDecode
; 
 266 #endif/* !LZW_COMPAT */ 
 268                 sp
->lzw_maxcode 
= MAXCODE(BITS_MIN
)-1; 
 269                 sp
->dec_decode 
= LZWDecode
; 
 271         sp
->lzw_nbits 
= BITS_MIN
; 
 272         sp
->lzw_nextbits 
= 0; 
 273         sp
->lzw_nextdata 
= 0; 
 276         sp
->dec_nbitsmask 
= MAXCODE(BITS_MIN
); 
 278         sp
->dec_bitsleft 
= tif
->tif_rawcc 
<< 3; 
 280         sp
->dec_free_entp 
= sp
->dec_codetab 
+ CODE_FIRST
; 
 282          * Zero entries that are not yet filled in.  We do 
 283          * this to guard against bogus input data that causes 
 284          * us to index into undefined entries.  If you can 
 285          * come up with a way to safely bounds-check input codes 
 286          * while decoding then you can remove this operation. 
 288         _TIFFmemset(sp
->dec_free_entp
, 0, (CSIZE
-CODE_FIRST
)*sizeof (code_t
)); 
 289         sp
->dec_oldcodep 
= &sp
->dec_codetab
[-1]; 
 290         sp
->dec_maxcodep 
= &sp
->dec_codetab
[sp
->dec_nbitsmask
-1]; 
 295  * Decode a "hunk of data". 
 297 #define GetNextCode(sp, bp, code) {                             \ 
 298         nextdata = (nextdata<<8) | *(bp)++;                     \ 
 300         if (nextbits < nbits) {                                 \ 
 301                 nextdata = (nextdata<<8) | *(bp)++;             \ 
 304         code = (hcode_t)((nextdata >> (nextbits-nbits)) & nbitsmask);   \ 
 311         TIFFError(tif
->tif_name
, 
 312             "LZWDecode: Bogus encoding, loop in the code table; scanline %d", 
 317 LZWDecode(TIFF
* tif
, tidata_t op0
, tsize_t occ0
, tsample_t s
) 
 319         LZWDecodeState 
*sp 
= DecoderState(tif
); 
 320         char *op 
= (char*) op0
; 
 321         long occ 
= (long) occ0
; 
 326         long nbits
, nextbits
, nextdata
, nbitsmask
; 
 327         code_t 
*codep
, *free_entp
, *maxcodep
, *oldcodep
; 
 332          * Restart interrupted output operation. 
 334         if (sp
->dec_restart
) { 
 337                 codep 
= sp
->dec_codep
; 
 338                 residue 
= codep
->length 
- sp
->dec_restart
; 
 341                          * Residue from previous decode is sufficient 
 342                          * to satisfy decode request.  Skip to the 
 343                          * start of the decoded string, place decoded 
 344                          * values in the output buffer, and return. 
 346                         sp
->dec_restart 
+= occ
; 
 349                         } while (--residue 
> occ 
&& codep
); 
 353                                         *--tp 
= codep
->value
; 
 355                                 } while (--occ 
&& codep
); 
 360                  * Residue satisfies only part of the decode request. 
 362                 op 
+= residue
, occ 
-= residue
; 
 370                 } while (--residue 
&& codep
); 
 374         bp 
= (u_char 
*)tif
->tif_rawcp
; 
 375         nbits 
= sp
->lzw_nbits
; 
 376         nextdata 
= sp
->lzw_nextdata
; 
 377         nextbits 
= sp
->lzw_nextbits
; 
 378         nbitsmask 
= sp
->dec_nbitsmask
; 
 379         oldcodep 
= sp
->dec_oldcodep
; 
 380         free_entp 
= sp
->dec_free_entp
; 
 381         maxcodep 
= sp
->dec_maxcodep
; 
 384                 NextCode(tif
, sp
, bp
, code
, GetNextCode
); 
 385                 if (code 
== CODE_EOI
) 
 387                 if (code 
== CODE_CLEAR
) { 
 388                         free_entp 
= sp
->dec_codetab 
+ CODE_FIRST
; 
 390                         nbitsmask 
= MAXCODE(BITS_MIN
); 
 391                         maxcodep 
= sp
->dec_codetab 
+ nbitsmask
-1; 
 392                         NextCode(tif
, sp
, bp
, code
, GetNextCode
); 
 393                         if (code 
== CODE_EOI
) 
 396                         oldcodep 
= sp
->dec_codetab 
+ code
; 
 399                 codep 
= sp
->dec_codetab 
+ code
; 
 402                  * Add the new entry to the code table. 
 404                 assert(&sp
->dec_codetab
[0] <= free_entp 
&& free_entp 
< &sp
->dec_codetab
[CSIZE
]); 
 405                 free_entp
->next 
= oldcodep
; 
 406                 free_entp
->firstchar 
= free_entp
->next
->firstchar
; 
 407                 free_entp
->length 
= free_entp
->next
->length
+1; 
 408                 free_entp
->value 
= (codep 
< free_entp
) ? 
 409                     codep
->firstchar 
: free_entp
->firstchar
; 
 410                 if (++free_entp 
> maxcodep
) { 
 411                         if (++nbits 
> BITS_MAX
)         /* should not happen */ 
 413                         nbitsmask 
= MAXCODE(nbits
); 
 414                         maxcodep 
= sp
->dec_codetab 
+ nbitsmask
-1; 
 419                          * Code maps to a string, copy string 
 420                          * value to output (written in reverse). 
 422                         if (codep
->length 
> occ
) { 
 424                                  * String is too long for decode buffer, 
 425                                  * locate portion that will fit, copy to 
 426                                  * the decode buffer, and setup restart 
 427                                  * logic for the next decoding call. 
 429                                 sp
->dec_codep 
= codep
; 
 432                                 } while (codep 
&& codep
->length 
> occ
); 
 434                                         sp
->dec_restart 
= occ
; 
 437                                                 *--tp 
= codep
->value
; 
 439                                         }  while (--occ 
&& codep
); 
 453                         } while (codep 
&& tp 
> op
); 
 458                         op 
+= len
, occ 
-= len
; 
 463         tif
->tif_rawcp 
= (tidata_t
) bp
; 
 464         sp
->lzw_nbits 
= (u_short
) nbits
; 
 465         sp
->lzw_nextdata 
= nextdata
; 
 466         sp
->lzw_nextbits 
= nextbits
; 
 467         sp
->dec_nbitsmask 
= nbitsmask
; 
 468         sp
->dec_oldcodep 
= oldcodep
; 
 469         sp
->dec_free_entp 
= free_entp
; 
 470         sp
->dec_maxcodep 
= maxcodep
; 
 473                 TIFFError(tif
->tif_name
, 
 474                 "LZWDecode: Not enough data at scanline %d (short %d bytes)", 
 483  * Decode a "hunk of data" for old images. 
 485 #define GetNextCodeCompat(sp, bp, code) {                       \ 
 486         nextdata |= (u_long) *(bp)++ << nextbits;               \ 
 488         if (nextbits < nbits) {                                 \ 
 489                 nextdata |= (u_long) *(bp)++ << nextbits;       \ 
 492         code = (hcode_t)(nextdata & nbitsmask);                 \ 
 493         nextdata >>= nbits;                                     \ 
 497 static int LINKAGEMODE
 
 498 LZWDecodeCompat(TIFF
* tif
, tidata_t op0
, tsize_t occ0
, tsample_t s
) 
 500         LZWDecodeState 
*sp 
= DecoderState(tif
); 
 501         char *op 
= (char*) op0
; 
 502         long occ 
= (long) occ0
; 
 506         long nextbits
, nextdata
, nbitsmask
; 
 507         code_t 
*codep
, *free_entp
, *maxcodep
, *oldcodep
; 
 512          * Restart interrupted output operation. 
 514         if (sp
->dec_restart
) { 
 517                 codep 
= sp
->dec_codep
; 
 518                 residue 
= codep
->length 
- sp
->dec_restart
; 
 521                          * Residue from previous decode is sufficient 
 522                          * to satisfy decode request.  Skip to the 
 523                          * start of the decoded string, place decoded 
 524                          * values in the output buffer, and return. 
 526                         sp
->dec_restart 
+= occ
; 
 529                         } while (--residue 
> occ
); 
 532                                 *--tp 
= codep
->value
; 
 538                  * Residue satisfies only part of the decode request. 
 540                 op 
+= residue
, occ 
-= residue
; 
 543                         *--tp 
= codep
->value
; 
 549         bp 
= (u_char 
*)tif
->tif_rawcp
; 
 550         nbits 
= sp
->lzw_nbits
; 
 551         nextdata 
= sp
->lzw_nextdata
; 
 552         nextbits 
= sp
->lzw_nextbits
; 
 553         nbitsmask 
= sp
->dec_nbitsmask
; 
 554         oldcodep 
= sp
->dec_oldcodep
; 
 555         free_entp 
= sp
->dec_free_entp
; 
 556         maxcodep 
= sp
->dec_maxcodep
; 
 559                 NextCode(tif
, sp
, bp
, code
, GetNextCodeCompat
); 
 560                 if (code 
== CODE_EOI
) 
 562                 if (code 
== CODE_CLEAR
) { 
 563                         free_entp 
= sp
->dec_codetab 
+ CODE_FIRST
; 
 565                         nbitsmask 
= MAXCODE(BITS_MIN
); 
 566                         maxcodep 
= sp
->dec_codetab 
+ nbitsmask
; 
 567                         NextCode(tif
, sp
, bp
, code
, GetNextCodeCompat
); 
 568                         if (code 
== CODE_EOI
) 
 571                         oldcodep 
= sp
->dec_codetab 
+ code
; 
 574                 codep 
= sp
->dec_codetab 
+ code
; 
 577                  * Add the new entry to the code table. 
 579                 assert(&sp
->dec_codetab
[0] <= free_entp 
&& free_entp 
< &sp
->dec_codetab
[CSIZE
]); 
 580                 free_entp
->next 
= oldcodep
; 
 581                 free_entp
->firstchar 
= free_entp
->next
->firstchar
; 
 582                 free_entp
->length 
= free_entp
->next
->length
+1; 
 583                 free_entp
->value 
= (codep 
< free_entp
) ? 
 584                     codep
->firstchar 
: free_entp
->firstchar
; 
 585                 if (++free_entp 
> maxcodep
) { 
 586                         if (++nbits 
> BITS_MAX
)         /* should not happen */ 
 588                         nbitsmask 
= MAXCODE(nbits
); 
 589                         maxcodep 
= sp
->dec_codetab 
+ nbitsmask
; 
 594                          * Code maps to a string, copy string 
 595                          * value to output (written in reverse). 
 597                         if (codep
->length 
> occ
) { 
 599                                  * String is too long for decode buffer, 
 600                                  * locate portion that will fit, copy to 
 601                                  * the decode buffer, and setup restart 
 602                                  * logic for the next decoding call. 
 604                                 sp
->dec_codep 
= codep
; 
 607                                 } while (codep
->length 
> occ
); 
 608                                 sp
->dec_restart 
= occ
; 
 611                                         *--tp 
= codep
->value
; 
 616                         op 
+= codep
->length
, occ 
-= codep
->length
; 
 619                                 *--tp 
= codep
->value
; 
 620                         } while( (codep 
= codep
->next
) != NULL
); 
 625         tif
->tif_rawcp 
= (tidata_t
) bp
; 
 626         sp
->lzw_nbits 
= nbits
; 
 627         sp
->lzw_nextdata 
= nextdata
; 
 628         sp
->lzw_nextbits 
= nextbits
; 
 629         sp
->dec_nbitsmask 
= nbitsmask
; 
 630         sp
->dec_oldcodep 
= oldcodep
; 
 631         sp
->dec_free_entp 
= free_entp
; 
 632         sp
->dec_maxcodep 
= maxcodep
; 
 635                 TIFFError(tif
->tif_name
, 
 636             "LZWDecodeCompat: Not enough data at scanline %d (short %d bytes)", 
 642 #endif /* LZW_COMPAT */ 
 649 LZWSetupEncode(TIFF
* tif
) 
 651         LZWEncodeState
* sp 
= EncoderState(tif
); 
 652         static const char module[] = "LZWSetupEncode"; 
 655         sp
->enc_hashtab 
= (hash_t
*) _TIFFmalloc(HSIZE
*sizeof (hash_t
)); 
 656         if (sp
->enc_hashtab 
== NULL
) { 
 657                 TIFFError(module, "No space for LZW hash table"); 
 664  * Reset encoding state at the start of a strip. 
 667 LZWPreEncode(TIFF
* tif
, tsample_t s
) 
 669         LZWEncodeState 
*sp 
= EncoderState(tif
); 
 673         sp
->lzw_nbits 
= BITS_MIN
; 
 674         sp
->lzw_maxcode 
= MAXCODE(BITS_MIN
); 
 675         sp
->lzw_free_ent 
= CODE_FIRST
; 
 676         sp
->lzw_nextbits 
= 0; 
 677         sp
->lzw_nextdata 
= 0; 
 678         sp
->enc_checkpoint 
= CHECK_GAP
; 
 681         sp
->enc_outcount 
= 0; 
 683          * The 4 here insures there is space for 2 max-sized 
 684          * codes in LZWEncode and LZWPostDecode. 
 686         sp
->enc_rawlimit 
= tif
->tif_rawdata 
+ tif
->tif_rawdatasize
-1 - 4; 
 687         cl_hash(sp
);            /* clear hash table */ 
 688         sp
->enc_oldcode 
= (hcode_t
) -1; /* generates CODE_CLEAR in LZWEncode */ 
 692 #define CALCRATIO(sp, rat) {                                    \ 
 693         if (incount > 0x007fffff) { /* NB: shift will overflow */\ 
 694                 rat = outcount >> 8;                            \ 
 695                 rat = (rat == 0 ? 0x7fffffff : incount/rat);    \ 
 697                 rat = (incount<<8) / outcount;                  \ 
 699 #define PutNextCode(op, c) {                                    \ 
 700         nextdata = (nextdata << nbits) | c;                     \ 
 702         *op++ = (u_char)(nextdata >> (nextbits-8));             \ 
 704         if (nextbits >= 8) {                                    \ 
 705                 *op++ = (u_char)(nextdata >> (nextbits-8));     \ 
 712  * Encode a chunk of pixels. 
 714  * Uses an open addressing double hashing (no chaining) on the 
 715  * prefix code/next character combination.  We do a variant of 
 716  * Knuth's algorithm D (vol. 3, sec. 6.4) along with G. Knott's 
 717  * relatively-prime secondary probe.  Here, the modular division 
 718  * first probe is gives way to a faster exclusive-or manipulation. 
 719  * Also do block compression with an adaptive reset, whereby the 
 720  * code table is cleared when the compression ratio decreases, 
 721  * but after the table fills.  The variable-length output codes 
 722  * are re-sized at this point, and a CODE_CLEAR is generated 
 725 static int LINKAGEMODE
 
 726 LZWEncode(TIFF
* tif
, tidata_t bp
, tsize_t cc
, tsample_t s
) 
 728         register LZWEncodeState 
*sp 
= EncoderState(tif
); 
 734         long incount
, outcount
, checkpoint
; 
 735         long nextdata
, nextbits
; 
 736         int free_ent
, maxcode
, nbits
; 
 745         incount 
= sp
->enc_incount
; 
 746         outcount 
= sp
->enc_outcount
; 
 747         checkpoint 
= sp
->enc_checkpoint
; 
 748         nextdata 
= sp
->lzw_nextdata
; 
 749         nextbits 
= sp
->lzw_nextbits
; 
 750         free_ent 
= sp
->lzw_free_ent
; 
 751         maxcode 
= sp
->lzw_maxcode
; 
 752         nbits 
= sp
->lzw_nbits
; 
 754         limit 
= sp
->enc_rawlimit
; 
 755         ent 
= sp
->enc_oldcode
; 
 757         if (ent 
== (hcode_t
) -1 && cc 
> 0) { 
 759                  * NB: This is safe because it can only happen 
 760                  *     at the start of a strip where we know there 
 761                  *     is space in the data buffer. 
 763                 PutNextCode(op
, CODE_CLEAR
); 
 764                 ent 
= *bp
++; cc
--; incount
++; 
 767                 c 
= *bp
++; cc
--; incount
++; 
 768                 fcode 
= ((long)c 
<< BITS_MAX
) + ent
; 
 769                 h 
= (c 
<< HSHIFT
) ^ ent
;        /* xor hashing */ 
 772                  * Check hash index for an overflow. 
 777                 hp 
= &sp
->enc_hashtab
[h
]; 
 778                 if (hp
->hash 
== fcode
) { 
 784                          * Primary hash failed, check secondary hash. 
 791                                  * Avoid pointer arithmetic 'cuz of 
 792                                  * wraparound problems with segments. 
 796                                 hp 
= &sp
->enc_hashtab
[h
]; 
 797                                 if (hp
->hash 
== fcode
) { 
 801                         } while (hp
->hash 
>= 0); 
 804                  * New entry, emit code and add to table. 
 807                  * Verify there is space in the buffer for the code 
 808                  * and any potential Clear code that might be emitted 
 809                  * below.  The value of limit is setup so that there 
 810                  * are at least 4 bytes free--room for 2 codes. 
 813                         tif
->tif_rawcc 
= (tsize_t
)(op 
- tif
->tif_rawdata
); 
 815                         op 
= tif
->tif_rawdata
; 
 817                 PutNextCode(op
, ent
); 
 819                 hp
->code 
= free_ent
++; 
 821                 if (free_ent 
== CODE_MAX
-1) { 
 822                         /* table is full, emit clear code and reset */ 
 827                         free_ent 
= CODE_FIRST
; 
 828                         PutNextCode(op
, CODE_CLEAR
); 
 830                         maxcode 
= MAXCODE(BITS_MIN
); 
 833                          * If the next entry is going to be too big for 
 834                          * the code size, then increase it, if possible. 
 836                         if (free_ent 
> maxcode
) { 
 838                                 assert(nbits 
<= BITS_MAX
); 
 839                                 maxcode 
= (int) MAXCODE(nbits
); 
 840                         } else if (incount 
>= checkpoint
) { 
 843                                  * Check compression ratio and, if things seem 
 844                                  * to be slipping, clear the hash table and 
 845                                  * reset state.  The compression ratio is a 
 846                                  * 24+8-bit fractional number. 
 848                                 checkpoint 
= incount
+CHECK_GAP
; 
 850                                 if (rat 
<= sp
->enc_ratio
) { 
 855                                         free_ent 
= CODE_FIRST
; 
 856                                         PutNextCode(op
, CODE_CLEAR
); 
 858                                         maxcode 
= MAXCODE(BITS_MIN
); 
 868          * Restore global state. 
 870         sp
->enc_incount 
= incount
; 
 871         sp
->enc_outcount 
= outcount
; 
 872         sp
->enc_checkpoint 
= checkpoint
; 
 873         sp
->enc_oldcode 
= ent
; 
 874         sp
->lzw_nextdata 
= nextdata
; 
 875         sp
->lzw_nextbits 
= nextbits
; 
 876         sp
->lzw_free_ent 
= free_ent
; 
 877         sp
->lzw_maxcode 
= maxcode
; 
 878         sp
->lzw_nbits 
= nbits
; 
 884  * Finish off an encoded strip by flushing the last 
 885  * string and tacking on an End Of Information code. 
 888 LZWPostEncode(TIFF
* tif
) 
 890         register LZWEncodeState 
*sp 
= EncoderState(tif
); 
 891         tidata_t op 
= tif
->tif_rawcp
; 
 892         long nextbits 
= sp
->lzw_nextbits
; 
 893         long nextdata 
= sp
->lzw_nextdata
; 
 894         long outcount 
= sp
->enc_outcount
; 
 895         int nbits 
= sp
->lzw_nbits
; 
 897         if (op 
> sp
->enc_rawlimit
) { 
 898                 tif
->tif_rawcc 
= (tsize_t
)(op 
- tif
->tif_rawdata
); 
 900                 op 
= tif
->tif_rawdata
; 
 902         if (sp
->enc_oldcode 
!= (hcode_t
) -1) { 
 903                 PutNextCode(op
, sp
->enc_oldcode
); 
 904                 sp
->enc_oldcode 
= (hcode_t
) -1; 
 906         PutNextCode(op
, CODE_EOI
); 
 908                 *op
++ = (u_char
)(nextdata 
<< (8-nextbits
)); 
 909         tif
->tif_rawcc 
= (tsize_t
)(op 
- tif
->tif_rawdata
); 
 914  * Reset encoding hash table. 
 917 cl_hash(LZWEncodeState
* sp
) 
 919         register hash_t 
*hp 
= &sp
->enc_hashtab
[HSIZE
-1]; 
 920         register long i 
= HSIZE
-8; 
 934         for (i 
+= 8; i 
> 0; i
--, hp
--) 
 939 LZWCleanup(TIFF
* tif
) 
 942                 if (tif
->tif_mode 
== O_RDONLY
) { 
 943                         if (DecoderState(tif
)->dec_codetab
) 
 944                                 _TIFFfree(DecoderState(tif
)->dec_codetab
); 
 946                         if (EncoderState(tif
)->enc_hashtab
) 
 947                                 _TIFFfree(EncoderState(tif
)->enc_hashtab
); 
 949                 _TIFFfree(tif
->tif_data
); 
 950                 tif
->tif_data 
= NULL
; 
 955 TIFFInitLZW(TIFF
* tif
, int scheme
) 
 957         assert(scheme 
== COMPRESSION_LZW
); 
 959          * Allocate state block so tag methods have storage to record values. 
 961         if (tif
->tif_mode 
== O_RDONLY
) { 
 962                 tif
->tif_data 
= (tidata_t
) _TIFFmalloc(sizeof (LZWDecodeState
)); 
 963                 if (tif
->tif_data 
== NULL
) 
 965                 DecoderState(tif
)->dec_codetab 
= NULL
; 
 966                 DecoderState(tif
)->dec_decode 
= NULL
; 
 968                 tif
->tif_data 
= (tidata_t
) _TIFFmalloc(sizeof (LZWEncodeState
)); 
 969                 if (tif
->tif_data 
== NULL
) 
 971                 EncoderState(tif
)->enc_hashtab 
= NULL
; 
 974          * Install codec methods. 
 976         tif
->tif_setupdecode 
= LZWSetupDecode
; 
 977         tif
->tif_predecode 
= LZWPreDecode
; 
 978         tif
->tif_decoderow 
= LZWDecode
; 
 979         tif
->tif_decodestrip 
= LZWDecode
; 
 980         tif
->tif_decodetile 
= LZWDecode
; 
 981         tif
->tif_setupencode 
= LZWSetupEncode
; 
 982         tif
->tif_preencode 
= LZWPreEncode
; 
 983         tif
->tif_postencode 
= LZWPostEncode
; 
 984         tif
->tif_encoderow 
= LZWEncode
; 
 985         tif
->tif_encodestrip 
= LZWEncode
; 
 986         tif
->tif_encodetile 
= LZWEncode
; 
 987         tif
->tif_cleanup 
= LZWCleanup
; 
 989          * Setup predictor setup. 
 991         (void) TIFFPredictorInit(tif
); 
 994         TIFFError("TIFFInitLZW", "No space for LZW state block"); 
 999  * Copyright (c) 1985, 1986 The Regents of the University of California. 
1000  * All rights reserved. 
1002  * This code is derived from software contributed to Berkeley by 
1003  * James A. Woods, derived from original work by Spencer Thomas 
1006  * Redistribution and use in source and binary forms are permitted 
1007  * provided that the above copyright notice and this paragraph are 
1008  * duplicated in all such forms and that any documentation, 
1009  * advertising materials, and other materials related to such 
1010  * distribution and use acknowledge that the software was developed 
1011  * by the University of California, Berkeley.  The name of the 
1012  * University may not be used to endorse or promote products derived 
1013  * from this software without specific prior written permission. 
1014  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 
1015  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 
1016  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 
1018 #endif /* LZW_SUPPORT */