DEADSOFTWARE

Added SFS support (resource wads only) (#4)
[d2df-editor.git] / src / editor / g_resources.pas
1 unit g_resources;
3 interface
5 procedure g_ReadResource (wad, section, name: String; out data: PByte; out len: Integer);
6 procedure g_ReadSubResource (wad, section0, name0, section1, name1: String; out data: PByte; out len: Integer);
8 implementation
10 uses sfs, utils, Classes;
12 procedure g_ReadResource (wad, section, name: String; out data: PByte; out len: Integer);
13 var
14 stream: TStream;
15 str: String;
16 i: Integer;
17 begin
18 section := utf2win(section);
19 name := utf2win(name);
20 data := nil;
21 len := 0;
22 sfsGCDisable;
23 if SFSAddDataFileTemp(wad) then
24 begin
25 str := SFSGetLastVirtualName(section + '\' + name);
26 stream := SFSFileOpen(wad + '::' + str);
27 if stream <> nil then
28 begin
29 len := stream.Size;
30 GetMem(data, len);
31 //stream.ReadBuffer(data, len); (* leads to segfault *)
32 for i := 0 to len - 1 do
33 data[i] := stream.ReadByte();
34 stream.Destroy
35 end
36 end;
37 sfsGCEnable
38 end;
40 procedure g_ReadSubResource (wad, section0, name0, section1, name1: String; out data: PByte; out len: Integer);
41 var
42 stream0, stream1: TStream;
43 str0, str1: String;
44 i: Integer;
45 begin
46 section0 := utf2win(section0);
47 name0 := utf2win(name0);
48 section1 := utf2win(section1);
49 name1 := utf2win(name1);
50 data := nil;
51 len := 0;
52 sfsGCDisable;
53 if SFSAddDataFile(wad) then
54 begin
55 str0 := SFSGetLastVirtualName(section0 + '\' + name0);
56 stream0 := SFSFileOpen(wad + '::' + str0);
57 if stream0 <> nil then
58 begin
59 if SFSAddSubDataFile(wad + '\' + str0, stream0) then
60 begin
61 str1 := SFSGetLastVirtualName(section1 + '\' + name1);
62 stream1 := SFSFileOpen(wad + '\' + str0 + '::' + str1);
63 if stream1 <> nil then
64 begin
65 len := stream1.Size;
66 GetMem(data, len);
67 //stream1.ReadBuffer(data, len); (* leads to segfault *)
68 for i := 0 to len - 1 do
69 data[i] := stream1.ReadByte();
70 stream1.Destroy
71 end
72 end;
73 //stream0.Destroy (* leads to memory corruption *)
74 end
75 end;
76 sfsGCEnable;
77 end;
79 end.