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 209 by alloc, Mon Jun 4 22:07:29 2007 UTC vs.
Revision 241 by alloc, Tue Jul 17 22:27:16 2007 UTC

# Line 38 | Line 38 | type
38      function GetDatLink(FileID, DatOffset: Integer): TDatLink; override;
39      function GetRawList(FileID: Integer): TRawDataList; override;
40      function GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo; override;
41 +    function GetRawsForType(RawType: String): TRawDataList; override;
42  
43      procedure LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; var target: TStream); overload;
44      procedure LoadRawOffset(LocSep: Boolean; RawAddr, Size: Integer; target: Pointer); overload;
# Line 160 | Line 161 | begin
161    FBackend := DB_ONI;
162    FConnectionID := ConnectionID;
163    FChangeRights := [CR_EditDat, CR_EditRaw, CR_AppendRaw];
164 +
165 +  inherited;
166   end;
167  
168  
# Line 282 | Line 285 | var
285   begin
286    list := TStringList.Create;
287    list.Sorted := True;
288 +  if ext = '*' then
289 +    ext := '';
290    for i := 0 to GetFileCount - 1 do
291    begin
292      if ((Length(ext) = 0) or (Pos(Fdat_files[i].Extension, ext) > 0)) and
# Line 367 | Line 372 | var
372   begin
373    if fileid < GetFileCount then
374    begin
375 <    if not Assigned(Target) then
371 <      Target := TMemoryStream.Create;
372 <    if not FDatOpened then
373 <      Fdat_file := TFileStream.Create(FFileName, fmOpenReadWrite);
374 <    Fdat_file.Seek(Fdat_files[fileid].DatAddr, soFromBeginning);
375 <    streampos := Target.Position;
376 <    Target.CopyFrom(Fdat_file, Fdat_files[fileid].Size);
377 <    Target.Seek(streampos, soFromBeginning);
378 <    if UnloadWhenUnused then
375 >    if GetFileInfo(FileID).Size > 0 then
376      begin
377 <      Fdat_file.Free;
378 <      FDatOpened := False;
379 <    end
380 <    else
381 <      FDatOpened := True;
377 >      if not Assigned(Target) then
378 >        Target := TMemoryStream.Create;
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;
395  
# Line 486 | Line 494 | begin
494   end;
495  
496  
497 + function TAccess_OniArchive.GetRawsForType(RawType: String): TRawDataList;
498 + var
499 +  i, j: Integer;
500 +  dats: TStrings;
501 +  list: TRawDataList;
502 + begin
503 +  dats := nil;
504 +  dats := GetFilesList(MidStr(RawType, 1, 4), '', True, ST_IDAsc);
505 +  for i := 0 to dats.Count - 1 do
506 +  begin
507 +    list := GetRawList(StrToInt(MidStr(dats.Strings[i], 1, 5)));
508 +    for j := 0 to Length(list) - 1 do
509 +    begin
510 +      if list[j].RawType = RawType then
511 +      begin
512 +        SetLength(Result, Length(Result)+1);
513 +        Result[High(Result)] := list[j];
514 +      end;
515 +    end;
516 +  end;
517 + end;
518 +
519 +
520   function TAccess_OniArchive.GetRawInfo(FileID, DatOffset: Integer): TRawDataInfo;
521   begin
522    Result := RawLists.GetRawInfo(FConnectionID, FileID, DatOffset);

Diff Legend

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