ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/DataAccess/Access_OniArchive.pas
(Generate patch)

Comparing oup/current/DataAccess/Access_OniArchive.pas (file contents):
Revision 192 by alloc, Thu May 24 17:48:18 2007 UTC vs.
Revision 231 by alloc, Wed Jun 20 22:24:04 2007 UTC

# Line 15 | Line 15 | type
15      FDatOpened:          Boolean;
16      FRawOpened:          Boolean;
17      FSepOpened:          Boolean;
18 +    procedure SetUnloadWhenUnused(doit: Boolean);
19    protected
20    public
21 <    property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write FUnloadWhenUnused;
21 >    property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write SetUnloadWhenUnused;
22  
23      constructor Create(DatFilename: String; ConnectionID: Integer; var Msg: TStatusMessages); override;
24      procedure Close; override;
# Line 159 | Line 160 | begin
160    FBackend := DB_ONI;
161    FConnectionID := ConnectionID;
162    FChangeRights := [CR_EditDat, CR_EditRaw, CR_AppendRaw];
163 +
164 +  inherited;
165 + end;
166 +
167 +
168 +
169 +
170 + procedure TAccess_OniArchive.SetUnloadWhenUnused(doit: Boolean);
171 + begin
172 +  FUnloadWhenUnused := doit;
173 +  if FUnloadWhenUnused then
174 +  begin
175 +    if FDatOpened then
176 +    begin
177 +      FDatOpened := False;
178 +      Fdat_file.Free;
179 +    end;
180 +    if FRawOpened then
181 +    begin
182 +      FRawOpened := False;
183 +      Fraw_file.Free;
184 +    end;
185 +    if FSepOpened then
186 +    begin
187 +      FSepOpened := False;
188 +      Fsep_file.Free;
189 +    end;
190 +  end
191 +  else
192 +  begin
193 +    if not FDatOpened then
194 +    begin
195 +      Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
196 +      FDatOpened := True;
197 +    end;
198 +    if not FRawOpened then
199 +    begin
200 +      Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'),
201 +        fmOpenReadWrite);
202 +      FRawOpened := True;
203 +    end;
204 +    if (not FSepOpened) and (FDataOS <> DOS_WIN) then
205 +    begin
206 +      Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'),
207 +        fmOpenReadWrite);
208 +      FSepOpened := True;
209 +    end;
210 +  end;
211   end;
212  
213  
214  
215  
216 +
217   procedure TAccess_OniArchive.Close;
218   begin
219    if FDatOpened then
# Line 319 | Line 369 | var
369   begin
370    if fileid < GetFileCount then
371    begin
372 <    if not Assigned(Target) then
323 <      Target := TMemoryStream.Create;
324 <    if not FDatOpened then
325 <      Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
326 <    Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning);
327 <    streampos := Target.Position;
328 <    Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size);
329 <    Target.Seek(streampos, soFromBeginning);
330 <    if UnloadWhenUnused then
372 >    if GetFileInfo(FileID).Size > 0 then
373      begin
374 <      Fdat_file.Free;
375 <      FDatOpened := False;
376 <    end
377 <    else
378 <      FDatOpened := True;
374 >      if not Assigned(Target) then
375 >        Target := TMemoryStream.Create;
376 >      if not FDatOpened then
377 >        Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
378 >      Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning);
379 >      streampos := Target.Position;
380 >      Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size);
381 >      Target.Seek(streampos, soFromBeginning);
382 >      if UnloadWhenUnused then
383 >      begin
384 >        Fdat_file.Free;
385 >        FDatOpened := False;
386 >      end
387 >      else
388 >        FDatOpened := True;
389 >    end;
390    end;
391   end;
392  

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)