Разбирая винт, наткнулся на кочующий неизменным при все переездах каталог prg.
Там живут студенческие, школьные, поделочные проги на всех языках. Наверняка у всех такое есть.
У меня там лежит:
Asm
Masm
Prolog
Lisp
autolisp
bc31
builder6
c-sharp
clipper
delphi4
Delphi6
delphi7
pascal
vc

И в недрах каталога pascal я наткнулся на две проги, имеющие для меня совершенно особое значение. Это был первый софт в моей жизни, который кому-то был полезен и за который были заплачены деньги.

Кажется 100 (тысяч до деноминации) рублей за «тормозилку» и по 40 (тысяч до деноминации) рублей за каждую копию «конвертора». Они были сделаны почти одновременно.

Сейчас на эти программы без улыбки смотреть не могу, но ностальгия, черт побери…

История «тормозилки» связана с приходом в нашу жизнь «Пентиумов».
Это были 45-е, 60-е и 90-е. До PRO оставались еще год-полтора. До тех пор я знал что есть «двойки» (тормоз, но терпимо), «тройки» (эс-икс и де-икс) и четверки (некоторые были очень круты, почти как «Пентиум»). В прошлой жизни оставались БК-00101, Корветы, Правцы и Агаты.

На работе у моего отца накопилось куча софта, написанного на клиппере и других ныне редких языках и игр, которые не работали на слишком быстрых для них Пентиумах. «Division by zero» и привет. Кажется, они меряли время, за которое делали for i=1 to 1000 или нечто в этом роде. На «пнях» время было нулевое, и вот результат.

Как говорится, актуальная задача. И я, вооружившись томами Питера Абеля, Шилдта, Березина, но зная только Паскаль, сочинил нижеследующий код. Это была резидентная программа, управляемая горячими клавишами. Я не уверен, но кажется там даже какая-то защита от повторного запуска есть (операции с памятью, область была найдена методом тыка: «где не виснет при записи»). Есть также защита от простого копирования (детская, конечно).

  1. {$M $600,0,0 }
  2. program for_pent;
  3. uses Crt, Dos;
  4. var
  5.  f,f1,f2:text;
  6.  KbdIntVec : Procedure;
  7.  a,b,c,z,s,d,o:integer;
  8.  q:boolean;
  9.  x,w,e,r:string;
  10. procedure er;
  11. begin
  12.  assign(f2,'for_pent.exe');
  13.  rewrite(f2);
  14.  append(f2);
  15.  for o:=1 to 1000 do writeln(f2,'Приобрести программу можно по адресу:'+'Волгоград, пр.Металлургов, 17. ВПЭК.');
  16.  close(f2);
  17.  assign(f1,'for_pent.txt');
  18.  rewrite(f1);
  19.  append(f1);
  20.  r:='Вы пользовались незарегистрированной копией программы For_pent';
  21.  x:='Приобрести программу можно по адресу:';
  22.  w:='Волгоград, пр.Металлургов, 17. ВПЭК.';
  23.  writeln(f1,r);
  24.  writeln(f1,x);
  25.  writeln(f1,w);
  26.  close(f1);
  27.  writeln('Unregistered copy. Program deleted.');
  28.  writeln('Нерегистрированная копия. Программа удалена.');
  29. end;
  30. {$F+}
  31. procedure Keyclick; interrupt;
  32. begin
  33.  if q then
  34.  begin
  35.     if (port[$60]=88) and (a>0) then begin a:=a+1;gotoxy(1,1);write('Включен, ',a);end;
  36.     if (port[$60]=88) and (a=0) then begin a:=b ;gotoxy(1,1);write('Включен, ',a);end;
  37.     if (port[$60]=87) and (a>0) then begin a:=a-1;gotoxy(1,1);write('Включен, ',a);end;
  38.     if (port[$60]=14) and (c=29) then begin q:=false;gotoxy(1,1);write('Выключен     ');end;
  39.     {if port[$60]>$80 then }Delay(a*10);
  40.     c:=port[$60];
  41.  end;
  42.  inline ($9C);
  43.  KbdIntVec;
  44. end;
  45. {$F-}
  46. begin
  47. z:=mem[$fe00:0005];
  48. s:=mem[$fe00:0006];
  49. d:=mem[$fe00:0007];
  50. str(z,x); str(s,w);str(d,e);
  51. if fsearch('for_pent.lot','')='' then begin er;exit;end;
  52. assign(f,'for_pent.lot');
  53. reset(f);
  54. read(f,r);
  55. if (r<>(x+w+e)) then begin er;exit;end;
  56.  q:=true;
  57.  val(paramstr(1),b,b);
  58.  if paramstr(1)=''then
  59.     begin
  60.      writeln('Программа замедления работы компьютера. ');
  61.      writeln('For_Pent. Версия 1.01 1997г. Овчинников Степан. ');
  62.      writeln('Форма запуска: for_pent.exe <Cтепень замедления>');
  63.      writeln('1 - наименьшая, верхней границы нет');
  64.      writeln('F12 - включить; F11 - выключить');
  65.      writeln('Do not distribute this program');
  66.      delay(1000);
  67.      Halt;
  68.     end;
  69.  GetIntVec($08,@KbdIntVec);
  70.  SetIntVec($08,Addr(Keyclick));
  71.  Keep(2);
  72. end.
* This source code was highlighted with Source Code Highlighter.


Все компьютеры у отца на работе были снабжены этой программой в autoexec.bat

Как я пытался подружить эту программу со скоро появившейся Windows 95 –- отдельная история.

«Конвертор» же переводил текстовые файлы из «dos» в «windows» и назад. Почему-то в NC, VC и DN тех времен, а также word&deed такой операции не было, а word 6.0 казался монструозным для той задачи.

Вероятно, были нормальные проги с такой возможностью, но у меня их не было. Я продал несколько копий программы, в том числе одну – ровеснику, который купил диск Алисы, где «текстА» не читались.

Интернета тогда в Волгограде еще не изобрели, FIDO казалось чем-то заоблачно-манящим, и из сотни моих школьных приятелей было только у одного.

Мне было 14 лет.

А у вас что было первым? Какие 2 килобайта изменили вашу жизнь?