index b533664d29bb1c60e3ccf11da9131f8a97a123ea..5e0573ec38406d092a9fee06516c2fcd2b87837b 100644 (file)
--- a/src/shared/WADEDITOR.pas
+++ b/src/shared/WADEDITOR.pas
unit WADEDITOR;
-{$MODE Delphi}
-
{
-----------------------------------
-WADEDITOR.PAS ВЕРСИЯ ОТ 26.08.08
+WADEDITOR.PAS ÂÅÐÑÈß ÎÒ 26.08.08
-Поддержка вадов версии 1
+Ïîääåðæêà âàäîâ âåðñèè 1
-----------------------------------
}
implementation
uses
- SysUtils, BinEditor, ZLib;
+ SysUtils, BinEditor, ZLib, utils, e_log;
const
DFWAD_OPENED_NONE = 0;
end;
end;
+procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
+ out OutBuf: Pointer; out OutBytes: Integer);
+var
+ strm: TZStreamRec;
+ P: Pointer;
+begin
+ FillChar(strm, sizeof(strm), 0);
+ OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;
+ GetMem(OutBuf, OutBytes);
+ try
+ strm.next_in := InBuf;
+ strm.avail_in := InBytes;
+ strm.next_out := OutBuf;
+ strm.avail_out := OutBytes;
+ deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm));
+ try
+ while deflate(strm, Z_FINISH) <> Z_STREAM_END do
+ begin
+ P := OutBuf;
+ Inc(OutBytes, 256);
+ ReallocMem(OutBuf, OutBytes);
+ strm.next_out := PByteF(PtrUInt(OutBuf + (strm.next_out - P)));
+ strm.avail_out := 256;
+ end;
+ finally
+ deflateEnd(strm);
+ end;
+ ReallocMem(OutBuf, strm.total_out);
+ OutBytes := strm.total_out;
+ except
+ FreeMem(OutBuf);
+ raise
+ end;
+end;
+
procedure g_ProcessResourceStr(ResourceStr: String; var FileName,
SectionName, ResourceName: String);
var
ResCompressed := nil;
ResCompressedSize := 0;
- Compress(Data, @Len, ResCompressed, ResCompressedSize);
+ CompressBuf(Data, Len, ResCompressed, ResCompressedSize);
if ResCompressed = nil then Exit;
+ e_WriteLog('Fuck me (D)', MSG_NOTIFY);
if FResData = nil then FResData := AllocMem(ResCompressedSize)
else ReallocMem(FResData, FDataSize+Cardinal(ResCompressedSize));
begin
Result := False;
- AssignFile(ResourceFile, FileName);
+ AssignFile(ResourceFile, findFileCIStr(FileName));
try
Reset(ResourceFile, 1);
ResCompressed := nil;
ResCompressedSize := 0;
- Compress(TempResource, @OriginalSize, ResCompressed, ResCompressedSize);
+ CompressBuf(TempResource, OriginalSize, ResCompressed, ResCompressedSize);
FreeMemory(TempResource);
if ResCompressed = nil then Exit;
if FResData <> nil then FreeMem(FResData);
try
- AssignFile(WADFile, FFileName);
+ AssignFile(WADFile, findFileCIStr(FFileName));
Reset(WADFile, 1);
b := 6+SizeOf(TWADHeaderRec_1)+SizeOf(TResourceTableRec_1)*Length(FResTable);
Exit;
end;
- Section := UpperCase(Section);
- Resource := UpperCase(Resource);
+ Section := toLowerCase1251(Section);
+ Resource := toLowerCase1251(Resource);
i := -1;
for a := 0 to High(FResTable) do
begin
if FResTable[a].Length = 0 then
begin
- CurrentSection := FResTable[a].ResourceName;
+ CurrentSection := toLowerCase1251(FResTable[a].ResourceName);
Continue;
end;
- if (FResTable[a].ResourceName = Resource) and
+ if (toLowerCase1251(FResTable[a].ResourceName) = Resource) and
(CurrentSection = Section) then
begin
i := a;
if FWADOpened = DFWAD_OPENED_FILE then
begin
try
- AssignFile(WADFile, FFileName);
+ AssignFile(WADFile, findFileCIStr(FFileName));
Reset(WADFile, 1);
Seek(WADFile, FResTable[i].Address+6+
else
begin
TempData := GetMemory(FResTable[i].Length);
- CopyMemory(TempData, Pointer(LongWord(FResData)+FResTable[i].Address+6+
- LongWord(SizeOf(TWADHeaderRec_1)+SizeOf(TResourceTableRec_1)*Length(FResTable))),
+ CopyMemory(TempData, Pointer(PtrUInt(FResData)+FResTable[i].Address+6+
+ PtrUInt(SizeOf(TWADHeaderRec_1)+SizeOf(TResourceTableRec_1)*Length(FResTable))),
FResTable[i].Length);
DecompressBuf(TempData, FResTable[i].Length, 0, pData, OutBytes);
FreeMem(TempData);
FFileName := FileName;
- AssignFile(WADFile, FFileName);
+ AssignFile(WADFile, findFileCIStr(FFileName));
try
Reset(WADFile, 1);
Exit;
end;
- CopyMemory(@FVersion, Pointer(LongWord(Data)+5), 1);
+ CopyMemory(@FVersion, Pointer(PtrUInt(Data)+5), 1);
if FVersion <> DFWAD_VERSION then
begin
FLastError := DFWAD_ERROR_WRONGVERSION;
Exit;
end;
- CopyMemory(@FHeader, Pointer(LongWord(Data)+6), SizeOf(TWADHeaderRec_1));
+ CopyMemory(@FHeader, Pointer(PtrUInt(Data)+6), SizeOf(TWADHeaderRec_1));
SetLength(FResTable, FHeader.RecordsCount);
if FResTable <> nil then
begin
- CopyMemory(@FResTable[0], Pointer(LongWord(Data)+6+SizeOf(TWADHeaderRec_1)),
+ CopyMemory(@FResTable[0], Pointer(PtrUInt(Data)+6+SizeOf(TWADHeaderRec_1)),
SizeOf(TResourceTableRec_1)*FHeader.RecordsCount);
for a := 0 to High(FResTable) do
begin
if FResTable = nil then Exit;
+ e_WriteLog('Fuck me (B) ' + Section + ' ' + Resource, MSG_NOTIFY);
+
i := -1;
b := 0;
c := 0;
if i = -1 then Exit;
+ e_WriteLog('Fuck me (C) ' + Section + ' ' + Resource, MSG_NOTIFY);
+
for a := i to High(FResTable)-1 do
FResTable[a] := FResTable[a+1];
d := d+FResTable[a].Length;
end;
- CopyMemory(Pointer(LongWord(FResData)+c), Pointer(LongWord(FResData)+c+b), d);
+ CopyMemory(Pointer(PtrUInt(FResData)+c), Pointer(PtrUInt(FResData)+c+b), d);
FDataSize := FDataSize-b;
FOffset := FOffset-b;