xterm: Changes to 'upstream-unstable'
INSTALL | 16
MANIFEST | 2
Makefile.in | 9
Tekproc.c | 4
VTPrsTbl.c | 10
VTparse.def | 3
VTparse.h | 3
aclocal.m4 | 314 +++++
button.c | 142 +-
cachedGCs.c | 8
charproc.c | 267 +++-
configure | 3157 +++++++++++++++++++++++++++++++++------------------------
configure.in | 12
ctlseqs.ms | 15
ctlseqs.txt | 11
cursor.c | 8
doublechr.c | 4
fontutils.c | 41
fontutils.h | 4
input.c | 211 ++-
linedata.c | 31
main.c | 46
main.h | 6
menu.c | 16
misc.c | 58 -
print.c | 6
ptydata.c | 13
ptyx.h | 47
resize.c | 18
screen.c | 77 -
scrollback.c | 22
scrollbar.c | 326 +++++
tabs.c | 10
testxmc.c | 12
trace.c | 7
trace.h | 8
util.c | 188 +--
version.h | 4
xstrings.c | 6
xterm.h | 48
xterm.log.html | 69 +
xterm.man | 26
xtermcap.c | 6
xtermcfg.hin | 7
44 files changed, 3361 insertions(+), 1937 deletions(-)
New commits:
commit 628a46ec01513a19e3aa11a7662e00c06244f1fa
Author: Julien Cristau <jcristau@debian.org>
Date: Thu Apr 22 18:11:09 2010 +0200
Import xterm 257
diff --git a/INSTALL b/INSTALL
index 2f85f3a..d2afa33 100644
--- a/INSTALL
+++ b/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/MANIFEST b/MANIFEST
index 282f20a..c82ef69 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,4 +1,4 @@
-MANIFEST for xterm-255, version xterm-255
+MANIFEST for xterm-257, version xterm-257
--------------------------------------------------------------------------------
MANIFEST this file
256colres.h resource-definitions for 256-color mode
diff --git a/Makefile.in b/Makefile.in
index 07b1f74..0c0bff6 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-## $XTermId: Makefile.in,v 1.170 2010/03/04 02:03:33 tom Exp $
+## $XTermId: Makefile.in,v 1.171 2010/04/04 22:41:32 tom Exp $
# -----------------------------------------------------------------------------
# this file is part of xterm
#
@@ -46,6 +46,9 @@ CPP = @CPP@
AWK = @AWK@
LINK = $(CC) $(CFLAGS)
+CTAGS = @CTAGS@
+ETAGS = @ETAGS@
+
LN_S = @LN_S@
RM = rm -f
LINT = @LINT@
@@ -397,10 +400,10 @@ lint :
$(LINT) $(CPPFLAGS) $(SRCS2)
tags :
- ctags $(SRCS) $(HDRS)
+ $(CTAGS) $(SRCS) $(HDRS)
TAGS :
- etags $(SRCS) $(HDRS)
+ $(ETAGS) $(SRCS) $(HDRS)
$(TERMINFO_DIR) $(INSTALL_DIRS) :
mkdir -p $@
diff --git a/Tekproc.c b/Tekproc.c
index 52dc9f2..b5ae9d2 100644
--- a/Tekproc.c
+++ b/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/VTPrsTbl.c b/VTPrsTbl.c
index e0057fd..095b3c1 100644
--- a/VTPrsTbl.c
+++ b/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/VTparse.def b/VTparse.def
index 8a9f08f..8e8d629 100644
--- a/VTparse.def
+++ b/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/VTparse.h b/VTparse.h
index 1df063b..0fd5110 100644
--- a/VTparse.h
+++ b/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/aclocal.m4 b/aclocal.m4
index e2a9af6..70fb1fc 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-dnl $XTermId: aclocal.m4,v 1.263 2010/01/20 09:23:58 tom Exp $
+dnl $XTermId: aclocal.m4,v 1.269 2010/04/17 20:32:28 tom Exp $
dnl
dnl ---------------------------------------------------------------------------
dnl
@@ -381,6 +381,25 @@ AC_SUBST(SHOW_CC)
AC_SUBST(ECHO_CC)
])dnl
dnl ---------------------------------------------------------------------------
+dnl CF_DISABLE_RPATH_HACK version: 1 updated: 2010/04/11 10:54:00
+dnl ---------------------
+dnl The rpath-hack makes it simpler to build programs, particularly with the
+dnl *BSD ports which may have essential libraries in unusual places. But it
+dnl can interfere with building an executable for the base system. Use this
+dnl option in that case.
+AC_DEFUN([CF_DISABLE_RPATH_HACK],
+[
+AC_MSG_CHECKING(if rpath should be not be set)
+CF_ARG_DISABLE(rpath-hack,
+ [ --disable-rpath-hack don't add rpath options for additional libraries],
+ [cf_disable_rpath_hack=yes],
+ [cf_disable_rpath_hack=no])
+AC_MSG_RESULT($cf_disable_rpath_hack)
+if test "$cf_disable_rpath_hack" = no ; then
+ CF_RPATH_HACK
+fi
+])
+dnl ---------------------------------------------------------------------------
dnl CF_ENABLE_NARROWPROTO version: 3 updated: 2006/02/12 17:46:00
dnl ---------------------
dnl If this is not set properly, Xaw's scrollbars will not work.
@@ -1082,6 +1101,127 @@ AC_TRY_COMPILE([
test $cf_cv_path_lastlog != no && AC_DEFINE(USE_LASTLOG)
])dnl
dnl ---------------------------------------------------------------------------
+dnl CF_LD_RPATH_OPT version: 2 updated: 2010/03/27 19:27:54
+dnl ---------------
+dnl For the given system and compiler, find the compiler flags to pass to the
+dnl loader to use the "rpath" feature.
+AC_DEFUN([CF_LD_RPATH_OPT],
+[
+AC_REQUIRE([CF_CHECK_CACHE])
+
+LD_RPATH_OPT=
+AC_MSG_CHECKING(for an rpath option)
+case $cf_cv_system_name in #(vi
+irix*) #(vi
+ if test "$GCC" = yes; then
+ LD_RPATH_OPT="-Wl,-rpath,"
+ else
+ LD_RPATH_OPT="-rpath "
+ fi
+ ;;
+linux*|gnu*|k*bsd*-gnu) #(vi
+ LD_RPATH_OPT="-Wl,-rpath,"
+ ;;
+openbsd[[2-9]].*) #(vi
+ LD_RPATH_OPT="-Wl,-rpath,"
+ ;;
+freebsd*) #(vi
+ LD_RPATH_OPT="-rpath "
+ ;;
+netbsd*) #(vi
+ LD_RPATH_OPT="-Wl,-rpath,"
+ ;;
+osf*|mls+*) #(vi
+ LD_RPATH_OPT="-rpath "
+ ;;
+solaris2*) #(vi
+ LD_RPATH_OPT="-R"
+ ;;
+*)
+ ;;
+esac
+AC_MSG_RESULT($LD_RPATH_OPT)
+
+case "x$LD_RPATH_OPT" in #(vi
+x-R*)
+ AC_MSG_CHECKING(if we need a space after rpath option)
+ cf_save_LIBS="$LIBS"
+ LIBS="${LD_RPATH_OPT}$libdir $LIBS"
+ AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes)
+ LIBS="$cf_save_LIBS"
+ AC_MSG_RESULT($cf_rpath_space)
+ test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MAKE_TAGS version: 5 updated: 2010/04/03 20:07:32
+dnl ------------
+dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have
+dnl a monocase filesystem.
+AC_DEFUN([CF_MAKE_TAGS],[
+AC_REQUIRE([CF_MIXEDCASE_FILENAMES])
+
+AC_CHECK_PROGS(CTAGS, exctags ctags)
+AC_CHECK_PROGS(ETAGS, exetags etags)
+
+AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS-ctags}, yes, no)
+
+if test "$cf_cv_mixedcase" = yes ; then
+ AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS-etags}, yes, no)
+else
+ MAKE_UPPER_TAGS=no
+fi
+
+if test "$MAKE_UPPER_TAGS" = yes ; then
+ MAKE_UPPER_TAGS=
+else
+ MAKE_UPPER_TAGS="#"
+fi
+
+if test "$MAKE_LOWER_TAGS" = yes ; then
+ MAKE_LOWER_TAGS=
+else
+ MAKE_LOWER_TAGS="#"
+fi
+
+AC_SUBST(CTAGS)
+AC_SUBST(ETAGS)
+
+AC_SUBST(MAKE_UPPER_TAGS)
+AC_SUBST(MAKE_LOWER_TAGS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_MIXEDCASE_FILENAMES version: 3 updated: 2003/09/20 17:07:55
+dnl ----------------------
+dnl Check if the file-system supports mixed-case filenames. If we're able to
+dnl create a lowercase name and see it as uppercase, it doesn't support that.
+AC_DEFUN([CF_MIXEDCASE_FILENAMES],
+[
+AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[
+if test "$cross_compiling" = yes ; then
+ case $target_alias in #(vi
+ *-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-mingw32*|*-uwin*) #(vi
+ cf_cv_mixedcase=no
+ ;;
+ *)
+ cf_cv_mixedcase=yes
+ ;;
+ esac
+else
+ rm -f conftest CONFTEST
+ echo test >conftest
+ if test -f CONFTEST ; then
+ cf_cv_mixedcase=no
+ else
+ cf_cv_mixedcase=yes
+ fi
+ rm -f conftest CONFTEST
+fi
+])
+test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl CF_MSG_LOG version: 4 updated: 2007/07/29 09:55:12
dnl ----------
dnl Write a debug message to config.log, along with the line number in the
@@ -1435,42 +1575,69 @@ AC_SUBST(PROG_EXT)
test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT")
])dnl
dnl ---------------------------------------------------------------------------
-dnl CF_REGEX version: 5 updated: 2009/12/19 13:18:53
+dnl CF_REGEX version: 6 updated: 2010/03/27 13:41:56
dnl --------
dnl Attempt to determine if we've got one of the flavors of regular-expression
dnl code that we can support.
AC_DEFUN([CF_REGEX],
[
-AC_CHECK_FUNC(regcomp,,[
- AC_CHECK_LIB(regex,regcomp,[LIBS="-lregex $LIBS"],[
- AC_CHECK_LIB(re,regcomp,[LIBS="-lre $LIBS"],[
- AC_CHECK_FUNC(compile,,[
- AC_CHECK_LIB(gen,compile,[LIBS="-lgen $LIBS"],[
- AC_MSG_WARN(cannot find regular expression library)
- ])
- ])
- ])
- ])
+cf_regex_func=no
+
+AC_CHECK_FUNC(regcomp,[cf_regex_func=regcomp],[
+ for cf_regex_lib in regex re
+ do
+ AC_CHECK_LIB($cf_regex_lib,regcomp,[
+ LIBS="-l$cf_regex_lib $LIBS"
+ cf_regex_func=regcomp
+ break])
+ done
])
+if test "$cf_regex_func" = no ; then
+ AC_CHECK_FUNC(compile,[cf_regex_func=compile],[
+ AC_CHECK_LIB(gen,compile,[
+ LIBS="-lgen $LIBS"
+ cf_regex_func=compile])])
+fi
+
+if test "$cf_regex_func" = no ; then
+ AC_MSG_WARN(cannot find regular expression library)
+fi
+
AC_CACHE_CHECK(for regular-expression headers,cf_cv_regex_hdrs,[
+
cf_cv_regex_hdrs=no
-AC_TRY_LINK([#include <sys/types.h>
-#include <regex.h>],[
- regex_t *p;
- int x = regcomp(p, "", 0);
- int y = regexec(p, "", 0, 0, 0);
- regfree(p);
- ],[cf_cv_regex_hdrs="regex.h"],[
- AC_TRY_LINK([#include <regexp.h>],[
- char *p = compile("", "", "", 0);
- int x = step("", "");
- ],[cf_cv_regex_hdrs="regexp.h"],[
- AC_TRY_LINK([#include <regexpr.h>],[
- char *p = compile("", "", "");
+case $cf_regex_func in #(vi
+compile) #(vi
+ for cf_regex_hdr in regexp.h regexpr.h
+ do
+ AC_TRY_LINK([#include <$cf_regex_hdr>],[
+ char *p = compile("", "", "", 0);
int x = step("", "");
- ],[cf_cv_regex_hdrs="regexpr.h"])])])
+ ],[
+ cf_cv_regex_hdrs=$cf_regex_hdr
+ break
+ ])
+ done
+ ;;
+*)
+ for cf_regex_hdr in regex.h
+ do
+ AC_TRY_LINK([#include <sys/types.h>
+#include <$cf_regex_hdr>],[
+ regex_t *p;
+ int x = regcomp(p, "", 0);
+ int y = regexec(p, "", 0, 0, 0);
+ regfree(p);
+ ],[
+ cf_cv_regex_hdrs=$cf_regex_hdr
+ break
+ ])
+ done
+ ;;
+esac
+
])
case $cf_cv_regex_hdrs in #(vi
@@ -1498,6 +1665,94 @@ $1=`echo "$2" | \
-e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'`
])dnl
dnl ---------------------------------------------------------------------------
+dnl CF_RPATH_HACK version: 8 updated: 2010/04/17 15:38:58
+dnl -------------
+AC_DEFUN([CF_RPATH_HACK],
+[
+AC_REQUIRE([CF_LD_RPATH_OPT])
+AC_MSG_CHECKING(for updated LDFLAGS)
+if test -n "$LD_RPATH_OPT" ; then
+ AC_MSG_RESULT(maybe)
+
+ AC_CHECK_PROGS(cf_ldd_prog,ldd,no)
+ cf_rpath_list="/usr/lib /lib"
+ if test "$cf_ldd_prog" != no
+ then
+AC_TRY_LINK([#include <stdio.h>],
+ [printf("Hello");],
+ [cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort -u`])
+ fi
+
+ CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS)
+
+ CF_RPATH_HACK_2(LDFLAGS)
+ CF_RPATH_HACK_2(LIBS)
+
+ CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS)
+fi
+AC_SUBST(EXTRA_LDFLAGS)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl CF_RPATH_HACK_2 version: 6 updated: 2010/04/17 16:31:24
+dnl ---------------
+dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to
+dnl EXTRA_LDFLAGS for each -L option found.
+dnl
+dnl $cf_rpath_list contains a list of directories to ignore.
+dnl
+dnl $1 = variable name to update. The LDFLAGS variable should be the only one,
+dnl but LIBS often has misplaced -L options.
+AC_DEFUN([CF_RPATH_HACK_2],
+[
+CF_VERBOSE(...checking $1 [$]$1)
+
+cf_rpath_dst=
+for cf_rpath_src in [$]$1
+do
+ case $cf_rpath_src in #(vi
+ -L*) #(vi
+
+ # check if this refers to a directory which we will ignore
+ cf_rpath_skip=no
+ if test -n "$cf_rpath_list"
+ then
+ for cf_rpath_item in $cf_rpath_list
+ do
+ if test "x$cf_rpath_src" = "x-L$cf_rpath_item"
+ then
+ cf_rpath_skip=yes
+ break
+ fi
+ done
+ fi
+
+ if test "$cf_rpath_skip" = no
+ then
+ # transform the option
+ if test "$LD_RPATH_OPT" = "-R " ; then
+ cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"`
+ else
+ cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"`
+ fi
+
+ # if we have not already added this, add it now
+ cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"`
+ if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS"
+ then
+ CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp)
+ EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
+ fi
+ fi
+ ;;
+ esac
+ cf_rpath_dst="$cf_rpath_dst $cf_rpath_src"
+done
+$1=$cf_rpath_dst
+
+CF_VERBOSE(...checked $1 [$]$1)
+AC_SUBST(EXTRA_LDFLAGS)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl CF_SIGWINCH version: 1 updated: 2006/04/02 16:41:09
dnl -----------
dnl Use this macro after CF_XOPEN_SOURCE, but do not require it (not all
@@ -2410,7 +2665,7 @@ AC_TRY_LINK([
test "$cf_cv_xkb_bell_ext" = yes && AC_DEFINE(HAVE_XKB_BELL_EXT)
])
dnl ---------------------------------------------------------------------------
-dnl CF_XOPEN_SOURCE version: 32 updated: 2010/01/09 11:05:50
+dnl CF_XOPEN_SOURCE version: 33 updated: 2010/03/28 15:35:52
dnl ---------------
dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
dnl or adapt to the vendor's definitions to get equivalent functionality,
@@ -2473,7 +2728,10 @@ nto-qnx*) #(vi
sco*) #(vi
# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
;;
-solaris*) #(vi
+solaris2.1[[0-9]]) #(vi
+ cf_xopen_source="-D__EXTENSIONS__ -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+ ;;
+solaris2.[[1-9]]) #(vi
cf_xopen_source="-D__EXTENSIONS__"
;;
*)
diff --git a/button.c b/button.c
index 0cd6b97..2976538 100644
--- a/button.c
+++ b/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/cachedGCs.c b/cachedGCs.c
index 9a5970f..3b56082 100644
--- a/cachedGCs.c
+++ b/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 $ */
/************************************************************
Reply to: