xterm: Changes to 'upstream-unstable'
INSTALL | 50 +-
MANIFEST | 2
THANKS | 4
VTPrsTbl.c | 342 ++++++++++++++++++-
VTparse.def | 6
VTparse.h | 7
button.c | 291 ++++++++++------
charproc.c | 297 +++++++++++++---
charsets.c | 825 +++++++++++++++++++++++++++++------------------
configure | 138 +++----
configure.in | 52 +-
ctlseqs.ms | 28 +
ctlseqs.txt | 29 +
cursor.c | 4
doublechr.c | 6
fontutils.c | 68 +--
fontutils.h | 20 -
graphics.c | 18 -
input.c | 19 -
misc.c | 87 ++--
package/debian/changelog | 6
package/freebsd/Makefile | 2
package/xterm.spec | 4
ptyx.h | 64 +++
screen.c | 12
trace.c | 110 +++---
trace.h | 9
util.c | 90 +++--
version.h | 6
xterm.h | 10
xterm.log.html | 97 +++++
xterm.man | 7
32 files changed, 1848 insertions(+), 862 deletions(-)
New commits:
commit 109db94a827306c71c63fd8e3314e21509bde184
Author: Sven Joachim <svenjoac@gmx.de>
Date: Wed Sep 11 17:33:32 2013 +0200
Imported Upstream version 297
diff --git a/INSTALL b/INSTALL
index 9d555fc..2554ca2 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,4 +1,4 @@
--- $XTermId: INSTALL,v 1.148 2013/06/23 20:22:46 tom Exp $
+-- $XTermId: INSTALL,v 1.149 2013/08/04 19:33:14 tom Exp $
-------------------------------------------------------------------------------
-- Copyright 1997-2012,2013 by Thomas E. Dickey
--
@@ -30,23 +30,12 @@
-------------------------------------------------------------------------------
Xterm was originally built as part of the X Window System source tree, using
-imake to generate a Makefile from Imakefile. You can also use the configure
-script to generate a Makefile from Makefile.in:
+imake to generate a Makefile from Imakefile.
- + If you have imake (or xmkmf), then you can use those directly,
- or use the configure script, which normally uses those tools
- to obtain the special definitions needed to build xterm.
+An example Imakefile is provided for legacy use.
- Ultimately, imake will not be necessary, since it is possible
- to add configure tests that derive the information that imake
- would supply.
-
- + You need the Athena widgets (or a clone, such as Xaw3d or
- neXtaw), to provide the popup menus.
-
-Even if you have imake, the configure script is still convenient because
-it allows you to build different configurations more easily than with
-imake, simply by specifying options to the configure script.
+The preferred method uses the configure script to generate a Makefile from
+Makefile.in
Options:
-------
@@ -221,6 +210,15 @@ The options (in alphabetic order):
tool. Normally these chunks of memory are retained as long as xterm
is running.
+ --disable-luit disable support for luit filter (Unicode translation)
+
+ Luit is a filter that can be run between an arbitrary application and a
+ UTF-8 terminal emulator. It will convert application output from the
+ locale's encoding into UTF-8, and convert terminal input from UTF-8
+ into the locale's encoding.
+
+ This is normally enabled, relying upon "--enable-wide-chars".
+
--disable-maximize disable actions for iconify/deiconify/maximize/restore
Do not compile-in code that implements runtime 'actions' for
@@ -341,6 +339,12 @@ The options (in alphabetic order):
A genuine vt100 emulates a vt52.
+ --disable-wide-chars disable wide-character support
+
+ The wide-character code supports Unicode and UTF-8.
+
+ This is normally enabled.
+
--disable-ziconbeep disable -ziconbeep option
Do not compile-in code that modifies the icon's title and sounds a
@@ -436,15 +440,6 @@ The options (in alphabetic order):
Logging was disabled in X11R5 xterm because of security problems.
They were addressed in X11R6, but the feature was not reinstated.
- --enable-luit enable support for luit filter (Unicode translation)
-
- Luit is a filter that can be run between an arbitrary application and a
- UTF-8 terminal emulator. It will convert application output from the
- locale's encoding into UTF-8, and convert terminal input from UTF-8
- into the locale's encoding.
-
- This sets "--enable-wide-chars" as a side-effect.
-
--enable-meta-sends-esc set default metaSendsEscape resource (default: no)
This sets the default resource value, which is shown in the manpage.
@@ -523,11 +518,6 @@ The options (in alphabetic order):
I use this option regularly, and correct all but a few (difficult)
problems.
- --enable-wide-chars enable wide-character support
-
- Compile-in code that supports 16-bit characters. Includes support
- for UTF-8.
-
--enable-xmc-glitch test: enable xmc magic-cookie emulation
Compile-in code that simulates the terminfo "magic cookie" glitch.
diff --git a/MANIFEST b/MANIFEST
index 5675bd8..08d673c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,4 +1,4 @@
-MANIFEST for xterm-296, version xterm-296
+MANIFEST for xterm-297, version xterm-297
--------------------------------------------------------------------------------
MANIFEST this file
256colres.h resource-definitions for 256-color mode
diff --git a/THANKS b/THANKS
index dbcc4af..a38ebf9 100644
--- a/THANKS
+++ b/THANKS
@@ -1,4 +1,4 @@
--- $XTermId: THANKS,v 1.9 2013/07/04 23:04:24 tom Exp $
+-- $XTermId: THANKS,v 1.11 2013/08/08 08:24:07 tom Exp $
-- vile:txtmode fk=8bit
There's no AUTHORS file in this distribution; it would be redundant since
I (Thomas E. Dickey) have done more than 80% of the work on xterm since 1996.
@@ -81,6 +81,7 @@ H Merijn Brand
Hasso Tepper
Holger Veit
Ilya Zakharevich
+Iwamoto Kouichi
James Armstrong
Jason Bacon
Jason Vas Dias
@@ -149,6 +150,7 @@ Peter Berg Larsen
Pierre Lombard
Richard Braakman
Richard Griswold
+Richard Tollerton
Rob Braun
Robert Brady
Robert Earl
diff --git a/VTPrsTbl.c b/VTPrsTbl.c
index 7414ee9..34accc3 100644
--- a/VTPrsTbl.c
+++ b/VTPrsTbl.c
@@ -1,4 +1,4 @@
-/* $XTermId: VTPrsTbl.c,v 1.69 2012/09/10 23:28:14 tom Exp $ */
+/* $XTermId: VTPrsTbl.c,v 1.72 2013/08/21 23:50:44 tom Exp $ */
/*
* Copyright 1999-2011,2012 by Thomas E. Dickey
@@ -5971,7 +5971,7 @@ CASE_ESC_IGNORE,
CASE_ESC_IGNORE,
/* $ % & ' */
CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
+CASE_SCS_PERCENT,
CASE_ESC_IGNORE,
CASE_ESC_IGNORE,
/* ( ) * + */
@@ -6000,9 +6000,9 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* < = > ? */
-CASE_GROUND_STATE,
CASE_GSETS,
-CASE_GROUND_STATE,
+CASE_GSETS,
+CASE_GSETS,
CASE_GROUND_STATE,
/* @ A B C */
CASE_GROUND_STATE,
@@ -6045,7 +6045,7 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* ` a b c */
-CASE_GROUND_STATE,
+CASE_GSETS,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
@@ -6131,7 +6131,7 @@ CASE_ESC_IGNORE,
CASE_ESC_IGNORE,
/* currency yen brokenbar section */
CASE_ESC_IGNORE,
-CASE_ESC_IGNORE,
+CASE_SCS_PERCENT,
CASE_ESC_IGNORE,
CASE_ESC_IGNORE,
/* diaeresis copyright ordfeminine guillemotleft */
@@ -6160,9 +6160,9 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* onequarter onehalf threequarters questiondown */
-CASE_GROUND_STATE,
CASE_GSETS,
-CASE_GROUND_STATE,
+CASE_GSETS,
+CASE_GSETS,
CASE_GROUND_STATE,
/* Agrave Aacute Acircumflex Atilde */
CASE_GROUND_STATE,
@@ -6205,7 +6205,7 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* agrave aacute acircumflex atilde */
-CASE_GROUND_STATE,
+CASE_GSETS,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
@@ -7222,6 +7222,330 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE,
CASE_IGNORE,
};
+
+Const PARSE_T scs_pct_table[] = /* SCS % */
+{
+/* NUL SOH STX ETX */
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+/* EOT ENQ ACK BEL */
+CASE_IGNORE,
+CASE_ENQ,
+CASE_IGNORE,
+CASE_BELL,
+/* BS HT NL VT */
+CASE_BS,
+CASE_TAB,
+CASE_VMOT,
+CASE_VMOT,
+/* FF CR SO SI */
+CASE_VMOT,
+CASE_CR,
+CASE_SO,
+CASE_SI,
+/* DLE DC1 DC2 DC3 */
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+/* DC4 NAK SYN ETB */
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+/* CAN EM SUB ESC */
+CASE_GROUND_STATE,
+CASE_IGNORE,
+CASE_GROUND_STATE,
+CASE_ESC,
+/* FS GS RS US */
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+CASE_IGNORE,
+/* SP ! " # */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* $ % & ' */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* ( ) * + */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* , - . / */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* 0 1 2 3 */
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+CASE_GSETS_PERCENT,
+CASE_GSETS_PERCENT,
+/* 4 5 6 7 */
+CASE_GROUND_STATE,
+CASE_GSETS_PERCENT,
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+/* 8 9 : ; */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* < = > ? */
+CASE_GROUND_STATE,
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* @ A B C */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* D E F G */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* H I J K */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* L M N O */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* P Q R S */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* T U V W */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* X Y Z [ */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* \ ] ^ _ */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* ` a b c */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* d e f g */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* h i j k */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* l m n o */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* p q r s */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* t u v w */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* x y z { */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* | } ~ DEL */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_IGNORE,
+/* 0x80 0x81 0x82 0x83 */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* 0x84 0x85 0x86 0x87 */
+CASE_IND,
+CASE_NEL,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* 0x88 0x89 0x8a 0x8b */
+CASE_HTS,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* 0x8c 0x8d 0x8e 0x8f */
+CASE_GROUND_STATE,
+CASE_RI,
+CASE_SS2,
+CASE_SS3,
+/* 0x90 0x91 0x92 0x93 */
+CASE_DCS,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* 0x94 0x95 0x96 0x97 */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_SPA,
+CASE_EPA,
+/* 0x98 0x99 0x9a 0x9b */
+CASE_SOS,
+CASE_GROUND_STATE,
+CASE_DECID,
+CASE_CSI_STATE,
+/* 0x9c 0x9d 0x9e 0x9f */
+CASE_ST,
+CASE_OSC,
+CASE_PM,
+CASE_APC,
+/* nobreakspace exclamdown cent sterling */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* currency yen brokenbar section */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* diaeresis copyright ordfeminine guillemotleft */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* notsign hyphen registered macron */
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+CASE_ESC_IGNORE,
+/* degree plusminus twosuperior threesuperior */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* acute mu paragraph periodcentered */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* cedilla onesuperior masculine guillemotright */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* onequarter onehalf threequarters questiondown */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* Agrave Aacute Acircumflex Atilde */
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+/* Adiaeresis Aring AE Ccedilla */
+CASE_GROUND_STATE,
+CASE_GSETS_PERCENT,
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+/* Egrave Eacute Ecircumflex Ediaeresis */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* Igrave Iacute Icircumflex Idiaeresis */
+CASE_GROUND_STATE,
+CASE_GSETS_PERCENT,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* Eth Ntilde Ograve Oacute */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* Ocircumflex Otilde Odiaeresis multiply */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* Ooblique Ugrave Uacute Ucircumflex */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* Udiaeresis Yacute Thorn ssharp */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* agrave aacute acircumflex atilde */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* adiaeresis aring ae ccedilla */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* egrave eacute ecircumflex ediaeresis */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* igrave iacute icircumflex idiaeresis */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* eth ntilde ograve oacute */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* ocircumflex otilde odiaeresis division */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* oslash ugrave uacute ucircumflex */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+/* udiaeresis yacute thorn ydiaeresis */
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_GROUND_STATE,
+CASE_IGNORE,
+};
#endif /* OPT_WIDE_CHARS */
#if OPT_VT52_MODE
diff --git a/VTparse.def b/VTparse.def
index 0c09173..820c6b4 100644
--- a/VTparse.def
+++ b/VTparse.def
@@ -1,10 +1,10 @@
-# $XTermId: VTparse.def,v 1.46 2012/09/10 23:26:44 tom Exp $
+# $XTermId: VTparse.def,v 1.47 2013/08/19 00:39:14 tom Exp $
#
# vile:confmode rs=lf
# -----------------------------------------------------------------------------
# this file is part of xterm
#
-# Copyright 1996-2011,2012 by Thomas E. Dickey
+# Copyright 1996-2012,2013 by Thomas E. Dickey
#
# All Rights Reserved
#
@@ -197,3 +197,5 @@ CASE_VPR
CASE_ANSI_SC
CASE_ANSI_RC
CASE_ESC_COLON
+CASE_SCS_PERCENT
+CASE_GSETS_PERCENT
diff --git a/VTparse.h b/VTparse.h
index 464c623..5ee7a8e 100644
--- a/VTparse.h
+++ b/VTparse.h
@@ -1,7 +1,7 @@
-/* $XTermId: VTparse.h,v 1.61 2013/06/23 21:12:13 tom Exp $ */
+/* $XTermId: VTparse.h,v 1.62 2013/08/19 00:39:54 tom Exp $ */
/*
- * Copyright 2002-2011,2012 by Thomas E. Dickey
+ * Copyright 2002-2012,2013 by Thomas E. Dickey
*
* All Rights Reserved
*
@@ -106,6 +106,7 @@ extern Const PARSE_T vt52_ignore_table[];
#if OPT_WIDE_CHARS
extern Const PARSE_T esc_pct_table[];
+extern Const PARSE_T scs_pct_table[];
#endif
/*
@@ -278,5 +279,7 @@ extern Const PARSE_T esc_pct_table[];
#define CASE_ANSI_SC 156
#define CASE_ANSI_RC 157
#define CASE_ESC_COLON 158
+#define CASE_SCS_PERCENT 159
+#define CASE_GSETS_PERCENT 160
#endif /* included_VTparse_h */
diff --git a/button.c b/button.c
index 79ec8bd..a4b28a1 100644
--- a/button.c
+++ b/button.c
@@ -1,4 +1,4 @@
-/* $XTermId: button.c,v 1.458 2013/07/01 00:50:20 tom Exp $ */
+/* $XTermId: button.c,v 1.464 2013/09/10 17:27:38 tom Exp $ */
/*
* Copyright 1999-2012,2013 by Thomas E. Dickey
@@ -147,24 +147,24 @@ static Time lastButton3DoubleDownTime = 0;
static CELL lastButton3; /* At the release time */
#endif /* OPT_READLINE */
-static Char *SaveText(TScreen * screen, int row, int scol, int ecol,
- Char * lp, int *eol);
-static int Length(TScreen * screen, int row, int scol, int ecol);
-static void ComputeSelect(XtermWidget xw, CELL * startc, CELL * endc, Bool extend);
+static Char *SaveText(TScreen *screen, int row, int scol, int ecol,
+ Char *lp, int *eol);
+static int Length(TScreen *screen, int row, int scol, int ecol);
+static void ComputeSelect(XtermWidget xw, CELL *startc, CELL *endc, Bool extend);
static void EditorButton(XtermWidget xw, XButtonEvent * event);
-static void EndExtend(XtermWidget w, XEvent * event, String * params, Cardinal
+static void EndExtend(XtermWidget w, XEvent * event, String *params, Cardinal
num_params, Bool use_cursor_loc);
-static void ExtendExtend(XtermWidget xw, const CELL * cell);
-static void PointToCELL(TScreen * screen, int y, int x, CELL * cell);
-static void ReHiliteText(XtermWidget xw, CELL * first, CELL * last);
-static void SaltTextAway(XtermWidget xw, CELL * cellc, CELL * cell);
-static void SelectSet(XtermWidget xw, XEvent * event, String * params, Cardinal num_params);
+static void ExtendExtend(XtermWidget xw, const CELL *cell);
+static void PointToCELL(TScreen *screen, int y, int x, CELL *cell);
+static void ReHiliteText(XtermWidget xw, CELL *first, CELL *last);
+static void SaltTextAway(XtermWidget xw, CELL *cellc, CELL *cell);
+static void SelectSet(XtermWidget xw, XEvent * event, String *params, Cardinal num_params);
static void SelectionReceived PROTO_XT_SEL_CB_ARGS;
-static void StartSelect(XtermWidget xw, const CELL * cell);
+static void StartSelect(XtermWidget xw, const CELL *cell);
static void TrackDown(XtermWidget xw, XButtonEvent * event);
-static void TrackText(XtermWidget xw, const CELL * first, const CELL * last);
-static void _OwnSelection(XtermWidget xw, String * selections, Cardinal count);
-static void do_select_end(XtermWidget xw, XEvent * event, String * params,
+static void TrackText(XtermWidget xw, const CELL *first, const CELL *last);
+static void _OwnSelection(XtermWidget xw, String *selections, Cardinal count);
+static void do_select_end(XtermWidget xw, XEvent * event, String *params,
Cardinal *num_params, Bool use_cursor_loc);
#define MOUSE_LIMIT (255 - 32)
@@ -174,7 +174,7 @@ static void do_select_end(XtermWidget xw, XEvent * event, String * params,
#define EXT_MOUSE_START (127 - 32)
static int
-MouseLimit(TScreen * screen)
+MouseLimit(TScreen *screen)
{
int mouse_limit;
@@ -194,7 +194,7 @@ MouseLimit(TScreen * screen)
}
static unsigned
-EmitMousePosition(TScreen * screen, Char line[], unsigned count, int value)
+EmitMousePosition(TScreen *screen, Char line[], unsigned count, int value)
{
int mouse_limit = MouseLimit(screen);
@@ -237,7 +237,7 @@ EmitMousePosition(TScreen * screen, Char line[], unsigned count, int value)
}
static unsigned
-EmitMousePositionSeparator(TScreen * screen, Char line[], unsigned count)
+EmitMousePositionSeparator(TScreen *screen, Char line[], unsigned count)
{
switch (screen->extend_coords) {
case SET_SGR_EXT_MODE_MOUSE:
@@ -726,7 +726,7 @@ CheckLocatorPosition(XtermWidget xw, XButtonEvent * event)
#if OPT_READLINE
static int
-isClick1_clean(TScreen * screen, XButtonEvent * event)
+isClick1_clean(TScreen *screen, XButtonEvent * event)
{
int delta;
@@ -755,7 +755,7 @@ isClick1_clean(TScreen * screen, XButtonEvent * event)
}
static int
-isDoubleClick3(TScreen * screen, XButtonEvent * event)
+isDoubleClick3(TScreen *screen, XButtonEvent * event)
{
int delta;
@@ -794,7 +794,7 @@ isDoubleClick3(TScreen * screen, XButtonEvent * event)
}
static int
-CheckSecondPress3(TScreen * screen, XEvent * event)
+CheckSecondPress3(TScreen *screen, XEvent * event)
{
int delta;
@@ -833,7 +833,7 @@ CheckSecondPress3(TScreen * screen, XEvent * event)
}
static int
-rowOnCurrentLine(TScreen * screen,
+rowOnCurrentLine(TScreen *screen,
int line,
int *deltap) /* must be XButtonEvent */
{
@@ -863,13 +863,13 @@ rowOnCurrentLine(TScreen * screen,
}
static int
-eventRow(TScreen * screen, XEvent * event) /* must be XButtonEvent */
+eventRow(TScreen *screen, XEvent * event) /* must be XButtonEvent */
{
return (event->xbutton.y - screen->border) / FontHeight(screen);
}
static int
-eventColBetween(TScreen * screen, XEvent * event) /* must be XButtonEvent */
+eventColBetween(TScreen *screen, XEvent * event) /* must be XButtonEvent */
{
/* Correct by half a width - we are acting on a boundary, not on a cell. */
return ((event->xbutton.x - OriginX(screen) + (FontWidth(screen) - 1) / 2)
@@ -877,7 +877,7 @@ eventColBetween(TScreen * screen, XEvent * event) /* must be XButtonEvent */
}
static int
-ReadLineMovePoint(TScreen * screen, int col, int ldelta)
+ReadLineMovePoint(TScreen *screen, int col, int ldelta)
{
Char line[6];
unsigned count = 0;
@@ -900,7 +900,7 @@ ReadLineMovePoint(TScreen * screen, int col, int ldelta)
}
static int
-ReadLineDelete(TScreen * screen, CELL * cell1, CELL * cell2)
+ReadLineDelete(TScreen *screen, CELL *cell1, CELL *cell2)
{
int del;
@@ -913,7 +913,7 @@ ReadLineDelete(TScreen * screen, CELL * cell1, CELL * cell2)
}
static void
-readlineExtend(TScreen * screen, XEvent * event)
+readlineExtend(TScreen *screen, XEvent * event)
{
int ldelta1, ldelta2;
@@ -940,7 +940,7 @@ readlineExtend(TScreen * screen, XEvent * event)
void
DiredButton(Widget w,
XEvent * event, /* must be XButtonEvent */
- String * params GCC_UNUSED, /* selections */
+ String *params GCC_UNUSED, /* selections */
Cardinal *num_params GCC_UNUSED)
{
XtermWidget xw;
@@ -971,7 +971,7 @@ DiredButton(Widget w,
void
ReadLineButton(Widget w,
XEvent * event, /* must be XButtonEvent */
- String * params GCC_UNUSED, /* selections */
+ String *params GCC_UNUSED, /* selections */
Cardinal *num_params GCC_UNUSED)
{
XtermWidget xw;
@@ -1028,7 +1028,7 @@ ReadLineButton(Widget w,
void
ViButton(Widget w,
XEvent * event, /* must be XButtonEvent */
- String * params GCC_UNUSED, /* selections */
+ String *params GCC_UNUSED, /* selections */
Cardinal *num_params GCC_UNUSED)
{
XtermWidget xw;
@@ -1067,7 +1067,7 @@ ViButton(Widget w,
void
HandleSelectExtend(Widget w,
XEvent * event, /* must be XMotionEvent */
- String * params GCC_UNUSED,
+ String *params GCC_UNUSED,
Cardinal *num_params GCC_UNUSED)
{
XtermWidget xw;
@@ -1076,7 +1076,7 @@ HandleSelectExtend(Widget w,
TScreen *screen = TScreenOf(xw);
CELL cell;
- TRACE(("HandleSelectExtend\n"));
+ TRACE(("HandleSelectExtend @%ld\n", event->xmotion.time));
screen->selection_time = event->xmotion.time;
switch (screen->eventMode) {
@@ -1103,7 +1103,7 @@ HandleSelectExtend(Widget w,
void
HandleKeyboardSelectExtend(Widget w,
XEvent * event GCC_UNUSED, /* must be XButtonEvent */
- String * params GCC_UNUSED,
+ String *params GCC_UNUSED,
Cardinal *num_params GCC_UNUSED)
{
XtermWidget xw;
@@ -1119,13 +1119,14 @@ HandleKeyboardSelectExtend(Widget w,
static void
do_select_end(XtermWidget xw,
XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
+ String *params, /* selections */
Cardinal *num_params,
Bool use_cursor_loc)
{
TScreen *screen = TScreenOf(xw);
screen->selection_time = event->xbutton.time;
+ TRACE(("do_select_end @%ld\n", screen->selection_time));
switch (screen->eventMode) {
case NORMAL:
(void) SendMousePosition(xw, event);
@@ -1143,7 +1144,7 @@ do_select_end(XtermWidget xw,
void
HandleSelectEnd(Widget w,
XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
+ String *params, /* selections */
Cardinal *num_params)
{
XtermWidget xw;
@@ -1157,7 +1158,7 @@ HandleSelectEnd(Widget w,
void
HandleKeyboardSelectEnd(Widget w,
XEvent * event, /* must be XButtonEvent */
- String * params, /* selections */
+ String *params, /* selections */
Cardinal *num_params)
{
XtermWidget xw;
@@ -1174,7 +1175,7 @@ HandleKeyboardSelectEnd(Widget w,
void
HandleCopySelection(Widget w,
XEvent * event,
- String * params, /* list of targets */
+ String *params, /* list of targets */
Cardinal *num_params)
{
XtermWidget xw;
@@ -1204,7 +1205,7 @@ DECtoASCII(unsigned ch)
#if OPT_WIDE_CHARS
static Cardinal
-addXtermChar(Char ** buffer, Cardinal *used, Cardinal offset, unsigned value)
+addXtermChar(Char **buffer, Cardinal *used, Cardinal offset, unsigned value)
{
if (offset + 1 >= *used) {
*used = 1 + (2 * (offset + 1));
@@ -1221,7 +1222,7 @@ addXtermChar(Char ** buffer, Cardinal *used, Cardinal offset, unsigned value)
* or ASCII/Latin-1 equivalents for special cases.
*/
static Char *
-UTF8toLatin1(TScreen * screen, Char * s, unsigned long len, unsigned long *result)
+UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result)
{
static Char *buffer;
static Cardinal used;
@@ -1449,7 +1450,7 @@ overrideTargets(Widget w, String value, Atom ** resultp)
#if OPT_WIDE_CHARS
static Atom *
-allocUtf8Targets(Widget w, TScreen * screen)
+allocUtf8Targets(Widget w, TScreen *screen)
{
Atom **resultp = &(screen->selection_targets_utf8);
@@ -1485,7 +1486,7 @@ allocUtf8Targets(Widget w, TScreen * screen)
#endif
static Atom *
-alloc8bitTargets(Widget w, TScreen * screen)
+alloc8bitTargets(Widget w, TScreen *screen)
{
Atom **resultp = &(screen->selection_targets_8bit);
@@ -1569,7 +1570,7 @@ UnmapSelections(XtermWidget xw)
* call to XmuInternStrings().
*/
static String *
-MapSelections(XtermWidget xw, String * params, Cardinal num_params)
+MapSelections(XtermWidget xw, String *params, Cardinal num_params)
{
String *result = params;
@@ -1676,7 +1677,7 @@ static
void
xtermGetSelection(Widget w,
Time ev_time,
- String * params, /* selections in precedence order */
+ String *params, /* selections in precedence order */
Cardinal num_params,
Atom * targets)
{
@@ -1691,7 +1692,7 @@ xtermGetSelection(Widget w,
if ((xw = getXtermWidget(w)) == 0)
return;
- TRACE(("xtermGetSelection num_params %d\n", num_params));
+ TRACE(("xtermGetSelection num_params %d @%ld\n", num_params, ev_time));
params = MapSelections(xw, params, num_params);
XmuInternStrings(XtDisplay(w), params, (Cardinal) 1, &selection);
@@ -1765,7 +1766,7 @@ xtermGetSelection(Widget w,
#if OPT_TRACE && OPT_WIDE_CHARS
static void
-GettingSelection(Display * dpy, Atom type, Char * line, unsigned long len)
+GettingSelection(Display *dpy, Atom type, Char *line, unsigned long len)
{
Char *cp;
char *name;
@@ -1799,7 +1800,7 @@ ABCDEFGHIJKLMNOPQRSTUVWXYZ\
abcdefghijklmnopqrstuvwxyz\
0123456789+/";
static void
-base64_flush(TScreen * screen)
+base64_flush(TScreen *screen)
{
Char x;
switch (screen->base64_count) {
@@ -1824,11 +1825,75 @@ base64_flush(TScreen * screen)
}
#endif /* OPT_PASTE64 */
+/*
+ * Translate ISO-8859-1 or UTF-8 data to NRCS.
+ */
static void
-_qWriteSelectionData(XtermWidget xw, Char * lag, unsigned length)
+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) {
+ PtyData *data = TypeXtMallocX(PtyData, *length);
+
+ memset(data, 0, sizeof(*data));
+ data->next = data->buffer;
+ data->last = data->buffer + *length;
+ memcpy(data->buffer, buffer, (size_t) *length);
+ p = buffer;
+ while (data->next < data->last) {
+ if (!decodeUtf8(data)) {
+ data->utf_size = 1;
+ data->utf_data = data->next[0];
+ }
+ data->next += data->utf_size;
+ chr = data->utf_data;
+ out = chr;
+ if ((gl = xtermCharSetIn(screen, chr, gsetL)) != chr) {
+ out = gl;
+ } else if ((gr = xtermCharSetIn(screen, chr, gsetR)) != chr) {
+ out = gr;
+ }
+ *p++ = (Char) ((out < 256) ? out : ' ');
+ }
+ *length = (unsigned) (p - buffer);
Reply to: