File Annotation

Not logged in
5128eecc9f 2011-02-23        kinaba: #ifndef AFX_LZHTOOL_H__31F8AA01_3F84_11D4_8D96_8AB5A6462337__INCLUDED_
5128eecc9f 2011-02-23        kinaba: #define AFX_LZHTOOL_H__31F8AA01_3F84_11D4_8D96_8AB5A6462337__INCLUDED_
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: // Lzh Archive Extraction ... ( XacRett #39 SubSet )
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: class CLzhTool
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: public:
5128eecc9f 2011-02-23        kinaba: 	//-- 外向きインターフェイス --------------
5128eecc9f 2011-02-23        kinaba: 	bool Extract( const char* aname, const char* dll, kiPath& dll_rel_path );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: public:
5128eecc9f 2011-02-23        kinaba: 	//-- CRC 計算 ---------------------------
5128eecc9f 2011-02-23        kinaba: 	static bool crcinit;
5128eecc9f 2011-02-23        kinaba: 	static unsigned short crctable[256];
5128eecc9f 2011-02-23        kinaba: 	static void init_crc_table(){
5128eecc9f 2011-02-23        kinaba: 		if( !crcinit )
5128eecc9f 2011-02-23        kinaba: 			for( unsigned short i=0,j,r; i!=256; i++ )
5128eecc9f 2011-02-23        kinaba: 			{
5128eecc9f 2011-02-23        kinaba: 				r = i;
5128eecc9f 2011-02-23        kinaba: 				for( j=0; j!=8; j++ )
5128eecc9f 2011-02-23        kinaba: 				{
5128eecc9f 2011-02-23        kinaba: 					if( r&1 ) r = ((r>>1)^0xA001);
5128eecc9f 2011-02-23        kinaba: 					else	  r>>=1;
5128eecc9f 2011-02-23        kinaba: 				}
5128eecc9f 2011-02-23        kinaba: 				crctable[i] = r;
5128eecc9f 2011-02-23        kinaba: 			}}
5128eecc9f 2011-02-23        kinaba: 	CLzhTool() { init_crc_table(); }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: private:
5128eecc9f 2011-02-23        kinaba: 	//-- 内部処理
5128eecc9f 2011-02-23        kinaba: 	int FindHeader( const char* fname, const BYTE* hdr, DWORD siz );
5128eecc9f 2011-02-23        kinaba: 	bool ReadHeader( unsigned char* buf );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	WORD crc;
5128eecc9f 2011-02-23        kinaba: 	BYTE sum;
5128eecc9f 2011-02-23        kinaba: 	void UpdateCRC( BYTE *p,int n )
5128eecc9f 2011-02-23        kinaba: 		{while( n-- )crc = crctable[(crc^(*p++))&0xff] ^ (crc >> 8);}
5128eecc9f 2011-02-23        kinaba: 	void UpdateSum( BYTE *p,int n )
5128eecc9f 2011-02-23        kinaba: 		{while( n-- )sum+=*(p++);}
5128eecc9f 2011-02-23        kinaba: 	int  fread_crc( BYTE* p,int n)
5128eecc9f 2011-02-23        kinaba: 		{n=fread(p,1,n,lzh);if(n==-1)n=0;
5128eecc9f 2011-02-23        kinaba: 		UpdateCRC(p,n);UpdateSum(p,n);return n;}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	FILE *lzh,*out;
5128eecc9f 2011-02-23        kinaba: 	BYTE  h_Level;					// ヘッダレベル
5128eecc9f 2011-02-23        kinaba: 	char  h_FileName[MAX_PATH*2];	// ファイル名(パス付き)
5128eecc9f 2011-02-23        kinaba: 	char  h_Method[6];				// 圧縮法 "-lh5-" など。
5128eecc9f 2011-02-23        kinaba: 	DWORD h_CompSize;				// 圧縮されたサイズ
5128eecc9f 2011-02-23        kinaba: 	DWORD h_OrigSize;				// 元のサイズ
5128eecc9f 2011-02-23        kinaba: 	WORD  h_Attrib;					// 属性
5128eecc9f 2011-02-23        kinaba: 	DWORD h_Update;					// 更新日時(h0,h1:ftime  h2:time_t)
5128eecc9f 2011-02-23        kinaba: };
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #endif