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). 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! > > > -- > Alexei Malinin