|
|
researchv10 Norman
/* @(#) vidputs.c: 1.1 10/15/83 (1.8 10/27/82) */
#include "curses.ext"
static int oldmode = 0; /* This really should be in the struct term */
char *tparm();
/* nooff: modes that don't have an explicit "turn me off" capability */
#define nooff (A_PROTECT|A_INVIS|A_BOLD|A_DIM|A_BLINK|A_REVERSE)
/* hilite: modes that could be faked with standout in a pinch. */
#define hilite (A_UNDERLINE|A_BOLD|A_DIM|A_BLINK|A_REVERSE)
vidputs(newmode, outc)
int newmode;
int (*outc)();
{
int curmode = oldmode;
#ifdef DEBUG
if (outf) fprintf(outf, "vidputs oldmode=%o, newmode=%o\n", oldmode, newmode);
#endif
if (newmode || !exit_attribute_mode) {
if (set_attributes) {
tputs(tparm(set_attributes,
newmode & A_STANDOUT,
newmode & A_UNDERLINE,
newmode & A_REVERSE,
newmode & A_BLINK,
newmode & A_DIM,
newmode & A_BOLD,
newmode & A_INVIS,
newmode & A_PROTECT,
newmode & A_ALTCHARSET),
1, outc);
curmode = newmode;
} else {
if ((oldmode&nooff) > (newmode&nooff)) {
if (exit_attribute_mode) {
tputs(exit_attribute_mode, 1, outc);
} else if (oldmode == A_UNDERLINE && exit_underline_mode) {
tputs(exit_underline_mode, 1, outc);
} else if (exit_standout_mode) {
tputs(exit_standout_mode, 1, outc);
}
curmode = oldmode = 0;
}
if ((newmode&A_ALTCHARSET) && !(oldmode&A_ALTCHARSET)) {
tputs(enter_alt_charset_mode, 1, outc);
curmode |= A_ALTCHARSET;
}
if (!(newmode&A_ALTCHARSET) && (oldmode&A_ALTCHARSET)) {
tputs(exit_alt_charset_mode, 1, outc);
curmode &= ~A_ALTCHARSET;
}
if ((newmode&A_PROTECT) && !(oldmode&A_PROTECT)) {
tputs(enter_protected_mode, 1, outc);
curmode |= A_PROTECT;
}
if ((newmode&A_INVIS) && !(oldmode&A_INVIS)) {
tputs(enter_secure_mode, 1, outc);
curmode |= A_INVIS;
}
if ((newmode&A_BOLD) && !(oldmode&A_BOLD))
if (enter_bold_mode) {
curmode |= A_BOLD;
tputs(enter_bold_mode, 1, outc);
}
if ((newmode&A_DIM) && !(oldmode&A_DIM))
if (enter_dim_mode) {
curmode |= A_DIM;
tputs(enter_dim_mode, 1, outc);
}
if ((newmode&A_BLINK) && !(oldmode&A_BLINK))
if (enter_blink_mode) {
curmode |= A_BLINK;
tputs(enter_blink_mode, 1, outc);
}
if ((newmode&A_REVERSE) && !(oldmode&A_REVERSE))
if (enter_reverse_mode) {
curmode |= A_REVERSE;
tputs(enter_reverse_mode, 1, outc);
}
if ((newmode&A_UNDERLINE) && !(oldmode&A_UNDERLINE))
if (enter_underline_mode) {
curmode |= A_UNDERLINE;
tputs(enter_underline_mode,1,outc);
}
if (!(newmode&A_UNDERLINE) && (oldmode&A_UNDERLINE)) {
tputs(exit_underline_mode, 1, outc);
curmode &= ~A_UNDERLINE;
}
if ((newmode&A_STANDOUT) && !(oldmode&A_STANDOUT))
if (enter_standout_mode) {
curmode |= A_STANDOUT;
tputs(enter_standout_mode,1,outc);
}
if (!(newmode&A_STANDOUT) && (oldmode&A_STANDOUT)) {
tputs(exit_standout_mode, 1, outc);
curmode &= ~A_STANDOUT;
}
}
} else {
if (exit_attribute_mode)
tputs(exit_attribute_mode, 1, outc);
else if (oldmode == A_UNDERLINE && exit_underline_mode)
tputs(exit_underline_mode, 1, outc);
else if (exit_standout_mode)
tputs(exit_standout_mode, 1, outc);
curmode = 0;
}
/*
* If we asked for bold, say, on a terminal with only standout,
* and we aren't already in standout, we settle for standout.
*/
if ((newmode&hilite) && curmode!=newmode && (curmode&A_STANDOUT)==0) {
tputs(enter_standout_mode, 1, outc);
curmode |= A_STANDOUT;
}
oldmode = curmode;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.