[Lazarus] read single char from STDIN
Mark Morgan Lloyd
markMLl.lazarus at telemetry.co.uk
Sat Nov 19 10:54:16 CET 2011
Henry Vermaak wrote:
> On 18/11/11 13:06, Martin wrote:
>> Not done any console apps in a long time.
>> If I do:
>> var c: char;
>> read(c);
>>
>> It will read individual files, but only after I pressed enter on my
>> terminal. What is needed to read the char immediately?
>
> This is rather platform specific, since you have to set your terminal
> into non-canonical mode. You should be able to use the functions in the
> keyboard unit to do this in a cross platform way.
I wonder if I could ask a related question. With this code
ke := GetKeyEvent;
kr := TKeyRecord(ke);
Write('<', IntToHex(ke, 8), '>');
Write('<', IntToHex(kr.KeyCode, 4), ' ', IntToHex(kr.ShiftState,
2), ' ', IntToHex(kr.Flags, 2), '>');
WriteLn;
If I enter 1 1<cr> (three characters followed by enter) on x86
(little-endian, using 2.6.0) I get
<03000231><0231 00 03>
<03003920><3920 00 03>
<03000231><0231 00 03>
<0300240A><240A 00 03>
while on SPARC (big-endian, using 2.7.1) I get
<03000231><0300 02 31>
<03003920><0300 39 20>
<03000231><0300 02 31>
<0300240A><0300 24 0A>
Referring to
http://lazarus-ccr.sourceforge.net/docs/rtl/keyboard/tkeyrecord.html I
would have thought that this should have been sorted inside the keyboard
unit.
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
More information about the Lazarus
mailing list