Subversion Repositories spk

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 cycrow 1
 
2
#include "HiP.h"
3
 
4
bool g_bCanceled;
5
 
6
BOOL __stdcall CompressionCallback( DWORD cbDone, DWORD cbTotal )
7
{
8
	if ( g_bCanceled )
9
		return false;
10
 
11
	float percent = ((float)cbDone / (float)cbTotal) * 100;
12
 
13
	return true;
14
}
15
 
16
//
17
// Purpose:
18
//   The root routine to decompress a single file
19
//
20
 
21
//bool CCompression::DecompressFile( char* szFile, char* szOutFile )
22
bool DecompressFile( char* szFile, char* szOutFile )
23
{
24
	clsFILE     infile, outfile;
25
	PHipPack    pEngine = NULL;
26
 
27
	//
28
	// map the input file into memory
29
	//
30
	if ( !infile.GetFileHandle( szFile, F_OPENEXISTING_R ) ||
31
		 !infile.MapFile() )
32
		return false;
33
 
34
	//
35
	// analyse the file
36
	//
37
 
38
	// 0 byte file ?
39
	if ( infile.GetFSize() == 0 )
40
		return FALSE; // ERR
41
 
42
	// initialize engine
43
	pEngine = new HipPack( infile.GetMapPtr(), infile.GetFSize() );
44
	pEngine->SetCallback( CompressionCallback );
45
 
46
	void*  pOut;
47
	DWORD  cbOut;
48
	bool done = (pEngine->PerformDecompression( &pOut, &cbOut )) ? true : false;
49
 
50
	//
51
	// write the output 2 disk
52
	//
53
	if ( !outfile.GetFileHandle( szOutFile, F_CREATENEW ) )
54
	{
55
		if ( pEngine )
56
			delete pEngine;
57
		return false;
58
	}
59
	outfile.Write( pOut, cbOut );
60
	outfile.Destroy();
61
 
62
	if ( pEngine )
63
		delete pEngine;
64
 
65
	return done;
66
}
67