| 11 |  | Fsep_file:           TFileStream; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 12 |  | Fdat_files:          TFiles; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 13 |  | Fdat_extensionsmap:  TExtensionsMap; | 
 
 
 
 
 
 
 
 | 14 | + | FUnloadWhenUnused:   Boolean; | 
 
 
 
 
 
 
 
 | 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 SetUnloadWhenUnused; | 
 
 
 
 
 
 
 
 | 22 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 23 |  | constructor Create(DatFilename: String; ConnectionID: Integer; var Msg: TStatusMessages); override; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 24 |  | procedure Close; override; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 25 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 71 |  | Fdat_filesmap: TFilesMap; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 72 |  | Fdat_namedfilesmap: TNamedFilesMap; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 73 |  | begin | 
 
 
 
 
 
 
 
 | 74 | + | FUnloadWhenUnused := True; | 
 
 
 
 
 
 
 
 | 75 | + | FDatOpened := False; | 
 
 
 
 
 
 
 
 | 76 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 77 |  | Msg := SM_UnknownError; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 78 |  | if not FileExists(DatFilename) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 79 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 81 |  | Exit; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 82 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 83 |  | FFileName := DatFilename; | 
 
 
 
 
 
 
 
 
 
 
 | 84 | < | Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 | 84 | > | Fdat_file := TFileStream.Create(FFileName, fmOpenRead); | 
 
 
 
 
 
 
 
 
 
 
 | 85 |  | Fdat_file.Read(Fdat_header, SizeOf(Fdat_header)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 86 |  | header_pc  := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 87 |  | header_mac := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 155 |  | Fdat_file.Read(FLevelNumber, 1); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 156 |  | FLevelNumber := FLevelNumber div 2; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 157 |  |  | 
 
 
 
 
 
 
 
 
 
 
 | 158 | < | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 149 | < | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 150 | < | if not (FDataOS = DOS_WIN) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 151 | < | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 152 | < | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 | 158 | > | Fdat_file.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 159 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 160 |  | Msg := SM_OK; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 161 |  | FBackend := DB_ONI; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 168 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 169 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 170 |  |  | 
 
 
 
 
 
 
 
 | 171 | + | procedure TAccess_OniArchive.SetUnloadWhenUnused(doit: Boolean); | 
 
 
 
 
 
 
 
 | 172 | + | begin | 
 
 
 
 
 
 
 
 | 173 | + | FUnloadWhenUnused := doit; | 
 
 
 
 
 
 
 
 | 174 | + | if FUnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 175 | + | begin | 
 
 
 
 
 
 
 
 | 176 | + | if FDatOpened then | 
 
 
 
 
 
 
 
 | 177 | + | begin | 
 
 
 
 
 
 
 
 | 178 | + | FDatOpened := False; | 
 
 
 
 
 
 
 
 | 179 | + | Fdat_file.Free; | 
 
 
 
 
 
 
 
 | 180 | + | end; | 
 
 
 
 
 
 
 
 | 181 | + | if FRawOpened then | 
 
 
 
 
 
 
 
 | 182 | + | begin | 
 
 
 
 
 
 
 
 | 183 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 | 184 | + | Fraw_file.Free; | 
 
 
 
 
 
 
 
 | 185 | + | end; | 
 
 
 
 
 
 
 
 | 186 | + | if FSepOpened then | 
 
 
 
 
 
 
 
 | 187 | + | begin | 
 
 
 
 
 
 
 
 | 188 | + | FSepOpened := False; | 
 
 
 
 
 
 
 
 | 189 | + | Fsep_file.Free; | 
 
 
 
 
 
 
 
 | 190 | + | end; | 
 
 
 
 
 
 
 
 | 191 | + | end | 
 
 
 
 
 
 
 
 | 192 | + | else | 
 
 
 
 
 
 
 
 | 193 | + | begin | 
 
 
 
 
 
 
 
 | 194 | + | if not FDatOpened then | 
 
 
 
 
 
 
 
 | 195 | + | begin | 
 
 
 
 
 
 
 
 | 196 | + | Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); | 
 
 
 
 
 
 
 
 | 197 | + | FDatOpened := True; | 
 
 
 
 
 
 
 
 | 198 | + | end; | 
 
 
 
 
 
 
 
 | 199 | + | if not FRawOpened then | 
 
 
 
 
 
 
 
 | 200 | + | begin | 
 
 
 
 
 
 
 
 | 201 | + | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 | 202 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 | 203 | + | FRawOpened := True; | 
 
 
 
 
 
 
 
 | 204 | + | end; | 
 
 
 
 
 
 
 
 | 205 | + | if (not FSepOpened) and (FDataOS <> DOS_WIN) then | 
 
 
 
 
 
 
 
 | 206 | + | begin | 
 
 
 
 
 
 
 
 | 207 | + | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 | 208 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 | 209 | + | FSepOpened := True; | 
 
 
 
 
 
 
 
 | 210 | + | end; | 
 
 
 
 
 
 
 
 | 211 | + | end; | 
 
 
 
 
 
 
 
 | 212 | + | end; | 
 
 
 
 
 
 
 
 | 213 | + |  | 
 
 
 
 
 
 
 
 | 214 | + |  | 
 
 
 
 
 
 
 
 | 215 | + |  | 
 
 
 
 
 
 
 
 | 216 | + |  | 
 
 
 
 
 
 
 
 | 217 | + |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 218 |  | procedure TAccess_OniArchive.Close; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 219 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 | 220 | < | if Assigned(Fdat_file) then | 
 
 
 
 
 
 
 
 
 | 220 | > | if FDatOpened then | 
 
 
 
 
 
 
 
 
 
 
 | 221 |  | Fdat_file.Free; | 
 
 
 
 
 
 
 
 
 
 
 | 222 | < | if Assigned(Fraw_file) then | 
 
 
 
 
 
 
 
 
 | 222 | > | if FRawOpened then | 
 
 
 
 
 
 
 
 
 
 
 | 223 |  | Fraw_file.Free; | 
 
 
 
 
 
 
 
 
 
 
 | 224 | < | if Assigned(Fsep_file) then | 
 
 
 
 
 
 
 
 
 | 224 | > | if FSepOpened then | 
 
 
 
 
 
 
 
 
 
 
 | 225 |  | Fsep_file.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 226 |  | Self.Free; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 227 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 376 |  | Target := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 377 |  | if GetFileInfo(FileID).Size > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 378 |  | begin | 
 
 
 
 
 
 
 
 | 379 | + | if not FDatOpened then | 
 
 
 
 
 
 
 
 | 380 | + | Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 381 |  | Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 382 |  | streampos := Target.Position; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 383 |  | Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 384 |  | Target.Seek(streampos, soFromBeginning); | 
 
 
 
 
 
 
 
 | 385 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 386 | + | begin | 
 
 
 
 
 
 
 
 | 387 | + | Fdat_file.Free; | 
 
 
 
 
 
 
 
 | 388 | + | FDatOpened := False; | 
 
 
 
 
 
 
 
 | 389 | + | end | 
 
 
 
 
 
 
 
 | 390 | + | else | 
 
 
 
 
 
 
 
 | 391 | + | FDatOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 392 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 393 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 394 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 397 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 398 |  | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 399 |  | begin | 
 
 
 
 
 
 
 
 | 400 | + | if not FDatOpened then | 
 
 
 
 
 
 
 
 | 401 | + | Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 402 |  | Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 403 |  | Fdat_file.CopyFrom(Src, Fdat_files[fileid].Size); | 
 
 
 
 
 
 
 
 | 404 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 405 | + | begin | 
 
 
 
 
 
 
 
 | 406 | + | Fdat_file.Free; | 
 
 
 
 
 
 
 
 | 407 | + | FDatOpened := False; | 
 
 
 
 
 
 
 
 | 408 | + | end | 
 
 
 
 
 
 
 
 | 409 | + | else | 
 
 
 
 
 
 
 
 | 410 | + | FDatOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 411 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 412 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 413 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 419 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 420 |  | if not Assigned(Target) then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 421 |  | Target := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 | 422 | + | if not FDatOpened then | 
 
 
 
 
 
 
 
 | 423 | + | Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 424 |  | Fdat_file.Seek(Fdat_files[fileid].DatAddr + offset, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 425 |  | streampos := Target.Position; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 426 |  | Target.CopyFrom(Fdat_file, size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 427 |  | Target.Seek(streampos, soFromBeginning); | 
 
 
 
 
 
 
 
 | 428 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 429 | + | begin | 
 
 
 
 
 
 
 
 | 430 | + | FDatOpened := False; | 
 
 
 
 
 
 
 
 | 431 | + | Fdat_file.Free; | 
 
 
 
 
 
 
 
 | 432 | + | end | 
 
 
 
 
 
 
 
 | 433 | + | else | 
 
 
 
 
 
 
 
 | 434 | + | FDatOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 435 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 436 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 437 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 439 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 440 |  | if fileid < GetFileCount then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 441 |  | begin | 
 
 
 
 
 
 
 
 | 442 | + | if not FDatOpened then | 
 
 
 
 
 
 
 
 | 443 | + | Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 444 |  | Fdat_file.Seek(Fdat_files[fileid].DatAddr + offset, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 445 |  | Fdat_file.CopyFrom(Src, Size); | 
 
 
 
 
 
 
 
 | 446 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 447 | + | begin | 
 
 
 
 
 
 
 
 | 448 | + | Fdat_file.Free; | 
 
 
 
 
 
 
 
 | 449 | + | FDatOpened := False; | 
 
 
 
 
 
 
 
 | 450 | + | end | 
 
 
 
 
 
 
 
 | 451 | + | else | 
 
 
 
 
 
 
 
 | 452 | + | FDatOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 453 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 454 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 455 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 530 |  | Target := TMemoryStream.Create; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 531 |  | if not LocSep then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 532 |  | begin | 
 
 
 
 
 
 
 
 | 533 | + | if not FRawOpened then | 
 
 
 
 
 
 
 
 | 534 | + | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 | 535 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 536 |  | if RawAddr <= Fraw_file.Size then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 537 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 538 |  | Fraw_file.Seek(RawAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 539 |  | Target.CopyFrom(Fraw_file, size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 540 |  | Target.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 541 |  | end; | 
 
 
 
 
 
 
 
 | 542 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 543 | + | begin | 
 
 
 
 
 
 
 
 | 544 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 | 545 | + | Fraw_file.Free; | 
 
 
 
 
 
 
 
 | 546 | + | end | 
 
 
 
 
 
 
 
 | 547 | + | else | 
 
 
 
 
 
 
 
 | 548 | + | FRawOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 549 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 550 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 551 |  | begin | 
 
 
 
 
 
 
 
 | 552 | + | if not FSepOpened then | 
 
 
 
 
 
 
 
 | 553 | + | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 | 554 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 555 |  | if RawAddr <= Fsep_file.Size then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 556 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 557 |  | Fsep_file.Seek(RawAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 558 |  | Target.CopyFrom(Fsep_file, size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 559 |  | Target.Seek(0, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 560 |  | end; | 
 
 
 
 
 
 
 
 | 561 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 562 | + | begin | 
 
 
 
 
 
 
 
 | 563 | + | FSepOpened := False; | 
 
 
 
 
 
 
 
 | 564 | + | Fsep_file.Free; | 
 
 
 
 
 
 
 
 | 565 | + | end | 
 
 
 
 
 
 
 
 | 566 | + | else | 
 
 
 
 
 
 
 
 | 567 | + | FSepOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 568 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 569 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 570 |  |  | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 590 |  | raw_info := Self.GetRawInfo(FileID, DatOffset); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 591 |  | if not raw_info.LocSep then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 592 |  | begin | 
 
 
 
 
 
 
 
 | 593 | + | if not FRawOpened then | 
 
 
 
 
 
 
 
 | 594 | + | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 | 595 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 596 |  | Fraw_file.Seek(raw_info.RawAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 597 |  | streampos := Target.Position; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 598 |  | Target.CopyFrom(Fraw_file, raw_info.RawSize); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 599 |  | Target.Seek(streampos, soFromBeginning); | 
 
 
 
 
 
 
 
 | 600 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 601 | + | begin | 
 
 
 
 
 
 
 
 | 602 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 | 603 | + | Fraw_file.Free; | 
 
 
 
 
 
 
 
 | 604 | + | end | 
 
 
 
 
 
 
 
 | 605 | + | else | 
 
 
 
 
 
 
 
 | 606 | + | FRawOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 607 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 608 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 609 |  | begin | 
 
 
 
 
 
 
 
 | 610 | + | if FUnloadWhenUnused or not FSepOpened then | 
 
 
 
 
 
 
 
 | 611 | + | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 | 612 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 613 |  | Fsep_file.Seek(raw_info.RawAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 614 |  | streampos := Target.Position; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 615 |  | Target.CopyFrom(Fsep_file, raw_info.RawSize); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 616 |  | Target.Seek(streampos, soFromBeginning); | 
 
 
 
 
 
 
 
 | 617 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 618 | + | begin | 
 
 
 
 
 
 
 
 | 619 | + | FSepOpened := False; | 
 
 
 
 
 
 
 
 | 620 | + | Fsep_file.Free; | 
 
 
 
 
 
 
 
 | 621 | + | end | 
 
 
 
 
 
 
 
 | 622 | + | else | 
 
 
 
 
 
 
 
 | 623 | + | FSepOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 624 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 625 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 626 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 634 |  | raw_info := GetRawInfo(FileID, DatOffset); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 635 |  | if not raw_info.LocSep then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 636 |  | begin | 
 
 
 
 
 
 
 
 | 637 | + | if not FRawOpened then | 
 
 
 
 
 
 
 
 | 638 | + | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 | 639 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 640 |  | Fraw_file.Seek(raw_info.RawAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 641 |  | Fraw_file.CopyFrom(Src, Min(raw_info.RawSize, Src.Size)); | 
 
 
 
 
 
 
 
 | 642 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 643 | + | begin | 
 
 
 
 
 
 
 
 | 644 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 | 645 | + | Fraw_file.Free; | 
 
 
 
 
 
 
 
 | 646 | + | end | 
 
 
 
 
 
 
 
 | 647 | + | else | 
 
 
 
 
 
 
 
 | 648 | + | FRawOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 649 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 650 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 651 |  | begin | 
 
 
 
 
 
 
 
 | 652 | + | if not FSepOpened then | 
 
 
 
 
 
 
 
 | 653 | + | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 | 654 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 655 |  | Fsep_file.Seek(raw_info.RawAddr, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 656 |  | Fsep_file.CopyFrom(Src, raw_info.RawSize); | 
 
 
 
 
 
 
 
 | 657 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 658 | + | begin | 
 
 
 
 
 
 
 
 | 659 | + | FSepOpened := False; | 
 
 
 
 
 
 
 
 | 660 | + | Fsep_file.Free; | 
 
 
 
 
 
 
 
 | 661 | + | end | 
 
 
 
 
 
 
 
 | 662 | + | else | 
 
 
 
 
 
 
 
 | 663 | + | FSepOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 664 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 665 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 666 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 693 |  | raw_info := GetRawInfo(FileID, DatOffset); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 694 |  | if not raw_info.LocSep then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 695 |  | begin | 
 
 
 
 
 
 
 
 | 696 | + | if not FRawOpened then | 
 
 
 
 
 
 
 
 | 697 | + | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 | 698 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 699 |  | Fraw_file.Seek(raw_info.RawAddr + Offset, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 700 |  | Fraw_file.CopyFrom(Src, Size); | 
 
 
 
 
 
 
 
 | 701 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 702 | + | begin | 
 
 
 
 
 
 
 
 | 703 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 | 704 | + | Fraw_file.Free; | 
 
 
 
 
 
 
 
 | 705 | + | end | 
 
 
 
 
 
 
 
 | 706 | + | else | 
 
 
 
 
 
 
 
 | 707 | + | FRawOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 708 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 709 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 710 |  | begin | 
 
 
 
 
 
 
 
 | 711 | + | if not FSepOpened then | 
 
 
 
 
 
 
 
 | 712 | + | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 | 713 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 714 |  | Fsep_file.Seek(raw_info.RawAddr + Offset, soFromBeginning); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 715 |  | Fsep_file.CopyFrom(Src, Size); | 
 
 
 
 
 
 
 
 | 716 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 717 | + | begin | 
 
 
 
 
 
 
 
 | 718 | + | FSepOpened := False; | 
 
 
 
 
 
 
 
 | 719 | + | Fsep_file.Free; | 
 
 
 
 
 
 
 
 | 720 | + | end | 
 
 
 
 
 
 
 
 | 721 | + | else | 
 
 
 
 
 
 
 
 | 722 | + | FSepOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 723 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 724 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 725 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 731 |  | begin | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 732 |  | if not LocSep then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 733 |  | begin | 
 
 
 
 
 
 
 
 | 734 | + | if not FRawOpened then | 
 
 
 
 
 
 
 
 | 735 | + | Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), | 
 
 
 
 
 
 
 
 | 736 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 737 |  | if (Fraw_file.Size mod 32) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 738 |  | Fraw_file.Write(EmptyBytes[0], 32 - (Fraw_file.Size mod 32)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 739 |  | Result := Fraw_file.Size; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 741 |  | Fraw_file.CopyFrom(Src, Src.Size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 742 |  | if (Fraw_file.Size mod 32) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 743 |  | Fraw_file.Write(EmptyBytes[0], 32 - (Fraw_file.Size mod 32)); | 
 
 
 
 
 
 
 
 | 744 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 745 | + | begin | 
 
 
 
 
 
 
 
 | 746 | + | FRawOpened := False; | 
 
 
 
 
 
 
 
 | 747 | + | Fraw_file.Free; | 
 
 
 
 
 
 
 
 | 748 | + | end | 
 
 
 
 
 
 
 
 | 749 | + | else | 
 
 
 
 
 
 
 
 | 750 | + | FRawOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 751 |  | end | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 752 |  | else | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 753 |  | begin | 
 
 
 
 
 
 
 
 | 754 | + | if not FSepOpened then | 
 
 
 
 
 
 
 
 | 755 | + | Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), | 
 
 
 
 
 
 
 
 | 756 | + | fmOpenReadWrite); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 757 |  | if (Fsep_file.Size mod 32) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 758 |  | Fsep_file.Write(EmptyBytes[0], 32 - (Fsep_file.Size mod 32)); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 759 |  | Result := Fsep_file.Size; | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 761 |  | Fsep_file.CopyFrom(Src, Src.Size); | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 762 |  | if (Fsep_file.Size mod 32) > 0 then | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 763 |  | Fsep_file.Write(EmptyBytes[0], 32 - (Fsep_file.Size mod 32)); | 
 
 
 
 
 
 
 
 | 764 | + | if UnloadWhenUnused then | 
 
 
 
 
 
 
 
 | 765 | + | begin | 
 
 
 
 
 
 
 
 | 766 | + | FSepOpened := False; | 
 
 
 
 
 
 
 
 | 767 | + | Fsep_file.Free; | 
 
 
 
 
 
 
 
 | 768 | + | end | 
 
 
 
 
 
 
 
 | 769 | + | else | 
 
 
 
 
 
 
 
 | 770 | + | FSepOpened := True; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 771 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 772 |  | end; | 
 
 
 
 
 
 
 
 
 
 
 
 
 | 773 |  |  |