| 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; |
| 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 |
| 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 |
|
|