3 {$DEFINE SFS_DWFAD_DEBUG}
5 interface
7 uses
11 type
15 private
21 public
29 function GetResource (Section, Resource: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
36 procedure g_ProcessResourceStr (ResourceStr: AnsiString; var FileName, SectionName, ResourceName: AnsiString); overload;
37 procedure g_ProcessResourceStr (ResourceStr: AnsiString; FileName, SectionName, ResourceName: PString); overload;
39 // return fixed AnsiString or empty AnsiString
43 implementation
45 uses
50 begin
53 begin
54 //e_WriteLog(Format('TWADFile.ReadFile: error looking for [%s] [%s]', [path, ExtractFileName(fname)]), MSG_NOTIFY);
56 begin
58 //e_WriteLog(Format(' looking for [%s] [%s]', [path, rfn]), MSG_NOTIFY);
60 begin
61 //e_WriteLog(Format(' looking for [%s] [%s]', [path, rfn]), MSG_NOTIFY);
65 end
66 else
67 begin
68 exit;
70 //e_WriteLog(Format('TWADFile.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY);
71 end
72 else
73 begin
74 //if rfn <> ExtractFileName(FileName) then e_WriteLog(Format('TWADFile.ReadFile: FOUND [%s]', [rfn]), MSG_NOTIFY);
80 procedure g_ProcessResourceStr (ResourceStr: AnsiString; var FileName, SectionName, ResourceName: AnsiString);
81 var
83 begin
84 //e_WriteLog(Format('g_ProcessResourceStr0: [%s]', [ResourceStr]), MSG_NOTIFY);
87 for a := i+1 to Length(ResourceStr) do if (ResourceStr[a] = '\') or (ResourceStr[a] = '/') then Break;
89 SectionName := Copy(ResourceStr, i+1, Length(ResourceStr)-Length(ResourceName)-Length(FileName)-2);
93 procedure g_ProcessResourceStr (ResourceStr: AnsiString; FileName, SectionName, ResourceName: PAnsiString);
94 var
96 begin
97 //e_WriteLog(Format('g_ProcessResourceStr1: [%s]', [ResourceStr]), MSG_NOTIFY);
100 begin
103 end
104 else
105 begin
108 for a := i+1 to Length(ResourceStr) do if (ResourceStr[a] = '\') or (ResourceStr[a] = '/') then break;
110 begin
113 end
114 else
115 begin
122 { TWADFile }
124 begin
130 begin
137 begin
143 begin
145 //if fFileName <> '' then e_WriteLog(Format('TWADFile.ReadFile: [%s] closed', [fFileName]), MSG_NOTIFY);
151 var
153 begin
157 begin
158 //writeln('[', s, '] -> [', Copy(s, 1, i-2), ']');
164 function TWADFile.GetResource (Section, Resource: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
165 var
170 //fn: AnsiString;
171 begin
176 // backwards, due to possible similar names and such
178 begin
181 //e_WriteLog(Format('DFWAD: searching for [%s : %s] in [%s]; current is [%s : %s]', [Section, Resource, fFileName, fi.path, fi.name]), MSG_NOTIFY);
183 begin
184 // i found her!
185 //fn := fFileName+'::'+fi.path+fi.name;
186 //fs := SFSFileOpen(fn);
187 try
189 except
193 begin
194 e_WriteLog(Format('DFWAD: can''t open file [%s%s] in [%s]', [Section, Resource, fFileName]), MSG_WARNING);
195 break;
200 try
203 finally
205 begin
213 {$IFDEF SFS_DWFAD_DEBUG}
215 e_WriteLog(Format('DFWAD: file [%s%s] FOUND in [%s]; size is %d bytes', [Section, Resource, fFileName, Len]), MSG_NOTIFY);
216 {$ENDIF}
217 exit;
220 e_WriteLog(Format('DFWAD: file [%s%s] not found in [%s]', [Section, Resource, fFileName]), MSG_WARNING);
225 var
228 begin
233 begin
238 begin
247 var
249 //f: Integer;
250 //fi: TSFSFileInfo;
251 begin
253 //e_WriteLog(Format('TWADFile.ReadFile: [%s]', [FileName]), MSG_NOTIFY);
257 begin
259 exit;
261 {$IFDEF SFS_DWFAD_DEBUG}
263 {$ENDIF}
264 // cache this wad
265 try
267 begin
269 end
270 else
271 begin
274 except
275 exit;
280 {$IFDEF SFS_DWFAD_DEBUG}
281 if gSFSDebug then e_WriteLog(Format('TWADFile.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY);
282 {$ENDIF}
287 var
291 var
294 //f: Integer;
295 //fi: TSFSFileInfo;
296 begin
300 begin
302 Exit;
307 {$IFDEF SFS_DWFAD_DEBUG}
309 {$ENDIF}
311 try
314 begin
316 Exit;
318 except
320 Exit;
327 {$IFDEF SFS_DWFAD_DEBUG}
329 {$ENDIF}
331 {
332 for f := 0 to fIter.Count-1 do
333 begin
334 fi := fIter.Files[f];
335 if fi = nil then continue;
336 st := fIter.volume.OpenFileByIndex(f);
337 if st = nil then
338 begin
339 e_WriteLog(Format('[%s]: [%s : %s] CAN''T OPEN', [fFileName, fi.path, fi.name]), MSG_NOTIFY);
340 end
341 else
342 begin
343 e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, st.size]), MSG_NOTIFY);
344 st.Free;
345 end;
346 end;
347 //fIter.volume.OpenFileByIndex(0);
348 }
354 begin