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

Reply via email to