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