[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
{
GA> To clear the keyboard buffer
GA>
GA> To manipulate the status of the num lock, caps lock, and scroll lock keys
To flush the keyboard, you can do it like this: }
procedure flushkb; assembler;
asm
mov ax,0c00h
int 21h
end;
or simply use a "mem[$0000:$041c]:=mem[$0000:$041a];" command. To toggle the
status of the number lock, caps lock, and scroll lock keys, the following
procedures can be used.
procedure capslock(on:boolean);
begin
if on then mem[$40:$17]:=mem[$40:$17] or $40
else
mem[$40:$17]:=mem[$40:$17] and $bf;
end;
procedure numlock(on:boolean);
begin
if on then mem[$40:$17]:=mem[$40:$17] or $20
else
mem[$40:$17]:=mem[$40:$17] and $df;
end;
procedure scrolllock(on:boolean);
begin
if on then mem[$40:$17]:=mem[$40:$17] or $10
else
mem[$40:$17]:=mem[$40:$17] and $ef;
end;
... If you need routines to detect whether the caps/scroll/number lock keys
are on or off, these may be of use ...
function capslockon:boolean;
begin
capslockon:=mem[$0040:$0017] and $40=$40;
end;
function numlockon:boolean;
begin
numlockon:=mem[$0040:$0017] and $20=$20;
end;
function scrollockon:boolean;
begin
scrollockon:=mem[$0040:$0017] and $10=$10;
end;
{
AN> im looking to make my own keypress/readkey routines, simply because
AN> of the fact that readkey does all that keyboard aliasing (#0 leading a
AN> keypress, and that #0 = alt and ctrl, etc).. does anyone have any
AN> routines that can help?
Try this on for size... instead of returning a character, it'll return a
word. The high portion of the word contains the scan code (the one you
get after doing a second readkey if the first returned #0) and the lower
portion of the word contains the ascii code.
}
function getkey:word; assembler;
asm
mov ah,10h
int 16h
cmp al,0e0h
jne @end
mov al,00h
@end:
end;
{ usage example ... }
var w:word;
begin
w:=getkey;
if hi(w)=0 then case lo(w) of
59:write('F1');
60:write('F2');
61:write('F3');
62:write('F4');
63:write('F5'); { etc ... }
end else case chr(lo(w)) of
'1':write('Pressed 1');
'2':write('Pressed 2');
'3':write('Pressed 3');
'A':write('Pressed A');
'B':write('Pressed B');
'C':write('Pressed C');
end;
end.
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]