unbuffered getc() ?

new topic     » topic index » view thread      » older message » newer message

Hi,
I am using Euphoria (2.4 alpha) in Linux to interface with a serial LCD
screen and keypad.  Sending output is no problem (once I'd remembered to use
flush() ) but I'm having trouble reading from the keypad.  I tried something
like the following:

integer lcd, key

lcd=open("/dev/ttyS1","ub")
while 1 do
    puts(lcd,{#FE,#26})
-- this tells the device to return the contents of its key buffer, or if the
-- buffer is empty, to return 0x00
    flush(lcd)
    key=getc(lcd)  --just locks up here!
    print(1,key)
end while

This doesn't work because according to the Euphoria docs:

"File input using getc() is buffered, i.e. getc() does not actually go out
to the disk for each character. Instead, a large block of characters will be
read in at one time and returned to you one by one from a memory buffer.
When getc() reads from the keyboard, it will not see any characters until
the user presses Enter. Note that the user can type control-Z, which the
operating system treats as "end of file". -1 will be returned. "

So it seems that getc() won't return anything until Euphoria sees a line
feed or an EOF.  So my question (if you've read this far): how can I get a
Euphoria program to read a single byte, immediately and without dealing with
buffers, from a file descriptor.  Is there a standard C function I can
easily wrap? (I'm not very good with C)

I hope that made some sort of sense,
chris.

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu