1 {$MODE DELPHI}
4 {$DEFINE SFS_DWFAD_DEBUG}
6 interface
8 uses
12 type
16 private
22 public
30 function GetResource (Section, Resource: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
37 procedure g_ProcessResourceStr (ResourceStr: AnsiString; var FileName, SectionName, ResourceName: AnsiString); overload;
38 procedure g_ProcessResourceStr (ResourceStr: AnsiString; FileName, SectionName, ResourceName: PString); overload;
40 // return fixed AnsiString or empty AnsiString
44 implementation
46 uses
51 begin
54 begin
55 //e_WriteLog(Format('findDiskWad: error looking for [%s]', [fname]), MSG_NOTIFY);
57 begin
59 //e_WriteLog(Format(' looking for [%s]', [fname]), MSG_NOTIFY);
61 begin
63 //e_WriteLog(Format(' looking for [%s]', [fname]), MSG_NOTIFY);
66 end
67 else
68 begin
69 exit;
72 //e_WriteLog(Format('findDiskWad: FOUND [%s]', [fname]), MSG_NOTIFY);
77 procedure g_ProcessResourceStr (ResourceStr: AnsiString; var FileName, SectionName, ResourceName: AnsiString);
78 var
80 begin
81 //e_WriteLog(Format('g_ProcessResourceStr0: [%s]', [ResourceStr]), MSG_NOTIFY);
84 for a := i+1 to Length(ResourceStr) do if (ResourceStr[a] = '\') or (ResourceStr[a] = '/') then Break;
86 SectionName := Copy(ResourceStr, i+1, Length(ResourceStr)-Length(ResourceName)-Length(FileName)-2);
90 procedure g_ProcessResourceStr (ResourceStr: AnsiString; FileName, SectionName, ResourceName: PAnsiString);
91 var
93 begin
94 //e_WriteLog(Format('g_ProcessResourceStr1: [%s]', [ResourceStr]), MSG_NOTIFY);
97 begin
100 end
101 else
102 begin
105 for a := i+1 to Length(ResourceStr) do if (ResourceStr[a] = '\') or (ResourceStr[a] = '/') then break;
107 begin
110 end
111 else
112 begin
119 { TWADFile }
121 begin
127 begin
134 begin
140 begin
142 //if fFileName <> '' then e_WriteLog(Format('TWADFile.ReadFile: [%s] closed', [fFileName]), MSG_NOTIFY);
148 var
150 begin
154 begin
155 //writeln('[', s, '] -> [', Copy(s, 1, i-2), ']');
161 function TWADFile.GetResource (Section, Resource: AnsiString; var pData: Pointer; var Len: Integer): Boolean;
162 var
167 //fn: AnsiString;
168 begin
173 // backwards, due to possible similar names and such
175 begin
178 //e_WriteLog(Format('DFWAD: searching for [%s : %s] in [%s]; current is [%s : %s]', [Section, Resource, fFileName, fi.path, fi.name]), MSG_NOTIFY);
180 begin
181 // i found her!
182 //fn := fFileName+'::'+fi.path+fi.name;
183 //fs := SFSFileOpen(fn);
184 try
186 except
190 begin
191 e_WriteLog(Format('DFWAD: can''t open file [%s%s] in [%s]', [Section, Resource, fFileName]), MSG_WARNING);
192 break;
197 try
200 finally
202 begin
210 {$IFDEF SFS_DWFAD_DEBUG}
212 e_WriteLog(Format('DFWAD: file [%s%s] FOUND in [%s]; size is %d bytes', [Section, Resource, fFileName, Len]), MSG_NOTIFY);
213 {$ENDIF}
214 exit;
217 e_WriteLog(Format('DFWAD: file [%s%s] not found in [%s]', [Section, Resource, fFileName]), MSG_WARNING);
222 var
225 begin
230 begin
235 begin
244 var
246 //f: Integer;
247 //fi: TSFSFileInfo;
248 begin
250 //e_WriteLog(Format('TWADFile.ReadFile: [%s]', [FileName]), MSG_NOTIFY);
254 begin
256 exit;
258 {$IFDEF SFS_DWFAD_DEBUG}
260 {$ENDIF}
261 // cache this wad
262 try
264 begin
266 end
267 else
268 begin
271 except
272 exit;
277 {$IFDEF SFS_DWFAD_DEBUG}
278 if gSFSDebug then e_WriteLog(Format('TWADFile.ReadFile: [%s] opened', [fFileName]), MSG_NOTIFY);
279 {$ENDIF}
284 var
288 var
291 //f: Integer;
292 //fi: TSFSFileInfo;
293 begin
297 begin
299 Exit;
304 {$IFDEF SFS_DWFAD_DEBUG}
306 {$ENDIF}
308 try
311 begin
313 Exit;
315 except
317 Exit;
324 {$IFDEF SFS_DWFAD_DEBUG}
326 {$ENDIF}
328 {
329 for f := 0 to fIter.Count-1 do
330 begin
331 fi := fIter.Files[f];
332 if fi = nil then continue;
333 st := fIter.volume.OpenFileByIndex(f);
334 if st = nil then
335 begin
336 e_WriteLog(Format('[%s]: [%s : %s] CAN''T OPEN', [fFileName, fi.path, fi.name]), MSG_NOTIFY);
337 end
338 else
339 begin
340 e_WriteLog(Format('[%s]: [%s : %s] %u', [fFileName, fi.path, fi.name, st.size]), MSG_NOTIFY);
341 st.Free;
342 end;
343 end;
344 //fIter.volume.OpenFileByIndex(0);
345 }
351 begin