#include "stdafx.h"

#include "module4.h"

void ExtractMPQFile(char *mpq,char *file, wchar_t *newFile)
{
	HANDLE hMpq=NULL;//MPQ архив
	HANDLE hFile=NULL;//MPQ файл

	if(!SFileOpenArchive(mpq,NULL,NULL,&hMpq))//если не удалось открыть архив, выход из функции
		return;

	if(!SFileOpenFile(file,&hFile))//если не удалось открыть файл, выход из функции
		return;

	HANDLE hNewFile=CreateFile(newFile,GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
	char  szBuffer[0x10000];
    DWORD dwBytes = 1;

    while(dwBytes > 0)
    {
		SFileReadFile(hFile, szBuffer, sizeof(szBuffer), &dwBytes, NULL);//читаем байты в буффер из файла
		if(dwBytes > 0)
			WriteFile(hNewFile, szBuffer, dwBytes, &dwBytes, NULL);
    }

	CloseHandle(hNewFile);
	SFileCloseFile(hFile);//закрываем файл
	SFileCloseArchive(hMpq);//закрываем архив
}
DWORD GetMPQFileSize(char *mpq,char *file)
{
	HANDLE hMpq=NULL;//MPQ архив
	HANDLE hFile=NULL;//MPQ файл
	DWORD size;//размер файла в байтах

	if(!SFileOpenArchive(mpq,NULL,NULL,&hMpq))//если не удалось открыть архив, выход из функции
		return 0;

	if(!SFileOpenFile(file,&hFile))//если не удалось открыть файл, выход из функции
		return 0;

	size=SFileGetFileSize(hFile,NULL);//получаем размер файла

	SFileCloseFile(hFile);//закрываем файл
	SFileCloseArchive(hMpq);//закрываем архив

	return size;
}

char *LoadFromMPQ(char *mpq,char *file)
{
	HANDLE hMpq=NULL;//MPQ архив
	HANDLE hFile=NULL;//MPQ файл
	DWORD size;//размер файла в байтах

	if(!SFileOpenArchive(mpq,NULL,NULL,&hMpq))//если не удалось открыть архив, выход из функции
		return '\0';

	if(!SFileOpenFile(file,&hFile))//если не удалось открыть файл, выход из функции
		return '\0';

	size=SFileGetFileSize(hFile,NULL);//получаем размер файла

	char *data=new char[size];

	SFileReadFile(hFile,data,size,NULL,NULL);

	SFileCloseFile(hFile);//закрываем файл
	SFileCloseArchive(hMpq);//закрываем архив

	return data;
}