2007-06-30 19:24:05 +03:00
|
|
|
#ifndef CLODHANDLER_H
|
|
|
|
#define CLODHANDLER_H
|
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <fstream>
|
|
|
|
#include <vector>
|
|
|
|
#include <string>
|
|
|
|
#include "zlib.h"
|
2007-07-01 15:54:59 +03:00
|
|
|
#include "CDefHandler.h"
|
|
|
|
|
|
|
|
enum Epcxformat {PCX8B, PCX24B};
|
2007-06-30 19:24:05 +03:00
|
|
|
|
|
|
|
namespace NLoadHandlerHelp
|
|
|
|
{
|
|
|
|
const int dmHelp=0, dmNoExtractingMask=1;
|
|
|
|
//std::string P1,P2,CurDir;
|
|
|
|
const int fCHUNK = 50000;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Entry
|
|
|
|
{
|
|
|
|
unsigned char name[12], //filename
|
|
|
|
hlam_1[4], //
|
|
|
|
hlam_2[4]; //
|
2007-07-07 14:09:25 +03:00
|
|
|
std::string nameStr;
|
2007-06-30 19:24:05 +03:00
|
|
|
int offset, //from beginning
|
|
|
|
realSize, //size without compression
|
|
|
|
size; //and with
|
2007-07-07 14:09:25 +03:00
|
|
|
bool operator<(const Entry & comp) const
|
|
|
|
{
|
|
|
|
return this->nameStr<comp.nameStr;
|
|
|
|
}
|
|
|
|
Entry(std::string con): nameStr(con){};
|
|
|
|
Entry(){};
|
2007-06-30 19:24:05 +03:00
|
|
|
};
|
2007-07-01 15:54:59 +03:00
|
|
|
class CPCXConv
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
unsigned char * pcx, *bmp;
|
|
|
|
int pcxs, bmps;
|
|
|
|
void fromFile(std::string path);
|
|
|
|
void saveBMP(std::string path);
|
|
|
|
void openPCX(char * PCX, int len);
|
|
|
|
void openPCX();
|
|
|
|
void convert();
|
|
|
|
CPCXConv(){pcx=bmp=NULL;pcxs=bmps=0;};
|
|
|
|
~CPCXConv(){if (pcxs) delete pcx; if(bmps) delete bmp;}
|
|
|
|
};
|
2007-06-30 19:24:05 +03:00
|
|
|
class CLodHandler
|
|
|
|
{
|
2007-07-07 19:04:15 +03:00
|
|
|
private:
|
|
|
|
std::ifstream FLOD;
|
2007-06-30 19:24:05 +03:00
|
|
|
public:
|
|
|
|
std::vector<Entry> entries;
|
|
|
|
unsigned int totalFiles;
|
|
|
|
|
|
|
|
int readNormalNr (unsigned char* bufor, int bytCon, bool cyclic=false); //lod header reading helper
|
|
|
|
int decompress (unsigned char * source, int size, int realSize, std::ofstream & dest); //main decompression function
|
|
|
|
int decompress (unsigned char * source, int size, int realSize, std::string & dest); //main decompression function
|
|
|
|
int infm(FILE *source, FILE *dest, int wBits = 15); //zlib handler
|
2007-07-07 14:09:25 +03:00
|
|
|
int infs(unsigned char * in, int size, int realSize, std::ofstream & out, int wBits=15); //zlib fast handler
|
|
|
|
int infs2(unsigned char * in, int size, int realSize, unsigned char*& out, int wBits=15); //zlib fast handler
|
2007-07-07 19:04:15 +03:00
|
|
|
std::vector<CDefHandler *> extractManyFiles(std::vector<std::string> defNamesIn, std::string lodName); //extrats given files (defs only)
|
2007-06-30 19:24:05 +03:00
|
|
|
void extract(std::string FName);
|
2007-07-07 19:04:15 +03:00
|
|
|
void extractFile(std::string FName, std::string name); //extracts a specific file
|
2007-06-30 19:24:05 +03:00
|
|
|
void init(std::string lodFile);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif //CLODHANDLER_H
|