X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_selectmap.pas;h=7474330705f0c70b96027895375359b9a5cffbed;hb=24d173d1ebd972a69c80d3e4e6dfea86c9a144e1;hp=afa6a3eba7058b36db59176811c9283e1b747020;hpb=b72e164f0fb64e3301ae8ca217449daf6a9d301d;p=d2df-editor.git diff --git a/src/editor/f_selectmap.pas b/src/editor/f_selectmap.pas index afa6a3e..7474330 100644 --- a/src/editor/f_selectmap.pas +++ b/src/editor/f_selectmap.pas @@ -1,12 +1,12 @@ unit f_selectmap; -{$MODE Delphi} +{$INCLUDE ../shared/a_modes.inc} 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,34 @@ 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 + g_ReadResource(FileName, win2utf(list.Files[i].path), win2utf(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.