⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 complib.h

📁 一个解压程序,只要设定了解压路径和解压文件的种类,就可以随意解压
💻 H
字号:

//
// original source is
//
// Tar32.dll 2.xx
//   http://openlab.ring.gr.jp/tsuneo/tar32/
//
// and
//
// unpack.c ( 4/21/90 )
//   http://www.ifi.uio.no/~in383/src/pack/
//

#ifndef COMPLIB
#define COMPLIB

/*** strstream ***/

class CMyStrBuf
{
protected:
	BYTE* buf;
	int st,ed,alen;
public:
	CMyStrBuf(){buf=new BYTE[alen=30000];st=ed=0;};
	virtual ~CMyStrBuf(){delete [] buf;};
	void Reset(){st=ed=0;};

	int Len(){return ed-st;}
	void Get( void* dat,int size )
	{
		memcpy(dat,buf+st,size);
		st+=size;
		if( ed-st<=0 )st=ed=0;
	};
	void Putc( BYTE c ){Put(&c,1);};// Oh! (^^;
	void Put( void* dat,int size )
	{
		if( alen<ed+size )
		{
			BYTE* tmp = new BYTE[alen=((ed+size)<<1)];
			memcpy( tmp,buf,ed );
			delete [] buf;
			buf = tmp;
		}
		memcpy( buf+ed,dat,size );
		ed+=size;
	};
};

/*** De-Compress(lzw) ***/

// low level routines
#define ZBUFSIZ 30000
typedef int (*lzw_in)(void* buf,int size,unsigned long param);

struct LZWDEC
{
	lzw_in m_pGet;
	unsigned long m_Param;

	int  m_maxbits;
	WORD m_codetab[1<<17];
	BYTE m_htab[1<<17];
	BYTE m_inbuf[ZBUFSIZ+64];
	bool m_eof;

	int m_finchar;
	int m_oldcode;
	int m_posbits;
	int m_free_ent;
	int m_maxcode;
	int m_n_bits;
	int m_rsize;
	int m_insize;
	bool m_block_mode;

	CMyStrBuf m_strstream;
};

LZWDEC* lzw_start( int bits,bool blockmode,lzw_in proc,unsigned long param );
int     lzw_read( void *buf,int size,LZWDEC* lzw );
#define lzw_end(lzw) delete(lzw)

// Z(UNIX-compressed) file io
struct ZFILE
{
	FILE *m_pFile;
	LZWDEC *lzw;
};
ZFILE* Z_open(const char* name,const char* mode);
int Z_close(ZFILE* fp);
int Z_read( void *buf,int size,ZFILE* fp );



/** UN-PACK ***************************************************/

#define MAX_BITLEN 25
#define LITERALS 256
#define MAX_PEEK 12

struct PFILE
{
	FILE *m_pFile;

	DWORD orig_len;
	int max_len;
	BYTE literal[LITERALS];
	int lit_base[MAX_BITLEN+1];
	int leaves [MAX_BITLEN+1];
	int parents[MAX_BITLEN+1];
	int peek_bits;

	BYTE prefix_len[16384];

	DWORD bitbuf;
	int valid;

	unsigned peek_mask;
	unsigned eob;

	CMyStrBuf m_strstream;

	bool m_eof;
};

int P_close(PFILE* fp);
int P_read( void *buf,int size,PFILE* fp );
PFILE* P_open(const char* name,const char* mode);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -