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!

Reply via email to