X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_selectmap.pas;h=8d5eecc654bee87e7eefedca55c69fc99ab46ecb;hb=c31a0cde6506576625aab584c2c45aac9168f2dd;hp=a83e3e03b140d0c76fcdbc0dcb8d9a628fa9d03b;hpb=3dc2fe6b3d29cd54425db8f590e922f2dce50e99;p=d2df-editor.git diff --git a/src/editor/f_selectmap.pas b/src/editor/f_selectmap.pas index a83e3e0..8d5eecc 100644 --- a/src/editor/f_selectmap.pas +++ b/src/editor/f_selectmap.pas @@ -6,7 +6,7 @@ interface uses LCLIntf, LCLType, LMessages, SysUtils, Variants, Classes, Graphics, - Controls, Forms, Dialogs, StdCtrls, ExtCtrls; + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, utils; type TSelectMapForm = class (TForm) @@ -32,7 +32,7 @@ var implementation uses - BinEditor, MAPREADER, WADEDITOR, WADSTRUCT, MAPSTRUCT; + MAPREADER, MAPSTRUCT, g_resources, sfs; {$R *.lfm} @@ -54,41 +54,35 @@ begin end; procedure TSelectMapForm.GetMaps(FileName: String); -var - WAD: TWADEditor_1; - a: Integer; - ResList: SArray; - Data: Pointer; - Len: Integer; - Sign: Array [0..2] of Char; - + var + data: PByte; + list: TSFSFileList; + sign: Array [0..2] of Char; + i, len: Integer; begin lbMapList.Items.Clear(); - WAD := TWADEditor_1.Create(); - if not WAD.ReadFile(FileName) then - begin - WAD.Free(); - Exit; - end; + list := SFSFileList(FileName); + if list = nil then Exit; - ResList := WAD.GetResourcesList(''); + for i := 0 to list.Count - 1 do + begin + writeln('GetMap "' + list.Files[i].path + '" "' + list.Files[i].name + '"'); + g_ReadResource(FileName, list.Files[i].path, list.Files[i].name, data, len); - if ResList <> nil then - for a := 0 to High(ResList) do + if len >= 3 then begin - if not WAD.GetResource('', ResList[a], Data, Len) then - Continue; - - CopyMemory(@Sign[0], Data, 3); - FreeMem(Data); - - if Sign = MAP_SIGNATURE then - lbMapList.Items.Add(ResList[a]); - Sign := ''; + sign[0] := chr(data[0]); + sign[1] := chr(data[1]); + sign[2] := chr(data[2]); + if sign = MAP_SIGNATURE then + lbMapList.Items.Add(win2utf(list.Files[i].name)) end; - WAD.Free(); + if len > 0 then FreeMem(data) + end; + + list.Destroy end; end.