program tstkey;  {проверка модуля keyboard и клавиатуры}
uses keyboard;

                                 {наименования клавиш}
const ss : array[1..96] of string[3] =
  (?Esc?,? 1 ?,? 2 ?,? 3 ?,? 4 ?,? 5 ?,? 6 ?,? 7 ?, { 8}
   ? 8 ?,? 9 ?,? 0 ?,? - ?,? = ?,?Bsk?,?Tab?,? Q ?, {16}
   ? W ?,? E ?,? R ?,? T ?,? Y ?,? U ?,? I ?,? O ?, {24}
   ? P ?,? [ ?,? ] ?,?Ent?,?Ctr?,? A ?,? S ?,? D ?, {32}
   ? F ?,? G ?,? H ?,? J ?,? K ?,? L ?,? ; ?,? ? ?, {40}
   ? ~ ?,?ShL?,?  ?,? Z ?,? X ?,? C ?,? V ?,? B ?, {48}
   ? N ?,? M ?,? , ?,?pnt?,? / ?,?ShR?,? * ?,?Alt?, {56}
   ?Spc?,?CpL?,?F1 ?,?F2 ?,?F3 ?,?F4 ?,?F5 ?,?F6 ?, {64}
   ?F7 ?,?F8 ?,?F9 ?,?F10?,?NmL?,?ScL?,?Hom?,? Up?, {72}
   ?PUp?,?Gr-?,?Lft?,??5??,?Rgh?,?Gr+?,?End?,?Dwn?, {80}
   ?PDn?,?Ins?,?Del?,?APS?,?CtR?,?AlR?,?F11?,?F12?, {88}
   ?   ?,?   ?,?WlL?,?WlR?,?WA ?,?   ?,?   ?,?   ?);{96}
var
   i,j : integer;
   scr : array[0..24,0..79,0..1]of char 
                               absolute $B800:0;{Экран}
   s   : string;

procedure DrawKeys; {отображение нажатых клавиш}
begin
   repeat
     for j := 0 to 5 do
        for i := 0 to 15 do
           if key[i+j*16] then begin
              scr[1+j*2,1+i*4-1,0] := ss[i+j*16][1];
              scr[1+j*2,1+i*4  ,0] := ss[i+j*16][2];
              scr[1+j*2,1+i*4+1,0] := ss[i+j*16][3];
           end else begin
              scr[1+j*2,1+i*4-1,0] := ? ?;
              scr[1+j*2,1+i*4  ,0] := ?.?;
              scr[1+j*2,1+i*4+1,0] := ? ?;
           end;
   until key[1] and key[2];           {выход по ?Esc+1?}
end;

begin
   for j := 0 to 24 do
      for i := 0 to 79 do
         scr[j,i,0] := ? ?; {очистка экрана}
   write(? Для завершения программы одновременно?);
   writeln(? нажмите Esc и 1?);
   DrawKeys;
   SetStandardInt;   {восстановление стандартного ввода}
   writeln(?Введите строку?);
   readln(s);             {ввод стандартными средствами}
   SetMyInt;              {снова собственный обработчик}
   write(? Для завершения программы одновременно?);
   writeln(? нажмите Esc и 1?);
   DrawKeys;
end.
412