On Tue, Jun 30, 2026 at 12:27:45AM +0000, Antonio Niño Díaz wrote: > Hello! > > I'm trying to get ncurses working in a new platform (Nintendo DS using > [BlocksDS](https://blocksds.skylyrac.net/)). I've created a terminal > emulator that supports 16-color, 256-color and direct color commands > (foreground and background), as well as a few other commands like "bold", > "move cursor" and "clear screen". Basically, I'm cherry-picking terminfo > configuration settings from other terminals to create my own configuration > based on what I actually support, and I'm trying to understand every setting > I use. So far I've managed to get 16 and 256 color modes working, as well as > moving the cursor around and clearing the screen. However, I have two issues > that I've spent a few days debugging with no success. I've even added printf > logs in ncurses in many places (the trace system doesn't work for some > reason) but ncurses has so many build options and code paths that it's hard > to know what actually gets used (printf-debugging has helped to get color > working, though). > > ---------------- ... > 2) getch() only works for blocking input. > > If I use `timeout(-1)` I can see calls to `read()`. They block as expected > and I can see that the value is received by ncurses. However, if I use > `timeout(0)` I never see any syscall being used. Maybe I'm looking at the > wrong place, but the same code works on PC, so I assume it's something to do > with my port. I do support setting non-blocking mode for `stdin` with > `ioctl(FIONBIO)` and `fcntl(F_SETFL, O_NONBLOCK)`, and I also support > querying the amount of characters available to read from `stdin` with > `ioctl(FIONREAD)`, but I don't know if this is even used by ncurses.
no - ncurses basically uses select() or poll() to detect new data. In a quick check, timeout() sets a _delay member of the window, which when negative will bypass a timed delay when looking for data. > How does ncurses get new characters for non-blocking input? > > ---------------- > > This is my build configuration: > > ./configure \ > --with-normal \ > --without-shared --without-progs --without-manpages --without-tests \ > --target=arm --host=arm --build=amd64 \ > --disable-database --disable-db-install \ > --disable-gnat-projects --disable-home-terminfo \ > --enable-termcap \ > --disable-widec \ > --prefix=$PWD/mybuild \ > --with-trace \ > --enable-getcap \ > --disable-sigwinch \ > --enable-ext-colors --enable-rgb-color \ > --enable-ext-mouse \ > CFLAGS="-mthumb -mcpu=arm946e-s+nofp -O2 -ffunction-sections -fdata-sections > -I$BLOCKSDS/libs/libnds/include" \ > BUILD_CC=gcc \ > CC=arm-none-eabi-gcc \ > cf_cv_have_tcgetattr=yes \ > ac_cv_func_gettimeofday=yes \ > ac_cv_type_sigset_t=no The output from the configure script (config.log, config.status) would tell us for example if it's using select or poll. -- Thomas E. Dickey <[email protected]> https://invisible-island.net
signature.asc
Description: PGP signature
