INSTALL | 11 MANIFEST | 2 Makefile.in | 9 Tekproc.c | 42 aclocal.m4 | 38 button.c | 113 - cachedGCs.c | 25 charproc.c | 94 - config.guess | 15 config.sub | 16 configure | 3862 +++++++++++++++++++++++----------------------- configure.in | 7 cursor.c | 32 data.c | 6 data.h | 8 doublechr.c | 13 fontutils.c | 49 graphics.c | 29 graphics.h | 42 graphics_regis.c | 146 + graphics_regis.h | 8 graphics_sixel.c | 187 +- graphics_sixel.h | 8 input.c | 31 keysym2ucs.c | 6 main.c | 23 menu.c | 6 misc.c | 152 + package/debian/changelog | 6 package/freebsd/Makefile | 2 package/xterm.spec | 4 precompose.c | 8 print.c | 26 ptydata.c | 7 ptyx.h | 8 scrollback.c | 9 scrollbar.c | 17 svg.c | 8 termcap | 14 terminfo | 9 trace.c | 49 trace.h | 12 unicode/README | 13 unicode/convmap.pl | 9 unicode/keysym.map | 3 unicode/precompose.c.tail | 6 util.c | 214 +- version.c | 9 version.h | 6 wcwidth.c | 22 xstrings.c | 24 xterm.h | 3 xterm.log.html | 103 + xterm.man | 94 - xtermcap.c | 24 xtermcfg.hin | 19 56 files changed, 3030 insertions(+), 2678 deletions(-)
New commits: commit c9cb401305a4c9866c5462a724410472c4e6db29 Author: Sven Joachim <svenj...@gmx.de> Date: Mon Jun 6 17:27:21 2016 +0200 Imported Upstream version 325 diff --git a/INSTALL b/INSTALL index f049a7c..e2f03b4 100644 --- a/INSTALL +++ b/INSTALL @@ -1,6 +1,6 @@ --- $XTermId: INSTALL,v 1.158 2015/08/10 23:38:32 tom Exp $ +-- $XTermId: INSTALL,v 1.159 2016/05/28 18:39:26 tom Exp $ ------------------------------------------------------------------------------- --- Copyright 1997-2014,2015 by Thomas E. Dickey +-- Copyright 1997-2015,2016 by Thomas E. Dickey -- -- All Rights Reserved -- @@ -777,6 +777,13 @@ The options (in alphabetic order): Activate the --disable-leaks option, and ensure that "-g" is added to CFLAGS. + --without-xinerama do not use Xinerama extension for multiple screens + + Xinerama is an X server extension that allows multiple physical + screens to behave as a single screen. If you do not need the feature + (or do not want the extra library dependency), use this option to + suppress it. + --with-xpm=DIR use Xpm library for colored icon, may specify path Use Xpm library to show colored icon in window decoration, e.g., diff --git a/MANIFEST b/MANIFEST index 818655f..98e5f3b 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1,4 +1,4 @@ -MANIFEST for xterm-324, version xterm-324 +MANIFEST for xterm-325, version xterm-325 -------------------------------------------------------------------------------- MANIFEST this file 256colres.h resource-definitions for 256-color mode diff --git a/Makefile.in b/Makefile.in index 5064a12..17b273d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,8 +1,8 @@ -## $XTermId: Makefile.in,v 1.234 2015/02/12 09:31:30 tom Exp $ +## $XTermId: Makefile.in,v 1.235 2016/05/15 16:45:53 tom Exp $ # ----------------------------------------------------------------------------- # this file is part of xterm # -# Copyright 1997-2014,2015 by Thomas E. Dickey +# Copyright 1997-2015,2016 by Thomas E. Dickey # # All Rights Reserved # @@ -52,6 +52,7 @@ ETAGS = @ETAGS@ LN_S = @LN_S@ RM = rm -f LINT = @LINT@ +LINT_OPTS = @LINT_OPTS@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ @@ -563,8 +564,8 @@ koi8rxterm.ps : koi8rxterm.$(manext) koi8rxterm.txt : koi8rxterm.$(manext) ################################################################################ lint : - $(LINT) $(CPPFLAGS) $(SRCS1) - $(LINT) $(CPPFLAGS) $(SRCS2) + $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(SRCS1) + $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(SRCS2) tags : $(CTAGS) $(SRCS) $(HDRS) diff --git a/Tekproc.c b/Tekproc.c index 6f8da47..a640643 100644 --- a/Tekproc.c +++ b/Tekproc.c @@ -1,7 +1,7 @@ -/* $XTermId: Tekproc.c,v 1.198 2014/07/12 22:55:02 tom Exp $ */ +/* $XTermId: Tekproc.c,v 1.199 2016/05/16 09:14:46 tom Exp $ */ /* - * Copyright 2001-2012,2014 by Thomas E. Dickey + * Copyright 2001-2014,2016 by Thomas E. Dickey * * All Rights Reserved * @@ -416,12 +416,11 @@ Tekparse(TekWidget tw) TScreen *screen = TScreenOf(xw); TekScreen *tekscr = TekScreenOf(tw); int x, y; - IChar c = 0; IChar ch; int nextstate; for (;;) { - c = input(); + IChar c = input(); /* * The parsing tables all have 256 entries. If we're supporting * wide characters, we handle them by treating them the same as @@ -1036,12 +1035,15 @@ TekPage(TekWidget tw) static int getpoint(TekWidget tw) { - int c, x, y, e, lo_y = 0; + int x, y, e, lo_y = 0; TekScreen *tekscr = TekScreenOf(tw); x = tekscr->cur.x; y = tekscr->cur.y; + for (;;) { + int c; + if ((c = (int) input()) < ' ') { /* control character */ unput(c); return (0); @@ -1083,16 +1085,12 @@ TCursorBack(TekWidget tw) { TekScreen *tekscr = TekScreenOf(tw); const struct Tek_Char *t; - int x, l; - - x = (tekscr->cur_X -= - (t = &TekChar[tekscr->cur.fontsize])->hsize - ); + int x = (tekscr->cur_X -= (t = &TekChar[tekscr->cur.fontsize])->hsize); if (((tekscr->margin == MARGIN1) && (x < 0)) || ((tekscr->margin == MARGIN2) && (x < TEKWIDTH / 2))) { - if ((l = (tekscr->cur_Y + (t->vsize - 1)) / t->vsize + 1) >= - t->nlines) { + int l = ((tekscr->cur_Y + (t->vsize - 1)) / t->vsize + 1); + if (l >= t->nlines) { tekscr->margin = !tekscr->margin; l = 0; } @@ -1105,14 +1103,11 @@ static void TCursorForward(TekWidget tw) { TekScreen *tekscr = TekScreenOf(tw); - const struct Tek_Char *t; - int l; + const struct Tek_Char *t = &TekChar[tekscr->cur.fontsize]; - if ((tekscr->cur_X += - (t = &TekChar[tekscr->cur.fontsize])->hsize - ) > TEKWIDTH - ) { - if ((l = tekscr->cur_Y / t->vsize - 1) < 0) { + if ((tekscr->cur_X += t->hsize) > TEKWIDTH) { + int l = (tekscr->cur_Y / t->vsize - 1); + if (l < 0) { tekscr->margin = !tekscr->margin; l = t->nlines - 1; } @@ -1733,7 +1728,6 @@ void ChangeTekColors(TekWidget tw, TScreen *screen, ScrnColors * pNew) { TekScreen *tekscr = TekScreenOf(tw); - int i; XGCValues gcv; if (COLOR_DEFINED(pNew, TEK_FG)) { @@ -1753,6 +1747,8 @@ ChangeTekColors(TekWidget tw, TScreen *screen, ScrnColors * pNew) } if (tw) { + int i; + XSetForeground(XtDisplay(tw), tekscr->TnormalGC, T_COLOR(screen, TEK_FG)); XSetBackground(XtDisplay(tw), tekscr->TnormalGC, @@ -1785,7 +1781,6 @@ TekReverseVideo(TekWidget tw) XtermWidget xw = term; TScreen *screen = TScreenOf(xw); TekScreen *tekscr = TekScreenOf(tw); - int i; Pixel tmp; XGCValues gcv; @@ -1794,6 +1789,8 @@ TekReverseVideo(TekWidget tw) T_COLOR(screen, TEK_CURSOR) = T_COLOR(screen, TEK_FG); if (tw) { + int i; + XSetForeground(XtDisplay(tw), tekscr->TnormalGC, T_COLOR(screen, TEK_FG)); XSetBackground(XtDisplay(tw), tekscr->TnormalGC, T_COLOR(screen, TEK_BG)); @@ -1903,7 +1900,6 @@ TekCopy(TekWidget tw) TekLink *Tp; char buf[TIMESTAMP_LEN + 10]; - char initbuf[5]; int tekcopyfd; timestamp_filename(buf, "COPY"); @@ -1921,6 +1917,8 @@ TekCopy(TekWidget tw) tekcopyfd = open_userfile(screen->uid, screen->gid, buf, False); if (tekcopyfd >= 0) { + char initbuf[5]; + sprintf(initbuf, "%c%c%c%c", ANSI_ESC, (char) (tekscr->page.fontsize + '8'), ANSI_ESC, (char) (tekscr->page.linetype + '`')); diff --git a/aclocal.m4 b/aclocal.m4 index 9ac69df..1aa0c3e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,4 +1,4 @@ -dnl $XTermId: aclocal.m4,v 1.408 2016/03/11 00:54:28 tom Exp $ +dnl $XTermId: aclocal.m4,v 1.412 2016/05/28 18:42:52 tom Exp $ dnl dnl --------------------------------------------------------------------------- dnl @@ -254,11 +254,15 @@ ifelse([$3],,[ :]dnl ])dnl ])])dnl dnl --------------------------------------------------------------------------- -dnl CF_CC_ENV_FLAGS version: 2 updated: 2015/04/12 15:39:00 +dnl CF_CC_ENV_FLAGS version: 3 updated: 2016/05/21 18:10:17 dnl --------------- dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content dnl into CC. This will not help with broken scripts that wrap the compiler with dnl options, but eliminates a more common category of user confusion. +dnl +dnl Caveat: this also disallows blanks in the pathname for the compiler, but +dnl the nuisance of having inconsistent settings for compiler and preprocessor +dnl outweighs that limitation. AC_DEFUN([CF_CC_ENV_FLAGS], [ # This should have been defined by AC_PROG_CC @@ -266,13 +270,16 @@ AC_DEFUN([CF_CC_ENV_FLAGS], AC_MSG_CHECKING(\$CC variable) case "$CC" in -(*[[\ \ ]]-[[IUD]]*) +(*[[\ \ ]]-*) AC_MSG_RESULT(broken) AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options) # humor him... - cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]]//'` + cf_flags=`echo "$CC" | sed -e 's/^[[^ ]]*[[ ]][[ ]]*//'` CC=`echo "$CC" | sed -e 's/[[ ]].*//'` CF_ADD_CFLAGS($cf_flags) + CF_VERBOSE(resulting CC: '$CC') + CF_VERBOSE(resulting CFLAGS: '$CFLAGS') + CF_VERBOSE(resulting CPPFLAGS: '$CPPFLAGS') ;; (*) AC_MSG_RESULT(ok) @@ -1893,6 +1900,14 @@ AC_SUBST(GROFF_NOTE) AC_SUBST(NROFF_NOTE) ])dnl dnl --------------------------------------------------------------------------- +dnl CF_PROG_LINT version: 3 updated: 2016/05/22 15:25:54 +dnl ------------ +AC_DEFUN([CF_PROG_LINT], +[ +AC_CHECK_PROGS(LINT, lint cppcheck splint) +AC_SUBST(LINT_OPTS) +])dnl +dnl --------------------------------------------------------------------------- dnl CF_REGEX version: 12 updated: 2015/04/18 08:56:57 dnl -------- dnl Attempt to determine if we've got one of the flavors of regular-expression @@ -3769,6 +3784,21 @@ CF_NO_LEAKS_OPTION(valgrind, [USE_VALGRIND]) ])dnl dnl --------------------------------------------------------------------------- +dnl CF_WITH_XINERAMA version: 1 updated: 2016/05/28 14:41:12 +dnl ---------------- +AC_DEFUN([CF_WITH_XINERAMA], +[ +AC_MSG_CHECKING(if you want to use the Xinerama extension) +AC_ARG_WITH(xinerama, +[ --without-xinerama do not use Xinerama extension for multiscreen support], + [cf_with_xinerama="$withval"], + [cf_with_xinerama=yes]) +AC_MSG_RESULT($cf_with_xinerama) +if test "$cf_with_xinerama" = yes; then + CF_XINERAMA +fi +])dnl +dnl --------------------------------------------------------------------------- dnl CF_WITH_XPM version: 3 updated: 2012/10/04 06:57:36 dnl ----------- dnl Test for Xpm library, update compiler/loader flags if it is wanted and diff --git a/button.c b/button.c index 630e212..1532d3d 100644 --- a/button.c +++ b/button.c @@ -1,4 +1,4 @@ -/* $XTermId: button.c,v 1.501 2016/03/06 19:16:35 tom Exp $ */ +/* $XTermId: button.c,v 1.505 2016/05/30 19:42:44 tom Exp $ */ /* * Copyright 1999-2015,2016 by Thomas E. Dickey @@ -562,7 +562,6 @@ InitLocatorFilter(XtermWidget xw) int row = 0, col = 0; Bool oor = 0; Bool ret; - int state; ret = XQueryPointer(screen->display, VWindow(screen), &root, &child, &rx, &ry, &x, &y, &mask); @@ -643,6 +642,8 @@ InitLocatorFilter(XtermWidget xw) (col > screen->loc_filter_right) || (row < screen->loc_filter_top) || (row > screen->loc_filter_bottom)) { + int state; + /* Pointer is already outside the rectangle - report immediately */ ButtonState(state, mask); @@ -679,7 +680,6 @@ CheckLocatorPosition(XtermWidget xw, XButtonEvent *event) TScreen *screen = TScreenOf(xw); int row, col; Bool oor; - int state; LocatorCoords(row, col, event->x, event->y, oor); @@ -703,6 +703,8 @@ CheckLocatorPosition(XtermWidget xw, XButtonEvent *event) reply.a_nparam = 1; reply.a_param[0] = 0; /* Event - 0 = locator unavailable */ } else { + int state; + ButtonState(state, event->state); reply.a_nparam = 4; @@ -838,10 +840,12 @@ rowOnCurrentLine(TScreen *screen, int *deltap) /* must be XButtonEvent */ { int result = 1; - int l1, l2; *deltap = 0; + if (line != screen->cur_row) { + int l1, l2; + if (line < screen->cur_row) l1 = line, l2 = screen->cur_row; else @@ -947,12 +951,13 @@ DiredButton(Widget w, if ((xw = getXtermWidget(w)) != 0) { TScreen *screen = TScreenOf(xw); - Char Line[6]; - unsigned line, col; if (IsBtnEvent(event) && (event->xbutton.y >= screen->border) && (event->xbutton.x >= OriginX(screen))) { + Char Line[6]; + unsigned line, col; + line = (unsigned) ((event->xbutton.y - screen->border) / FontHeight(screen)); col = (unsigned) ((event->xbutton.x - OriginX(screen)) @@ -1036,14 +1041,16 @@ ViButton(Widget w, if ((xw = getXtermWidget(w)) != 0) { TScreen *screen = TScreenOf(xw); int pty = screen->respond; - Char Line[6]; - int line; if (IsBtnEvent(event)) { + int line; line = screen->cur_row - ((event->xbutton.y - screen->border) / FontHeight(screen)); + if (line != 0) { + Char Line[6]; + Line[0] = ANSI_ESC; /* force an exit from insert-mode */ v_write(pty, Line, 1); @@ -1229,8 +1236,6 @@ UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result) Cardinal offset = 0; - const Char *p; - if (len != 0) { PtyData data; @@ -1265,6 +1270,8 @@ UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result) * whatever the user wants). */ if (fails) { + const Char *p; + for (p = (const Char *) screen->default_string; *p != '\0'; ++p) { AddChar(&buffer, &used, offset, *p); } @@ -1524,13 +1531,12 @@ static Atom * _SelectionTargets(Widget w) { Atom *result; - TScreen *screen; XtermWidget xw; if ((xw = getXtermWidget(w)) == 0) { result = NULL; } else { - screen = TScreenOf(xw); + TScreen *screen = TScreenOf(xw); #if OPT_WIDE_CHARS if (screen->wide_chars) { @@ -1726,13 +1732,14 @@ xtermGetSelection(Widget w, } #endif } else { - struct _SelectionList *list; if (targets == NULL || targets[0] == None) { targets = _SelectionTargets(w); } if (targets != 0) { + struct _SelectionList *list; + target = targets[0]; if (targets[1] == None) { /* last target in list */ @@ -1840,11 +1847,10 @@ ToNational(TScreen *screen, Char *buffer, unsigned *length) { int gsetL = screen->gsets[screen->curgl]; int gsetR = screen->gsets[screen->curgr]; - unsigned chr, out, gl, gr; - Char *p; #if OPT_WIDE_CHARS if ((screen->utf8_nrc_mode | screen->utf8_mode) != uFalse) { + Char *p; PtyData *data = TypeXtMallocX(PtyData, *length); memset(data, 0, sizeof(*data)); @@ -1853,6 +1859,8 @@ ToNational(TScreen *screen, Char *buffer, unsigned *length) memcpy(data->buffer, buffer, (size_t) *length); p = buffer; while (data->next < data->last) { + unsigned chr, out, gl, gr; + if (!decodeUtf8(screen, data)) { data->utf_size = 1; data->utf_data = data->next[0]; @@ -1872,9 +1880,12 @@ ToNational(TScreen *screen, Char *buffer, unsigned *length) } else #endif { + Char *p; + for (p = buffer; (int) (p - buffer) < (int) *length; ++p) { - chr = *p; - out = chr; + unsigned gl, gr; + unsigned chr = *p; + unsigned out = chr; if ((gl = xtermCharSetIn(screen, chr, gsetL)) != chr) { out = gl; } else if ((gr = xtermCharSetIn(screen, chr, gsetR)) != chr) { @@ -1978,7 +1989,9 @@ _WriteSelectionData(XtermWidget xw, Char *line, size_t length) /* Doing this one line at a time may no longer be necessary because v_write has been re-written. */ +#if OPT_PASTE64 TScreen *screen = TScreenOf(xw); +#endif Char *lag, *end; /* in the VMS version, if tt_pasting isn't set to True then qio @@ -2049,11 +2062,11 @@ removeControls(XtermWidget xw, char *value) { TScreen *screen = TScreenOf(xw); size_t dst = 0; - size_t src = 0; if (screen->allowPasteControls) { dst = strlen(value); } else { + size_t src = 0; while ((value[dst] = value[src]) != '\0') { int ch = CharOf(value[src++]); if (ch < 32) { @@ -2098,7 +2111,7 @@ SelectionReceived(Widget w, int *format) { char **text_list = NULL; - int text_list_count; + int text_list_count = 0; XTextProperty text_prop; TScreen *screen; Display *dpy; @@ -2479,9 +2492,7 @@ EndExtend(XtermWidget xw, Bool use_cursor_loc) { CELL cell; - unsigned count; TScreen *screen = TScreenOf(xw); - Char line[64]; if (use_cursor_loc) { cell = screen->cursorp; @@ -2489,11 +2500,15 @@ EndExtend(XtermWidget xw, PointToCELL(screen, event->xbutton.y, event->xbutton.x, &cell); } ExtendExtend(xw, &cell); + screen->lastButtonUpTime = event->xbutton.time; screen->lastButton = event->xbutton.button; + if (!isSameCELL(&(screen->startSel), &(screen->endSel))) { if (screen->replyToEmacs) { - count = 0; + Char line[64]; + unsigned count = 0; + if (screen->control_eight_bits) { line[count++] = ANSI_CSI; } else { @@ -2863,10 +2878,10 @@ static int LastTextCol(TScreen *screen, CLineData *ld, int row) { int i = -1; - const IAttr *ch; if (ld != 0) { if (okScrnRow(screen, row)) { + const IAttr *ch; for (i = screen->max_col, ch = ld->attribs + i; i >= 0 && !(*ch & CHARDRAWN); @@ -3243,8 +3258,6 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc) char *expr = screen->selectExpr[inx]; regex_t preg; regmatch_t match; - char *search; - int *indexed; TRACE(("Select_REGEX[%d]:%s\n", inx, NonNull(expr))); if (okPosition(screen, &ld, startc) && expr != 0) { @@ -3253,11 +3266,13 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc) int lastRow = lastRowOfLine(screen, firstRow); unsigned size = lengthOfLines(screen, firstRow, lastRow); int actual = cellToColumn(screen, startc); + int *indexed; TRACE(("regcomp ok rows %d..%d bytes %d\n", firstRow, lastRow, size)); if ((indexed = TypeCallocN(int, size + 1)) != 0) { + char *search; if ((search = make_indexed_text(screen, firstRow, size, @@ -3355,7 +3370,6 @@ ComputeSelect(XtermWidget xw, { TScreen *screen = TScreenOf(xw); - int length; int cclass; CELL first = *startc; CELL last = *endc; @@ -3429,7 +3443,7 @@ ComputeSelect(XtermWidget xw, #endif if (okPosition(screen, &(ld.endSel), &(screen->endSel))) { - length = LastTextCol(screen, ld.endSel, screen->endSel.row); + int length = LastTextCol(screen, ld.endSel, screen->endSel.row); cclass = CClassOf(endSel); do { ++screen->endSel.col; @@ -3608,7 +3622,6 @@ ReHiliteText(XtermWidget xw, CELL *lastp) { TScreen *screen = TScreenOf(xw); - int i; CELL first = *firstp; CELL last = *lastp; @@ -3630,6 +3643,7 @@ ReHiliteText(XtermWidget xw, return; if (!isSameRow(&first, &last)) { /* do multiple rows */ + int i; if ((i = screen->max_col - first.col + 1) > 0) { /* first row */ ScrnRefresh(xw, first.row, first.col, 1, i, True); } @@ -3656,13 +3670,13 @@ SaltTextAway(XtermWidget xw, TScreen *screen = TScreenOf(xw); int i, j = 0; int eol; - int tmp; Char *line; Char *lp; CELL first = *cellc; CELL last = *cell; if (isSameRow(&first, &last) && first.col > last.col) { + int tmp; EXCHANGE(first.col, last.col, tmp); } @@ -3983,9 +3997,7 @@ ConvertSelection(Widget w, } if (*target == XA_TARGETS(dpy)) { - Atom *allocP; Atom *targetP; - Atom *std_targets; XPointer std_return = 0; unsigned long std_length; @@ -3993,6 +4005,8 @@ ConvertSelection(Widget w, target, type, &std_return, &std_length, format)) { Atom *my_targets = _SelectionTargets(w); + Atom *allocP; + Atom *std_targets; TRACE(("XmuConvertStandardSelection - success\n")); std_targets = (Atom *) (void *) (std_return); @@ -4341,7 +4355,6 @@ SaveText(TScreen *screen, { LineData *ld; int i = 0; - unsigned c; Char *result = lp; #if OPT_WIDE_CHARS unsigned previous = 0; @@ -4358,6 +4371,7 @@ SaveText(TScreen *screen, #endif *eol = !LineTstWrapped(ld); for (i = scol; i < ecol; i++) { + unsigned c; assert(i < (int) ld->lineSize); c = E2A(ld->charData[i]); #if OPT_WIDE_CHARS @@ -4371,10 +4385,9 @@ SaveText(TScreen *screen, are in memory attached to the HIDDEN_CHAR */ if_OPT_WIDE_CHARS(screen, { if ((screen->utf8_nrc_mode | screen->utf8_mode) != uFalse) { - unsigned ch; size_t off; for_each_combData(off, ld) { - ch = ld->combData[off][i]; + unsigned ch = ld->combData[off][i]; if (ch == 0) break; lp = convertToUTF8(lp, ch); @@ -4390,10 +4403,9 @@ SaveText(TScreen *screen, if ((screen->utf8_nrc_mode | screen->utf8_mode) != uFalse) { lp = convertToUTF8(lp, (c != 0) ? c : ' '); if_OPT_WIDE_CHARS(screen, { - unsigned ch; size_t off; for_each_combData(off, ld) { - ch = ld->combData[off][i]; + unsigned ch = ld->combData[off][i]; if (ch == 0) break; lp = convertToUTF8(lp, ch); @@ -4827,13 +4839,12 @@ static char ** tokenizeFormat(String format) { char **result = 0; - int pass; int argc; - int n; format = x_skip_blanks(format); if (*format != '\0') { char *blob = x_strdup(format); + int pass; for (pass = 0; pass < 2; ++pass) { int used = 0; @@ -4841,6 +4852,7 @@ tokenizeFormat(String format) int escaped = 0; int squoted = 0; int dquoted = 0; + int n; argc = 0; for (n = 0; format[n] != '\0'; ++n) { @@ -4998,9 +5010,10 @@ expandFormat(XtermWidget xw, size_t need = 0; for (n = 0; format[n] != '\0'; ++n) { - char *value = 0; if (format[n] == '%') { + char *value = 0; + switch (format[++n]) { case '%': if (pass) { @@ -5089,10 +5102,10 @@ expandFormat(XtermWidget xw, static void executeCommand(pid_t pid, char **argv) { - char *child_cwd = ProcGetCWD(pid); - (void) pid; if (argv != 0 && argv[0] != 0) { + char *child_cwd = ProcGetCWD(pid); + if (fork() == 0) { if (child_cwd) { IGNORE_RC(chdir(child_cwd)); /* We don't care if this fails */ @@ -5106,11 +5119,10 @@ executeCommand(pid_t pid, char **argv) static void freeArgv(char *blob, char **argv) { - int n; - if (blob) { free(blob); if (argv) { + int n; for (n = 0; argv[n]; ++n) free(argv[n]); free(argv); @@ -5125,11 +5137,11 @@ reallyExecFormatted(Widget w, char *format, char *data, CELL *start, CELL *finis if ((xw = getXtermWidget(w)) != 0) { char **argv; - char *blob; - int argc; if ((argv = tokenizeFormat(format)) != 0) { - blob = argv[0]; + char *blob = argv[0]; + int argc; + for (argc = 0; argv[argc] != 0; ++argc) { argv[argc] = expandFormat(xw, argv[argc], data, start, finish); } @@ -5169,13 +5181,13 @@ HandleExecSelectable(Widget w, CELL start, finish; char *data; char **argv; - char *blob; - int argc; data = getDataFromScreen(xw, params[1], &start, &finish); if (data != 0) { if ((argv = tokenizeFormat(params[0])) != 0) { - blob = argv[0]; + char *blob = argv[0]; + int argc; + for (argc = 0; argv[argc] != 0; ++argc) { argv[argc] = expandFormat(xw, argv[argc], data, &start, &finish); @@ -5235,11 +5247,10 @@ HandleInsertSelectable(Widget w, CELL start, finish; char *data; char *temp = x_strdup(params[0]); - char *exps; data = getDataFromScreen(xw, params[1], &start, &finish); if (data != 0) { - exps = expandFormat(xw, temp, data, &start, &finish); + char *exps = expandFormat(xw, temp, data, &start, &finish); if (exps != 0) { unparseputs(xw, exps); unparse_end(xw); diff --git a/cachedGCs.c b/cachedGCs.c index 2b346b7..84b74f2 100644 --- a/cachedGCs.c +++ b/cachedGCs.c @@ -1,7 +1,7 @@ -/* $XTermId: cachedGCs.c,v 1.63 2014/12/18 21:56:08 tom Exp $ */ +/* $XTermId: cachedGCs.c,v 1.64 2016/05/16 09:26:15 tom Exp $ */ /* - * Copyright 2007-2011,2014 by Thomas E. Dickey + * Copyright 2007-2014,2016 by Thomas E. Dickey * * All Rights Reserved * @@ -527,12 +527,12 @@ setCgsFont(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId, XTermFonts * font) void clrCgsFonts(XtermWidget xw, VTwin *cgsWin, XTermFonts * font) { - CgsCache *me; - int j, k; - if (HaveFont(font)) { + int j; for_each_gc(j) { + CgsCache *me; if ((me = myCache(xw, cgsWin, (CgsEnum) j)) != 0) { + int k; for (k = 0; k < DEPTH; ++k) { if (SameFont(LIST(k).font, font)) { TRACE2(("clrCgsFonts %s gc %p(%d) %s\n", @@ -565,13 +565,13 @@ getCgsGC(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId) { CgsCache *me; GC result = 0; - int j, k; - unsigned used = 0; if ((me = myCache(xw, cgsWin, cgsId)) != 0) { TRACE2(("getCgsGC(%s, %s)\n", traceVTwin(xw, cgsWin), traceCgsEnum(cgsId))); if (me->mask != 0) { + int j; + unsigned used = 0; /* fill in the unchanged fields */ if (!(me->mask & GC_CSet)) @@ -622,6 +622,7 @@ getCgsGC(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId) } if (result == 0) { + int k; /* if none were empty, pick the least-used slot, to modify */ for (j = 0, k = -1; j < DEPTH; ++j) { if (used >= LIST(j).used) { @@ -769,12 +770,12 @@ copyCgs(XtermWidget xw, VTwin *cgsWin, CgsEnum dstCgsId, CgsEnum srcCgsId) void redoCgs(XtermWidget xw, Pixel fg, Pixel bg, CgsEnum cgsId) { - int n; VTwin *cgsWin = WhichVWin(TScreenOf(xw)); CgsCache *me = myCache(xw, cgsWin, cgsId); if (me != 0) { CgsCacheData *save_data = me->data; + int n; for (n = 0; n < DEPTH; ++n) { if (LIST(n).gc != 0 && HaveFont(LIST(n).font)) { @@ -806,12 +807,13 @@ void swapCgs(XtermWidget xw, VTwin *cgsWin, CgsEnum dstCgsId, CgsEnum srcCgsId) { if (dstCgsId != srcCgsId) { - CgsCache *dst; CgsCache *src; - CgsCache tmp; if ((src = myCache(xw, cgsWin, srcCgsId)) != 0) { + CgsCache *dst; + if ((dst = myCache(xw, cgsWin, dstCgsId)) != 0) { + CgsCache tmp; int srcIndex = dataIndex(src); int dstIndex = dataIndex(dst); @@ -831,9 +833,10 @@ GC freeCgs(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId) { CgsCache *me; - int j; if ((me = myCache(xw, cgsWin, cgsId)) != 0) { + int j; + for (j = 0; j < DEPTH; ++j) { if (LIST(j).gc != 0) { TRACE(("freeCgs(%s, %s) gc %p(%d)\n", diff --git a/charproc.c b/charproc.c index d4cf1d9..f177f89 100644 --- a/charproc.c +++ b/charproc.c @@ -1,4 +1,4 @@ -/* $XTermId: charproc.c,v 1.1417 2016/02/12 00:18:59 tom Exp $ */ +/* $XTermId: charproc.c,v 1.1420 2016/05/30 19:31:33 tom Exp $ */ /* * Copyright 1999-2015,2016 by Thomas E. Dickey @@ -4128,14 +4128,12 @@ doparsing(XtermWidget xw, unsigned c, struct ParseState *sp) case CASE_RIS: TRACE(("CASE_RIS\n")); VTReset(xw, True, True); - ResetState(sp); - break; + /* NOTREACHED */ case CASE_DECSTR: TRACE(("CASE_DECSTR\n")); VTReset(xw, False, False); - ResetState(sp); - break; + /* NOTREACHED */ case CASE_REP: TRACE(("CASE_REP\n")); @@ -4399,8 +4397,6 @@ static Char *v_bufend; /* end of physical buffer */ void v_write(int f, const Char *data, unsigned len) { - int riten; - TRACE2(("v_write(%d:%s)\n", len, visibleChars(data, len))); if (v_bufstr == NULL) { if (len > 0) { @@ -4414,7 +4410,7 @@ v_write(int f, const Char *data, unsigned len) } } if_DEBUG({ - fprintf(stderr, "v_write called with %d bytes (%ld left over)", + fprintf(stderr, "v_write called with %u bytes (%ld left over)", len, (long) (v_bufptr - v_bufstr)); if (len > 1 && len < 10) fprintf(stderr, " \"%.*s\"", len, (const char *) data); @@ -4465,7 +4461,7 @@ v_write(int f, const Char *data, unsigned len) v_buffer = TypeRealloc(Char, size + len, v_buffer); if (v_buffer) { if_DEBUG({ - fprintf(stderr, "expanded buffer to %d\n", + fprintf(stderr, "expanded buffer to %u\n", size + len); }); v_bufstr = v_buffer; @@ -4503,6 +4499,8 @@ v_write(int f, const Char *data, unsigned len) #define MAX_PTY_WRITE 128 /* 1/2 POSIX minimum MAX_INPUT */ if (v_bufptr > v_bufstr) { + int riten; + #ifdef VMS riten = tt_write(v_bufstr, ((v_bufptr - v_bufstr <= VMS_TERM_BUFFER_SIZE) @@ -4550,7 +4548,7 @@ v_write(int f, const Char *data, unsigned len)