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 116 by alloc, Mon Feb 26 22:57:02 2007 UTC vs.
Revision 173 by alloc, Wed May 2 13:19:40 2007 UTC

# Line 38 | Line 38 | type
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;
# Line 444 | Line 445 | end;
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
# Line 455 | Line 457 | begin
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
# Line 473 | Line 476 | 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
# Line 485 | Line 489 | 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;
# Line 590 | Line 604 | begin
604    end;
605   end;
606  
607 +
608   procedure TAccess_OniArchive.UpdateRawFilePart(FileID, DatOffset, Offset, Size: Integer; Src: TStream);
609   var
610    raw_info: TRawDataInfo;
# Line 631 | Line 646 | begin
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;
# Line 653 | Line 675 | begin
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;

Diff Legend

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