mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	* various improvements and code cleanups
This commit is contained in:
		| @@ -22,24 +22,6 @@ int readNormalNr (int pos, int bytCon, const unsigned char * str); | ||||
|  | ||||
| extern DLL_EXPORT CLodHandler *bitmaph; | ||||
|  | ||||
| void BMPHeader::print(std::ostream & out) | ||||
| { | ||||
| 	CDefHandler::print(out,fullSize,4); | ||||
| 	CDefHandler::print(out,_h1,4); | ||||
| 	CDefHandler::print(out,_c1,4); | ||||
| 	CDefHandler::print(out,_c2,4); | ||||
| 	CDefHandler::print(out,x,4); | ||||
| 	CDefHandler::print(out,y,4); | ||||
| 	CDefHandler::print(out,_c3,2); | ||||
| 	CDefHandler::print(out,_c4,2); | ||||
| 	CDefHandler::print(out,_h2,4); | ||||
| 	CDefHandler::print(out,_h3,4); | ||||
| 	CDefHandler::print(out,dataSize1,4); | ||||
| 	CDefHandler::print(out,dataSize2,4); | ||||
| 	for (int i=0;i<8;i++) | ||||
| 		out << _c5[i]; | ||||
| 	out.flush(); | ||||
| } | ||||
| void CPCXConv::openPCX(char * PCX, int len) | ||||
| { | ||||
| 	pcxs=len; | ||||
| @@ -57,11 +39,11 @@ void CPCXConv::fromFile(std::string path) | ||||
| 	is.close(); | ||||
| } | ||||
|  | ||||
| void CPCXConv::saveBMP(std::string path) | ||||
| void CPCXConv::saveBMP(std::string path) const | ||||
| { | ||||
| 	std::ofstream os; | ||||
| 	os.open(path.c_str(), std::ios::binary); | ||||
| 	os.write((char*)bmp,bmps); | ||||
| 	os.write(reinterpret_cast<const char*>(bmp), bmps); | ||||
| 	os.close(); | ||||
| } | ||||
|  | ||||
| @@ -131,19 +113,14 @@ SDL_Surface * CPCXConv::getSurface() const | ||||
| 			tp.unused = 0; | ||||
| 			*(ret->format->palette->colors+i) = tp; | ||||
| 		} | ||||
| 		for (y=height;y>0;y--) | ||||
| 		for (y=height; y>0; --y) | ||||
| 		{ | ||||
| 			it = 0xC + (y-1)*width; | ||||
| 			for (int j=0;j<width;j++) | ||||
| 			{ | ||||
| 				*((char*)ret->pixels + ret->pitch * (y-1) + ret->format->BytesPerPixel * j) = pcx[it+j]; | ||||
| 			} | ||||
| 			memcpy((char*)ret->pixels + ret->pitch * (y-1), pcx + it, width); | ||||
|  | ||||
| 			if (add>0) | ||||
| 			{ | ||||
| 				for (int j=0;j<add;j++) | ||||
| 				{ | ||||
| 					*((char*)ret->pixels + ret->pitch * (y-1) + ret->format->BytesPerPixel * (j+width)) = 0; | ||||
| 				} | ||||
| 				memset((char*)ret->pixels + ret->pitch * (y-1) + width, 0, add); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @@ -152,16 +129,12 @@ SDL_Surface * CPCXConv::getSurface() const | ||||
| 		for (y=height; y>0; y--) | ||||
| 		{ | ||||
| 			it = 0xC + (y-1)*width*3; | ||||
| 			for (int j=0;j<width*3;j++) | ||||
| 			{ | ||||
| 				*((char*)ret->pixels + ret->pitch * (y-1) + j) = pcx[it+j]; | ||||
| 			} | ||||
|  | ||||
| 			memcpy((char*)ret->pixels + ret->pitch * (y-1), pcx + it, width*3); | ||||
|  | ||||
| 			if (add>0) | ||||
| 			{ | ||||
| 				for (int j=0;j<add*3;j++) | ||||
| 				{ | ||||
| 					*((char*)ret->pixels + ret->pitch * (y-1) + (j+width*3)) = 0; | ||||
| 				} | ||||
| 				memset((char*)ret->pixels + ret->pitch * (y-1) + width*3, 0, add*3); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -24,27 +24,13 @@ struct BMPPalette | ||||
| 	unsigned char R,G,B,F; | ||||
| }; | ||||
|  | ||||
| struct BMPHeader | ||||
| { | ||||
| 	int fullSize, _h1, _h2, _h3, _c1, _c2, _c3, _c4, x, y, | ||||
| 		dataSize1, dataSize2; //DataSize=X*Y+2*Y | ||||
| 	unsigned char _c5[8]; | ||||
| 	void print(std::ostream & out); | ||||
| 	BMPHeader() | ||||
| 	{ | ||||
| 		_h1=_h2=0; | ||||
| 		for(int i=0;i<8;i++) | ||||
| 			_c5[i]=0; | ||||
| 	} | ||||
| }; | ||||
|  | ||||
| class CPCXConv | ||||
| {	 | ||||
| public: | ||||
| 	unsigned char * pcx, *bmp; | ||||
| 	int pcxs, bmps; | ||||
| 	void fromFile(std::string path); | ||||
| 	void saveBMP(std::string path); | ||||
| 	void saveBMP(std::string path) const; | ||||
| 	void openPCX(char * PCX, int len); | ||||
| 	SDL_Surface * getSurface() const; //for standard H3 PCX | ||||
| 	//SDL_Surface * getSurfaceZ(); //for ZSoft PCX | ||||
|   | ||||
| @@ -156,3 +156,12 @@ void CCursorHandler::shiftPos( int &x, int &y ) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| CCursorHandler::~CCursorHandler() | ||||
| { | ||||
| 	if(help) | ||||
| 		SDL_FreeSurface(help); | ||||
|  | ||||
| 	for(int g=0; g<cursors.size(); ++g) | ||||
| 		delete cursors[g]; | ||||
| } | ||||
|   | ||||
| @@ -25,7 +25,7 @@ public: | ||||
|  | ||||
| 	std::vector<CDefHandler*> cursors; | ||||
| 	int xpos, ypos; //position of cursor | ||||
| 	void initCursor(); //inits cursorHandler | ||||
| 	void initCursor(); //inits cursorHandler - run only once, it's not memleak-proof (rev 1333) | ||||
| 	void cursorMove(const int & x, const int & y); //change cursor's positions to (x, y) | ||||
| 	void changeGraphic(const int & type, const int & no); //changes cursor graphic for type type (0 - adventure, 1 - combat, 2 - default, 3 - spellbook) and frame no (not used for type 3) | ||||
| 	void draw1(); | ||||
| @@ -34,6 +34,7 @@ public: | ||||
| 	void draw2(); | ||||
| 	void hide(){Show=0;}; | ||||
| 	void show(){Show=1;}; | ||||
| 	~CCursorHandler(); | ||||
| }; | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -77,7 +77,7 @@ void CDefHandler::openFromMemory(unsigned char *table, std::string name) | ||||
| 	DEFType = SDL_SwapLE32(de.DEFType); | ||||
| 	width = SDL_SwapLE32(de.width); | ||||
| 	height = SDL_SwapLE32(de.height); | ||||
| 	totalBlocks = SDL_SwapLE32(de.totalBlocks); | ||||
| 	unsigned int totalBlocks = SDL_SwapLE32(de.totalBlocks); | ||||
|  | ||||
| 	for (unsigned int it=0;it<256;it++) | ||||
| 	{ | ||||
| @@ -91,7 +91,7 @@ void CDefHandler::openFromMemory(unsigned char *table, std::string name) | ||||
| 	p = reinterpret_cast<unsigned char *>(&de); | ||||
| 	p += sizeof(de); | ||||
|  | ||||
| 	totalEntries=0; | ||||
| 	int totalEntries=0; | ||||
| 	for (unsigned int z=0; z<totalBlocks; z++) | ||||
| 	{ | ||||
| 		SDefEntryBlock &block = * reinterpret_cast<SDefEntryBlock *>(p); | ||||
| @@ -139,27 +139,6 @@ void CDefHandler::openFromMemory(unsigned char *table, std::string name) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| unsigned char * CDefHandler::writeNormalNr (int nr, int bytCon) | ||||
| { | ||||
| 	//int tralalalatoniedziala = 2*9+100-4*bytCon; | ||||
| 	//unsigned char * ret = new unsigned char[bytCon]; | ||||
| 	unsigned char * ret = NULL; | ||||
| 	for(int jj=0; jj<100; ++jj) | ||||
| 	{ | ||||
| 		ret = (unsigned char*)calloc(1, bytCon); | ||||
| 		if(ret!=NULL) | ||||
| 			break; | ||||
| 	} | ||||
| 	long long amp = pow((long long int)256,bytCon-1); | ||||
| 	for (int i=bytCon-1; i>=0;i--) | ||||
| 	{ | ||||
| 		int test2 = nr/(amp); | ||||
| 		ret[i]=test2; | ||||
| 		nr -= (nr/(amp))*amp; | ||||
| 		amp/=256; | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| void CDefHandler::expand(unsigned char N,unsigned char & BL, unsigned char & BR) | ||||
| { | ||||
| 	BL = (N & 0xE0) >> 5; | ||||
| @@ -191,15 +170,8 @@ int CDefHandler::readNormalNr (int pos, int bytCon, const unsigned char * str, b | ||||
| 	} | ||||
| 	return ret; | ||||
| } | ||||
| void CDefHandler::print (std::ostream & stream, int nr, int bytcon) | ||||
| { | ||||
| 	unsigned char * temp = writeNormalNr(nr,bytcon); | ||||
| 	for (int i=0;i<bytcon;i++) | ||||
| 		stream << char(temp[i]); | ||||
| 	free(temp); | ||||
| } | ||||
|  | ||||
| SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalette * palette) | ||||
| SDL_Surface * CDefHandler::getSprite (int SIndex, const unsigned char * FDef, const BMPPalette * palette) const | ||||
| { | ||||
| 	SDL_Surface * ret=NULL; | ||||
|  | ||||
| @@ -216,7 +188,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
| 	unsigned char SegmentType;//, BL, BR; //TODO use me | ||||
|  | ||||
| 	BaseOffset = SEntries[SIndex].offset; | ||||
| 	SSpriteDef sd = * reinterpret_cast<SSpriteDef *>(FDef + BaseOffset); | ||||
| 	SSpriteDef sd = * reinterpret_cast<const SSpriteDef *>(FDef + BaseOffset); | ||||
|  | ||||
| 	prSize = SDL_SwapLE32(sd.prSize); //TODO use me | ||||
| 	defType2 = SDL_SwapLE32(sd.defType2); | ||||
| @@ -261,7 +233,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
|  | ||||
| 	// If there's a margin anywhere, just blank out the whole surface. | ||||
| 	if (TopMargin > 0 || BottomMargin > 0 || LeftMargin > 0 || RightMargin > 0) { | ||||
| 		memset(((char *)ret->pixels), 0, FullHeight*FullWidth); | ||||
| 		memset( reinterpret_cast<char*>(ret->pixels), 0, FullHeight*FullWidth); | ||||
| 	} | ||||
|  | ||||
| 	// Skip top margin | ||||
| @@ -277,7 +249,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
| 			if (LeftMargin>0) | ||||
| 				ftcp += LeftMargin; | ||||
|  | ||||
| 			memcpy((char*)(ret->pixels)+ftcp, &FDef[BaseOffset], SpriteWidth); | ||||
| 			memcpy(reinterpret_cast<char*>(ret->pixels)+ftcp, &FDef[BaseOffset], SpriteWidth); | ||||
| 			ftcp += SpriteWidth; | ||||
| 			BaseOffset += SpriteWidth; | ||||
| 			 | ||||
| @@ -289,7 +261,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
|  | ||||
| 	case 1: | ||||
| 	{ | ||||
| 		unsigned int * RWEntriesLoc = reinterpret_cast<unsigned int *>(FDef+BaseOffset); | ||||
| 		const unsigned int * RWEntriesLoc = reinterpret_cast<const unsigned int *>(FDef+BaseOffset); | ||||
| 		BaseOffset += sizeof(int) * SpriteHeight; | ||||
| 		for (unsigned int i=0;i<SpriteHeight;i++) | ||||
| 		{ | ||||
| @@ -309,7 +281,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
| 				{ | ||||
| 					for (unsigned int k=0; k<SegmentLength;k++) | ||||
| 					{ | ||||
| 						((char*)(ret->pixels))[ftcp++]=FDef[BaseOffset+k]; | ||||
| 						(reinterpret_cast<char*>(ret->pixels))[ftcp++]=FDef[BaseOffset+k]; | ||||
| 						if ((TotalRowLength+k)>=SpriteWidth) | ||||
| 							break; | ||||
| 					} | ||||
| @@ -318,7 +290,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					memset((char*)(ret->pixels)+ftcp, SegmentType, SegmentLength); | ||||
| 					memset(reinterpret_cast<char*>(ret->pixels)+ftcp, SegmentType, SegmentLength); | ||||
| 					ftcp += SegmentLength; | ||||
| 					TotalRowLength += SegmentLength; | ||||
| 				} | ||||
| @@ -337,11 +309,7 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
|  | ||||
| 	case 2: | ||||
| 	{ | ||||
| 		/*for (int i=0;i<SpriteHeight;i++) | ||||
| 		{ | ||||
| 			RWEntries[i] = readNormalNr(BaseOffsetor+i*2*(SpriteWidth/32), 2, FDef); | ||||
| 		}*/ | ||||
| 		BaseOffset = BaseOffsetor + *(unsigned short*)( FDef + BaseOffsetor ); //was + RWEntries[0]; | ||||
| 		BaseOffset = BaseOffsetor + *reinterpret_cast<const unsigned short*>( FDef + BaseOffsetor ); //was + RWEntries[0]; | ||||
| 		for (unsigned int i=0;i<SpriteHeight;i++) | ||||
| 		{ | ||||
| 			//BaseOffset = BaseOffsetor+RWEntries[i]; | ||||
| @@ -357,13 +325,13 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
| 				unsigned char value = (SegmentType & 31) + 1; | ||||
| 				if(code==7) | ||||
| 				{ | ||||
| 					memcpy((char*)(ret->pixels)+ftcp, &FDef[BaseOffset], value); | ||||
| 					memcpy(reinterpret_cast<char*>(ret->pixels)+ftcp, &FDef[BaseOffset], value); | ||||
| 					ftcp += value; | ||||
| 					BaseOffset += value; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					memset((char*)(ret->pixels)+ftcp, code, value); | ||||
| 					memset(reinterpret_cast<char*>(ret->pixels)+ftcp, code, value); | ||||
| 					ftcp += value; | ||||
| 				} | ||||
| 				TotalRowLength+=value; | ||||
| @@ -382,10 +350,6 @@ SDL_Surface * CDefHandler::getSprite (int SIndex, unsigned char * FDef, BMPPalet | ||||
|  | ||||
| 	case 3: | ||||
| 	{ | ||||
| 		/*for (int i=0;i<SpriteHeight;i++) | ||||
| 		{ | ||||
| 			RWEntries[i] = readNormalNr(BaseOffsetor+i*2*(SpriteWidth/32), 2, FDef); | ||||
| 		}*/ | ||||
| 		for (unsigned int i=0;i<SpriteHeight;i++) | ||||
| 		{ | ||||
| 			BaseOffset = BaseOffsetor + *(unsigned short*)( FDef + BaseOffsetor+i*2*(SpriteWidth/32) ); //was + RWEntries[i] before speedup | ||||
|   | ||||
| @@ -68,8 +68,7 @@ struct SSpriteDef { | ||||
| class CDefHandler | ||||
| { | ||||
| private: | ||||
| 	unsigned int totalEntries, DEFType, totalBlocks; | ||||
| 	bool allowRepaint; | ||||
| 	unsigned int DEFType; | ||||
| 	int length; | ||||
| 	//unsigned int * RWEntries; | ||||
| 	struct SEntry | ||||
| @@ -82,19 +81,17 @@ private: | ||||
|  | ||||
| public: | ||||
| 	int width, height; //width and height | ||||
| 	std::string defName, curDir; | ||||
| 	std::string defName; | ||||
| 	std::vector<Cimage> ourImages; | ||||
| 	bool alphaTransformed; | ||||
| 	bool notFreeImgs; | ||||
|  | ||||
| 	CDefHandler(); //c-tor | ||||
| 	~CDefHandler(); //d-tor | ||||
| 	static void print (std::ostream & stream, int nr, int bytcon); | ||||
| 	static int readNormalNr (int pos, int bytCon, const unsigned char * str=NULL, bool cyclic=false); | ||||
| 	static unsigned char *writeNormalNr (int nr, int bytCon); | ||||
| 	SDL_Surface * getSprite (int SIndex, unsigned char * FDef, BMPPalette * palette); //zapisuje klatke o zadanym numerze do "testtt.bmp" | ||||
| 	SDL_Surface * getSprite (int SIndex, const unsigned char * FDef, const BMPPalette * palette) const; //zapisuje klatke o zadanym numerze do "testtt.bmp" | ||||
| 	void openDef(std::string name); | ||||
| 	void expand(unsigned char N,unsigned char & BL, unsigned char & BR); | ||||
| 	static void expand(unsigned char N,unsigned char & BL, unsigned char & BR); | ||||
| 	void openFromMemory(unsigned char * table, std::string name); | ||||
| 	CDefEssential * essentialize(); | ||||
|  | ||||
|   | ||||
| @@ -98,82 +98,6 @@ unsigned char * CLodHandler::giveFile(std::string defName, int * length) | ||||
| 	return NULL; | ||||
| } | ||||
|  | ||||
| int CLodHandler::infs(unsigned char * in, int size, int realSize, std::ofstream & out, int wBits) | ||||
| { | ||||
| 	int ret; | ||||
| 	unsigned have; | ||||
| 	z_stream strm; | ||||
| 	unsigned char inx[NLoadHandlerHelp::fCHUNK]; | ||||
| 	unsigned char outx[NLoadHandlerHelp::fCHUNK]; | ||||
|  | ||||
| 	/* allocate inflate state */ | ||||
| 	strm.zalloc = Z_NULL; | ||||
| 	strm.zfree = Z_NULL; | ||||
| 	strm.opaque = Z_NULL; | ||||
| 	strm.avail_in = 0; | ||||
| 	strm.next_in = Z_NULL; | ||||
| 	ret = inflateInit2(&strm, wBits); | ||||
| 	if (ret != Z_OK) | ||||
| 		return ret; | ||||
| 	int chunkNumber = 0; | ||||
| 	do | ||||
| 	{ | ||||
| 		int readBytes = 0; | ||||
| 		for(int i=0; i<NLoadHandlerHelp::fCHUNK && (chunkNumber * NLoadHandlerHelp::fCHUNK + i)<size; ++i) | ||||
| 		{ | ||||
| 			inx[i] = in[chunkNumber * NLoadHandlerHelp::fCHUNK + i]; | ||||
| 			++readBytes; | ||||
| 		} | ||||
| 		++chunkNumber; | ||||
| 		strm.avail_in = readBytes; | ||||
| 		//strm.avail_in = fread(inx, 1, NLoadHandlerHelp::fCHUNK, source); | ||||
| 		/*if (in.bad()) | ||||
| 		{ | ||||
| 			(void)inflateEnd(&strm); | ||||
| 			return Z_ERRNO; | ||||
| 		}*/ | ||||
| 		if (strm.avail_in == 0) | ||||
| 			break; | ||||
| 		strm.next_in = inx; | ||||
|  | ||||
| 		/* run inflate() on input until output buffer not full */ | ||||
| 		do | ||||
| 		{ | ||||
| 			strm.avail_out = NLoadHandlerHelp::fCHUNK; | ||||
| 			strm.next_out = outx; | ||||
| 			ret = inflate(&strm, Z_NO_FLUSH); | ||||
| 			//assert(ret != Z_STREAM_ERROR);  /* state not clobbered */ | ||||
| 			switch (ret) | ||||
| 			{ | ||||
| 				case Z_NEED_DICT: | ||||
| 					ret = Z_DATA_ERROR;	 /* and fall through */ | ||||
| 				case Z_DATA_ERROR: | ||||
| 				case Z_MEM_ERROR: | ||||
| 					(void)inflateEnd(&strm); | ||||
| 					return ret; | ||||
| 			} | ||||
| 			have = NLoadHandlerHelp::fCHUNK - strm.avail_out; | ||||
| 			/*if (fwrite(out, 1, have, dest) != have || ferror(dest)) | ||||
| 			{ | ||||
| 				(void)inflateEnd(&strm); | ||||
| 				return Z_ERRNO; | ||||
| 			}*/ | ||||
| 			out.write((char*)outx, have); | ||||
| 			if(out.bad()) | ||||
| 			{ | ||||
| 				(void)inflateEnd(&strm); | ||||
| 				return Z_ERRNO; | ||||
| 			} | ||||
| 		} while (strm.avail_out == 0); | ||||
|  | ||||
| 		/* done when inflate() says it's done */ | ||||
| 	} while (ret != Z_STREAM_END); | ||||
|  | ||||
| 	/* clean up and return */ | ||||
| 	(void)inflateEnd(&strm); | ||||
| 	return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; | ||||
| } | ||||
|  | ||||
| DLL_EXPORT int CLodHandler::infs2(unsigned char * in, int size, int realSize, unsigned char *& out, int wBits) | ||||
| { | ||||
| 	int ret; | ||||
| @@ -240,52 +164,20 @@ DLL_EXPORT int CLodHandler::infs2(unsigned char * in, int size, int realSize, un | ||||
|  | ||||
| void CLodHandler::extractFile(std::string FName, std::string name) | ||||
| { | ||||
| 	std::transform(name.begin(), name.end(), name.begin(), (int(*)(int))toupper); | ||||
| 	for (int i=0;i<totalFiles;i++) | ||||
| 	{ | ||||
| 		std::string buf1 = entries[i].nameStr; | ||||
| 		std::transform(buf1.begin(), buf1.end(), buf1.begin(), (int(*)(int))toupper); | ||||
| 		if(buf1!=name) | ||||
| 			continue; | ||||
| 		LOD.seekg(entries[i].offset, std::ios::beg); | ||||
| 		std::string bufff = (FName); | ||||
| 		unsigned char * outp; | ||||
| 		if (entries[i].size==0) //file is not compressed | ||||
| 		{ | ||||
| 			outp = new unsigned char[entries[i].realSize]; | ||||
| 			LOD.read((char*)outp, entries[i].realSize); | ||||
| 	int len; //length of file to write | ||||
| 	unsigned char * outp = giveFile(name, &len); | ||||
| 	std::ofstream out; | ||||
| 			out.open(bufff.c_str(), std::ios::binary); | ||||
| 	out.open(FName.c_str(), std::ios::binary); | ||||
| 	if(!out.is_open()) | ||||
| 	{ | ||||
| 				tlog1<<"Unable to create "<<bufff; | ||||
| 		tlog1<<"Unable to create "<<FName<<std::endl; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 				for(int hh=0; hh<entries[i].realSize; ++hh) | ||||
| 				{ | ||||
| 					out<<*(outp+hh); | ||||
| 				} | ||||
| 		out.write(reinterpret_cast<char*>(outp), len); | ||||
| 		out.close(); | ||||
| 	} | ||||
| } | ||||
| 		else //we will decompressing file | ||||
| 		{ | ||||
| 			outp = new unsigned char[entries[i].size]; | ||||
| 			LOD.read((char*)outp, entries[i].size); | ||||
| 			std::ofstream destin; | ||||
| 			destin.open(bufff.c_str(), std::ios::binary); | ||||
| 			//int decRes = decompress(outp, entries[i].size, entries[i].realSize, bufff); | ||||
| 			int decRes = infs(outp, entries[i].size, entries[i].realSize, destin); | ||||
| 			destin.close(); | ||||
| 			if(decRes!=0) | ||||
| 			{ | ||||
| 				tlog1<<"LOD Extraction error"<<"  "<<decRes<<" while extracting to "<<bufff<<std::endl; | ||||
| 			} | ||||
| 		} | ||||
| 		delete[] outp; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void CLodHandler::init(std::string lodFile, std::string dirName) | ||||
| { | ||||
| @@ -368,10 +260,7 @@ std::string CLodHandler::getTextFile(std::string name) | ||||
| 		exit(1); | ||||
| 	} | ||||
|  | ||||
| 	std::string ret; | ||||
| 	ret.reserve(length); | ||||
| 	for(int i=0;i<length;i++) | ||||
| 		ret+=data[i]; | ||||
| 	std::string ret(data, data+length); | ||||
| 	delete [] data; | ||||
| 	return ret; | ||||
| } | ||||
|   | ||||
| @@ -70,7 +70,6 @@ public: | ||||
|  | ||||
| 	CLodHandler(); | ||||
| 	~CLodHandler(); | ||||
| 	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 | ||||
| 	unsigned char * giveFile(std::string defName, int * length=NULL); //returns pointer to the decompressed data - it must be deleted when no longer needed! | ||||
| 	std::string getTextFile(std::string name); //extracts one file | ||||
|   | ||||
		Reference in New Issue
	
	Block a user