mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 12:39:38 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    Copyright (c) 1999-2000 by Florian Klaempfl
 | 
						|
    member of the Free Pascal development team
 | 
						|
 | 
						|
    Keyboard unit for go32v2
 | 
						|
 | 
						|
    See the file COPYING.FPC, included in this distribution,
 | 
						|
    for details about the copyright.
 | 
						|
 | 
						|
    This program is distributed in the hope that it will be useful,
 | 
						|
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 | 
						|
 **********************************************************************}
 | 
						|
unit Keyboard;
 | 
						|
interface
 | 
						|
 | 
						|
{$i keybrdh.inc}
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
uses
 | 
						|
  go32;
 | 
						|
 | 
						|
{$i keyboard.inc}
 | 
						|
 | 
						|
 | 
						|
function SysGetKeyEvent: TKeyEvent;
 | 
						|
 | 
						|
var
 | 
						|
  regs : trealregs;
 | 
						|
begin
 | 
						|
  regs.ah:=$10;
 | 
						|
  realintr($16,regs);
 | 
						|
  if (regs.al=$e0) and (regs.ah<>0) then
 | 
						|
   regs.al:=0;
 | 
						|
  SysGetKeyEvent:=(kbPhys shl 24) or regs.ax or ((mem[$40:$17] and $f) shl 16);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function SysPollKeyEvent: TKeyEvent;
 | 
						|
var
 | 
						|
  regs : trealregs;
 | 
						|
begin
 | 
						|
  regs.ah:=$11;
 | 
						|
  realintr($16,regs);
 | 
						|
  if (regs.realflags and zeroflag<>0) then
 | 
						|
   exit(0);
 | 
						|
  if (regs.al=$e0) and (regs.ah<>0) then
 | 
						|
   regs.al:=0;
 | 
						|
  SysPollKeyEvent:=(kbPhys shl 24) or regs.ax or ((mem[$40:$17] and $f) shl 16);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
function SysGetShiftState: Byte;
 | 
						|
begin
 | 
						|
  SysGetShiftState:=(mem[$40:$17] and $f);
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
Const
 | 
						|
  SysKeyboardDriver : TKeyboardDriver = (
 | 
						|
    InitDriver : Nil;
 | 
						|
    DoneDriver : Nil;
 | 
						|
    GetKeyevent : @SysGetKeyEvent;
 | 
						|
    PollKeyEvent : @SysPollKeyEvent;
 | 
						|
    GetShiftState : @SysGetShiftState;
 | 
						|
    TranslateKeyEvent : Nil;
 | 
						|
    TranslateKeyEventUnicode : Nil;
 | 
						|
  );
 | 
						|
 | 
						|
begin
 | 
						|
  SetKeyBoardDriver(SysKeyBoardDriver);
 | 
						|
end.
 |