[net.unix-wizards] Standout box

allbery@ncoast.UUCP (Brandon Allbery) (10/21/86)

Expires:


Quoted from <640@dg_rtp.UUCP> ["Re: boxes in curses"], by meissner@dg_rtp.UUCP (Michael Meissner)...
+---------------
| In article <2245@elroy.UUCP>  alan@elroy.UUCP (Alan S. Mazer) writes:
| > Basically what you need to do is to skip using box() and define your own
| > function which draws a box (or border) using highlighted spaces.  This should
| > look pretty clean and curses will maintain it should it be clobbered.
| 
|     I have one minor nit about highlighted spaces -- it would only work on
| terminals which highlight with reverse video (as opposed to highlighting with
| dim, bold, or underlines).  But given that caveat, it sounds like a nifty
| solution.
+---------------

The documentation for sys5 curses states that if you set the 0x80 bit you get
standout mode.  (I think this works but is undocumented in BSD curses.)  So
the statement

#define STANDOUT	0x80

	box(win, ' '|STANDOUT, ' '|STANDOUT);

should give you a reverse-video box (if standout is reverse video) without
any extra programming.

One more caveat on this:  Televideo-style (magic cookie) terminals will
botch this badly.

Speaking of boxes, now that ncoast is back on the net, I will see about
posting my "tgraph" package.  It uses a terminfo-like database "/usr/lib/tgraph"
and a function "graph" (also "wgraph", "mvwgraph", "mvgraph") to implement
character graphics on terminals which support it.  You have to define the
A_ALTCHARSET attribute (smacs, rmacs, AND sgr), and the tgraph database
states what characters to print in A_ALTCHARSET mode to display graphic
characters.  Terminals which aren't in /usr/lib/tgraph get -, |, + graphics.
I've used this on a Wyse 50 and a VT100; it has also been tested on non-
graphics terminals.  It's nice to be able to write curses applications which
use a terminal's graphics characters.

The function graph(str) displays box graphics as specified by str; the
\n character is caught and processed correctly, other characters are
translated to the terminal's box graphics set via /usr/lib/tgraph, and
unknown characters print as spaces.  Example:

	graph(",---.\n|   |\n>---<\n|   |\n`---'\n");

produces a stacked box,

+---+			,---.
|   |			|   |
+---+	for the input:	>---<
|   |			|   |
+---+			`---'

on non-graphic terminals and uses the correct graphic characters on VT100s,
Wyse 50s, and anything else you define in the tgraph database.  The characters
used in graph() strings are intended to give an approximation to the correct
picture when viewed.

I'll be posting it soon if people want it.  (Oh, yes -- sys5 only, unless
you have Pavel Curtis's curses running or you have hacked extra attributes
into your curses.)

++Brandon
-- 
  ---------------- /--/	Brandon S. Allbery		UUCP: decvax!cwruecmp!
 /              / /|\/	Tridelta Industries, Inc.        ncoast!tdi2!brandon
----    -------- /-++	7350 Corporate Blvd.		PHONE: +1 216 974 9210
   /   / /---,  ----	Mentor, Ohio 44060		SYSOP: UNaXcess/ncoast
  /   / /    / /  /	     -- HOME --			 (216) 781-6201 24 hrs.
 /   / /    / /  /	6615 Center St. Apt. A1-105	ARPA:  ncoast!allbery%
----  -----~ ----	Mentor, Ohio 44060-4101		case.CSNET@relay.cs.net
An Open Letter To Tim Maroney:  If you don't want dogma, stop feeding it to us!