home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / bix / kbdrtns.pas < prev    next >
Pascal/Delphi Source File  |  1986-08-04  |  4KB  |  209 lines

  1. {skeletal Pascal source to handle the various DOS extended key codes}
  2. {TITLE: IBM PC Alt/Ctrl/Shift & Function Keys}
  3.  
  4. program kbdrtns;
  5. Type
  6.     RegType = record case integer of
  7.               0:(Ax,Bx,Cx,Dx,Bp,Si,Di,Ds,Es,Flags:integer);
  8.               1:(Al,Ah,Bl,Bh,Cl,Ch,Dl,Dh:byte);
  9.               2:(words:array[0..9] of integer);
  10.               3:(bytes:array[0..7] of byte)
  11.               end;
  12.  
  13. var c:char;
  14.  
  15.  
  16. procedure manager(which:byte);
  17. const LeftArrow='L';RightArrow='R';Home='H';Endd='E';
  18.       UpArrow='u';DownArrow='d';
  19.       PgUp='U';PgDn='D';Ins='+';Del='-';BackTab='B';ForwardTab='F';
  20.       numpad:string[13]='HuU?L?R?EdD+-';
  21.       cnumpad:string[18]='LREDH????????????U';
  22.       toprow:string[12]='1234567890-=';
  23.       qwerty:string[35]='qwertyuiop????asdfghjkl?????zxcvbnm';
  24. var ch:char;
  25. begin
  26. ch:='?';
  27. case which of
  28. 16..25,30..38,44..50,120..131:
  29.    begin {Alt keys}
  30.     if which>=120 then ch:=toprow[which-119] else ch:=qwerty[which-15];
  31.     case ch of
  32.     'a':;
  33.     'b':;
  34.     'c':;
  35.     'd':;
  36.     'e':;
  37.     'f':;
  38.     'g':;
  39.     'h':;
  40.     'i':;
  41.     'j':;
  42.     'k':;
  43.     'l':;
  44.     'm':;
  45.     'n':;
  46.     'o':;
  47.     'p':;
  48.     'q':;
  49.     'r':;
  50.     's':;
  51.     't':writeln('You just typed Alt-t');
  52.     'u':;
  53.     'v':;
  54.     'x':;
  55.     'y':;
  56.     'z':;
  57.     '0':;
  58.     '1':;
  59.     '2':;
  60.     '3':;
  61.     '4':;
  62.     '5':;
  63.     '6':;
  64.     '7':;
  65.     '8':;
  66.     '9':;
  67.     end;
  68.    end;
  69. 104..113:case which-103 of {alt function keys}
  70.           1:writeln('You just typed Alt-F1');
  71.           2:;
  72.           3:;
  73.           4:;
  74.           5:;
  75.           6:;
  76.           7:;
  77.           8:;
  78.           9:;
  79.           10:;
  80.          end;
  81. 59..68:case which-58 of {function keys}
  82.           1:writeln('You just typed F1');
  83.           2:;
  84.           3:;
  85.           4:;
  86.           5:;
  87.           6:;
  88.           7:;
  89.           8:;
  90.           9:;
  91.           10:;
  92.          end;
  93. 84..93:case which-83 of {shift function keys}
  94.           1:writeln('You just typed Shift-F1');
  95.           2:;
  96.           3:;
  97.           4:;
  98.           5:;
  99.           6:;
  100.           7:;
  101.           8:;
  102.           9:;
  103.           10:;
  104.          end;
  105. 94..103:case which-93 of {ctrl function keys}
  106.           1:writeln('You just typed Ctrl-F1');
  107.           2:;
  108.           3:;
  109.           4:;
  110.           5:;
  111.           6:;
  112.           7:;
  113.           8:;
  114.           9:;
  115.           10:;
  116.          end;
  117. 151..157,160..162,164..176:
  118.    case chr(which-54) of {ctrl keys}
  119.     'a':;
  120.     'b':;
  121.             {ctrl-c or ctrl-break is not intercepted}
  122.     'd':;
  123.     'e':;
  124.     'f':;
  125.     'g':;
  126.             {note: ctrl-h is taken to be backspace}
  127.     'i':;
  128.     'j':;
  129.     'k':;
  130.     'l':;
  131.             {note: ctrl-m is taken to be Enter [CR]}
  132.     'n':;
  133.     'o':;
  134.     'p':;
  135.     'q':;
  136.     'r':;
  137.     's':;
  138.     't':writeln('You just typed Ctrl-t');
  139.     'u':;
  140.     'v':;
  141.     'x':;
  142.     'y':;
  143.     'z':;
  144.    end;
  145. 15,71..73,75,
  146. 77,79..83,159:
  147.    begin
  148.     if which=15 then ch:=BackTab else
  149.     if which=159 then ch:=ForwardTab else
  150.     ch:=numpad[which-70];
  151.     case ch of {numeric key pad keys}
  152.      BackTab:writeln('You just typed BackTab');
  153.      ForwardTab:;
  154.      Home:;
  155.      UpArrow:;
  156.      PgUp:;
  157.      LeftArrow:;
  158.      RightArrow:;
  159.      Endd:;
  160.      DownArrow:;
  161.      PgDn:writeln('You just typed PgDn');
  162.      Ins:;
  163.      Del:;
  164.     end;
  165.    end;
  166. 115..119,132:
  167.     begin
  168.      case cnumpad[which-114] of {ctrl-numeric key pad keys}
  169.       LeftArrow:;
  170.       RightArrow:;
  171.       Endd:writeln('You just typed Ctrl-End');
  172.       PgDn:;
  173.       Home:;
  174.       PgUp:;
  175.      end;
  176.     end;
  177.  end;
  178. end;
  179.  
  180. function kbchar:char;
  181. var r:regtype;
  182. begin
  183.  r.ah:=$0b;
  184.  msdos(r);
  185.  if r.al = 0 then kbchar:=#0
  186.  else begin
  187.        r.ah:=$07;
  188.        msdos(r);
  189.        if r.al<>0 then
  190.        if r.al in [8,13,27,32..127] then kbchar:=chr(r.al)
  191.        else begin manager(r.al+150);kbchar:=#0 end
  192.        else
  193.         begin
  194.          r.ah:=$07;
  195.          msdos(r);
  196.          manager(r.al);
  197.          kbchar:=#0
  198.         end;
  199.       end;
  200. end;
  201.  
  202. begin
  203. repeat
  204. c:=kbchar;
  205. if c<>#0 then writeln(c,' = ',ord(c))
  206. until c='q';
  207. writeln('Done!')
  208. end.
  209.