rendered paste bodyusing System;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip.Compression;
namespace MPKLib
{
public class MPAK
{
/// <summary>
/// Loads an MPK/NPK from the file specified
/// </summary>
/// <param name="filename">file</param>
public MPAK(string filename)
{
Load(filename);
}
/// <summary>
/// Creates a new empty MPAK
/// </summary>
public MPAK()
{
}
public bool Load(string file)
{
BinaryReader reader = new StreamReader(file);
uint mpak = reader.ReadUInt32();
if (mpak != 0x4B41504D)
throw new Exception("Unkown file format.");
byte version = reader.ReadByte();
if (version != 0x02)
throw new Exception("Unkown mpk archive version (" + m_version + ")!");
byte[] buffer = new byte[16];
reader.Read(buffer, 0, 16);
for (int i = 0; i < 16; i++)
buffer[0] ^= i;
long checksum = (long)(buffer[0] + (buffer[1] << 8) + (buffer[2] << 16) + (buffer[3] << 24));
int dirsize = buffer[4] + (buffer[5] << 8) + (buffer[6] << 16) + (buffer[7] << 24);
int namesize = buffer[8] + (buffer[9] << 8) + (buffer[10] << 16) + (buffer[11] << 24);
int filecount = buffer[12] + (buffer[13] << 8) + (buffer[14] << 16) + (buffer[15] << 24);
buffer = new byte[namesize];
reader.Read(buffer, 0, namesize);
Inflater inflater = new Inflater();
inflater.SetInput(buffer);
/* procedure TMPKFile.ReadArchive(AIn: TStream);
var
FDirSize, FFileCount: LongInt;
FDirBuf, FFileBuf: TStream;
procedure ReadHeader(ABuf: TStream);
var
FBuf: array of Byte;
FName: Pointer;
I, FNameSize: Integer;
begin
// Read 16 byte.
SetLength(FBuf, 16);
try
ABuf.Read(FBuf[0], 16);
// Decode buffer
for I := 0 to 15 do
FBuf[I] := FBuf[I] xor I;
// Parse
FChecksum := FBuf[0] + (FBuf[1] shl 8) + (FBuf[2] shl 16) + (FBuf[3] shl 24);
FDirSize := FBuf[4] + (FBuf[5] shl 8) + (FBuf[6] shl 16) + (FBuf[7] shl 24);
FNameSize := FBuf[8] + (FBuf[9] shl 8) + (FBuf[10] shl 16) + (FBuf[11] shl 24);
FFileCount := FBuf[12] + (FBuf[13] shl 8) + (FBuf[14] shl 16) + (FBuf[15] shl 24);
finally
SetLength(FBuf, 0);
end;
// Read deflated name data
SetLength(FBuf, FNameSize);
try
ABuf.Read(FBuf[0], FNameSize);
// Inflate name data
DecompressBuf(@FBuf[0], FNameSize, 0, FName, I);
try
FInnerName := LeftStr(PChar(FName), I);
finally
FreeMem(FName);
end;
finally
SetLength(FBuf, 0);
end;
end;
*/
}
public bool Save(string file)
{
throw new NotImplementedException();
}
}
}