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);
10 uses sfs
, utils
, Classes
;
12 procedure g_ReadResource (wad
, section
, name
: String; out data
: PByte; out len
: Integer);
18 section
:= utf2win(section
);
19 name
:= utf2win(name
);
23 if SFSAddDataFileTemp(wad
) then
25 str
:= SFSGetLastVirtualName(section
+ '\' + name
);
26 stream
:= SFSFileOpen(wad
+ '::' + str
);
31 //stream.ReadBuffer(data, len); (* leads to segfault *)
32 for i
:= 0 to len
- 1 do
33 data
[i
] := stream
.ReadByte();
40 procedure g_ReadSubResource (wad
, section0
, name0
, section1
, name1
: String; out data
: PByte; out len
: Integer);
42 stream0
, stream1
: TStream
;
46 section0
:= utf2win(section0
);
47 name0
:= utf2win(name0
);
48 section1
:= utf2win(section1
);
49 name1
:= utf2win(name1
);
53 if SFSAddDataFile(wad
) then
55 str0
:= SFSGetLastVirtualName(section0
+ '\' + name0
);
56 stream0
:= SFSFileOpen(wad
+ '::' + str0
);
57 if stream0
<> nil then
59 if SFSAddSubDataFile(wad
+ '\' + str0
, stream0
) then
61 str1
:= SFSGetLastVirtualName(section1
+ '\' + name1
);
62 stream1
:= SFSFileOpen(wad
+ '\' + str0
+ '::' + str1
);
63 if stream1
<> nil then
67 //stream1.ReadBuffer(data, len); (* leads to segfault *)
68 for i
:= 0 to len
- 1 do
69 data
[i
] := stream1
.ReadByte();
73 //stream0.Destroy (* leads to memory corruption *)