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 113 by alloc, Sun Feb 25 17:20:22 2007 UTC vs.
Revision 148 by alloc, Sun Apr 1 16:37:25 2007 UTC

# Line 34 | Line 34 | type
34      procedure UpdateDatFilePart(FileID, Offset, Size: Integer; Src: TStream); overload; override;
35  
36      function GetDatLinks(FileID: Integer): TDatLinkList; override;
37 +    function GetDatLink(FileID, DatOffset: Integer): TDatLink; override;
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 50 | Line 52 | type
52   implementation
53  
54   uses
55 <  SysUtils, StrUtils, Data, Functions, RawList;
55 >  SysUtils, StrUtils, Data, Functions, RawList, DatLinks;
56  
57  
58   (*
# Line 397 | Line 399 | end;
399  
400  
401  
402 + function TAccess_OniArchive.GetDatLink(FileID, DatOffset: Integer): TDatLink;
403 + var
404 +  link: Integer;
405 + begin
406 +  Result := DatLinksManager.GetDatLink(FConnectionID, FileID, DatOffset);
407 +  LoadDatFilePart(fileid, Result.SrcOffset, 4, @link);
408 +  if link > 0 then
409 +    Result.DestID := link div 256
410 +  else
411 +    Result.DestID := -1;
412 + end;
413 +
414 +
415 + function TAccess_OniArchive.GetDatLinks(FileID: Integer): TDatLinkList;
416 + var
417 +  i: Integer;
418 +  link: Integer;
419 + begin
420 +  Result := DatLinksManager.GetDatLinks(FConnectionID, FileID);
421 +  if Length(Result) > 0 then
422 +  begin
423 +    for i := 0 to High(Result) do
424 +    begin
425 +      LoadDatFilePart(fileid, Result[i].SrcOffset, 4, @link);
426 +      if link > 0 then
427 +        Result[i].DestID := link div 256
428 +      else
429 +        Result[i].DestID := -1;
430 +    end;
431 +  end;
432 + end;
433 +
434 +
435   function TAccess_OniArchive.GetRawList(FileID: Integer): TRawDataList;
436   begin
437    Result := RawLists.GetRawList(FConnectionID, FileID);
# Line 410 | Line 445 | end;
445  
446  
447  
448 <
414 < 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 421 | 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 439 | 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 451 | 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 556 | 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;

Diff Legend

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