Ignore:
Timestamp:
Jul 15, 2007, 1:12:26 AM (18 years ago)
Author:
alloc
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • oup/current/FileClasses/_FileTypes.pas

    r238 r240  
    44
    55uses
    6   TypeDefs, _DataTypes, _TreeElement, Classes, Forms;
     6  TypeDefs, _TreeElement, Classes, Forms, _DataTypes;
    77
    88
     
    1515      FFileInfo: TFileInfo;
    1616      FFileStream: TMemoryStream;
     17      FRawCaches: array of TMemoryStream;
    1718
    1819      FCached: Boolean;
     
    2425      FOpened: Boolean;
    2526
     27      function GetEditor: TFrame;
    2628      function GetFieldByOffset(Offset: Integer): TDataField;
    27   published
     29      procedure SetOpened(Opened: Boolean); virtual;
     30    published
    2831    public
    2932      constructor Create(ConnectionID, FileID: Integer); virtual;
     
    3336      procedure InitEditor; virtual;
    3437
     38      procedure ReCreateFile(fs: TStream);
     39
     40      procedure CacheFile;
     41      procedure CacheRawFile(Offset: Integer);
     42
    3543      property FileStream: TMemoryStream read FFileStream;
    3644      property FileInfo: TFileInfo read FFileInfo;
    37       property ConnectionID: Integer read FConnectionID;
    3845
    3946      property Cached: Boolean read FCached;
    4047      property Changed: Boolean read FChanged write FChanged;
    4148
    42       property Editor: TFrame read FEditor;
    43       property Opened: Boolean read FOpened write FOpened;
     49      property Editor: TFrame read GetEditor;
     50      property Opened: Boolean read FOpened write SetOpened;
    4451
    4552      property FieldByOffset[Offset: Integer]: TDataField read GetFieldByOffset;
     
    5865{ TFileType }
    5966
     67procedure TFile.CacheFile;
     68begin
     69  if not Assigned(FFileStream) then
     70  begin
     71    FFileStream := TMemoryStream.Create;
     72    ConManager.Connection[FConnectionID].LoadDatFile(FFileInfo.ID, TStream(FFileStream));
     73  end;
     74end;
     75
     76
     77procedure TFile.CacheRawFile(Offset: Integer);
     78var
     79  rawlist: TRawDataList;
     80  i: Integer;
     81begin
     82  rawlist := ConManager.Connection[ConnectionID].GetRawList(FFileInfo.ID);
     83  if Length(rawlist) > 0 then
     84  begin
     85    for i := 0 to High(rawlist) do
     86    begin
     87      if rawlist[i].SrcOffset = Offset then
     88      begin
     89        if not Assigned(FRawCaches[i]) then
     90        begin
     91          FRawCaches[i] := TMemoryStream.Create;
     92          ConManager.Connection[ConnectionID].LoadRawFile(FFileInfo.ID, Offset, TStream(FRawCaches[i]));
     93        end;
     94      end;
     95    end;
     96  end;
     97end;
     98
     99
     100procedure TFile.SetOpened(Opened: Boolean);
     101begin
     102  FOpened := Opened;
     103end;
     104
     105
    60106constructor TFile.Create(ConnectionID, FileID: Integer);
    61107begin
    62108  FConnectionID := ConnectionID;
    63109  FFileInfo := ConManager.Connection[ConnectionID].GetFileInfo(FileID);
     110
     111  SetLength(FRawCaches, Length(ConManager.Connection[ConnectionID].GetRawList(FileID)));
    64112
    65113  FCached := False;
     
    107155
    108156
     157function TFile.GetEditor: TFrame;
     158begin
     159  if not Assigned(FEditor) then
     160    InitEditor;
     161  Result := FEditor;
     162end;
     163
     164
    109165procedure TFile.InitDataFields;
    110166begin
     
    122178
    123179
     180//*********************************************************
     181//*********************************************************
     182//*********************************************************
     183procedure TFile.ReCreateFile(fs: TStream);
     184const
     185  temp0: array[0..31] of Byte =
     186    ($AD,$DE,$AD,$DE,$AD,$DE,$AD,$DE,
     187     $AD,$DE,$AD,$DE,$AD,$DE,$AD,$DE,
     188     $AD,$DE,$AD,$DE,$AD,$DE,$AD,$DE,
     189     $AD,$DE,$AD,$DE,$AD,$DE,$AD,$DE);
     190var
     191  count: Integer;
     192begin
     193  FDataFields.WriteData(fs);
     194  count := fs.Size mod 32;
     195  if count > 0 then
     196    fs.Write(temp0[count], 32 - count);
     197end;
     198//*********************************************************
     199//*********************************************************
     200//*********************************************************
     201
    124202end.
Note: See TracChangeset for help on using the changeset viewer.