unit FTableCreate;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, RplTableCreator,
  StdCtrls;

type
  TForm1 = class(TForm)
    RPLTableCreator1: TRPLTableCreator;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    Memo1: TMemo;
    Button4: TButton;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDblClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not SaveDialog1.Execute then
    exit;
  RPLTableCreator1.FileName:=SaveDialog1.FileName;
  RPLTableCreator1.convert:=true;
//  edit1.Text:=RPLTableCreator1.moyenne;
end;

procedure TForm1.Button3Click(Sender: TObject);
var j:integer;
begin
  if not openDialog1.Execute then
    exit;
  memo1.Lines.LoadFromFile(opendialog1.filename);
  j:=0;
  while j<memo1.Lines.count do
    if (length(memo1.Lines[j])=0) or (memo1.Lines[j][1]<>'=') then
      memo1.Lines.delete(j)
    else
      inc(j);
  RPLTableCreator1.liste:=Memo1.Lines;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if not openDialog1.Execute then
    exit;
  RPLTableCreator1.FileName:=OpenDialog1.FileName;
  RPLTableCreator1.Load:=true;
  memo1.lines:=RPLTableCreator1.liste;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not SaveDialog1.execute then
  exit;
memo1.lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.FormDblClick(Sender: TObject);
  function getvalue(s:string):integer;
  var i,j:integer;
  begin
    result:=0;
    j:=1;
    for i:=1 to Length(s) do
    begin
      if ord(s[i])<=ord('9') then
        result:=result+(ord(s[i])-ord('0'))*j
      else
        result:=result+(ord(s[i])-ord('A')+10)*j;
      j:=j*16;
    end;
  end;

var s:array [1..131071] of Char;
  function copy(j,k:integer):string;
  var i:integer;
  begin result:='';
    for i:=j to j+k-1 do
      result:=result+s[i];
  end;
var r:string; i,j,k,l,fs:integer; f:file;
begin
  if not opendialog1.Execute then
    exit;
  assignfile(f,OpenDialog1.FileName);
  reset(f,1);
  j:=filesize(f); fs:=j;
  blockRead(f,s,j);
  closefile(f);
  for i:=j-1-8 downto 0 do
  begin
    s[i*2+2]:=inttohex(ord(s[i+1+8]) div 16,1)[1];
    s[i*2+1]  :=inttohex(ord(s[i+1+8]) mod 16,1)[1];
  end;


  Memo1.Lines.clear;
  Memo1.Lines.add(copy(1,16));

  for i:=0 to 7 do
  begin
    r:='';
    for j:=0 to 7 do
      r:=r+copy((i*8+j)*4+17,4)+' ';
    Memo1.Lines.add(r);
  end;

  j:=17+64*4;
  for i:=0 to 7 do
  begin
    r:='';
    for l:=0 to 7 do
    begin
      while copy(j,5)<>'00000' do
      begin
        r:=r+copy(j,5)+' ';
        j:=j+5;
      end;
      r:=r+'00000 ';
      j:=j+5;
    end;
    Memo1.Lines.add(r);
  end;

  k:=0; r:='';
  for i:=0 to GetValue(copy(12,5))-1 do
  begin
    r:=r+copy(j,5)+' ';
    inc(k);
    if k mod 8 = 0 then begin memo1.lines.add(r); r:=''; end;
    j:=j+5;
  end;
  memo1.lines.add(r);

  inc(j);
  while j<=fs do
  begin
    r:=IntToHex(GetValue(copy(j,5)),5)+' ';
    for i:=1 to GetValue(copy(j+5,2)) do
      r:=r+chr(getvalue(copy(j+5+i*2,2)));
    j:=j+7+GetValue(copy(j+5,2))*2;
    memo1.lines.add(r);
  end;
end;

end.

