| 38 |
|
function GetRawList(FileID: Integer): TRawDataList; override; |
| 39 |
|
function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override; |
| 40 |
|
|
| 41 |
< |
procedure LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; target: Pointer); |
| 41 |
> |
procedure LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; var target: TStream); overload; |
| 42 |
> |
procedure LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; target: Pointer); overload; |
| 43 |
|
procedure LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); overload; override; |
| 44 |
|
procedure UpdateRawFile(FileID, DatOffset: Integer; Src: TStream); overload; override; |
| 45 |
|
procedure LoadRawFilePart(FileID, DatOffset, Offset, Size: Integer; var Target: TStream); overload; override; |
| 445 |
|
|
| 446 |
|
|
| 447 |
|
|
| 448 |
< |
|
| 448 |
< |
procedure TAccess_OniArchive.LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; target: Pointer); |
| 448 |
> |
procedure TAccess_OniArchive.LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; var target: TStream); |
| 449 |
|
begin |
| 450 |
+ |
if not Assigned(Target) then |
| 451 |
+ |
Target := TMemoryStream.Create; |
| 452 |
|
if not LocSep then |
| 453 |
|
begin |
| 454 |
|
if not FRawOpened then |
| 457 |
|
if RawAddr <= Fraw_file.Size then |
| 458 |
|
begin |
| 459 |
|
Fraw_file.Seek(RawAddr, soFromBeginning); |
| 460 |
< |
Fraw_file.Read(target^, size); |
| 460 |
> |
Target.CopyFrom(Fraw_file, size); |
| 461 |
> |
Target.Seek(0, soFromBeginning); |
| 462 |
|
end; |
| 463 |
|
if UnloadWhenUnused then |
| 464 |
|
begin |
| 476 |
|
if RawAddr <= Fsep_file.Size then |
| 477 |
|
begin |
| 478 |
|
Fsep_file.Seek(RawAddr, soFromBeginning); |
| 479 |
< |
Fsep_file.Read(target^, size); |
| 479 |
> |
Target.CopyFrom(Fsep_file, size); |
| 480 |
> |
Target.Seek(0, soFromBeginning); |
| 481 |
|
end; |
| 482 |
|
if UnloadWhenUnused then |
| 483 |
|
begin |
| 489 |
|
end; |
| 490 |
|
end; |
| 491 |
|
|
| 492 |
+ |
procedure TAccess_OniArchive.LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; target: Pointer); |
| 493 |
+ |
var |
| 494 |
+ |
data: TStream; |
| 495 |
+ |
begin |
| 496 |
+ |
data := nil; |
| 497 |
+ |
LoadRawOffset(LocSep, RawAddr, Size, data); |
| 498 |
+ |
data.Read(Target^, Size); |
| 499 |
+ |
data.Free; |
| 500 |
+ |
end; |
| 501 |
+ |
|
| 502 |
|
procedure TAccess_OniArchive.LoadRawFile(FileID, DatOffset: Integer; var Target: TStream); |
| 503 |
|
var |
| 504 |
|
raw_info: TRawDataInfo; |
| 604 |
|
end; |
| 605 |
|
end; |
| 606 |
|
|
| 607 |
+ |
|
| 608 |
|
procedure TAccess_OniArchive.UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TStream); |
| 609 |
|
var |
| 610 |
|
raw_info: TRawDataInfo; |
| 646 |
|
end; |
| 647 |
|
|
| 648 |
|
function TAccess_OniArchive.AppendRawFile(LocSep: Boolean; Src: TStream): Integer; |
| 649 |
+ |
const |
| 650 |
+ |
EmptyBytes: Array[0..31] of Byte = ( |
| 651 |
+ |
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ); |
| 652 |
|
begin |
| 653 |
|
if not LocSep then |
| 654 |
|
begin |
| 655 |
|
if not FRawOpened then |
| 656 |
|
Fraw_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.raw'), |
| 657 |
|
fmOpenReadWrite); |
| 658 |
+ |
if (Fraw_file.Size mod 32) > 0 then |
| 659 |
+ |
Fraw_file.Write(EmptyBytes[0], 32 - (Fraw_file.Size mod 32)); |
| 660 |
|
Result := Fraw_file.Size; |
| 661 |
|
Fraw_file.Seek(0, soFromEnd); |
| 662 |
|
Fraw_file.CopyFrom(Src, Src.Size); |
| 663 |
+ |
if (Fraw_file.Size mod 32) > 0 then |
| 664 |
+ |
Fraw_file.Write(EmptyBytes[0], 32 - (Fraw_file.Size mod 32)); |
| 665 |
|
if UnloadWhenUnused then |
| 666 |
|
begin |
| 667 |
|
FRawOpened := False; |
| 675 |
|
if not FSepOpened then |
| 676 |
|
Fsep_file := TFileStream.Create(AnsiReplaceStr(FFileName, '.dat', '.sep'), |
| 677 |
|
fmOpenReadWrite); |
| 678 |
+ |
if (Fsep_file.Size mod 32) > 0 then |
| 679 |
+ |
Fsep_file.Write(EmptyBytes[0], 32 - (Fsep_file.Size mod 32)); |
| 680 |
|
Result := Fsep_file.Size; |
| 681 |
|
Fsep_file.Seek(0, soFromEnd); |
| 682 |
|
Fsep_file.CopyFrom(Src, Src.Size); |
| 683 |
+ |
if (Fsep_file.Size mod 32) > 0 then |
| 684 |
+ |
Fsep_file.Write(EmptyBytes[0], 32 - (Fsep_file.Size mod 32)); |
| 685 |
|
if UnloadWhenUnused then |
| 686 |
|
begin |
| 687 |
|
FSepOpened := False; |