unit aticonf;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type tOption = record
  Name : String;
  Help : string;
  Selected : byte;
end;

type
  TMain = class(TForm)
    Image1: TImage;
    Bevel1: TBevel;
    bNext: TButton;
    bCancel: TButton;
    mText: TMemo;
    rbVarY: TRadioButton;
    rbVarN: TRadioButton;
    gbMain: TGroupBox;
    procedure bCancelClick(Sender: TObject);
    procedure bNextClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Main: TMain;
  var i,j,k : longint;
  var Inf2k,InfXP,Inf2Ko,InfXPo : TextFile;
  var DrvFile : File;
  var temp : string;
  var sInf2K : array of String;
  var sInfXP : array of String;
  var ati2mtag : array of byte;
  var Step : word;
  var Force9700 : boolean;
  Buf : array [0..2047] of byte;
  Trnsf : integer;

implementation

{$R *.dfm}
Procedure CheckIO();
begin
  if IOResult <> 0 then begin
    Application.MessageBox(PChar('Не могу открыть файл'),PChar('Ошибка'),MB_OK);
    Halt;
  end;
end;

procedure TMain.bCancelClick(Sender: TObject);
begin
  Halt;
end;

procedure Patch(S9700,aovp : boolean);
var i : longword;
begin
   if S9700 and aovp then begin
      ati2mtag[$00000140]:=$08;
      ati2mtag[$00000141]:=$59;
      ati2mtag[$0006C0ED]:=$FF;
      ati2mtag[$0006C0EE]:=$FF;
      ati2mtag[$0006C0EF]:=$89;
      ati2mtag[$0006C0F0]:=$C2;
      ati2mtag[$0006C142]:=$FF;
      ati2mtag[$0006C143]:=$FF;
      ati2mtag[$0006C144]:=$89;
      ati2mtag[$0006C145]:=$C2;
      ati2mtag[$000958A2]:=$66;
      ati2mtag[$000958A3]:=$8B;
      ati2mtag[$000958A4]:=$40;
      ati2mtag[$000958A5]:=$04;
      ati2mtag[$000958A6]:=$90;
      ati2mtag[$000958A7]:=$90;
      ati2mtag[$000958A8]:=$90;
      ati2mtag[$000958A9]:=$90;
      ati2mtag[$000958AA]:=$90;
      ati2mtag[$000958AB]:=$90;
      ati2mtag[$000958AC]:=$90;
      ati2mtag[$000958AD]:=$90;
      ati2mtag[$000958AE]:=$90;
      ati2mtag[$000958AF]:=$90;
      ati2mtag[$000958B0]:=$90;
      ati2mtag[$000958B1]:=$90;
      ati2mtag[$000958B2]:=$90;
      ati2mtag[$000958B3]:=$90;
      ati2mtag[$000958B4]:=$90;
      ati2mtag[$00095DFA]:=$0F;
      ati2mtag[$00095DFB]:=$B7;
      ati2mtag[$00095DFC]:=$85;
      ati2mtag[$00095DFD]:=$02;
      ati2mtag[$00095DFE]:=$FF;
      ati2mtag[$00095DFF]:=$FF;
      ati2mtag[$00095E00]:=$FF;
      ati2mtag[$00095E01]:=$66;
      ati2mtag[$00095E02]:=$25;
      ati2mtag[$00095E03]:=$F0;
      ati2mtag[$00095E04]:=$F0;
      ati2mtag[$00095E05]:=$66;
      ati2mtag[$00095E06]:=$0D;
      ati2mtag[$00095E07]:=$04;
      ati2mtag[$00095E08]:=$0E;
      ati2mtag[$00095E09]:=$66;
      ati2mtag[$00095E0A]:=$89;
      ati2mtag[$00095E0B]:=$85;
      ati2mtag[$00095E0C]:=$02;
      ati2mtag[$00095E0D]:=$FF;
      ati2mtag[$00095E10]:=$90;
      ati2mtag[$000AAF65]:=$EB;
      ati2mtag[$000AAFD5]:=$90;
      ati2mtag[$000AAFD6]:=$90;
      ati2mtag[$000AAFD7]:=$90;
      ati2mtag[$000AAFD8]:=$90;
      ati2mtag[$000AAFD9]:=$90;
      ati2mtag[$000AAFDA]:=$90;
      ati2mtag[$000AAFDC]:=$90;
      ati2mtag[$000AAFDD]:=$90;
      ati2mtag[$000AAFDE]:=$90;
      ati2mtag[$000AAFDF]:=$90;
      ati2mtag[$000AAFE0]:=$90;
      ati2mtag[$000AAFE1]:=$90;
      ati2mtag[$000AAFE4]:=$90;
      ati2mtag[$000AAFE5]:=$90;
      ati2mtag[$000AAFE6]:=$90;
      ati2mtag[$000AAFE7]:=$90;
      ati2mtag[$000AAFE8]:=$90;
      ati2mtag[$000AAFE9]:=$90;
      ati2mtag[$000AAFEC]:=$EB;
   end;
   if S9700 and (not aovp) then begin
      ati2mtag[$00000140]:=$7B;
      ati2mtag[$00000141]:=$54;
      ati2mtag[$0006C0ED]:=$FF;
      ati2mtag[$0006C0EE]:=$FF;
      ati2mtag[$0006C0EF]:=$89;
      ati2mtag[$0006C0F0]:=$C2;
      ati2mtag[$0006C142]:=$FF;
      ati2mtag[$0006C143]:=$FF;
      ati2mtag[$0006C144]:=$89;
      ati2mtag[$0006C145]:=$C2;
      ati2mtag[$000958A2]:=$66;
      ati2mtag[$000958A3]:=$8B;
      ati2mtag[$000958A4]:=$40;
      ati2mtag[$000958A5]:=$04;
      ati2mtag[$000958A6]:=$90;
      ati2mtag[$000958A7]:=$90;
      ati2mtag[$000958A8]:=$90;
      ati2mtag[$000958A9]:=$90;
      ati2mtag[$000958AA]:=$90;
      ati2mtag[$000958AB]:=$90;
      ati2mtag[$000958AC]:=$90;
      ati2mtag[$000958AD]:=$90;
      ati2mtag[$000958AE]:=$90;
      ati2mtag[$000958AF]:=$90;
      ati2mtag[$000958B0]:=$90;
      ati2mtag[$000958B1]:=$90;
      ati2mtag[$000958B2]:=$90;
      ati2mtag[$000958B3]:=$90;
      ati2mtag[$000958B4]:=$90;
      ati2mtag[$00095DFA]:=$0F;
      ati2mtag[$00095DFB]:=$B7;
      ati2mtag[$00095DFC]:=$85;
      ati2mtag[$00095DFD]:=$02;
      ati2mtag[$00095DFE]:=$FF;
      ati2mtag[$00095DFF]:=$FF;
      ati2mtag[$00095E00]:=$FF;
      ati2mtag[$00095E01]:=$66;
      ati2mtag[$00095E02]:=$25;
      ati2mtag[$00095E03]:=$F0;
      ati2mtag[$00095E04]:=$F0;
      ati2mtag[$00095E05]:=$66;
      ati2mtag[$00095E06]:=$0D;
      ati2mtag[$00095E07]:=$04;
      ati2mtag[$00095E08]:=$0E;
      ati2mtag[$00095E09]:=$66;
      ati2mtag[$00095E0A]:=$89;
      ati2mtag[$00095E0B]:=$85;
      ati2mtag[$00095E0C]:=$02;
      ati2mtag[$00095E0D]:=$FF;
      ati2mtag[$00095E10]:=$90;
      ati2mtag[$000AAF65]:=$EB;
      ati2mtag[$000AAFD5]:=$0F;
      ati2mtag[$000AAFD6]:=$84;
      ati2mtag[$000AAFD7]:=$F8;
      ati2mtag[$000AAFD8]:=$00;
      ati2mtag[$000AAFD9]:=$00;
      ati2mtag[$000AAFDA]:=$00;
      ati2mtag[$000AAFDC]:=$0F;
      ati2mtag[$000AAFDD]:=$84;
      ati2mtag[$000AAFDE]:=$BD;
      ati2mtag[$000AAFDF]:=$00;
      ati2mtag[$000AAFE0]:=$00;
      ati2mtag[$000AAFE1]:=$00;
      ati2mtag[$000AAFE4]:=$0F;
      ati2mtag[$000AAFE5]:=$84;
      ati2mtag[$000AAFE6]:=$9D;
      ati2mtag[$000AAFE7]:=$00;
      ati2mtag[$000AAFE8]:=$00;
      ati2mtag[$000AAFE9]:=$00;
      ati2mtag[$000AAFEC]:=$75;
   end;
   if (not S9700) and aovp then begin
      ati2mtag[$00000140]:=$16;
      ati2mtag[$00000141]:=$96;
      ati2mtag[$0006C0ED]:=$00;
      ati2mtag[$0006C0EE]:=$00;
      ati2mtag[$0006C0EF]:=$03;
      ati2mtag[$0006C0F0]:=$D0;
      ati2mtag[$0006C142]:=$00;
      ati2mtag[$0006C143]:=$00;
      ati2mtag[$0006C144]:=$03;
      ati2mtag[$0006C145]:=$D0;
      ati2mtag[$000958A2]:=$68;
      ati2mtag[$000958A3]:=$C0;
      ati2mtag[$000958A4]:=$03;
      ati2mtag[$000958A5]:=$00;
      ati2mtag[$000958A6]:=$00;
      ati2mtag[$000958A7]:=$FF;
      ati2mtag[$000958A8]:=$B0;
      ati2mtag[$000958A9]:=$A8;
      ati2mtag[$000958AA]:=$00;
      ati2mtag[$000958AB]:=$00;
      ati2mtag[$000958AC]:=$00;
      ati2mtag[$000958AD]:=$E8;
      ati2mtag[$000958AE]:=$3E;
      ati2mtag[$000958AF]:=$71;
      ati2mtag[$000958B0]:=$F5;
      ati2mtag[$000958B1]:=$FF;
      ati2mtag[$000958B2]:=$C1;
      ati2mtag[$000958B3]:=$E8;
      ati2mtag[$000958B4]:=$10;
      ati2mtag[$00095DFA]:=$83;
      ati2mtag[$00095DFB]:=$F8;
      ati2mtag[$00095DFC]:=$40;
      ati2mtag[$00095DFD]:=$75;
      ati2mtag[$00095DFE]:=$1D;
      ati2mtag[$00095DFF]:=$66;
      ati2mtag[$00095E00]:=$81;
      ati2mtag[$00095E01]:=$BD;
      ati2mtag[$00095E02]:=$00;
      ati2mtag[$00095E03]:=$FF;
      ati2mtag[$00095E04]:=$FF;
      ati2mtag[$00095E05]:=$FF;
      ati2mtag[$00095E06]:=$02;
      ati2mtag[$00095E07]:=$10;
      ati2mtag[$00095E08]:=$75;
      ati2mtag[$00095E09]:=$12;
      ati2mtag[$00095E0A]:=$0F;
      ati2mtag[$00095E0B]:=$B7;
      ati2mtag[$00095E0C]:=$85;
      ati2mtag[$00095E0D]:=$02;
      ati2mtag[$00095E10]:=$FF;
      ati2mtag[$000AAF65]:=$74;
      ati2mtag[$000AAFD5]:=$90;
      ati2mtag[$000AAFD6]:=$90;
      ati2mtag[$000AAFD7]:=$90;
      ati2mtag[$000AAFD8]:=$90;
      ati2mtag[$000AAFD9]:=$90;
      ati2mtag[$000AAFDA]:=$90;
      ati2mtag[$000AAFDC]:=$90;
      ati2mtag[$000AAFDD]:=$90;
      ati2mtag[$000AAFDE]:=$90;
      ati2mtag[$000AAFDF]:=$90;
      ati2mtag[$000AAFE0]:=$90;
      ati2mtag[$000AAFE1]:=$90;
      ati2mtag[$000AAFE4]:=$90;
      ati2mtag[$000AAFE5]:=$90;
      ati2mtag[$000AAFE6]:=$90;
      ati2mtag[$000AAFE7]:=$90;
      ati2mtag[$000AAFE8]:=$90;
      ati2mtag[$000AAFE9]:=$90;
      ati2mtag[$000AAFEC]:=$EB;
   end;
   if (not S9700) and (not aovp) then begin
      ati2mtag[$00000140]:=$89;
      ati2mtag[$00000141]:=$91;
      ati2mtag[$0006C0ED]:=$00;
      ati2mtag[$0006C0EE]:=$00;
      ati2mtag[$0006C0EF]:=$03;
      ati2mtag[$0006C0F0]:=$D0;
      ati2mtag[$0006C142]:=$00;
      ati2mtag[$0006C143]:=$00;
      ati2mtag[$0006C144]:=$03;
      ati2mtag[$0006C145]:=$D0;
      ati2mtag[$000958A2]:=$68;
      ati2mtag[$000958A3]:=$C0;
      ati2mtag[$000958A4]:=$03;
      ati2mtag[$000958A5]:=$00;
      ati2mtag[$000958A6]:=$00;
      ati2mtag[$000958A7]:=$FF;
      ati2mtag[$000958A8]:=$B0;
      ati2mtag[$000958A9]:=$A8;
      ati2mtag[$000958AA]:=$00;
      ati2mtag[$000958AB]:=$00;
      ati2mtag[$000958AC]:=$00;
      ati2mtag[$000958AD]:=$E8;
      ati2mtag[$000958AE]:=$3E;
      ati2mtag[$000958AF]:=$71;
      ati2mtag[$000958B0]:=$F5;
      ati2mtag[$000958B1]:=$FF;
      ati2mtag[$000958B2]:=$C1;
      ati2mtag[$000958B3]:=$E8;
      ati2mtag[$000958B4]:=$10;
      ati2mtag[$00095DFA]:=$83;
      ati2mtag[$00095DFB]:=$F8;
      ati2mtag[$00095DFC]:=$40;
      ati2mtag[$00095DFD]:=$75;
      ati2mtag[$00095DFE]:=$1D;
      ati2mtag[$00095DFF]:=$66;
      ati2mtag[$00095E00]:=$81;
      ati2mtag[$00095E01]:=$BD;
      ati2mtag[$00095E02]:=$00;
      ati2mtag[$00095E03]:=$FF;
      ati2mtag[$00095E04]:=$FF;
      ati2mtag[$00095E05]:=$FF;
      ati2mtag[$00095E06]:=$02;
      ati2mtag[$00095E07]:=$10;
      ati2mtag[$00095E08]:=$75;
      ati2mtag[$00095E09]:=$12;
      ati2mtag[$00095E0A]:=$0F;
      ati2mtag[$00095E0B]:=$B7;
      ati2mtag[$00095E0C]:=$85;
      ati2mtag[$00095E0D]:=$02;
      ati2mtag[$00095E10]:=$FF;
      ati2mtag[$000AAF65]:=$74;
      ati2mtag[$000AAFD5]:=$0F;
      ati2mtag[$000AAFD6]:=$84;
      ati2mtag[$000AAFD7]:=$F8;
      ati2mtag[$000AAFD8]:=$00;
      ati2mtag[$000AAFD9]:=$00;
      ati2mtag[$000AAFDA]:=$00;
      ati2mtag[$000AAFDC]:=$0F;
      ati2mtag[$000AAFDD]:=$84;
      ati2mtag[$000AAFDE]:=$BD;
      ati2mtag[$000AAFDF]:=$00;
      ati2mtag[$000AAFE0]:=$00;
      ati2mtag[$000AAFE1]:=$00;
      ati2mtag[$000AAFE4]:=$0F;
      ati2mtag[$000AAFE5]:=$84;
      ati2mtag[$000AAFE6]:=$9D;
      ati2mtag[$000AAFE7]:=$00;
      ati2mtag[$000AAFE8]:=$00;
      ati2mtag[$000AAFE9]:=$00;
      ati2mtag[$000AAFEC]:=$75;
    end;
end;

procedure ChangeINF(Param,Value : word);
var i : word;
var j,k,Code : integer;
begin
  {}
  for i:=0 to Length(sInf2K) - 1 do begin
    if  Length(sInf2K[i])=0 then continue;
    if (sInf2K[i][1]='/') then begin
       temp:=sInf2K[i][2];
       val(temp,j,Code);
       temp:=sInf2K[i][4];
       val(temp,k,Code);
       if j = Param then begin
         if k=Value then delete(sInf2K[i],1,4)
           else sInf2K[i]:='/0'
       end;
    end;
  end;
  {}
  for i:=0 to Length(sInfXP) - 1 do begin
    if  Length(sInfXP[i])=0 then continue;
    if (sInfXP[i][1]='/') then begin
       temp:=sInfXP[i][2];
       val(temp,j,Code);
       temp:=sInfXP[i][4];
       val(temp,k,Code);
       if j = Param then begin
         if k=Value then delete(sInfXP[i],1,4)
           else sInfXP[i]:='/0'
       end;
    end;
  end;
end;

procedure TMain.bNextClick(Sender: TObject);
var i : longword;
begin
  gbMain.Visible:=true;
  inc(Step);
  Main.mText.Lines.Clear;
  case Step of
    1: begin
      Main.mText.Lines.Add('Ограничение Развертки');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('При загрузке Windows драйверы опрашивают монитор по DDC, и получают информацию о его максимальном разрешении и частоте развертки. ');
      Main.mText.Lines.Add('На некоторых мониторах эта информация не соответствует действительности, и приводит к невозможности установки высоких частот обновления.');
      Main.mText.Lines.Add('Данную опцию рекомендуется отключить. Не забудьте при этом включить стандартные средства ограничения частоты развертки монитора.');
      Main.rbVarY.Caption:='Включить ограничение развертки';
      Main.rbVarN.Caption:='Отключить ограничение развертки';
      Main.rbVarY.Checked:=false;
      Main.rbVarN.Checked:=true;
    end;
    2: begin
      if Main.rbVarY.Checked = true then ChangeInf(1,0)
        else ChangeInf(1,1);
      Main.mText.Lines.Add('SmartGart');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('SmartGart - модуль драйвера, управляющий режимами работы AGP');
      Main.mText.Lines.Add('Если при его использовании в вашей системе возникают ошибки, отключите его.');
      Main.rbVarY.Caption:='Включить SmartGart';
      Main.rbVarN.Caption:='Отключить SmartGart';
      Main.rbVarY.Checked:=true;
      Main.rbVarN.Checked:=false;
    end;
    3: begin
      if Main.rbVarY.Checked = true then ChangeInf(2,0)
        else ChangeInf(2,1);
      Main.mText.Lines.Add('Ограничение Разрешений и Разверток');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('В оригинальных драйверах на некоторых картах отключены некоторые разрешения и развертки. Обычно, их включение не вызывает проблем.');
      Main.mText.Lines.Add('Если их включение вызывает проблемы в вашей системе - отключите их');
      Main.rbVarY.Caption:='Ограничить разрешения и развертки как в оригинальном драйвере';
      Main.rbVarN.Caption:='Не ограничивать разрешения и развертки';
      Main.rbVarY.Checked:=false;
      Main.rbVarN.Checked:=true;
    end;
    4: begin
      if Main.rbVarY.Checked = true then ChangeInf(3,0)
        else ChangeInf(3,1);
      Main.mText.Lines.Add('Форсировать вывод на TV');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('Некоторые телевизоры имеют нестандартное сопротивление видеовхода, и их подключение не определяется драйвером.');
      Main.mText.Lines.Add('Если у вас такой телевизор, выберите ''Форсировать вывод на TV''. После этого телевизор будет определяться драйвером как подключенный вне зависимости от наличия физического подключения');
      Main.rbVarY.Caption:='Форсировать вывод на TV';
      Main.rbVarN.Caption:='Обычный режим работы видеовыхода';
      Main.rbVarY.Checked:=false;
      Main.rbVarN.Checked:=true;
    end;
    5: begin
      if Main.rbVarY.Checked = true then ChangeInf(4,0)
        else ChangeInf(4,1);
      Main.mText.Lines.Add('Расширенные Возможности');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('По умолчанию драйверами загружаются программы, обеспечивающие переключение видеорежимов через иконку ATI в трее, и поддержку горячих клавиш.');
      Main.mText.Lines.Add('Если вам не нужны эти возможности, и вы не хотите, чтобы эти программы загружались - выберите ''Не использовать расширенные возможности''');
      Main.rbVarY.Caption:='Использовать расширенные возможности';
      Main.rbVarN.Caption:='Не использовать расширенные возможности';
      Main.rbVarY.Checked:=true;
      Main.rbVarN.Checked:=false;
    end;
    6: begin
      if Main.rbVarY.Checked = true then ChangeInf(5,0)
        else ChangeInf(5,1);
      Main.mText.Lines.Add('Soft9700');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('Выбор этой опции позволяет включить все 8 конвееров на платах серии Radeon 9500 (128/256bit) и Radeon 9800SE (По умолчанию половина их отключена), модифицировав, таким образом, эти платы до Radeon 9500 PRO, 9700 или 9800 соответственно');
      Main.mText.Lines.Add('ВНИМАНИЕ! При включении этой опции после установки драйверов рекомендуется провести тестирование видеокарты на правильность вывода изображения (особенно в DX8/9 приложениях), т.к. отключенные по умолчанию конвееры могут быть дефектными');
      Main.mText.Lines.Add('Не рекомендуется использовать данную возможность на картах, не указанных выше.');
      Main.mText.Lines.Add('Использование данной опции требует внесения изменений в файл ati2mtag.sys. Если потребуется установка этого же распакованного драйвера на другую карту, ОБЯЗАТЕЛЬНО запустите конфигуратор заново, или же распакуйте заново установочный архив');
      Main.rbVarY.Caption:='Форсировать возможности Radeon 9700/9800';
      Main.rbVarN.Caption:='Не вносить изменений в код драйвера';
      Main.rbVarY.Checked:=false;
      Main.rbVarN.Checked:=true;
    end;
    7: begin
      if Main.rbVarY.Checked = true then Force9700:=true
        else Force9700:=false;
      Main.mText.Lines.Add('Overclocking Antiprotection ');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('В оригинальном драйвере на некоторых картах блокирована возможность разгона сторонними утилитами. Для снятия блокировки выберите ''Отключить защиту от разгона''');
      Main.mText.Lines.Add('Использование данной опции требует внесения изменений в файл ati2mtag.sys. Если потребуется установка этого же распакованного драйвера на другую карту, ОБЯЗАТЕЛЬНО запустите конфигуратор заново, или же распакуйте заново установочный архив');
      Main.rbVarY.Caption:='Отключить защиту от разгона';
      Main.rbVarN.Caption:='Не вносить изменений в код драйвера';
      Main.rbVarY.Checked:=false;
      Main.rbVarN.Checked:=true;
    end;
    8: begin
      Patch(Force9700,Main.rbVarY.Checked);
      Main.mText.Lines.Add('Управление гаммой');
      Main.mText.Lines.Add('');
      Main.mText.Lines.Add('В оригинальном драйвере управление гамма-коррекцией из внешних приложений невозможно. Если вы хотите использовать, например, AdobeGamma, то встроенные средства цветокоррекции надо отключить.');
      Main.rbVarY.Caption:='Гаммой управляет драйвер';
      Main.rbVarN.Caption:='Гаммой управляют внешние приложения';
      Main.rbVarY.Checked:=false;
      Main.rbVarN.Checked:=true;
    end;
    else begin
      if Main.rbVarY.Checked = true then ChangeInf(6,0)
        else ChangeInf(6,1);
      for i:=0 to Length(sInf2K)-1 do begin
        if sInf2K[i]<>'/0' then WriteLn(Inf2Ko,sInf2K[i]);
      end;
      for i:=0 to Length(sInfXP)-1 do begin
        if sInfXP[i]<>'/0' then WriteLn(InfXPo,sInfXP[i]);
      end;
      CloseFile(Inf2Ko);
      CheckIO;
      CloseFile(InfXPo);
      CheckIO;
      Rewrite(DrvFile,1);
      i:=0;
      Trnsf:=2048;
      While i < Length(ati2mtag) do begin
        if Length(ati2mtag)-i>=2048 then begin
          for j:=0 to 2047 do Buf[j]:=ati2mtag[i+j];
          BlockWrite(DrvFile,Buf,Trnsf);
          i:=i+2048;
        end
        else begin
          Trnsf:=Length(ati2mtag)-i;
          for j:=0 to Trnsf do Buf[j]:=ati2mtag[i+j];
          BlockWrite(DrvFile,Buf,Trnsf);
          i:=i+Trnsf;
        end;
      end;
      Halt;
    end;
  end;
end;

procedure TMain.FormCreate(Sender: TObject);
begin
  AssignFile(Inf2K,'C2_15419.in_');
  AssignFile(InfXP,'CX_15419.in_');
  AssignFile(Inf2Ko,'C2_15419.inf');
  AssignFile(InfXPo,'CX_15419.inf');
  AssignFile(DrvFile,'ati2mtag.sys');
  {Читаем inf'ы}
  Reset(Inf2K);
  CheckIO;
  SetLength(sInf2K,0);
  i:=0;
  while not Eof(Inf2k) do begin
    SetLength(sInf2K,Length(sInf2K)+1);
    ReadLn(inf2K,sInf2K[i]);
    CheckIO;
    inc(i);
  end;
  CloseFile(Inf2K);
  {}
  Reset(InfXP);
  CheckIO;
  SetLength(sInfXP,0);
  i:=0;
  while not Eof(InfXP) do begin
    SetLength(sInfXP,Length(sInfXP)+1);
    ReadLn(infXP,sInfXP[i]);
    CheckIO;
    inc(i);
  end;
  CloseFile(InfXP);
  {}
  Reset(DrvFile,1);
  CheckIO;
  SetLength(ati2mtag,0);
  i:=0;
  while not Eof(DrvFile) do begin
    BlockRead(DrvFile,Buf,2048,Trnsf);
    SetLength(ati2mtag,Length(ati2mtag)+Trnsf);
    If Trnsf>0 then begin
      for j:=0 to Trnsf - 1 do ati2mtag[i+j]:=Buf[j];
      i:=i+Trnsf;
    end;
    CheckIO;
  end;
  {}
  CloseFile(DrvFile);
  CheckIO;
  Rewrite(Inf2Ko);
  CheckIO;
  Rewrite(InfXPo);
  CheckIO;
  {}
  Step:=0;
  {}
end;

end.
