Sujet : Re: getchar implementation without GNUishms
De : addr (at) *nospam* is.invalid (Arti F. Idiot)
Groupes : comp.lang.awkDate : 26. Mar 2025, 05:16:32
Autres entêtes
Organisation : Anarchists of America
Message-ID : <vrvv30$spj$1@nnrp.usenet.blueworldhosting.com>
References : 1 2
User-Agent : Mozilla Thunderbird
On 3/25/25 7:10 AM, Janis Papanagnou wrote:
On 25.03.2025 10:51, anthk wrote:
Hello the guy from https://luxferre.top and gopher://hoi.st
has pretty interesting stuff, such as
>
[ shell specific or other tries to emulate some getchar function ]
>
Could it be possible to implement a true portable getchar?
Those who think that getchar is a useful function may implement that
natively in Awk. (It avoids external dependencies and all the issues
that the posted/quoted code has made obvious.)
I know you can iterate over input strings a character at a time in AWK
but I don't think you can read a single character from stdin without
also providing a newline via ENTER, which is perhaps what the OP was
actually wanting to do?
I kind of like making CLI interactive stuff and like not having to
press ENTER after entering single character menu choices. Tried a
few options using bash and lua before landing on stty(1) and dd(1),
both POSIX tools:
-- # getchar_posix.awk - read exactly one char from stdin and return it# without waiting for ENTER to be pressed.#BEGIN { printf "enter a char: "
Char = getchar()
printf "\n you entered: %s\n", Char
}
function getchar( ,Cmd, Chr) {
# put TTY in "raw" mode..
system ("stty -icanon")
#
# read Chr via dd(1)..
Cmd = "dd bs=1 count=1 2>/dev/null"
Cmd | getline Chr
close (Cmd)
#
# put TTY in "normal" mode..
system ("stty icanon")
#
return Chr
}
-- Saving the TTY state via 'stty -g' beforehand would probably be a goodaddition so if things go sideways the TTY isn't a mess.-A