I’m trying to make a terminal user interface in Dyalog APL and need a way to read a single byte of user input from stdin. How can I do this? In Python for example, you can use sys.stdin.read(1).
I’ve tried using ⍞, but that reads a whole line.
You can do this with ⎕ARBIN, which can be used like this:
[number of bytes to read] [tie number of file to read from]
⎕ARBIN[bytes to output before reading from input]
The number of bytes to read is 1, and there are no bytes to output (⍬). You can assign a tie number to stdin with ⎕NTIE.
stdin←'/dev/stdin' ⎕NTIE 0
byte←⊃1 stdin ⎕ARBIN ⍬
⎕ARBIN returns a numeric vector, so First (⊃) is used to get the byte as a scalar.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With