--- oup/current/DataAccess/Access_OniArchive.pas 2007/08/10 17:26:03 243 +++ oup/current/DataAccess/Access_OniArchive.pas 2007/12/16 14:44:16 252 @@ -11,15 +11,8 @@ type Fsep_file: TFileStream; Fdat_files: TFiles; Fdat_extensionsmap: TExtensionsMap; - FUnloadWhenUnused: Boolean; - FDatOpened: Boolean; - FRawOpened: Boolean; - FSepOpened: Boolean; - procedure SetUnloadWhenUnused(doit: Boolean); protected public - property UnloadWhenUnused: Boolean Read FUnloadWhenUnused Write SetUnloadWhenUnused; - constructor Create(DatFilename: String; ConnectionID: Integer; var Msg: TStatusMessages); override; procedure Close; override; @@ -71,9 +64,6 @@ var Fdat_filesmap: TFilesMap; Fdat_namedfilesmap: TNamedFilesMap; begin - FUnloadWhenUnused := True; - FDatOpened := False; - FRawOpened := False; Msg := SM_UnknownError; if not FileExists(DatFilename) then begin @@ -81,7 +71,7 @@ begin Exit; end; FFileName := DatFilename; - Fdat_file := TFileStream.Create(FFileName, fmOpenRead); + Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); Fdat_file.Read(Fdat_header, SizeOf(Fdat_header)); header_pc := True; header_mac := True; @@ -155,7 +145,11 @@ begin Fdat_file.Read(FLevelNumber, 1); FLevelNumber := FLevelNumber div 2; - Fdat_file.Free; + Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), + fmOpenReadWrite); + if not (FDataOS = DOS_WIN) then + Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), + fmOpenReadWrite); Msg := SM_OK; FBackend := DB_ONI; @@ -168,60 +162,13 @@ end; -procedure TAccess_OniArchive.SetUnloadWhenUnused(doit: Boolean); -begin - FUnloadWhenUnused := doit; - if FUnloadWhenUnused then - begin - if FDatOpened then - begin - FDatOpened := False; - Fdat_file.Free; - end; - if FRawOpened then - begin - FRawOpened := False; - Fraw_file.Free; - end; - if FSepOpened then - begin - FSepOpened := False; - Fsep_file.Free; - end; - end - else - begin - if not FDatOpened then - begin - Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); - FDatOpened := True; - end; - if not FRawOpened then - begin - Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), - fmOpenReadWrite); - FRawOpened := True; - end; - if (not FSepOpened) and (FDataOS <> DOS_WIN) then - begin - Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), - fmOpenReadWrite); - FSepOpened := True; - end; - end; -end; - - - - - procedure TAccess_OniArchive.Close; begin - if FDatOpened then + if Assigned(Fdat_file) then Fdat_file.Free; - if FRawOpened then + if Assigned(Fraw_file) then Fraw_file.Free; - if FSepOpened then + if Assigned(Fsep_file) then Fsep_file.Free; Self.Free; end; @@ -372,23 +319,14 @@ var begin if fileid < GetFileCount then begin + if not Assigned(Target) then + Target := TMemoryStream.Create; if GetFileInfo(FileID).Size > 0 then begin - if not Assigned(Target) then - Target := TMemoryStream.Create; - if not FDatOpened then - Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning); streampos := Target.Position; Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size); Target.Seek(streampos, soFromBeginning); - if UnloadWhenUnused then - begin - Fdat_file.Free; - FDatOpened := False; - end - else - FDatOpened := True; end; end; end; @@ -397,17 +335,8 @@ procedure TAccess_OniArchive.UpdateDatFi begin if fileid < GetFileCount then begin - if not FDatOpened then - Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning); Fdat_file.CopyFrom(Src, Fdat_files[fileid].Size); - if UnloadWhenUnused then - begin - Fdat_file.Free; - FDatOpened := False; - end - else - FDatOpened := True; end; end; @@ -419,19 +348,10 @@ begin begin if not Assigned(Target) then Target := TMemoryStream.Create; - if not FDatOpened then - Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); Fdat_file.Seek(Fdat_files[fileid].DatAddr + offset, soFromBeginning); streampos := Target.Position; Target.CopyFrom(Fdat_file, size); Target.Seek(streampos, soFromBeginning); - if UnloadWhenUnused then - begin - FDatOpened := False; - Fdat_file.Free; - end - else - FDatOpened := True; end; end; @@ -439,17 +359,8 @@ procedure TAccess_OniArchive.UpdateDatFi begin if fileid < GetFileCount then begin - if not FDatOpened then - Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); Fdat_file.Seek(Fdat_files[fileid].DatAddr + offset, soFromBeginning); Fdat_file.CopyFrom(Src, Size); - if UnloadWhenUnused then - begin - Fdat_file.Free; - FDatOpened := False; - end - else - FDatOpened := True; end; end; @@ -530,41 +441,21 @@ begin Target := TMemoryStream.Create; if not LocSep then begin - if not FRawOpened then - Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), - fmOpenReadWrite); if RawAddr <= Fraw_file.Size then begin Fraw_file.Seek(RawAddr, soFromBeginning); Target.CopyFrom(Fraw_file, size); Target.Seek(0, soFromBeginning); end; - if UnloadWhenUnused then - begin - FRawOpened := False; - Fraw_file.Free; - end - else - FRawOpened := True; end else begin - if not FSepOpened then - Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), - fmOpenReadWrite); if RawAddr <= Fsep_file.Size then begin Fsep_file.Seek(RawAddr, soFromBeginning); Target.CopyFrom(Fsep_file, size); Target.Seek(0, soFromBeginning); end; - if UnloadWhenUnused then - begin - FSepOpened := False; - Fsep_file.Free; - end - else - FSepOpened := True; end; end; @@ -590,37 +481,17 @@ begin raw_info := Self.GetRawInfo(FileID, DatOffset); if not raw_info.LocSep then begin - if not FRawOpened then - Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), - fmOpenReadWrite); Fraw_file.Seek(raw_info.RawAddr, soFromBeginning); streampos := Target.Position; Target.CopyFrom(Fraw_file, raw_info.RawSize); Target.Seek(streampos, soFromBeginning); - if UnloadWhenUnused then - begin - FRawOpened := False; - Fraw_file.Free; - end - else - FRawOpened := True; end else begin - if FUnloadWhenUnused or not FSepOpened then - Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), - fmOpenReadWrite); Fsep_file.Seek(raw_info.RawAddr, soFromBeginning); streampos := Target.Position; Target.CopyFrom(Fsep_file, raw_info.RawSize); Target.Seek(streampos, soFromBeginning); - if UnloadWhenUnused then - begin - FSepOpened := False; - Fsep_file.Free; - end - else - FSepOpened := True; end; end; end; @@ -634,33 +505,13 @@ begin raw_info := GetRawInfo(FileID, DatOffset); if not raw_info.LocSep then begin - if not FRawOpened then - Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), - fmOpenReadWrite); Fraw_file.Seek(raw_info.RawAddr, soFromBeginning); Fraw_file.CopyFrom(Src, Min(raw_info.RawSize, Src.Size)); - if UnloadWhenUnused then - begin - FRawOpened := False; - Fraw_file.Free; - end - else - FRawOpened := True; end else begin - if not FSepOpened then - Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), - fmOpenReadWrite); Fsep_file.Seek(raw_info.RawAddr, soFromBeginning); Fsep_file.CopyFrom(Src, raw_info.RawSize); - if UnloadWhenUnused then - begin - FSepOpened := False; - Fsep_file.Free; - end - else - FSepOpened := True; end; end; end; @@ -693,33 +544,13 @@ begin raw_info := GetRawInfo(FileID, DatOffset); if not raw_info.LocSep then begin - if not FRawOpened then - Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), - fmOpenReadWrite); Fraw_file.Seek(raw_info.RawAddr + Offset, soFromBeginning); Fraw_file.CopyFrom(Src, Size); - if UnloadWhenUnused then - begin - FRawOpened := False; - Fraw_file.Free; - end - else - FRawOpened := True; end else begin - if not FSepOpened then - Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), - fmOpenReadWrite); Fsep_file.Seek(raw_info.RawAddr + Offset, soFromBeginning); Fsep_file.CopyFrom(Src, Size); - if UnloadWhenUnused then - begin - FSepOpened := False; - Fsep_file.Free; - end - else - FSepOpened := True; end; end; end; @@ -731,9 +562,6 @@ const begin if not LocSep then begin - if not FRawOpened then - Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), - fmOpenReadWrite); if (Fraw_file.Size mod 32) > 0 then Fraw_file.Write(EmptyBytes[0], 32 - (Fraw_file.Size mod 32)); Result := Fraw_file.Size; @@ -741,19 +569,9 @@ begin Fraw_file.CopyFrom(Src, Src.Size); if (Fraw_file.Size mod 32) > 0 then Fraw_file.Write(EmptyBytes[0], 32 - (Fraw_file.Size mod 32)); - if UnloadWhenUnused then - begin - FRawOpened := False; - Fraw_file.Free; - end - else - FRawOpened := True; end else begin - if not FSepOpened then - Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), - fmOpenReadWrite); if (Fsep_file.Size mod 32) > 0 then Fsep_file.Write(EmptyBytes[0], 32 - (Fsep_file.Size mod 32)); Result := Fsep_file.Size; @@ -761,13 +579,6 @@ begin Fsep_file.CopyFrom(Src, Src.Size); if (Fsep_file.Size mod 32) > 0 then Fsep_file.Write(EmptyBytes[0], 32 - (Fsep_file.Size mod 32)); - if UnloadWhenUnused then - begin - FSepOpened := False; - Fsep_file.Free; - end - else - FSepOpened := True; end; end;