Nicholas Marriott wrote: > I get the same results on Linux and OpenBSD so if this is a problem I > suspect it is ncurses rather than OpenBSD. > > You can take this to ncurses-dev or I will have a dig around when I have > time, it'd help if you can come up with a simpler example (perhaps where > you only change the x member of acsc).
OK, no problem: # vi xterm0.ti # cat xterm0.ti # ACS test xterm0|xterm with simple ASCII pseudographics, acsc=x|, use=xterm, the rest unchanged (in place of running ./test you can run, for example, Midnight Commander) > On Mon, Jul 18, 2011 at 04:28:41PM +0400, alexei.mali...@inetcomm.ru wrote: >> Synopsis: bug in the alternate character set output >> Category: system >> Environment: >> System: OpenBSD 4.2 & 4.9 >> Architecture: OpenBSD.i386 >> Machine: i386 >> Description: >> curses and the like applications display curses ACS_VLINE >> characters incorrectly if the ACS_VLINE character is set >> to "|" >> How-To-Repeat: >> let's prepare test terminfo entry, where curses ACS_VLINE >> character is set to "|" (i. e. acsc must have "x|" >> somewhere in a terminfo description): >> >> # cd >> # vi xterm0.ti >> # cat xterm0.ti >> >> # ACS test >> xterm0|xterm with simple ASCII pseudographics, >> acsc=+>\,<-\^.v0#`+a\:f\\h#j+k+l+m+n+o~p-q-r-s_t+u+v+w+|!}#~ox|, >> use=xterm, >> >> # cat xterm0.ti >> /usr/src/share/termtypes/termtypes.master >> # cd /usr/src/share/termtypes >> # make obj >> # make cleandir >> # make depend >> # make >> # make install >> >> after that let's prepare test curses program: >> >> # cd >> # vi test.c >> # cat test.c >> >> #include <stdlib.h> >> #include <curses.h> >> >> void ERROR(char *diag) { >> printf("%s\n", diag); >> exit(1); >> } >> >> int main() { >> if (initscr() == NULL) >> ERROR("initscr() error!"); >> if (cbreak() != OK) >> ERROR("cbreak() error!"); >> if (noecho() != OK) >> ERROR("noecho() error!"); >> if (nonl() != OK) >> ERROR("nonl() error!"); >> if (intrflush(stdscr, FALSE) != OK) >> ERROR("intrflush(stdscr, FALSE) error!"); >> if (keypad(stdscr, TRUE) != OK) >> ERROR("keypad(stdscr, TRUE) error!"); >> if (border(0, 0, 0, 0, 0, 0, 0, 0) != OK) >> ERROR("border(0, 0, 0, 0, 0, 0, 0, 0) error!"); >> if (refresh() != OK) >> ERROR("refresh() error!"); >> if (getch() == ERR) >> ERROR("getch() error!"); >> if (endwin() != OK) >> ERROR("endwin() error!"); >> return (0); >> } >> >> # rm -f test ; cc -lcurses -o test test.c ; echo $? >> 0 >> >> at console with TERM set to "xterm0" or in an xterm >> window (which was started as "xterm -tn xterm0 &") >> let's run our test program: >> >> # ./test >> >> this test shows us that curses ACS_VLINE characters >> are displayed incorrectly (i. e. not as "|") >> >> Fix: >> workaround is dumb - change "|" to "!" and curses >> ACS_VLINE characters will be displayed correctly >> (as "!"); but this does not fix the problem!