[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
Unit TPbuffer;
(* TP-Buffer unit version 1.1 /Update *)
(* Using the keyboard's buffer in Turbo Pascal *)
(* This unit is released to the public domain *)
(* by Lavi Tidhar on 5-10-1992 *)
(* This unit adds three special functions not *)
(* incuded in the Turbo Pascal regular package *)
(* You may alter this source code, move the *)
(* procedures to your own programs. Please do *)
(* NOT change these lines of documentation *)
(* This source might teach you about how to *)
(* use interrupts in pascal, and the keyboard's *)
(* buffer. from the other hand, it might not :-) *)
(* Used: INT 16, functions 0 and 1 *)
(* INT 21, function 0Ch *)
(* INT 16 - KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
AH = 00h
Return: AH = scan code
AL = character *)
(* INT 16 - KEYBOARD - CHECK BUFFER, DO NOT CLEAR
AH = 01h
Return: ZF = 0 character in buffer
AH = scan code
AL = character
ZF = 1 no character in buffer *)
(* INT 21 - DOS - CLEAR KEYBOARD BUFFER
AH = 0Ch
AL must be 1, 6, 7, 8, or 0Ah.
Notes: Flushes all typeahead input, then executes function specified by AL
(effectively moving it to AH and repeating the INT 21 call).
If AL contains a value not in the list above, the keyboard buffer is
flushed and no other action is taken. *)
(* For more details/help etc, you can contact me on: *)
(* Mail: Lavi Tidhar
46 Bantam Dr.
Blairgowrie
2194
South Africa
*)
(* Phone:
International: +27-11-787-8093
South Africa: (011)-787-8093
*)
(* Netmail: The Catacomb BBS 5:7101/45 (fidonet)
The Catacomb BBS 80:80/100 (pipemail)
*)
Interface
Uses Dos;
Function GetScanCode:Byte; (* Get SCAN CODE from buffer, wait if empty *)
Function GetKey:Char; (* Get Char from buffer, do NOT wait *)
Procedure FlushKB;
Implementation
Function GetKey:Char;
Var Regs:Registers;
Begin
Regs.AH:=1; (* Int 16 function 1 *)
Intr ($16,Regs); (* Read a charecter from the keyboard buffer *)
GetKey:=Chr (Regs.AL); (* do not wait. If no char was found, CHR(0) *)
End; (* (nul) is returned *)
Function GetScanCode:Byte; (* Int 16 function 0 *)
Var Regs:Registers; (* The same as CRT's Readkey, but gives you *)
Begin (* the scan code. Esp usefull when you want to *)
Regs.AH:=0; (* use special keys as the arrows, there will *)
Intr ($16,Regs); (* be a conflict when using ReadKey *)
GetScanCode:=Regs.AH;
End;
Procedure FlushKB; (* INT 21 function 0C *)
Var Regs:Registers; (* Flushes (erase) the keyboard buffer *)
Begin (* ONLY. No other function is executed *)
Regs.AH:=$0C;
Regs.AL:=2;
Intr ($21,Regs);
End;
End.
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]