# ------------------------------------------------------------------------------
# charproc.c | 28 ++++++++++++++++------------
# misc.c | 36 ++++++++++++++++++++++++++++--------
# ptyx.h | 53 ++++++++++++++++++++++++++++++++++++++---------------
# termcap | 2 +-
# terminfo | 12 ++++++------
# util.c | 11 +++--------
# version.h | 4 ++--
# xterm.h | 13 +++++++++++--
# xterm.log.html | 13 +++++++++++++
# 9 files changed, 118 insertions, 54 deletions
# ------------------------------------------------------------------------------
Index: charproc.c
--- xterm-128+/charproc.c Mon Feb 21 23:08:50 2000
+++ xterm-129/charproc.c Sat Feb 26 16:35:15 2000
@@ -196,7 +196,7 @@
#if DFT_COLORMODE
#define DFT_COLOR(name) name
#else
-#define DFT_COLOR(name) "XtDefaultForeground"
+#define DFT_COLOR(name) XtDefaultForeground
#endif
#endif
@@ -411,9 +411,9 @@
XtRBoolean, (XtPointer) &defaultFALSE},
{XtNbackground, XtCBackground, XtRPixel, sizeof(Pixel),
XtOffsetOf(XtermWidgetRec, core.background_pixel),
- XtRString, "XtDefaultBackground"},
-COLOR_RES(XtNforeground, screen.foreground, "XtDefaultForeground"),
-COLOR_RES(XtNcursorColor, screen.cursorcolor, "XtDefaultForeground"),
+ XtRString, XtDefaultBackground},
+Cres(XtNforeground, screen.foreground, XtDefaultForeground),
+Cres(XtNcursorColor, screen.cursorcolor, XtDefaultForeground),
#if OPT_BLINK_CURS
{XtNcursorBlink, XtCCursorBlink, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.cursor_blink),
@@ -488,7 +488,7 @@
{XtNmarginBell, XtCMarginBell, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.marginbell),
XtRBoolean, (XtPointer) &defaultFALSE},
-COLOR_RES(XtNpointerColor, screen.mousecolor, "XtDefaultForeground"),
+Cres(XtNpointerColor, screen.mousecolor, XtDefaultForeground),
{XtNpointerColorBackground, XtCBackground, XtRPixel, sizeof(Pixel),
XtOffsetOf(XtermWidgetRec, screen.mousecolorback),
XtRString, "XtDefaultBackground"},
@@ -659,9 +659,9 @@
#elif OPT_88_COLORS
# include <88colres.h>
#endif
-COLOR_RES(XtNcolorBD, screen.Acolors[COLOR_BD], DFT_COLOR("XtDefaultForeground")),
-COLOR_RES(XtNcolorBL, screen.Acolors[COLOR_BL], DFT_COLOR("XtDefaultForeground")),
-COLOR_RES(XtNcolorUL, screen.Acolors[COLOR_UL], DFT_COLOR("XtDefaultForeground")),
+COLOR_RES(XtNcolorBD, screen.Acolors[COLOR_BD], DFT_COLOR(XtDefaultForeground)),
+COLOR_RES(XtNcolorBL, screen.Acolors[COLOR_BL], DFT_COLOR(XtDefaultForeground)),
+COLOR_RES(XtNcolorUL, screen.Acolors[COLOR_UL], DFT_COLOR(XtDefaultForeground)),
{XtNcolorMode, XtCColorMode, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.colorMode),
XtRBoolean, (XtPointer) &defaultCOLORMODE},
@@ -685,7 +685,7 @@
XtOffsetOf(XtermWidgetRec, misc.dynamicColors),
XtRBoolean, (XtPointer) &defaultTRUE},
#if OPT_HIGHLIGHT_COLOR
-COLOR_RES(XtNhighlightColor, screen.highlightcolor, "XtDefaultForeground"),
+Cres(XtNhighlightColor, screen.highlightcolor, XtDefaultForeground),
#endif /* OPT_HIGHLIGHT_COLOR */
{XtNboldMode, XtCBoldMode, XtRBoolean, sizeof(Boolean),
XtOffsetOf(XtermWidgetRec, screen.bold_mode),
@@ -857,7 +857,6 @@
{
int fg = term->sgr_foreground;
-#if NUM_ANSI_COLORS < 256
if (term->screen.colorAttrMode
|| (fg < 0)) {
if (term->screen.colorULMode && (term->flags & UNDERLINE))
@@ -867,7 +866,6 @@
if (term->screen.colorBLMode && (term->flags & BLINK))
fg = COLOR_BL;
}
-#endif
/* This implements the IBM PC-style convention of 8-colors, with one
* bit for bold, thus mapping the 0-7 codes to 8-15. It won't make
@@ -4306,12 +4304,18 @@
wnew->screen.colorULMode = request->screen.colorULMode;
for (i = 0, color_ok = False; i < MAXCOLORS; i++) {
- TRACE(("Acolors[%d] = %#lx\n", i, request->screen.Acolors[i]));
wnew->screen.Acolors[i] = request->screen.Acolors[i];
+#if OPT_COLOR_RES
+ TRACE(("Acolors[%d] = %s\n", i, request->screen.Acolors[i].resource));
+ if (strcmp(wnew->screen.Acolors[i].resource, XtDefaultForeground))
+ color_ok = True;
+#else
+ TRACE(("Acolors[%d] = %#lx\n", i, request->screen.Acolors[i]));
if (wnew->screen.Acolors[i] != wnew->dft_foreground
&& wnew->screen.Acolors[i] != request->screen.foreground
&& wnew->screen.Acolors[i] != request->core.background_pixel)
color_ok = True;
+#endif
}
/* If none of the colors are anything other than the foreground or
Index: misc.c
--- xterm-128+/misc.c Wed Feb 9 17:47:18 2000
+++ xterm-129/misc.c Sat Feb 26 15:48:56 2000
@@ -1017,7 +1017,7 @@
char buffer[80];
TRACE(("ReportAnsiColorRequest %d\n", colornum));
- color.pixel = pTerm->screen.Acolors[colornum];
+ color.pixel = GET_COLOR_RES(pTerm->screen.Acolors[colornum]);
XQueryColor(term->screen.display, cmap, &color);
sprintf(buffer, "4;%d;rgb:%04x/%04x/%04x",
colornum,
@@ -1032,23 +1032,43 @@
static Boolean
AllocateAnsiColor(
XtermWidget pTerm,
- int color,
- char *name)
+ ColorRes *res,
+ char *spec)
{
XColor def;
register TScreen *screen = &pTerm->screen;
Colormap cmap = pTerm->core.colormap;
- if (XParseColor(screen->display, cmap, name, &def)
+ if (XParseColor(screen->display, cmap, spec, &def)
&& XAllocColor(screen->display, cmap, &def)) {
- screen->Acolors[color] = def.pixel;
- TRACE(("AllocateAnsiColor #%d: %s (pixel %#lx)\n", color, name, def.pixel));
+ SET_COLOR_RES(res, def.pixel);
+ TRACE(("AllocateAnsiColor %s (pixel %#lx)\n", spec, def.pixel));
return(TRUE);
}
- TRACE(("AllocateAnsiColor #%d: %s (failed)\n", color, name));
+ TRACE(("AllocateAnsiColor %s (failed)\n", spec));
return(FALSE);
}
+#if OPT_COLOR_RES
+Pixel
+xtermGetColorRes(ColorRes *res)
+{
+ if (!res->mode) {
+ if (AllocateAnsiColor(term, res, res->resource)) {
+ res->mode = True;
+ } else {
+ res->value = term->screen.foreground;
+ res->mode = -True;
+ fprintf(stderr,
+ "%s: Cannot allocate color %s\n",
+ xterm_name,
+ res->resource);
+ }
+ }
+ return res->value;
+}
+#endif
+
static Boolean
ChangeAnsiColorRequest(
XtermWidget pTerm,
@@ -1077,7 +1097,7 @@
}
if (!strcmp(name, "?"))
ReportAnsiColorRequest(pTerm, color, final);
- else if (!AllocateAnsiColor(pTerm, color, name))
+ else if (!AllocateAnsiColor(pTerm, &(pTerm->screen.Acolors[color]), name))
break;
/* FIXME: free old color somehow? We aren't for the other color
* change style (dynamic colors).
Index: ptyx.h
--- xterm-128+/ptyx.h Sun Feb 13 08:01:12 2000
+++ xterm-129/ptyx.h Sat Feb 26 16:17:35 2000
@@ -322,28 +322,25 @@
#define RES_OFFSET(offset) XtOffsetOf(XtermWidgetRec, offset)
#endif
+#define RES_NAME(name) name
+#define RES_CLASS(name) name
+
#define Bres(name,class,offset,value) \
- {name, class, XtRBoolean, sizeof(Boolean), \
+ {RES_NAME(name), RES_CLASS(class), XtRBoolean, sizeof(Boolean), \
RES_OFFSET(offset), XtRImmediate, (XtPointer) value}
+#define Cres(name,offset,value) \
+ {RES_NAME(name), XtCForeground, XtRPixel, sizeof(Pixel), \
+ RES_OFFSET(offset), XtRString, value}
+
#define Ires(name,class,offset,value) \
- {name, class, XtRInt, sizeof(int), \
- RES_OFFSET(offset), XtRInt, (XtPointer) value}
+ {RES_NAME(name), RES_CLASS(class), XtRInt, sizeof(int), \
+ RES_OFFSET(offset), XtRImmediate, (XtPointer) value}
#define Sres(name,class,offset,value) \
- {name, class, XtRString, sizeof(String), \
+ {RES_NAME(name), RES_CLASS(class), XtRString, sizeof(char *), \
RES_OFFSET(offset), XtRString, (XtPointer) value}
-#define COLOR_RES(name,offset,value) \
- {name, XtCForeground, XtRPixel, sizeof(Pixel), \
- RES_OFFSET(offset), XtRString, value}
-
-typedef struct {
- unsigned which; /* must have NCOLORS bits */
- Pixel colors[NCOLORS];
- char *names[NCOLORS];
-} ScrnColors;
-
/***====================================================================***/
#if (XtSpecificationRelease < 6)
@@ -368,6 +365,10 @@
#define OPT_CLIP_BOLD 1 /* true if xterm uses clipping to avoid bold-trash */
#endif
+#ifndef OPT_COLOR_RES
+#define OPT_COLOR_RES 1 /* true if xterm delays color-resource evaluation */
+#endif
+
#ifndef OPT_DEC_CHRSET
#define OPT_DEC_CHRSET 1 /* true if xterm is configured for DEC charset */
#endif
@@ -583,6 +584,12 @@
# define if_OPT_ISO_TRADITIONAL_COLORS(screen, code) /*nothing*/
#endif
+#if OPT_COLOR_RES
+#define COLOR_RES(name,offset,value) Sres(name, XtCForeground, offset.resource, value)
+#else
+#define COLOR_RES(name,offset,value) Cres(name, offset, value)
+#endif
+
/***====================================================================***/
#if OPT_DEC_CHRSET
@@ -806,6 +813,22 @@
#define NUM_POPUP_MENUS 4
+#if OPT_COLOR_RES
+typedef struct {
+ String resource;
+ Pixel value;
+ int mode;
+} ColorRes;
+#else
+#define ColorRes Pixel
+#endif
+
+typedef struct {
+ unsigned which; /* must have NCOLORS bits */
+ Pixel colors[NCOLORS];
+ char *names[NCOLORS];
+} ScrnColors;
+
typedef struct {
Boolean saved;
int row;
@@ -873,7 +896,7 @@
Pixel mousecolor; /* Mouse color */
Pixel mousecolorback; /* Mouse color background */
#if OPT_ISO_COLORS
- Pixel Acolors[MAXCOLORS]; /* ANSI color emulation */
+ ColorRes Acolors[MAXCOLORS]; /* ANSI color emulation */
Boolean boldColors; /* can we make bold colors? */
Boolean colorMode; /* are we using color mode? */
Boolean colorULMode; /* use color for underline? */
Index: termcap
--- xterm-128+/termcap Wed Feb 9 17:47:18 2000
+++ xterm-129/termcap Sat Feb 26 22:41:51 2000
@@ -116,7 +116,7 @@
:nd=\233C:rc=\E8:sc=\E7:se=\23327m:sf=^J:so=\2337m:sr=\215:\
:st=\210:ta=^I:te=\233?1049l:ti=\233?1049h:ue=\23324m:\
:up=\233A:us=\2334m:vb=\233?5h\233?5l:ve=\233?25h:\
- :vi=\233?25l:vs=\233?25h:
+ :vi=\233?25l:
#
hp|xterm-hp|XFree86 xterm with hpterm function keys:\
:k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:\
Index: terminfo
--- xterm-128+/terminfo Wed Feb 9 17:47:18 2000
+++ xterm-129/terminfo Sat Feb 26 23:05:48 2000
@@ -92,6 +92,7 @@
# pageup and pagedown for window manager functions.
#
xterm-xfree86|xterm-new|xterm terminal emulator (XFree86),
+ npc,
kDC=\E[3;5~,
kEND=\EO5F,
kHOM=\EO5H,
@@ -196,7 +197,6 @@
cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA,
cuu1=\E[A,
- cvvis=\E[?25h,
dch=\E[%p1%dP,
dch1=\E[P,
dl=\E[%p1%dM,
@@ -206,7 +206,7 @@
el=\E[K,
el1=\E[1K,
enacs=\E(B\E)0,
- flash=\E[?5h\E[?5l,
+ flash=\E[?5h$<100/>\E[?5l,
home=\E[H,
hpa=\E[%i%p1%dG,
ht=^I,
@@ -242,7 +242,7 @@
setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
+ sgr=\E[0%?%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017,
smacs=^N,
smam=\E[?7h,
@@ -577,6 +577,7 @@
mc5i,
mir,
msgr,
+ npc,
xenl,
colors#8,
cols#80,
@@ -602,7 +603,6 @@
cup=\233%i%p1%d;%p2%dH,
cuu=\233%p1%dA,
cuu1=\233A,
- cvvis=\233?25h,
dch=\233%p1%dP,
dch1=\233P,
dl=\233%p1%dM,
@@ -612,7 +612,7 @@
el=\233K,
el1=\2331K,
enacs=\E(B\E)0,
- flash=\233?5h\233?5l,
+ flash=\233?5h$<100/>\233?5l,
home=\233H,
hpa=\233%i%p1%dG,
ht=^I,
@@ -686,7 +686,7 @@
setaf=\2333%p1%dm,
setb=\2334%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
setf=\2333%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- sgr=\2330%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
+ sgr=\2330%?%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
sgr0=\233m^O,
smacs=^N,
smam=\233?7h,
Index: util.c
--- xterm-128+/util.c Sat Feb 12 06:47:41 2000
+++ xterm-129/util.c Sat Feb 26 16:35:43 2000
@@ -1266,8 +1266,9 @@
* and background because that tends to produce bizarre effects.
*/
if_OPT_ISO_COLORS(screen,{
- EXCHANGE( screen->Acolors[0], screen->Acolors[7], tmp )
- EXCHANGE( screen->Acolors[8], screen->Acolors[15], tmp )
+ ColorRes tmp2;
+ EXCHANGE( screen->Acolors[0], screen->Acolors[7], tmp2 )
+ EXCHANGE( screen->Acolors[8], screen->Acolors[15], tmp2 )
})
tmp = termw->core.background_pixel;
@@ -1752,11 +1753,6 @@
fg = (int) ((color >> 4) & 0xf);
#endif
- /*
- * If we allow exactly 256 colors, there is no room in a byte for
- * the bold/blink/underline colors.
- */
-#if NUM_ANSI_COLORS < 256
if (term->screen.colorAttrMode
|| (fg == extract_bg(color))) {
if (term->screen.colorULMode && (flags & UNDERLINE))
@@ -1766,7 +1762,6 @@
if (term->screen.colorBLMode && (flags & BLINK))
fg = COLOR_BL;
}
-#endif
return fg;
}
Index: version.h
--- xterm-128+/version.h Thu Feb 17 17:33:19 2000
+++ xterm-129/version.h Sat Feb 26 16:52:07 2000
@@ -6,5 +6,5 @@
* XFree86 to which this version of xterm has been built. The number in
* parentheses is my patch number (T.Dickey).
*/
-#define XTERM_PATCH 128
-#define XFREE86_VERSION "XFree86 3.9.18"
+#define XTERM_PATCH 129
+#define XFREE86_VERSION "XFree86 3.9.18a"
Index: xterm.h
--- xterm-128+/xterm.h Sun Feb 13 08:01:12 2000
+++ xterm-129/xterm.h Sat Feb 26 13:47:46 2000
@@ -701,13 +701,22 @@
#define getXtermForeground(flags, color) \
(((flags) & FG_COLOR) && ((color) >= 0) \
- ? term->screen.Acolors[color] \
+ ? GET_COLOR_RES(term->screen.Acolors[color]) \
: term->screen.foreground)
#define getXtermBackground(flags, color) \
(((flags) & BG_COLOR) && ((color) >= 0) \
- ? term->screen.Acolors[color] \
+ ? GET_COLOR_RES(term->screen.Acolors[color]) \
: term->core.background_pixel)
+
+#if OPT_COLOR_RES
+#define GET_COLOR_RES(res) xtermGetColorRes(&res)
+#define SET_COLOR_RES(res,color) res->value = color
+extern Pixel xtermGetColorRes(ColorRes *res);
+#else
+#define GET_COLOR_RES(res) res
+#define SET_COLOR_RES(res,color) *res = color
+#endif
#if OPT_EXT_COLORS
#define extract_bg(color) ((int)((color) & 0xff))
Index: xterm.log.html
--- xterm-128+/xterm.log.html Thu Feb 17 17:33:19 2000
+++ xterm-129/xterm.log.html Sat Feb 26 22:21:12 2000
@@ -41,6 +41,7 @@
xc/programs/Xserver/hw/xfree86).
<UL>
+<LI><A HREF="#xterm_129">Patch #129 - 2000/2/26 - XFree86 3.9.18a</A>
<LI><A HREF="#xterm_128">Patch #128 - 2000/2/17 - XFree86 3.9.18</A>
<LI><A HREF="#xterm_127">Patch #127 - 2000/2/12 - XFree86 3.9.17e</A>
<LI><A HREF="#xterm_126">Patch #126 - 2000/2/8 - XFree86 3.9.17c</A>
@@ -171,6 +172,18 @@
<LI><A HREF="#xterm_02">Patch #2 - 1996/1/7</A>
<LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A>
</UL>
+
+<H1><A NAME="xterm_129">Patch #129 - 2000/2/26 - XFree86 3.9.18a</A></H1>
+<ul>
+ <li>improve initialization of ANSI colors by delaying allocation until
+ each color is first used.
+
+ <li>remove ifdef that prevented colorBD/colorUL/colorBL resources from
+ working when 256-color configuration was built (reported by
+ Todd Larason).
+
+ <li>fix some minor inconsistencies in terminfo (Debian #58530).
+</ul>
<H1><A NAME="xterm_128">Patch #128 - 2000/2/17 - XFree86 3.9.18</A></H1>
<ul>