Ситуация в том что программа не реагирует на нажатие клавиш, за исключением определенных случаев.
1) если не вызывать ф-цию stPop (либо дважды вызывать перед ней stPush)
2) если превратить ф-ции stPop и stPush в процедуры (вырезав только result:=)
3) если подключить модуль crt, и использовать родной readkey из стандартной библиотеки crt
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | {$MODE OBJFPC}
program main;
uses keyboard;
type
PList = ^TList;
TList = record
Data: byte ;
prev: PList;
Next: PList;
end ;
var
c: char ;
dat: byte ;
st:Plist;
function readkey(iswait: boolean = False ): char ;
var
key: tkeyevent;
begin
if iswait = True then
Key := PollKeyEvent;
if key <> 0 then
begin
Key := GetKeyEvent;
Key := TranslateKeyEvent(Key);
end ;
Result := GetKeyEventChar(Key);
end ;
function stEmpty(aList: Plist): boolean ;
begin
Result := (aList = nil );
end ;
function stPush( var aList: PList; aData: byte ): PList;
var
p: PList;
begin
new(p);
p^.Data := aData;
p^.prev := aList;
alist := p;
Result := p;
end ;
function stPop( var aList: PList; var aData: byte ): PList;
var
p: PList;
begin
Result := nil ;
if stEmpty(aList) then
exit;
p := alist;
alist := alist^.prev;
Result := p^.prev;
dispose(p);
end ;
begin
initkeyboard;
stPop(st,dat);
repeat
c:=readkey;
until c=# 27 ;
end .
|
Компилятор fpc 2.6.4