blob: 1f87b7465e0ec161cd01445df75ebcb77ed6b911 [file] [log] [blame]
#include "System.h"
#include "Formatter.h"
Formatter::Formatter(File* file)
{
_file = file;
}
Formatter::~Formatter(void)
{
}
SFXFooter* Formatter::ParseFooter()
{
//navigate and read SFX Footer
if ( false == _file->Seek(_file, - sizeof(SFXFooter), SEEK__END ))
return 0;
SFXFooter* footer = (SFXFooter*)System::SafeAllocMemory(sizeof(SFXFooter));
UINT packageSize = _file->ReadUINT(_file);
UINT crc32 = _file->ReadUINT(_file);
footer->PackageSize = packageSize;
footer->CRC32 = crc32;
return footer;
}
SFXHeader* Formatter::ParseHeader(void)
{
SFXHeader* header = (SFXHeader*)System::SafeAllocMemory(sizeof(SFXHeader));
_file->Read(_file,header->Signature,19);
BYTE version = 0;
_file->Read(_file,&version,1);
header->Version = version;
header->numberOfFiles = _file->ReadUINT(_file);
return header;
}
ExecutionInfo* Formatter::ParseExecutionInfo(void)
{
ExecutionInfo* result = (ExecutionInfo*)System::SafeAllocMemory(sizeof(ExecutionInfo));
result->Flags = _file->ReadUINT(_file);
result->ExecutableStringId = _file->ReadUINT(_file);
result->ArgsStringId = _file->ReadUINT(_file);
return result;
}
FileInformation* Formatter::ParseFileInformationTable(UINT entriesCount)
{
FileInformation* result = (FileInformation*)System::SafeAllocMemory(entriesCount * sizeof(FileInformation));
for ( int i = 0; i < entriesCount; i ++)
{
UINT fileSize = _file->ReadUINT(_file);
UINT fileName = _file->ReadUINT(_file);
UINT* currStructPointer = (UINT*)(result + i);
*currStructPointer = fileSize;
*(currStructPointer + 1) = fileName;
}
return result;
}