Question about curses

Dave Hammond daveh at marob.masa.com
Tue Jan 16 05:44:03 AEST 1990


In article <1911 at ultb.isc.rit.edu> (J.S. Veiss) writes:
>
>I'm trying to print graphics characters from the alternate character set
>and another character set I created in a program using the curses library.
>I'm using standard ANSI escape codes to access the character sets.
>I've gotten things down to be the only way the print the escape codes to 
>change the character set is to print it to stdout instead of stdscr.
>[...]
>PrintCard (row, col)
>int row, col;
>{
>   move (row, col + 3);
>   printw ("%d", col / 10);
>   move (++row, col);
>   printf ("%slqqqqqk%s", GRPH, ASCII);
>   refresh ();
>}

Curses has no idea that "%slqqqqqk%s" is on screen, so it will
unwittingly overwrite portions of the box rule with spaces, whenever it
determines that the surrounding display area must be refreshed.  You
generally can not intermix direct display output with curses output,
because (1) curses has no idea what you are placing on screen, and (2)
curses buffers output until a refresh(), making it difficult to
coordinate direct output with curses output.

The only way to ensure that your direct output survives is to re-output
ALL direct output after EACH refresh().  The coordination effort can be
minimized by only refreshing immediately prior to reading user input
events.  If you only have a single event processing loop, then this
becomes fairly easy.  Of course, there is still the overhead imposed by
redrawing every box rule, before every input event.

As a point of information, newer curses implementations may support the
terminfo A_ALTCHARSET attribute, which will switch in and out of the
display's alternate character set.  Basically, you would code the above as:

PrintCard (row, col)
int row, col;
{
   move (row, col + 3);
   printw ("%d", col / 10);
   move (++row, col);
   attron(A_ALTCHARSET);
   addstr("lqqqqqk");
   attroff(A_ALTCHARSET);
   refresh ();
}

However, it should be noted that this option is highly unportable.

--
Dave Hammond
daveh at marob.masa.com
uunet!masa.com!marob!daveh



More information about the Comp.lang.c mailing list