From mboxrd@z Thu Jan 1 00:00:00 1970 Path: eternal-september.org!news.eternal-september.org!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Niklas Holsti Newsgroups: comp.lang.ada Subject: Re: get_immediate echoe character--compiled error? Date: Wed, 4 Oct 2023 19:55:51 +0300 Organization: Tidorum Ltd Message-ID: References: <87fs2tr2vf.fsf@nosuchdomain.example.com> <87lecku0bu.fsf@nosuchdomain.example.com> <874jj75joi.fsf@nosuchdomain.example.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net JgugGi40E9qFStkztCiI4w85yy08EpDhaTUU58nGEss7t3+sE5 Cancel-Lock: sha1:zagDyc8DYkzSH6xhJxTHSyIO7Iw= sha256:KpA//pkFfkfnxLcit0mNBEIIw+w8Pe8LbefIR8FvmUs= User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Content-Language: en-US In-Reply-To: Xref: news.eternal-september.org comp.lang.ada:65782 List-Id: On 2023-10-04 11:22, Simon Wright wrote: > Keith Thompson writes: > >> Simon Wright 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.