* extgraph moved to win direcory

This commit is contained in:
florian 1999-11-24 22:12:06 +00:00
parent c0324fdd27
commit 1736a7d64d

View File

@ -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.