XFree86 3.9Ag - xterm patch #74 - 1998/4/27 - T.Dickey <dickey@clark.net>
This corrects a couple of recent bugs and adds a new resource:
+ modify definition of TRACE_CHILD so that it does not conflict with
ifdef's for USE_USG_PTYS in main.c (reported by Vikas Agnihotri
<VikasA@att.com> and Stefan Dalibor).
+ correct ownership of file (actually pipe) written by the print
controls. When undoing the setuid changes in patch #69, I overlooked
this. Now xterm forks a process which resets setuid and routes the
printer data as the real user.
+ add a new resource, "printAttributes", which controls whether
color attributes (or any attributes) are sent to the printer.
# ------------------------------------------------------------------------------
# charproc.c | 321 +++++++++++++++++++++++++++++--------------------------
# main.c | 2
# misc.c | 2
# print.c | 55 +++++++--
# ptyx.h | 7 -
# trace.h | 2
# version.h | 2
# xterm.log.html | 18 +++
# xterm.man | 10 +
# 9 files changed, 252 insertions, 167 deletions
# ------------------------------------------------------------------------------
Index: charproc.c
--- xterm-73+/charproc.c Sat Apr 25 10:51:07 1998
+++ xterm-74/charproc.c Mon Apr 27 19:33:59 1998
@@ -162,161 +162,168 @@
#define TRACKTIMEUSEC 0L
#define BELLSUPPRESSMSEC 200
-#define XtNalwaysHighlight "alwaysHighlight"
-#define XtNappcursorDefault "appcursorDefault"
-#define XtNappkeypadDefault "appkeypadDefault"
-#define XtNbackarrowKey "backarrowKey"
-#define XtNbellSuppressTime "bellSuppressTime"
-#define XtNboldFont "boldFont"
-#define XtNc132 "c132"
-#define XtNcharClass "charClass"
-#define XtNcurses "curses"
-#define XtNhpLowerleftBugCompat "hpLowerleftBugCompat"
-#define XtNxmcGlitch "xmcGlitch"
-#define XtNxmcAttributes "xmcAttributes"
-#define XtNxmcInline "xmcInline"
-#define XtNxmcMoveSGR "xmcMoveSGR"
-#define XtNcursorColor "cursorColor"
-#define XtNcursorBlinkTime "cursorBlinkTime"
-#define XtNcutNewline "cutNewline"
-#define XtNcutToBeginningOfLine "cutToBeginningOfLine"
-#define XtNeightBitInput "eightBitInput"
-#define XtNeightBitOutput "eightBitOutput"
-#define XtNeightBitControl "eightBitControl"
-#define XtNhighlightSelection "highlightSelection"
-#ifdef NO_ACTIVE_ICON
-#define XtNgeometry "geometry"
-#endif /* NO_ACTIVE_ICON */
-#define XtNtekGeometry "tekGeometry"
-#define XtNinternalBorder "internalBorder"
-#define XtNjumpScroll "jumpScroll"
+#define XtNallowSendEvents "allowSendEvents"
+#define XtNalwaysHighlight "alwaysHighlight"
+#define XtNappcursorDefault "appcursorDefault"
+#define XtNappkeypadDefault "appkeypadDefault"
+#define XtNautoWrap "autoWrap"
+#define XtNawaitInput "awaitInput"
+#define XtNbackarrowKey "backarrowKey"
+#define XtNbellSuppressTime "bellSuppressTime"
+#define XtNboldColors "boldColors"
+#define XtNboldFont "boldFont"
+#define XtNc132 "c132"
+#define XtNcharClass "charClass"
+#define XtNcolor0 "color0"
+#define XtNcolor1 "color1"
+#define XtNcolor10 "color10"
+#define XtNcolor11 "color11"
+#define XtNcolor12 "color12"
+#define XtNcolor13 "color13"
+#define XtNcolor14 "color14"
+#define XtNcolor15 "color15"
+#define XtNcolor2 "color2"
+#define XtNcolor3 "color3"
+#define XtNcolor4 "color4"
+#define XtNcolor5 "color5"
+#define XtNcolor6 "color6"
+#define XtNcolor7 "color7"
+#define XtNcolor8 "color8"
+#define XtNcolor9 "color9"
+#define XtNcolorAttrMode "colorAttrMode"
+#define XtNcolorBD "colorBD"
+#define XtNcolorBDMode "colorBDMode"
+#define XtNcolorBL "colorBL"
+#define XtNcolorBLMode "colorBLMode"
+#define XtNcolorMode "colorMode"
+#define XtNcolorUL "colorUL"
+#define XtNcolorULMode "colorULMode"
+#define XtNcurses "curses"
+#define XtNcursorBlinkTime "cursorBlinkTime"
+#define XtNcursorColor "cursorColor"
+#define XtNcutNewline "cutNewline"
+#define XtNcutToBeginningOfLine "cutToBeginningOfLine"
+#define XtNdecTerminalID "decTerminalID"
+#define XtNdynamicColors "dynamicColors"
+#define XtNeightBitControl "eightBitControl"
+#define XtNeightBitInput "eightBitInput"
+#define XtNeightBitOutput "eightBitOutput"
+#define XtNhighlightSelection "highlightSelection"
+#define XtNhpLowerleftBugCompat "hpLowerleftBugCompat"
+#define XtNinternalBorder "internalBorder"
+#define XtNjumpScroll "jumpScroll"
+#define XtNloginShell "loginShell"
+#define XtNmarginBell "marginBell"
+#define XtNmultiClickTime "multiClickTime"
+#define XtNmultiScroll "multiScroll"
+#define XtNnMarginBell "nMarginBell"
+#define XtNpointerColor "pointerColor"
+#define XtNpointerColorBackground "pointerColorBackground"
+#define XtNpointerShape "pointerShape"
+#define XtNprintAttributes "printAttributes"
+#define XtNprinterCommand "printerCommand"
+#define XtNprinterControlMode "printerControlMode"
+#define XtNprinterExtent "printerExtent"
+#define XtNprinterFormFeed "printerFormFeed"
+#define XtNresizeGravity "resizeGravity"
+#define XtNreverseWrap "reverseWrap"
+#define XtNrightScrollBar "rightScrollBar"
+#define XtNsaveLines "saveLines"
+#define XtNscrollBar "scrollBar"
+#define XtNscrollKey "scrollKey"
+#define XtNscrollLines "scrollLines"
+#define XtNscrollPos "scrollPos"
+#define XtNscrollTtyOutput "scrollTtyOutput"
+#define XtNsignalInhibit "signalInhibit"
+#define XtNtekGeometry "tekGeometry"
+#define XtNtekInhibit "tekInhibit"
+#define XtNtekSmall "tekSmall"
+#define XtNtekStartup "tekStartup"
+#define XtNtiteInhibit "titeInhibit"
+#define XtNunderLine "underLine"
+#define XtNvisualBell "visualBell"
+#define XtNxmcAttributes "xmcAttributes"
+#define XtNxmcGlitch "xmcGlitch"
+#define XtNxmcInline "xmcInline"
+#define XtNxmcMoveSGR "xmcMoveSGR"
+
#ifdef ALLOWLOGGING
-#define XtNlogFile "logFile"
-#define XtNlogging "logging"
-#define XtNlogInhibit "logInhibit"
-#endif
-#define XtNloginShell "loginShell"
-#define XtNmarginBell "marginBell"
-#define XtNpointerColor "pointerColor"
-#define XtNpointerColorBackground "pointerColorBackground"
-#define XtNpointerShape "pointerShape"
-#define XtNprinterControlMode "printerControlMode"
-#define XtNprinterCommand "printerCommand"
-#define XtNprinterExtent "printerExtent"
-#define XtNprinterFormFeed "printerFormFeed"
-#define XtNmultiClickTime "multiClickTime"
-#define XtNmultiScroll "multiScroll"
-#define XtNnMarginBell "nMarginBell"
-#define XtNresizeGravity "resizeGravity"
-#define XtNreverseWrap "reverseWrap"
-#define XtNautoWrap "autoWrap"
-#define XtNsaveLines "saveLines"
-#define XtNscrollBar "scrollBar"
-#define XtNrightScrollBar "rightScrollBar"
-#define XtNscrollTtyOutput "scrollTtyOutput"
-#define XtNscrollKey "scrollKey"
-#define XtNscrollLines "scrollLines"
-#define XtNscrollPos "scrollPos"
-#define XtNsignalInhibit "signalInhibit"
-#define XtNtekInhibit "tekInhibit"
-#define XtNtekSmall "tekSmall"
-#define XtNtekStartup "tekStartup"
-#define XtNtiteInhibit "titeInhibit"
-#define XtNvisualBell "visualBell"
-#define XtNallowSendEvents "allowSendEvents"
-#define XtNawaitInput "awaitInput"
-#define XtNcolor0 "color0"
-#define XtNcolor1 "color1"
-#define XtNcolor2 "color2"
-#define XtNcolor3 "color3"
-#define XtNcolor4 "color4"
-#define XtNcolor5 "color5"
-#define XtNcolor6 "color6"
-#define XtNcolor7 "color7"
-#define XtNcolor8 "color8"
-#define XtNcolor9 "color9"
-#define XtNcolor10 "color10"
-#define XtNcolor11 "color11"
-#define XtNcolor12 "color12"
-#define XtNcolor13 "color13"
-#define XtNcolor14 "color14"
-#define XtNcolor15 "color15"
-#define XtNcolorBD "colorBD"
-#define XtNcolorBL "colorBL"
-#define XtNcolorUL "colorUL"
-#define XtNcolorMode "colorMode"
-#define XtNcolorULMode "colorULMode"
-#define XtNcolorBDMode "colorBDMode"
-#define XtNcolorBLMode "colorBLMode"
-#define XtNcolorAttrMode "colorAttrMode"
-#define XtNboldColors "boldColors"
-#define XtNdynamicColors "dynamicColors"
-#if OPT_HIGHLIGHT_COLOR
-#define XtNhighlightColor "highlightColor"
-#endif /* OPT_HIGHLIGHT_COLOR */
-#define XtNunderLine "underLine"
-#define XtNdecTerminalID "decTerminalID"
+#define XtNlogFile "logFile"
+#define XtNlogInhibit "logInhibit"
+#define XtNlogging "logging"
+#endif
-#define XtCAlwaysHighlight "AlwaysHighlight"
-#define XtCAppcursorDefault "AppcursorDefault"
-#define XtCAppkeypadDefault "AppkeypadDefault"
-#define XtCBackarrowKey "BackarrowKey"
-#define XtCBellSuppressTime "BellSuppressTime"
-#define XtCBoldFont "BoldFont"
-#define XtCC132 "C132"
-#define XtCCharClass "CharClass"
-#define XtCCurses "Curses"
-#define XtCHpLowerleftBugCompat "HpLowerleftBugCompat"
-#define XtCXmcGlitch "XmcGlitch"
-#define XtCXmcAttributes "XmcAttributes"
-#define XtCXmcInline "XmcInline"
-#define XtCXmcMoveSGR "XmcMoveSGR"
-#define XtCCutNewline "CutNewline"
-#define XtCCutToBeginningOfLine "CutToBeginningOfLine"
-#define XtCCursorBlinkTime "CursorBlinkTime"
-#define XtCEightBitInput "EightBitInput"
-#define XtCEightBitOutput "EightBitOutput"
-#define XtCEightBitControl "EightBitControl"
-#define XtCHighlightSelection "HighlightSelection"
#ifdef NO_ACTIVE_ICON
-#define XtCGeometry "Geometry"
-#endif /* NO_ACTIVE_ICON */
-#define XtCJumpScroll "JumpScroll"
+#define XtNgeometry "geometry"
+#endif
+
+#if OPT_HIGHLIGHT_COLOR
+#define XtNhighlightColor "highlightColor"
+#endif
+
+#define XtCAllowSendEvents "AllowSendEvents"
+#define XtCAlwaysHighlight "AlwaysHighlight"
+#define XtCAppcursorDefault "AppcursorDefault"
+#define XtCAppkeypadDefault "AppkeypadDefault"
+#define XtCAutoWrap "AutoWrap"
+#define XtCAwaitInput "AwaitInput"
+#define XtCBackarrowKey "BackarrowKey"
+#define XtCBellSuppressTime "BellSuppressTime"
+#define XtCBoldFont "BoldFont"
+#define XtCC132 "C132"
+#define XtCCharClass "CharClass"
+#define XtCColorMode "ColorMode"
+#define XtCColumn "Column"
+#define XtCCurses "Curses"
+#define XtCCursorBlinkTime "CursorBlinkTime"
+#define XtCCutNewline "CutNewline"
+#define XtCCutToBeginningOfLine "CutToBeginningOfLine"
+#define XtCDecTerminalID "DecTerminalID"
+#define XtCDynamicColors "DynamicColors"
+#define XtCEightBitControl "EightBitControl"
+#define XtCEightBitInput "EightBitInput"
+#define XtCEightBitOutput "EightBitOutput"
+#define XtCHighlightSelection "HighlightSelection"
+#define XtCHpLowerleftBugCompat "HpLowerleftBugCompat"
+#define XtCJumpScroll "JumpScroll"
+#define XtCLoginShell "LoginShell"
+#define XtCMarginBell "MarginBell"
+#define XtCMultiClickTime "MultiClickTime"
+#define XtCMultiScroll "MultiScroll"
+#define XtCPrintAttributes "PrintAttributes"
+#define XtCPrinterCommand "PrinterCommand"
+#define XtCPrinterControlMode "PrinterControlMode"
+#define XtCPrinterExtent "PrinterExtent"
+#define XtCPrinterFormFeed "PrinterFormFeed"
+#define XtCResizeGravity "ResizeGravity"
+#define XtCReverseWrap "ReverseWrap"
+#define XtCRightScrollBar "RightScrollBar"
+#define XtCSaveLines "SaveLines"
+#define XtCScrollBar "ScrollBar"
+#define XtCScrollCond "ScrollCond"
+#define XtCScrollLines "ScrollLines"
+#define XtCScrollPos "ScrollPos"
+#define XtCSignalInhibit "SignalInhibit"
+#define XtCTekInhibit "TekInhibit"
+#define XtCTekSmall "TekSmall"
+#define XtCTekStartup "TekStartup"
+#define XtCTiteInhibit "TiteInhibit"
+#define XtCUnderLine "UnderLine"
+#define XtCVisualBell "VisualBell"
+#define XtCXmcAttributes "XmcAttributes"
+#define XtCXmcGlitch "XmcGlitch"
+#define XtCXmcInline "XmcInline"
+#define XtCXmcMoveSGR "XmcMoveSGR"
+
#ifdef ALLOWLOGGING
-#define XtCLogfile "Logfile"
-#define XtCLogging "Logging"
-#define XtCLogInhibit "LogInhibit"
-#endif
-#define XtCLoginShell "LoginShell"
-#define XtCMarginBell "MarginBell"
-#define XtCMultiClickTime "MultiClickTime"
-#define XtCMultiScroll "MultiScroll"
-#define XtCColumn "Column"
-#define XtCResizeGravity "ResizeGravity"
-#define XtCReverseWrap "ReverseWrap"
-#define XtCAutoWrap "AutoWrap"
-#define XtCPrinterControlMode "PrinterControlMode"
-#define XtCPrinterCommand "PrinterCommand"
-#define XtCPrinterExtent "PrinterExtent"
-#define XtCPrinterFormFeed "PrinterFormFeed"
-#define XtCSaveLines "SaveLines"
-#define XtCScrollBar "ScrollBar"
-#define XtCRightScrollBar "RightScrollBar"
-#define XtCScrollLines "ScrollLines"
-#define XtCScrollPos "ScrollPos"
-#define XtCScrollCond "ScrollCond"
-#define XtCSignalInhibit "SignalInhibit"
-#define XtCTekInhibit "TekInhibit"
-#define XtCTekSmall "TekSmall"
-#define XtCTekStartup "TekStartup"
-#define XtCTiteInhibit "TiteInhibit"
-#define XtCVisualBell "VisualBell"
-#define XtCAllowSendEvents "AllowSendEvents"
-#define XtCAwaitInput "AwaitInput"
-#define XtCColorMode "ColorMode"
-#define XtCDynamicColors "DynamicColors"
-#define XtCUnderLine "UnderLine"
-#define XtCDecTerminalID "DecTerminalID"
+#define XtCLogInhibit "LogInhibit"
+#define XtCLogfile "Logfile"
+#define XtCLogging "Logging"
+#endif
+
+#ifdef NO_ACTIVE_ICON
+#define XtCGeometry "Geometry"
+#endif
#define doinput() (bcnt-- > 0 ? *bptr++ : in_put())
@@ -365,6 +372,10 @@
static int defaultBlinkTime = 0;
#endif
+#if OPT_PRINT_COLORS
+static int defaultONE = 1;
+#endif
+
/*
* Warning, the following must be kept under 1024 bytes or else some
* compilers (particularly AT&T 6386 SVR3.2) will barf). Workaround is to
@@ -585,6 +596,11 @@
{XtNpointerShape,XtCCursor, XtRCursor, sizeof(Cursor),
XtOffsetOf(XtermWidgetRec, screen.pointer_cursor),
XtRString, (XtPointer) "xterm"},
+#ifdef OPT_PRINT_COLORS
+{XtNprintAttributes,XtCPrintAttributes, XtRInt, sizeof(int),
+ XtOffsetOf(XtermWidgetRec, screen.print_attributes),
+ XtRInt, (XtPointer) &defaultONE},
+#endif
{XtNprinterControlMode, XtCPrinterControlMode, XtRInt, sizeof(int),
XtOffsetOf(XtermWidgetRec, screen.printer_controlmode),
XtRInt, (XtPointer) &defaultZERO},
@@ -3710,6 +3726,9 @@
new->screen.printer_extent = request->screen.printer_extent;
new->screen.printer_formfeed = request->screen.printer_formfeed;
new->screen.printer_controlmode = request->screen.printer_controlmode;
+#ifdef OPT_PRINT_COLORS
+ new->screen.print_attributes = request->screen.print_attributes;
+#endif
new->screen.input_eight_bits = request->screen.input_eight_bits;
new->screen.output_eight_bits = request->screen.output_eight_bits;
Index: main.c
--- xterm-73+/main.c Sat Apr 25 12:12:47 1998
+++ xterm-74/main.c Mon Apr 27 18:45:32 1998
@@ -2442,6 +2442,7 @@
/*
* now in child process
*/
+ TRACE_CHILD
#if defined(_POSIX_SOURCE) || defined(SVR4) || defined(__convex__) || defined(SCO325)
int pgrp = setsid();
#else
@@ -2451,7 +2452,6 @@
char* ptyname;
char* ptynameptr = 0;
#endif
- TRACE_CHILD;
#ifdef USE_USG_PTYS
#if defined(SYSV) && defined(i386) && !defined(SVR4)
Index: misc.c
--- xterm-73+/misc.c Sat Apr 25 11:50:52 1998
+++ xterm-74/misc.c Mon Apr 27 19:14:14 1998
@@ -591,8 +591,6 @@
/*
* Logging is a security hole, since it allows a setuid program to write
* arbitrary data to an arbitrary file. So it is disabled by default.
- * (However, this version of xterm resets the setuid before opening the
- * logfile).
*/
#ifdef ALLOWLOGFILEEXEC
Index: print.c
--- xterm-73+/print.c Sat Apr 25 10:51:07 1998
+++ xterm-74/print.c Mon Apr 27 19:25:35 1998
@@ -4,7 +4,7 @@
/************************************************************
-Copyright 1997 by Thomas E. Dickey <dickey@clark.net>
+Copyright 1997,1998 by Thomas E. Dickey <dickey@clark.net>
All Rights Reserved
@@ -42,8 +42,10 @@
#include "ptyx.h"
#include "data.h"
+#include "error.h"
#include "xterm.h"
+#define isForm(c) ((c) == '\r' || (c) == '\n' || (c) == '\f')
#define Strlen(a) strlen((char *)a)
#define Strcmp(a,b) strcmp((char *)a,(char *)b)
#define Strncmp(a,b,c) strncmp((char *)a,(char *)b,c)
@@ -99,13 +101,21 @@
break;
}
if (last) {
- send_CharSet(row); /* FIXME: is this needed? */
- send_SGR(0,-1,-1);
+ if (screen->print_attributes) {
+ send_CharSet(row);
+ send_SGR(0,-1,-1);
+ }
for (col = 0; col < last; col++) {
#if OPT_PRINT_COLORS
if_OPT_ISO_COLORS(screen,{
- fg = (a[col] & FG_COLOR) ? extract_fg(fb[col], a[col]) : -1;
- bg = (a[col] & BG_COLOR) ? extract_bg(fb[col]) : -1;
+ if (screen->print_attributes > 1) {
+ fg = (a[col] & FG_COLOR)
+ ? extract_fg(fb[col], a[col])
+ : -1;
+ bg = (a[col] & BG_COLOR)
+ ? extract_bg(fb[col])
+ : -1;
+ }
})
#endif
if ((((a[col] & SGR_MASK) != attr)
@@ -117,11 +127,13 @@
attr = (a[col] & SGR_MASK);
last_fg = fg;
last_bg = bg;
- send_SGR(attr, fg, bg);
+ if (screen->print_attributes)
+ send_SGR(attr, fg, bg);
}
charToPrinter(c[col] ? c[col] : ' ');
}
- send_SGR(0,-1,-1);
+ if (screen->print_attributes)
+ send_SGR(0,-1,-1);
}
charToPrinter('\r');
charToPrinter(chr);
@@ -202,13 +214,38 @@
{
static int initialized;
if (!initialized) {
+ FILE *input;
+ int my_pipe[2];
+ int my_pid;
+ int c;
register TScreen *screen = &term->screen;
- Printer = popen(screen->printer_command, "w");
+
+ if (pipe(my_pipe))
+ SysError (ERROR_FORK);
+ if ((my_pid = fork()) < 0)
+ SysError (ERROR_FORK);
+
+ if (my_pid == 0) {
+ close(my_pipe[1]); /* printer is silent */
+ setgid (screen->gid);
+ setuid (screen->uid);
+ Printer = popen(screen->printer_command, "w");
+ input = fdopen(my_pipe[0], "r");
+ while ((c = fgetc(input)) != EOF) {
+ fputc(c, Printer);
+ if (isForm(c))
+ fflush(Printer);
+ }
+ exit(0);
+ } else {
+ close(my_pipe[0]); /* won't read from printer */
+ Printer = fdopen(my_pipe[1], "w");
+ }
initialized++;
}
if (Printer != 0) {
fputc(chr, Printer);
- if (chr == '\r' || chr == '\n' || chr == '\f')
+ if (isForm(chr))
fflush(Printer);
}
}
Index: ptyx.h
--- xterm-73+/ptyx.h Sat Apr 25 12:10:46 1998
+++ xterm-74/ptyx.h Mon Apr 27 18:34:14 1998
@@ -636,10 +636,13 @@
#endif /* NO_ACTIVE_ICON */
Cursor pointer_cursor; /* pointer cursor in window */
- String printer_command; /* pipe/shell command string */
+ String printer_command; /* pipe/shell command string */
Boolean printer_extent; /* print complete page */
Boolean printer_formfeed; /* print formfeed per function */
- int printer_controlmode; /* 0=off, 1=auto, 2=controller */
+ int printer_controlmode; /* 0=off, 1=auto, 2=controller */
+#ifdef OPT_PRINT_COLORS
+ int print_attributes; /* 0=off, 1=normal, 2=color */
+#endif
Boolean fnt_prop; /* true if proportional fonts */
XFontStruct *fnt_norm; /* normal font of terminal */
Index: trace.h
--- xterm-73+/trace.h Sat Apr 25 12:11:25 1998
+++ xterm-74/trace.h Mon Apr 27 18:45:40 1998
@@ -43,6 +43,6 @@
#define TRACE(p) Trace p;
extern char *trace_who;
-#define TRACE_CHILD trace_who = "child"
+#define TRACE_CHILD int tracing_child = (trace_who = "child") != 0;
#endif /* included_trace_h */
Index: version.h
--- xterm-73+/version.h Fri Apr 24 20:30:23 1998
+++ xterm-74/version.h Mon Apr 27 19:15:09 1998
@@ -6,4 +6,4 @@
* version of xterm has been built. The number in parentheses is my patch
* number (T.Dickey).
*/
-#define XTERM_VERSION "XFree86 3.9Ag(73)"
+#define XTERM_VERSION "XFree86 3.9Ag(74)"
Index: xterm.log.html
--- xterm-73+/xterm.log.html Sat Apr 25 18:04:06 1998
+++ xterm-74/xterm.log.html Mon Apr 27 20:00:23 1998
@@ -41,6 +41,7 @@
xc/programs/Xserver/hw/xfree86).
<UL>
+<LI><A HREF="#xterm_74">Patch #74 - 1998/4/27 - XFree86 3.9Ag and 3.3.2</A>
<LI><A HREF="#xterm_73">Patch #73 - 1998/4/25 - XFree86 3.9Ag and 3.3.2</A>
<LI><A HREF="#xterm_72">Patch #72 - 1998/4/17 - XFree86 3.9Ag and 3.3.2</A>
<LI><A HREF="#xterm_71">Patch #71 - 1998/4/12 - XFree86 3.9Ag and 3.3.2</A>
@@ -115,6 +116,23 @@
<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_74">Patch #74 - 1998/4/27 - XFree86 3.9Ag and 3.3.2</A></H1>
+
+This corrects a couple of recent bugs and adds a new resource:
+<ul>
+ <li>modify definition of TRACE_CHILD so that it does not conflict with
+ ifdef's for USE_USG_PTYS in main.c (reported by Vikas Agnihotri
+ <VikasA@att.com> and Stefan Dalibor).
+
+ <li>correct ownership of file (actually pipe) written by the print
+ controls. When undoing the setuid changes in patch #69, I overlooked
+ this. Now xterm forks a process which resets setuid and routes the
+ printer data as the real user.
+
+ <li>add a new resource, "printAttributes", which controls whether
+ color attributes (or any attributes) are sent to the printer.
+</ul>
<H1><A NAME="xterm_73">Patch #73 - 1998/4/25 - XFree86 3.9Ag and 3.3.2</A></H1>
Index: xterm.man
--- xterm-73+/xterm.man Fri Apr 24 20:29:02 1998
+++ xterm-74/xterm.man Mon Apr 27 18:41:24 1998
@@ -975,6 +975,16 @@
.B "pointerShape (\fPclass\fB Cursor)"
Specifies the name of the shape of the pointer. The default is ``xterm.''
.TP 8
+.B "printAttributes (\fPclass\fB PrintAttributes)"
+Specifies whether to print graphic attributes along with the text.
+A real DEC VTxxx terminal will print the underline, highlighting codes
+but your printer may not handle these.
+A ``0'' disables the attributes.
+A ``1'' prints the normal set of attributes (bold, underline, inverse and blink)
+as VT100-style control sequences.
+A ``2'' prints ANSI color attributes as well.
+The default is ``0.''
+.TP 8
.B "printerControlMode (\fPclass\fB PrinterControlMode)"
Specifies the printer control mode.
A ``1'' selects autoprint mode, which causes