From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-91-241.ec2.internal X-Spam-Level: * X-Spam-Status: No, score=1.0 required=3.0 tests=FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.6 Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.ada Subject: Re: get_immediate echoe character--compiled error? Date: Tue, 03 Oct 2023 17:13:17 -0700 Organization: None to speak of Message-ID: <874jj75joi.fsf@nosuchdomain.example.com> References: <87fs2tr2vf.fsf@nosuchdomain.example.com> <87lecku0bu.fsf@nosuchdomain.example.com> MIME-Version: 1.0 Content-Type: text/plain Injection-Info: dont-email.me; posting-host="9da464444b2257c989bb4d90b174d1f1"; logging-data="4004415"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/GM/bSb3vp+7NXAK2daKGZ" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) Cancel-Lock: sha1:dJCqfIL75nFnCRgGPKT8cua9yPo= sha1:ZtJ9CqSTbyL2NqKm9U6ZwYQNUuk= Xref: news.eternal-september.org comp.lang.ada:65775 List-Id: Simon Wright writes: > Niklas Holsti writes: >> Possibly this is why AdaCore have given different echoing behaviors to >> the two forms of Get_Immediate, with and without the "Available" >> parameter. If so, this echo difference is unfortunately coupled with >> the wait/no-wait behavior difference, and that coupling may be >> unwanted. > > 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?) -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com Will write code for food. void Void(void) { Void(); } /* The recursive call of the void */