1993.09.21 17:23 "Revised diffs for tif_lzw", by Eric Herrmann
This is a correction of my earlier mail about tif_lzw.c for Microsoft Visual C++ 1.0 for Windows.
Thank you to Soren (PINGEL@DAIMI.AAU.DK) who points out that the code field in hash_t need only be a 16 bit int. (I apparently did not get an earlier mail about this.) This produces the following revised diff for 3.30 beta of the Tiff library.
Eric Herrmann
Light Source
LS.BANZAI@Applelink.Apple.Com
--------------------- tif_lzw.c:
65c65
< #define MAXCODE(n) ((1<<(n))-1)
---
> #define MAXCODE(n) ((1L<<(n))-1)
77c77,85
< #define HSIZE 9001 /* 91% occupancy */
---
> #define HSIZE 9001L /* 91% occupancy */
>
> #ifdef _WINDOWS
> /*
> * Must do some special pointer arithmetic.
> */
> #include <windows.h>
> #endif
>
144c152
< long code;
---
> int code;
334c342
< tif->tif_data = _TIFFmalloc(sizeof (LZWDecodeState));
---
> tif->tif_data = (tidata_t)_TIFFmalloc(sizeof (LZWDecodeState));
891c899
< tif->tif_data = _TIFFmalloc(sizeof (LZWEncodeState));
---
> tif->tif_data = (tidata_t)_TIFFmalloc(sizeof (LZWEncodeState));
1012a1021,1035
> #ifdef _WINDOWS
> /*
> * 64K segment pointer arithmetic! Yuk!
> * Subtracting a value from a pointer can easily become
> * negative, but with a segment:offset pointer the
> * offset is unsigned and thus wraps around.
> * This code is for MSVC 1.0.
> */
> register long offset;
>
> offset = (long) OFFSETOF( hp ) - disp * sizeof( hash_t );
> if ( offset < FIELDOFFSET( LZWEncodeState, enc_hashtab ) )
> offset += HSIZE * sizeof( hash_t);
> hp = (hash_t *) MAKELP( SELECTOROF( hp ), offset );
> #else
1014a1038
> #endif
1218a1243
>