278 lines
8.7 KiB
Plaintext
278 lines
8.7 KiB
Plaintext
|
{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
<20> <20>
|
|||
|
<20> X - P a c k e t <20>
|
|||
|
<20> <20>
|
|||
|
<20> <20>
|
|||
|
<20> X P K E Y . P A S <20>
|
|||
|
<20> <20>
|
|||
|
<20> Routinen f<>r die Tastaturabfrage <20>
|
|||
|
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}
|
|||
|
|
|||
|
|
|||
|
Procedure _ReadKey (* var SK : Sondertaste; var VC : char *);
|
|||
|
var Code,
|
|||
|
Scan : Byte;
|
|||
|
Shift : Boolean;
|
|||
|
|
|||
|
Procedure FunktionsTaste(cch: char);
|
|||
|
begin
|
|||
|
case cch of
|
|||
|
#59 : SK := _F1; #84 : SK := _ShF1; #94 : SK := _CtrlF1;
|
|||
|
#60 : SK := _F2; #85 : SK := _ShF2; #95 : SK := _CtrlF2;
|
|||
|
#61 : SK := _F3; #86 : SK := _ShF3; #96 : SK := _CtrlF3;
|
|||
|
#62 : SK := _F4; #87 : SK := _ShF4; #97 : SK := _CtrlF4;
|
|||
|
#63 : SK := _F5; #88 : SK := _ShF5; #98 : SK := _CtrlF5;
|
|||
|
#64 : SK := _F6; #89 : SK := _ShF6; #99 : SK := _CtrlF6;
|
|||
|
#65 : SK := _F7; #90 : SK := _ShF7; #100 : SK := _CtrlF7;
|
|||
|
#66 : SK := _F8; #91 : SK := _ShF8; #101 : SK := _CtrlF8;
|
|||
|
#67 : SK := _F9; #92 : SK := _ShF9; #102 : SK := _CtrlF9;
|
|||
|
#68 : SK := _F10; #93 : SK := _ShF10; #103 : SK := _CtrlF10;
|
|||
|
#133 : SK := _F11; #135 : SK := _ShF11; #137 : SK := _CtrlF11;
|
|||
|
#134 : SK := _F12; #136 : SK := _ShF12; #138 : SK := _CtrlF12;
|
|||
|
|
|||
|
#104 : SK := _AltF1; #120 : SK := _Alt1;
|
|||
|
#105 : SK := _AltF2; #121 : SK := _Alt2;
|
|||
|
#106 : SK := _AltF3; #122 : SK := _Alt3;
|
|||
|
#107 : SK := _AltF4; #123 : SK := _Alt4;
|
|||
|
#108 : SK := _AltF5; #124 : SK := _Alt5;
|
|||
|
#109 : SK := _AltF6; #125 : SK := _Alt6;
|
|||
|
#110 : SK := _AltF7; #126 : SK := _Alt7;
|
|||
|
#111 : SK := _AltF8; #127 : SK := _Alt8;
|
|||
|
#112 : SK := _AltF9; #128 : SK := _Alt9;
|
|||
|
#113 : SK := _AltF10; #129 : SK := _Alt0;
|
|||
|
#139 : SK := _AltF11;
|
|||
|
#140 : SK := _AltF12;
|
|||
|
|
|||
|
#16 : SK := _AltQ; #30 : SK := _AltA; #44 : SK := _AltZ;
|
|||
|
#17 : SK := _AltW; #31 : SK := _AltS; #45 : SK := _AltX;
|
|||
|
#18 : SK := _AltE; #32 : SK := _AltD; #46 : SK := _AltC;
|
|||
|
#19 : SK := _AltR; #33 : SK := _AltF; #47 : SK := _AltV;
|
|||
|
#20 : SK := _AltT; #34 : SK := _AltG; #48 : SK := _AltB;
|
|||
|
#21 : SK := _AltY; #35 : SK := _AltH; #49 : SK := _AltN;
|
|||
|
#22 : SK := _AltU; #36 : SK := _AltJ; #50 : SK := _AltM;
|
|||
|
#23 : SK := _AltI; #37 : SK := _AltK;
|
|||
|
#24 : SK := _AltO; #38 : SK := _AltL;
|
|||
|
#25 : SK := _AltP;
|
|||
|
|
|||
|
#71 : SK := _Home; #114 : SK := _CtrlPrtSc;
|
|||
|
#73 : SK := _PgUp; #115 : SK := _CtrlLeft;
|
|||
|
#79 : SK := _End; #116 : SK := _CtrlRight;
|
|||
|
#81 : SK := _PgDn; #117 : SK := _CtrlEnd;
|
|||
|
#82 : SK := _Ins; #118 : SK := _CtrlPgDn;
|
|||
|
#83 : SK := _Del; #119 : SK := _CtrlHome;
|
|||
|
#72 : SK := _Up; #132 : SK := _CtrlPgUp;
|
|||
|
#80 : SK := _Dn;
|
|||
|
#77 : SK := _Right;
|
|||
|
#75 : SK := _Left;
|
|||
|
#15 : SK := _ShTab;
|
|||
|
#76 : SK := _Fuenf;
|
|||
|
else SK := _Nix;
|
|||
|
end; { case }
|
|||
|
VC := cch;
|
|||
|
if Shift then
|
|||
|
begin
|
|||
|
case SK of
|
|||
|
_Left : SK := _ShLeft;
|
|||
|
_Right : SK := _ShRight;
|
|||
|
_Up : SK := _ShUp;
|
|||
|
_Dn : SK := _ShDn;
|
|||
|
_Ins : SK := _ShIns;
|
|||
|
_Del : SK := _ShDel;
|
|||
|
_Home : SK := _ShHome;
|
|||
|
_End : SK := _ShEnd;
|
|||
|
_PgUp : SK := _ShPgUp;
|
|||
|
_PgDn : SK := _ShPgDn;
|
|||
|
end;
|
|||
|
end;
|
|||
|
end;
|
|||
|
|
|||
|
Begin
|
|||
|
if G^.Makro then MakroKey(SK,VC) else
|
|||
|
begin
|
|||
|
|
|||
|
{-------------------------------------------------------------|
|
|||
|
| Status liefert den Status der Sondertasten |
|
|||
|
+-------------------------------------------------------------|
|
|||
|
| Bit 0 = 1 : Rechte Shift-Taste gedr<64>ckt |
|
|||
|
| Bit 1 = 1 : Linke Shift-Taste gedr<64>ckt |
|
|||
|
| Bit 2 = 1 : Crtl-Taste gedr<64>ckt |
|
|||
|
| Bit 3 = 1 : Alt-Taste gedr<64>ckt |
|
|||
|
| Bit 4 = 1 : [Scroll Lock] gedr<64>ckt |
|
|||
|
| Bit 5 = 1 : [Num Lock] gedr<64>ckt |
|
|||
|
| Bit 6 = 1 : [Caps Lock] gedr<64>ckt |
|
|||
|
| Bit 7 = 1 : [Ins] gedr<64>ckt |
|
|||
|
+-------------------------------------------------------------}
|
|||
|
|
|||
|
|
|||
|
Case Kbd of
|
|||
|
0 : begin
|
|||
|
Repeat
|
|||
|
{ if OnlHelp then TNCs_pollen; }
|
|||
|
Until Key1A <> Key1C;
|
|||
|
code := TastPuffer[Key1A];
|
|||
|
scan := TastPuffer[Key1A+1];
|
|||
|
if Key1A + 2 > $3D then Key1A := $1E
|
|||
|
else Key1A := Key1A + 2;
|
|||
|
end;
|
|||
|
1 : begin
|
|||
|
asm
|
|||
|
mov ah, $10
|
|||
|
int $16
|
|||
|
mov code,al
|
|||
|
mov scan,ah
|
|||
|
end;
|
|||
|
end;
|
|||
|
2 : begin
|
|||
|
asm
|
|||
|
mov ah, $00
|
|||
|
int $16
|
|||
|
mov code,al
|
|||
|
mov scan,ah
|
|||
|
end;
|
|||
|
end;
|
|||
|
3 : begin
|
|||
|
asm
|
|||
|
mov ah,$07
|
|||
|
int $21
|
|||
|
mov code,al
|
|||
|
cmp code,0
|
|||
|
jnz @1
|
|||
|
mov ah,$07
|
|||
|
int $21
|
|||
|
mov scan,al
|
|||
|
@1:
|
|||
|
end;
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
if (code = $E0) and (scan > 0) then code := $00;
|
|||
|
if (code = $F0) and (scan > 0) then code := $00;
|
|||
|
VC := Chr(Code);
|
|||
|
Shift := (KeyStatus and 3) in [1..3];
|
|||
|
|
|||
|
if VC = #0 then FunktionsTaste(Chr(scan)) else
|
|||
|
begin
|
|||
|
case VC of
|
|||
|
M1 : SK := _Ret;
|
|||
|
^I : SK := _Tab;
|
|||
|
^H : SK := _Back;
|
|||
|
#27 : SK := _Esc;
|
|||
|
else SK := _Andere;
|
|||
|
end;
|
|||
|
|
|||
|
if Shift and (KeyOpt in [1,3]) then
|
|||
|
case VC of
|
|||
|
'1' : SK := _ShEnd;
|
|||
|
'2' : SK := _ShDn;
|
|||
|
'3' : SK := _ShPgDn;
|
|||
|
'4' : SK := _ShLeft;
|
|||
|
'6' : SK := _ShRight;
|
|||
|
'7' : SK := _ShHome;
|
|||
|
'8' : SK := _ShUp;
|
|||
|
'9' : SK := _ShPgUp;
|
|||
|
end;
|
|||
|
|
|||
|
if KeyOpt in [2,3] then
|
|||
|
case VC of
|
|||
|
'+': if scan = 78 then SK := _Plus;
|
|||
|
'-': if scan = 74 then SK := _Minus;
|
|||
|
'*': if scan = 55 then SK := _Star;
|
|||
|
'/': if scan = 53 then SK := _Slash;
|
|||
|
end;
|
|||
|
|
|||
|
end;
|
|||
|
if G^.MakroLearn then Makro_Erlernen(SK,VC);
|
|||
|
end;
|
|||
|
End;
|
|||
|
|
|||
|
Function _KeyPressed (* : Boolean *);
|
|||
|
Var w : Word;
|
|||
|
Begin
|
|||
|
Case Kbd of
|
|||
|
0 : _KeyPressed := Key1A <> Key1C;
|
|||
|
1 : begin
|
|||
|
asm
|
|||
|
mov ah, $11
|
|||
|
int $16
|
|||
|
pushf
|
|||
|
pop w
|
|||
|
and w, $40
|
|||
|
end;
|
|||
|
_KeyPressed := w = 0;
|
|||
|
end;
|
|||
|
2 : begin
|
|||
|
asm
|
|||
|
mov ah, $01
|
|||
|
int $16
|
|||
|
pushf
|
|||
|
pop w
|
|||
|
and w, $40
|
|||
|
end;
|
|||
|
_KeyPressed := w = 0;
|
|||
|
end;
|
|||
|
3 : _KeyPressed := KeyPressed;
|
|||
|
End;
|
|||
|
|
|||
|
if G^.Makro then _KeyPressed := true;
|
|||
|
End;
|
|||
|
|
|||
|
|
|||
|
Procedure MakroKey (* var SK : Sondertaste; var VC : char *);
|
|||
|
var Taste : Sondertaste;
|
|||
|
Flag : Boolean;
|
|||
|
|
|||
|
Procedure Init;
|
|||
|
Begin
|
|||
|
G^.Makro := false;
|
|||
|
G^.MakroZeile := '';
|
|||
|
SK := _Nix;
|
|||
|
VC := #255;
|
|||
|
End;
|
|||
|
|
|||
|
Begin
|
|||
|
if G^.MakroZeile = '' then MakroZeile_holen;
|
|||
|
if pos(S_ch+B1,G^.MakroZeile) = 1 then
|
|||
|
begin
|
|||
|
G^.MakroZeile := UpCaseStr(RestStr(G^.MakroZeile));
|
|||
|
Taste := _CtrlF1;
|
|||
|
Flag := false;
|
|||
|
While not Flag and (Taste <> _Key2) do
|
|||
|
begin
|
|||
|
if Key[Taste].Ta = G^.MakroZeile then
|
|||
|
begin
|
|||
|
SK := Taste;
|
|||
|
VC := Key[Taste].Ze;
|
|||
|
Flag := true;
|
|||
|
end;
|
|||
|
inc(Taste);
|
|||
|
end;
|
|||
|
|
|||
|
if not Flag then
|
|||
|
begin
|
|||
|
if (pos(CTRL,G^.MakroZeile) = 1) and (length(G^.MakroZeile) = 5) then
|
|||
|
begin
|
|||
|
VC := G^.MakroZeile[5];
|
|||
|
if VC in ['A'..'Z'] then
|
|||
|
begin
|
|||
|
VC := chr(ord(VC)-64);
|
|||
|
SK := _Andere;
|
|||
|
Flag := true;
|
|||
|
end;
|
|||
|
end;
|
|||
|
if not Flag then
|
|||
|
begin
|
|||
|
SK := _Nix;
|
|||
|
VC := #255;
|
|||
|
end;
|
|||
|
end;
|
|||
|
G^.MakroZeile := '';
|
|||
|
end else
|
|||
|
begin
|
|||
|
SK := _Andere;
|
|||
|
VC := G^.MakroZeile[1];
|
|||
|
delete(G^.MakroZeile,1,1);
|
|||
|
end;
|
|||
|
if G^.MakroFileEnd and (G^.MakroZeile = '') then MakroInit;
|
|||
|
End;
|
|||
|
|