diff options
49 files changed, 1308 insertions, 613 deletions
diff --git a/app/xterm/INSTALL b/app/xterm/INSTALL index 2f85f3a40..d2afa33d2 100644 --- a/app/xterm/INSTALL +++ b/app/xterm/INSTALL @@ -1,6 +1,6 @@ --- $XTermId: INSTALL,v 1.121 2009/08/06 00:39:09 tom Exp $ +-- $XTermId: INSTALL,v 1.122 2010/04/14 10:56:29 tom Exp $ ------------------------------------------------------------------------------- --- Copyright 1997-2007,2008 by Thomas E. Dickey +-- Copyright 1997-2009,2010 by Thomas E. Dickey -- -- All Rights Reserved -- @@ -258,6 +258,11 @@ The options (in alphabetic order): leaving the right scrollbar incorrectly positioned after changing the font size. + --disable-rpath-hack don't add rpath options for additional libraries + + By default, the configure script looks for libraries in unusual places + and adds an rpath linker option to help. + --disable-samename disable check for redundant name-change Do not compile-in code that suppresses redundant updates to the @@ -561,6 +566,13 @@ The options (in alphabetic order): If regular expressions are not disable (--disable-regex), use PCRE rather than the POSIX regular expressions. + --with-pkg-config{=path} enable/disable use of pkg-config + + The configure script looks for certain libraries which have well + established pkg-config scripts, and will use those settings if + available. Not all pkg-config scripts work; this option suppresses + the check and relies on normal library search paths. + --with-reference=XXX program to use as permissions-reference To install xterm with setuid permissions, the scripts usually compare diff --git a/app/xterm/KOI8RXTerm.ad b/app/xterm/KOI8RXTerm.ad index 296bf51eb..acc82d27b 100644 --- a/app/xterm/KOI8RXTerm.ad +++ b/app/xterm/KOI8RXTerm.ad @@ -1,8 +1,8 @@ -! $XTermId: KOI8RXTerm.ad,v 1.3 2007/12/30 15:49:14 tom Exp $ +! $XTermId: KOI8RXTerm.ad,v 1.4 2010/03/04 01:17:49 tom Exp $ ! ----------------------------------------------------------------------------- ! this file is part of xterm ! -! Copyright 2007 by Thomas E. Dickey +! Copyright 2007,2010 by Thomas E. Dickey ! ! All Rights Reserved ! @@ -36,7 +36,7 @@ ! xterm -class KOI8RXTerm ! to set resources for KOI8-R mode with corresponding fonts. -#include "XTerm-color" +#include "XTerm" *fontMenu.Label: KOI8-R Fonts *VT100*allowC1Printable: true diff --git a/app/xterm/MANIFEST b/app/xterm/MANIFEST index 282f20a63..262de0b44 100644 --- a/app/xterm/MANIFEST +++ b/app/xterm/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for xterm-255, version xterm-255 +MANIFEST for xterm-258, version xterm-258 -------------------------------------------------------------------------------- MANIFEST this file 256colres.h resource-definitions for 256-color mode diff --git a/app/xterm/Makefile b/app/xterm/Makefile index fbb8f77b1..6e2a3dcbe 100644 --- a/app/xterm/Makefile +++ b/app/xterm/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.14 2009/09/05 15:58:09 matthieu Exp $ +# $OpenBSD: Makefile,v 1.15 2010/05/08 12:20:46 matthieu Exp $ .include <bsd.xconf.mk> SUBDIR= icons resize @@ -54,15 +54,15 @@ CLEANFILES+= ${MAN} afterinstall: ${INSTALL} ${INSTALL_COPY} -m 755 ${.CURDIR}/uxterm \ ${DESTDIR}${BINDIR} - ${INSTALL} ${INSTALL_COPY} -m 644 ${.CURDIR}/XTerm.ad \ + ${INSTALL} ${INSTALL_COPY} -m 755 ${.CURDIR}/koi8rxterm \ + ${DESTDIR}${BINDIR} + ${INSTALL_DATA} ${.CURDIR}/XTerm.ad \ ${DESTDIR}${XETC}/app-defaults/XTerm - ${INSTALL} ${INSTALL_COPY} -m 644 ${.CURDIR}/XTerm-col.ad \ + ${INSTALL_DATA} ${.CURDIR}/XTerm-col.ad \ ${DESTDIR}${XETC}/app-defaults/XTerm-color - ${INSTALL} ${INSTALL_COPY} -m 644 ${.CURDIR}/UXTerm.ad \ + ${INSTALL_DATA} ${.CURDIR}/UXTerm.ad \ ${DESTDIR}${XETC}/app-defaults/UXTerm - ${INSTALL} ${INSTALL_COPY} -m 755 ${.CURDIR}/koi8rxterm \ - ${DESTDIR}${BINDIR} - ${INSTALL} ${INSTALL_COPY} -m 644 ${.CURDIR}/KOI8RXTerm.ad \ + ${INSTALL_DATA} ${.CURDIR}/KOI8RXTerm.ad \ ${DESTDIR}${XETC}/app-defaults/KOI8RXTerm obj: _xenocara_obj diff --git a/app/xterm/Tekproc.c b/app/xterm/Tekproc.c index 483484a48..b84535ccf 100644 --- a/app/xterm/Tekproc.c +++ b/app/xterm/Tekproc.c @@ -1,4 +1,4 @@ -/* $XTermId: Tekproc.c,v 1.175 2009/12/09 23:25:34 Jochen.Voss Exp $ */ +/* $XTermId: Tekproc.c,v 1.176 2010/04/18 16:22:54 tom Exp $ */ /* * Warning, there be crufty dragons here. @@ -754,7 +754,7 @@ Tekparse(TekWidget tw) Char buf2[512]; IChar c2; - unsigned len = 0; + size_t len = 0; while ((c2 = input()) != ANSI_BEL) { if (!isprint((int) (c2 & 0x7f)) || len + 2 >= (int) sizeof(buf2)) diff --git a/app/xterm/UXTerm.ad b/app/xterm/UXTerm.ad index 74597ae74..a2cca8526 100644 --- a/app/xterm/UXTerm.ad +++ b/app/xterm/UXTerm.ad @@ -1,8 +1,8 @@ -! $XTermId: UXTerm.ad,v 1.12 2006/02/13 01:14:58 tom Exp $ +! $XTermId: UXTerm.ad,v 1.13 2010/03/04 01:17:07 tom Exp $ ! ----------------------------------------------------------------------------- ! this file is part of xterm ! -! Copyright 2000-2005,2006 by Thomas E. Dickey +! Copyright 2000-2006,2010 by Thomas E. Dickey ! ! All Rights Reserved ! @@ -35,7 +35,7 @@ ! to set resources for UTF-8 mode with corresponding fonts. ! See the uxterm script for an example. -#include "XTerm-color" +#include "XTerm" *fontMenu.Label: Unicode Fonts *VT100.utf8: 1 diff --git a/app/xterm/VTPrsTbl.c b/app/xterm/VTPrsTbl.c index e0057fd00..095b3c19d 100644 --- a/app/xterm/VTPrsTbl.c +++ b/app/xterm/VTPrsTbl.c @@ -1,4 +1,4 @@ -/* $XTermId: VTPrsTbl.c,v 1.55 2009/12/29 22:01:11 tom Exp $ */ +/* $XTermId: VTPrsTbl.c,v 1.57 2010/04/10 00:19:56 tom Exp $ */ /* * @@ -550,7 +550,7 @@ CASE_CPR, CASE_GROUND_STATE, /* p q r s */ CASE_GROUND_STATE, -CASE_GROUND_STATE, +CASE_DECLL, CASE_DECSTBM, CASE_DECSC, /* t u v w */ @@ -710,7 +710,7 @@ CASE_CPR, CASE_GROUND_STATE, /* eth ntilde ograve oacute */ CASE_GROUND_STATE, -CASE_GROUND_STATE, +CASE_DECLL, CASE_DECSTBM, CASE_DECSC, /* ocircumflex otilde odiaeresis division */ @@ -874,7 +874,7 @@ CASE_CPR, CASE_GROUND_STATE, /* p q r s */ CASE_GROUND_STATE, -CASE_GROUND_STATE, +CASE_DECLL, CASE_DECSTBM, CASE_DECSC, /* t u v w */ @@ -1034,7 +1034,7 @@ CASE_CPR, CASE_GROUND_STATE, /* eth ntilde ograve oacute */ CASE_GROUND_STATE, -CASE_GROUND_STATE, +CASE_DECLL, CASE_DECSTBM, CASE_DECSC, /* ocircumflex otilde odiaeresis division */ diff --git a/app/xterm/VTparse.def b/app/xterm/VTparse.def index 8a9f08fcc..8e8d629cb 100644 --- a/app/xterm/VTparse.def +++ b/app/xterm/VTparse.def @@ -1,4 +1,4 @@ -# $XTermId: VTparse.def,v 1.37 2009/12/29 22:57:10 tom Exp $ +# $XTermId: VTparse.def,v 1.38 2010/04/09 10:47:24 tom Exp $ # # vile:confmode rs=lf # ----------------------------------------------------------------------------- @@ -181,3 +181,4 @@ CASE_SM_TITLE CASE_RM_TITLE CASE_DECSMBV CASE_DECSWBV +CASE_DECLL diff --git a/app/xterm/VTparse.h b/app/xterm/VTparse.h index 1df063be3..0fd5110c1 100644 --- a/app/xterm/VTparse.h +++ b/app/xterm/VTparse.h @@ -1,4 +1,4 @@ -/* $XTermId: VTparse.h,v 1.50 2009/12/29 22:57:16 tom Exp $ */ +/* $XTermId: VTparse.h,v 1.51 2010/04/09 22:29:17 tom Exp $ */ /* * Copyright 2002-2008,2009 by Thomas E. Dickey @@ -261,5 +261,6 @@ extern Const PARSE_T esc_pct_table[]; #define CASE_RM_TITLE 140 #define CASE_DECSMBV 141 #define CASE_DECSWBV 142 +#define CASE_DECLL 143 #endif /* included_VTparse_h */ diff --git a/app/xterm/button.c b/app/xterm/button.c index 0cd6b974c..2976538c9 100644 --- a/app/xterm/button.c +++ b/app/xterm/button.c @@ -1,7 +1,7 @@ -/* $XTermId: button.c,v 1.364 2010/01/04 23:13:01 tom Exp $ */ +/* $XTermId: button.c,v 1.375 2010/04/18 17:48:58 tom Exp $ */ /* - * Copyright 1999-2008,2009 by Thomas E. Dickey + * Copyright 1999-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -346,7 +346,7 @@ SendLocatorPosition(XtermWidget xw, XEvent * event) state = (event->xbutton.state & (Button1Mask | Button2Mask | Button3Mask | Button4Mask)) >> 8; /* update mask to "after" state */ - state ^= 1 << button; + state ^= ((unsigned) (1 << button)); /* swap Button1 & Button3 */ state = ((state & (unsigned) ~(4 | 1)) | ((state & 1) ? 4 : 0) @@ -836,10 +836,10 @@ DiredButton(Widget w, if ((event->type == ButtonPress || event->type == ButtonRelease) && (event->xbutton.y >= screen->border) && (event->xbutton.x >= OriginX(screen))) { - line = ((unsigned) (event->xbutton.y - screen->border) - / FontHeight(screen)); - col = ((unsigned) (event->xbutton.x - OriginX(screen)) - / FontWidth(screen)); + line = (unsigned) ((event->xbutton.y - screen->border) + / FontHeight(screen)); + col = (unsigned) ((event->xbutton.x - OriginX(screen)) + / FontWidth(screen)); Line[0] = CONTROL('X'); Line[1] = ANSI_ESC; Line[2] = 'G'; @@ -1075,28 +1075,38 @@ DECtoASCII(unsigned ch) } return ch; } + +#if OPT_WIDE_CHARS +static Cardinal +addXtermChar(Char ** buffer, Cardinal *used, Cardinal offset, unsigned value) +{ + if (offset + 1 >= *used) { + *used = 1 + (2 * (offset + 1)); + allocXtermChars(buffer, *used); + } + (*buffer)[offset++] = (Char) value; + return offset; +} +#define AddChar(buffer, used, offset, value) \ + offset = addXtermChar(buffer, used, offset, (unsigned) value) + /* * Convert a UTF-8 string to Latin-1, replacing non Latin-1 characters by `#', * or ASCII/Latin-1 equivalents for special cases. */ -#if OPT_WIDE_CHARS static Char * -UTF8toLatin1(TScreen * screen, Char * s, unsigned len, unsigned long *result) +UTF8toLatin1(TScreen * screen, Char * s, unsigned long len, unsigned long *result) { static Char *buffer; static Cardinal used; - Char *p, *q; + Cardinal offset = 0; - if (len > used) { - used = 1 + (2 * len); - allocXtermChars(&buffer, used); - } + Char *p; - if (buffer != 0) { + if (len != 0) { PtyData data; - q = buffer; fakePtyData(&data, s, s + len); while (decodeUtf8(&data)) { Bool fails = False; @@ -1105,17 +1115,17 @@ UTF8toLatin1(TScreen * screen, Char * s, unsigned len, unsigned long *result) if (value == UCS_REPL) { fails = True; } else if (value < 256) { - *q++ = CharOf(value); + AddChar(&buffer, &used, offset, CharOf(value)); } else { unsigned eqv = ucs2dec(value); if (xtermIsDecGraphic(eqv)) { - *q++ = (Char) DECtoASCII(eqv); + AddChar(&buffer, &used, offset, DECtoASCII(eqv)); } else { eqv = AsciiEquivs(value); if (eqv == value) { fails = True; } else { - *q++ = (Char) eqv; + AddChar(&buffer, &used, offset, eqv); } if (isWide((wchar_t) value)) extra = True; @@ -1129,19 +1139,14 @@ UTF8toLatin1(TScreen * screen, Char * s, unsigned len, unsigned long *result) */ if (fails) { for (p = (Char *) screen->default_string; *p != '\0'; ++p) { - len = (unsigned) (3 + q - buffer); - if (len >= used) { - used = 1 + (2 * len); - allocXtermChars(&buffer, used); - } - *q++ = *p; + AddChar(&buffer, &used, offset, *p); } } if (extra) - *q++ = ' '; + AddChar(&buffer, &used, offset, ' '); } - *q = 0; - *result = (unsigned long) (q - buffer); + AddChar(&buffer, &used, offset, '\0'); + *result = (unsigned long) (offset - 1); } else { *result = 0; } @@ -1184,8 +1189,8 @@ xtermUtf8ToTextList(XtermWidget xw, new_size += size + 1; } new_text_list = - (char **) XtMalloc(sizeof(char *) * (unsigned) *text_list_count); - new_text_list[0] = tmp = XtMalloc(new_size); + (char **) XtMalloc((Cardinal) sizeof(char *) * (unsigned) *text_list_count); + new_text_list[0] = tmp = XtMalloc((Cardinal) new_size); for (i = 0; i < (*text_list_count); ++i) { data = (Char *) (*text_list)[i]; size = strlen((*text_list)[i]) + 1; @@ -1264,12 +1269,13 @@ overrideTargets(Widget w, String value, Atom ** resultp) if (copied[n] == ',') ++count; } - result = (Atom *) XtMalloc(((2 * count) + 1) * sizeof(Atom)); + result = (Atom *) XtMalloc(((2 * count) + 1) + * (Cardinal) sizeof(Atom)); if (result == NULL) { TRACE(("Couldn't allocate selection types\n")); } else { char nextc = '?'; - char *listp = copied; + char *listp = (char *) copied; count = 0; do { char *nextp = parseItem(listp, &nextc); @@ -1418,7 +1424,7 @@ UnmapSelections(XtermWidget xw) if (screen->mappedSelect) { for (n = 0; screen->mappedSelect[n] != 0; ++n) - free(screen->mappedSelect[n]); + free((void *) screen->mappedSelect[n]); free(screen->mappedSelect); screen->mappedSelect = 0; } @@ -1478,10 +1484,10 @@ MapSelections(XtermWidget xw, String * params, Cardinal num_params) * If it is not a cut-buffer, it is the primary selection (-1). */ static int -CutBuffer(unsigned code) +CutBuffer(Atom code) { int cutbuffer; - switch (code) { + switch ((unsigned) code) { case XA_CUT_BUFFER0: cutbuffer = 0; break; @@ -1544,6 +1550,8 @@ xtermGetSelection(Widget w, XtermWidget xw; + if (num_params == 0) + return; if ((xw = getXtermWidget(w)) == 0) return; @@ -1739,7 +1747,7 @@ _qWriteSelectionData(TScreen * screen, Char * lag, unsigned length) } static void -_WriteSelectionData(TScreen * screen, Char * line, unsigned length) +_WriteSelectionData(TScreen * screen, Char * line, size_t length) { /* Write data to pty a line at a time. */ /* Doing this one line at a time may no longer be necessary @@ -1792,7 +1800,7 @@ _WriteKey(TScreen * screen, Char * in) { Char line[16]; unsigned count = 0; - unsigned length = strlen((char *) in); + size_t length = strlen((char *) in); if (screen->control_eight_bits) { line[count++] = ANSI_CSI; @@ -1912,7 +1920,7 @@ SelectionReceived(Widget w, } #endif for (i = 0; i < text_list_count; i++) { - unsigned len = strlen(text_list[i]); + size_t len = strlen(text_list[i]); _WriteSelectionData(screen, (Char *) text_list[i], len); } #if OPT_PASTE64 @@ -2496,23 +2504,23 @@ PointToCELL(TScreen * screen, static int LastTextCol(TScreen * screen, LineData * ld, int row) { - int i; + int i = -1; Char *ch; - if (okScrnRow(screen, row)) { - for (i = screen->max_col, - ch = ld->attribs + i; - i >= 0 && !(*ch & CHARDRAWN); - ch--, i--) { - ; - } + if (ld != 0) { + if (okScrnRow(screen, row)) { + for (i = screen->max_col, + ch = ld->attribs + i; + i >= 0 && !(*ch & CHARDRAWN); + ch--, i--) { + ; + } #if OPT_DEC_CHRSET - if (CSET_DOUBLE(GetLineDblCS(ld))) { - i *= 2; - } + if (CSET_DOUBLE(GetLineDblCS(ld))) { + i *= 2; + } #endif - } else { - i = -1; + } } return (i); } @@ -2736,7 +2744,7 @@ static char * make_indexed_text(TScreen * screen, int row, unsigned length, int *indexed) { Char *result = 0; - unsigned need = (length + 1); + size_t need = (length + 1); /* * Get a quick upper bound to the number of bytes needed, if the whole @@ -2781,13 +2789,13 @@ make_indexed_text(TScreen * screen, int row, unsigned length, int *indexed) } }); - indexed[used] = last - result; + indexed[used] = (int) (last - result); *next = 0; /* TRACE(("index[%d.%d] %d:%s\n", row, used, indexed[used], last)); */ last = next; ++used; ++col; - indexed[used] = next - result; + indexed[used] = (int) (next - result); } } while (used < length && LineTstWrapped(ld) && @@ -2903,7 +2911,7 @@ do_select_regex(TScreen * screen, CELL * startc, CELL * endc) for (col = 0; indexed[col] < len; ++col) { if (regexec(&preg, search + indexed[col], - 1, &match, 0) == 0) { + (size_t) 1, &match, 0) == 0) { int start_inx = match.rm_so + indexed[col]; int finis_inx = match.rm_eo + indexed[col]; int start_col = indexToCol(indexed, len, start_inx); @@ -3317,7 +3325,7 @@ SaltTextAway(XtermWidget xw, /* now get some memory to save it in */ if (screen->selection_size <= j) { - if ((line = (Char *) malloc((unsigned) j + 1)) == 0) + if ((line = (Char *) malloc((size_t) j + 1)) == 0) SysError(ERROR_BMALLOC2); XtFree((char *) screen->selection_data); screen->selection_data = line; @@ -3364,7 +3372,7 @@ ClearSelectionBuffer(TScreen * screen) } static void -AppendStrToSelectionBuffer(TScreen * screen, Char * text, unsigned len) +AppendStrToSelectionBuffer(TScreen * screen, Char * text, size_t len) { if (len != 0) { int j = (int) (screen->selection_length + len); /* New length */ @@ -3373,7 +3381,7 @@ AppendStrToSelectionBuffer(TScreen * screen, Char * text, unsigned len) if (!screen->selection_length) { /* New buffer */ Char *line; - if ((line = (Char *) malloc((unsigned) k)) == 0) + if ((line = (Char *) malloc((size_t) k)) == 0) SysError(ERROR_BMALLOC2); XtFree((char *) screen->selection_data); screen->selection_data = line; @@ -3381,7 +3389,7 @@ AppendStrToSelectionBuffer(TScreen * screen, Char * text, unsigned len) /* Realloc buffer */ screen->selection_data = (Char *) realloc(screen->selection_data, - (unsigned) k); + (size_t) k); if (screen->selection_data == 0) SysError(ERROR_BMALLOC2); } @@ -3423,21 +3431,21 @@ AppendToSelectionBuffer(TScreen * screen, unsigned c) case 2: ch = CharOf((screen->base64_accu << 6) + six); screen->base64_count = 0; - AppendStrToSelectionBuffer(screen, &ch, 1); + AppendStrToSelectionBuffer(screen, &ch, (size_t) 1); break; case 4: ch = CharOf((screen->base64_accu << 4) + (six >> 2)); screen->base64_accu = (six & 0x3); screen->base64_count = 2; - AppendStrToSelectionBuffer(screen, &ch, 1); + AppendStrToSelectionBuffer(screen, &ch, (size_t) 1); break; case 6: ch = CharOf((screen->base64_accu << 2) + (six >> 4)); screen->base64_accu = (six & 0xF); screen->base64_count = 4; - AppendStrToSelectionBuffer(screen, &ch, 1); + AppendStrToSelectionBuffer(screen, &ch, (size_t) 1); break; } } @@ -3497,13 +3505,15 @@ SaveConvertedLength(XtPointer *target, unsigned long source) if (sizeof(unsigned long) == 4) { *(unsigned long *) *target = source; } else if (sizeof(unsigned) == 4) { - *(unsigned *) *target = source; + *(unsigned *) *target = (unsigned) source; } else if (sizeof(unsigned short) == 4) { *(unsigned short *) *target = (unsigned short) source; } else { /* FIXME - does this depend on byte-order? */ unsigned long temp = source; - memcpy((char *) *target, ((char *) &temp) + sizeof(temp) - 4, 4); + memcpy((char *) *target, + ((char *) &temp) + sizeof(temp) - 4, + (size_t) 4); } } return result; @@ -3644,7 +3654,7 @@ ConvertSelection(Widget w, } #endif else if (*target == XA_LIST_LENGTH(dpy)) { - result = SaveConvertedLength(value, 1); + result = SaveConvertedLength(value, (unsigned long) 1); *type = XA_INTEGER; *length = 1; *format = 32; @@ -3726,6 +3736,8 @@ _OwnSelection(XtermWidget xw, Cardinal i; Bool have_selection = False; + if (count == 0) + return; if (screen->selection_length == 0) return; diff --git a/app/xterm/cachedGCs.c b/app/xterm/cachedGCs.c index 9a5970ff0..3b5608279 100644 --- a/app/xterm/cachedGCs.c +++ b/app/xterm/cachedGCs.c @@ -1,8 +1,8 @@ -/* $XTermId: cachedGCs.c,v 1.56 2009/11/28 13:24:07 tom Exp $ */ +/* $XTermId: cachedGCs.c,v 1.59 2010/04/15 00:00:17 tom Exp $ */ /************************************************************ -Copyright 2007-2008,2009 by Thomas E. Dickey +Copyright 2007-2009,2010 by Thomas E. Dickey All Rights Reserved @@ -65,7 +65,7 @@ typedef struct { } CgsCacheData; #define DEPTH 8 -#define ITEM() (me->data - me->list) +#define ITEM() (int) (me->data - me->list) #define LIST(item) me->list[item] #define LINK(item) me->data = (me->list + (item)) #define THIS(field) me->data->field @@ -549,7 +549,7 @@ clrCgsFonts(XtermWidget xw, VTwin * cgsWin, XTermFonts * font) traceFont(font))); NEXT(font) = 0; NEXT(cset) = 0; - me->mask &= ~(GCFont | GC_CSet); + me->mask &= (unsigned) ~(GCFont | GC_CSet); } } } diff --git a/app/xterm/charproc.c b/app/xterm/charproc.c index 42b530a4e..b996ac412 100644 --- a/app/xterm/charproc.c +++ b/app/xterm/charproc.c @@ -1,4 +1,4 @@ -/* $XTermId: charproc.c,v 1.1033 2010/01/20 01:59:19 tom Exp $ */ +/* $XTermId: charproc.c,v 1.1055 2010/04/18 17:48:58 tom Exp $ */ /* @@ -225,6 +225,11 @@ static char defaultTranslations[] = Shift <KeyPress> Select:select-cursor-start() select-cursor-end(SELECT, CUT_BUFFER0) \n\ Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\ " +#if OPT_SCROLL_LOCK +"\ + <KeyRelease> Scroll_Lock:scroll-lock() \n\ +" +#endif #if OPT_SHIFT_FONTS "\ Shift~Ctrl <KeyPress> KP_Add:larger-vt-font() \n\ @@ -386,6 +391,9 @@ static XtActionsRec actionsList[] = { #if OPT_SCO_FUNC_KEYS { "set-sco-function-keys", HandleScoFunctionKeys }, #endif +#if OPT_SCROLL_LOCK + { "scroll-lock", HandleScrollLock }, +#endif #if OPT_SHIFT_FONTS { "larger-vt-font", HandleLargerFont }, { "smaller-vt-font", HandleSmallerFont }, @@ -718,6 +726,10 @@ static XtResource xterm_resources[] = Sres(XtNximFont, XtCXimFont, misc.f_x, DEFXIMFONT), #endif +#if OPT_SCROLL_LOCK + Bres(XtNallowScrollLock, XtCAllowScrollLock, screen.allowScrollLock0, True), +#endif + #if OPT_XMC_GLITCH Bres(XtNxmcInline, XtCXmcInline, screen.xmc_inline, False), Bres(XtNxmcMoveSGR, XtCXmcMoveSGR, screen.move_sgr_ok, True), @@ -851,6 +863,9 @@ xtermAddInput(Widget w) #if OPT_DABBREV { "dabbrev-expand", HandleDabbrevExpand }, #endif +#if OPT_SCROLL_LOCK + { "scroll-lock", HandleScrollLock }, +#endif #if OPT_SHIFT_FONTS { "larger-vt-font", HandleLargerFont }, { "smaller-vt-font", HandleSmallerFont }, @@ -882,21 +897,24 @@ CheckBogusForeground(TScreen * screen, const char *tag) row = screen->cur_row; for (; isClear && (row <= screen->max_row); ++row) { LineData *ld = getLineData(screen, row)->; - Char *attribs = ld->attribs; - - col = (row == screen->cur_row) ? screen->cur_col : 0; - for (; isClear && (col <= screen->max_col); ++col) { - unsigned flags = attribs[col]; - if (pass) { - flags &= ~FG_COLOR; - attribs[col] = (Char) flags; - } else if ((flags & BG_COLOR)) { - isClear = False; - } else if ((flags & FG_COLOR)) { - unsigned ch = ld->charData[col]; - isClear = ((ch == ' ') || (ch == 0)); - } else { - isClear = False; + + if (ld != 0) { + Char *attribs = ld->attribs; + + col = (row == screen->cur_row) ? screen->cur_col : 0; + for (; isClear && (col <= screen->max_col); ++col) { + unsigned flags = attribs[col]; + if (pass) { + flags &= ~FG_COLOR; + attribs[col] = (Char) flags; + } else if ((flags & BG_COLOR)) { + isClear = False; + } else if ((flags & FG_COLOR)) { + unsigned ch = ld->charData[col]; + isClear = ((ch == ' ') || (ch == 0)); + } else { + isClear = False; + } } } } @@ -924,9 +942,9 @@ SGR_Foreground(XtermWidget xw, int color) Pixel fg; if (color >= 0) { - xw->flags |= FG_COLOR; + UIntSet(xw->flags, FG_COLOR); } else { - xw->flags &= ~FG_COLOR; + UIntClr(xw->flags, FG_COLOR); } fg = getXtermForeground(xw, xw->flags, color); xw->cur_foreground = color; @@ -969,9 +987,9 @@ SGR_Background(XtermWidget xw, int color) FlushScroll(xw); if (color >= 0) { - xw->flags |= BG_COLOR; + UIntSet(xw->flags, BG_COLOR); } else { - xw->flags &= ~BG_COLOR; + UIntClr(xw->flags, BG_COLOR); } bg = getXtermBackground(xw, xw->flags, color); xw->cur_background = color; @@ -1223,7 +1241,7 @@ which_table(Const PARSE_T * table) /* allocate larger buffer if needed/possible */ #define SafeAlloc(type, area, used, size) \ type *new_string = area; \ - unsigned new_length = size; \ + size_t new_length = size; \ if (new_length == 0) { \ new_length = 256; \ new_string = TypeMallocN(type, new_length); \ @@ -1556,8 +1574,8 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) SafeAlloc(IChar, sp->print_area, sp->print_used, sp->print_size); if (new_string == 0) { fprintf(stderr, - "Cannot allocate %u bytes for printable text\n", - new_length); + "Cannot allocate %lu bytes for printable text\n", + (unsigned long) new_length); continue; } #if OPT_VT52_MODE @@ -1594,8 +1612,8 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) SafeAlloc(Char, sp->string_area, sp->string_used, sp->string_size); if (new_string == 0) { fprintf(stderr, - "Cannot allocate %u bytes for string mode %d\n", - new_length, sp->string_mode); + "Cannot allocate %lu bytes for string mode %d\n", + (unsigned long) new_length, sp->string_mode); continue; } #if OPT_WIDE_CHARS @@ -2115,8 +2133,8 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) switch (param[row]) { case DEFAULT: case 0: - xw->flags &= - ~(INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE); + UIntClr(xw->flags, + (INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE)); if_OPT_ISO_COLORS(screen, { reset_SGR_Colors(xw); }); @@ -2150,31 +2168,31 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) xw->flags |= INVISIBLE; break; case 22: /* reset 'bold' */ - xw->flags &= ~BOLD; + UIntClr(xw->flags, BOLD); if_OPT_ISO_COLORS(screen, { setExtendedFG(xw); }); break; case 24: - xw->flags &= ~UNDERLINE; + UIntClr(xw->flags, UNDERLINE); if_OPT_ISO_COLORS(screen, { setExtendedFG(xw); }); break; case 25: /* reset 'blink' */ - xw->flags &= ~BLINK; + UIntClr(xw->flags, BLINK); if_OPT_ISO_COLORS(screen, { setExtendedFG(xw); }); break; case 27: - xw->flags &= ~INVERSE; + UIntClr(xw->flags, INVERSE); if_OPT_ISO_COLORS(screen, { setExtendedBG(xw); }); break; case 28: - xw->flags &= ~INVISIBLE; + UIntClr(xw->flags, INVISIBLE); break; case 30: case 31: @@ -2495,7 +2513,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) case CASE_DECKPNM: TRACE(("CASE_DECKPNM\n")); - xw->keyboard.flags &= ~MODE_DECKPAM; + UIntClr(xw->keyboard.flags, MODE_DECKPAM); update_appkeypad(); sp->parsestate = sp->groundtable; break; @@ -2554,6 +2572,35 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) break; #endif +#if OPT_SCROLL_LOCK + case CASE_DECLL: + TRACE(("CASE_DECLL\n")); + if (nparam > 0) { + for (count = 0; count < nparam; ++count) { + switch (param[count]) { + case 0: + case DEFAULT: + xtermClearLEDs(screen); + break; + case 1: + case 2: + case 3: + xtermShowLED(screen, (Cardinal) param[count], True); + break; + case 21: + case 22: + case 23: + xtermShowLED(screen, (Cardinal) (param[count] - 20), True); + break; + } + } + } else { + xtermClearLEDs(screen); + } + sp->parsestate = sp->groundtable; + break; +#endif + #if OPT_VT52_MODE case CASE_VT52_FINISH: TRACE(("CASE_VT52_FINISH terminal_id %d, vtXX_level %d\n", @@ -2619,7 +2666,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) TRACE(("CASE_DECSCA\n")); screen->protected_mode = DEC_PROTECT; if (param[0] <= 0 || param[0] == 2) - xw->flags &= ~PROTECTED; + UIntClr(xw->flags, PROTECTED); else if (param[0] == 1) xw->flags |= PROTECTED; sp->parsestate = sp->groundtable; @@ -2638,7 +2685,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) break; case CASE_ST: - TRACE(("CASE_ST: End of String (%d bytes)\n", sp->string_used)); + TRACE(("CASE_ST: End of String (%lu bytes)\n", (unsigned long) sp->string_used)); sp->parsestate = sp->groundtable; if (!sp->string_used) break; @@ -2695,7 +2742,7 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) case CASE_EPA: TRACE(("CASE_EPA - end protected area\n")); - xw->flags &= ~PROTECTED; + UIntClr(xw->flags, PROTECTED); sp->parsestate = sp->groundtable; break; @@ -2835,13 +2882,13 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) screen->locator_events |= LOC_BTNS_DN; break; case 2: - screen->locator_events &= ~LOC_BTNS_DN; + UIntClr(screen->locator_events, LOC_BTNS_DN); break; case 3: screen->locator_events |= LOC_BTNS_UP; break; case 4: - screen->locator_events &= ~LOC_BTNS_UP; + UIntClr(screen->locator_events, LOC_BTNS_UP); break; } } @@ -3044,12 +3091,12 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) * command-line, allow it to be enabled/disabled by * control sequence. */ - if (!screen->wide_chars) { - WriteNow(); - ChangeToWide(xw); - } if (screen->wide_chars && screen->utf8_mode != uAlways) { + if (!screen->wide_chars) { + WriteNow(); + ChangeToWide(xw); + } switchPtyData(screen, c == 'G'); TRACE(("UTF8 mode %s\n", BtoS(screen->utf8_mode))); @@ -3209,7 +3256,7 @@ static Char *v_bufend; /* end of physical buffer */ /* Write data to the pty as typed by the user, pasted with the mouse, or generated by us in response to a query ESC sequence. */ -int +void v_write(int f, Char * data, unsigned len) { int riten; @@ -3233,11 +3280,15 @@ v_write(int f, Char * data, unsigned len) #endif #ifdef VMS - if ((1 << f) != pty_mask) - return (tt_write((char *) data, len)); + if ((1 << f) != pty_mask) { + tt_write((char *) data, len); + return; + } #else /* VMS */ - if (!FD_ISSET(f, &pty_mask)) - return (write(f, (char *) data, len)); + if (!FD_ISSET(f, &pty_mask)) { + IGNORE_RC(write(f, (char *) data, (size_t) len)); + return; + } #endif /* VMS */ /* @@ -3262,7 +3313,7 @@ v_write(int f, Char * data, unsigned len) fprintf(stderr, "moving data down %d\n", v_bufstr - v_buffer); #endif - memmove(v_buffer, v_bufstr, (unsigned) (v_bufptr - v_bufstr)); + memmove(v_buffer, v_bufstr, (size_t) (v_bufptr - v_bufstr)); v_bufptr -= v_bufstr - v_buffer; v_bufstr = v_buffer; } @@ -3291,7 +3342,7 @@ v_write(int f, Char * data, unsigned len) } if (v_bufend >= v_bufptr + len) { /* new stuff will fit */ - memmove(v_bufptr, data, len); + memmove(v_bufptr, data, (size_t) len); v_bufptr += len; } } @@ -3322,10 +3373,10 @@ v_write(int f, Char * data, unsigned len) if (riten == 0) return (riten); #else /* VMS */ - riten = write(f, v_bufstr, - (size_t) ((v_bufptr - v_bufstr <= MAX_PTY_WRITE) - ? v_bufptr - v_bufstr - : MAX_PTY_WRITE)); + riten = (int) write(f, v_bufstr, + (size_t) ((v_bufptr - v_bufstr <= MAX_PTY_WRITE) + ? v_bufptr - v_bufstr + : MAX_PTY_WRITE)); if (riten < 0) #endif /* VMS */ { @@ -3352,8 +3403,8 @@ v_write(int f, Char * data, unsigned len) */ if (v_bufend - v_bufptr > 1024) { /* arbitrary hysteresis */ /* save pointers across realloc */ - int start = v_bufstr - v_buffer; - int size = v_bufptr - v_buffer; + int start = (int) (v_bufstr - v_buffer); + int size = (int) (v_bufptr - v_buffer); unsigned allocsize = (unsigned) (size ? size : 1); v_buffer = TypeRealloc(Char, allocsize, v_buffer); @@ -3370,7 +3421,6 @@ v_write(int f, Char * data, unsigned len) v_buffer = v_bufstr - start; /* restore clobbered pointer */ } } - return ((int) c); } #ifdef VMS @@ -3424,7 +3474,7 @@ in_put(XtermWidget xw) && screen->scrollttyoutput && screen->topline < 0) /* Scroll to bottom */ - WindowScroll(xw, 0); + WindowScroll(xw, 0, False); break; } if (screen->scroll_amt) @@ -3497,10 +3547,10 @@ in_put(XtermWidget xw) if (screen->scrollWidget && screen->scrollttyoutput && screen->topline < 0) - WindowScroll(xw, 0); /* Scroll to bottom */ + WindowScroll(xw, 0, False); /* Scroll to bottom */ /* stop speed reading at some point to look for X stuff */ - TRACE(("VTbuffer uses %d/%d\n", - VTbuffer->last - VTbuffer->buffer, + TRACE(("VTbuffer uses %ld/%d\n", + (long) (VTbuffer->last - VTbuffer->buffer), BUF_SIZE)); if ((VTbuffer->last - VTbuffer->buffer) > BUF_SIZE) { FD_CLR(screen->respond, &select_mask); @@ -5270,7 +5320,7 @@ SwitchBufPtrs(TScreen * screen, int toBuf GCC_UNUSED) #if OPT_SAVE_LINES screen->visbuf = screen->editBuf_index[toBuf]; #else - size_t len = ScrnPointers(screen, (unsigned) MaxRows(screen)); + size_t len = ScrnPointers(screen, (size_t) MaxRows(screen)); memcpy(screen->save_ptr, screen->visbuf, len); memcpy(screen->visbuf, screen->editBuf_index[1], len); @@ -5305,7 +5355,7 @@ VTRun(XtermWidget xw) #if OPT_TEK4014 if (Tpushb > Tpushback) { - fillPtyData(screen, VTbuffer, (char *) Tpushback, Tpushb - Tpushback); + fillPtyData(screen, VTbuffer, (char *) Tpushback, (int) (Tpushb - Tpushback)); Tpushb = Tpushback; } #endif @@ -5588,7 +5638,7 @@ fill_Tres(XtermWidget target, XtermWidget source, int offset) : TScreenOf(target)->Tcolors[TEXT_BG].value); } else { memset(&temp, 0, sizeof(temp)); - if (AllocateTermColor(target, &temp, offset, name)) { + if (AllocateTermColor(target, &temp, offset, name, True)) { if (COLOR_DEFINED(&(temp), offset)) free(temp.names[offset]); TScreenOf(target)->Tcolors[offset].value = temp.colors[offset]; @@ -5689,12 +5739,12 @@ VTInitialize_locale(XtermWidget xw) #ifdef MB_CUR_MAX MB_CUR_MAX > 1 || #else - !strncmp(xtermEnvLocale(), "ja", 2) || - !strncmp(xtermEnvLocale(), "ko", 2) || - !strncmp(xtermEnvLocale(), "zh", 2) || + !strncmp(xtermEnvLocale(), "ja", (size_t) 2) || + !strncmp(xtermEnvLocale(), "ko", (size_t) 2) || + !strncmp(xtermEnvLocale(), "zh", (size_t) 2) || #endif - !strncmp(xtermEnvLocale(), "th", 2) || - !strncmp(xtermEnvLocale(), "vi", 2)) { + !strncmp(xtermEnvLocale(), "th", (size_t) 2) || + !strncmp(xtermEnvLocale(), "vi", (size_t) 2)) { xw->misc.callfilter = 1; screen->utf8_mode = uAlways; } else { @@ -5773,7 +5823,7 @@ ParseList(const char **source) { const char *base = *source; const char *next; - unsigned size; + size_t size; char *value = 0; char *result; @@ -5784,7 +5834,7 @@ ParseList(const char **source) next = base; while (*next != '\0' && *next != ',') ++next; - size = (unsigned) (1 + next - base); + size = (size_t) (1 + next - base); value = malloc(size); if (value != 0) { memcpy(value, base, size); @@ -6137,6 +6187,10 @@ VTInitialize(Widget wrequest, init_Bres(screen.allowTitleOp0); init_Bres(screen.allowWindowOp0); +#if OPT_SCROLL_LOCK + init_Bres(screen.allowScrollLock0); +#endif + init_Sres(screen.disallowedColorOps); set_flags_from_list(TScreenOf(wnew)->disallow_color_ops, @@ -6179,6 +6233,10 @@ VTInitialize(Widget wrequest, TScreenOf(wnew)->allowTitleOps = TScreenOf(wnew)->allowTitleOp0; TScreenOf(wnew)->allowWindowOps = TScreenOf(wnew)->allowWindowOp0; +#if OPT_SCROLL_LOCK + TScreenOf(wnew)->allowScrollLock = TScreenOf(wnew)->allowScrollLock0; +#endif + init_Bres(screen.quiet_grab); #ifndef NO_ACTIVE_ICON @@ -6479,11 +6537,7 @@ VTInitialize(Widget wrequest, TRACE(("initialized unicode_font to %d\n", TScreenOf(wnew)->unicode_font)); #endif - decode_wcwidth((wnew->misc.cjk_width ? 2 : 0) - + (wnew->misc.mk_width ? 1 : 0) - + 1, - wnew->misc.mk_samplesize, - wnew->misc.mk_samplepass); + decode_wcwidth(wnew); #endif /* OPT_WIDE_CHARS */ init_Bres(screen.always_bold_mode); @@ -6716,16 +6770,38 @@ VTDestroy(Widget w GCC_UNUSED) } #endif -#if 0 /* some strings may be owned by X libraries */ - for (n = 0; n <= fontMenu_lastBuiltin; ++n) { - int k; - for (k = 0; k < fMAX; ++k) { - char *s = screen->menu_font_names[n][k]; - if (s != 0) - free(s); - } + /* free things allocated via init_Sres or Init_Sres2 */ +#ifdef ALLOWLOGGING + TRACE_FREE_LEAK(screen->logfile); +#endif + TRACE_FREE_LEAK(screen->term_id); + TRACE_FREE_LEAK(screen->charClass); + TRACE_FREE_LEAK(screen->answer_back); + TRACE_FREE_LEAK(screen->printer_command); + TRACE_FREE_LEAK(screen->keyboard_dialect); + TRACE_FREE_LEAK(screen->disallowedColorOps); + TRACE_FREE_LEAK(screen->disallowedFontOps); + TRACE_FREE_LEAK(screen->disallowedTcapOps); + TRACE_FREE_LEAK(screen->disallowedWinOps); + TRACE_FREE_LEAK(screen->default_string); + TRACE_FREE_LEAK(screen->eightbit_select_types); +#if OPT_WIDE_CHARS + TRACE_FREE_LEAK(screen->utf8_select_types); +#endif +#if 0 + for (n = fontMenu_font1; n <= fontMenu_lastBuiltin; n++) { + TRACE_FREE_LEAK(screen->MenuFontName(n)); } #endif + TRACE_FREE_LEAK(screen->initial_font); +#if OPT_LUIT_PROG + TRACE_FREE_LEAK(xw->misc.locale_str); + TRACE_FREE_LEAK(xw->misc.localefilter); +#endif +#if OPT_RENDERFONT + TRACE_FREE_LEAK(xw->misc.face_name); + TRACE_FREE_LEAK(xw->misc.face_wide_name); +#endif #if OPT_SELECT_REGEX for (n = 0; n < NSELECTUNITS; ++n) { @@ -7138,7 +7214,7 @@ xim_real_init(XtermWidget xw) screen->xim = XOpenIM(XtDisplay(xw), NULL, NULL, NULL); } else { s = xw->misc.input_method; - i = 5 + strlen(s); + i = 5 + (unsigned) strlen(s); t = (char *) MyStackAlloc(i, buf); if (t == NULL) SysError(ERROR_VINIT); @@ -7155,7 +7231,7 @@ xim_real_init(XtermWidget xw) if (end != s) { strcpy(t, "@im="); - strncat(t, s, (unsigned) (end - s)); + strncat(t, s, (size_t) (end - s)); if ((p = XSetLocaleModifiers(t)) != 0 && *p && (screen->xim = XOpenIM(XtDisplay(xw), @@ -7205,10 +7281,10 @@ xim_real_init(XtermWidget xw) end--; if (end != s) { /* just in case we have a spurious comma */ - TRACE(("looking for style '%.*s'\n", end - s, s)); + TRACE(("looking for style '%.*s'\n", (int) (end - s), s)); for (i = 0; i < XtNumber(known_style); i++) { if ((int) strlen(known_style[i].name) == (end - s) - && !strncmp(s, known_style[i].name, (unsigned) (end - s))) { + && !strncmp(s, known_style[i].name, (size_t) (end - s))) { input_style = known_style[i].code; for (j = 0; j < xim_styles->count_styles; j++) { if (input_style == xim_styles->supported_styles[j]) { @@ -7915,7 +7991,7 @@ HandleBlinking(XtPointer closure, XtIntervalId * id GCC_UNUSED) #if OPT_BLINK_TEXT /* - * Inspect the line on the current screen to see if any have the BLINK flag + * Inspect the lines on the current screen to see if any have the BLINK flag * associated with them. Prune off any that have had the corresponding * cells reset. If any are left, repaint those lines with ScrnRefresh(). */ @@ -7926,7 +8002,8 @@ HandleBlinking(XtPointer closure, XtIntervalId * id GCC_UNUSED) for (row = screen->max_row; row >= 0; row--) { LineData *ld = getLineData(screen, ROW2INX(screen, row)); - if (LineTstBlinked(ld)) { + + if (ld != 0 && LineTstBlinked(ld)) { if (LineHasBlinking(screen, ld)) { resume = True; if (row > last_row) @@ -7979,7 +8056,8 @@ RestartBlinking(TScreen * screen GCC_UNUSED) for (row = screen->max_row; row >= 0; row--) { LineData *ld = getLineData(screen, ROW2INX(screen, row)); - if (LineTstBlinked(ld)) { + + if (ld != 0 && LineTstBlinked(ld)) { if (LineHasBlinking(screen, ld)) { resume = True; break; @@ -8121,7 +8199,7 @@ VTReset(XtermWidget xw, Bool full, Bool saved) * We reset autowrap to the resource values rather than turning * it off. */ - xw->keyboard.flags &= ~(MODE_DECCKM | MODE_KAM | MODE_DECKPAM); + UIntClr(xw->keyboard.flags, (MODE_DECCKM | MODE_KAM | MODE_DECKPAM)); bitcpy(&xw->flags, xw->initflags, WRAPAROUND | REVERSEWRAP); bitclr(&xw->flags, INSERT | INVERSE | BOLD | BLINK | UNDERLINE | INVISIBLE); if_OPT_ISO_COLORS(screen, { @@ -8353,7 +8431,7 @@ DoSetSelectedFont(Widget w, char *val; char *test = 0; char *used = 0; - unsigned len = *length; + unsigned len = (unsigned) *length; unsigned tst; /* @@ -8367,7 +8445,7 @@ DoSetSelectedFont(Widget w, } if (len > 0 && (val = TypeMallocN(char, len + 1)) != 0) { - memcpy(val, value, len); + memcpy(val, value, (size_t) len); val[len] = '\0'; used = x_strtrim(val); TRACE(("DoSetSelectedFont(%s)\n", val)); @@ -8426,7 +8504,8 @@ FindFontSelection(XtermWidget xw, const char *atom_name, Bool justprobe) } if (!a) { atoms = (AtomPtr *) XtRealloc((char *) atoms, - sizeof(AtomPtr) * (atomCount + 1)); + (Cardinal) sizeof(AtomPtr) + * (atomCount + 1)); *(pAtom = &atoms[atomCount++]) = XmuMakeAtom(atom_name); } diff --git a/app/xterm/configure.in b/app/xterm/configure.in index 63f7c753a..33ea78102 100644 --- a/app/xterm/configure.in +++ b/app/xterm/configure.in @@ -1,4 +1,4 @@ -dnl $XTermId: configure.in,v 1.256 2010/01/04 21:41:10 tom Exp $ +dnl $XTermId: configure.in,v 1.262 2010/04/21 00:16:24 tom Exp $ dnl dnl ----------------------------------------------------------------------------- dnl this file is part of xterm @@ -280,7 +280,9 @@ AC_CHECK_HEADERS( \ X11/DECkeysym.h \ X11/Sunkeysym.h \ X11/XF86keysym.h \ + X11/XKBlib.h \ X11/Xpoll.h \ + X11/extensions/XKB.h \ ) CF_X_ATHENA @@ -300,7 +302,10 @@ freebsd*|netbsd*|dragonfly*) # 2004/8/15 - revisit this if/when grantpt is known ;; esac +AC_CHECK_FUNCS(XkbQueryExtension) + CF_XKB_BELL_EXT + AC_CHECK_FUNCS(Xutf8LookupString, [],[ EXTRAHDRS="$EXTRAHDRS xutf8.h" EXTRASRCS="$EXTRASRCS xutf8.c" @@ -583,7 +588,7 @@ fi AC_MSG_CHECKING(if you want saved-lines stored as a FIFO) CF_ARG_DISABLE(fifo-lines, - [ --enable-fifo-lines disable FIFO-storage for saved-lines], + [ --disable-fifo-lines disable FIFO-storage for saved-lines], [enable_fifo_lines=no], [enable_fifo_lines=yes]) AC_MSG_RESULT($enable_fifo_lines) @@ -981,5 +986,8 @@ do CPPFLAGS=`echo "$CPPFLAGS" | sed -e s/-D$cf_def//` done +CF_MAKE_TAGS +CF_DISABLE_RPATH_HACK + ### output Makefile and xtermcfg.h AC_OUTPUT(Makefile) diff --git a/app/xterm/ctlseqs.ms b/app/xterm/ctlseqs.ms index 0ba3a2548..58c90aab7 100644 --- a/app/xterm/ctlseqs.ms +++ b/app/xterm/ctlseqs.ms @@ -1,6 +1,6 @@ .\"#! troff -ms $1 -*- Nroff -*- .\" "Xterm Control Sequences" document -.\" $XTermId: ctlseqs.ms,v 1.211 2010/01/04 09:12:55 tom Exp $ +.\" $XTermId: ctlseqs.ms,v 1.213 2010/04/18 14:52:50 Emanuele.Giaquinta Exp $ .\" .\" .\" Copyright 1996-2009,2010 by Thomas E. Dickey @@ -1085,6 +1085,16 @@ Valid values for the second parameter: \*(Ps = \*1 \(-> 7-bit controls (always set for VT100) \*(Ps = \*2 \(-> 8-bit controls . +.IP \\*(Cs\\*(Ps\\*s\\*q +Load LEDs (DECLL) + \*(Ps = \*0 \(-> Clear all LEDS (default) + \*(Ps = \*1 \(-> Light Num Lock + \*(Ps = \*2 \(-> Light Caps Lock + \*(Ps = \*3 \(-> Light Scroll Lock + \*(Ps = \*2 \*1 \(-> Extinguish Num Lock + \*(Ps = \*2 \*2 \(-> Extinguish Caps Lock + \*(Ps = \*2 \*3 \(-> Extinguish Scroll Lock +. .IP \\*(Cs\\*(Ps\\*s\\*(Sp\\*q Set cursor style (DECSCUSR, VT520) \*(Ps = \*0 \(-> blinking block @@ -1375,8 +1385,9 @@ be given in one control sequence, \fBxterm\fR can make more than one reply. \*(Ps = \*1\*4 \(-> Change mouse background color to \*(Pt \*(Ps = \*1\*5 \(-> Change Tektronix foreground color to \*(Pt \*(Ps = \*1\*6 \(-> Change Tektronix background color to \*(Pt - \*(Ps = \*1\*7 \(-> Change highlight color to \*(Pt + \*(Ps = \*1\*7 \(-> Change highlight background color to \*(Pt \*(Ps = \*1\*8 \(-> Change Tektronix cursor color to \*(Pt + \*(Ps = \*1\*9 \(-> Change highlight foreground color to \*(Pt .sp \*(Ps = \*4\*6 \(-> Change Log File to \*(Pt (normally disabled by a compile-time option) diff --git a/app/xterm/ctlseqs.txt b/app/xterm/ctlseqs.txt index d6595be45..9da44691f 100644 --- a/app/xterm/ctlseqs.txt +++ b/app/xterm/ctlseqs.txt @@ -599,6 +599,14 @@ CSI Ps ; Ps " p Ps = 0 -> 8-bit controls Ps = 1 -> 7-bit controls (always set for VT100) Ps = 2 -> 8-bit controls +CSI Ps q Load LEDs (DECLL) + Ps = 0 -> Clear all LEDS (default) + Ps = 1 -> Light Num Lock + Ps = 2 -> Light Caps Lock + Ps = 3 -> Light Scroll Lock + Ps = 2 1 -> Extinguish Num Lock + Ps = 2 2 -> Extinguish Caps Lock + Ps = 2 3 -> Extinguish Scroll Lock CSI Ps SP q Set cursor style (DECSCUSR, VT520) Ps = 0 -> blinking block @@ -859,8 +867,9 @@ OSC Ps ; Pt BEL Ps = 1 4 -> Change mouse background color to Pt Ps = 1 5 -> Change Tektronix foreground color to Pt Ps = 1 6 -> Change Tektronix background color to Pt - Ps = 1 7 -> Change highlight color to Pt + Ps = 1 7 -> Change highlight background color to Pt Ps = 1 8 -> Change Tektronix cursor color to Pt + Ps = 1 9 -> Change highlight foreground color to Pt Ps = 4 6 -> Change Log File to Pt (normally disabled by a compile-time option) diff --git a/app/xterm/cursor.c b/app/xterm/cursor.c index 2c5b1892c..e25a9f801 100644 --- a/app/xterm/cursor.c +++ b/app/xterm/cursor.c @@ -1,7 +1,7 @@ -/* $XTermId: cursor.c,v 1.54 2009/11/28 13:26:13 tom Exp $ */ +/* $XTermId: cursor.c,v 1.55 2010/04/17 17:12:01 tom Exp $ */ /* - * Copyright 2002-2008,2009 by Thomas E. Dickey + * Copyright 2002-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -310,8 +310,8 @@ CursorRestore(XtermWidget xw) resetCharsets(screen); } - xw->flags &= ~DECSC_FLAGS; - xw->flags |= sc->flags & DECSC_FLAGS; + UIntClr(xw->flags, DECSC_FLAGS); + UIntSet(xw->flags, sc->flags & DECSC_FLAGS); CursorSet(screen, ((xw->flags & ORIGIN) ? sc->row - screen->top_marg diff --git a/app/xterm/doublechr.c b/app/xterm/doublechr.c index bcfcddae3..210a41ab8 100644 --- a/app/xterm/doublechr.c +++ b/app/xterm/doublechr.c @@ -1,4 +1,4 @@ -/* $XTermId: doublechr.c,v 1.73 2009/11/28 13:28:03 tom Exp $ */ +/* $XTermId: doublechr.c,v 1.74 2010/04/16 08:45:59 tom Exp $ */ /************************************************************ @@ -293,7 +293,7 @@ xterm_DoubleGC(XtermWidget xw, result = getCgsGC(xw, cgsWin, cgsId); *inxp = n; } else if (flags & BOLD) { - flags &= ~BOLD; + UIntClr(flags, BOLD); result = xterm_DoubleGC(xw, chrset, flags, old_gc, inxp); } } diff --git a/app/xterm/fontutils.c b/app/xterm/fontutils.c index 8e964f452..33d64e45b 100644 --- a/app/xterm/fontutils.c +++ b/app/xterm/fontutils.c @@ -1,4 +1,4 @@ -/* $XTermId: fontutils.c,v 1.336 2010/01/01 15:02:26 tom Exp $ */ +/* $XTermId: fontutils.c,v 1.340 2010/04/18 16:48:46 tom Exp $ */ /************************************************************ @@ -261,17 +261,20 @@ get_font_name_props(Display * dpy, XFontStruct * fs, char *result) XFontProp *fp; int i; Atom fontatom = XInternAtom(dpy, "FONT", False); - char *name; + char *name = 0; char *str; /* * first get the full font name */ - for (name = 0, i = 0, fp = fs->properties; - i < fs->n_properties; - i++, fp++) - if (fp->name == fontatom) - name = XGetAtomName(dpy, fp->card32); + if (fontatom != 0) { + for (i = 0, fp = fs->properties; i < fs->n_properties; i++, fp++) { + if (fp->name == fontatom) { + name = XGetAtomName(dpy, fp->card32); + break; + } + } + } if (name == 0) return 0; @@ -700,11 +703,13 @@ is_double_width_font_xft(Display * dpy, XftFont * font) * (fs)->max_bounds.width) const VTFontNames * -xtermFontName(char *normal) +xtermFontName(const char *normal) { static VTFontNames data; + if (data.f_n) + free(data.f_n); memset(&data, 0, sizeof(data)); - data.f_n = normal; + data.f_n = x_strdup(normal); return &data; } @@ -1198,7 +1203,7 @@ xtermLoadFont(XtermWidget xw, set_menu_font(True); if (tmpname) { /* if setting escape or sel */ if (screen->MenuFontName(fontnum)) - free(screen->MenuFontName(fontnum)); + free((void *) screen->MenuFontName(fontnum)); screen->MenuFontName(fontnum) = tmpname; if (fontnum == fontMenu_fontescape) { SetItemSensitivity(fontMenuEntries[fontMenu_fontescape].widget, @@ -1417,8 +1422,8 @@ HandleLoadVTFonts(Widget w, if ((xw = getXtermWidget(w)) != 0) { TScreen *screen = TScreenOf(xw); char buf[80]; - char *myName = (*param_count > 0) ? params[0] : empty; - char *convert = (*param_count > 1) ? params[1] : myName; + char *myName = (char *) ((*param_count > 0) ? params[0] : empty); + char *convert = (char *) ((*param_count > 1) ? params[1] : myName); char *myClass = (char *) MyStackAlloc(strlen(convert), buf); int n; @@ -1748,7 +1753,7 @@ getFaceName(XtermWidget xw, Bool wideName GCC_UNUSED) #else char *result = xw->misc.face_name; #endif - if (!IsEmpty(result) && !strncmp(result, "xft:", 4)) + if (!IsEmpty(result) && !strncmp(result, "xft:", (size_t) 4)) result += 4; return x_nonempty(result); } @@ -1835,15 +1840,15 @@ xtermComputeFontInfo(XtermWidget xw, face_size = 14.0; } else { double ratio; - int num = screen->menu_font_sizes[fontnum]; - int den = screen->menu_font_sizes[0]; + long num = screen->menu_font_sizes[fontnum]; + long den = screen->menu_font_sizes[0]; if (den <= 0) den = 1; - ratio = mySquareRoot((1.0 * num) / den); + ratio = mySquareRoot((double) num / (double) den); face_size = (ratio * xw->misc.face_size[0]); - TRACE(("scaled using %3d/%d = %.2f -> %f\n", + TRACE(("scaled using %3ld/%ld = %.2f -> %f\n", num, den, ratio, face_size)); } #else @@ -2689,7 +2694,7 @@ useFaceSizes(XtermWidget xw) if (!result) { Boolean broken_fonts = True; TScreen *screen = TScreenOf(xw); - int first = screen->menu_font_sizes[0]; + long first = screen->menu_font_sizes[0]; lookupFontSizes(xw); for (n = 0; n < NMENUFONTS; n++) { diff --git a/app/xterm/fontutils.h b/app/xterm/fontutils.h index 9d8927cfe..383380343 100644 --- a/app/xterm/fontutils.h +++ b/app/xterm/fontutils.h @@ -1,4 +1,4 @@ -/* $XTermId: fontutils.h,v 1.79 2009/12/31 13:31:52 tom Exp $ */ +/* $XTermId: fontutils.h,v 1.80 2010/04/16 21:23:13 tom Exp $ */ /************************************************************ @@ -40,7 +40,7 @@ authorization. extern Bool xtermLoadDefaultFonts (XtermWidget /* xw */); extern Bool xtermOpenFont (XtermWidget /* xw */, const char */* name */, XTermFonts * /* result */, fontWarningTypes /* warn */, Bool /* force */); extern XTermFonts * xtermCloseFont (XtermWidget /* xw */, XTermFonts * /* fnt */); -extern const VTFontNames * xtermFontName (char */* normal */); +extern const VTFontNames * xtermFontName (const char */* normal */); extern int lookupRelativeFontSize (XtermWidget /* xw */, int /* old */, int /* relative */); extern int xtermGetFont(const char * /* param */); extern int xtermLoadFont (XtermWidget /* xw */, const VTFontNames */* fonts */, Bool /* doresize */, int /* fontnum */); diff --git a/app/xterm/input.c b/app/xterm/input.c index ea8d825c1..f4f579cff 100644 --- a/app/xterm/input.c +++ b/app/xterm/input.c @@ -1,7 +1,7 @@ -/* $XTermId: input.c,v 1.312 2009/12/29 23:45:29 tom Exp $ */ +/* $XTermId: input.c,v 1.324 2010/04/18 17:50:52 tom Exp $ */ /* - * Copyright 1999-2008,2009 by Thomas E. Dickey + * Copyright 1999-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -181,7 +181,7 @@ AdjustAfterInput(XtermWidget xw) TScreen *screen = TScreenOf(xw); if (screen->scrollkey && screen->topline != 0) - WindowScroll(xw, 0); + WindowScroll(xw, 0, False); if (screen->marginbell) { int col = screen->max_col - screen->nmarginbell; if (screen->bellArmed >= 0) { @@ -355,13 +355,13 @@ xtermParamToState(XtermWidget xw, unsigned param) | xw->misc.alt_mods | xw->misc.meta_mods) & xw->misc.other_mods) == 0) { if ((param - MOD_NONE) & MOD_SHIFT) - result |= ShiftMask; + UIntSet(result, ShiftMask); if ((param - MOD_NONE) & MOD_CTRL) - result |= ControlMask; + UIntSet(result, ControlMask); if ((param - MOD_NONE) & MOD_ALT) - result |= xw->misc.alt_mods; + UIntSet(result, xw->misc.alt_mods); if ((param - MOD_NONE) & MOD_META) - result |= xw->misc.meta_mods; + UIntSet(result, xw->misc.meta_mods); } #else (void) xw; @@ -386,19 +386,19 @@ xtermStateToParam(XtermWidget xw, unsigned state) if ((state & xw->misc.other_mods) == 0) { if (state & ShiftMask) { modify_parm += MOD_SHIFT; - state &= ~ShiftMask; + UIntClr(state, ShiftMask); } if (state & ControlMask) { modify_parm += MOD_CTRL; - state &= ~ControlMask; + UIntClr(state, ControlMask); } if ((state & xw->misc.alt_mods) != 0) { modify_parm += MOD_ALT; - state &= ~xw->misc.alt_mods; + UIntClr(state, xw->misc.alt_mods); } if ((state & xw->misc.meta_mods) != 0) { modify_parm += MOD_META; - state &= ~xw->misc.meta_mods; + UIntClr(state, xw->misc.meta_mods); } } if (modify_parm == MOD_NONE) @@ -483,7 +483,7 @@ allowedCharModifiers(XtermWidget xw, unsigned state, KEY_DATA * kd) && Masked(result, ControlMask) == 0) { /* These keys are already associated with the control-key */ if (xw->keyboard.modify_now.other_keys == 0) { - result &= ~ControlMask; + UIntClr(result, ControlMask); } } else if (kd->keysym == XK_Tab || kd->keysym == XK_Return) { ; @@ -495,7 +495,7 @@ allowedCharModifiers(XtermWidget xw, unsigned state, KEY_DATA * kd) } else if (!IsControlOutput(kd) && !IsPredefinedKey(kd->keysym)) { /* Printable keys are already associated with the shift-key */ if (!(result & ControlMask)) { - result &= ~ShiftMask; + UIntClr(result, ShiftMask); } } #if OPT_NUM_LOCK @@ -548,7 +548,7 @@ ModifyOtherKeys(XtermWidget xw, } else if (modify_parm != 0) { if (IsBackarrowToggle(keyboard, kd->keysym, state)) { kd->keysym = XK_Delete; - state &= ~ControlMask; + UIntClr(state, ControlMask); } if (!IsPredefinedKey(kd->keysym)) { state = allowedCharModifiers(xw, state, kd); @@ -836,13 +836,13 @@ Input(XtermWidget xw, #if OPT_WIDE_CHARS if (screen->utf8_mode) { kd.nbytes = Xutf8LookupString(screen->xic, event, - kd.strbuf, sizeof(kd.strbuf), + kd.strbuf, (int) sizeof(kd.strbuf), &kd.keysym, &status_return); } else #endif { kd.nbytes = XmbLookupString(screen->xic, event, - kd.strbuf, sizeof(kd.strbuf), + kd.strbuf, (int) sizeof(kd.strbuf), &kd.keysym, &status_return); } #if OPT_MOD_FKEYS @@ -863,7 +863,7 @@ Input(XtermWidget xw, { static XComposeStatus compose_status = {NULL, 0}; - kd.nbytes = XLookupString(event, kd.strbuf, sizeof(kd.strbuf), + kd.nbytes = XLookupString(event, kd.strbuf, (int) sizeof(kd.strbuf), &kd.keysym, &compose_status); } kd.is_fkey = IsFunctionKey(kd.keysym); @@ -899,7 +899,7 @@ Input(XtermWidget xw, && (evt_state & ShiftMask) == 0) { if (kd.keysym == XK_KP_Add) { kd.keysym = XK_KP_Separator; - evt_state &= ~ShiftMask; + UIntClr(evt_state, ShiftMask); TRACE(("...Input keypad(+), change keysym to " KEYSYM_FMT "\n", @@ -908,7 +908,7 @@ Input(XtermWidget xw, if ((evt_state & ControlMask) != 0 && kd.keysym == XK_KP_Separator) { kd.keysym = XK_KP_Subtract; - evt_state &= ~ControlMask; + UIntClr(evt_state, ControlMask); TRACE(("...Input control/keypad(,), change keysym to " KEYSYM_FMT "\n", @@ -1022,7 +1022,7 @@ Input(XtermWidget xw, TRACE(("...map XK_F%ld", kd.keysym - XK_Fn(1) + 1)); if (evt_state & ControlMask) { kd.keysym += (KeySym) xw->misc.ctrl_fkeys; - evt_state &= ~ControlMask; + UIntClr(evt_state, ControlMask); } TRACE((" to XK_F%ld\n", kd.keysym - XK_Fn(1) + 1)); @@ -1033,11 +1033,11 @@ Input(XtermWidget xw, TRACE(("...map XK_F%ld", kd.keysym - XK_Fn(1) + 1)); if (evt_state & ShiftMask) { kd.keysym += (KeySym) (xw->misc.ctrl_fkeys * 1); - evt_state &= ~ShiftMask; + UIntClr(evt_state, ShiftMask); } if (evt_state & ControlMask) { kd.keysym += (KeySym) (xw->misc.ctrl_fkeys * 2); - evt_state &= ~ControlMask; + UIntClr(evt_state, ControlMask); } TRACE((" to XK_F%ld\n", kd.keysym - XK_Fn(1) + 1)); @@ -1105,7 +1105,7 @@ Input(XtermWidget xw, && keyboard->type == keyboardIsVT220 #endif && ((string = (Char *) udk_lookup(dec_code, &kd.nbytes)) != 0)) { - evt_state &= ~ShiftMask; + UIntClr(evt_state, ShiftMask); while (kd.nbytes-- > 0) unparseputc(xw, CharOf(*string++)); } @@ -1240,7 +1240,7 @@ Input(XtermWidget xw, if (screen->meta_sends_esc && (evt_state & xw->misc.meta_mods) != 0) { TRACE(("...input-char is modified by META\n")); - evt_state &= ~xw->misc.meta_mods; + UIntClr(evt_state, xw->misc.meta_mods); eightbit = False; prefix = ANSI_ESC; } else if (eightbit) { @@ -1249,7 +1249,7 @@ Input(XtermWidget xw, } if (screen->alt_is_not_meta && (evt_state & xw->misc.alt_mods) != 0) { - evt_state &= ~xw->misc.alt_mods; + UIntClr(evt_state, xw->misc.alt_mods); if (screen->alt_sends_esc) { TRACE(("...input-char is modified by ALT\n")); eightbit = False; @@ -1318,7 +1318,7 @@ Input(XtermWidget xw, } else if (kd.strbuf[0] == '?' && (evt_state & ControlMask) != 0) { kd.strbuf[0] = ANSI_DEL; - evt_state &= ~ControlMask; + UIntClr(evt_state, ControlMask); } } if (prefix != 0) @@ -1326,7 +1326,7 @@ Input(XtermWidget xw, for (j = 0; j < kd.nbytes; ++j) unparseputc(xw, CharOf(kd.strbuf[j])); } - key = True; + key = ((kd.keysym != ANSI_XOFF) && (kd.keysym != ANSI_XON)); } unparse_end(xw); @@ -1340,9 +1340,9 @@ Input(XtermWidget xw, void StringInput(XtermWidget xw, Char * string, size_t nbytes) { - TRACE(("InputString (%s,%d)\n", - visibleChars(string, nbytes), - nbytes)); + TRACE(("InputString (%s,%lu)\n", + visibleChars(string, (unsigned) nbytes), + (unsigned long) nbytes)); #if OPT_TEK4014 if (nbytes && TEK4014_GIN(tekWidget)) { TekEnqMouse(tekWidget, *string++); @@ -1665,14 +1665,95 @@ sunfuncvalue(ANSI * reply, KEY_DATA * kd) } #if OPT_NUM_LOCK -#define isName(c) ((c) == '_' || isalnum(CharOf(c))) +#define isName(c) ((c) == '_' || (c) == '-' || isalnum(CharOf(c))) + +static const char * +skipName(const char *s) +{ + while (*s != '\0' && isName(CharOf(*s))) + ++s; + return s; +} + +/* + * Found a ":" in a translation, check what is past it to see if it contains + * any of the insert-text action names. + */ +static Boolean +keyCanInsert(const char *parse) +{ + Boolean result = False; + int ch; + Boolean escape = False; + Boolean quoted = False; + + static const char *table[] = + { + "insert", + "insert-seven-bit", + "insert-eight-bit", + "string", + }; + Cardinal n; + + while (*parse != '\0' && *parse != '\n') { + ch = CharOf(*parse++); + if (escape) { + escape = False; + } else if (ch == '\\') { + escape = True; + } else if (ch == '"') { + quoted = (Boolean) ! quoted; + } else if (!quoted && isName(ch)) { + const char *next = skipName(--parse); + size_t need = (size_t) (next - parse); + + for (n = 0; n < XtNumber(table); ++n) { + if (need == strlen(table[n]) + && !strncmp(parse, table[n], need)) { + result = True; + break; + } + } + parse = next; + } + + } + return result; +} + +/* + * Strip the entire action, to avoid matching it. + */ +static char * +stripAction(char *base, char *last) +{ + while (last != base) { + if (*--last == '\n') { + break; + } + } + return last; +} + +static char * +stripBlanks(char *base, char *last) +{ + while (last != base) { + int ch = CharOf(last[-1]); + if (ch != ' ' && ch != '\t') + break; + --last; + } + return last; +} /* * Strip unneeded whitespace from a translations resource, mono-casing and * returning a malloc'd copy of the result. */ static char * -stripTranslations(const char *s) +stripTranslations(const char *s, Bool onlyInsert) { char *dst = 0; @@ -1693,16 +1774,17 @@ stripTranslations(const char *s) *d++ = (char) ch; state = 0; } else if (strchr(":!#", ch) != 0) { - while (d != dst && isspace(CharOf(d[-1]))) - --d; + d = stripBlanks(dst, d); + if (onlyInsert && (ch == ':') && !keyCanInsert(s)) { + d = stripAction(dst, d); + } state = -1; } else if (state >= 0) { if (isspace(CharOf(ch))) { if (state == 0 || strchr("<>~ \t", prv)) continue; } else if (strchr("<>~", ch)) { - while (d != dst && isspace(CharOf(d[-1]))) - --d; + d = stripBlanks(dst, d); } *d++ = x_toupper(ch); ++state; @@ -1731,7 +1813,7 @@ stripTranslations(const char *s) * "XTerm*translations", we see only the latter. */ static Bool -TranslationsUseKeyword(Widget w, char **cache, const char *keyword) +TranslationsUseKeyword(Widget w, char **cache, const char *keyword, Bool onlyInsert) { static String data; static XtResource key_resources[] = @@ -1743,7 +1825,7 @@ TranslationsUseKeyword(Widget w, char **cache, const char *keyword) char *copy; char *test; - if ((test = stripTranslations(keyword)) != 0) { + if ((test = stripTranslations(keyword, onlyInsert)) != 0) { if (*cache == 0) { XtGetSubresources(w, (XtPointer) &data, @@ -1753,7 +1835,7 @@ TranslationsUseKeyword(Widget w, char **cache, const char *keyword) XtNumber(key_resources), NULL, (Cardinal) 0); - if (data != 0 && (copy = stripTranslations(data)) != 0) { + if (data != 0 && (copy = stripTranslations(data, onlyInsert)) != 0) { *cache = copy; } } @@ -1794,29 +1876,31 @@ TranslationsUseKeyword(Widget w, char **cache, const char *keyword) } static Bool -xtermHasTranslation(XtermWidget xw, const char *keyword) +xtermHasTranslation(XtermWidget xw, const char *keyword, Bool onlyInsert) { return (TranslationsUseKeyword(SHELL_OF(xw), &(xw->keyboard.shell_translations), - keyword) + keyword, + onlyInsert) || TranslationsUseKeyword((Widget) xw, &(xw->keyboard.xterm_translations), - keyword)); + keyword, + onlyInsert)); } #if OPT_EXTRA_PASTE static void addTranslation(XtermWidget xw, const char *fromString, const char *toString) { - unsigned have = (xw->keyboard.extra_translations - ? strlen(xw->keyboard.extra_translations) - : 0); - unsigned need = (((have != 0) ? (have + 4) : 0) - + strlen(fromString) - + strlen(toString) - + 6); - - if (!xtermHasTranslation(xw, fromString)) { + size_t have = (xw->keyboard.extra_translations + ? strlen(xw->keyboard.extra_translations) + : 0); + size_t need = (((have != 0) ? (have + 4) : 0) + + strlen(fromString) + + strlen(toString) + + 6); + + if (!xtermHasTranslation(xw, fromString, False)) { xw->keyboard.extra_translations = TypeRealloc(char, need, xw->keyboard.extra_translations); if ((xw->keyboard.extra_translations) != 0) { @@ -1831,11 +1915,11 @@ addTranslation(XtermWidget xw, const char *fromString, const char *toString) } #endif -#define SaveMask(name) xw->misc.name |= mask;\ - TRACE(("SaveMask(%s) %#lx (%#lx is%s modifier)\n", \ +#define SaveMask(name) xw->misc.name |= (unsigned) mask;\ + TRACE(("SaveMask(%s) %#x (%#x is%s modifier)\n", \ #name, \ - xw->misc.name, mask, \ - ModifierName(mask))); + xw->misc.name, (unsigned) mask, \ + ModifierName((unsigned) mask))); /* * Determine which modifier mask (if any) applies to the Num_Lock keysym. * @@ -1938,12 +2022,25 @@ VTInitModifiers(XtermWidget xw) /* Don't disable any mods if "alwaysUseMods" is true. */ if (!xw->misc.alwaysUseMods) { + + /* + * Force TranslationsUseKeyword() to reload. + */ + if (xw->keyboard.shell_translations) { + free(xw->keyboard.shell_translations); + xw->keyboard.shell_translations = 0; + } + if (xw->keyboard.xterm_translations) { + free(xw->keyboard.xterm_translations); + xw->keyboard.xterm_translations = 0; + } + /* * If the Alt modifier is used in translations, we would rather not * use it to modify function-keys when NumLock is active. */ if ((xw->misc.alt_mods != 0) - && xtermHasTranslation(xw, "alt")) { + && xtermHasTranslation(xw, "alt", True)) { TRACE(("ALT is used as a modifier in translations (ignore mask)\n")); xw->misc.alt_mods = 0; } @@ -1953,7 +2050,7 @@ VTInitModifiers(XtermWidget xw) * use it to modify function-keys. */ if ((xw->misc.meta_mods != 0) - && xtermHasTranslation(xw, "meta")) { + && xtermHasTranslation(xw, "meta", True)) { TRACE(("META is used as a modifier in translations\n")); xw->misc.meta_mods = 0; } diff --git a/app/xterm/linedata.c b/app/xterm/linedata.c index b86b0606c..d39772b72 100644 --- a/app/xterm/linedata.c +++ b/app/xterm/linedata.c @@ -1,8 +1,8 @@ -/* $XTermId: linedata.c,v 1.73 2009/11/28 13:36:02 tom Exp $ */ +/* $XTermId: linedata.c,v 1.78 2010/04/14 23:41:10 tom Exp $ */ /************************************************************ -Copyright 2009 by Thomas E. Dickey +Copyright 2009,2010 by Thomas E. Dickey All Rights Reserved @@ -48,6 +48,7 @@ getLineData(TScreen * screen, int row) { LineData *result = 0; ScrnBuf buffer; + int max_row = screen->max_row; if (row >= 0) { buffer = screen->visbuf; @@ -58,10 +59,10 @@ getLineData(TScreen * screen, int row) #else buffer = screen->saveBuf_index; row += screen->savelines; + max_row += screen->savelines; #endif } - if (row >= 0) { - assert(row <= screen->max_row); + if (row >= 0 && row <= max_row) { result = (LineData *) scrnHeadAddr(screen, buffer, (unsigned) row); if (result != 0) { #if 1 /* FIXME - these should be done in setupLineData, etc. */ @@ -162,23 +163,23 @@ initLineData(XtermWidget xw) initLineExtra(screen); - TRACE(("initLineData %d\n", screen->lineExtra)); - TRACE(("...sizeof(LineData) %d\n", sizeof(LineData))); + TRACE(("initLineData %lu\n", (unsigned long) screen->lineExtra)); + TRACE(("...sizeof(LineData) %lu\n", (unsigned long) sizeof(LineData))); #if OPT_ISO_COLORS - TRACE(("...sizeof(CellColor) %d\n", sizeof(CellColor))); + TRACE(("...sizeof(CellColor) %lu\n", (unsigned long) sizeof(CellColor))); #endif - TRACE(("...sizeof(RowData) %d\n", sizeof(RowData))); - TRACE(("...offset(lineSize) %d\n", offsetof(LineData, lineSize))); - TRACE(("...offset(bufHead) %d\n", offsetof(LineData, bufHead))); + TRACE(("...sizeof(RowData) %lu\n", (unsigned long) sizeof(RowData))); + TRACE(("...offset(lineSize) %lu\n", (unsigned long) offsetof(LineData, lineSize))); + TRACE(("...offset(bufHead) %lu\n", (unsigned long) offsetof(LineData, bufHead))); #if OPT_WIDE_CHARS - TRACE(("...offset(combSize) %d\n", offsetof(LineData, combSize))); + TRACE(("...offset(combSize) %lu\n", (unsigned long) offsetof(LineData, combSize))); #endif - TRACE(("...offset(attribs) %d\n", offsetof(LineData, attribs))); + TRACE(("...offset(attribs) %lu\n", (unsigned long) offsetof(LineData, attribs))); #if OPT_ISO_COLORS - TRACE(("...offset(color) %d\n", offsetof(LineData, color))); + TRACE(("...offset(color) %lu\n", (unsigned long) offsetof(LineData, color))); #endif - TRACE(("...offset(charData) %d\n", offsetof(LineData, charData))); - TRACE(("...offset(combData) %d\n", offsetof(LineData, combData))); + TRACE(("...offset(charData) %lu\n", (unsigned long) offsetof(LineData, charData))); + TRACE(("...offset(combData) %lu\n", (unsigned long) offsetof(LineData, combData))); } /* diff --git a/app/xterm/main.c b/app/xterm/main.c index 204e4b470..a9f14bc66 100644 --- a/app/xterm/main.c +++ b/app/xterm/main.c @@ -1,4 +1,4 @@ -/* $XTermId: main.c,v 1.602 2010/01/20 22:07:23 tom Exp $ */ +/* $XTermId: main.c,v 1.610 2010/04/18 17:09:13 tom Exp $ */ /* * W A R N I N G @@ -844,7 +844,7 @@ static XtResource application_resources[] = Bres("messages", "Messages", messages, True), Ires("minBufSize", "MinBufSize", minBufSize, 4096), Ires("maxBufSize", "MaxBufSize", maxBufSize, 32768), - Sres("menuLocale", "MenuLocale", menuLocale, ""), + Sres("menuLocale", "MenuLocale", menuLocale, DEF_MENU_LOCALE), Sres("keyboardType", "KeyboardType", keyboardType, "unknown"), #if OPT_SUNPC_KBD Bres("sunKeyboard", "SunKeyboard", sunKeyboard, False), @@ -1823,7 +1823,7 @@ main(int argc, char *argv[]ENVP_ARG) Version(); } else if (abbrev(argv[n], "-help", unique)) { Help(); - } else if (abbrev(argv[n], "-class", 3)) { + } else if (abbrev(argv[n], "-class", (size_t) 3)) { if ((my_class = argv[++n]) == 0) { Help(); } else { @@ -1832,7 +1832,7 @@ main(int argc, char *argv[]ENVP_ARG) unique = 3; } else { #if OPT_COLOR_RES - if (abbrev(argv[n], "-reverse", 2) + if (abbrev(argv[n], "-reverse", (size_t) 2) || !strcmp("-rv", argv[n])) { reversed = True; } else if (!strcmp("+rv", argv[n])) { @@ -2913,7 +2913,8 @@ set_owner(char *device, uid_t uid, gid_t gid, mode_t mode) int why; TRACE_IDS; - TRACE(("set_owner(%s, uid=%d, gid=%d, mode=%#o\n", device, uid, gid, mode)); + TRACE(("set_owner(%s, uid=%d, gid=%d, mode=%#o\n", + device, uid, gid, (unsigned) mode)); if (chown(device, uid, gid) < 0) { why = errno; @@ -2941,7 +2942,7 @@ set_owner(char *device, uid_t uid, gid_t gid, mode_t mode) (unsigned long) (sb.st_mode & 0777U), strerror(why)); TRACE(("...stat uid=%d, gid=%d, mode=%#o\n", - sb.st_uid, sb.st_gid, sb.st_mode)); + sb.st_uid, sb.st_gid, (unsigned) sb.st_mode)); } } TRACE(("...chmod failed: %s\n", strerror(why))); @@ -3492,13 +3493,13 @@ spawnXTerm(XtermWidget xw) */ if (cp_pipe[1] <= 2) { if ((i = fcntl(cp_pipe[1], F_DUPFD, 3)) >= 0) { - (void) close(cp_pipe[1]); + IGNORE_RC(close(cp_pipe[1])); cp_pipe[1] = i; } } if (pc_pipe[0] <= 2) { if ((i = fcntl(pc_pipe[0], F_DUPFD, 3)) >= 0) { - (void) close(pc_pipe[0]); + IGNORE_RC(close(pc_pipe[0])); pc_pipe[0] = i; } } @@ -3506,7 +3507,8 @@ spawnXTerm(XtermWidget xw) /* we don't need the socket, or the pty master anymore */ close(ConnectionNumber(screen->display)); #ifndef __MVS__ - close(screen->respond); + if (screen->respond >= 0) + close(screen->respond); #endif /* __MVS__ */ /* Now is the time to set up our process group and @@ -3514,9 +3516,9 @@ spawnXTerm(XtermWidget xw) */ #ifdef USE_SYSV_PGRP #if defined(CRAY) && (OSMAJORVERSION > 5) - (void) setsid(); + IGNORE_RC(setsid()); #else - (void) setpgrp(); + IGNORE_RC(setpgrp()); #endif #endif /* USE_SYSV_PGRP */ @@ -3543,7 +3545,7 @@ spawnXTerm(XtermWidget xw) } #endif /* TIOCNOTTY && !glibc >= 2.1 */ #ifdef CSRG_BASED - (void) revoke(ttydev); + IGNORE_RC(revoke(ttydev)); #endif if ((ttyfd = open(ttydev, O_RDWR)) >= 0) { #if defined(CRAY) && defined(TCSETCTTY) @@ -3832,7 +3834,7 @@ spawnXTerm(XtermWidget xw) if (fd == -1 || ioctl(fd, SRIOCSREDIR, ttyfd) == -1) fprintf(stderr, "%s: cannot open console: %s\n", ProgramName, strerror(errno)); - (void) close(fd); + IGNORE_RC(close(fd)); #endif } #endif /* TIOCCONS */ @@ -3912,20 +3914,20 @@ spawnXTerm(XtermWidget xw) #if defined(CRAY) && (OSMAJORVERSION >= 6) close_fd(ttyfd); - (void) close(0); + IGNORE_RC(close(0)); if (open("/dev/tty", O_RDWR)) { SysError(ERROR_OPDEVTTY); } - (void) close(1); - (void) close(2); + IGNORE_RC(close(1)); + IGNORE_RC(close(2)); dup(0); dup(0); #else /* dup the tty */ for (i = 0; i <= 2; i++) if (i != ttyfd) { - (void) close(i); + IGNORE_RC(close(i)); IGNORE_RC(dup(ttyfd)); } #ifndef ATT @@ -4032,7 +4034,7 @@ spawnXTerm(XtermWidget xw) TRACE(("getutid: NULL\n")); else TRACE(("getutid: pid=%d type=%d user=%s line=%s id=%s\n", - utret->ut_pid, utret->ut_type, utret->ut_user, + (int) utret->ut_pid, utret->ut_type, utret->ut_user, utret->ut_line, utret->ut_id)); #endif @@ -4201,13 +4203,13 @@ spawnXTerm(XtermWidget xw) handshake.error = 0; strcpy(handshake.buffer, ttydev); TRACE_HANDSHAKE("writing", &handshake); - (void) write(cp_pipe[1], (char *) &handshake, sizeof(handshake)); + IGNORE_RC(write(cp_pipe[1], (char *) &handshake, sizeof(handshake))); } #endif /* OPT_PTY_HANDSHAKE */ #endif /* USE_UTEMPTER */ #endif /* HAVE_UTMP */ - (void) setgid(screen->gid); + IGNORE_RC(setgid(screen->gid)); TRACE_IDS; #ifdef HAS_BSD_GROUPS if (geteuid() == 0 && pw) { @@ -4423,7 +4425,7 @@ spawnXTerm(XtermWidget xw) /* Exec failed. */ fprintf(stderr, "%s: Could not exec %s: %s\n", ProgramName, ptr, strerror(errno)); - (void) sleep(5); + IGNORE_RC(sleep(5)); exit(ERROR_EXEC); } /* end if in child after fork */ @@ -4461,7 +4463,7 @@ spawnXTerm(XtermWidget xw) /* The open of the pty failed! Let's get * another one. */ - (void) close(screen->respond); + IGNORE_RC(close(screen->respond)); if (get_pty(&screen->respond, XDisplayString(screen->display))) { /* no more ptys! */ fprintf(stderr, diff --git a/app/xterm/main.h b/app/xterm/main.h index fa5688ea9..7aa9c88e6 100644 --- a/app/xterm/main.h +++ b/app/xterm/main.h @@ -1,4 +1,4 @@ -/* $XTermId: main.h,v 1.51 2010/01/01 19:53:42 tom Exp $ */ +/* $XTermId: main.h,v 1.52 2010/04/14 09:51:45 tom Exp $ */ /* * Copyright 2000-2009,2010 by Thomas E. Dickey @@ -153,6 +153,10 @@ #define DEF_INITIAL_ERASE False #endif +#ifndef DEF_MENU_LOCALE +#define DEF_MENU_LOCALE "C" +#endif + #ifndef DEF_POINTER_MODE #define DEF_POINTER_MODE pNever #endif diff --git a/app/xterm/menu.c b/app/xterm/menu.c index e4fb665d0..92eec1942 100644 --- a/app/xterm/menu.c +++ b/app/xterm/menu.c @@ -1,4 +1,4 @@ -/* $XTermId: menu.c,v 1.261 2010/01/04 22:16:06 tom Exp $ */ +/* $XTermId: menu.c,v 1.262 2010/04/17 15:52:49 tom Exp $ */ /* * @@ -444,13 +444,19 @@ static MenuList tek_shell[NUM_POPUP_MENUS]; static String setMenuLocale(Bool before, String substitute) { - String result; + String result = setlocale(LC_CTYPE, 0); - result = setlocale(LC_CTYPE, substitute); if (before) { result = x_strdup(result); - } else { - result = 0; + } + (void) setlocale(LC_CTYPE, substitute); + TRACE(("setMenuLocale %s:%s\n", + (before + ? "before" + : "after"), + NonNull(result))); + if (!before) { + free((void *) substitute); } return result; } diff --git a/app/xterm/minstall.sh b/app/xterm/minstall.sh index 61bf77856..8c9421955 100644 --- a/app/xterm/minstall.sh +++ b/app/xterm/minstall.sh @@ -1,12 +1,12 @@ #!/bin/sh -# $XTermId: minstall.sh,v 1.19 2010/01/20 10:55:42 tom Exp $ +# $XTermId: minstall.sh,v 1.20 2010/03/03 23:44:49 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # # Copyright 2001-2009,2010 by Thomas E. Dickey -# +# # All Rights Reserved -# +# # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including @@ -14,10 +14,10 @@ # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: -# +# # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. -# +# # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. @@ -25,7 +25,7 @@ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# +# # Except as contained in this notice, the name(s) of the above copyright # holders shall not be used in advertising or otherwise to promote the # sale, use or other dealings in this Software without prior written @@ -74,9 +74,9 @@ MY_MANSECT=$suffix # are only a few common choices. Note that they may not necessarily appear # in the same directories. Prefer utmpx/wtmpx to utmp/wtmp, since that's # the way the configure script is designed. -UTMP_NAME=utmp22 +UTMP_NAME=utmp UTMP_PATH=/etc -for name in /etc /var/adm /var/log +for name in /etc /var/adm /var/run /var/log do if test -f $name/utmpx ; then UTMP_NAME=utmpx @@ -91,7 +91,7 @@ UTMP_PATH=$UTMP_PATH/$UTMP_NAME WTMP_NAME=wtmp WTMP_PATH=/etc -for name in /etc /var/adm /var/log +for name in /etc /var/adm /var/run /var/log do if test -f $name/wtmpx ; then WTMP_NAME=wtmpx diff --git a/app/xterm/misc.c b/app/xterm/misc.c index 20a66e424..3739d8a0b 100644 --- a/app/xterm/misc.c +++ b/app/xterm/misc.c @@ -1,10 +1,9 @@ -/* $XTermId: misc.c,v 1.482 2010/01/21 09:34:58 tom Exp $ */ +/* $XTermId: misc.c,v 1.493 2010/04/18 17:51:44 tom Exp $ */ /* - * * Copyright 1999-2009,2010 by Thomas E. Dickey * - * All Rights Reserved + * All Rights Reserved * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the @@ -135,7 +134,7 @@ Readlink(const char *filename) buf = TypeRealloc(char, size, buf); memset(buf, 0, size); - n = readlink(filename, buf, size); + n = (int) readlink(filename, buf, size); if (n < 0) { free(buf); return NULL; @@ -184,6 +183,7 @@ selectwindow(TScreen * screen, int flag) if (screen->cursor_state) ShowCursor(); } + GetScrollLock(screen); } static void @@ -677,8 +677,8 @@ HandleInterpret(Widget w GCC_UNUSED, if (*param_count == 1) { char *value = params[0]; int need = (int) strlen(value); - int used = VTbuffer->next - VTbuffer->buffer; - int have = VTbuffer->last - VTbuffer->buffer; + int used = (int) (VTbuffer->next - VTbuffer->buffer); + int have = (int) (VTbuffer->last - VTbuffer->buffer); if (have - used + need < BUF_SIZE) { @@ -800,7 +800,7 @@ AtomBell(XtermWidget xw, int which) for (n = 0; n < XtNumber(table); ++n) { if (table[n].value == which) { - result = XInternAtom(XtDisplay(xw), table[n].name, True); + result = XInternAtom(XtDisplay(xw), table[n].name, False); break; } } @@ -1074,8 +1074,8 @@ dabbrev_expand(TScreen * screen) char *expansion; Char *copybuffer; size_t hint_len; - unsigned del_cnt; - unsigned buf_cnt; + size_t del_cnt; + size_t buf_cnt; int result = 0; LineData *ld; @@ -1138,7 +1138,7 @@ dabbrev_expand(TScreen * screen) memmove(copybuffer + del_cnt, expansion + hint_len, strlen(expansion) - hint_len); - v_write(pty, copybuffer, buf_cnt); + v_write(pty, copybuffer, (unsigned) buf_cnt); /* v_write() just reset our flag */ screen->dabbrev_working = True; free(copybuffer); @@ -1760,8 +1760,8 @@ FlushLog(TScreen * screen) #endif /* VMS */ cp = VTbuffer->next; if (screen->logstart != 0 - && (i = cp - screen->logstart) > 0) { - IGNORE_RC(write(screen->logfd, screen->logstart, (unsigned) i)); + && (i = (int) (cp - screen->logstart)) > 0) { + IGNORE_RC(write(screen->logfd, screen->logstart, (size_t) i)); } screen->logstart = VTbuffer->next; } @@ -1941,7 +1941,7 @@ AllocateAnsiColor(XtermWidget xw, result = 1; SET_COLOR_RES(res, def.pixel); TRACE(("AllocateAnsiColor[%d] %s (pixel %#lx)\n", - (res - screen->Acolors), spec, def.pixel)); + (int) (res - screen->Acolors), spec, def.pixel)); #if OPT_COLOR_RES if (!res->mode) result = 0; @@ -1965,7 +1965,7 @@ xtermGetColorRes(XtermWidget xw, ColorRes * res) result = res->value; } else { TRACE(("xtermGetColorRes for Acolors[%d]\n", - res - TScreenOf(xw)->Acolors)); + (int) (res - TScreenOf(xw)->Acolors))); if (res >= TScreenOf(xw)->Acolors) { assert(res - TScreenOf(xw)->Acolors < MAXCOLORS); @@ -2093,8 +2093,8 @@ ResetAnsiColorRequest(XtermWidget xw, char *buf, int start) while (!IsEmpty(buf)) { char *next; - color = strtol(buf, &next, 10); - if (next == buf) + color = (int) strtol(buf, &next, 10); + if ((next == buf) || (color < 0)) break; /* no number at all */ if (next != 0) { if (strchr(";", *next) == 0) @@ -2292,7 +2292,7 @@ GetOldColors(XtermWidget xw) { int i; if (pOldColors == NULL) { - pOldColors = (ScrnColors *) XtMalloc(sizeof(ScrnColors)); + pOldColors = (ScrnColors *) XtMalloc((Cardinal) sizeof(ScrnColors)); if (pOldColors == NULL) { fprintf(stderr, "allocation failure in GetOldColors\n"); return (False); @@ -2475,7 +2475,7 @@ ChangeColorsRequest(XtermWidget xw, } else if (!pOldColors->names[ndx] || (thisName && strcmp(thisName, pOldColors->names[ndx]))) { - AllocateTermColor(xw, &newColors, ndx, thisName); + AllocateTermColor(xw, &newColors, ndx, thisName, False); } } } @@ -2514,7 +2514,7 @@ ResetColorsRequest(XtermWidget xw, if (thisName != 0 && pOldColors->names[ndx] != 0 && strcmp(thisName, pOldColors->names[ndx])) { - AllocateTermColor(xw, &newColors, ndx, thisName); + AllocateTermColor(xw, &newColors, ndx, thisName, False); if (newColors.which != 0) { ChangeColors(xw, &newColors); @@ -2698,7 +2698,7 @@ ChangeFontRequest(XtermWidget xw, char *buf) /***====================================================================***/ void -do_osc(XtermWidget xw, Char * oscbuf, unsigned len GCC_UNUSED, int final) +do_osc(XtermWidget xw, Char * oscbuf, size_t len, int final) { TScreen *screen = TScreenOf(xw); int mode; @@ -2735,7 +2735,8 @@ do_osc(XtermWidget xw, Char * oscbuf, unsigned len GCC_UNUSED, int final) /* FALLTHRU */ case 1: if (*cp != ';') { - TRACE(("do_osc did not find semicolon offset %d\n", cp - oscbuf)); + TRACE(("do_osc did not find semicolon offset %d\n", + (int) (cp - oscbuf))); return; } state = 2; @@ -2754,7 +2755,7 @@ do_osc(XtermWidget xw, Char * oscbuf, unsigned len GCC_UNUSED, int final) default: TRACE(("do_osc found nonprinting char %02X offset %d\n", CharOf(*cp), - cp - oscbuf)); + (int) (cp - oscbuf))); return; } } @@ -3173,7 +3174,7 @@ do_dcs(XtermWidget xw, Char * dcsbuf, size_t dcslen) Bool okay; ANSI params; - TRACE(("do_dcs(%s:%d)\n", (char *) dcsbuf, dcslen)); + TRACE(("do_dcs(%s:%lu)\n", (char *) dcsbuf, (unsigned long) dcslen)); if (dcslen != strlen(cp)) /* shouldn't have nulls in the string */ @@ -3392,7 +3393,7 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value) char *my_attr; char *name; - unsigned limit; + size_t limit; Char *c1; Char *cp; @@ -3624,11 +3625,12 @@ Bool AllocateTermColor(XtermWidget xw, ScrnColors * pNew, int ndx, - const char *name) + const char *name, + Bool always) { Bool result = False; - if (AllowColorOps(xw, ecSetColor)) { + if (always || AllowColorOps(xw, ecSetColor)) { XColor def; TScreen *screen = TScreenOf(xw); Colormap cmap = xw->core.colormap; @@ -4156,7 +4158,7 @@ sortedOptDescs(XrmOptionDescRec * descs, Cardinal res_count) res_array = TypeCallocN(XrmOptionDescRec, res_count); for (j = 0; j < res_count; j++) res_array[j] = descs[j]; - qsort(res_array, res_count, sizeof(*res_array), cmp_resources); + qsort(res_array, (size_t) res_count, sizeof(*res_array), cmp_resources); } return res_array; } @@ -4184,7 +4186,7 @@ sortedOpts(OptionHelp * options, XrmOptionDescRec * descs, Cardinal numDescs) #endif if (opt_array == 0) { - Cardinal opt_count, j; + size_t opt_count, j; #if OPT_TRACE Cardinal k; XrmOptionDescRec *res_array = sortedOptDescs(descs, numDescs); @@ -4345,7 +4347,7 @@ xtermVersion(void) else { /* some vendors leave trash in this string */ for (;;) { - if (!strncmp(vendor, "Version ", 8)) + if (!strncmp(vendor, "Version ", (size_t) 8)) vendor += 8; else if (isspace(CharOf(*vendor))) ++vendor; diff --git a/app/xterm/print.c b/app/xterm/print.c index 08f883d75..a0dfed216 100644 --- a/app/xterm/print.c +++ b/app/xterm/print.c @@ -1,8 +1,8 @@ -/* $XTermId: print.c,v 1.115 2009/12/10 09:44:39 tom Exp $ */ +/* $XTermId: print.c,v 1.116 2010/04/05 00:11:13 tom Exp $ */ /************************************************************ -Copyright 1997-2007,2009 by Thomas E. Dickey +Copyright 1997-2009,2010 by Thomas E. Dickey All Rights Reserved @@ -434,7 +434,7 @@ charToPrinter(XtermWidget xw, unsigned chr) close(my_pipe[0]); /* won't read from printer */ Printer = fdopen(my_pipe[1], "w"); TRACE(("opened printer from pid %d/%d\n", - (int) getpid(), Printer_pid)); + (int) getpid(), (int) Printer_pid)); } #endif initialized++; diff --git a/app/xterm/ptydata.c b/app/xterm/ptydata.c index d5ff28653..a90e4509c 100644 --- a/app/xterm/ptydata.c +++ b/app/xterm/ptydata.c @@ -1,4 +1,4 @@ -/* $XTermId: ptydata.c,v 1.94 2010/01/21 02:08:28 tom Exp $ */ +/* $XTermId: ptydata.c,v 1.96 2010/04/18 17:51:56 tom Exp $ */ /************************************************************ @@ -62,7 +62,7 @@ Bool decodeUtf8(PtyData * data) { int i; - int length = data->last - data->next; + int length = (int) (data->last - data->next); int utf_count = 0; unsigned utf_char = 0; @@ -192,7 +192,7 @@ readPtyData(TScreen * screen, PtySelect * select_mask, PtyData * data) int save_err; trimPtyData(screen, data); - size = read(screen->respond, (char *) data->last, (unsigned) FRG_SIZE); + size = (int) read(screen->respond, (char *) data->last, (size_t) FRG_SIZE); save_err = errno; #if (defined(i386) && defined(SVR4) && defined(sun)) || defined(__CYGWIN__) /* @@ -322,7 +322,8 @@ initPtyData(PtyData ** result) TRACE(("initPtyData using minBufSize %d, maxBufSize %d\n", FRG_SIZE, BUF_SIZE)); - data = (PtyData *) XtMalloc(sizeof(*data) + (unsigned) (BUF_SIZE + FRG_SIZE)); + data = (PtyData *) XtMalloc((Cardinal) (sizeof(*data) + + (unsigned) (BUF_SIZE + FRG_SIZE))); memset(data, 0, sizeof(*data)); data->next = data->buffer; @@ -359,7 +360,7 @@ trimPtyData(TScreen * screen GCC_UNUSED, PtyData * data) FlushLog(screen); if (data->next != data->buffer) { - int n = (data->last - data->next); + int n = (int) (data->last - data->next); TRACE(("shifting buffer down by %d\n", n)); for (i = 0; i < n; ++i) { @@ -385,7 +386,7 @@ fillPtyData(TScreen * screen, PtyData * data, char *value, int length) trimPtyData(screen, data); VTbuffer->last += length; - size = VTbuffer->last - VTbuffer->next; + size = (int) (VTbuffer->last - VTbuffer->next); /* shift the unused portion up to make room */ for (n = size; n >= length; --n) diff --git a/app/xterm/ptyx.h b/app/xterm/ptyx.h index 83fc52c7c..f3b1e1a4d 100644 --- a/app/xterm/ptyx.h +++ b/app/xterm/ptyx.h @@ -1,4 +1,4 @@ -/* $XTermId: ptyx.h,v 1.656 2010/01/04 09:09:29 tom Exp $ */ +/* $XTermId: ptyx.h,v 1.666 2010/04/18 16:50:09 tom Exp $ */ /* * Copyright 1999-2009,2010 by Thomas E. Dickey @@ -77,22 +77,22 @@ #define MyStackAlloc(size, stack_cache_array) \ ((size) <= sizeof(stack_cache_array) \ ? (XtPointer)(stack_cache_array) \ - : (XtPointer)malloc((unsigned)(size))) + : (XtPointer)malloc((size_t)(size))) #define MyStackFree(pointer, stack_cache_array) \ if ((pointer) != ((char *)(stack_cache_array))) free(pointer) /* adapted from vile (vi-like-emacs) */ -#define TypeCallocN(type,n) (type *)calloc((n), sizeof(type)) -#define TypeCalloc(type) TypeCallocN(type,1) +#define TypeCallocN(type,n) (type *)calloc((size_t) (n), sizeof(type)) +#define TypeCalloc(type) TypeCallocN(type, 1) -#define TypeMallocN(type,n) (type *)malloc(sizeof(type) * (n)) -#define TypeMalloc(type) TypeMallocN(type,1) +#define TypeMallocN(type,n) (type *)malloc(sizeof(type) * (size_t) (n)) +#define TypeMalloc(type) TypeMallocN(type, 1) #define TypeRealloc(type,n,p) (type *)realloc(p, (n) * sizeof(type)) /* use these to allocate partly-structured data */ -#define CastMallocN(type,n) (type *)malloc(sizeof(type) + (n)) +#define CastMallocN(type,n) (type *)malloc(sizeof(type) + (size_t) (n)) #define CastMalloc(type) CastMallocN(type,0) #define BumpBuffer(type, buffer, size, want) \ @@ -330,6 +330,8 @@ typedef struct { */ #define ANSI_BEL 0x07 #define ANSI_FF 0x0C /* C0, C1 control names */ +#define ANSI_XON 0x11 /* DC1 */ +#define ANSI_XOFF 0x13 /* DC3 */ #define ANSI_NAK 0x15 #define ANSI_CAN 0x18 #define ANSI_ESC 0x1B @@ -634,6 +636,10 @@ typedef struct { #define OPT_SUN_FUNC_KEYS 1 /* true if xterm supports Sun-style function keys */ #endif +#ifndef OPT_SCROLL_LOCK +#define OPT_SCROLL_LOCK 1 /* true if xterm interprets fontsize-shifting */ +#endif + #ifndef OPT_SELECT_REGEX #define OPT_SELECT_REGEX 0 /* true if xterm supports regular-expression selects */ #endif @@ -910,12 +916,12 @@ typedef enum { , ewLAST } WindowOps; -#define COLOR_DEFINED(s,w) ((s)->which & (1<<(w))) +#define COLOR_DEFINED(s,w) ((s)->which & (unsigned) (1<<(w))) #define COLOR_VALUE(s,w) ((s)->colors[w]) -#define SET_COLOR_VALUE(s,w,v) (((s)->colors[w] = (v)), ((s)->which |= (1<<(w)))) +#define SET_COLOR_VALUE(s,w,v) (((s)->colors[w] = (v)), UIntSet((s)->which, (1<<(w)))) #define COLOR_NAME(s,w) ((s)->names[w]) -#define SET_COLOR_NAME(s,w,v) (((s)->names[w] = (v)), ((s)->which |= (1<<(w)))) +#define SET_COLOR_NAME(s,w,v) (((s)->names[w] = (v)), ((s)->which |= (unsigned) (1<<(w)))) #define UNDEFINE_COLOR(s,w) ((s)->which &= (~((w)<<1))) @@ -976,8 +982,6 @@ typedef enum { # define XK_COLORS 0x0003 #endif -# define XK_TCAPNAME 0x0004 - #else /* !OPT_ISO_COLORS */ #define TERM_COLOR_FLAGS(xw) 0 @@ -988,6 +992,8 @@ typedef enum { #endif /* OPT_ISO_COLORS */ +# define XK_TCAPNAME 0x0004 + #if OPT_AIX_COLORS #define if_OPT_AIX_COLORS(screen, code) if(screen->colorMode) code #else @@ -1806,6 +1812,13 @@ typedef struct { unsigned restore_height; #endif +#if OPT_SCROLL_LOCK + Boolean allowScrollLock;/* ScrollLock mode */ + Boolean allowScrollLock0;/* initial ScrollLock mode */ + Boolean scroll_lock; /* true to keep buffer in view */ + Boolean scroll_dirty; /* scrolling makes screen dirty */ +#endif + #if OPT_VT52_MODE int vt52_save_level; /* save-area for DECANM */ Char vt52_save_curgl; @@ -1983,7 +1996,7 @@ typedef struct _TekScreen { #if OPT_READLINE #define SCREEN_FLAG(screenp,f) (1&(screenp)->f) #define SCREEN_FLAG_set(screenp,f) ((screenp)->f |= 1) -#define SCREEN_FLAG_unset(screenp,f) ((screenp)->f &= ~1L) +#define SCREEN_FLAG_unset(screenp,f) ((screenp)->f &= (unsigned) ~1L) #define SCREEN_FLAG_save(screenp,f) \ ((screenp)->f = (((screenp)->f)<<1) | SCREEN_FLAG(screenp,f)) #define SCREEN_FLAG_restore(screenp,f) ((screenp)->f = (((screenp)->f)>>1)) @@ -2170,10 +2183,10 @@ typedef struct _Misc { #if OPT_NUM_LOCK Boolean real_NumLock; /* true if we treat NumLock key specially */ Boolean alwaysUseMods; /* true if we always want f-key modifiers */ - unsigned long num_lock; /* modifier for Num_Lock */ - unsigned long alt_mods; /* modifier for Alt_L or Alt_R */ - unsigned long meta_mods; /* modifier for Meta_L or Meta_R */ - unsigned long other_mods; /* conflicting modifiers, e.g., Mode_Switch */ + unsigned num_lock; /* modifier for Num_Lock */ + unsigned alt_mods; /* modifier for Alt_L or Alt_R */ + unsigned meta_mods; /* modifier for Meta_L or Meta_R */ + unsigned other_mods; /* conflicting modifiers, e.g., Mode_Switch */ #endif #if OPT_RENDERFONT char *face_name; diff --git a/app/xterm/resize.c b/app/xterm/resize.c index 069c7cbae..bc1cd1f0f 100644 --- a/app/xterm/resize.c +++ b/app/xterm/resize.c @@ -1,7 +1,7 @@ -/* $XTermId: resize.c,v 1.109 2009/10/12 00:41:33 tom Exp $ */ +/* $XTermId: resize.c,v 1.111 2010/04/18 16:35:02 tom Exp $ */ /* - * Copyright 2003-2008,2009 by Thomas E. Dickey + * Copyright 2003-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -341,16 +341,16 @@ main(int argc, char **argv ENVP_ARG) #ifdef USE_ANY_SYSV_TERMIO ioctl(tty, TCGETA, &tioorig); tio = tioorig; - tio.c_iflag &= ~(ICRNL | IUCLC); - tio.c_lflag &= ~(ICANON | ECHO); + UIntClr(tio.c_iflag, (ICRNL | IUCLC)); + UIntClr(tio.c_lflag, (ICANON | ECHO)); tio.c_cflag |= CS8; tio.c_cc[VMIN] = 6; tio.c_cc[VTIME] = 1; #elif defined(USE_TERMIOS) tcgetattr(tty, &tioorig); tio = tioorig; - tio.c_iflag &= ~ICRNL; - tio.c_lflag &= ~(ICANON | ECHO); + UIntClr(tio.c_iflag, ICRNL); + UIntClr(tio.c_lflag, (ICANON | ECHO)); tio.c_cflag |= CS8; tio.c_cc[VMIN] = 6; tio.c_cc[VTIME] = 1; @@ -358,7 +358,7 @@ main(int argc, char **argv ENVP_ARG) ioctl(tty, TIOCGETP, &sgorig); sg = sgorig; sg.sg_flags |= RAW; - sg.sg_flags &= ~ECHO; + UIntClr(sg.sg_flags, ECHO); #endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */ signal(SIGINT, onintr); signal(SIGQUIT, onintr); @@ -449,7 +449,7 @@ main(int argc, char **argv ENVP_ARG) } i = ptr - termcap + 3; - strncpy(newtc, termcap, (unsigned) i); + strncpy(newtc, termcap, (size_t) i); sprintf(newtc + i, "%d", cols); ptr = strchr(ptr, ':'); strcat(newtc, ptr); @@ -461,7 +461,7 @@ main(int argc, char **argv ENVP_ARG) } i = ptr - newtc + 3; - strncpy(termcap, newtc, (unsigned) i); + strncpy(termcap, newtc, (size_t) i); sprintf(termcap + i, "%d", rows); ptr = strchr(ptr, ':'); strcat(termcap, ptr); diff --git a/app/xterm/screen.c b/app/xterm/screen.c index e24d20ff7..e05d1ee49 100644 --- a/app/xterm/screen.c +++ b/app/xterm/screen.c @@ -1,4 +1,4 @@ -/* $XTermId: screen.c,v 1.410 2010/01/20 01:38:46 tom Exp $ */ +/* $XTermId: screen.c,v 1.418 2010/04/28 23:49:28 tom Exp $ */ /* * Copyright 1999-2009,2010 by Thomas E. Dickey @@ -79,20 +79,20 @@ #define getMaxCol(screen) ((screen)->max_col) #define MoveLineData(base, dst, src, len) \ - memmove(scrnHeadAddr(screen, base, dst), \ - scrnHeadAddr(screen, base, src), \ - scrnHeadSize(screen, len)) + memmove(scrnHeadAddr(screen, base, (unsigned) (dst)), \ + scrnHeadAddr(screen, base, (unsigned) (src)), \ + (size_t) scrnHeadSize(screen, (unsigned) (len))) #define SaveLineData(base, src, len) \ (void) ScrnPointers(screen, len); \ memcpy (screen->save_ptr, \ scrnHeadAddr(screen, base, src), \ - scrnHeadSize(screen, len)) + (size_t) scrnHeadSize(screen, (unsigned) (len))) #define RestoreLineData(base, dst, len) \ memcpy (scrnHeadAddr(screen, base, dst), \ screen->save_ptr, \ - scrnHeadSize(screen, len)) + (size_t) scrnHeadSize(screen, (unsigned) (len))) #if OPT_SAVE_LINES #define VisBuf(screen) screen->editBuf_index[screen->whichBuf] @@ -104,7 +104,7 @@ * ScrnPtr's can point to different types of data. */ #define SizeofScrnPtr(name) \ - sizeof(*((LineData *)0)->name) + (unsigned) sizeof(*((LineData *)0)->name) /* * The pointers in LineData point into a block of text allocated as a single @@ -116,7 +116,7 @@ #define AlignValue(value) \ if (!IsAligned(value)) \ - value = (value | AlignMask()) + 1 + value = (value | (unsigned) AlignMask()) + 1 #define SetupScrnPtr(dst,src,type) \ dst = (type *) src; \ @@ -156,7 +156,7 @@ scrnHeadSize(TScreen * screen, unsigned count) #if OPT_WIDE_CHARS if (screen->wide_chars) { - result += screen->lineExtra; + result += (unsigned) screen->lineExtra; } #endif result *= count; @@ -265,7 +265,7 @@ allocScrnHead(TScreen * screen, unsigned nrow) ScrnPtr *result; unsigned size = scrnHeadSize(screen, 1); - result = (ScrnPtr *) calloc(nrow, size); + result = (ScrnPtr *) calloc((size_t) nrow, (size_t) size); if (result == 0) SysError(ERROR_SCALLOC); @@ -289,7 +289,7 @@ sizeofScrnRow(TScreen * screen, unsigned ncol) (void) screen; - result = (ncol * sizeof(CharData)); + result = (ncol * (unsigned) sizeof(CharData)); AlignValue(result); #if OPT_WIDE_CHARS @@ -320,8 +320,8 @@ allocScrnData(TScreen * screen, unsigned nrow, unsigned ncol) if ((result = (Char *) calloc(length, sizeof(Char))) == 0) SysError(ERROR_SCALLOC2); - TRACE(("allocScrnData %dx%d -> %d -> %p..%p\n", - nrow, ncol, length, result, result + length - 1)); + TRACE(("allocScrnData %ux%u -> %lu -> %p..%p\n", + nrow, ncol, (unsigned long) length, result, result + length - 1)); return result; } @@ -669,12 +669,12 @@ ClearCells(XtermWidget xw, int flags, unsigned len, int row, int col) ld = getLineData(screen, row); - flags |= TERM_COLOR_FLAGS(xw); + UIntSet(flags, TERM_COLOR_FLAGS(xw)); for (n = 0; n < len; ++n) ld->charData[(unsigned) col + n] = (CharData) ' '; - memset(ld->attribs + col, flags, len); + memset(ld->attribs + col, flags, (size_t) len); if_OPT_ISO_COLORS(screen, { CellColor p = xtermColorPair(xw); @@ -685,7 +685,7 @@ ClearCells(XtermWidget xw, int flags, unsigned len, int row, int col) if_OPT_WIDE_CHARS(screen, { size_t off; for_each_combData(off, ld) { - memset(ld->combData[off] + col, 0, len * sizeof(CharData)); + memset(ld->combData[off] + col, 0, (size_t) len * sizeof(CharData)); } }); } @@ -739,7 +739,7 @@ void ScrnWriteText(XtermWidget xw, IChar * str, unsigned flags, - CellColor cur_fg_bg, + unsigned cur_fg_bg, unsigned length) { TScreen *screen = TScreenOf(xw); @@ -841,7 +841,7 @@ ScrnWriteText(XtermWidget xw, flags &= ATTRIBUTES; flags |= CHARDRAWN; - memset(attrs, (Char) flags, real_width); + memset(attrs, (Char) flags, (size_t) real_width); if_OPT_WIDE_CHARS(screen, { size_t off; @@ -854,7 +854,7 @@ ScrnWriteText(XtermWidget xw, if_OPT_ISO_COLORS(screen, { unsigned j; for (j = 0; j < real_width; ++j) - fb[j] = cur_fg_bg; + fb[j] = (CellColor) cur_fg_bg; }); if_OPT_WIDE_CHARS(screen, { @@ -906,7 +906,7 @@ ScrnClearLines(XtermWidget xw, ScrnBuf sb, int where, unsigned n, unsigned size) memset(work->charData, 0, size * sizeof(CharData)); if (TERM_COLOR_FLAGS(xw)) { - memset(work->attribs, (int) flags, size); + memset(work->attribs, (int) flags, (size_t) size); #if OPT_ISO_COLORS { CellColor p = xtermColorPair(xw); @@ -916,7 +916,7 @@ ScrnClearLines(XtermWidget xw, ScrnBuf sb, int where, unsigned n, unsigned size) } #endif } else { - memset(work->attribs, 0, size); + memset(work->attribs, 0, (size_t) size); #if OPT_ISO_COLORS memset(work->color, 0, size * sizeof(work->color[0])); #endif @@ -991,7 +991,7 @@ ScrnAllocBuf(XtermWidget xw) size_t ScrnPointers(TScreen * screen, size_t len) { - size_t result = scrnHeadSize(screen, len); + size_t result = scrnHeadSize(screen, (unsigned) len); if (result > screen->save_len) { if (screen->save_len) @@ -1273,15 +1273,14 @@ ScrnRefresh(XtermWidget xw, int row; int maxrow = toprow + nrows - 1; int scrollamt = screen->scroll_amt; - int max = screen->max_row; unsigned gc_changes = 0; #ifdef __CYGWIN__ static char first_time = 1; #endif static int recurse = 0; - TRACE(("ScrnRefresh (%d,%d) - (%d,%d)%s {{\n", - toprow, leftcol, + TRACE(("ScrnRefresh top %d (%d,%d) - (%d,%d)%s {{\n", + screen->topline, toprow, leftcol, nrows, ncols, force ? " force" : "")); @@ -1325,12 +1324,14 @@ ScrnRefresh(XtermWidget xw, else lastind = row - scrollamt; - TRACE2(("ScrnRefresh row=%d lastind=%d/%d\n", row, lastind, max)); - if (lastind < 0 || lastind > max) - continue; + TRACE2(("ScrnRefresh row=%d lastind=%d ->%d\n", + row, lastind, ROW2INX(screen, lastind))); - if ((ld = getLineData(screen, ROW2INX(screen, lastind))) == 0) - break; + if ((ld = getLineData(screen, ROW2INX(screen, lastind))) == 0 + || ld->charData == 0 + || ld->attribs == 0) { + continue; + } if (maxcol >= (int) ld->lineSize) { maxcol = ld->lineSize - 1; hi_col = maxcol; @@ -1338,6 +1339,8 @@ ScrnRefresh(XtermWidget xw, chars = ld->charData; attrs = ld->attribs; + assert(chars != 0); + assert(attrs != 0); if_OPT_WIDE_CHARS(screen, { /* This fixes an infinite recursion bug, that leads @@ -2011,7 +2014,7 @@ ScreenResize(XtermWidget xw, /* adjust scrolling region */ set_tb_margins(screen, 0, screen->max_row); - *flags &= ~ORIGIN; + UIntClr(*flags, ORIGIN); if (screen->cur_row > screen->max_row) set_cur_row(screen, screen->max_row); @@ -2220,7 +2223,7 @@ ScrnFillRectangle(XtermWidget xw, unsigned temp = ld->attribs[col]; if (!keepColors) { - temp &= ~(FG_COLOR | BG_COLOR); + UIntClr(temp, (FG_COLOR | BG_COLOR)); } temp = attrs | (temp & (FG_COLOR | BG_COLOR | PROTECTED)); temp |= CHARDRAWN; @@ -2408,7 +2411,7 @@ ScrnMarkRectangle(XtermWidget xw, } else { switch (params[n]) { case 0: - flags &= ~SGR_MASK; + UIntClr(flags, SGR_MASK); break; case 1: flags |= BOLD; @@ -2426,19 +2429,19 @@ ScrnMarkRectangle(XtermWidget xw, flags |= INVISIBLE; break; case 22: - flags &= ~BOLD; + UIntClr(flags, BOLD); break; case 24: - flags &= ~UNDERLINE; + UIntClr(flags, UNDERLINE); break; case 25: - flags &= ~BLINK; + UIntClr(flags, BLINK); break; case 27: - flags &= ~INVERSE; + UIntClr(flags, INVERSE); break; case 28: - flags &= ~INVISIBLE; + UIntClr(flags, INVISIBLE); break; } } diff --git a/app/xterm/scrollback.c b/app/xterm/scrollback.c index ff207bb5b..a28ec7e16 100644 --- a/app/xterm/scrollback.c +++ b/app/xterm/scrollback.c @@ -1,8 +1,8 @@ -/* $XTermId: scrollback.c,v 1.12 2009/10/12 00:06:18 tom Exp $ */ +/* $XTermId: scrollback.c,v 1.14 2010/04/28 21:47:09 tom Exp $ */ /************************************************************ -Copyright 2009 by Thomas E. Dickey +Copyright 2009,2010 by Thomas E. Dickey All Rights Reserved @@ -34,8 +34,9 @@ authorization. #include <xterm.h> +#define REAL_ROW(screen, row) ((row) + 1 + (screen)->saved_fifo) #define ROW2FIFO(screen, row) \ - (unsigned) (((row) + 1 + (screen)->saved_fifo) % (screen)->savelines) + (unsigned) (REAL_ROW(screen, row) % (screen)->savelines) /* * Given a row-number, find the corresponding data for the line in the VT100 @@ -45,11 +46,18 @@ authorization. LineData * getScrollback(TScreen * screen, int row) { - unsigned which = ROW2FIFO(screen, row); - ScrnBuf where = scrnHeadAddr(screen, screen->saveBuf_index, which); + LineData *result = 0; - TRACE(("getScrollback %d -> %d -> %p\n", row, which, (void *) where)); - return (LineData *) where; + if (screen->saved_fifo > 0 && REAL_ROW(screen, row) >= 0) { + unsigned which = ROW2FIFO(screen, row); + ScrnBuf where = scrnHeadAddr(screen, screen->saveBuf_index, which); + result = (LineData *) where; + } + + TRACE(("getScrollback %d -> %d -> %p\n", + row, ROW2FIFO(screen, row), + (void *) result)); + return result; } /* diff --git a/app/xterm/scrollbar.c b/app/xterm/scrollbar.c index fb79bd961..39a083b7c 100644 --- a/app/xterm/scrollbar.c +++ b/app/xterm/scrollbar.c @@ -1,7 +1,7 @@ -/* $XTermId: scrollbar.c,v 1.145 2009/10/12 21:56:35 tom Exp $ */ +/* $XTermId: scrollbar.c,v 1.169 2010/04/21 00:19:04 tom Exp $ */ /* - * Copyright 2000-2008,2009 by Thomas E. Dickey + * Copyright 2000-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -66,6 +66,13 @@ #include <X11/XawPlus/Scrollbar.h> #endif +#if defined(HAVE_XKBQUERYEXTENSION) && defined(HAVE_X11_XKBLIB_H) && defined(HAVE_X11_EXTENSIONS_XKB_H) +#include <X11/extensions/XKB.h> +#include <X11/XKBlib.h> +#else +#undef HAVE_XKBQUERYEXTENSION +#endif + #include <data.h> #include <error.h> #include <menu.h> @@ -331,52 +338,62 @@ ResizeScrollBar(XtermWidget xw) } void -WindowScroll(XtermWidget xw, int top) +WindowScroll(XtermWidget xw, int top, Bool always GCC_UNUSED) { TScreen *screen = TScreenOf(xw); int i, lines; int scrolltop, scrollheight, refreshtop; - if (top < -screen->savedlines) - top = -screen->savedlines; - else if (top > 0) - top = 0; - if ((i = screen->topline - top) == 0) { - ScrollBarDrawThumb(screen->scrollWidget); - return; - } +#if OPT_SCROLL_LOCK + if (screen->allowScrollLock && (screen->scroll_lock && !always)) { + if (screen->scroll_dirty) { + screen->scroll_dirty = False; + ScrnRefresh(xw, 0, 0, MaxRows(screen), MaxCols(screen), False); + } + } else +#endif + { + if (top < -screen->savedlines) { + top = -screen->savedlines; + } else if (top > 0) { + top = 0; + } - if (screen->cursor_state) - HideCursor(); - lines = i > 0 ? i : -i; - if (lines > MaxRows(screen)) - lines = MaxRows(screen); - scrollheight = screen->max_row - lines + 1; - if (i > 0) - refreshtop = scrolltop = 0; - else { - scrolltop = lines; - refreshtop = scrollheight; - } - scrolling_copy_area(xw, scrolltop, scrollheight, -i); - screen->topline = top; + if ((i = screen->topline - top) != 0) { + + if (screen->cursor_state) + HideCursor(); + lines = i > 0 ? i : -i; + if (lines > MaxRows(screen)) + lines = MaxRows(screen); + scrollheight = screen->max_row - lines + 1; + if (i > 0) + refreshtop = scrolltop = 0; + else { + scrolltop = lines; + refreshtop = scrollheight; + } + scrolling_copy_area(xw, scrolltop, scrollheight, -i); + screen->topline = top; - ScrollSelection(screen, i, True); + ScrollSelection(screen, i, True); - XClearArea( - screen->display, - VWindow(screen), - OriginX(screen), - OriginY(screen) + refreshtop * FontHeight(screen), - (unsigned) Width(screen), - (unsigned) (lines * FontHeight(screen)), - False); - ScrnRefresh(xw, refreshtop, 0, lines, MaxCols(screen), False); + XClearArea( + screen->display, + VWindow(screen), + OriginX(screen), + OriginY(screen) + refreshtop * FontHeight(screen), + (unsigned) Width(screen), + (unsigned) (lines * FontHeight(screen)), + False); + ScrnRefresh(xw, refreshtop, 0, lines, MaxCols(screen), False); - ScrollBarDrawThumb(screen->scrollWidget); #if OPT_BLINK_CURS || OPT_BLINK_TEXT - RestartBlinking(screen); + RestartBlinking(screen); #endif + } + } + ScrollBarDrawThumb(screen->scrollWidget); } #ifdef SCROLLBAR_RIGHT @@ -521,7 +538,7 @@ ScrollTextTo( */ thumbTop = (int) (*topPercent * (screen->savedlines + MaxRows(screen))); newTopLine = thumbTop - screen->savedlines; - WindowScroll(xw, newTopLine); + WindowScroll(xw, newTopLine, True); } } @@ -540,7 +557,7 @@ ScrollTextUpDownBy( TScreen *screen = TScreenOf(xw); int rowOnScreen, newTopLine; - rowOnScreen = pixels / FontHeight(screen); + rowOnScreen = (int) (pixels / FontHeight(screen)); if (rowOnScreen == 0) { if (pixels < 0) rowOnScreen = -1; @@ -548,7 +565,7 @@ ScrollTextUpDownBy( rowOnScreen = 1; } newTopLine = ROW2INX(screen, rowOnScreen); - WindowScroll(xw, newTopLine); + WindowScroll(xw, newTopLine, True); } } @@ -673,3 +690,232 @@ HandleScrollBack( ScrollTextUpDownBy(xw, (XtPointer) 0, (XtPointer) amount); } } + +#if OPT_SCROLL_LOCK +#define SCROLL_LOCK_LED 3 + +#ifdef HAVE_XKBQUERYEXTENSION +/* + * Check for Xkb on client and server. + */ +static int +have_xkb(Display * dpy) +{ + static int initialized = -1; + + if (initialized < 0) { + int xkbmajor = XkbMajorVersion; + int xkbminor = XkbMinorVersion; + int xkbopcode, xkbevent, xkberror; + + initialized = 0; + if (XkbLibraryVersion(&xkbmajor, &xkbminor) + && XkbQueryExtension(dpy, + &xkbopcode, + &xkbevent, + &xkberror, + &xkbmajor, + &xkbminor)) { + TRACE(("we have Xkb\n")); + initialized = 1; +#if OPT_TRACE + { + XkbDescPtr xkb; + unsigned int mask; + int n; + char *modStr; + + xkb = XkbGetKeyboard(dpy, XkbAllComponentsMask, XkbUseCoreKbd); + if (xkb != NULL) { + + TRACE(("XkbGetKeyboard ok\n")); + for (n = 0; n < XkbNumVirtualMods; ++n) { + if (xkb->names->vmods[n] != 0) { + modStr = XGetAtomName(xkb->dpy, + xkb->names->vmods[n]); + if (modStr != 0) { + XkbVirtualModsToReal(xkb, 1 << n, &mask); + TRACE((" name[%d] %s (%#x)\n", n, modStr, mask)); + } + } + } + XkbFreeKeyboard(xkb, 0, True); + } + } +#endif + } + } + return initialized; +} + +static Boolean +getXkbLED(Display * dpy, const char *name, Boolean * result) +{ + Atom my_atom; + Boolean success = False; + Bool state; + + if (have_xkb(dpy)) { + my_atom = XInternAtom(dpy, name, True); + if ((my_atom != None) && + XkbGetNamedIndicator(dpy, my_atom, NULL, &state, NULL, NULL)) { + *result = (Boolean) state; + success = True; + } + } + + return success; +} + +/* + * Use Xkb if we have it (still unreliable, but slightly better than hardcoded). + */ +static Boolean +showXkbLED(Display * dpy, const char *name, Bool enable) +{ + Atom my_atom; + Boolean result = False; + + if (have_xkb(dpy)) { + my_atom = XInternAtom(dpy, name, True); + if ((my_atom != None) && + XkbGetNamedIndicator(dpy, my_atom, NULL, NULL, NULL, NULL) && + XkbSetNamedIndicator(dpy, my_atom, True, enable, False, NULL)) { + result = True; + } + } + + return result; +} +#endif + +static const char *led_table[] = +{ + "Num Lock", + "Caps Lock", + "Scroll Lock" +}; + +static Boolean +xtermGetLED(TScreen * screen, Cardinal led_number) +{ + Display *dpy = screen->display; + Boolean result = False; + +#ifdef HAVE_XKBQUERYEXTENSION + if (!getXkbLED(dpy, led_table[led_number - 1], &result)) +#endif + { + XKeyboardState state; + unsigned long my_bit = (unsigned long) (1 << (led_number - 1)); + + XGetKeyboardControl(dpy, &state); + + result = (Boolean) ((state.led_mask & my_bit) != 0); + } + + TRACE(("xtermGetLED %d:%s\n", led_number, BtoS(result))); + return result; +} + +/* + * Display the given LED, preferably independent of keyboard state. + */ +void +xtermShowLED(TScreen * screen, Cardinal led_number, Bool enable) +{ + TRACE(("xtermShowLED %d:%s\n", led_number, BtoS(enable))); + if ((led_number >= 1) && (led_number <= XtNumber(led_table))) { + Display *dpy = screen->display; + +#ifdef HAVE_XKBQUERYEXTENSION + if (!showXkbLED(dpy, led_table[led_number - 1], enable)) +#endif + { + XKeyboardState state; + XKeyboardControl values; + unsigned long use_mask; + unsigned long my_bit = (unsigned long) (1 << (led_number - 1)); + + XGetKeyboardControl(dpy, &state); + use_mask = state.led_mask; + if (enable) { + use_mask |= my_bit; + } else { + use_mask &= ~my_bit; + } + + if (state.led_mask != use_mask) { + values.led = (int) led_number; + values.led_mode = enable; + XChangeKeyboardControl(dpy, KBLed | KBLedMode, &values); + } + } + } +} + +void +xtermClearLEDs(TScreen * screen) +{ + Display *dpy = screen->display; + XKeyboardControl values; + + TRACE(("xtermClearLEDs\n")); + memset(&values, 0, sizeof(values)); + XChangeKeyboardControl(dpy, KBLedMode, &values); +} + +void +ShowScrollLock(TScreen * screen, Bool enable) +{ + xtermShowLED(screen, SCROLL_LOCK_LED, enable); +} + +void +GetScrollLock(TScreen * screen) +{ + if (screen->allowScrollLock) + screen->scroll_lock = xtermGetLED(screen, SCROLL_LOCK_LED); +} + +void +SetScrollLock(TScreen * screen, Bool enable) +{ + if (screen->allowScrollLock) { + if (screen->scroll_lock != enable) { + screen->scroll_lock = (Boolean) enable; + ShowScrollLock(screen, enable); + } + } +} + +void +HandleScrollLock(Widget w, + XEvent * event GCC_UNUSED, + String * params, + Cardinal *param_count) +{ + XtermWidget xw; + + if ((xw = getXtermWidget(w)) != 0) { + TScreen *screen = TScreenOf(xw); + + if (screen->allowScrollLock) { + /* + * The default action (used with KeyRelease event) is to cycle the + * state on/off. + */ + if (*param_count == 0) { + SetScrollLock(screen, !screen->scroll_lock); + TRACE(("HandleScrollLock ->%d\n", + screen->scroll_lock)); + } else { + SetScrollLock(screen, atoi(params[0])); + TRACE(("HandleScrollLock(%s) ->%d\n", + params[0], + screen->scroll_lock)); + } + } + } +} +#endif diff --git a/app/xterm/sinstall.sh b/app/xterm/sinstall.sh index 50a031236..fa85ec71d 100644 --- a/app/xterm/sinstall.sh +++ b/app/xterm/sinstall.sh @@ -1,9 +1,9 @@ #!/bin/sh -# $XTermId: sinstall.sh,v 1.17 2008/03/02 23:35:02 tom Exp $ +# $XTermId: sinstall.sh,v 1.18 2010/03/06 16:19:13 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # -# Copyright 1999-2006,2008 by Thomas E. Dickey +# Copyright 1999-2008,2010 by Thomas E. Dickey # # All Rights Reserved # @@ -159,7 +159,7 @@ elif test -f "$REF_PROG" ; then PROG_USR= ;; esac - PROG_MODE=`echo ".$cf_mode" | sed -e 's/^..//' -e 's/rw./7/g' -e 's/r-./5/g' -e 's/---/0/g' -e 's/--[sxt]/1/g' -e 's/+//g'` + PROG_MODE=`echo ".$cf_mode" | sed -e 's/^..//' -e 's/rw./7/g' -e 's/r-./5/g' -e 's/---/0/g' -e 's/--[sxt]/1/g' -e 's/[^0-7]//g'` fi # passed-in options override the reference diff --git a/app/xterm/tabs.c b/app/xterm/tabs.c index 52cec209d..70d3e1eba 100644 --- a/app/xterm/tabs.c +++ b/app/xterm/tabs.c @@ -1,7 +1,7 @@ -/* $XTermId: tabs.c,v 1.37 2009/11/28 14:11:06 tom Exp $ */ +/* $XTermId: tabs.c,v 1.38 2010/04/17 17:11:43 tom Exp $ */ /* - * Copyright 2000-2008,2009 by Thomas E. Dickey + * Copyright 2000-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -59,9 +59,9 @@ #define TAB_INDEX(n) ((n) >> TAB_BITS_SHIFT) #define TAB_MASK(n) (1 << ((n) & (TAB_BITS_WIDTH-1))) -#define SET_TAB(tabs,n) tabs[TAB_INDEX(n)] |= TAB_MASK(n) -#define CLR_TAB(tabs,n) tabs[TAB_INDEX(n)] &= ~TAB_MASK(n) -#define TST_TAB(tabs,n) tabs[TAB_INDEX(n)] & TAB_MASK(n) +#define SET_TAB(tabs,n) UIntSet(tabs[TAB_INDEX(n)], TAB_MASK(n)) +#define CLR_TAB(tabs,n) UIntClr(tabs[TAB_INDEX(n)], TAB_MASK(n)) +#define TST_TAB(tabs,n) (tabs[TAB_INDEX(n)] & (unsigned) TAB_MASK(n)) /* * places tabstops at only every 8 columns diff --git a/app/xterm/testxmc.c b/app/xterm/testxmc.c index dacada25d..44e4919a7 100644 --- a/app/xterm/testxmc.c +++ b/app/xterm/testxmc.c @@ -1,8 +1,8 @@ -/* $XTermId: testxmc.c,v 1.46 2009/11/28 14:15:24 tom Exp $ */ +/* $XTermId: testxmc.c,v 1.47 2010/04/17 17:11:33 tom Exp $ */ /************************************************************ -Copyright 1997-2006,2009 by Thomas E. Dickey +Copyright 1997-2009,2010 by Thomas E. Dickey All Rights Reserved @@ -88,8 +88,8 @@ authorization. #include <xterm.h> #include <data.h> -#define MARK_ON(a) (my_attrs & a) != 0 && (xw->flags & (whichone = CharOf(a))) == 0 -#define MARK_OFF(a) (my_attrs & a) != 0 && (xw->flags & (whichone = CharOf(a))) != 0 +#define MARK_ON(a) (Bool) ((my_attrs & a) != 0 && (xw->flags & (whichone = CharOf(a))) == 0) +#define MARK_OFF(a) (Bool) ((my_attrs & a) != 0 && (xw->flags & (whichone = CharOf(a))) != 0) void Mark_XMC(XtermWidget xw, int param) @@ -98,8 +98,8 @@ Mark_XMC(XtermWidget xw, int param) TScreen *screen = TScreenOf(xw); Bool found = False; - Char my_attrs = CharOf(screen->xmc_attributes & XMC_FLAGS); - Char whichone = 0; + unsigned my_attrs = CharOf(screen->xmc_attributes & XMC_FLAGS); + unsigned whichone = 0; if (glitch == 0) { unsigned len = screen->xmc_glitch; diff --git a/app/xterm/trace.c b/app/xterm/trace.c index d01667c68..bd4a0e26c 100644 --- a/app/xterm/trace.c +++ b/app/xterm/trace.c @@ -1,8 +1,8 @@ -/* $XTermId: trace.c,v 1.110 2009/12/10 09:36:28 tom Exp $ */ +/* $XTermId: trace.c,v 1.112 2010/04/15 21:45:37 tom Exp $ */ /* * - * Copyright 1997-2008,2009 by Thomas E. Dickey + * Copyright 1997-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -568,7 +568,7 @@ TraceTranslations(const char *name, Widget w) XtTranslations xlations; Widget xcelerat; - TRACE(("TraceTranslations for %s (widget %#lx)\n", name, (long) w)); + TRACE(("TraceTranslations for %s (widget %#lx) {{\n", name, (long) w)); if (w) { XtVaGetValues(w, XtNtranslations, &xlations, @@ -583,6 +583,7 @@ TraceTranslations(const char *name, Widget w) } else { TRACE(("none (widget is null)\n")); } + TRACE(("}}\n")); XSetErrorHandler(save); } diff --git a/app/xterm/trace.h b/app/xterm/trace.h index 40ffdd520..fc9176a65 100644 --- a/app/xterm/trace.h +++ b/app/xterm/trace.h @@ -1,8 +1,8 @@ -/* $XTermId: trace.h,v 1.51 2009/11/27 18:31:16 tom Exp $ */ +/* $XTermId: trace.h,v 1.52 2010/04/05 00:11:01 tom Exp $ */ /* * - * Copyright 1997-2008,2009 by Thomas E. Dickey + * Copyright 1997-2009,2010 by Thomas E. Dickey * * All Rights Reserved * @@ -102,7 +102,9 @@ extern void TraceXtermResources(void); extern int TraceResizeRequest(const char * /* fn */, int /* ln */, Widget /* w */, Dimension /* reqwide */, Dimension /* reqhigh */, Dimension * /* gotwide */, Dimension * /* gothigh */); #undef REQ_RESIZE #define REQ_RESIZE(w, reqwide, reqhigh, gotwide, gothigh) \ - TraceResizeRequest(__FILE__, __LINE__, w, reqwide, reqhigh, gotwide, gothigh) + TraceResizeRequest(__FILE__, __LINE__, w, \ + (Dimension) (reqwide), (Dimension) (reqhigh), \ + (gotwide), (gothigh)) #else diff --git a/app/xterm/util.c b/app/xterm/util.c index 2a05264f4..492f91f2e 100644 --- a/app/xterm/util.c +++ b/app/xterm/util.c @@ -1,4 +1,4 @@ -/* $XTermId: util.c,v 1.523 2010/01/03 23:56:24 tom Exp $ */ +/* $XTermId: util.c,v 1.534 2010/04/18 17:06:44 tom Exp $ */ /* * Copyright 1999-2009,2010 by Thomas E. Dickey @@ -90,6 +90,7 @@ static void vertical_copy_area(XtermWidget xw, int amount); #if OPT_WIDE_CHARS +unsigned first_widechar; int (*my_wcwidth) (wchar_t); #endif @@ -459,82 +460,98 @@ xtermScroll(XtermWidget xw, int amount) if (amount > i) amount = i; - if (ScrnHaveSelection(screen)) - adjustHiliteOnFwdScroll(xw, amount, scroll_all_lines); - - if (screen->jumpscroll) { - if (screen->scroll_amt > 0) { - if (!screen->fastscroll) { - if (screen->refresh_amt + amount > i) - FlushScroll(xw); - } - screen->scroll_amt += amount; - screen->refresh_amt += amount; - } else { - if (!screen->fastscroll) { - if (screen->scroll_amt < 0) - FlushScroll(xw); - } - screen->scroll_amt = amount; - screen->refresh_amt = amount; - } +#if OPT_SCROLL_LOCK + if (screen->allowScrollLock && screen->scroll_lock) { refreshheight = 0; - } else { - ScrollSelection(screen, -(amount), False); - if (amount == i) { - ClearScreen(xw); - screen->cursor_busy -= 1; - return; + screen->scroll_amt = 0; + screen->refresh_amt = 0; + if (--(screen->topline) < -screen->savelines) { + screen->topline = -screen->savelines; + screen->scroll_dirty = True; } - - shift = INX2ROW(screen, 0); - bot = screen->max_row - shift; - scrollheight = i - amount; - refreshheight = amount; - - if ((refreshtop = screen->bot_marg - refreshheight + 1 + shift) > - (i = screen->max_row - refreshheight + 1)) - refreshtop = i; - - if (scroll_all_lines) { - scrolltop = 0; - if ((scrollheight += shift) > i) - scrollheight = i; - if ((i = screen->savedlines) < screen->savelines) { - if ((i += amount) > screen->savelines) - i = screen->savelines; - screen->savedlines = i; - ScrollBarDrawThumb(screen->scrollWidget); + if (++(screen->savedlines) > screen->savelines) { + screen->savedlines = screen->savelines; + } + } else +#endif + { + if (ScrnHaveSelection(screen)) + adjustHiliteOnFwdScroll(xw, amount, scroll_all_lines); + + if (screen->jumpscroll) { + if (screen->scroll_amt > 0) { + if (!screen->fastscroll) { + if (screen->refresh_amt + amount > i) + FlushScroll(xw); + } + screen->scroll_amt += amount; + screen->refresh_amt += amount; + } else { + if (!screen->fastscroll) { + if (screen->scroll_amt < 0) + FlushScroll(xw); + } + screen->scroll_amt = amount; + screen->refresh_amt = amount; } + refreshheight = 0; } else { - scrolltop = screen->top_marg + shift; - if ((i = screen->bot_marg - bot) > 0) { - scrollheight -= i; - if ((i = screen->top_marg + amount - 1 - bot) >= 0) { - refreshtop += i; - refreshheight -= i; + ScrollSelection(screen, -(amount), False); + if (amount == i) { + ClearScreen(xw); + screen->cursor_busy -= 1; + return; + } + + shift = INX2ROW(screen, 0); + bot = screen->max_row - shift; + scrollheight = i - amount; + refreshheight = amount; + + if ((refreshtop = screen->bot_marg - refreshheight + 1 + shift) > + (i = screen->max_row - refreshheight + 1)) + refreshtop = i; + + if (scroll_all_lines) { + scrolltop = 0; + if ((scrollheight += shift) > i) + scrollheight = i; + if ((i = screen->savedlines) < screen->savelines) { + if ((i += amount) > screen->savelines) + i = screen->savelines; + screen->savedlines = i; + ScrollBarDrawThumb(screen->scrollWidget); + } + } else { + scrolltop = screen->top_marg + shift; + if ((i = screen->bot_marg - bot) > 0) { + scrollheight -= i; + if ((i = screen->top_marg + amount - 1 - bot) >= 0) { + refreshtop += i; + refreshheight -= i; + } } } - } - if (screen->multiscroll && amount == 1 && - screen->topline == 0 && screen->top_marg == 0 && - screen->bot_marg == screen->max_row) { - if (screen->incopy < 0 && screen->scrolls == 0) - CopyWait(xw); - screen->scrolls++; - } + if (screen->multiscroll && amount == 1 && + screen->topline == 0 && screen->top_marg == 0 && + screen->bot_marg == screen->max_row) { + if (screen->incopy < 0 && screen->scrolls == 0) + CopyWait(xw); + screen->scrolls++; + } - scrolling_copy_area(xw, scrolltop + amount, scrollheight, amount); + scrolling_copy_area(xw, scrolltop + amount, scrollheight, amount); - if (refreshheight > 0) { - ClearCurBackground(xw, - (int) refreshtop * FontHeight(screen) + screen->border, - (int) OriginX(screen), - (unsigned) (refreshheight * FontHeight(screen)), - (unsigned) Width(screen)); - if (refreshheight > shift) - refreshheight = shift; + if (refreshheight > 0) { + ClearCurBackground(xw, + (int) refreshtop * FontHeight(screen) + screen->border, + (int) OriginX(screen), + (unsigned) (refreshheight * FontHeight(screen)), + (unsigned) Width(screen)); + if (refreshheight > shift) + refreshheight = shift; + } } } @@ -665,7 +682,8 @@ WriteText(XtermWidget xw, IChar * str, Cardinal len) unsigned cells = visual_width(str, len); GC currentGC; - TRACE(("WriteText (%2d,%2d) %3d:%s\n", + TRACE(("WriteText %d (%2d,%2d) %3d:%s\n", + screen->topline, screen->cur_row, screen->cur_col, len, visibleIChar(str, len))); @@ -712,9 +730,12 @@ WriteText(XtermWidget xw, IChar * str, Cardinal len) screen->cur_row)); test = flags; +#if OPT_ISO_COLORS if (screen->colorAttrMode) { fg = MapToColorMode(xw->cur_foreground, screen, flags); - } else { + } else +#endif + { fg = xw->cur_foreground; } checkVeryBoldColors(test, fg); @@ -2242,7 +2263,9 @@ xtermXftDrawString(XtermWidget xw, } else #endif if ((flags & BOLDATTR(screen)) +#if OPT_ISO_COLORS && !screen->colorBDMode +#endif && XFT_FONT(renderWideBold[fontnum])) { wfont = XFT_FONT(renderWideBold[fontnum]); } else { @@ -3369,7 +3392,7 @@ getXtermSizeHints(XtermWidget xw) * current screen foreground and background colors. */ GC -updatedXtermGC(XtermWidget xw, unsigned flags, CellColor fg_bg, Bool hilite) +updatedXtermGC(XtermWidget xw, unsigned flags, unsigned fg_bg, Bool hilite) { TScreen *screen = TScreenOf(xw); VTwin *win = WhichVWin(screen); @@ -3506,7 +3529,7 @@ resetXtermGC(XtermWidget xw, unsigned flags, Bool hilite) * BOLD or UNDERLINE color-mode active, those will be used. */ unsigned -extract_fg(XtermWidget xw, CellColor color, unsigned flags) +extract_fg(XtermWidget xw, unsigned color, unsigned flags) { unsigned fg = ExtractForeground(color); @@ -3522,7 +3545,7 @@ extract_fg(XtermWidget xw, CellColor color, unsigned flags) * If we've got INVERSE color-mode active, that will be used. */ unsigned -extract_bg(XtermWidget xw, CellColor color, unsigned flags) +extract_bg(XtermWidget xw, unsigned color, unsigned flags) { unsigned bg = ExtractBackground(color); @@ -3887,20 +3910,22 @@ systemWcwidthOk(int samplesize, int samplepass) #endif /* HAVE_WCWIDTH */ void -decode_wcwidth(int mode, int samplesize, int samplepass) +decode_wcwidth(XtermWidget xw) { + int mode = ((xw->misc.cjk_width ? 2 : 0) + + (xw->misc.mk_width ? 1 : 0) + + 1); + switch (mode) { default: #if defined(HAVE_WCHAR_H) && defined(HAVE_WCWIDTH) - if (xtermEnvUTF8() && systemWcwidthOk(samplesize, samplepass)) { + if (xtermEnvUTF8() && + systemWcwidthOk(xw->misc.mk_samplesize, xw->misc.mk_samplepass)) { my_wcwidth = wcwidth; TRACE(("using system wcwidth() function\n")); break; } /* FALLTHRU */ -#else - (void) samplesize; - (void) samplepass; #endif case 2: my_wcwidth = &mk_wcwidth; @@ -3912,5 +3937,12 @@ decode_wcwidth(int mode, int samplesize, int samplepass) TRACE(("using MK-CJK wcwidth() function\n")); break; } + + for (first_widechar = 128; first_widechar < 4500; ++first_widechar) { + if (my_wcwidth((int) first_widechar) > 1) { + TRACE(("first_widechar %#x\n", first_widechar)); + break; + } + } } #endif diff --git a/app/xterm/uxterm.desktop b/app/xterm/uxterm.desktop index ddb1f1b92..f2b50dbf7 100644 --- a/app/xterm/uxterm.desktop +++ b/app/xterm/uxterm.desktop @@ -1,4 +1,4 @@ -# $XTermId: uxterm.desktop,v 1.7 2007/12/30 15:09:12 tom Exp $ +# $XTermId: uxterm.desktop,v 1.8 2010/03/05 09:51:58 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # @@ -38,4 +38,4 @@ Terminal=false Type=Application Encoding=UTF-8 Icon=xterm-color_48x48 -Categories=System; +Categories=System;TerminalEmulator; diff --git a/app/xterm/version.h b/app/xterm/version.h index 61ec78cdf..9082aab21 100644 --- a/app/xterm/version.h +++ b/app/xterm/version.h @@ -1,5 +1,5 @@ /* - * $XTermId: version.h,v 1.313 2010/01/20 01:39:08 tom Exp $ + * $XTermId: version.h,v 1.316 2010/04/23 08:43:31 tom Exp $ * ---------------------------------------------------------------------------- * this file is part of xterm * @@ -39,7 +39,7 @@ * version of X to which this version of xterm has been built. The number in * parentheses is my patch number (Thomas E. Dickey). */ -#define XTERM_PATCH 255 +#define XTERM_PATCH 258 #ifndef __vendorversion__ #define __vendorversion__ "XTerm/OpenBSD" diff --git a/app/xterm/xstrings.c b/app/xterm/xstrings.c index fe035fd2a..142f27631 100644 --- a/app/xterm/xstrings.c +++ b/app/xterm/xstrings.c @@ -1,8 +1,8 @@ -/* $XTermId: xstrings.c,v 1.36 2009/12/07 09:16:23 tom Exp $ */ +/* $XTermId: xstrings.c,v 1.37 2010/04/04 22:34:17 tom Exp $ */ /************************************************************ -Copyright 2000-2008,2009 by Thomas E. Dickey +Copyright 2000-2009,2010 by Thomas E. Dickey All Rights Reserved @@ -172,7 +172,7 @@ x_strcasecmp(const char *s1, const char *s2) if (len != strlen(s2)) return 1; - return x_strncasecmp(s1, s2, len); + return x_strncasecmp(s1, s2, (unsigned) len); } int diff --git a/app/xterm/xterm.desktop b/app/xterm/xterm.desktop index a32fc8548..483ac68e7 100644 --- a/app/xterm/xterm.desktop +++ b/app/xterm/xterm.desktop @@ -1,4 +1,4 @@ -# $XTermId: xterm.desktop,v 1.8 2007/12/30 15:09:12 tom Exp $ +# $XTermId: xterm.desktop,v 1.9 2010/03/06 16:17:35 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # @@ -38,4 +38,4 @@ Terminal=false Type=Application Encoding=UTF-8 Icon=xterm-color_48x48 -Categories=System; +Categories=System;TerminalEmulator; diff --git a/app/xterm/xterm.h b/app/xterm/xterm.h index 4ae4d82d3..984933184 100644 --- a/app/xterm/xterm.h +++ b/app/xterm/xterm.h @@ -1,4 +1,4 @@ -/* $XTermId: xterm.h,v 1.608 2010/01/20 01:36:37 tom Exp $ */ +/* $XTermId: xterm.h,v 1.625 2010/04/18 17:10:42 tom Exp $ */ /************************************************************ @@ -55,7 +55,7 @@ authorization. #if defined(__GNUC__) && defined(_FORTIFY_SOURCE) #define USE_IGNORE_RC -#define IGNORE_RC(func) ignore_unused = func +#define IGNORE_RC(func) ignore_unused = (int) func #else #define IGNORE_RC(func) (void) func #endif /* gcc workarounds */ @@ -344,6 +344,7 @@ extern char **environ; #define XtNallowC1Printable "allowC1Printable" #define XtNallowColorOps "allowColorOps" #define XtNallowFontOps "allowFontOps" +#define XtNallowScrollLock "allowScrollLock" #define XtNallowSendEvents "allowSendEvents" #define XtNallowTcapOps "allowTcapOps" #define XtNallowTitleOps "allowTitleOps" @@ -516,6 +517,7 @@ extern char **environ; #define XtCAllowC1Printable "AllowC1Printable" #define XtCAllowColorOps "AllowColorOps" #define XtCAllowFontOps "AllowFontOps" +#define XtCAllowScrollLock "AllowScrollLock" #define XtCAllowSendEvents "AllowSendEvents" #define XtCAllowTcapOps "AllowTcapOps" #define XtCAllowTitleOps "AllowTitleOps" @@ -772,9 +774,8 @@ extern void ReadLineButton PROTO_XT_ACTIONS_ARGS; #if OPT_WIDE_CHARS extern Bool iswide(int /* i */); -#define FIRST_WIDECHAR 256 -#define WideCells(n) (((IChar)(n) >= FIRST_WIDECHAR) ? my_wcwidth((wchar_t) (n)) : 1) -#define isWide(n) (((IChar)(n) >= FIRST_WIDECHAR) && iswide(n)) +#define WideCells(n) (((IChar)(n) >= first_widechar) ? my_wcwidth((wchar_t) (n)) : 1) +#define isWide(n) (((IChar)(n) >= first_widechar) && iswide(n)) #else #define WideCells(n) 1 #endif @@ -802,7 +803,6 @@ extern void noleaks_cachedCgs (XtermWidget /* xw */); /* charproc.c */ extern Bool CheckBufPtrs (TScreen * /* screen */); extern int VTInit (XtermWidget /* xw */); -extern int v_write (int /* f */, Char * /* d */, unsigned /* len */); extern void FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */); extern void HideCursor (void); extern void RestartBlinking(TScreen * /* screen */); @@ -825,6 +825,7 @@ extern void unparseputc1 (XtermWidget /* xw */, int /* c */); extern void unparseputn (XtermWidget /* xw */, unsigned /* n */); extern void unparseputs (XtermWidget /* xw */, const char * /* s */); extern void unparseseq (XtermWidget /* xw */, ANSI * /* ap */); +extern void v_write (int /* f */, Char * /* d */, unsigned /* len */); extern void xtermAddInput(Widget /* w */); #if OPT_BLINK_CURS @@ -923,6 +924,7 @@ extern SIGNAL_T Exit (int /* n */); #endif #if OPT_WIDE_CHARS +extern unsigned first_widechar; extern int (*my_wcwidth)(wchar_t); #endif @@ -932,7 +934,7 @@ extern void repairSizeHints (void); extern void show_8bit_control (Bool /* value */); /* misc.c */ -extern Bool AllocateTermColor(XtermWidget, ScrnColors *, int, const char *); +extern Bool AllocateTermColor(XtermWidget, ScrnColors *, int, const char *, Bool); extern Cursor make_colored_cursor (unsigned /* cursorindex */, unsigned long /* fg */, unsigned long /* bg */); extern OptionHelp * sortedOpts(OptionHelp *, XrmOptionDescRec *, Cardinal); extern Window WMFrameWindow(XtermWidget /* termw */); @@ -972,7 +974,7 @@ extern void ReverseOldColors (void); extern void SysError (int /* i */) GCC_NORETURN; extern void VisualBell (void); extern void do_dcs (XtermWidget /* xw */, Char * /* buf */, size_t /* len */); -extern void do_osc (XtermWidget /* xw */, Char * /* buf */, unsigned /* len */, int /* final */); +extern void do_osc (XtermWidget /* xw */, Char * /* buf */, size_t /* len */, int /* final */); extern void do_xevents (void); extern void end_tek_mode (void); extern void end_vt_mode (void); @@ -1004,6 +1006,19 @@ extern void HandleRestoreSize PROTO_XT_ACTIONS_ARGS; extern void RequestMaximize (XtermWidget /* termw */, int /* maximize */); #endif +#if OPT_SCROLL_LOCK +extern void GetScrollLock (TScreen * /* screen */); +extern void HandleScrollLock PROTO_XT_ACTIONS_ARGS; +extern void ShowScrollLock (TScreen * /* screen */, Bool /* enable */); +extern void SetScrollLock (TScreen * /* screen */, Bool /* enable */); +extern void xtermShowLED (TScreen * /* screen */, Cardinal /* led_number */, Bool /* enable */); +extern void xtermClearLEDs (TScreen * /* screen */); +#else +#define ShowScrollLock(screen, enable) /* nothing */ +#define SetScrollLock(screen, enable) /* nothing */ +#define GetScrollLock(screen) /* nothing */ +#endif + #if OPT_WIDE_CHARS extern Bool xtermEnvUTF8(void); #else @@ -1087,7 +1102,7 @@ extern void ScrnInsertChar (XtermWidget /* xw */, unsigned /* n */); extern void ScrnInsertLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* last */, int /* where */, unsigned /* n */); extern void ScrnRefresh (XtermWidget /* xw */, int /* toprow */, int /* leftcol */, int /* nrows */, int /* ncols */, Bool /* force */); extern void ScrnUpdate (XtermWidget /* xw */, int /* toprow */, int /* leftcol */, int /* nrows */, int /* ncols */, Bool /* force */); -extern void ScrnWriteText (XtermWidget /* xw */, IChar * /* str */, unsigned /* flags */, CellColor /* cur_fg_bg */, unsigned /* length */); +extern void ScrnWriteText (XtermWidget /* xw */, IChar * /* str */, unsigned /* flags */, unsigned /* cur_fg_bg */, unsigned /* length */); extern void setupLineData (TScreen * /* screen */, ScrnBuf /* base */, Char * /* data */, unsigned /* nrow */, unsigned /* ncol */); extern void xtermParseRect (XtermWidget /* xw */, int, int *, XTermRect *); @@ -1155,7 +1170,7 @@ extern void ScrollBarOff (XtermWidget /* xw */); extern void ScrollBarOn (XtermWidget /* xw */, Bool /* init */); extern void ScrollBarReverseVideo (Widget /* scrollWidget */); extern void ToggleScrollBar (XtermWidget /* xw */); -extern void WindowScroll (XtermWidget /* xw */, int /* top */); +extern void WindowScroll (XtermWidget /* xw */, int /* top */, Bool /* always */); #ifdef SCROLLBAR_RIGHT extern void updateRightScrollbar(XtermWidget /* xw */); @@ -1174,7 +1189,7 @@ extern void TabZonk (Tabs /* tabs */); /* util.c */ extern Boolean isDefaultBackground(const char * /* name */); extern Boolean isDefaultForeground(const char * /* name */); -extern GC updatedXtermGC (XtermWidget /* xw */, unsigned /* flags */, CellColor /* fg_bg */, Bool /* hilite */); +extern GC updatedXtermGC (XtermWidget /* xw */, unsigned /* flags */, unsigned /* fg_bg */, Bool /* hilite */); extern int AddToRefresh (XtermWidget /* xw */); extern int ClearInLine (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */); extern int HandleExposure (XtermWidget /* xw */, XEvent * /* event */); @@ -1192,7 +1207,7 @@ extern void RevScroll (XtermWidget /* xw */, int /* amount */); extern void ReverseVideo (XtermWidget /* termw */); extern void WriteText (XtermWidget /* xw */, IChar * /* str */, Cardinal /* len */); extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */); -extern void decode_wcwidth (int /* mode */, int /* samplesize */, int /* samplepass */); +extern void decode_wcwidth (XtermWidget /* xw */); extern void do_erase_display (XtermWidget /* xw */, int /* param */, int /* mode */); extern void do_erase_line (XtermWidget /* xw */, int /* param */, int /* mode */); extern void getXtermSizeHints (XtermWidget /* xw */); @@ -1210,8 +1225,8 @@ extern void xtermSizeHints (XtermWidget /* xw */, int /* scrollbarWidth */); #if OPT_ISO_COLORS -extern unsigned extract_fg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */); -extern unsigned extract_bg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */); +extern unsigned extract_fg (XtermWidget /* xw */, unsigned /* color */, unsigned /* flags */); +extern unsigned extract_bg (XtermWidget /* xw */, unsigned /* color */, unsigned /* flags */); extern CellColor makeColorPair (int /* fg */, int /* bg */); extern void ClearCurBackground (XtermWidget /* xw */, int /* top */, int /* left */, unsigned /* height */, unsigned /* width */); @@ -1257,7 +1272,7 @@ extern Pixel xtermGetColorRes(XtermWidget /* xw */, ColorRes * /* res */); && (screen->veryBoldColors & attr) == 0 \ && (flags & attr) != 0 \ && (fg == code)) \ - flags &= ~(attr) + UIntClr(flags, attr) #define checkVeryBoldColors(flags, fg) \ checkVeryBoldAttr(flags, fg, COLOR_RV, INVERSE); \ @@ -1332,6 +1347,9 @@ unsigned visual_width(IChar * /* str */, Cardinal /* len */); #define BtoS(b) (((b) == Maybe) ? "maybe" : ((b) ? "on" : "off")) #define NonNull(s) ((s) ? (s) : "<null>") +#define UIntSet(dst,bits) dst = dst | (unsigned) (bits) +#define UIntClr(dst,bits) dst = dst & (unsigned) ~(bits) + #ifdef __cplusplus } #endif diff --git a/app/xterm/xterm.log.html b/app/xterm/xterm.log.html index 055cce411..b3aca533d 100644 --- a/app/xterm/xterm.log.html +++ b/app/xterm/xterm.log.html @@ -31,7 +31,7 @@ * sale, use or other dealings in this Software without prior written * * authorization. * ***************************************************************************** - $XTermId: xterm.log.html,v 1.906 2010/01/22 01:00:37 tom Exp $ + $XTermId: xterm.log.html,v 1.933 2010/05/02 01:07:19 tom Exp $ --> <HTML> <HEAD> @@ -41,7 +41,7 @@ </HEAD> <BODY> <HR> -Copyright © 1997-2008,2009 by <A +Copyright © 1997-2009,2010 by <A HREF="mailto:dickey@invisible-island.net">Thomas E. Dickey</A> <HR> <H1>Contents</H1> @@ -56,6 +56,9 @@ Most of these are summarized in the XFree86 CHANGELOG is the latest version of this file. <UL> +<LI><A HREF="#xterm_258">Patch #258 - 2010/5/1</A> +<LI><A HREF="#xterm_257">Patch #257 - 2010/4/22</A> +<LI><A HREF="#xterm_256">Patch #256 - 2010/3/6</A> <LI><A HREF="#xterm_255">Patch #255 - 2010/1/21</A> <LI><A HREF="#xterm_254">Patch #254 - 2010/1/6</A> <LI><A HREF="#xterm_253">Patch #253 - 2009/12/10</A> @@ -314,6 +317,108 @@ is the latest version of this file. <LI><A HREF="#xterm_01">Patch #1 - 1996/1/6</A> </UL> +<H1><A NAME="xterm_258">Patch #258 - 2010/5/1</A></H1> +<ul> + <li>add pointer-checks in <code>ScrnRefresh</code> to fix a case in + rapid scrolling where an empty record is fetched from the + scrollback FIFO. +</ul> + +<H1><A NAME="xterm_257">Patch #257 - 2010/4/22</A></H1> +<ul> + <li>correct ctlseqs.ms description of OSC 17 and OSC 19 + (patch by Emanuele Giaquinta). + + <li>corrected logic for <code>menuLocale</code> resource; + the <code>setlocale</code> function returns the original locale + only when querying. + + <li>improve filtering of translations resource, narrowing the scope + of the <code>alwaysUseMods</code> to address only the translations + that would cause a key to be sent to the host (report by Andrew + Gaylard). + + <li>change default value of <code>menuLocale</code> resource to "C", + to work around + longstanding <a href="http://invisible-island.net/xterm/xterm.faq.html#slow_menus">Xorg bug</a>. + + <li>modify handling of <code>scrollKey</code> feature to ignore + XON/XOFF keys. + + <li>implement scroll-lock feature. + + <li>revise memory allocation in UTF8toLatin1() to fix an out-of-bounds + index (Mandriva #54531). + + <li>compute value for first wide-character rather than assuming it is + 256, fixes problem with <code>-cjk_width</code> introduced in + patches + <a href="#xterm_242">242</a> and + <a href="#xterm_249">249</a> + (report by Thomas Wolff). + + <li>improve configure script: + <ul> + <li>corrected check for <code>_XOPEN_SOURCE</code> for OpenSolaris. + + <li>when possible, add rpath option for libraries in unusual places + + <li>add configure option <code>--disable-rpath-hack</code> to + control whether the rpath option can be added. + </ul> + + <li>modify <code>AllocateTermColor()</code> to separate initialization + from control sequences, + fixing problem from <a href="#xterm_254">patch #254</a> changes + where enabling <code>allowSendEvents</code> + resource prevents setting cursor color on command-line + (Debian #572928). + + <li>amend logic from <a href="#xterm_185">patch #185</a> to not + reallocate cell-array if processing <code>ESC % G</code> + to switch from UTF-8 if already in ISO-8859-1 character set + (report by Michael Koehne). + + <li>fix to avoid calling <code>XmuInternStrings()</code> with zero + count (report by Johan Bockgård). + + <li>fix build when --disable-ansi-color configure option is used. + + <li>fix build when neither OPT_TCAP_QUERY or OPT_TCAP_FKEYS is defined + (patch by Matthieu Herrb) +</ul> + +<H1><A NAME="xterm_256">Patch #256 - 2010/3/6</A></H1> +<ul> + <li>add TerminalEmulator to desktop category files. + + <li>modify <code>sinstall.sh</code> to ignore the "." appended to + permissions by selinux. + + <li>change app-defaults organization, installing UXTerm-color + and KOI8XTerm-color for consistent behavior regarding + <code>customization: color</code> (prompted by discussion + in Ubuntu #421261). + + <li>fix typo in <code>minstall.sh</code> from + <a href="#xterm_255">patch #255</a> changes, + and add case for + <code>/var/run</code> needed for full path of utmp + (report by Julien Cristau). + + <li>minor fix to xterm manpage, remove a comment stating that margin + bell can be changed via the VT Options menu. That was replaced in + <a href="#xterm_225">patch #225</a> + + <li>add a "docs" rule to makefile. + + <li>fix initialization of Atom used for <code>XkbBell</code> feature + from <a href="#xterm_243">patch 243</a> changes. + Unlike the other calls to <code>XInternAtom()</code>, + in this case the flag telling X to create the Atom was unset + (patch by Chris Adams). +</ul> + <H1><A NAME="xterm_255">Patch #255 - 2010/1/21</A></H1> <ul> <li>rename <code>install.sh</code> to <code>install-sh</code> in case diff --git a/app/xterm/xterm.man b/app/xterm/xterm.man index 26638a4ca..8e392b861 100644 --- a/app/xterm/xterm.man +++ b/app/xterm/xterm.man @@ -1,5 +1,5 @@ '\" t -.\" $XTermId: xterm.man,v 1.451 2010/01/20 10:55:58 tom Exp $ +.\" $XTermId: xterm.man,v 1.456 2010/04/16 08:25:08 tom Exp $ .\" .\" Copyright 1996-2009,2010 by Thomas E. Dickey .\" @@ -725,8 +725,6 @@ shell (i.e., it will be a normal \*(``subshell\*(''). .B -mb This option indicates that \fIxterm\fP should ring a margin bell when the user types near the right end of a line. -This option can be turned on -and off from the \*(``VT Options\*('' menu. .TP 8 .B +mb This option indicates that margin bell should not be rung. @@ -1042,7 +1040,7 @@ This option indicates that \fIxterm\fP should not wait before starting the subprocess. .TP 8 .B -ziconbeep \fIpercent\fP -Same as zIconBeep resource. +Same as \fBzIconBeep\fP resource. If percent is non-zero, xterms that produce output while iconified will cause an XBell sound at the given volume and have "***" prepended to their icon titles. @@ -1268,12 +1266,11 @@ the popup menus. Use this to improve initialization performance of the Athena popup menus, which may load unnecessary (and very large) fonts, e.g., in a locale having UTF-8 encoding. -The default is an empty string, which uses the current locale setting. +The default is the "C" (POSIX). .IP -Set it to \*(``C\*('' to achieve the best performance using the default -menu resource settings. -If you happen to be using localized menu resources, -set the resource accordingly. +To use the current locale +(only useful if you have localized the resource settings for the menu entries), +set the resource to an empty string. .TP 8 .B "minBufSize (\fPclass\fB MinBufSize)" Specify the minimum size of the input buffer, i.e., the amount of data @@ -1501,6 +1498,12 @@ The default is \*(``true.\*('' Specifies whether control sequences that set/query the font should be allowed. The default is \*(``true.\*('' .TP 8 +.B "allowScrollLock (\fPclass\fB AllowScrollLock)" +Specifies whether control sequences that set/query +the Scroll Lock key should be allowed, +as well as whether the Scroll Lock key responds to user's keypress. +The default is \*(``true.\*('' +.TP 8 .B "allowSendEvents (\fPclass\fB AllowSendEvents)" Specifies whether or not synthetic key and button events (generated using the X protocol SendEvent request) should be interpreted or discarded. @@ -1607,6 +1610,9 @@ The default is \*(``false.\*('' Override the \fBnumLock\fP resource, telling \fIxterm\fR to use the Alt and Meta modifiers to construct parameters for function key sequences even if those modifiers appear in the translations resource. +Normally \fIxterm\fP checks if Alt or Meta is used in a translation that +would conflict with function key modifiers, and will ignore these modifiers +in that special case. The default is \*(``false.\*('' .TP 8 .B "answerbackString (\fPclass\fB AnswerbackString)" @@ -2882,6 +2888,10 @@ The default is \*(``xterm.\*('' .B "popOnBell (\fPclass\fB PopOnBell)" Specifies whether the window would be raised when Control-G is received. The default is \*(``false.\*('' +.IP +If the window is iconified, this has no effect. +However, the \fBzIconBeep\fP resource provides you with the ability to +see which iconified windows have sounded a bell. .TP 8 .B "preeditType (\fPclass\fB XtCPreeditType)" Tells \fIxterm\fP which types of preedit (preconversion) string to display. diff --git a/app/xterm/xtermcap.c b/app/xterm/xtermcap.c index c3139bc7f..0a941de3d 100644 --- a/app/xterm/xtermcap.c +++ b/app/xterm/xtermcap.c @@ -1,4 +1,4 @@ -/* $XTermId: xtermcap.c,v 1.41 2010/01/05 00:46:56 tom Exp $ */ +/* $XTermId: xtermcap.c,v 1.42 2010/03/12 00:53:05 Matthieu.Herrb Exp $ */ /* * Copyright 2007-2009,2010 by Thomas E. Dickey diff --git a/app/xterm/xtermcfg.h b/app/xterm/xtermcfg.h index 2b91e9374..f212655fd 100644 --- a/app/xterm/xtermcfg.h +++ b/app/xterm/xtermcfg.h @@ -80,11 +80,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define HAVE_WCSWIDTH 1 /* AC_CHECK_FUNCS(wcswidth) */ #define HAVE_WCWIDTH 1 /* AC_CHECK_FUNCS(wcwidth) */ #define HAVE_X11_DECKEYSYM_H 1 /* AC_CHECK_HEADERS(X11/DECkeysym.h) */ +#define HAVE_X11_EXTENSIONS_XKB_H /* AC_CHECK_HEADERS(X11/extensions/XKB.h) */ #define HAVE_X11_SUNKEYSYM_H 1 /* AC_CHECK_HEADERS(X11/Sunkeysym.h) */ #define HAVE_X11_XF86KEYSYM_H 1 /* AC_CHECK_HEADERS(X11/XF86keysym.h) */ +#define HAVE_X11_XKBLIB_H /* AC_CHECK_HEADERS(X11/XKBlib.h) */ #define HAVE_X11_XPOLL_H 1 /* AC_CHECK_HEADERS(X11/Xpoll.h) */ #define HAVE_XFTDRAWSETCLIP 1 /* CF_X_FREETYPE */ #define HAVE_XFTDRAWSETCLIPRECTANGLES 1 /* CF_X_FREETYPE */ +#define HAVE_XKBQUERYEXTENSION /* AC_CHECK_FUNCS(XkbQueryExtension) */ #define HAVE_XKB_BELL_EXT 1 /* CF_XKB_BELL_EXT */ #define LUIT_PATH "/usr/X11R6/bin/luit" /* CF_ARG_ENABLE(luit) */ /* #undef NO_ACTIVE_ICON */ /* CF_ARG_DISABLE(active-icon) */ diff --git a/app/xterm/xtermcfg.hin b/app/xterm/xtermcfg.hin index ff6a4bbd1..60d919eec 100644 --- a/app/xterm/xtermcfg.hin +++ b/app/xterm/xtermcfg.hin @@ -1,8 +1,8 @@ -/* $XTermId: xtermcfg.hin,v 1.178 2009/08/09 17:23:19 tom Exp $ */ +/* $XTermId: xtermcfg.hin,v 1.180 2010/04/21 00:19:23 tom Exp $ */ /************************************************************ -Copyright 1997-2008,2009 by Thomas E. Dickey +Copyright 1997-2009,2010 by Thomas E. Dickey All Rights Reserved @@ -80,11 +80,14 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #undef HAVE_WCSWIDTH /* AC_CHECK_FUNCS(wcswidth) */ #undef HAVE_WCWIDTH /* AC_CHECK_FUNCS(wcwidth) */ #undef HAVE_X11_DECKEYSYM_H /* AC_CHECK_HEADERS(X11/DECkeysym.h) */ +#undef HAVE_X11_EXTENSIONS_XKB_H /* AC_CHECK_HEADERS(X11/extensions/XKB.h) */ #undef HAVE_X11_SUNKEYSYM_H /* AC_CHECK_HEADERS(X11/Sunkeysym.h) */ #undef HAVE_X11_XF86KEYSYM_H /* AC_CHECK_HEADERS(X11/XF86keysym.h) */ +#undef HAVE_X11_XKBLIB_H /* AC_CHECK_HEADERS(X11/XKBlib.h) */ #undef HAVE_X11_XPOLL_H /* AC_CHECK_HEADERS(X11/Xpoll.h) */ #undef HAVE_XFTDRAWSETCLIP /* CF_X_FREETYPE */ #undef HAVE_XFTDRAWSETCLIPRECTANGLES /* CF_X_FREETYPE */ +#undef HAVE_XKBQUERYEXTENSION /* AC_CHECK_FUNCS(XkbQueryExtension) */ #undef HAVE_XKB_BELL_EXT /* CF_XKB_BELL_EXT */ #undef LUIT_PATH /* CF_ARG_ENABLE(luit) */ #undef NO_ACTIVE_ICON /* CF_ARG_DISABLE(active-icon) */ |