X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2FWADEDITOR.pas;h=5e0573ec38406d092a9fee06516c2fcd2b87837b;hb=f232b1e693edf980b15da896079eaa26bab5ef9d;hp=3c6c1a3082fc80c9290ace750a56bc3921b963a0;hpb=c3be56f2a3849cd22be39ce594498c7990e05606;p=d2df-editor.git diff --git a/src/shared/WADEDITOR.pas b/src/shared/WADEDITOR.pas index 3c6c1a3..5e0573e 100644 --- a/src/shared/WADEDITOR.pas +++ b/src/shared/WADEDITOR.pas @@ -75,7 +75,7 @@ const implementation uses - SysUtils, BinEditor, ZLib; + SysUtils, BinEditor, ZLib, utils, e_log; const DFWAD_OPENED_NONE = 0; @@ -122,6 +122,41 @@ begin 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 @@ -220,8 +255,9 @@ begin 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)); @@ -291,7 +327,7 @@ var begin Result := False; - AssignFile(ResourceFile, FileName); + AssignFile(ResourceFile, findFileCIStr(FileName)); try Reset(ResourceFile, 1); @@ -316,7 +352,7 @@ begin ResCompressed := nil; ResCompressedSize := 0; - Compress(TempResource, @OriginalSize, ResCompressed, ResCompressedSize); + CompressBuf(TempResource, OriginalSize, ResCompressed, ResCompressedSize); FreeMemory(TempResource); if ResCompressed = nil then Exit; @@ -421,7 +457,7 @@ begin 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); @@ -549,19 +585,19 @@ begin 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; @@ -578,7 +614,7 @@ begin if FWADOpened = DFWAD_OPENED_FILE then begin try - AssignFile(WADFile, FFileName); + AssignFile(WADFile, findFileCIStr(FFileName)); Reset(WADFile, 1); Seek(WADFile, FResTable[i].Address+6+ @@ -600,8 +636,8 @@ begin 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); @@ -695,7 +731,7 @@ begin FFileName := FileName; - AssignFile(WADFile, FFileName); + AssignFile(WADFile, findFileCIStr(FFileName)); try Reset(WADFile, 1); @@ -761,19 +797,19 @@ begin 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 @@ -799,6 +835,8 @@ var begin if FResTable = nil then Exit; + e_WriteLog('Fuck me (B) ' + Section + ' ' + Resource, MSG_NOTIFY); + i := -1; b := 0; c := 0; @@ -824,6 +862,8 @@ begin 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]; @@ -837,7 +877,7 @@ begin 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;