ftp.nice.ch/pub/next/developer/resources/libraries/SurfImage.1.0.s.tar.gz#/SurfImage/SurfGIFSupport.subproj/LWZDecoder.h

This is LWZDecoder.h in view mode; [Download] [Up]

/*  
** Copyright (c) 1995 Netsurfer Inc.  All Rights Reserved.
**
** Author: <bbum@friday.com>
*/

/*
** Copyright 1990, 1991, 1993, David Koblas.  (koblas@netcom.com)
** 
** Permission to use, copy, modify, and distribute this software  and its
** documentation for any purpose and without fee is hereby  granted,
** provided that the above copyright notice appear in all copies and that
** both that copyright notice and this permission  notice appear in
** supporting documentation.  This software is    provided "as is" without
** express or implied warranty.
*/

/*"
 * Maximum number of bits present in any single LWZ code.
"*/
#define        MAX_LWZ_BITS				12

#ifndef FALSE
#define FALSE NO
#endif

#ifndef TRUE
#define TRUE YES
#endif

/// RETURN CODES
#define LWZ_NO_ERROR		 0	// nothing amiss
#define LWZ_DONE 			-1  // missing EOD-- common, usually ignored.
#define LWZ_NO_EOD 			-2  // missing EOD-- common, usually ignored.
#define LWZ_CIRCULAR_ERR	-3  // circular code-- fatal
#define LWZ_BIT_OVERRUN		-4	// ran off end of bits
#define LWZ_DATA_BLOCK_ERR	-5	// error reading data block

/*"
 * Lempel-Welch-Ziv decompression state (rather large).
"*/
typedef struct __LWZState {
    /*" state used by LWZReadByte
     "*/
	int				code_size;
	int				set_code_size;
	int				max_code;
	int				max_code_size;
	int				firstcode;
	int				oldcode;
	int				clear_code;
	int				end_code;
	int				table[2][ (1 << MAX_LWZ_BITS) ];
	int     		stack[ (1 << MAX_LWZ_BITS) * 2];
	int				*stackPtr;
	BOOL			fresh;
	BOOL			zeroDataBlock;
    /*" state used by GetCode, GetDataBlock
     "*/
	unsigned char 	buf[280];
	int				curbit;
	int				lastbit;
	BOOL			done;
	int				last_byte;
} LWZState;

/*"
 * Initialize decompressor.
"*/
extern void LWZInitState(id decoder, LWZState *state, unsigned char codeSize);

/*"
 * Decompress a single byte.
"*/
extern int LWZReadByte(id decoder, LWZState *state, NXStream *stream);

/*"
 *  Read a block of compressed image data
"*/
extern int GetDataBlock(id decoder, LWZState *state,
						NXStream *stream, unsigned char *buf);
/*"
 * Retrieve a single compression code.
"*/
extern int GetCode(id decoder, LWZState *state, NXStream *stream);

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.