comp.lang.ada
 help / color / mirror / Atom feed
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.

  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