mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-07-31 14:05:57 +02:00
* extgraph moved to win direcory
This commit is contained in:
parent
c0324fdd27
commit
1736a7d64d
@ -1,113 +0,0 @@
|
|||||||
unit extgraph;
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
function readkey : char;
|
|
||||||
function keypressed : boolean;
|
|
||||||
procedure delay(ms : word);
|
|
||||||
|
|
||||||
var
|
|
||||||
directvideo : boolean;
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
uses
|
|
||||||
windows,graph;
|
|
||||||
|
|
||||||
const
|
|
||||||
keybuffersize = 16;
|
|
||||||
|
|
||||||
var
|
|
||||||
keyboardhandling : TCriticalSection;
|
|
||||||
keybuffer : array[1..keybuffersize] of char;
|
|
||||||
nextfree,nexttoread : longint;
|
|
||||||
|
|
||||||
procedure inccyclic(var i : longint);
|
|
||||||
|
|
||||||
begin
|
|
||||||
inc(i);
|
|
||||||
if i>keybuffersize then
|
|
||||||
i:=1;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure addchar(c : char);
|
|
||||||
|
|
||||||
begin
|
|
||||||
EnterCriticalSection(keyboardhandling);
|
|
||||||
keybuffer[nextfree]:=c;
|
|
||||||
inccyclic(nextfree);
|
|
||||||
{ skip old chars }
|
|
||||||
if nexttoread=nextfree then
|
|
||||||
inccyclic(nexttoread);
|
|
||||||
LeaveCriticalSection(keyboardhandling);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function readkey : char;
|
|
||||||
|
|
||||||
begin
|
|
||||||
while true do
|
|
||||||
begin
|
|
||||||
EnterCriticalSection(keyboardhandling);
|
|
||||||
if nexttoread<>nextfree then
|
|
||||||
begin
|
|
||||||
readkey:=keybuffer[nexttoread];
|
|
||||||
inccyclic(nexttoread);
|
|
||||||
LeaveCriticalSection(keyboardhandling);
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
LeaveCriticalSection(keyboardhandling);
|
|
||||||
{ give other threads a chance }
|
|
||||||
Windows.Sleep(0);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function keypressed : boolean;
|
|
||||||
|
|
||||||
begin
|
|
||||||
EnterCriticalSection(keyboardhandling);
|
|
||||||
keypressed:=nexttoread<>nextfree;
|
|
||||||
LeaveCriticalSection(keyboardhandling);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure delay(ms : word);
|
|
||||||
|
|
||||||
begin
|
|
||||||
Sleep(ms);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function msghandler(Window: hwnd; AMessage, WParam,
|
|
||||||
LParam: Longint): Longint;
|
|
||||||
|
|
||||||
begin
|
|
||||||
case amessage of
|
|
||||||
WM_CHAR:
|
|
||||||
begin
|
|
||||||
addchar(chr(wparam));
|
|
||||||
writeln('got char message: ',wparam);
|
|
||||||
end;
|
|
||||||
WM_KEYDOWN:
|
|
||||||
begin
|
|
||||||
|
|
||||||
writeln('got key message');
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
msghandler:=0;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
|
||||||
oldexitproc : pointer;
|
|
||||||
|
|
||||||
procedure myexitproc;
|
|
||||||
|
|
||||||
begin
|
|
||||||
exitproc:=oldexitproc;
|
|
||||||
DeleteCriticalSection(keyboardhandling);
|
|
||||||
end;
|
|
||||||
begin
|
|
||||||
charmessagehandler:=@msghandler;
|
|
||||||
nextfree:=1;
|
|
||||||
nexttoread:=1;
|
|
||||||
InitializeCriticalSection(keyboardhandling);
|
|
||||||
oldexitproc:=exitproc;
|
|
||||||
exitproc:=@myexitproc;
|
|
||||||
end.
|
|
Loading…
Reference in New Issue
Block a user