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/SUBT.pas

    r233 r240  
    44
    55uses
    6   _FileTypes;
     6  _FileTypes, Grids, StdCtrls, ExtCtrls;
    77
    88type
    99  TFile_SUBT = class(TFile)
     10      procedure SetOpened(Opened: Boolean); override;
     11    private
     12      grid: TStringGrid;
     13      panel: TPanel;
     14      save: TButton;
     15      procedure saveclick(Sender: TObject);
    1016    public
    1117      procedure InitDataFields; override;
     
    1622
    1723uses
    18   ConnectionManager, Math, Classes, TypeDefs, _DataTypes, Forms, StdCtrls, Grids;
     24  ConnectionManager, Math, Classes, TypeDefs, _DataTypes, Forms,
     25  Controls;
    1926
    2027procedure TFile_SUBT.InitDataFields;
    21 var
    22   tempi: Integer;
    2328begin
    2429  inherited;
    25   FDataFields := TBlock.Create(Self, nil, 0, 'Base', '', nil);
     30  FDataFields := TBlock.Create(Self, nil, 'Base', '', []);
    2631  with FDataFields do
    2732  begin
    28     AddField(TFileID, $00, 'FileID', '', nil);
     33    AddField(TFileID, 'FileID', '', []);
     34    AddField(TLevelID, 'LevelID', '', []);
     35    AddField(TUnused, 'Unused data', '', [16]);
    2936
    30     AddField(TLevelID, $04, 'LevelID', '', nil);
     37    AddField(TRawLink, 'Raw Address', '', []);
    3138
    32     tempi := 16;
    33     AddField(TUnused, $08, 'Unused data', '', @tempi);
    34 
    35     AddField(TRawLink, $18, 'Raw Address', '', nil);
    36 
    37     tempi := 4;
    38     with AddField(TArray, $1C, 'SUBT offsets array', '', @tempi) do
     39    with TArray(AddField(TArray, 'SUBT offsets array', '', [4])) do
    3940    begin
    40       tempi := 4;
    41       AddField(TInt, $00, 'Offset', '', @tempi);
     41      AddField(TInt, 'Offset', '', [4]);
     42      SetCount;
    4243    end;
    4344  end;
     45  FDataFields.Update(0, -1);
     46
    4447  FFileStream.Free;
    4548  FFileStream := nil;
    4649end;
    4750
    48 
    4951procedure TFile_SUBT.InitEditor;
    50 var
    51   grid: TStringGrid;
    5252begin
    5353  FEditor := TFrame.Create(nil);
    5454  grid := TStringGrid.Create(FEditor);
     55  grid.Align := alClient;
     56  grid.DefaultRowHeight := 18;
     57  grid.DefaultColWidth := 100;
     58  grid.ColCount := 2;
     59  grid.RowCount := 4;
     60  grid.FixedRows := 1;
     61  grid.FixedCols := 0;
     62  grid.ColWidths[0] := 80;
     63  grid.ColWidths[1] := 200;
     64  grid.Cells[0, 0] := 'Name';
     65  grid.Cells[1, 0] := 'Content';
     66  grid.Options := [goColSizing,goEditing,
     67      goVertLine,goHorzLine,goFixedVertLine,goFixedHorzLine];
    5568  grid.Parent := FEditor;
     69  panel := TPanel.Create(FEditor);
     70  panel.Align := alBottom;
     71  panel.Height := 30;
     72  panel.Parent := FEditor;
     73  save := TButton.Create(panel);
     74  save.Top := 2;
     75  save.Left := 2;
     76  save.Width := 100;
     77  save.Height := 26;
     78  save.Caption := 'Save';
     79  save.OnClick := saveclick;
     80  save.Parent := panel;
     81end;
     82
     83procedure TFile_SUBT.saveclick(Sender: TObject);
     84var
     85  i,j: Integer;
     86  temps: String;
     87  fs: TFileStream;
     88  offset: Integer;
     89begin
     90  fs := TFileStream.Create('C:\Spiele\Oni\GameDataFolder\tests\messages_raw_recreated.hex', fmCreate);
     91
     92  i := grid.RowCount - 2;
     93  FFileStream.Seek($1C, soFromBeginning);
     94  FFileStream.Write(i, 4);
     95  FFileStream.Size := $20 + i * 4;
     96 
     97  for i := 0 to grid.RowCount - 2 do
     98  begin
     99    for j := 0 to 1 do
     100    begin
     101      if j = 0 then
     102      begin
     103        offset := fs.Size;
     104        FFileStream.Seek($20 + i*4, soFromBeginning);
     105        FFileStream.Write(offset, 4);
     106      end;
     107      temps := grid.Cells[j, i+1];
     108      SetLength(temps, Length(temps)+1);
     109      temps[Length(temps)] := #0;
     110      fs.Write(temps[1], Length(temps));
     111    end;
     112  end;
     113  fs.Free;
     114  fs := TFileStream.Create('C:\Spiele\Oni\GameDataFolder\tests\messages_dat_recreated.hex', fmCreate);
     115  ReCreateFile(fs);
     116  fs.Free;
     117end;
     118
     119
     120procedure TFile_SUBT.SetOpened(Opened: Boolean);
     121var
     122  i,j: Integer;
     123  offset: Integer;
     124  temps: String;
     125  pos: Integer;
     126begin
     127  inherited;
     128  if Opened then
     129  begin
     130    CacheFile;
     131    CacheRawFile($18);
     132
     133    FFileStream.Seek($1C, soFromBeginning);
     134    FFileStream.Read(i, 4);
     135
     136    grid.RowCount := 1 + i;
     137
     138    for i := 0 to grid.RowCount - 2 do
     139    begin
     140      for j := 0 to 1 do
     141      begin
     142        if j = 0 then
     143        begin
     144          FFileStream.Seek($20 + i*4, soFromBeginning);
     145          FFileStream.Read(offset, 4);
     146          FRawCaches[0].Seek(offset, soFromBeginning);
     147        end;
     148        SetLength(temps, 200);
     149        pos := 0;
     150        repeat
     151          Inc(pos);
     152          FRawCaches[0].Read(temps[pos], 1);
     153        until temps[pos] = #0;
     154        SetLength(temps, pos - 1);
     155        grid.Cells[j, i+1] := temps;
     156      end;
     157    end;
     158
     159  end else
     160  begin
     161    Exit;
     162  end;
    56163end;
    57164
Note: See TracChangeset for help on using the changeset viewer.