From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: get_immediate echoe character--compiled error?
Date: Wed, 4 Oct 2023 19:55:51 +0300 [thread overview]
Message-ID: <ko5jonF3ld1U1@mid.individual.net> (raw)
In-Reply-To: <lyh6n64x1u.fsf@pushface.org>
On 2023-10-04 11:22, Simon Wright wrote:
> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>
>> Simon Wright <simon@pushface.org> writes:
>>> The low-level Get_Immediate implementation is in sysdep.c (probably
>>> not in the adainclude/ directory in an installed compiler), in
>>> getc_immediate() and getc_immediate_nowait(), both of which call
>>> getc_immediate_common(), and I can't see any difference! ECHO gets
>>> turned off in getc_immediate_common(), regardless of caller - see
>>> link.
>>>
>>> https://github.com/gcc-mirror/gcc/blob/3ca09d684e496240a87c0327687e2898060c2363/gcc/ada/sysdep.c#L387
>>
>> I haven't really looked into this, but I *think* what's happening is
>> that for the versions with the Available parameter, ECHO hasn't yet been
>> turned off when the user types the character. If you type 'x', it
>> echoes immediately, because the program has no way of knowing that the
>> character will later be consumed by a call to Get_Immediate. Presumably
>> if the user hasn't typed anything, causing Available to be set to false,
>> Get_Immediate will turn echoing off and back on again very quickly.
>> Echoing is disabled only for small fraction of a second it takes for
>> Get_Immediate to be executed.
>>
>> The Get_Immediate functions without the Available parameter block
>> until a character is entered. They can disable echoing before the
>> character is entered. Echoing will typically be disabled for minutes
>> or seconds, from the time Get_Immediate is called and the time the
>> user types something.
>>
>> The only solution I can think of would be to disable echoing (in some
>> non-portable manner; I don't think the standard library provides this)
>> before the user starts typing. (Perhaps you want to run the
>> Get_Immediate without the Available parameter in a separate task?)
>
> Great analysis!
Yes indeed.
A possible solution in Text_IO would be for Get_Immediate with Available
not to enable echo when it exits. Get_Immediate with Available is
typically called repeatedly, with no other input from the terminal in
between these calls, so it should be ok to keep echo disabled from one
such call to another. Any non-immediate input operation on the terminal
(that is, on this Text_IO file) should start by re-enabling echo if it
was disabled. Possibly the same should apply also to Get_Immediate
without Available, that is, it should leave echo disabled, until some
non-immediate input operation re-enables echo.
next prev parent reply other threads:[~2023-10-04 16:55 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-02 2:42 get_immediate echoe character--compiled error? richardthiebaud
2023-10-02 5:48 ` Keith Thompson
2023-10-02 20:07 ` richardthiebaud
2023-10-02 22:27 ` Keith Thompson
2023-10-02 22:41 ` richardthiebaud
2023-10-02 22:47 ` richardthiebaud
2023-10-03 8:41 ` Niklas Holsti
2023-10-03 10:20 ` Simon Wright
2023-10-04 0:13 ` Keith Thompson
2023-10-04 8:22 ` Simon Wright
2023-10-04 10:48 ` Jeffrey R.Carter
2023-10-04 11:38 ` Simon Wright
2023-10-04 13:05 ` Jeffrey R.Carter
2023-10-05 0:43 ` Randy Brukardt
2023-10-04 16:55 ` Niklas Holsti [this message]
2023-10-04 19:39 ` Keith Thompson
2023-10-04 21:20 ` Niklas Holsti
2023-10-03 21:00 ` G.B.
2023-10-04 21:14 ` Jeffrey R.Carter
2023-10-04 22:12 ` Keith Thompson
2023-10-05 9:51 ` Jeffrey R.Carter
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox