sync with OpenBSD -current

This commit is contained in:
purplerain 2024-07-25 20:49:18 +00:00
parent a34e492c6b
commit acb2a22980
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
86 changed files with 12131 additions and 4602 deletions

View file

@ -100,8 +100,8 @@ in a non-standard directory (the default is /usr/xenocara).
Xenocara requires objdirs. Just run 'make obj' as root at any level Xenocara requires objdirs. Just run 'make obj' as root at any level
before 'make build' to make sure that the object directories are before 'make build' to make sure that the object directories are
created. XOBJDIR defines the obj directory that is used (defaults to created. XOBJDIR defines the obj directory that is used (defaults to
/usr/xobj). It should be created before running 'make obj'. /usr/xobj). It should be created before running 'make obj'.
## Regenerating configure scripts ## Regenerating configure scripts
@ -156,18 +156,18 @@ to a new release of XCB:
python3 package. python3 package.
3. Update dist/libxcb. 3. Update dist/libxcb.
4. Check lib/libxcb/src/Makefile if new files need to be generated. 4. Check lib/libxcb/src/Makefile if new files need to be generated.
5. Run `make` in lib/xcb/src to generate the files for the new version. 5. Run make in lib/xcb/src to generate the files for the new version.
6. Check lib/libxcb/ for other files needing updates. 6. Check lib/libxcb/ for other files needing updates.
7. Commit the result. 7. Commit the result.
## How to build something with debug information? ## How to build something with debug information?
You can use `env CFLAGS=-g make -f Makefile.bsd-wrapper build` to You can use env CFLAGS=-g make -f Makefile.bsd-wrapper build to
build any module with debugging information, but you'll need to remove build any module with debugging information, but you'll need to remove
`XOBJDIR/xorg-config.cache.${MACHINE}` before doing that because XOBJDIR/xorg-config.cache.${MACHINE} before doing that because
autoconf caches the value of CFLAGS in its cache. autoconf caches the value of CFLAGS in its cache.
## How to get a core file out of the X server? ## How to get a core file out of the X server?
Several things are needed: Several things are needed:
@ -176,7 +176,7 @@ Several things are needed:
xenodm, you can add the option in /etc/X11/xenodm/Xservers. If you xenodm, you can add the option in /etc/X11/xenodm/Xservers. If you
want to use startx, you need to run it as root, like this: want to use startx, you need to run it as root, like this:
`startx -- /usr/X11R6/bin/X -keepPriv` startx -- /usr/X11R6/bin/X -keepPriv
Now the X server should dump core when catching a fatal signal and the Now the X server should dump core when catching a fatal signal and the
core dump should be in /var/crash/Xorg/<pid>.core. core dump should be in /var/crash/Xorg/<pid>.core.
@ -189,4 +189,4 @@ dump will be in the current directory where startx was executed.
See also http://xorg.freedesktop.org/wiki/Development/Documentation/ServerDebugging See also http://xorg.freedesktop.org/wiki/Development/Documentation/ServerDebugging
-- --
$OpenBSD: README.md,v 1.1 2024/07/20 19:56:40 matthieu Exp $ $OpenBSD: README.md,v 1.2 2024/07/22 19:36:31 rsadowski Exp $

View file

@ -1,7 +1,7 @@
--- $XTermId: COPYING,v 1.6 2023/01/02 15:46:55 tom Exp $ --- $XTermId: COPYING,v 1.7 2024/01/01 20:00:01 tom Exp $
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Copyright 1996-2022,2023 by Thomas E. Dickey Copyright 1996-2023,2024 by Thomas E. Dickey
All Rights Reserved All Rights Reserved

View file

@ -1,4 +1,4 @@
MANIFEST for xterm, version xterm-378 MANIFEST for xterm, version xterm-393
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
MANIFEST this file MANIFEST this file
256colres.h resource-definitions for 256-color mode 256colres.h resource-definitions for 256-color mode
@ -33,6 +33,8 @@ charclass.c compact character-class module
charclass.h interface of charclass.c charclass.h interface of charclass.c
charproc.c VT100 parser functions charproc.c VT100 parser functions
charsets.c module to translate character-sets charsets.c module to translate character-sets
charsets.dat raw data to transform into charsets.h
charsets.h charset definitions for xterm
config.guess configure script: guess the system type config.guess configure script: guess the system type
config.sub configure script: validate system type config.sub configure script: validate system type
configure generated configure generated
@ -148,6 +150,8 @@ icons/xterm.xpms collection of icons
icons/xterm_16x16.xpm normal icon 16x16 pixmap icons/xterm_16x16.xpm normal icon 16x16 pixmap
icons/xterm_32x32.xpm 32x32 monochrome icon icons/xterm_32x32.xpm 32x32 monochrome icon
icons/xterm_48x48.xpm 48x48 monochrome icon icons/xterm_48x48.xpm 48x48 monochrome icon
package subdirectory
package/xterm.spec build-script
package/debian subdirectory package/debian subdirectory
package/debian/changelog build-script package/debian/changelog build-script
package/debian/color.sed build-script package/debian/color.sed build-script
@ -157,14 +161,13 @@ package/debian/copyright build-script
package/debian/postinst post-install script for update-alternatives package/debian/postinst post-install script for update-alternatives
package/debian/prerm pre-remove script for update-alternatives package/debian/prerm pre-remove script for update-alternatives
package/debian/rules build-script package/debian/rules build-script
package/debian/source subdirectory
package/debian/source/format build-script
package/debian subdirectory
package/debian/watch build-script package/debian/watch build-script
package/debian/xterm-dev.docs build-script package/debian/xterm-dev.docs build-script
package/debian/xterm-dev.lintian-overrides ignore useless warnings from lintian package/debian/xterm-dev.lintian-overrides ignore useless warnings from lintian
package/debian/xterm-dev.menu Debian menu-file for xterm-dev package. package/debian/xterm-dev.menu Debian menu-file for xterm-dev package.
package/debian/xterm-xres.sed build-script package/debian/xterm-xres.sed build-script
package/debian/source subdirectory
package/debian/source/format build-script
package/freebsd subdirectory package/freebsd subdirectory
package/freebsd/Makefile build-script package/freebsd/Makefile build-script
package/freebsd/distinfo generated sums package/freebsd/distinfo generated sums
@ -178,8 +181,6 @@ package/pkgsrc/Makefile build-script
package/pkgsrc/PLIST build-script package/pkgsrc/PLIST build-script
package/pkgsrc/distinfo build-script package/pkgsrc/distinfo build-script
package/pkgsrc/options.mk build-script package/pkgsrc/options.mk build-script
package subdirectory
package/xterm.spec build-script
tektests subdirectory tektests subdirectory
tektests/aitest.tek tek4014 demo: draw a globe tektests/aitest.tek tek4014 demo: draw a globe
tektests/dmerc.tek tek4014 demo: draws a Mercator projection with orbit tektests/dmerc.tek tek4014 demo: draws a Mercator projection with orbit

View file

@ -1,22 +1,31 @@
The NEWS file was generated from xterm.log.html, which serves as the changelog The NEWS file was generated from xterm.log.html, which serves as the changelog
for xterm. for xterm.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Patch #378 - 2023/01/09 Patch #393 - 2024/07/11
* improve descriptions of XTQMODKEYS and XTQALLOWED features in * add a check for ANSI SC/RC, to ignore CSI parameters.
ctlseqs.ms (reports by Bram Moolenaar, Thomas Wolff). * improve check for missing characters for bitmap-fonts by using the
* add bracketed+paste and report+version building blocks to terminfo, normal font for reference in the case where the current font, e.g.,
from ncurses 6.4 the wide-font was derived from the normal font and lacks
* improve check for unsupported formatting characters, e.g., per-character metrics (report by Rajeev V. Pillai).
zero-width space, to properly ignore them (report by Thomas Wolff). * fix regression in error-recovery for SGR parameters from patch #357
* improve/document error-checking for some of the controls which (report by James Holderness).
return responses: DECRQSS, XTGETXRES, XTSETTCAP, XTGETTCAP * remove some duplicates in xtermcfg.h (report by Matthew Green).
(prompted by discussion with David Leadbeater). * change default for --enable-imake configure option.
* improve limit-checks for fallback font cache (report by Dimitrije * fixes for wcwidth:
Erdeljan). + return 0 for format effectors, like a zero-width printing
* improve check for too-wide glyph in fallback font by allowing xterm character rather than -1 like a control character (report by
to continue searching for a suitable font rather than just failing Rajeev V. Pillai).
on the first. Also add limitFontWidth to allow changing the amount + correct doublewidth to account for reserved codepoints which
by which a glyph must extend outside the font's bounding box to are listed in the EastAsianWidth file.
disallow it. + add a special case for surrogate pairs, which might be checked
in testing the wcwidth function.
* amend sixel bounds-check added in patch #371 to not wrap
out-of-bounds data.
* eliminate maxStringParse limit for SIXEL.
* improve logic which ignores APC, PM and SOS controls to also not
accumulate their data temporarily in a buffer.
* exclude TERM_INGRESS from cleanup of environment variables (patch
by Iain Riley).
* fix some documentation typos (report by Thomas Wolff).

View file

@ -1,4 +1,4 @@
-- $XTermId: THANKS,v 1.36 2022/11/17 00:49:53 tom Exp $ -- $XTermId: THANKS,v 1.39 2024/02/10 01:24:54 tom Exp $
-- vile:txtmode fk=utf-8 -- vile:txtmode fk=utf-8
There's no AUTHORS file in this distribution; it would be redundant since 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. I (Thomas E. Dickey) have done more than 80% of the work on xterm since 1996.
@ -13,6 +13,7 @@ Here is a list from xterm.log.html of people who have contributed changes,
or whose suggested change could be adapted: or whose suggested change could be adapted:
Adam M Costello Adam M Costello
Adam Saponara
Adam Sulmicki Adam Sulmicki
Ailin Nemui Ailin Nemui
Al Poole Al Poole
@ -81,6 +82,7 @@ Dennis Schneider
Dimitrios Christidis Dimitrios Christidis
Ed Schouten Ed Schouten
Eddy De Greef Eddy De Greef
Edward Rosten
Edward S Arthur Edward S Arthur
Egbert Eich Egbert Eich
Egmont Koblinger Egmont Koblinger
@ -124,6 +126,7 @@ Joe Allen
Joe Peterson Joe Peterson
Johnny Billquist Johnny Billquist
Jonathan Irwin Jonathan Irwin
Jonny Langley
Julien Cristau Julien Cristau
Juliusz Chroboczek Juliusz Chroboczek
Jungshik Shin Jungshik Shin
@ -154,6 +157,7 @@ Martin Hostettler
Martin Pirker Martin Pirker
Martin Tournoij Martin Tournoij
Matthew Green Matthew Green
Matthew Martin
Matthias Baake Matthias Baake
Matthias Scheler Matthias Scheler
Matthieu Herrb Matthieu Herrb
@ -193,6 +197,7 @@ Pavel Roskin
Peder Stray Peder Stray
Per Hedeland Per Hedeland
Peter Berg Larsen Peter Berg Larsen
Petri Kaukasoina
Phil Sidler Phil Sidler
Philipp Klaus Krause Philipp Klaus Krause
Pierre Lombard Pierre Lombard
@ -252,6 +257,7 @@ Victor Stinner
Victor Vaile Victor Vaile
Vincent Lefèvre Vincent Lefèvre
Vladimir A Pavlov Vladimir A Pavlov
Waldemar Brodkorb
Walter Harms Walter Harms
Werner Fink Werner Fink
Werner Lemberg Werner Lemberg

View file

@ -1,7 +1,7 @@
/* $XTermId: VTPrsTbl.c,v 1.106 2022/11/25 01:19:18 tom Exp $ */ /* $XTermId: VTPrsTbl.c,v 1.117 2023/12/27 22:46:08 tom Exp $ */
/* /*
* Copyright 1999-2021,2022 by Thomas E. Dickey * Copyright 1999-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -467,13 +467,13 @@ CASE_CSI_HASH_STATE,
/* $ % & ' */ /* $ % & ' */
CASE_CSI_DOLLAR_STATE, CASE_CSI_DOLLAR_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_AMP_STATE,
CASE_CSI_TICK_STATE, CASE_CSI_TICK_STATE,
/* ( ) * + */ /* ( ) * + */
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, /* vt525 */
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE, /* vt420 and vt520 */
CASE_CSI_IGNORE,
/* , - . / */ /* , - . / */
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
@ -526,8 +526,8 @@ CASE_GROUND_STATE,
CASE_SU, CASE_SU,
/* T U V W */ /* T U V W */
CASE_TRACK_MOUSE, CASE_TRACK_MOUSE,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:NP */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:PP */
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* X Y Z [ */ /* X Y Z [ */
CASE_ECH, CASE_ECH,
@ -627,7 +627,7 @@ CASE_CSI_HASH_STATE,
/* currency yen brokenbar section */ /* currency yen brokenbar section */
CASE_CSI_DOLLAR_STATE, CASE_CSI_DOLLAR_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_AMP_STATE,
CASE_CSI_TICK_STATE, CASE_CSI_TICK_STATE,
/* diaeresis copyright ordfeminine guillemotleft */ /* diaeresis copyright ordfeminine guillemotleft */
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
@ -791,15 +791,15 @@ CASE_CSI_HASH_STATE,
/* $ % & ' */ /* $ % & ' */
CASE_CSI_DOLLAR_STATE, CASE_CSI_DOLLAR_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_AMP_STATE,
CASE_CSI_TICK_STATE, CASE_CSI_TICK_STATE,
/* ( ) * + */ /* ( ) * + */
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_STAR_STATE, CASE_CSI_STAR_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE, /* vt420 and vt520 */
/* , - . / */ /* , - . / */
CASE_CSI_IGNORE, CASE_CSI_COMMA_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
@ -850,8 +850,8 @@ CASE_GROUND_STATE,
CASE_SU, CASE_SU,
/* T U V W */ /* T U V W */
CASE_TRACK_MOUSE, CASE_TRACK_MOUSE,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:NP */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:PP */
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* X Y Z [ */ /* X Y Z [ */
CASE_ECH, CASE_ECH,
@ -901,7 +901,7 @@ CASE_GROUND_STATE,
/* | } ~ DEL */ /* | } ~ DEL */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECFNK */
CASE_IGNORE, CASE_IGNORE,
/* 0x80 0x81 0x82 0x83 */ /* 0x80 0x81 0x82 0x83 */
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -951,7 +951,7 @@ CASE_CSI_HASH_STATE,
/* currency yen brokenbar section */ /* currency yen brokenbar section */
CASE_CSI_DOLLAR_STATE, CASE_CSI_DOLLAR_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_AMP_STATE,
CASE_CSI_TICK_STATE, CASE_CSI_TICK_STATE,
/* diaeresis copyright ordfeminine guillemotleft */ /* diaeresis copyright ordfeminine guillemotleft */
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
@ -959,7 +959,7 @@ CASE_CSI_IGNORE,
CASE_CSI_STAR_STATE, CASE_CSI_STAR_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
/* notsign hyphen registered macron */ /* notsign hyphen registered macron */
CASE_CSI_IGNORE, CASE_CSI_COMMA_STATE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
CASE_CSI_IGNORE, CASE_CSI_IGNORE,
@ -1537,10 +1537,10 @@ CASE_DECSCA,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* t u v w */ /* t u v w */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSRFR */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSTRL */
CASE_GROUND_STATE, CASE_DECRQDE,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:DECRPDE */
/* x y z { */ /* x y z { */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -1699,7 +1699,7 @@ CASE_GROUND_STATE,
/* ocircumflex otilde odiaeresis division */ /* ocircumflex otilde odiaeresis division */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_DECRQDE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* oslash ugrave uacute ucircumflex */ /* oslash ugrave uacute ucircumflex */
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -1817,9 +1817,9 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* P Q R S */ /* P Q R S */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:PPA */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:PPR */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:PPB */
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* T U V W */ /* T U V W */
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -1857,14 +1857,14 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* p q r s */ /* p q r s */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSSCLS */
CASE_DECSCUSR, CASE_DECSCUSR,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSKCV */
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* t u v w */ /* t u v w */
CASE_DECSWBV, CASE_DECSWBV,
CASE_DECSMBV, CASE_DECSMBV,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSLCK */
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* x y z { */ /* x y z { */
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -1873,8 +1873,8 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* | } ~ DEL */ /* | } ~ DEL */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECKBD */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECTME */
CASE_IGNORE, CASE_IGNORE,
/* 0x80 0x81 0x82 0x83 */ /* 0x80 0x81 0x82 0x83 */
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -2689,6 +2689,330 @@ CASE_GROUND_STATE,
}; };
#endif #endif
Const PARSE_T csi_amp_table[] = /* CSI ... & */
{
/* 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_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* $ % & ' */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* ( ) * + */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* , - . / */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 0 1 2 3 */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 4 5 6 7 */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 8 9 : ; */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* < = > ? */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* @ 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_DECRQUPSS,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* x y z { */
CASE_GROUND_STATE, /* vt420:Enable Session */
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_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* currency yen brokenbar section */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* diaeresis copyright ordfeminine guillemotleft */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* notsign hyphen registered macron */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* degree plusminus twosuperior threesuperior */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* acute mu paragraph periodcentered */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* cedilla onesuperior masculine guillemotright */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* onequarter onehalf threequarters questiondown */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 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 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_DECRQUPSS,
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_GROUND_STATE,
};
#if OPT_DEC_RECTOPS #if OPT_DEC_RECTOPS
Const PARSE_T csi_dollar_table[] = /* CSI ... $ */ Const PARSE_T csi_dollar_table[] = /* CSI ... $ */
{ {
@ -2839,12 +3163,12 @@ CASE_DECCARA,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* t u v w */ /* t u v w */
CASE_DECRARA, CASE_DECRARA,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:DECRQTSR */
CASE_DECCRA, CASE_DECCRA,
CASE_DECRQPSR, CASE_DECRQPSR,
/* x y z { */ /* x y z { */
CASE_DECFRA, CASE_DECFRA,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:DECRPM */
CASE_DECERA, CASE_DECERA,
CASE_DECSERA, CASE_DECSERA,
/* | } ~ DEL */ /* | } ~ DEL */
@ -3157,23 +3481,23 @@ CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* p q r s */ /* p q r s */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSPPCS */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:DECSRC */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSCS */
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSFC */
/* t u v w */ /* t u v w */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt510:DECSCP */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* x y z { */ /* x y z { */
CASE_DECSACE, CASE_DECSACE,
CASE_DECRQCRA, CASE_DECRQCRA,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:DECINVM */
CASE_GROUND_STATE, CASE_GROUND_STATE,
/* | } ~ DEL */ /* | } ~ DEL */
CASE_DECSNLS, CASE_DECSNLS,
CASE_GROUND_STATE, CASE_GROUND_STATE, /* vt420:DECLFKC */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_IGNORE, CASE_IGNORE,
/* 0x80 0x81 0x82 0x83 */ /* 0x80 0x81 0x82 0x83 */
@ -3339,6 +3663,332 @@ CASE_GROUND_STATE,
}; };
#endif /* OPT_DEC_RECTOPS */ #endif /* OPT_DEC_RECTOPS */
#if OPT_VT525_COLORS
Const PARSE_T csi_comma_table[] = /* CSI ... , */
{
/* 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_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* $ % & ' */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* ( ) * + */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* , - . / */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 0 1 2 3 */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 4 5 6 7 */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 8 9 : ; */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* < = > ? */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* @ 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, /* vt520:DECLTOD */
CASE_DECTID,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
/* t u v w */
CASE_GROUND_STATE,
CASE_GROUND_STATE, /* vt520:DECRQKT */
CASE_GROUND_STATE, /* vt520:DECRPKT */
CASE_GROUND_STATE, /* vt520:DECRQKD */
/* x y z { */
CASE_GROUND_STATE, /* vt520:DECSPMA */
CASE_GROUND_STATE, /* vt520:DECUS */
CASE_GROUND_STATE, /* vt520:DECDLDA */
CASE_GROUND_STATE, /* vt520:DECSZS */
/* | } ~ DEL */
CASE_DECAC,
CASE_DECATC,
CASE_GROUND_STATE, /* vt520:DECPS */
CASE_GROUND_STATE,
/* 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_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* currency yen brokenbar section */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* diaeresis copyright ordfeminine guillemotleft */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* notsign hyphen registered macron */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* degree plusminus twosuperior threesuperior */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* acute mu paragraph periodcentered */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* cedilla onesuperior masculine guillemotright */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* onequarter onehalf threequarters questiondown */
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
CASE_CSI_IGNORE,
/* 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 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_DECTID,
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_DECAC,
CASE_DECATC,
CASE_GROUND_STATE,
CASE_GROUND_STATE,
};
#endif /* OPT_VT525_COLORS */
Const PARSE_T dec_table[] = /* CSI ? */ Const PARSE_T dec_table[] = /* CSI ? */
{ {
/* NUL SOH STX ETX */ /* NUL SOH STX ETX */
@ -3450,7 +4100,7 @@ CASE_GRAPHICS_ATTRIBUTES,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_DECST8C,
/* X Y Z [ */ /* X Y Z [ */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
@ -3610,7 +4260,7 @@ CASE_GRAPHICS_ATTRIBUTES,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_DECST8C,
/* Ooblique Ugrave Uacute Ucircumflex */ /* Ooblique Ugrave Uacute Ucircumflex */
CASE_GROUND_STATE, CASE_GROUND_STATE,
CASE_GROUND_STATE, CASE_GROUND_STATE,

View file

@ -1,11 +1,11 @@
# $XTermId: VTparse.def,v 1.66 2022/11/24 13:58:46 tom Exp $ # $XTermId: VTparse.def,v 1.72 2023/12/27 22:45:19 tom Exp $
# #
# vile:confmode rs=lf # vile:confmode rs=lf
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# this file is part of xterm # this file is part of xterm
# #
# Copyright 1996-2021,2022 by Thomas E. Dickey # Copyright 1996-2022,2023 by Thomas E. Dickey
# #
# All Rights Reserved # All Rights Reserved
# #
# Permission is hereby granted, free of charge, to any person obtaining a # Permission is hereby granted, free of charge, to any person obtaining a
@ -221,3 +221,11 @@ CASE_XTERM_SHIFT_ESCAPE # XTSHIFTESCAPE
CASE_DECSSDT CASE_DECSSDT
CASE_DECSASD CASE_DECSASD
CASE_XTERM_REPORT_MOD_FKEYS # XTQMODKEYS CASE_XTERM_REPORT_MOD_FKEYS # XTQMODKEYS
CASE_DECRQDE
CASE_DECRQUPSS
CASE_CSI_AMP_STATE
CASE_CSI_COMMA_STATE
CASE_DECAC
CASE_DECATC
CASE_DECTID
CASE_DECST8C

View file

@ -1,7 +1,7 @@
/* $XTermId: VTparse.h,v 1.69 2019/02/10 23:34:21 tom Exp $ */ /* $XTermId: VTparse.h,v 1.72 2023/11/24 13:18:38 tom Exp $ */
/* /*
* Copyright 1996-2018,2019 by Thomas E. Dickey * Copyright 1996-2019,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -51,10 +51,13 @@ typedef unsigned char PARSE_T;
extern Const PARSE_T ansi_table[]; extern Const PARSE_T ansi_table[];
extern Const PARSE_T cigtable[]; extern Const PARSE_T cigtable[];
extern Const PARSE_T csi2_table[]; extern Const PARSE_T csi2_table[];
extern Const PARSE_T csi_amp_table[];
extern Const PARSE_T csi_dec_dollar_table[];
extern Const PARSE_T csi_ex_table[]; extern Const PARSE_T csi_ex_table[];
extern Const PARSE_T csi_quo_table[]; extern Const PARSE_T csi_quo_table[];
extern Const PARSE_T csi_sp_table[]; extern Const PARSE_T csi_sp_table[];
extern Const PARSE_T csi_table[]; extern Const PARSE_T csi_table[];
extern Const PARSE_T csi_tick_table[];
extern Const PARSE_T dec2_table[]; extern Const PARSE_T dec2_table[];
extern Const PARSE_T dec3_table[]; extern Const PARSE_T dec3_table[];
extern Const PARSE_T dec_table[]; extern Const PARSE_T dec_table[];
@ -65,8 +68,6 @@ extern Const PARSE_T scrtable[];
extern Const PARSE_T scs96table[]; extern Const PARSE_T scs96table[];
extern Const PARSE_T scstable[]; extern Const PARSE_T scstable[];
extern Const PARSE_T sos_table[]; extern Const PARSE_T sos_table[];
extern Const PARSE_T csi_dec_dollar_table[];
extern Const PARSE_T csi_tick_table[];
#if OPT_DEC_RECTOPS #if OPT_DEC_RECTOPS
extern Const PARSE_T csi_dollar_table[]; extern Const PARSE_T csi_dollar_table[];
@ -79,6 +80,10 @@ extern Const PARSE_T vt52_esc_table[];
extern Const PARSE_T vt52_ignore_table[]; extern Const PARSE_T vt52_ignore_table[];
#endif #endif
#if OPT_VT525_COLORS
extern Const PARSE_T csi_comma_table[];
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
extern Const PARSE_T esc_pct_table[]; extern Const PARSE_T esc_pct_table[];
extern Const PARSE_T scs_amp_table[]; extern Const PARSE_T scs_amp_table[];

View file

@ -1,7 +1,7 @@
/* $XTermId: button.c,v 1.646 2022/11/25 00:26:32 tom Exp $ */ /* $XTermId: button.c,v 1.663 2024/04/19 07:42:00 tom Exp $ */
/* /*
* Copyright 1999-2021,2022 by Thomas E. Dickey * Copyright 1999-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -77,6 +77,7 @@ button.c Handles button events in the terminal emulator.
#include <menu.h> #include <menu.h>
#include <charclass.h> #include <charclass.h>
#include <xstrings.h> #include <xstrings.h>
#include <xterm_io.h>
#if OPT_SELECT_REGEX #if OPT_SELECT_REGEX
#if defined(HAVE_PCRE2POSIX_H) #if defined(HAVE_PCRE2POSIX_H)
@ -1302,8 +1303,9 @@ eventColBetween(TScreen *screen, XEvent *event) /* must be XButtonEvent */
} }
static int static int
ReadLineMovePoint(TScreen *screen, int col, int ldelta) ReadLineMovePoint(XtermWidget xw, int col, int ldelta)
{ {
TScreen *screen = TScreenOf(xw);
Char line[6]; Char line[6];
unsigned count = 0; unsigned count = 0;
@ -1314,13 +1316,13 @@ ReadLineMovePoint(TScreen *screen, int col, int ldelta)
line[count++] = ANSI_CSI; line[count++] = ANSI_CSI;
} else { } else {
line[count++] = ANSI_ESC; line[count++] = ANSI_ESC;
line[count++] = '['; /* XXX maybe sometimes O is better? */ line[count++] = (xw->keyboard.flags & MODE_DECCKM) ? 'O' : '[';
} }
line[count] = CharOf(col > 0 ? 'C' : 'D'); line[count] = CharOf(col > 0 ? 'C' : 'D');
if (col < 0) if (col < 0)
col = -col; col = -col;
while (col--) while (col--)
v_write(screen->respond, line, 3); v_write(screen->respond, line, (size_t) 3);
return 1; return 1;
} }
@ -1328,12 +1330,16 @@ static int
ReadLineDelete(TScreen *screen, CELL *cell1, CELL *cell2) ReadLineDelete(TScreen *screen, CELL *cell1, CELL *cell2)
{ {
int del; int del;
Char erases[2];
erases[0] = (Char) get_tty_erase(screen->respond, XTERM_ERASE, "pty");
erases[1] = 0;
del = (cell2->col - cell1->col) + ((cell2->row - cell1->row) * MaxCols(screen)); del = (cell2->col - cell1->col) + ((cell2->row - cell1->row) * MaxCols(screen));
if (del <= 0) /* Just in case... */ if (del <= 0) /* Just in case... */
return 0; return 0;
while (del--) while (del--)
v_write(screen->respond, (const Char *) "\177", 1); v_write(screen->respond, erases, (size_t) 1);
return 1; return 1;
} }
@ -1348,13 +1354,13 @@ readlineExtend(XtermWidget xw, XEvent *event)
if (isClick1_clean(xw, my_event) if (isClick1_clean(xw, my_event)
&& SCREEN_FLAG(screen, click1_moves) && SCREEN_FLAG(screen, click1_moves)
&& rowOnCurrentLine(screen, eventRow(screen, event), &ldelta1)) { && rowOnCurrentLine(screen, eventRow(screen, event), &ldelta1)) {
ReadLineMovePoint(screen, eventColBetween(screen, event), ldelta1); ReadLineMovePoint(xw, eventColBetween(screen, event), ldelta1);
} }
if (isDoubleClick3(xw, screen, my_event) if (isDoubleClick3(xw, screen, my_event)
&& SCREEN_FLAG(screen, dclick3_deletes) && SCREEN_FLAG(screen, dclick3_deletes)
&& rowOnCurrentLine(screen, screen->startSel.row, &ldelta1) && rowOnCurrentLine(screen, screen->startSel.row, &ldelta1)
&& rowOnCurrentLine(screen, screen->endSel.row, &ldelta2)) { && rowOnCurrentLine(screen, screen->endSel.row, &ldelta2)) {
ReadLineMovePoint(screen, screen->endSel.col, ldelta2); ReadLineMovePoint(xw, screen->endSel.col, ldelta2);
ReadLineDelete(screen, &screen->startSel, &(screen->endSel)); ReadLineDelete(screen, &screen->startSel, &(screen->endSel));
} }
} }
@ -1388,7 +1394,7 @@ DiredButton(Widget w,
Line[2] = 'G'; Line[2] = 'G';
Line[3] = CharOf(' ' + col); Line[3] = CharOf(' ' + col);
Line[4] = CharOf(' ' + line); Line[4] = CharOf(' ' + line);
v_write(screen->respond, Line, 5); v_write(screen->respond, Line, (size_t) 5);
} }
} }
} }
@ -1436,13 +1442,12 @@ ReadLineButton(Widget w,
if (col == 0) if (col == 0)
goto finish; goto finish;
Line[0] = ANSI_ESC; Line[0] = ANSI_ESC;
/* XXX: sometimes it is better to send '['? */ Line[1] = (xw->keyboard.flags & MODE_DECCKM) ? 'O' : '[';
Line[1] = 'O';
Line[2] = CharOf(col > 0 ? 'C' : 'D'); Line[2] = CharOf(col > 0 ? 'C' : 'D');
if (col < 0) if (col < 0)
col = -col; col = -col;
while (col--) while (col--)
v_write(screen->respond, Line, 3); v_write(screen->respond, Line, (size_t) 3);
finish: finish:
if (event->type == ButtonRelease) if (event->type == ButtonRelease)
do_select_end(xw, event, params, num_params, False); do_select_end(xw, event, params, num_params, False);
@ -1473,7 +1478,7 @@ ViButton(Widget w,
Char Line[6]; Char Line[6];
Line[0] = ANSI_ESC; /* force an exit from insert-mode */ Line[0] = ANSI_ESC; /* force an exit from insert-mode */
v_write(pty, Line, 1); v_write(pty, Line, (size_t) 1);
if (line < 0) { if (line < 0) {
line = -line; line = -line;
@ -1482,7 +1487,7 @@ ViButton(Widget w,
Line[0] = CONTROL('p'); Line[0] = CONTROL('p');
} }
while (--line >= 0) while (--line >= 0)
v_write(pty, Line, 1); v_write(pty, Line, (size_t) 1);
} }
} }
} }
@ -1665,6 +1670,8 @@ DECtoASCII(unsigned ch)
if (xtermIsDecGraphic(ch)) { if (xtermIsDecGraphic(ch)) {
ch = CharOf("###########+++++##-##++++|######"[ch]); ch = CharOf("###########+++++##-##++++|######"[ch]);
/* 01234567890123456789012345678901 */ /* 01234567890123456789012345678901 */
} else {
ch = '?'; /* DEC Technical has no mapping */
} }
return ch; return ch;
} }
@ -1697,20 +1704,22 @@ UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result)
if (len != 0) { if (len != 0) {
PtyData data; PtyData data;
Boolean save_vt100 = screen->vt100_graphics;
fakePtyData(&data, s, s + len); fakePtyData(&data, s, s + len);
screen->vt100_graphics = False; /* temporary override */
while (decodeUtf8(screen, &data)) { while (decodeUtf8(screen, &data)) {
Bool fails = False; Bool fails = False;
Bool extra = False; Bool extra = False;
IChar value; IChar value;
skipPtyData(&data, value); skipPtyData(&data, value);
if (value == UCS_REPL) { if (is_UCS_SPECIAL(value)) {
fails = True; fails = True;
} else if (value < 256) { } else if (value < 256) {
AddChar(&buffer, &used, offset, CharOf(value)); AddChar(&buffer, &used, offset, CharOf(value));
} else { } else {
unsigned eqv = ucs2dec(screen, value); unsigned eqv = ucs2dec(screen, value);
if (xtermIsDecGraphic(eqv)) { if (xtermIsInternalCs(eqv)) {
AddChar(&buffer, &used, offset, DECtoASCII(eqv)); AddChar(&buffer, &used, offset, DECtoASCII(eqv));
} else { } else {
eqv = AsciiEquivs(value); eqv = AsciiEquivs(value);
@ -1740,6 +1749,7 @@ UTF8toLatin1(TScreen *screen, Char *s, unsigned long len, unsigned long *result)
AddChar(&buffer, &used, offset, ' '); AddChar(&buffer, &used, offset, ' ');
} }
AddChar(&buffer, &used, offset, '\0'); AddChar(&buffer, &used, offset, '\0');
screen->vt100_graphics = save_vt100;
*result = (unsigned long) (offset - 1); *result = (unsigned long) (offset - 1);
} else { } else {
*result = 0; *result = 0;
@ -2278,7 +2288,7 @@ GettingSelection(Display *dpy, Atom type, Char *line, unsigned long len)
#ifdef VMS #ifdef VMS
# define tty_vwrite(pty,lag,l) tt_write(lag,l) # define tty_vwrite(pty,lag,l) tt_write(lag,l)
#else /* !( VMS ) */ #else /* !( VMS ) */
# define tty_vwrite(pty,lag,l) v_write(pty,lag,l) # define tty_vwrite(pty,lag,l) v_write(pty,lag,(size_t) l)
#endif /* defined VMS */ #endif /* defined VMS */
#if OPT_PASTE64 #if OPT_PASTE64
@ -2454,14 +2464,18 @@ _qWriteSelectionData(XtermWidget xw, Char *lag, size_t length)
#endif /* OPT_PASTE64 */ #endif /* OPT_PASTE64 */
#if OPT_READLINE #if OPT_READLINE
if (SCREEN_FLAG(screen, paste_quotes)) { if (SCREEN_FLAG(screen, paste_quotes)) {
Char quote[2];
quote[0] = (Char) get_tty_lnext(screen->respond, XTERM_LNEXT, "pty");
quote[1] = 0;
TRACE(("writing quoted selection data %s\n", visibleChars(lag, length)));
while (length--) { while (length--) {
tty_vwrite(screen->respond, (const Char *) "\026", 1); /* Control-V */ tty_vwrite(screen->respond, quote, 1);
tty_vwrite(screen->respond, lag++, 1); tty_vwrite(screen->respond, lag++, 1);
} }
} else } else
#endif #endif
{ {
TRACE(("writing base64 padding %s\n", visibleChars(lag, length))); TRACE(("writing selection data %s\n", visibleChars(lag, length)));
tty_vwrite(screen->respond, lag, length); tty_vwrite(screen->respond, lag, length);
} }
} }
@ -2469,14 +2483,9 @@ _qWriteSelectionData(XtermWidget xw, Char *lag, size_t length)
static void static void
_WriteSelectionData(XtermWidget xw, Char *line, size_t length) _WriteSelectionData(XtermWidget xw, Char *line, size_t length)
{ {
/* Write data to pty a line at a time. */ #if OPT_PASTE64 || OPT_READLINE
/* 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); TScreen *screen = TScreenOf(xw);
#endif #endif
Char *lag, *end;
/* in the VMS version, if tt_pasting isn't set to True then qio /* in the VMS version, if tt_pasting isn't set to True then qio
reads aren't blocked and an infinite loop is entered, where the reads aren't blocked and an infinite loop is entered, where the
@ -2486,30 +2495,23 @@ _WriteSelectionData(XtermWidget xw, Char *line, size_t length)
tt_pasting = True; tt_pasting = True;
#endif #endif
end = &line[length];
lag = line;
#if OPT_PASTE64 #if OPT_PASTE64
if (screen->base64_paste) { if (screen->base64_paste) {
_qWriteSelectionData(xw, lag, (size_t) (end - lag)); _qWriteSelectionData(xw, line, length);
base64_flush(screen); base64_flush(screen);
} else } else
#endif #endif
{ {
if (!SCREEN_FLAG(screen, paste_literal_nl)) { if (!SCREEN_FLAG(screen, paste_literal_nl)) {
Char *cp; size_t n;
for (cp = line; cp != end; cp++) { for (n = 0; n < length; ++n) {
if (*cp == '\n') { if (line[n] == '\n') {
*cp = '\r'; line[n] = '\r';
_qWriteSelectionData(xw, lag, (size_t) (cp - lag + 1));
lag = cp + 1;
} }
} }
} }
if (lag != end) { _qWriteSelectionData(xw, line, length);
_qWriteSelectionData(xw, lag, (size_t) (end - lag));
}
} }
#ifdef VMS #ifdef VMS
tt_pasting = False; tt_pasting = False;
@ -2551,11 +2553,82 @@ removeControls(XtermWidget xw, char *value)
dst = strlen(value); dst = strlen(value);
} else { } else {
size_t src = 0; size_t src = 0;
Boolean *disallowed = screen->disallow_paste_ops;
TERMIO_STRUCT data;
char current_chars[epLAST];
if (disallowed[epSTTY] && ttyGetAttr(screen->respond, &data) == 0) {
int n;
int disabled = xtermDisabledChar();
TRACE(("disallow(STTY):"));
memcpy(current_chars, disallowed, sizeof(current_chars));
for (n = 0; n < NCCS; ++n) {
PasteControls nc = (data.c_cc[n] < 32
? data.c_cc[n]
: (data.c_cc[n] == 127
? epDEL
: epLAST));
if (nc == epNUL || nc == epLAST)
continue;
if (CharOf(data.c_cc[n]) == CharOf(disabled))
continue;
if ((n == VMIN || n == VTIME) && !(data.c_lflag & ICANON))
continue;
switch (n) {
/* POSIX */
case VEOF:
case VEOL:
case VERASE:
case VINTR:
case VKILL:
case VQUIT:
case VSTART:
case VSTOP:
case VSUSP:
/* system-dependent */
#ifdef VDISCARD
case VDISCARD:
#endif
#ifdef VDSUSP
case VDSUSP:
#endif
#ifdef VEOL2
case VEOL2:
#endif
#ifdef VLNEXT
case VLNEXT:
#endif
#ifdef VREPRINT
case VREPRINT:
#endif
#ifdef VSTATUS
case VSTATUS:
#endif
#ifdef VSWTC
case VSWTC: /* System V SWTCH */
#endif
#ifdef VWERASE
case VWERASE:
#endif
break;
default:
continue;
}
if (nc != epLAST) {
TRACE((" \\%03o", data.c_cc[n]));
current_chars[nc] = 1;
}
}
TRACE(("\n"));
disallowed = current_chars;
}
while ((value[dst] = value[src]) != '\0') { while ((value[dst] = value[src]) != '\0') {
int ch = CharOf(value[src++]); int ch = CharOf(value[src++]);
#define ReplacePaste(n) \ #define ReplacePaste(n) \
if (screen->disallow_paste_ops[n]) \ if (disallowed[n]) \
value[dst] = ' ' value[dst] = ' '
if (ch < 32) { if (ch < 32) {
@ -2826,7 +2899,7 @@ HandleInsertSelection(Widget w,
&& (okSendMousePos(xw) == MOUSE_OFF) && (okSendMousePos(xw) == MOUSE_OFF)
&& SCREEN_FLAG(screen, paste_moves) && SCREEN_FLAG(screen, paste_moves)
&& rowOnCurrentLine(screen, eventRow(screen, event), &ldelta)) && rowOnCurrentLine(screen, eventRow(screen, event), &ldelta))
ReadLineMovePoint(screen, eventColBetween(screen, event), ldelta); ReadLineMovePoint(xw, eventColBetween(screen, event), ldelta);
#endif /* OPT_READLINE */ #endif /* OPT_READLINE */
xtermGetSelection(w, event->xbutton.time, params, *num_params, NULL); xtermGetSelection(w, event->xbutton.time, params, *num_params, NULL);
@ -3101,7 +3174,7 @@ EndExtend(XtermWidget xw,
break; break;
} }
} }
v_write(screen->respond, line, count); v_write(screen->respond, line, (size_t) count);
UnHiliteText(xw); UnHiliteText(xw);
} }
} }
@ -3932,6 +4005,7 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc)
indexed)) != 0) { indexed)) != 0) {
int len = (int) strlen(search); int len = (int) strlen(search);
int col; int col;
int offset;
int best_col = -1; int best_col = -1;
int best_len = -1; int best_len = -1;
@ -3940,12 +4014,13 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc)
endc->row = 0; endc->row = 0;
endc->col = 0; endc->col = 0;
for (col = 0; indexed[col] < len; ++col) { for (col = 0; (offset = indexed[col]) < len; ++col) {
if (regexec(&preg, if (regexec(&preg,
search + indexed[col], search + offset,
(size_t) 1, &match, 0) == 0) { (size_t) 1, &match,
int start_inx = (int) (match.rm_so + indexed[col]); col ? REG_NOTBOL : 0) == 0) {
int finis_inx = (int) (match.rm_eo + indexed[col]); int start_inx = (int) (match.rm_so + offset);
int finis_inx = (int) (match.rm_eo + offset);
int start_col = indexToCol(indexed, len, start_inx); int start_col = indexToCol(indexed, len, start_inx);
int finis_col = indexToCol(indexed, len, finis_inx); int finis_col = indexToCol(indexed, len, finis_inx);
@ -3972,11 +4047,10 @@ do_select_regex(TScreen *screen, CELL *startc, CELL *endc)
indexed[best_col], indexed[best_col],
indexed[best_nxt])); indexed[best_nxt]));
TRACE(("matched:%d:%s\n", TRACE(("matched:%d:%s\n",
indexed[best_nxt] + 1 - indexed[best_nxt] -
indexed[best_col], indexed[best_col],
visibleChars((Char *) (search + indexed[best_col]), visibleChars((Char *) (search + indexed[best_col]),
(unsigned) (indexed[best_nxt] + (unsigned) (indexed[best_nxt] -
1 -
indexed[best_col])))); indexed[best_col]))));
} }
free(search); free(search);
@ -4947,14 +5021,15 @@ _OwnSelection(XtermWidget xw,
SelectedCells *tcp = &(screen->clipboard_data); SelectedCells *tcp = &(screen->clipboard_data);
TRACE(("saving selection to clipboard buffer\n")); TRACE(("saving selection to clipboard buffer\n"));
scp = &(screen->selected_cells[CLIPBOARD_CODE]); scp = &(screen->selected_cells[CLIPBOARD_CODE]);
if ((buf = (Char *) malloc((size_t) scp->data_length)) == 0) if ((buf = (Char *) malloc((size_t) scp->data_length)) == 0) {
SysError(ERROR_BMALLOC2); SysError(ERROR_BMALLOC2);
} else {
free(tcp->data_buffer); free(tcp->data_buffer);
memcpy(buf, scp->data_buffer, scp->data_length); memcpy(buf, scp->data_buffer, scp->data_length);
tcp->data_buffer = buf; tcp->data_buffer = buf;
tcp->data_limit = scp->data_length; tcp->data_limit = scp->data_length;
tcp->data_length = scp->data_length; tcp->data_length = scp->data_length;
}
} }
scp = &(screen->selected_cells[which]); scp = &(screen->selected_cells[which]);
if (scp->data_length == 0) { if (scp->data_length == 0) {
@ -5094,6 +5169,8 @@ SaveText(TScreen *screen,
unsigned c; unsigned c;
assert(i < (int) ld->lineSize); assert(i < (int) ld->lineSize);
c = E2A(ld->charData[i]); c = E2A(ld->charData[i]);
if (ld->attribs[i] & INVISIBLE)
continue;
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
/* We want to strip out every occurrence of HIDDEN_CHAR AFTER a /* We want to strip out every occurrence of HIDDEN_CHAR AFTER a
* wide character. * wide character.
@ -5432,7 +5509,7 @@ EditorButton(XtermWidget xw, XButtonEvent *event)
/* Transmit key sequence to process running under xterm */ /* Transmit key sequence to process running under xterm */
TRACE(("EditorButton -> %s\n", visibleChars(line, count))); TRACE(("EditorButton -> %s\n", visibleChars(line, count)));
v_write(pty, line, count); v_write(pty, line, (size_t) count);
} }
return; return;
} }

View file

@ -1,7 +1,7 @@
/* $XTermId: cachedGCs.c,v 1.81 2021/09/16 19:48:02 tom Exp $ */ /* $XTermId: cachedGCs.c,v 1.82 2024/05/17 20:59:36 tom Exp $ */
/* /*
* Copyright 2007-2019,2021 by Thomas E. Dickey * Copyright 2007-2021,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -92,7 +92,7 @@ traceCgsEnum(CgsEnum value)
CASE(BoldReverse); CASE(BoldReverse);
CASE(Border); CASE(Border);
CASE(Filler); CASE(Filler);
#if OPT_BOX_CHARS #if OPT_BOX_CHARS || OPT_WIDE_CHARS
CASE(Line); CASE(Line);
CASE(Dots); CASE(Dots);
#endif #endif
@ -343,7 +343,7 @@ newCache(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId, CgsCache * me)
xgcv.graphics_exposures = True; /* default */ xgcv.graphics_exposures = True; /* default */
xgcv.function = GXcopy; xgcv.function = GXcopy;
break; break;
#if OPT_BOX_CHARS #if OPT_BOX_CHARS || OPT_WIDE_CHARS
case gcLine: case gcLine:
mask |= (GCGraphicsExposures | GCFunction); mask |= (GCGraphicsExposures | GCFunction);
xgcv.graphics_exposures = True; /* default */ xgcv.graphics_exposures = True; /* default */

View file

@ -1,4 +1,4 @@
/* $XTermId: charclass.c,v 1.46 2023/01/04 09:26:46 tom Exp $ */ /* $XTermId: charclass.c,v 1.50 2023/04/01 00:11:47 tom Exp $ */
/* /*
* Copyright 2002-2022,2023 by Thomas E. Dickey * Copyright 2002-2022,2023 by Thomas E. Dickey
@ -262,8 +262,8 @@ report_wide_char_class(void)
printf("from these overlapping intervals of character codes:\n"); printf("from these overlapping intervals of character codes:\n");
for (i = classtab[0].first; i <= classtab[0].last; i++) { for (i = classtab[0].first; i <= classtab[0].last; i++) {
printf("\tU+%04X .. U+%04X %s\n", printf("\tU+%04X .. U+%04X %s\n",
classtab[i].first, (unsigned) classtab[i].first,
classtab[i].last, (unsigned) classtab[i].last,
class_name((Classes) classtab[i].cclass)); class_name((Classes) classtab[i].cclass));
} }
printf("\n"); printf("\n");
@ -311,7 +311,7 @@ expected_class(int wch)
{ {
int result = wch; int result = wch;
wint_t ch = (wint_t) wch; wint_t ch = (wint_t) wch;
if (ch == '\0' || ch == '\t') { if (wch < 0 || ch == '\0' || ch == '\t') {
result = BLANK; result = BLANK;
} else if (iswcntrl(ch)) { } else if (iswcntrl(ch)) {
result = CNTRL; result = CNTRL;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1302
app/xterm/charsets.dat Normal file

File diff suppressed because it is too large Load diff

2286
app/xterm/charsets.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,9 @@
dnl $XTermId: configure.in,v 1.392 2023/01/08 11:41:52 tom Exp $ dnl $XTermId: configure.in,v 1.402 2024/05/11 17:24:20 tom Exp $
dnl dnl
dnl ----------------------------------------------------------------------------- dnl -----------------------------------------------------------------------------
dnl this file is part of xterm dnl this file is part of xterm
dnl dnl
dnl Copyright 1997-2022,2023 by Thomas E. Dickey dnl Copyright 1997-2023,2024 by Thomas E. Dickey
dnl dnl
dnl All Rights Reserved dnl All Rights Reserved
dnl dnl
@ -82,6 +82,7 @@ AM_LANGINFO_CODESET
CF_SIG_ATOMIC_T CF_SIG_ATOMIC_T
AC_CHECK_TYPE(time_t, long) AC_CHECK_TYPE(time_t, long)
CF_TYPE_CC_T CF_TYPE_CC_T
CF_TYPE_NFDS_T
AC_TYPE_MODE_T AC_TYPE_MODE_T
AC_TYPE_PID_T AC_TYPE_PID_T
AC_TYPE_UID_T AC_TYPE_UID_T
@ -99,12 +100,15 @@ AC_CHECK_FUNCS( \
unsetenv \ unsetenv \
sched_yield \ sched_yield \
setpgid \ setpgid \
strftime \ setsid \
tcgetattr \ tcgetattr \
waitpid \ waitpid \
wcswidth \ wcswidth \
wcwidth ) wcwidth )
CF_FUNC_GETTIME
CF_FUNC_STRFTIME
CF_MKSTEMP CF_MKSTEMP
CF_SETITIMER
CF_UTMP CF_UTMP
CF_STRUCT_LASTLOG CF_STRUCT_LASTLOG
CF_POSIX_SAVED_IDS CF_POSIX_SAVED_IDS
@ -163,7 +167,7 @@ cf_name=`echo "$program_transform_name" | sed -e '[s,\\$\\$,$,g]'`
cf_name=`echo xterm |sed -e "$cf_name"` cf_name=`echo xterm |sed -e "$cf_name"`
AC_MSG_CHECKING(for symbolic link to create to $cf_name) AC_MSG_CHECKING(for symbolic link to create to $cf_name)
AC_ARG_WITH(xterm-symlink, AC_ARG_WITH(xterm-symlink,
[ --with-xterm-symlink=XXX make symbolic link to installed xterm], [[ --with-xterm-symlink[=XXX] make symbolic link to installed xterm]],
[with_symlink=$withval], [with_symlink=$withval],
[with_symlink=xterm]) [with_symlink=xterm])
AC_MSG_RESULT($with_symlink) AC_MSG_RESULT($with_symlink)
@ -200,7 +204,7 @@ AC_MSG_RESULT($disable_setgid)
AC_MSG_CHECKING(if you want to run xterm setuid to a given user) AC_MSG_CHECKING(if you want to run xterm setuid to a given user)
AC_ARG_WITH(setuid, AC_ARG_WITH(setuid,
[ --with-setuid=XXX use the given setuid user], [[ --with-setuid[=XXX] use the given setuid user]],
[use_given_setuid=$withval], [use_given_setuid=$withval],
[use_given_setuid=no]) [use_given_setuid=no])
AC_MSG_RESULT($use_given_setuid) AC_MSG_RESULT($use_given_setuid)
@ -217,7 +221,7 @@ fi
AC_MSG_CHECKING(if you want to run xterm setgid to match utmp/utmpx file) AC_MSG_CHECKING(if you want to run xterm setgid to match utmp/utmpx file)
AC_ARG_WITH(utmp-setgid, AC_ARG_WITH(utmp-setgid,
[ --with-utmp-setgid=XXX use setgid to match utmp/utmpx file], [[ --with-utmp-setgid[=XXX] use setgid to match utmp/utmpx file]],
[use_utmp_setgid=$withval], [use_utmp_setgid=$withval],
[use_utmp_setgid=no]) [use_utmp_setgid=no])
AC_MSG_RESULT($use_utmp_setgid) AC_MSG_RESULT($use_utmp_setgid)
@ -260,6 +264,10 @@ if test "$use_utempter" = yes ; then
fi fi
fi fi
# We use these for the manpage:
CF_WITH_UTMP_PATH
CF_WITH_WTMP_PATH
### checks for external data ### checks for external data
CF_ERRNO CF_ERRNO
CF_TTY_GROUP CF_TTY_GROUP
@ -296,7 +304,7 @@ CF_TERMIOS_TYPES
# the feature if it is unwanted. # the feature if it is unwanted.
AC_MSG_CHECKING(if we expect to use the Xcursor library) AC_MSG_CHECKING(if we expect to use the Xcursor library)
CF_ARG_DISABLE(xcursor, CF_ARG_DISABLE(xcursor,
[ --disable-xcursor disable cursorTheme resource], [ --disable-xcursor disable cursorTheme resource],
[enable_xcursor=no], [enable_xcursor=no],
[enable_xcursor=yes]) [enable_xcursor=yes])
AC_MSG_RESULT($enable_xcursor) AC_MSG_RESULT($enable_xcursor)
@ -343,6 +351,11 @@ AC_MSG_RESULT($default_termid)
case $default_termid in case $default_termid in
(vt*) default_termid=`echo $default_termid | sed -e 's/^..//'` (vt*) default_termid=`echo $default_termid | sed -e 's/^..//'`
;; ;;
([[1-9]][[0-9]][[0-9]]|[[1-9]][[0-9]])
;;
(*)
AC_MSG_ERROR([expected a number, not $default_termid])
;;
esac esac
AC_DEFINE_UNQUOTED(DFT_DECID,"$default_termid",[default terminal-id]) AC_DEFINE_UNQUOTED(DFT_DECID,"$default_termid",[default terminal-id])
AC_SUBST(default_termid) AC_SUBST(default_termid)
@ -415,7 +428,7 @@ if test "$cf_tic_prog" = yes ; then
fi fi
AC_MSG_CHECKING(for private terminfo-directory) AC_MSG_CHECKING(for private terminfo-directory)
AC_ARG_WITH(own-terminfo, AC_ARG_WITH(own-terminfo,
[ --with-own-terminfo=P set default $TERMINFO (default: from environment)], [[ --with-own-terminfo[=P] set default $TERMINFO (default: from environment)]],
[TERMINFO_DIR=$withval], [TERMINFO_DIR=$withval],
[TERMINFO_DIR=${TERMINFO-none}]) [TERMINFO_DIR=${TERMINFO-none}])
AC_MSG_RESULT($TERMINFO_DIR) AC_MSG_RESULT($TERMINFO_DIR)
@ -759,7 +772,7 @@ CF_INPUT_METHOD
test "$cf_cv_input_method" = no && enable_ximp=no test "$cf_cv_input_method" = no && enable_ximp=no
if test "$enable_ximp" != no ; then if test "$enable_ximp" != no ; then
if test "$enable_i18n" = no ; then if test "$enable_i18n" = no ; then
AC_MSG_WARN(input-methor relies upon internationalization) AC_MSG_WARN(input-method relies upon internationalization)
enable_ximp=no enable_ximp=no
fi fi
fi fi
@ -839,10 +852,10 @@ else
fi fi
AC_MSG_CHECKING(if you want support for mouse in readline applications) AC_MSG_CHECKING(if you want support for mouse in readline applications)
CF_ARG_ENABLE(readline-mouse, CF_ARG_DISABLE(readline-mouse,
[ --enable-readline-mouse enable support for mouse in readline applications], [ --disable-readline-mouse disable support for mouse in readline applications],
[enable_readline_mouse=yes], [enable_readline_mouse=no],
[enable_readline_mouse=no]) [enable_readline_mouse=yes])
AC_MSG_RESULT($enable_readline_mouse) AC_MSG_RESULT($enable_readline_mouse)
if test "$enable_readline_mouse" = yes ; then if test "$enable_readline_mouse" = yes ; then
AC_DEFINE(OPT_READLINE,1,[Define to 1 to enable support for mouse in readline applications]) AC_DEFINE(OPT_READLINE,1,[Define to 1 to enable support for mouse in readline applications])
@ -1084,7 +1097,11 @@ if test "$enable_regis_graphics" = yes || test "$enable_sixel_graphics" = yes ;
EXTRAHDRS="$EXTRAHDRS graphics.h" EXTRAHDRS="$EXTRAHDRS graphics.h"
EXTRASRCS="$EXTRASRCS graphics.c" EXTRASRCS="$EXTRASRCS graphics.c"
EXTRAOBJS="$EXTRAOBJS graphics.o" EXTRAOBJS="$EXTRAOBJS graphics.o"
STRINGS_MAX=600000
else
STRINGS_MAX=20000
fi fi
AC_SUBST(STRINGS_MAX)
AC_MSG_CHECKING(if you want sixel screen dump support) AC_MSG_CHECKING(if you want sixel screen dump support)
CF_ARG_DISABLE(print-graphics, CF_ARG_DISABLE(print-graphics,

File diff suppressed because it is too large Load diff

View file

@ -20,8 +20,8 @@
Thomas Dickey Thomas Dickey
XFree86 Project (1996-2006) XFree86 Project (1996-2006)
invisible-island.net (2006-2023) invisible-island.net (2006-2024)
updated for XTerm Patch #378 (2023/01/06) updated for XTerm Patch #392 (2024/05/25)
@ -315,6 +315,7 @@ ESC ( C Designate G0 Character Set, VT100, ISO 2022.
There are a few other 94-character sets: There are a few other 94-character sets:
C = 0 -> DEC Special Character and Line Drawing Set, VT100. C = 0 -> DEC Special Character and Line Drawing Set, VT100.
C = < -> DEC Supplemental, VT200. C = < -> DEC Supplemental, VT200.
C = < -> User Preferred Selection Set, VT300.
C = > -> DEC Technical, VT300. C = > -> DEC Technical, VT300.
These are documented as 94-character sets (like USASCII) These are documented as 94-character sets (like USASCII)
without NRCS: without NRCS:
@ -413,6 +414,29 @@ DCS Ps ; Ps | Pt ST
key value. The key codes correspond to the DEC function-key key value. The key codes correspond to the DEC function-key
codes (e.g., F6=17). codes (e.g., F6=17).
DCS Ps! u Pt ST
Assigning User-Preferred Supplemental Sets (DECAUPSS), VT320,
VT510. XTerm ignores this in UTF-8 mode, and uses the
preferLatin1 resource to choose the default setting.
VT320 provides these:
DCS 0 ! u % 5 ST -> DEC Supplemental Graphic
DCS 1 ! u A ST -> ISO Latin-1 supplemental
VT510 adds these:
DCS 0 ! u " ? ST -> DEC Greek
DCS 0 ! u " 4 ST -> DEC Hebrew
DCS 0 ! u % 0 ST -> DEC Turkish
DCS 0 ! u & 4 ST -> DEC Cyrillic
DCS 1 ! u B ST -> ISO Latin-2 Supplemental
DCS 1 ! u F ST -> ISO Greek Supplemental
DCS 1 ! u H ST -> ISO Hebrew Supplemental
DCS 1 ! u M ST -> ISO Latin-5 Supplemental
DCS 1 ! u L ST -> ISO Latin-Cyrillic
VT520 accepts a few others (undocumented); xterm adds these:
DCS 0 ! u B ST -> United States (USASCII).
DCS 0 ! u 0 ST -> DEC Special Character and Line Drawing
Set.
DCS 0 ! u > ST -> DEC Technical.
DCS $ q Pt ST DCS $ q Pt ST
Request Status String (DECRQSS), VT420 and up. Request Status String (DECRQSS), VT420 and up.
The string following the "q" is one of the following: The string following the "q" is one of the following:
@ -426,7 +450,11 @@ DCS $ q Pt ST
$ | -> DECSCPP $ | -> DECSCPP
$ } -> DECSASD $ } -> DECSASD
$ ~ -> DECSSDT $ ~ -> DECSSDT
* x -> DECSACE
* | -> DECSNLS * | -> DECSNLS
, | -> DECAC (VT525 only)
, } -> DECATC (VT525 only)
> Pm m -> XTQMODKEYS (xterm)
xterm responds with DCS 1 $ r Pt ST for valid requests, xterm responds with DCS 1 $ r Pt ST for valid requests,
replacing the Pt with the corresponding CSI string, or DCS 0 $ replacing the Pt with the corresponding CSI string, or DCS 0 $
r ST for invalid requests. r ST for invalid requests.
@ -615,7 +643,7 @@ CSI ? Pi ; Pa ; Pv S
sizes, but disallows modifying those sizes because that is sizes, but disallows modifying those sizes because that is
done once, using resource-values. done once, using resource-values.
o Graphics geometry is not necessarily the same as "window o Graphics geometry is not necessarily the same as "window
size" (see the dtterm window manipulation extensions). size" (see the XTWINOPS window manipulation extensions).
XTerm limits the maximum graphics geometry according to XTerm limits the maximum graphics geometry according to
the maxGraphicSize resource. the maxGraphicSize resource.
The maxGraphicSize resource can be either an explicit The maxGraphicSize resource can be either an explicit
@ -655,6 +683,9 @@ CSI > Pm T
(See discussion of Title Modes). (See discussion of Title Modes).
CSI ? 5 W Reset tab stops to start with column 9, every 8 columns
(DECST8C), VT510.
CSI Ps X Erase Ps Character(s) (default = 1) (ECH). CSI Ps X Erase Ps Character(s) (default = 1) (ECH).
CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT). CSI Ps Z Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).
@ -683,6 +714,7 @@ CSI Ps c Send Device Attributes (Primary DA).
-> CSI ? 6 2 ; Ps c ("VT220") -> CSI ? 6 2 ; Ps c ("VT220")
-> CSI ? 6 3 ; Ps c ("VT320") -> CSI ? 6 3 ; Ps c ("VT320")
-> CSI ? 6 4 ; Ps c ("VT420") -> CSI ? 6 4 ; Ps c ("VT420")
-> CSI ? 6 5 ; Ps c ("VT510" to ("VT525")
The VT100-style response parameters do not mean anything by The VT100-style response parameters do not mean anything by
themselves. VT220 (and higher) parameters do, telling the themselves. VT220 (and higher) parameters do, telling the
@ -793,16 +825,21 @@ CSI ? Pm h
Ps = 4 1 -> more(1) fix (see curses resource). Ps = 4 1 -> more(1) fix (see curses resource).
Ps = 4 2 -> Enable National Replacement Character sets Ps = 4 2 -> Enable National Replacement Character sets
(DECNRCM), VT220. (DECNRCM), VT220.
Ps = 4 3 -> Enable Graphics Expanded Print Mode (DECGEPM). Ps = 4 3 -> Enable Graphic Expanded Print Mode (DECGEPM),
VT340.
Ps = 4 4 -> Turn on margin bell, xterm. Ps = 4 4 -> Turn on margin bell, xterm.
Ps = 4 4 -> Enable Graphics Print Color Mode (DECGPCM). Ps = 4 4 -> Enable Graphic Print Color Mode (DECGPCM),
Ps = 4 5 -> Reverse-wraparound mode, xterm. VT340.
Ps = 4 5 -> Enable Graphics Print ColorSpace (DECGPCS). Ps = 4 5 -> Reverse-wraparound mode (XTREVWRAP), xterm.
Ps = 4 6 -> Start logging, xterm. This is normally Ps = 4 5 -> Enable Graphic Print Color Syntax (DECGPCS),
disabled by a compile-time option. VT340.
Ps = 4 6 -> Start logging (XTLOGGING), xterm. This is
normally disabled by a compile-time option.
Ps = 4 6 -> Graphic Print Background Mode, VT340.
Ps = 4 7 -> Use Alternate Screen Buffer, xterm. This may Ps = 4 7 -> Use Alternate Screen Buffer, xterm. This may
be disabled by the titeInhibit resource. be disabled by the titeInhibit resource.
Ps = 4 7 -> Enable Graphics Rotated Print Mode (DECGRPM). Ps = 4 7 -> Enable Graphic Rotated Print Mode (DECGRPM),
VT340.
Ps = 6 6 -> Application keypad mode (DECNKM), VT320. Ps = 6 6 -> Application keypad mode (DECNKM), VT320.
Ps = 6 7 -> Backarrow key sends backspace (DECBKM), VT340, Ps = 6 7 -> Backarrow key sends backspace (DECBKM), VT340,
VT420. This sets the backarrowKey resource to "true". VT420. This sets the backarrowKey resource to "true".
@ -829,6 +866,7 @@ CSI ? Pm h
This sets the scrollTtyOutput resource to "true". This sets the scrollTtyOutput resource to "true".
Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt). This Ps = 1 0 1 1 -> Scroll to bottom on key press (rxvt). This
sets the scrollKey resource to "true". sets the scrollKey resource to "true".
Ps = 1 0 1 4 -> Enable fastScroll resource, xterm.
Ps = 1 0 1 5 -> Enable urxvt Mouse Mode. Ps = 1 0 1 5 -> Enable urxvt Mouse Mode.
Ps = 1 0 1 6 -> Enable SGR Mouse PixelMode, xterm. Ps = 1 0 1 6 -> Enable SGR Mouse PixelMode, xterm.
Ps = 1 0 3 4 -> Interpret "meta" key, xterm. This sets the Ps = 1 0 3 4 -> Interpret "meta" key, xterm. This sets the
@ -853,6 +891,8 @@ CSI ? Pm h
is received, xterm. This enables the popOnBell resource. is received, xterm. This enables the popOnBell resource.
Ps = 1 0 4 4 -> Reuse the most recent data copied to Ps = 1 0 4 4 -> Reuse the most recent data copied to
CLIPBOARD, xterm. This enables the keepClipboard resource. CLIPBOARD, xterm. This enables the keepClipboard resource.
Ps = 1 0 4 5 -> Extended Reverse-wraparound mode
(XTREVWRAP2), xterm.
Ps = 1 0 4 6 -> Enable switching to/from Alternate Screen Ps = 1 0 4 6 -> Enable switching to/from Alternate Screen
Buffer, xterm. This works for terminfo-based systems, Buffer, xterm. This works for terminfo-based systems,
updating the titeInhibit resource. updating the titeInhibit resource.
@ -874,7 +914,12 @@ CSI ? Pm h
Ps = 1 0 6 0 -> Set legacy keyboard emulation, i.e, X11R6, Ps = 1 0 6 0 -> Set legacy keyboard emulation, i.e, X11R6,
xterm. xterm.
Ps = 1 0 6 1 -> Set VT220 keyboard emulation, xterm. Ps = 1 0 6 1 -> Set VT220 keyboard emulation, xterm.
Ps = 2 0 0 1 -> Enable readline mouse button-1, xterm.
Ps = 2 0 0 2 -> Enable readline mouse button-2, xterm.
Ps = 2 0 0 3 -> Enable readline mouse button-3, xterm.
Ps = 2 0 0 4 -> Set bracketed paste mode, xterm. Ps = 2 0 0 4 -> Set bracketed paste mode, xterm.
Ps = 2 0 0 5 -> Enable readline character-quoting, xterm.
Ps = 2 0 0 6 -> Enable readline newline pasting, xterm.
CSI Ps i Media Copy (MC). CSI Ps i Media Copy (MC).
Ps = 0 -> Print screen (default). Ps = 0 -> Print screen (default).
@ -924,15 +969,19 @@ CSI ? Pm l
Ps = 4 1 -> No more(1) fix (see curses resource). Ps = 4 1 -> No more(1) fix (see curses resource).
Ps = 4 2 -> Disable National Replacement Character sets Ps = 4 2 -> Disable National Replacement Character sets
(DECNRCM), VT220. (DECNRCM), VT220.
Ps = 4 3 -> Disable Graphics Expanded Print Mode (DECGEPM). Ps = 4 3 -> Disable Graphic Expanded Print Mode (DECGEPM),
VT340.
Ps = 4 4 -> Turn off margin bell, xterm. Ps = 4 4 -> Turn off margin bell, xterm.
Ps = 4 4 -> Disable Graphics Print Color Mode (DECGPCM). Ps = 4 4 -> Disable Graphic Print Color Mode (DECGPCM),
Ps = 4 5 -> No Reverse-wraparound mode, xterm. VT340.
Ps = 4 5 -> Disable Graphics Print ColorSpace (DECGPCS). Ps = 4 5 -> No Reverse-wraparound mode (XTREVWRAP), xterm.
Ps = 4 6 -> Stop logging, xterm. This is normally disabled Ps = 4 5 -> Disable Graphic Print Color Syntax (DECGPCS),
by a compile-time option. VT340.
Ps = 4 6 -> Stop logging (XTLOGGING), xterm. This is
normally disabled by a compile-time option.
Ps = 4 7 -> Use Normal Screen Buffer, xterm. Ps = 4 7 -> Use Normal Screen Buffer, xterm.
Ps = 4 7 -> Disable Graphics Rotated Print Mode (DECGRPM). Ps = 4 7 -> Disable Graphic Rotated Print Mode (DECGRPM),
VT340.
Ps = 6 6 -> Numeric keypad mode (DECNKM), VT320. Ps = 6 6 -> Numeric keypad mode (DECNKM), VT320.
Ps = 6 7 -> Backarrow key sends delete (DECBKM), VT340, Ps = 6 7 -> Backarrow key sends delete (DECBKM), VT340,
VT420. This sets the backarrowKey resource to "false". VT420. This sets the backarrowKey resource to "false".
@ -959,6 +1008,7 @@ CSI ? Pm l
(rxvt). This sets the scrollTtyOutput resource to "false". (rxvt). This sets the scrollTtyOutput resource to "false".
Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt). Ps = 1 0 1 1 -> Don't scroll to bottom on key press (rxvt).
This sets the scrollKey resource to "false". This sets the scrollKey resource to "false".
Ps = 1 0 1 4 -> Disable fastScroll resource, xterm.
Ps = 1 0 1 5 -> Disable urxvt Mouse Mode. Ps = 1 0 1 5 -> Disable urxvt Mouse Mode.
Ps = 1 0 1 6 -> Disable SGR Mouse Pixel-Mode, xterm. Ps = 1 0 1 6 -> Disable SGR Mouse Pixel-Mode, xterm.
Ps = 1 0 3 4 -> Don't interpret "meta" key, xterm. This Ps = 1 0 3 4 -> Don't interpret "meta" key, xterm. This
@ -980,6 +1030,8 @@ CSI ? Pm l
resource. resource.
Ps = 1 0 4 3 -> Disable raising of the window when Control- Ps = 1 0 4 3 -> Disable raising of the window when Control-
G is received, xterm. This disables the popOnBell resource. G is received, xterm. This disables the popOnBell resource.
Ps = 1 0 4 5 -> No Extended Reverse-wraparound mode
(XTREVWRAP2), xterm.
Ps = 1 0 4 6 -> Disable switching to/from Alternate Screen Ps = 1 0 4 6 -> Disable switching to/from Alternate Screen
Buffer, xterm. This works for terminfo-based systems, Buffer, xterm. This works for terminfo-based systems,
updating the titeInhibit resource. If currently using the updating the titeInhibit resource. If currently using the
@ -1004,7 +1056,12 @@ CSI ? Pm l
X11R6, xterm. X11R6, xterm.
Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style, Ps = 1 0 6 1 -> Reset keyboard emulation to Sun/PC style,
xterm. xterm.
Ps = 2 0 0 1 -> Disable readline mouse button-1, xterm.
Ps = 2 0 0 2 -> Disable readline mouse button-2, xterm.
Ps = 2 0 0 3 -> Disable readline mouse button-3, xterm.
Ps = 2 0 0 4 -> Reset bracketed paste mode, xterm. Ps = 2 0 0 4 -> Reset bracketed paste mode, xterm.
Ps = 2 0 0 5 -> Disable readline character-quoting, xterm.
Ps = 2 0 0 6 -> Disable readline newline pasting, xterm.
CSI Pm m Character Attributes (SGR). CSI Pm m Character Attributes (SGR).
Ps = 0 -> Normal (default), VT100. Ps = 0 -> Normal (default), VT100.
@ -1250,11 +1307,8 @@ CSI ? Ps n
The last two parameters apply to VT300 & up (keyboard ready) The last two parameters apply to VT300 & up (keyboard ready)
and VT400 & up (LK01) respectively. and VT400 & up (LK01) respectively.
Ps = 5 3 -> Report Locator status. The response is CSI ? 5
3 n Locator available, if compiled-in, or CSI ? 5 0 n No
Locator, if not.
Ps = 5 5 -> Report Locator status. The response is CSI ? 5 Ps = 5 5 -> Report Locator status. The response is CSI ? 5
3 n Locator available, if compiled-in, or CSI ? 5 0 n No 0 n Locator available, if compiled-in, or CSI ? 5 3 n No
Locator, if not. Locator, if not.
Ps = 5 6 -> Report Locator type. The response is CSI ? 5 7 Ps = 5 6 -> Report Locator type. The response is CSI ? 5 7
; 1 n Mouse, if compiled-in, or CSI ? 5 7 ; 0 n Cannot ; 1 n Mouse, if compiled-in, or CSI ? 5 7 ; 0 n Cannot
@ -1338,9 +1392,9 @@ CSI Pm # p
limitations of C#. limitations of C#.
CSI > Ps q CSI > Ps q
Ps = 0 -> Report xterm name and version (XTVERSION). The Ps = 0 -> Report xterm name and version (XTVERSION).
response is a DSR sequence identifying the version: DCS > | The response is a DSR sequence identifying the version:
text ST DCS > | text ST
CSI Ps q Load LEDs (DECLL), VT100. CSI Ps q Load LEDs (DECLL), VT100.
Ps = 0 -> Clear all LEDS (default). Ps = 0 -> Clear all LEDS (default).
@ -1500,6 +1554,12 @@ CSI Ps ; Ps ; Ps t
Ps >= 2 4 -> Resize to Ps lines (DECSLPP), VT340 and VT420. Ps >= 2 4 -> Resize to Ps lines (DECSLPP), VT340 and VT420.
xterm adapts this by resizing its window. xterm adapts this by resizing its window.
XTWINOPS 2 2 (save/push title) and 2 3 (restore/pop title)
accept an optional third parameter for direct access to the
stack. Parameters in the range 1 through 10, may be used to
store the title into the stack or retrieve the title from the
stack without pushing/popping.
CSI > Pm t CSI > Pm t
This xterm control sets one or more features of the title This xterm control sets one or more features of the title
modes (XTSMTITLE), xterm. Each parameter enables a single modes (XTSMTITLE), xterm. Each parameter enables a single
@ -1524,12 +1584,25 @@ CSI Pt ; Pl ; Pb ; Pr ; Pm $ t
CSI u Restore cursor (SCORC, also ANSI.SYS). CSI u Restore cursor (SCORC, also ANSI.SYS).
CSI & u User-Preferred Supplemental Set (DECRQUPSS), VT320, VT510.
Response is DECAUPSS.
CSI Ps SP u CSI Ps SP u
Set margin-bell volume (DECSMBV), VT520. Set margin-bell volume (DECSMBV), VT520.
Ps = 0 , 5 , 6 , 7 , or 8 -> high. Ps = 0 , 5 , 6 , 7 , or 8 -> high.
Ps = 1 -> off. Ps = 1 -> off.
Ps = 2 , 3 or 4 -> low. Ps = 2 , 3 or 4 -> low.
CSI " v Request Displayed Extent (DECRQDE), VT340, VT420.
Response is
CSI Ph; Pw; Pc; Pr; Pp " w
where
Ph is the number of lines of the current page
Pw is the number of columns of the current page
Pc is the column number at the top-left of the window
Pr is the row number at the top-left of the window
Pp is the current page number
CSI Pt ; Pl ; Pb ; Pr ; Pp ; Pt ; Pl ; Pp $ v CSI Pt ; Pl ; Pb ; Pr ; Pp ; Pt ; Pl ; Pp $ v
Copy Rectangular Area (DECCRA), VT400 and up. Copy Rectangular Area (DECCRA), VT400 and up.
Pt ; Pl ; Pb ; Pr denotes the rectangle. Pt ; Pl ; Pb ; Pr denotes the rectangle.
@ -1595,7 +1668,6 @@ CSI Ps # y
3 -> omit checksum for cells not explicitly initialized. 3 -> omit checksum for cells not explicitly initialized.
4 -> do not mask cell value to 8 bits or ignore combining 4 -> do not mask cell value to 8 bits or ignore combining
characters. characters.
5 -> do not mask cell value to 7 bits.
CSI Pi ; Pg ; Pt ; Pl ; Pb ; Pr * y CSI Pi ; Pg ; Pt ; Pl ; Pb ; Pr * y
Request Checksum of Rectangular Area (DECRQCRA), VT420 and up. Request Checksum of Rectangular Area (DECRQCRA), VT420 and up.
@ -1718,6 +1790,42 @@ CSI # } Pop video attributes from stack (XTPOPSGR), xterm. Popping
restores the video-attributes which were saved using XTPUSHSGR restores the video-attributes which were saved using XTPUSHSGR
to their previous state. to their previous state.
CSI Ps; Pf; Pb, |
Assign Color (DECAC), VT525 only.
Ps selects the color item
Pf is the foreground color index 0..15
Pb is the background color index 0..15
Color items:
Ps = 1 -> normal text
Ps = 2 -> window frame
xterm uses the SGR color palette with DECAC color item 1 to
update the VT100 window colors, like OSC 1 0 and 1 1 .
CSI Ps; Pf; Pb, }
Alternate Text Color (DECATC), VT525 only. This feature
specifies the colors to use when DECSTGLT is selected to 1 or
2.
Ps selects attribute combinations
Pf is the foreground color index 0..15
Pb is the background color index 0..15
Attribute combinations:
Ps = 0 -> normal text
Ps = 1 -> bold
Ps = 2 -> reverse
Ps = 3 -> underline
Ps = 4 -> blink
Ps = 5 -> bold reverse
Ps = 6 -> bold underline
Ps = 7 -> bold blink
Ps = 8 -> reverse underline
Ps = 9 -> reverse blink
Ps = 1 0 -> underline blink
Ps = 1 1 -> bold reverse underline
Ps = 1 2 -> bold reverse blink
Ps = 1 3 -> bold underline blink
Ps = 1 4 -> reverse underline blink
Ps = 1 5 -> bold reverse underline blink
CSI Ps ' } CSI Ps ' }
Insert Ps Column(s) (default = 1) (DECIC), VT420 and up. Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.
@ -1741,13 +1849,15 @@ Operating System Commands
OSC Ps ; Pt BEL OSC Ps ; Pt BEL
OSC Ps ; Pt ST OSC Ps ; Pt ST
Set Text Parameters. Some control sequences return Set Text Parameters, xterm. Some control sequences return
information: information:
o For colors and font, if Pt is a "?", the control sequence o For colors and font, if Pt is a "?", the control sequence
elicits a response which consists of the control sequence elicits a response which consists of the control sequence
which would set the corresponding value. which would set the corresponding value.
o The dtterm control sequences allow you to determine the o A few of these control sequences began with dtterm (codes
icon name and window title. 0 , 1 , and 2 ). Code 3 in dtterm sets the working
directory for the next session. XTerm does that with the
spawn-new-terminal action.
XTerm accepts either BEL or ST for terminating OSC XTerm accepts either BEL or ST for terminating OSC
sequences, and when returning information, uses the same sequences, and when returning information, uses the same
@ -1816,6 +1926,25 @@ OSC Ps ; Pt ST
list. The colors are specified by name or RGB specification list. The colors are specified by name or RGB specification
as per XParseColor. as per XParseColor.
Resource Description
-----------------------+-----------------------------
foreground | VT100 text foreground color
background | VT100 text background color
cursorColor | text cursor color
pointerColor | pointer foreground color
pointerColorBackground | pointer background
(foreground) | Tektronix foreground color
(background) | Tektronix background color
highlightColor | highlight background color
(cursorColor) | Tektronix cursor color
highlightTextColor | highlight foreground color
-----------------------+-----------------------------
The Tektronix colors are initially set from the VT100 colors,
but after that can be set independently using these control
sequences.
If a "?" is given rather than a name or RGB specification, If a "?" is given rather than a name or RGB specification,
xterm replies with a control sequence of the same form which xterm replies with a control sequence of the same form which
can be used to set the corresponding dynamic color. Because can be used to set the corresponding dynamic color. Because
@ -1834,10 +1963,14 @@ OSC Ps ; Pt ST
Ps = 1 8 -> Change Tektronix cursor color to Pt. Ps = 1 8 -> Change Tektronix cursor color to Pt.
Ps = 1 9 -> Change highlight foreground color to Pt. Ps = 1 9 -> Change highlight foreground color to Pt.
Ps = 2 2 -> Change pointer cursor to Pt. Ps = 2 2 -> Change pointer cursor shape to Pt. The
parameter Pt sets the pointerShape resource. If Pt is empty,
or does not match any of the standard names, n uses the
resource's default "xterm" shape.
Ps = 4 6 -> Change Log File to Pt. This is normally Ps = 4 6 -> Change Log File to Pt. The parameter Pt sets
disabled by a compile-time option. the logFile resource. Logging is normally disabled by a
compile-time option.
Ps = 5 0 -> Set Font to Pt. These controls may be disabled Ps = 5 0 -> Set Font to Pt. These controls may be disabled
using the allowFontOps resource. If Pt begins with a "#", using the allowFontOps resource. If Pt begins with a "#",
@ -1981,8 +2114,8 @@ XTerm detects all of these keys via X key-press and key-release events.
It uses the translations resource to decide what to do with these It uses the translations resource to decide what to do with these
events. events.
o Ordinary keys are handled with the insert-seven-bit or insert-eight- o Ordinary keys are handled with the insert-seven-bit action, or the
bit action. insert-eight-bit action.
o Special keys may be handled with other resources. However, xterm o Special keys may be handled with other resources. However, xterm
also has built-in logic to map commonly-used special keys into also has built-in logic to map commonly-used special keys into
@ -2459,6 +2592,50 @@ For background and discussion, see the FAQ:
Readline Modes
Several modes provide support for mouse button events in readline.
Bracketed paste is one of these readline modes, but is used more widely.
Some assumptions (particular mouse buttons) and limitations (the mouse
is clicked on the current row on the screen) apply:
2 0 0 1 If mouse button 1 is used to end or extend a selection (the
select-end action), and if the cursor position is on the same
row as the mouse-click, send left/right cursor control
sequences to the host to adjust the cursor position to match
the mouse click.
2 0 0 2 When pasting text (the insert-selection action which is
normally bound to mouse button 2), if mouse protocol is not
enabled, and if the cursor position is on the same row as the
mouse-click, send left/right cursor control sequences to the
host to adjust the cursor position to match the mouse click.
2 0 0 3 If mouse button 3 is double-clicked when ending or extending a
selection, (the select-end action), and if the cursor position
is on the same line as the mouse-click:
o Send left/right cursor control sequences to the host to
adjust the cursor position to match the mouse click.
o In addition to the same row, the selection may be part of
a wrapped line as in other xterm selections (see the
Selection Functions section in the manual page).
o After adjusting the cursor position, xterm sends erase-
characters (one for each character in the selection) to
tell the host to delete the selected text.
2 0 0 5 When writing a selection to the host (i.e., pasting text),
escape each character with the literal-next (Ctrl-V)
character.
2 0 0 6 Normally when xterm writes selections to the host, it
translates newlines to carriage returns. This mode disables
the translation, passing newlines literally.
Title Modes Title Modes
The window- and icon-labels can be set or queried using control The window- and icon-labels can be set or queried using control
@ -2858,6 +3035,13 @@ DCS Pm p Pr..Pr ST
Pm = 2 -> resume command, use command display mode. Pm = 2 -> resume command, use command display mode.
Pm = 3 -> start new command, use command display mode. Pm = 3 -> start new command, use command display mode.
A few of the VT330/VT340 private modes conflict with xterm. Codes 4 0
to 4 7 were first used by xterm in X10R4 (December 1986). While X11R1
xterm dropped codes 4 1 and 4 2 , the remaining ones are still used.
The VT330/VT340 introduced in April 1987 uses 4 4 to 4 7 for color
graphics printing controls. When configured for ReGIS, xterm uses the
VT330/VT340 interpretation of these private modes.
Non-VT100 Modes Non-VT100 Modes
@ -3019,10 +3203,11 @@ However long, the technical manuals have problems:
o DEC's manuals did not provide a comprehensive comparison of the o DEC's manuals did not provide a comprehensive comparison of the
features in different model. features in different model.
Peter Sichel's Host Interface Functions Checklist spreadsheet is Host Interface Functions Checklist by Peter Sichel (January 12,
useful for noting which model introduced a given feature (although 1994) is helpful. This spreadsheet is useful for noting which model
there are a few apparent errors such as the DECRQSS feature cited introduced a given feature (although there are a few apparent errors
for VT320 whereas the technical manual omits it). such as the DECRQSS feature cited for VT320 whereas the technical
manual omits it).
o Sometimes the manuals disagree. For example, DEC's standard o Sometimes the manuals disagree. For example, DEC's standard
document (DEC STD 070) for terminals says that DECSCL performs a document (DEC STD 070) for terminals says that DECSCL performs a
@ -3159,7 +3344,7 @@ Standards
The DEC terminal family (VT100 through VT525) is upward-compatible, The DEC terminal family (VT100 through VT525) is upward-compatible,
using standards plus extensions, e.g., "private modes". Not all using standards plus extensions, e.g., "private modes". Not all
commonly-used features are standard. For example, scrolling regions are commonly-used features are standard. For example, scrolling regions are
not found in ECMA-48. On the other hand, ECMA-48 was not intended to not found in ECMA-48. On the other hand, ECMA-48 was not intended to be
all-encompassing. Quoting from the second edition: all-encompassing. Quoting from the second edition:
Full conformance to a standard means that all its requirements are Full conformance to a standard means that all its requirements are
@ -3173,7 +3358,7 @@ all-encompassing. Quoting from the second edition:
This Standard addresses a whole class of devices which can vary This Standard addresses a whole class of devices which can vary
greatly from each other depending on the application for which a greatly from each other depending on the application for which a
device has been specifically designed. Obviously, a product which device has been specifically designed. Obviously, a product which
implements all facilities described in this standard - thus being in implements all facilities described in this standard - thus being in
"full conformance" with it - whilst theoretically possible, would be "full conformance" with it - whilst theoretically possible, would be
technically and economically unthinkable. technically and economically unthinkable.
@ -3215,7 +3400,7 @@ o ANSI X3.64-1979 does not list color as a feature of the SGR sequence
ANSI X3.64-1979, and ECMA-48, Additional Controls for Character- ANSI X3.64-1979, and ECMA-48, Additional Controls for Character-
Imaging I/O Devices, were developed in parallel, with close Imaging I/O Devices, were developed in parallel, with close
liaison. ISO DP 6429, Additional Control Functions for liaison. ISO DP 6429, Additional Control Functions for
Character-Imaging Devices, was developed as a synthesis of X3.04 Character-Imaging Devices, was developed as a synthesis of X3.64
and ECMA-48. During this process, some control functions as and ECMA-48. During this process, some control functions as
well as additional selective parameters were added. Except for well as additional selective parameters were added. Except for
point 1 below, X3.64 is a subset of ISO 6429. Although the two point 1 below, X3.64 is a subset of ISO 6429. Although the two
@ -3352,47 +3537,47 @@ o The SCOSC/SCORC control sequences for saving/restoring the cursor
Most Dec Private mode settings can be saved away internally Most Dec Private mode settings can be saved away internally
using \E[?ns, where n is the same number to set or reset the Dec using \E[?ns, where n is the same number to set or reset the Dec
Private mode. The mode can be restored using \E[?nr. This can Private mode. The mode can be restored using \E[?nr. This can
be used in termcap for vi, for example, to turn off saving of be used in termcap for vi(1), for example, to turn off saving of
lines, but restore whatever the original state was on exit. lines, but restore whatever the original state was on exit.
while the SCOSC/SCORC pair was added in 1995 by XFree86 (and while the SCOSC/SCORC pair was added in 1995 by XFree86 (and
documented long afterwards). documented long afterwards).
The SCO ANSI console terminal descriptions did not use these The SCO ANSI console terminal descriptions did not use these
controls (they used the VT100-compatible SC/RC pair). SCOSC/SCORC controls (they used the VT100-compatible SC/RC pair). SCOSC/SCORC
were an artifact of DOS 2.00 (January 1983), by Microsoft and later were an artifact of DOS 2.00 (January 1983), by Microsoft and later
supported by SCO and other vendors. supported by SCO and other vendors.
The SCOSC/SCORC pair is considered a private mode because the final The SCOSC/SCORC pair is considered a private mode because the final
characters (s and u ) fall in the range from "`" to "~" (octal 0140 characters (s and u ) fall in the range from "`" to "~" (octal 0140
to octal 0176). Other private control sequences can be constructed to octal 0176). Other private control sequences can be constructed
by using octets 074 to 077 (characters "<", "=", ">", or "?") at the by using octets 074 to 077 (characters "<", "=", ">", or "?") at the
beginning of the parameter string. The XTSAVE and XTRESTORE beginning of the parameter string. The XTSAVE and XTRESTORE
controls use "?") in this manner. controls use "?") in this manner.
Because the XTSAVE and XTRESTORE controls are private, other Because the XTSAVE and XTRESTORE controls are private, other
terminals may behave differently. For example, DEC (a contributor terminals may behave differently. For example, DEC (a contributor
to the early xterm as well as a manufacturer of terminals) used an to the early xterm as well as a manufacturer of terminals) used an
incompatible private control in one of its terminals more than five incompatible private control in one of its terminals more than five
years later (for the VT420 PCTerm, announced in February 1992). years later (for the VT420 PCTerm, announced in February 1992).
In that model of the VT420, CSI ? Pm; Pc r selects the PC TERM In that model of the VT420, CSI ? Pm; Pc r selects the PC TERM
emulation mode. When this mode is enabled, the keyboard sends scan emulation mode. When this mode is enabled, the keyboard sends scan
codes rather than characters (analogous to X keyboard events). The codes rather than characters (analogous to X keyboard events). The
first parameter of this private control enables or disables PC TERM first parameter of this private control enables or disables PC TERM
mode, while the second selects a character set. An ambiguity arises mode, while the second selects a character set. An ambiguity arises
if an application omits the second parameter. In that special case, if an application omits the second parameter. In that special case,
it cannot be distinguished from XTRESTORE. DEC did not take this it cannot be distinguished from XTRESTORE. DEC did not take this
into account when designing the feature. into account when designing the feature.
If there were potential users, xterm could accommodate this by a If there were potential users, xterm could accommodate this by a
resource setting. In retrospect (thirty years later), there have resource setting. In retrospect (thirty years later), there have
been no uses of PC TERM, while the XTRESTORE feature is still in been no uses of PC TERM, while the XTRESTORE feature is still in
use. use.
o The aixterm manual page gives the format of the control sequence for o The aixterm manual page gives the format of the control sequence for
foreground and background colors 8-15, but does not specify what foreground and background colors 8-15, but does not specify what
those colors are. That is implied by the description's mention of those colors are. That is implied by the description's mention of
HFT: HFT:
The aixterm command provides a standard terminal type for The aixterm command provides a standard terminal type for
@ -3402,7 +3587,7 @@ o The aixterm manual page gives the format of the control sequence for
the -v flag. the -v flag.
Unlike xterm, there are no resource names for the 16 colors, leaving Unlike xterm, there are no resource names for the 16 colors, leaving
the reader to assume that the mapping is hard-coded. The control the reader to assume that the mapping is hard-coded. The control
sequences for colors 8-15 are not specified by ECMA-48, but rather sequences for colors 8-15 are not specified by ECMA-48, but rather
(as done in other instances by xterm) chosen to not conflict with (as done in other instances by xterm) chosen to not conflict with
current or future standards. current or future standards.

View file

@ -1,7 +1,7 @@
/* $XTermId: cursor.c,v 1.83 2022/09/23 08:13:43 tom Exp $ */ /* $XTermId: cursor.c,v 1.93 2023/09/21 08:17:56 tom Exp $ */
/* /*
* Copyright 2002-2021,2022 by Thomas E. Dickey * Copyright 2002-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -100,46 +100,101 @@ CursorSet(TScreen *screen, int row, int col, unsigned flags)
} }
/* /*
* moves the cursor left n, no wrap around * Unlike VT100, xterm allows reverse wrapping of the cursor. This feature was
* introduced in X10R4 (December 1986), but did not modify the comment which
* said "moves the cursor left n, no wrap around". However, this reverse
* wrapping allowed the cursor to wrap around to the end of the screen.
*
* xterm added VT420-compatible left/right margin support in 2012. If the
* cursor starts off within the margins, the reverse wrapping result will be
* within the margins.
*
* Wrapping to the end of the screen did not appear to be the original intent.
* That was revised in 2023, using private mode 45 for movement within the
* current (wrapped) line, and 1045 for movement to "any" line.
*/ */
void void
CursorBack(XtermWidget xw, int n) CursorBack(XtermWidget xw, int n)
{ {
#define WRAP_MASK (REVERSEWRAP | WRAPAROUND) #define WRAP_MASK (REVERSEWRAP | WRAPAROUND)
#define WRAP_MASK2 (REVERSEWRAP2 | WRAPAROUND)
TScreen *screen = TScreenOf(xw); TScreen *screen = TScreenOf(xw);
int rev; /* *INDENT-EQLS* */
int left = ScrnLeftMargin(xw); int rev = (((xw->flags & WRAP_MASK) == WRAP_MASK) != 0);
int rev2 = (((xw->flags & WRAP_MASK2) == WRAP_MASK2) != 0);
int left = ScrnLeftMargin(xw);
int right = ScrnRightMargin(xw);
int before = screen->cur_col; int before = screen->cur_col;
int top = ScrnTopMargin(xw);
int bottom = ScrnBottomMargin(xw);
int col = screen->cur_col;
int row = screen->cur_row;
if ((rev = ((xw->flags & WRAP_MASK) == WRAP_MASK)) != 0 int count;
&& screen->do_wrap) { CLineData *ld;
n--;
} TRACE(("CursorBack(%d) current %d,%d rev=%d/%d margins H[%d..%d] V[%d..%d]\n",
n,
screen->cur_row, screen->cur_col,
rev, rev2,
left, right,
top, bottom));
/* if the cursor is already before the left-margin, we have to let it go */ /* if the cursor is already before the left-margin, we have to let it go */
if (before < left) if (before < left)
left = 0; left = 0;
if ((screen->cur_col -= n) < left) { ld = NULL;
if (rev) { if ((count = n) > 0) {
int in_row = ScrnRightMargin(xw) - left + 1; if ((rev || rev2) && screen->do_wrap) {
int offset = (in_row * screen->cur_row) + screen->cur_col - left; --count;
if ((before == left) &&
ScrnIsColInMargins(screen, before) &&
ScrnIsRowInMargins(screen, screen->cur_row) &&
screen->cur_row == screen->top_marg) {
offset = (screen->bot_marg + 1) * in_row - 1;
} else if (offset < 0) {
int length = in_row * MaxRows(screen);
offset += ((-offset) / length + 1) * length;
}
set_cur_row(screen, (offset / in_row));
set_cur_col(screen, (offset % in_row) + left);
do_xevents(xw);
} else { } else {
set_cur_col(screen, left); --col;
} }
} }
for (;;) {
if (col < left) {
if (rev2) {
col = right;
if (row == top)
row = bottom + 1;
} else {
if (!rev) {
col = left;
break;
}
if (row <= top) {
col = left;
row = top;
break;
}
}
ld = NULL; /* try a reverse-wrap */
--row;
}
if (ld == NULL) {
ld = getLineData(screen, ROW2INX(screen, row));
if (ld == NULL)
break; /* should not happen */
if (row != screen->cur_row) {
if (!rev2 && !LineTstWrapped(ld)) {
++row; /* reverse-wrap failed */
col = left;
break;
}
col = right;
}
}
if (--count <= 0)
break;
--col;
}
set_cur_row(screen, row);
set_cur_col(screen, col);
do_xevents(xw);
ResetWrap(screen); ResetWrap(screen);
} }
@ -289,7 +344,8 @@ CarriageReturn(XtermWidget xw)
set_cur_col(screen, col); set_cur_col(screen, col);
ResetWrap(screen); ResetWrap(screen);
do_xevents(xw); if (screen->jumpscroll && !screen->fastscroll)
do_xevents(xw);
} }
/* /*
@ -451,7 +507,6 @@ CursorNextLine(XtermWidget xw, int count)
CursorDown(screen, count < 1 ? 1 : count); CursorDown(screen, count < 1 ? 1 : count);
CarriageReturn(xw); CarriageReturn(xw);
do_xevents(xw);
} }
/* /*
@ -464,7 +519,6 @@ CursorPrevLine(XtermWidget xw, int count)
CursorUp(screen, count < 1 ? 1 : count); CursorUp(screen, count < 1 ? 1 : count);
CarriageReturn(xw); CarriageReturn(xw);
do_xevents(xw);
} }
/* /*

View file

@ -1,7 +1,7 @@
/* $XTermId: error.h,v 1.26 2012/10/05 00:17:51 tom Exp $ */ /* $XTermId: error.h,v 1.28 2023/11/24 00:56:16 tom Exp $ */
/* /*
* Copyright 1997-2011,2012 by Thomas E. Dickey * Copyright 1997-2012,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -53,6 +53,8 @@
/* @(#)error.h X10/6.6 11/6/86 */ /* @(#)error.h X10/6.6 11/6/86 */
#define ERROR_MISC 1 /* miscellaneous errors */
/* main.c */ /* main.c */
#define ERROR_FIONBIO 11 /* main: ioctl() failed on FIONBIO */ #define ERROR_FIONBIO 11 /* main: ioctl() failed on FIONBIO */
#define ERROR_F_GETFL 12 /* main: ioctl() failed on F_GETFL */ #define ERROR_F_GETFL 12 /* main: ioctl() failed on F_GETFL */
@ -73,6 +75,7 @@
#define ERROR_INIGROUPS 28 /* spawn: initgroups() failed */ #define ERROR_INIGROUPS 28 /* spawn: initgroups() failed */
#define ERROR_FORK 29 /* spawn: fork() failed */ #define ERROR_FORK 29 /* spawn: fork() failed */
#define ERROR_EXEC 30 /* spawn: exec() failed */ #define ERROR_EXEC 30 /* spawn: exec() failed */
#define ERROR_GET_ATOM 31 /* intern_atom() failed */
#define ERROR_PTYS 32 /* get_pty: not enough ptys */ #define ERROR_PTYS 32 /* get_pty: not enough ptys */
#define ERROR_PTY_EXEC 34 /* waiting for initial map */ #define ERROR_PTY_EXEC 34 /* waiting for initial map */
#define ERROR_SETUID 35 /* spawn: setuid() failed */ #define ERROR_SETUID 35 /* spawn: setuid() failed */

View file

@ -1,7 +1,7 @@
/* $XTermId: fontutils.c,v 1.760 2023/01/08 23:42:23 tom Exp $ */ /* $XTermId: fontutils.c,v 1.783 2024/07/10 15:48:26 tom Exp $ */
/* /*
* Copyright 1998-2022,2023 by Thomas E. Dickey * Copyright 1998-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -44,6 +44,7 @@
#include <main.h> #include <main.h>
#include <data.h> #include <data.h>
#include <error.h>
#include <menu.h> #include <menu.h>
#include <xstrings.h> #include <xstrings.h>
#include <xterm.h> #include <xterm.h>
@ -393,7 +394,7 @@ get_font_name_props(Display *dpy, XFontStruct *fs, char **result)
* first get the full font name * first get the full font name
*/ */
name = 0; name = 0;
fontatom = XInternAtom(dpy, "FONT", False); fontatom = CachedInternAtom(dpy, "FONT");
if (fontatom != 0) { if (fontatom != 0) {
XFontProp *fp; XFontProp *fp;
int i; int i;
@ -1201,6 +1202,81 @@ reportXCharStruct(const char *tag, XCharStruct * cs)
ReportFonts("\t\t\tdescent: %d\n", cs->descent); ReportFonts("\t\t\tdescent: %d\n", cs->descent);
} }
static void
fillXCharStruct(XCharStruct * cs, short value)
{
cs->lbearing = value;
cs->rbearing = value;
cs->width = value;
cs->ascent = value;
cs->descent = value;
}
/* if the per-character data differs from the summary, that is a problem */
static void
compareXCharStruct(const char *tag, XCharStruct * actual, XCharStruct * expect)
{
#define CompareXCharStruct(field) \
if (actual->field != expect->field) \
ReportFonts("\t\t%s %s differs: %d\n", tag, #field, actual->field)
CompareXCharStruct(lbearing);
CompareXCharStruct(rbearing);
CompareXCharStruct(width);
CompareXCharStruct(ascent);
CompareXCharStruct(descent);
}
static void
reportXPerChar(XFontStruct *fs)
{
XCharStruct *cs = fs->per_char;
if (cs != NULL) {
XCharStruct min_bounds;
XCharStruct max_bounds;
int valid = 0;
int total = 0;
unsigned first_char = 0;
unsigned last_char = 0;
unsigned ch;
if (fs->max_byte1 == 0) {
first_char = fs->min_char_or_byte2;
last_char = fs->max_char_or_byte2;
} else {
first_char = (fs->min_byte1 * 256) + fs->min_char_or_byte2;
last_char = (fs->max_byte1 * 256) + fs->max_char_or_byte2;
}
fillXCharStruct(&max_bounds, -32768);
fillXCharStruct(&min_bounds, 32767);
for (ch = first_char; ch < last_char; ++ch) {
XCharStruct *item = cs + ch;
++total;
if (!CI_NONEXISTCHAR(item)) {
++valid;
#define MIN_BOUNDS(field) min_bounds.field = Min(min_bounds.field, item->field)
MIN_BOUNDS(lbearing);
MIN_BOUNDS(rbearing);
MIN_BOUNDS(width);
MIN_BOUNDS(ascent);
MIN_BOUNDS(descent);
#define MAX_BOUNDS(field) max_bounds.field = Max(max_bounds.field, item->field)
MAX_BOUNDS(lbearing);
MAX_BOUNDS(rbearing);
MAX_BOUNDS(width);
MAX_BOUNDS(ascent);
MAX_BOUNDS(descent);
}
}
ReportFonts("\t\tPer-character: %d/%d\n", valid, total);
compareXCharStruct("Max", &max_bounds, &(fs->max_bounds));
compareXCharStruct("Min", &min_bounds, &(fs->min_bounds));
} else {
ReportFonts("\t\tPer-character: none\n");
}
}
static void static void
reportOneVTFont(const char *tag, reportOneVTFont(const char *tag,
XTermFonts * fnt) XTermFonts * fnt)
@ -1222,8 +1298,8 @@ reportOneVTFont(const char *tag,
ReportFonts("\t\tall chars: %s\n", (fs->all_chars_exist ReportFonts("\t\tall chars: %s\n", (fs->all_chars_exist
? "yes" ? "yes"
: "no")); : "no"));
ReportFonts("\t\tdefault char: %d\n", fs->default_char); ReportFonts("\t\tdefault char: %u\n", fs->default_char);
ReportFonts("\t\tdirection: %d\n", fs->direction); ReportFonts("\t\tdirection: %u\n", fs->direction);
ReportFonts("\t\tascent: %d\n", fs->ascent); ReportFonts("\t\tascent: %d\n", fs->ascent);
ReportFonts("\t\tdescent: %d\n", fs->descent); ReportFonts("\t\tdescent: %d\n", fs->descent);
ReportFonts("\t\tfirst char: %u\n", first_char); ReportFonts("\t\tfirst char: %u\n", first_char);
@ -1243,12 +1319,13 @@ reportOneVTFont(const char *tag,
ReportFonts("\t\tmissing-chars: %u\n", missing); ReportFonts("\t\tmissing-chars: %u\n", missing);
ReportFonts("\t\tpresent-chars: %u\n", countGlyphs(fs) - missing); ReportFonts("\t\tpresent-chars: %u\n", countGlyphs(fs) - missing);
} }
ReportFonts("\t\tmin_byte1: %d\n", fs->min_byte1); ReportFonts("\t\tmin_byte1: %u\n", fs->min_byte1);
ReportFonts("\t\tmax_byte1: %d\n", fs->max_byte1); ReportFonts("\t\tmax_byte1: %u\n", fs->max_byte1);
ReportFonts("\t\tproperties: %d\n", fs->n_properties); ReportFonts("\t\tproperties: %d\n", fs->n_properties);
reportXCharStruct("min_bounds", &(fs->min_bounds)); reportXCharStruct("min_bounds", &(fs->min_bounds));
reportXCharStruct("max_bounds", &(fs->max_bounds)); reportXCharStruct("max_bounds", &(fs->max_bounds));
/* TODO: report fs->properties and fs->per_char */ reportXPerChar(fs);
/* TODO: report fs->properties */
} }
} }
@ -1264,11 +1341,12 @@ reportVTFontInfo(XtermWidget xw, int fontnum)
ReportFonts("Loaded VTFonts(default)\n"); ReportFonts("Loaded VTFonts(default)\n");
} }
reportOneVTFont("fNorm", GetNormalFont(screen, fNorm)); #define ReportOneVTFont(name) reportOneVTFont(#name, screen->fnts + name)
reportOneVTFont("fBold", GetNormalFont(screen, fBold)); ReportOneVTFont(fNorm);
ReportOneVTFont(fBold);
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
reportOneVTFont("fWide", GetNormalFont(screen, fWide)); ReportOneVTFont(fWide);
reportOneVTFont("fWBold", GetNormalFont(screen, fWBold)); ReportOneVTFont(fWBold);
#endif #endif
} }
} }
@ -1775,7 +1853,7 @@ xtermLoadFont(XtermWidget xw,
UIntSet(screen->fnt_boxes, 2); UIntSet(screen->fnt_boxes, 2);
for (ch = 1; ch < 32; ch++) { for (ch = 1; ch < 32; ch++) {
unsigned n = dec2ucs(screen, ch); unsigned n = dec2ucs(screen, ch);
if ((n != UCS_REPL) if (!is_UCS_SPECIAL(n)
&& (n != ch) && (n != ch)
&& (screen->fnt_boxes & 2)) { && (screen->fnt_boxes & 2)) {
if (xtermMissingChar(n, &new_fonts[fNorm]) || if (xtermMissingChar(n, &new_fonts[fNorm]) ||
@ -2188,7 +2266,7 @@ xtermLoadVTFonts(XtermWidget xw, String myName, String myClass)
#define ALLOC_SUBLIST(which,field) \ #define ALLOC_SUBLIST(which,field) \
if (subresourceRec.default_font.field != NULL) { \ if (subresourceRec.default_font.field != NULL) { \
char *blob = x_strdup(subresourceRec.default_font.field); \ char *blob = x_strdup(subresourceRec.default_font.field); \
char *base = blob; \ char *base; \
for (base = blob; ; base = NULL) { \ for (base = blob; ; base = NULL) { \
char *item = strtok(base, ","); \ char *item = strtok(base, ","); \
if (item == NULL) \ if (item == NULL) \
@ -2398,8 +2476,12 @@ xtermSetCursorBox(TScreen *screen)
XPoint *vp; XPoint *vp;
int fw = FontWidth(screen) - 1; int fw = FontWidth(screen) - 1;
int fh = FontHeight(screen) - 1; int fh = FontHeight(screen) - 1;
int ww = isCursorBar(screen) ? 1 : fw; int ww = isCursorBar(screen) ? fw / 8 : fw;
int hh = isCursorUnderline(screen) ? 1 : fh; int hh = isCursorUnderline(screen) ? fh / 8 : fh;
if (ww < 2)
ww = 2;
if (hh < 2)
hh = 2;
vp = &VTbox[1]; vp = &VTbox[1];
(vp++)->x = (short) ww; (vp++)->x = (short) ww;
@ -3268,7 +3350,7 @@ checkFontInfo(int value, const char *tag, int failed)
if (value == 0 || failed) { if (value == 0 || failed) {
if (value == 0) { if (value == 0) {
xtermWarning("Selected font has no non-zero %s for ISO-8859-1 encoding\n", tag); xtermWarning("Selected font has no non-zero %s for ISO-8859-1 encoding\n", tag);
exit(1); exit(ERROR_MISC);
} else { } else {
xtermWarning("Selected font has no valid %s for ISO-8859-1 encoding\n", tag); xtermWarning("Selected font has no valid %s for ISO-8859-1 encoding\n", tag);
} }
@ -3512,8 +3594,7 @@ xtermComputeFontInfo(XtermWidget xw,
*/ */
if (screen->fnt_boxes) { if (screen->fnt_boxes) {
screen->fnt_boxes = 0; screen->fnt_boxes = 0;
TRACE(("Xft opened - will %suse internal line-drawing characters\n", TRACE(("Xft opened - will not use internal line-drawing characters\n"));
screen->fnt_boxes ? "not " : ""));
} }
} }
@ -3813,7 +3894,7 @@ xtermMissingChar(unsigned ch, XTermFonts * font)
} }
#endif #endif
#if OPT_BOX_CHARS #if OPT_BOX_CHARS || OPT_WIDE_CHARS
/* /*
* The grid is arbitrary, enough resolution that nothing's lost in * The grid is arbitrary, enough resolution that nothing's lost in
* initialization. * initialization.
@ -3987,6 +4068,39 @@ xtermDrawBoxChar(XTermDraw * params,
SEG( 0, 2*BOX_HIGH/3, CHR_WIDE, 2*BOX_HIGH/3), SEG( 0, 2*BOX_HIGH/3, CHR_WIDE, 2*BOX_HIGH/3),
SEG( 0, MID_HIGH, CHR_WIDE, MID_HIGH), SEG( 0, MID_HIGH, CHR_WIDE, MID_HIGH),
-1 -1
}, sigma_1[] =
{
SEG(BOX_WIDE, MID_HIGH, BOX_WIDE/2, MID_HIGH),
SEG(BOX_WIDE/2, MID_HIGH, BOX_WIDE, BOX_HIGH),
-1
}, sigma_2[] =
{
SEG(BOX_WIDE, MID_HIGH, BOX_WIDE/2, MID_HIGH),
SEG(BOX_WIDE/2, MID_HIGH, BOX_WIDE, 0),
-1
}, sigma_3[] =
{
SEG( 0, 0, BOX_WIDE, BOX_HIGH),
-1
}, sigma_4[] =
{
SEG( 0, BOX_HIGH, BOX_WIDE, 0),
-1
}, sigma_5[] =
{
SEG( 0, MID_HIGH, MID_WIDE, MID_HIGH),
SEG(MID_WIDE, MID_HIGH, MID_WIDE, BOX_HIGH),
-1
}, sigma_6[] =
{
SEG( 0, MID_HIGH, MID_WIDE, MID_HIGH),
SEG(MID_WIDE, MID_HIGH, MID_WIDE, 0),
-1
}, sigma_7[] =
{
SEG( 0, 0, MID_WIDE, MID_HIGH),
SEG( 0, BOX_HIGH, MID_WIDE, MID_HIGH),
-1
}; };
static const struct { static const struct {
@ -4026,6 +4140,14 @@ xtermDrawBoxChar(XTermDraw * params,
{ 0, not_equal_to }, /* 1D */ { 0, not_equal_to }, /* 1D */
{ 0, 0 }, /* 1E LB */ { 0, 0 }, /* 1E LB */
{ 0, 0 }, /* 1F bullet */ { 0, 0 }, /* 1F bullet */
{ 0, 0 }, /* 20 space */
{ 3, sigma_1 }, /* PUA(0) */
{ 3, sigma_2 }, /* PUA(1) */
{ 3, sigma_3 }, /* PUA(2) */
{ 3, sigma_4 }, /* PUA(3) */
{ 3, sigma_5 }, /* PUA(4) */
{ 3, sigma_6 }, /* PUA(5) */
{ 3, sigma_7 }, /* PUA(6) */
}; };
/* *INDENT-ON* */ /* *INDENT-ON* */
@ -4037,6 +4159,7 @@ xtermDrawBoxChar(XTermDraw * params,
* screen->fnt_wide); * screen->fnt_wide);
unsigned font_height = (((params->draw_flags & DOUBLEHFONT) ? 2U : 1U) unsigned font_height = (((params->draw_flags & DOUBLEHFONT) ? 2U : 1U)
* screen->fnt_high); * screen->fnt_high);
unsigned thick;
if (cells > 1) if (cells > 1)
font_width *= (unsigned) cells; font_width *= (unsigned) cells;
@ -4051,11 +4174,11 @@ xtermDrawBoxChar(XTermDraw * params,
&& !UsingRenderFont(params->xw) && !UsingRenderFont(params->xw)
#endif #endif
&& (ch > 127) && (ch > 127)
&& (ch != UCS_REPL)) { && !is_UCS_SPECIAL(ch)) {
int which = (params->attr_flags & BOLD) ? fBold : fNorm; int which = (params->attr_flags & BOLD) ? fBold : fNorm;
unsigned n; unsigned n;
for (n = 1; n < 32; n++) { for (n = 1; n < 32; n++) {
if (xtermMissingChar(n, getNormalFont(screen, which))) if (xtermMissingChar(n, XTermFontsRef(screen->fnts, which)))
continue; continue;
if (dec2ucs(screen, n) != ch) if (dec2ucs(screen, n) != ch)
continue; continue;
@ -4080,7 +4203,7 @@ xtermDrawBoxChar(XTermDraw * params,
#endif #endif
/* /*
* Line-drawing characters show use the full (scaled) cellsize, while * Line-drawing characters display using the full (scaled) cellsize, while
* other characters should be shifted to center them vertically. * other characters should be shifted to center them vertically.
*/ */
if (!xftords) { if (!xftords) {
@ -4091,6 +4214,11 @@ xtermDrawBoxChar(XTermDraw * params,
} }
} }
if (xtermIsDecTechnical(ch)) {
ch -= XTERM_PUA;
ch += 33;
}
TRACE(("DRAW_BOX(%02X) cell %dx%d at %d,%d%s\n", TRACE(("DRAW_BOX(%02X) cell %dx%d at %d,%d%s\n",
ch, font_height, font_width, y, x, ch, font_height, font_width, y, x,
((ch >= XtNumber(lines)) ((ch >= XtNumber(lines))
@ -4119,19 +4247,18 @@ xtermDrawBoxChar(XTermDraw * params,
setCgsBack(params->xw, cgsWin, cgsId, getCgsBack(params->xw, cgsWin, gc)); setCgsBack(params->xw, cgsWin, cgsId, getCgsBack(params->xw, cgsWin, gc));
gc2 = getCgsGC(params->xw, cgsWin, cgsId); gc2 = getCgsGC(params->xw, cgsWin, cgsId);
XSetLineAttributes(screen->display, gc2, thick = ((params->attr_flags & BOLD)
(params->attr_flags & BOLD) ? (Max((unsigned) screen->fnt_high / 12, 1))
? ((font_height > 12) : (Max((unsigned) screen->fnt_high / 16, 1)));
? font_height / 12 setXtermLineAttributes(screen->display, gc2,
: 1) thick,
: ((font_height > 16) ((ch < XtNumber(lines))
? font_height / 16 ? LineSolid
: 1), : LineOnOffDash));
LineSolid,
CapProjecting,
JoinMiter);
if (ch == 1) { /* diamond */ if (ch == 32) { /* space! */
; /* boxing a missing space is pointless */
} else if (ch == 1) { /* diamond */
XPoint points[5]; XPoint points[5];
int npoints = 5, n; int npoints = 5, n;
@ -4209,12 +4336,37 @@ xtermDrawBoxChar(XTermDraw * params,
} }
} else if (screen->force_all_chars) { } else if (screen->force_all_chars) {
/* bounding rectangle, for debugging */ /* bounding rectangle, for debugging */
XDrawRectangle(screen->display, VDrawable(screen), gc2, x, y, if ((params->draw_flags & DOUBLEHFONT)) {
font_width - 1, XRectangle clip;
font_height - 1);
clip.x = 0;
clip.y = 0;
clip.width = (unsigned short) ((font_width - 1) + (unsigned) thick);
clip.height = (unsigned short) ((unsigned) FontHeight(screen) + thick);
if ((params->draw_flags & DOUBLEFIRST)) {
y -= (2 * FontDescent(screen));
clip.height =
(unsigned short) (clip.height
- ((unsigned short) FontDescent(screen)));
} else {
y -= FontHeight(screen);
y += FontDescent(screen);
clip.y = (short) FontHeight(screen);
}
XSetClipRectangles(screen->display, gc2, x, y, &clip, 1, Unsorted);
}
XDrawRectangle(screen->display, VDrawable(screen), gc2,
x + (int) thick, y + (int) thick,
font_width - (2 * thick),
font_height - (2 * thick));
if ((params->draw_flags & DOUBLEHFONT)) {
XSetClipMask(screen->display, gc2, None);
}
} }
resetXtermLineAttributes(screen->display, gc2);
} }
#endif /* OPT_BOX_CHARS */ #endif /* OPT_BOX_CHARS || OPT_WIDE_CHARS */
#if OPT_RENDERFONT #if OPT_RENDERFONT
static int static int
@ -4401,7 +4553,7 @@ findXftGlyph(XtermWidget xw, XTermXftFonts *fontData, unsigned wc)
} }
/* initialize on the first call */ /* initialize on the first call */
if (fontData->fontset == NULL) { if (fontData->fontset == NULL && fontData->pattern != NULL) {
FcFontSet *sortedFonts; FcFontSet *sortedFonts;
FcPattern *myPattern; FcPattern *myPattern;
int j; int j;
@ -4462,7 +4614,8 @@ findXftGlyph(XtermWidget xw, XTermXftFonts *fontData, unsigned wc)
FcPatternDestroy(myPattern); FcPatternDestroy(myPattern);
fontData->fs_size = Min(MaxXftCache, fontData->fontset->nfont); fontData->fs_size = Min(MaxXftCache, fontData->fontset->nfont);
} { }
if (fontData->fontset != NULL && fontData->fs_size > 0) {
XftFont *check; XftFont *check;
int empty = fontData->fs_size; int empty = fontData->fs_size;
@ -4542,9 +4695,8 @@ findXftGlyph(XtermWidget xw, XTermXftFonts *fontData, unsigned wc)
TRACE_FALLBACK(xw, "new", wc, result, actual); TRACE_FALLBACK(xw, "new", wc, result, actual);
break; break;
} else { } else {
Bool ok;
if (defer >= 0 if (defer >= 0
&& (ok = !slowXftMissing(xw, check, wc)) && !slowXftMissing(xw, check, wc)
&& checkXftGlyph(xw, check, wc)) { && checkXftGlyph(xw, check, wc)) {
XTermFontMap *font_map = &(fontData->font_map); XTermFontMap *font_map = &(fontData->font_map);
TRACE(("checkrecover2 %d\n", n)); TRACE(("checkrecover2 %d\n", n));
@ -4660,7 +4812,7 @@ ucs2dec(TScreen *screen, unsigned ch)
(void) screen; (void) screen;
if ((ch > 127) if ((ch > 127)
&& (ch != UCS_REPL)) { && !is_UCS_SPECIAL(ch)) {
#if OPT_VT52_MODE #if OPT_VT52_MODE
if (screen != 0 && !(screen->vtXX_level)) { if (screen != 0 && !(screen->vtXX_level)) {
/* /*
@ -5776,6 +5928,7 @@ getDoubleXftFont(XTermDraw * params, XTermXftFonts *data, unsigned chrset, unsig
(void *) 0); (void *) 0);
} }
xtermOpenXft(xw, data, 0, face_name, sub_pattern, category); xtermOpenXft(xw, data, 0, face_name, sub_pattern, category);
data->pattern = sub_pattern;
} }
} }
#endif #endif

View file

@ -1,7 +1,7 @@
/* $XTermId: fontutils.h,v 1.142 2022/10/23 14:47:45 tom Exp $ */ /* $XTermId: fontutils.h,v 1.147 2024/07/11 08:16:39 tom Exp $ */
/* /*
* Copyright 1998-2021,2022 by Thomas E. Dickey * Copyright 1998-2022,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -123,13 +123,21 @@ extern char *xtermSpecialFont (XTermDraw * /* params */);
? ((font)->known_missing[(Char)(ch)] > 1) \ ? ((font)->known_missing[(Char)(ch)] > 1) \
: ((FontIsIncomplete(font) && xtermMissingChar(ch, font)) \ : ((FontIsIncomplete(font) && xtermMissingChar(ch, font)) \
|| ForceBoxChars(screen, ch))) || ForceBoxChars(screen, ch)))
extern void xtermDrawBoxChar (XTermDraw * /* params */, unsigned /* ch */, GC /* gc */, int /* x */, int /* y */, int /* cols */, Bool /* xftords */);
#else #else
#define IsXtermMissingChar(screen, ch, font) False #define IsXtermMissingChar(screen, ch, font) False
#endif #endif
extern void xtermDrawBoxChar (XTermDraw * /* params */, unsigned /* ch */, GC /* gc */, int /* x */, int /* y */, int /* cols */, Bool /* xftords */);
#if OPT_BOX_CHARS || OPT_REPORT_FONTS #if OPT_BOX_CHARS || OPT_REPORT_FONTS
#define XTermFontsRef(fontList, which) \
(((which) != fNorm && \
((fontList)[(which)].fs == NULL || \
(fontList)[(which)].fs->per_char == NULL) && \
((fontList)[fNorm].fs != NULL && \
(fontList)[fNorm].fs->per_char != NULL)) \
? &((fontList)[fNorm]) \
: &((fontList)[(which)]))
extern Bool xtermMissingChar (unsigned /* ch */, XTermFonts */* font */); extern Bool xtermMissingChar (unsigned /* ch */, XTermFonts */* font */);
#endif #endif
@ -142,7 +150,10 @@ extern Bool xtermLoadWideFonts (XtermWidget /* w */, Bool /* nullOk */);
extern void xtermSaveVTFonts (XtermWidget /* xw */); extern void xtermSaveVTFonts (XtermWidget /* xw */);
#endif #endif
/* checks for internal charset codes */
#define xtermIsDecTechnical(ch) ((ch) >= XTERM_PUA && (ch) <= XTERM_PUA + 6)
#define xtermIsDecGraphic(ch) ((ch) > 0 && (ch) < 32) #define xtermIsDecGraphic(ch) ((ch) > 0 && (ch) < 32)
#define xtermIsInternalCs(ch) (xtermIsDecGraphic(ch) || xtermIsDecTechnical(ch))
#if OPT_RENDERFONT #if OPT_RENDERFONT
extern Boolean maybeXftCache(XtermWidget /* xw */, XftFont * /* font */); extern Boolean maybeXftCache(XtermWidget /* xw */, XftFont * /* font */);

View file

@ -1,9 +1,9 @@
#! /usr/bin/perl -w #! /usr/bin/env perl
# $XTermId: gen-charsets.pl,v 1.2 2018/08/22 22:59:15 tom Exp $ # $XTermId: gen-charsets.pl,v 1.37 2024/02/09 01:11:52 tom Exp $
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# this file is part of xterm # this file is part of xterm
# #
# Copyright 2018 by Thomas E. Dickey # Copyright 2018-2023,2024 by Thomas E. Dickey
# #
# All Rights Reserved # All Rights Reserved
# #
@ -31,32 +31,88 @@
# sale, use or other dealings in this Software without prior written # sale, use or other dealings in this Software without prior written
# authorization. # authorization.
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# # Format/maintain xterm's charsets.h header.
# Translate a Unicode mapping, e.g., for one of the ISO-8859-x codepages,
# into the form used in charsets.c for converting characters.
use strict; use strict;
use warnings;
use Getopt::Std;
$| = 1; $| = 1;
sub do_file($) { our ( $opt_d, $opt_i, $opt_v, $opt_x );
my $file = shift; our $undef = hex(0x2426);
my $undef = hex(0x2426); our $head_file = "charsets.h";
our $data_file = "charsets.dat";
our @import;
our %wide_chars = qw(
map_DEC_Cyrillic 1
map_DEC_Greek_Supp 1
map_DEC_Hebrew_Supp 1
map_DEC_Technical 1
map_DEC_Turkish_Supp 1
map_ISO_Greek_Supp 1
map_ISO_Hebrew 1
map_ISO_Latin_2 1
map_ISO_Latin_5 1
map_ISO_Latin_Cyrillic 1
map_NRCS_Greek 1
map_NRCS_Hebrew 1
map_NRCS_Turkish 1
);
our $note_1 = "\
#ifndef included_charsets_h
#define included_charsets_h 1";
our $note_2 = "\
#ifndef PUA
#define PUA(n) (0xEEEE + (n))
#endif
#define UNDEF 0x2426\t\t/* rendered as a backwards \"?\" */";
our $note_3 = "\
#if OPT_WIDE_CHARS
#define begin_CODEPAGE(size) \\
\tif (!(xw->flags & NATIONAL)) { \\
\t screen->utf8_nrc_mode++; \\
\t}
#define end_CODEPAGE() \\
\tif (!(xw->flags & NATIONAL)) { \\
\t screen->utf8_nrc_mode--; \\
\t}
#else
#define begin_CODEPAGE(size)\t/* nothing */
#define end_CODEPAGE()\t\t/* nothing */
#endif";
sub read_file($) {
my $file = shift;
open( FP, $file ) || do { open( FP, $file ) || do {
print STDERR "Can't open $file: $!\n"; print STDERR "Can't open $file: $!\n";
return; return;
}; };
my @data = <FP>; my @data = <FP>;
close(FP); close(FP);
chomp @data;
return @data;
}
# Translate a Unicode mapping, e.g., for one of the ISO-8859-x codepages,
# into the form used in charsets.c for converting characters.
sub do_import($) {
my $file = shift;
my @data = &read_file($file);
my $name = $file; my $name = $file;
$name =~ s,^.*/,,; $name =~ s,^.*/,,;
$name =~ s/\..*$//; $name =~ s/\..*$//;
$name =~ s/^(8859)/ISO-$1/; $name =~ s/^(8859)/ISO-$1/;
$name =~ s/-/_/g; $name =~ s/-/_/g;
printf "#define map_%s(code) \\\n", $name;
printf "\tswitch (code) { \\\n";
my @target; my @target;
my @noteof; my @noteof;
$import[ $#import + 1 ] = sprintf "map_%s", $name;
for my $n ( 0 .. $#data ) { for my $n ( 0 .. $#data ) {
chomp $data[$n]; chomp $data[$n];
$data[$n] =~ s/^\s*//; $data[$n] =~ s/^\s*//;
@ -88,18 +144,278 @@ sub do_file($) {
my $hi = $target[127] ? 127 : 126; my $hi = $target[127] ? 127 : 126;
for my $n ( $lo .. $hi ) { for my $n ( $lo .. $hi ) {
if ( defined $target[$n] ) { if ( defined $target[$n] ) {
printf "\t UNI(0x%02x, 0x%04x);\t/* %s */ \\\n", $n, $import[ $#import + 1 ] = sprintf "\t0x%02x\t0x%04x\t\t# %s", $n,
$target[$n], $noteof[$n]; $target[$n], $noteof[$n];
} }
else { else {
printf "\t XXX(0x%02x, UNDEF);\t/* undefined */ \\\n", $n; $import[ $#import + 1 ] = sprintf "\t0x%02x\tUNDEF\t\t# undefined",
$n;
}
}
if ($opt_v) {
for my $n ( 0 .. $#import ) {
printf "%s\n", $import[$n];
} }
} }
printf "\t}\n";
} }
while ( $#ARGV >= 0 ) { sub add_text($$) {
&do_file( shift @ARGV ); my @head = @{ $_[0] };
my @note = split /\n/, $_[1];
for my $n ( 0 .. $#note ) {
$head[ $#head + 1 ] = $note[$n];
}
return @head;
} }
sub end_note($$) {
my @head = @{ $_[0] };
my $note = $_[1];
$head[ $#head + 1 ] = " */";
my $notes;
if ( $note == 1 ) {
$notes = $note_1;
}
elsif ( $note == 2 ) {
$notes = $note_2;
}
elsif ( $note == 3 ) {
$notes = $note_3;
}
else {
$notes = "";
}
return &add_text( \@head, $notes );
}
sub hex_of($) {
my $text = shift;
if ($text) {
$text =~ s/^(0x|u\+)//i;
$text = "0x" . $text if ( $text =~ /^[[:xdigit:]]+$/ );
}
return $text;
}
sub add($$) {
my @data = @{ $_[0] };
my $text = $_[1];
$data[ $#data + 1 ] = $text;
return @data;
}
sub add_unmap($$) {
my @head = @{ $_[0] };
my %unmap = %{ $_[1] };
my %noted = %{ $_[2] };
my $title = $_[3];
my $macro = "un$title";
$macro .= "(code,dft)" unless ( $macro =~ /\(code/ );
$macro =~ s/code\)/code,dft\)/;
@head = &add( \@head, "" );
if (%unmap) {
my @codes = sort keys %unmap;
if ( $#codes > 0 ) {
@head = &add( \@head, "#define $macro \\" );
@head = &add( \@head, "\tswitch (code) { \\" );
for my $code ( sort keys %unmap ) {
my $note = $noted{$code};
my $pads = " ";
if ( $title =~ /_NRCS_/ ) {
$pads = sprintf( "%*s", 17 - length($code), " " );
$note =~ s/\t/ /;
}
@head = &add(
\@head,
sprintf(
"\t MAP(%s,%s%s)%s \\",
$code, $pads, $unmap{$code}, $note
)
);
}
@head = &add( \@head, "\t default: dft; break; \\" );
@head = &add( \@head, "\t}" );
}
else {
@head = &add( \@head, "#define $macro /* nothing? */" );
}
}
else {
@head = &add( \@head, "#define $macro /* nothing */" );
}
return @head;
}
# Read the current charsets data file, and format a new charsets.h file.
sub do_update($) {
my $file = shift;
my @data = &read_file($file);
return unless ( $#data >= 0 );
my @head;
my %noted;
my %unmap;
my $title = "";
my $state = 0;
my $ended = "";
my $extra = "";
my $notes = 0;
my $codep = 0;
for my $n ( 0 .. $#data ) {
my $data = $data[$n];
if ( $data =~ /^\s*#/ ) {
@head = &add( \@head, "/*" ) unless ( $state == 1 );
$data =~ s/#/ */;
@head = &add( \@head, $data );
$state = 1;
}
elsif ( $data =~ /^\s*$/ ) {
@head = &end_note( \@head, $notes++ ) if ( $state == 1 );
if ( $state >= 2 ) {
@head = &add( \@head, $ended );
@head = &add_unmap( \@head, \%unmap, \%noted, $title );
@head = &add( \@head, $extra ) if ( $extra ne "" );
}
@head = &add( \@head, "" );
$title = "";
%unmap = ();
$state = 0;
$ended = "";
$extra = "";
}
elsif ( $data =~ /^map_/ ) {
$title = $data;
@head = &end_note( \@head, $notes++ ) if ( $state == 1 );
$state = 2;
$codep = 0;
$codep = 94 if ( $data =~ /_DEC_/ );
$codep = 96 if ( $data =~ /_ISO_/ );
$data .= "(code)" unless ( $data =~ /\(code/ );
@head = &add( \@head, sprintf( "#define %s \\", $data ) );
@head = &add( \@head, sprintf( "\tbegin_CODEPAGE(%d) \\", $codep ) )
if ($codep);
@head = &add( \@head, "\tswitch (code) { \\" );
$ended = $codep ? "\t} \\\n\tend_CODEPAGE()" : "\t}";
# special case for map_DEC_Supp_Graphic
if ( $data =~ /\(code,dft\)/ ) {
$ended = "\t default: dft; break; \\\n" . $ended;
$extra = "\n#if OPT_WIDE_CHARS";
}
}
elsif (
$data =~ /^\s+(0x)?[[:xdigit:]]{2}
\s+(BLANK
|PUA\(\d\)
|UNDEF
|XK_\w+
|(0x|U\+)?[[:xdigit:]]{1,4})\s*/x
)
{
@head = &add( \@head, " */" ) if ( $state == 1 );
$state = 3;
my $note = "";
if ( $data =~ /#/ ) {
$note = $data;
$note =~ s/[^#]*#\s*//;
$note = "\t/* $note */" if ( $note ne "" );
$data =~ s/\s*#.*//;
}
$data =~ s/\s+/ /g;
$data =~ s/^ //;
$data =~ s/ $//;
my @fields = split /\s/, $data;
my $source = &hex_of( $fields[0] );
my $target = &hex_of( $fields[1] );
my $intern = &hex_of( $fields[2] );
my $macros = "UNI";
$macros = "MAP" if ( $target =~ /^XK_/ );
$macros = "XXX" if ( $target eq "UNDEF" );
$macros = "XXX" if ( $target =~ /PUA\(\d\)/ );
if ( $target ne $source ) {
$intern = $source unless ($intern);
}
my $item = sprintf( " %s(%s, %s)", $macros, $source, $target );
# fix formatting for the XK_-based VT220 definitions
if ( $codep == 0
and $title !~ /(Greek|Hebrew|Turkish)/
and index( $note, "\t/*" ) == 0 )
{
my $pads = 24 - length($item);
$item .= "\t" if ( $pads > 0 );
}
@head = &add( \@head, sprintf( "\t%s%s \\", $item, $note ) );
if ( defined $intern ) {
if ( $source ne $intern ) {
$unmap{$source} = $intern;
$noted{$source} = $note;
}
}
}
else {
printf STDERR "? unexpected data:\n\t%s\n", $data;
}
}
if ( $state >= 2 ) {
@head = &add( \@head, $ended );
@head = &add_unmap( \@head, \%unmap, \%noted, $title );
@head = &add( \@head, $extra ) if ( $extra ne "" );
}
@head = &add( \@head, "#else" );
foreach my $key ( sort keys %wide_chars ) {
@head =
&add( \@head, sprintf( "#define %s(code)\t/* nothing */", $key ) );
@head = &add( \@head, sprintf( "#define un%s(code,dft) dft", $key ) );
}
@head = &add( \@head, "#endif /* OPT_WIDE_CHARS */" );
@head = &add( \@head, "" );
@head = &add( \@head, "#endif /* included_charsets_h */" );
my $origin = $file;
$origin =~ s/\.dat\b/.h/;
my $update = $origin . ".new";
unlink $update;
open( my $fh, ">", $update )
or die "Can't open > $update.txt: $!";
for my $n ( 0 .. $#head ) {
printf $fh "%s\n", $head[$n];
}
close $fh;
system("diff -u $origin $update") if $opt_v;
rename $update, $origin if $opt_x;
unlink $update;
}
sub main::HELP_MESSAGE() {
printf STDERR <<EOF
Usage: $0 [options]
Options:
-d debug
-i import charset data from Unicode file
-v verbose
-x update charsets.h from $data_file
EOF
;
exit 1;
}
$Getopt::Std::STANDARD_HELP_VERSION = 1;
&getopts('i:vx') || &main::HELP_MESSAGE;
$#ARGV >= 0 && &main::HELP_MESSAGE;
&do_import($opt_i) if ($opt_i);
&do_update($data_file);
1; 1;

View file

@ -1,8 +1,8 @@
/* $XTermId: graphics.c,v 1.118 2022/05/16 23:35:50 tom Exp $ */ /* $XTermId: graphics.c,v 1.135 2024/05/11 09:49:08 tom Exp $ */
/* /*
* Copyright 2013-2021,2022 by Ross Combs * Copyright 2013-2023,2024 by Thomas E. Dickey
* Copyright 2013-2021,2022 by Thomas E. Dickey * Copyright 2013-2022,2023 by Ross Combs
* *
* All Rights Reserved * All Rights Reserved
* *
@ -43,6 +43,12 @@
#include <assert.h> #include <assert.h>
#include <graphics.h> #include <graphics.h>
#define OPT_INHERIT_COLORS 0
#if OPT_REGIS_GRAPHICS
#include <graphics_regis.h>
#endif
#undef DUMP_BITMAP #undef DUMP_BITMAP
#undef DUMP_COLORS #undef DUMP_COLORS
#undef DEBUG_PALETTE #undef DEBUG_PALETTE
@ -278,7 +284,7 @@ draw_solid_pixel(Graphic *graphic, int x, int y, unsigned color)
y >= 0 && y < graphic->actual_height) { y >= 0 && y < graphic->actual_height) {
_draw_pixel(graphic, x, y, color); _draw_pixel(graphic, x, y, color);
if (color < MAX_COLOR_REGISTERS) if (color < MAX_COLOR_REGISTERS)
graphic->color_registers_used[color] = 1; graphic->color_registers_used[color] = True;
} }
} }
@ -311,7 +317,7 @@ draw_solid_rectangle(Graphic *graphic, int x1, int y1, int x2, int y2, unsigned
y2 = graphic->actual_height - 1; y2 = graphic->actual_height - 1;
if (color < MAX_COLOR_REGISTERS) if (color < MAX_COLOR_REGISTERS)
graphic->color_registers_used[color] = 1; graphic->color_registers_used[color] = True;
for (y = y1; y <= y2; y++) for (y = y1; y <= y2; y++)
for (x = x1; x <= x2; x++) for (x = x1; x <= x2; x++)
_draw_pixel(graphic, x, y, color); _draw_pixel(graphic, x, y, color);
@ -377,10 +383,13 @@ copy_overlapping_area(Graphic *graphic, int src_ul_x, int src_ul_y,
#define set_color_register(color_registers, color, pr, pg, pb) \ #define set_color_register(color_registers, color, pr, pg, pb) \
do { \ do { \
assert(color <= MAX_COLOR_REGISTERS); \
{ \
ColorRegister *reg = &color_registers[color]; \ ColorRegister *reg = &color_registers[color]; \
reg->r = (short) pr; \ reg->r = (short) pr; \
reg->g = (short) pg; \ reg->g = (short) pg; \
reg->b = (short) pb; \ reg->b = (short) pb; \
} \
} while (0) } while (0)
/* Graphics which don't use private colors will act as if they are using a /* Graphics which don't use private colors will act as if they are using a
@ -412,6 +421,26 @@ set_shared_color_register(unsigned color, int r, int g, int b)
} }
} }
void
fetch_color_register(Graphic *graphic,
unsigned color,
ColorRegister *reg)
{
assert(color < MAX_COLOR_REGISTERS);
reg->r = -1;
reg->g = -1;
reg->b = -1;
if (graphic->color_registers_used[color]) {
if (graphic->private_colors) {
*reg = graphic->private_color_registers[color];
} else {
*reg = getSharedRegisters()[color];
}
}
}
void void
update_color_register(Graphic *graphic, update_color_register(Graphic *graphic,
unsigned color, unsigned color,
@ -427,7 +456,7 @@ update_color_register(Graphic *graphic,
if (graphic->color_registers_used[color]) { if (graphic->color_registers_used[color]) {
graphic->dirty = True; graphic->dirty = True;
} }
graphic->color_registers_used[color] = 1; graphic->color_registers_used[color] = True;
} else { } else {
set_shared_color_register(color, r, g, b); set_shared_color_register(color, r, g, b);
} }
@ -470,17 +499,29 @@ find_color_register(ColorRegister const *color_registers, int r, int g, int b)
return (RegisterNum) closest_index; return (RegisterNum) closest_index;
} }
#if OPT_INHERIT_COLORS
static void static void
init_color_registers(ColorRegister *color_registers, int graphics_termid) copy_color_registers(Graphic *target, Graphic *source)
{ {
TRACE(("setting initial colors for terminal %d\n", graphics_termid)); memcpy(target->color_registers_used,
{ source->color_registers_used,
unsigned i; sizeof(Boolean) * MAX_COLOR_REGISTERS);
for (i = 0U; i < MAX_COLOR_REGISTERS; i++) { memcpy(target->private_color_registers,
set_color_register(color_registers, (RegisterNum) i, 0, 0, 0); source->color_registers,
} sizeof(ColorRegister) * MAX_COLOR_REGISTERS);
} }
#endif
static void
init_color_registers(TScreen const *screen, ColorRegister *color_registers)
{
const int graphics_termid = GraphicsTermId(screen);
TRACE(("setting initial colors for terminal %d\n", graphics_termid));
memset(color_registers,
0,
sizeof(ColorRegister) * MAX_COLOR_REGISTERS);
/* /*
* default color registers: * default color registers:
@ -631,14 +672,14 @@ get_color_register_count(TScreen const *screen)
} }
static void static void
init_graphic(Graphic *graphic, init_graphic(TScreen *screen,
Graphic *graphic,
unsigned type, unsigned type,
int graphics_termid,
int charrow, int charrow,
int charcol, int charcol,
unsigned num_color_registers, unsigned num_color_registers)
int private_colors)
{ {
int private_colors = screen->privatecolorregisters;
const unsigned max_pixels = (unsigned) (graphic->max_width * const unsigned max_pixels = (unsigned) (graphic->max_width *
graphic->max_height); graphic->max_height);
@ -647,7 +688,7 @@ init_graphic(Graphic *graphic,
graphic->hidden = False; graphic->hidden = False;
graphic->dirty = True; graphic->dirty = True;
memset(graphic->pixels, COLOR_HOLE & 0xff, max_pixels * sizeof(RegisterNum)); memset(graphic->pixels, COLOR_HOLE & 0xff, max_pixels * sizeof(RegisterNum));
memset(graphic->color_registers_used, 0, sizeof(graphic->color_registers_used)); memset(graphic->color_registers_used, False, sizeof(graphic->color_registers_used));
/* /*
* text and graphics interactions: * text and graphics interactions:
@ -680,8 +721,33 @@ init_graphic(Graphic *graphic,
graphic->private_colors = private_colors; graphic->private_colors = private_colors;
if (graphic->private_colors) { if (graphic->private_colors) {
#if OPT_INHERIT_COLORS
unsigned ii;
int max_charrow = -1;
Graphic *newest = NULL;
#endif
TRACE(("using private color registers\n")); TRACE(("using private color registers\n"));
init_color_registers(graphic->private_color_registers, graphics_termid);
#if OPT_INHERIT_COLORS
FOR_EACH_SLOT(ii) {
Graphic *check;
if (!(check = getActiveSlot(ii)))
continue;
if (!newest || check->charrow >= max_charrow) {
max_charrow = check->charrow;
newest = check;
}
}
if (newest != NULL && newest != graphic) {
copy_color_registers(graphic, newest);
} else {
init_color_registers(screen, graphic->private_color_registers);
}
#else
init_color_registers(screen, graphic->private_color_registers);
#endif
graphic->color_registers = graphic->private_color_registers; graphic->color_registers = graphic->private_color_registers;
} else { } else {
TRACE(("using shared color registers\n")); TRACE(("using shared color registers\n"));
@ -697,15 +763,17 @@ init_graphic(Graphic *graphic,
Graphic * Graphic *
get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type) get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type)
{ {
TScreen const *screen = TScreenOf(xw); TScreen *screen = TScreenOf(xw);
const int bufferid = screen->whichBuf; const int bufferid = screen->whichBuf;
const int graphics_termid = GraphicsTermId(screen);
Graphic *graphic = NULL; Graphic *graphic = NULL;
unsigned ii; unsigned ii;
TRACE(("get_new_graphic %d,%d type %d\n", charrow, charcol, type));
FOR_EACH_SLOT(ii) { FOR_EACH_SLOT(ii) {
if ((graphic = getInactiveSlot(screen, ii))) { if ((graphic = getInactiveSlot(screen, ii))) {
TRACE(("using fresh graphic index=%u id=%u\n", ii, next_graphic_id)); TRACE(("using fresh graphic index %u as id %u\n",
ii, next_graphic_id));
break; break;
} }
} }
@ -714,16 +782,19 @@ get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type)
if (!graphic) { if (!graphic) {
int min_charrow = 0; int min_charrow = 0;
Graphic *min_graphic = NULL; Graphic *min_graphic = NULL;
if_TRACE(unsigned best_ii = (1 + MAX_GRAPHICS));
FOR_EACH_SLOT(ii) { FOR_EACH_SLOT(ii) {
if (!(graphic = getActiveSlot(ii))) if (!(graphic = getActiveSlot(ii)))
continue; continue;
if (!min_graphic || graphic->charrow < min_charrow) { if (!min_graphic || graphic->charrow < min_charrow) {
if_TRACE(best_ii = ii);
min_charrow = graphic->charrow; min_charrow = graphic->charrow;
min_graphic = graphic; min_graphic = graphic;
} }
} }
TRACE(("recycling old graphic index=%u id=%u\n", ii, next_graphic_id)); TRACE(("recycling old graphic index %u as id %u\n",
best_ii, next_graphic_id));
graphic = min_graphic; graphic = min_graphic;
} }
@ -733,13 +804,12 @@ get_new_graphic(XtermWidget xw, int charrow, int charcol, unsigned type)
graphic->xw = xw; graphic->xw = xw;
graphic->bufferid = bufferid; graphic->bufferid = bufferid;
graphic->id = next_graphic_id++; graphic->id = next_graphic_id++;
init_graphic(graphic, init_graphic(screen,
graphic,
type, type,
graphics_termid,
charrow, charrow,
charcol, charcol,
num_color_registers, num_color_registers);
screen->privatecolorregisters);
} }
return graphic; return graphic;
} }
@ -944,7 +1014,11 @@ refresh_graphic(TScreen const *screen,
holes, total, out_of_range)); holes, total, out_of_range));
} }
#define MAX_PCT 100. /* HLS uses this for L, S percentages */
#define MAX_RGB 100. /* use this rather than 255 */
/* /*
* In HLS, H is an angle, in degrees, and L, S are percentages.
* Primary color hues: * Primary color hues:
* blue: 0 degrees * blue: 0 degrees
* red: 120 degrees * red: 120 degrees
@ -953,12 +1027,19 @@ refresh_graphic(TScreen const *screen,
void void
hls2rgb(int h, int l, int s, short *r, short *g, short *b) hls2rgb(int h, int l, int s, short *r, short *g, short *b)
{ {
const int hs = ((h + 240) / 60) % 6; int hs;
const double lv = l / 100.0; const double lv = l / MAX_PCT;
const double sv = s / 100.0; const double sv = s / MAX_PCT;
double c, x, m, c2; double c, x, m, c2;
double r1, g1, b1; double r1, g1, b1;
h = h - 120; /* Rotate so that blue is at 0 degrees */
while (h < 0)
h += 360; /* Normalize to 0 to 360, */
while (h >= 360)
h -= 360;
hs = ((h + 59) / 60) % 6;
if (s == 0) { if (s == 0) {
*r = *g = *b = (short) l; *r = *g = *b = (short) l;
return; return;
@ -1004,15 +1085,15 @@ hls2rgb(int h, int l, int s, short *r, short *g, short *b)
break; break;
default: default:
TRACE(("Bad HLS input: [%d,%d,%d], returning white\n", h, l, s)); TRACE(("Bad HLS input: [%d,%d,%d], returning white\n", h, l, s));
*r = (short) 100; *r = (short) 360;
*g = (short) 100; *g = (short) MAX_PCT;
*b = (short) 100; *b = (short) MAX_PCT;
return; return;
} }
*r = (short) ((r1 + m) * 100.0 + 0.5); *r = (short) ((r1 + m) * MAX_PCT + 0.5);
*g = (short) ((g1 + m) * 100.0 + 0.5); *g = (short) ((g1 + m) * MAX_PCT + 0.5);
*b = (short) ((b1 + m) * 100.0 + 0.5); *b = (short) ((b1 + m) * MAX_PCT + 0.5);
if (*r < 0) if (*r < 0)
*r = 0; *r = 0;
@ -1028,6 +1109,49 @@ hls2rgb(int h, int l, int s, short *r, short *g, short *b)
*b = 100; *b = 100;
} }
void
rgb2hls(int r, int g, int b, short *h, short *l, short *s)
{
const double scaled_r = (r / MAX_RGB);
const double scaled_g = (g / MAX_RGB);
const double scaled_b = (b / MAX_RGB);
const double min_scale = Min(Min(scaled_r, scaled_g), scaled_b);
const double max_scale = Max(Max(scaled_r, scaled_g), scaled_b);
const double dif_scale = max_scale - min_scale;
double h_work = 0.;
double s_work = 0.;
double l_work = ((max_scale + min_scale) / 2.);
if (dif_scale != 0.) {
if (l_work < 0.5f) {
s_work = (dif_scale / (max_scale + min_scale));
} else {
s_work = (dif_scale / (2. - max_scale - min_scale));
}
if (scaled_r == max_scale) {
h_work = (scaled_g - scaled_b) / dif_scale;
} else if (scaled_g == max_scale) {
h_work = 2. + (scaled_b - scaled_r) / dif_scale;
} else if (scaled_b == max_scale) {
h_work = 4. + (scaled_r - scaled_g) / dif_scale;
}
}
h_work *= 60.;
if (h_work < 0)
h_work += 360.;
s_work *= MAX_RGB;
l_work *= MAX_RGB;
*h = (short) h_work;
*s = (short) s_work;
*l = (short) l_work;
}
void void
dump_graphic(Graphic const *graphic) dump_graphic(Graphic const *graphic)
{ {
@ -1745,7 +1869,7 @@ chararea_clear_displayed_graphics(TScreen const *screen,
void void
reset_displayed_graphics(TScreen const *screen) reset_displayed_graphics(TScreen const *screen)
{ {
init_color_registers(getSharedRegisters(), GraphicsTermId(screen)); init_color_registers(screen, getSharedRegisters());
if (used_graphics) { if (used_graphics) {
unsigned ii; unsigned ii;
@ -1754,6 +1878,9 @@ reset_displayed_graphics(TScreen const *screen)
FOR_EACH_SLOT(ii) { FOR_EACH_SLOT(ii) {
deactivateSlot(ii); deactivateSlot(ii);
} }
#if OPT_REGIS_GRAPHICS
reset_regis();
#endif
} }
} }

View file

@ -1,8 +1,8 @@
/* $XTermId: graphics.h,v 1.29 2022/02/22 23:36:19 tom Exp $ */ /* $XTermId: graphics.h,v 1.32 2023/09/28 00:24:13 tom Exp $ */
/* /*
* Copyright 2013-2016,2022 by Ross Combs * Copyright 2013-2022,2023 by Ross Combs
* Copyright 2013-2016,2022 by Thomas E. Dickey * Copyright 2013-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -66,7 +66,7 @@ typedef struct {
RegisterNum *pixels; RegisterNum *pixels;
ColorRegister *private_color_registers; ColorRegister *private_color_registers;
ColorRegister *color_registers; ColorRegister *color_registers;
char color_registers_used[MAX_COLOR_REGISTERS]; Boolean color_registers_used[MAX_COLOR_REGISTERS];
XtermWidget xw; XtermWidget xw;
int max_width; /* largest image which can be stored */ int max_width; /* largest image which can be stored */
int max_height; /* largest image which can be stored */ int max_height; /* largest image which can be stored */
@ -93,8 +93,10 @@ extern void draw_solid_pixel(Graphic */* graphic */, int /* x */, int /* y */, u
extern void draw_solid_rectangle(Graphic */* graphic */, int /* x1 */, int /* y1 */, int /* x2 */, int /* y2 */, unsigned /* color */); extern void draw_solid_rectangle(Graphic */* graphic */, int /* x1 */, int /* y1 */, int /* x2 */, int /* y2 */, unsigned /* color */);
extern void copy_overlapping_area(Graphic */* graphic */, int /* src_x */, int /* src_y */, int /* dst_x */, int /* dst_y */, unsigned /* w */, unsigned /* h */, unsigned /* default_color */); extern void copy_overlapping_area(Graphic */* graphic */, int /* src_x */, int /* src_y */, int /* dst_x */, int /* dst_y */, unsigned /* w */, unsigned /* h */, unsigned /* default_color */);
extern void hls2rgb(int /* h */, int /* l */, int /* s */, short */* r */, short */* g */, short */* b */); extern void hls2rgb(int /* h */, int /* l */, int /* s */, short */* r */, short */* g */, short */* b */);
extern void rgb2hls(int /* r */, int /* g */, int /* b */, short */* h */, short */* l */, short */* s */);
extern void dump_graphic(Graphic const */* graphic */); extern void dump_graphic(Graphic const */* graphic */);
extern unsigned get_color_register_count(TScreen const */* screen */); extern unsigned get_color_register_count(TScreen const */* screen */);
extern void fetch_color_register(Graphic */* graphic */, unsigned /* color */, ColorRegister* /* reg */);
extern void update_color_register(Graphic */* graphic */, unsigned /* color */, int /* r */, int /* g */, int /* b */); extern void update_color_register(Graphic */* graphic */, unsigned /* color */, int /* r */, int /* g */, int /* b */);
extern RegisterNum find_color_register(ColorRegister const */* color_registers */, int /* r */, int /* g */, int /* b */); extern RegisterNum find_color_register(ColorRegister const */* color_registers */, int /* r */, int /* g */, int /* b */);
extern void chararea_clear_displayed_graphics(TScreen const */* screen */, int /* leftcol */, int /* toprow */, int /* ncols */, int /* nrows */); extern void chararea_clear_displayed_graphics(TScreen const */* screen */, int /* leftcol */, int /* toprow */, int /* ncols */, int /* nrows */);
@ -117,6 +119,7 @@ extern void noleaks_graphics(Display */* dpy */);
#define draw_solid_rectangle(graphic, x1, y1, x2, y2, color) /* nothing */ #define draw_solid_rectangle(graphic, x1, y1, x2, y2, color) /* nothing */
#define copy_overlapping_area(graphic, src_x, src_y, dst_x, dst_y, w, h, default_color) /* nothing */ #define copy_overlapping_area(graphic, src_x, src_y, dst_x, dst_y, w, h, default_color) /* nothing */
#define hls2rgb(h, l, s, r, g, b) /* nothing */ #define hls2rgb(h, l, s, r, g, b) /* nothing */
#define rgb2hls(r, g, b, h, l, s) /* nothing */
#define dump_graphic(graphic) /* nothing */ #define dump_graphic(graphic) /* nothing */
#define get_color_register_count(screen) /* nothing */ #define get_color_register_count(screen) /* nothing */
#define update_color_register(graphic, color, r, g, b) /* nothing */ #define update_color_register(graphic, color, r, g, b) /* nothing */

View file

@ -1,8 +1,8 @@
/* $XTermId: graphics_regis.c,v 1.130 2022/05/16 23:31:18 tom Exp $ */ /* $XTermId: graphics_regis.c,v 1.149 2023/10/08 23:11:35 tom Exp $ */
/* /*
* Copyright 2014-2021,2022 by Ross Combs * Copyright 2014-2022,2023 by Ross Combs
* Copyright 2014-2021,2022 by Thomas E. Dickey * Copyright 2014-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -68,7 +68,7 @@
#undef DEBUG_COMPUTED_FONT_METRICS #undef DEBUG_COMPUTED_FONT_METRICS
#undef DEBUG_FONT_NAME #undef DEBUG_FONT_NAME
#undef DEBUG_FONT_SIZE_SEARCH #undef DEBUG_FONT_SIZE_SEARCH
#undef DEBUG_XFT_GLYPH #undef DEBUG_XFT_GLYPH_COPY
#undef DEBUG_GLYPH_RETRIEVAL #undef DEBUG_GLYPH_RETRIEVAL
#undef DEBUG_XFT_GLYPH_LOADING #undef DEBUG_XFT_GLYPH_LOADING
#undef DEBUG_LOAD #undef DEBUG_LOAD
@ -119,6 +119,14 @@ typedef struct RegisTextControls {
int slant; /* for italic/oblique */ int slant; /* for italic/oblique */
} RegisTextControls; } RegisTextControls;
#define S_QUOTE '\''
#define D_QUOTE '"'
#define isQuote(ch) ((ch) == S_QUOTE || (ch) == D_QUOTE)
#define PickQuote(ch) ((ch) == S_QUOTE ? D_QUOTE : S_QUOTE)
#define isName(c) ((c) == '_' || isalnum(CharOf(c)))
#define FixedCopy(dst, src, len) strncpy(dst, src, len - 1)[len - 1] = '\0' #define FixedCopy(dst, src, len) strncpy(dst, src, len - 1)[len - 1] = '\0'
#define CopyFontname(dst, src) FixedCopy(dst, src, (size_t) REGIS_FONTNAME_LEN) #define CopyFontname(dst, src) FixedCopy(dst, src, (size_t) REGIS_FONTNAME_LEN)
@ -538,8 +546,8 @@ draw_or_save_patterned_pixel(RegisGraphicsContext *context, int x, int y)
static int static int
sort_points(void const *l, void const *r) sort_points(void const *l, void const *r)
{ {
RegisPoint const *const lp = (RegisPoint const *)l; RegisPoint const *const lp = (RegisPoint const *) l;
RegisPoint const *const rp = (RegisPoint const *)r; RegisPoint const *const rp = (RegisPoint const *) r;
if (lp->y < rp->y) if (lp->y < rp->y)
return -1; return -1;
@ -580,9 +588,6 @@ draw_shaded_polygon(RegisGraphicsContext *context)
for (p = 0U; p < context->fill_point_count; p++) { for (p = 0U; p < context->fill_point_count; p++) {
int new_x = context->fill_points[p].x; int new_x = context->fill_points[p].x;
int new_y = context->fill_points[p].y; int new_y = context->fill_points[p].y;
#if 0
printf("got %d,%d (%d,%d) inside=%d\n", new_x, new_y, old_x, old_y, inside);
#endif
/* /*
* FIXME: This is using pixels to represent lines which loses * FIXME: This is using pixels to represent lines which loses
@ -642,9 +647,6 @@ draw_filled_polygon(RegisGraphicsContext *context)
for (p = 0U; p < context->fill_point_count; p++) { for (p = 0U; p < context->fill_point_count; p++) {
int new_x = context->fill_points[p].x; int new_x = context->fill_points[p].x;
int new_y = context->fill_points[p].y; int new_y = context->fill_points[p].y;
#if 0
printf("got %d,%d (%d,%d) inside=%d\n", new_x, new_y, old_x, old_y, inside);
#endif
/* /*
* FIXME: This is using pixels to represent lines which loses * FIXME: This is using pixels to represent lines which loses
@ -1826,32 +1828,54 @@ get_xft_glyph_dimensions(XtermWidget xw, XftFont *font, unsigned *w,
#define FONT_SIZE_CACHE_SIZE 32U #define FONT_SIZE_CACHE_SIZE 32U
typedef struct {
XftFont *font_data;
char fontname[REGIS_FONTNAME_LEN];
unsigned maxw, maxh, max_pixels;
unsigned targeth;
unsigned w, h;
unsigned xmin;
unsigned ymin;
} FONT_CACHE;
static FONT_CACHE font_cache[FONT_SIZE_CACHE_SIZE];
static void
close_xft_font(XtermWidget xw, XftFont *font)
{
if (font != NULL) {
Display *display = XtDisplay(xw);
unsigned ii;
for (ii = 0; ii < FONT_SIZE_CACHE_SIZE; ++ii) {
if (font == font_cache[ii].font_data) {
font_cache[ii].font_data = NULL;
break;
}
}
XftFontClose(display, font);
}
}
/* Find the font pixel size which returns the font which is closest to the given /* Find the font pixel size which returns the font which is closest to the given
* maxw and maxh without overstepping either dimension. * maxw and maxh without overstepping either dimension.
*/ */
static XftFont * static XftFont *
find_best_xft_font_size(XtermWidget xw, find_best_xft_font_size(XtermWidget xw,
char const *fontname, char const *fontname,
unsigned maxw, unsigned maxh, unsigned max_pixels, unsigned maxw,
unsigned *w, unsigned *h, unsigned maxh,
unsigned *xmin, unsigned *ymin) unsigned max_pixels,
unsigned *w,
unsigned *h,
unsigned *xmin,
unsigned *ymin)
{ {
Display *display = XtDisplay(xw); Display *display = XtDisplay(xw);
Screen *screen = XtScreen(xw); Screen *screen = XtScreen(xw);
XftFont *font; XftFont *font;
unsigned targeth; unsigned targeth;
unsigned ii, cacheindex; unsigned ii;
/* FIXME: change cache to just cache the final result and put it in a FONT_CACHE *cp = NULL;
* wrapper function
*/
static struct {
char fontname[REGIS_FONTNAME_LEN];
unsigned maxw, maxh, max_pixels;
unsigned targeth;
unsigned w, h;
unsigned xmin;
unsigned ymin;
} cache[FONT_SIZE_CACHE_SIZE];
assert(display); assert(display);
assert(screen); assert(screen);
@ -1862,24 +1886,36 @@ find_best_xft_font_size(XtermWidget xw,
assert(ymin); assert(ymin);
#ifdef DEBUG_FONT_SIZE_SEARCH #ifdef DEBUG_FONT_SIZE_SEARCH
TRACE(("determining best size of font '%s' for %ux%u glyph with max_pixels=%u\n", TRACE(("determining best size of font \"%s\" for %ux%u glyph with max_pixels=%u\n",
fontname, maxw, maxh, max_pixels)); fontname, maxw, maxh, max_pixels));
#endif #endif
cacheindex = FONT_SIZE_CACHE_SIZE;
for (ii = 0U; ii < FONT_SIZE_CACHE_SIZE; ii++) { for (ii = 0U; ii < FONT_SIZE_CACHE_SIZE; ii++) {
if (cache[ii].maxw == maxw && cache[ii].maxh == maxh && if (font_cache[ii].maxw == maxw &&
cache[ii].max_pixels == max_pixels && font_cache[ii].maxh == maxh &&
strcmp(cache[ii].fontname, fontname) == 0) { font_cache[ii].max_pixels == max_pixels &&
cacheindex = ii; strcmp(font_cache[ii].fontname, fontname) == 0) {
cp = &font_cache[ii];
if (cp->font_data) {
*w = cp->w;
*h = cp->h;
*xmin = cp->xmin;
*ymin = cp->ymin;
return cp->font_data;
}
break; break;
} }
} }
if (cacheindex < FONT_SIZE_CACHE_SIZE) { if (cp != NULL) {
targeth = cache[cacheindex].targeth; targeth = cp->targeth;
} else { } else {
targeth = maxh * 10U + 5U; targeth = maxh * 8U + 5U;
} }
#define MAX_TARGETH 720U /* above this level, fontconfig chokes */
if (targeth > MAX_TARGETH)
targeth = MAX_TARGETH;
for (;;) { for (;;) {
if (targeth <= 5U) { if (targeth <= 5U) {
TRACE(("Giving up finding suitable Xft font size for \"%s\" at %ux%u.\n", TRACE(("Giving up finding suitable Xft font size for \"%s\" at %ux%u.\n",
@ -1917,17 +1953,8 @@ find_best_xft_font_size(XtermWidget xw,
TRACE(("trying targeth=%g\n", targeth / 10.0)); TRACE(("trying targeth=%g\n", targeth / 10.0));
#endif #endif
XftPatternBuild(pat, XftPatternBuild(pat,
#if 0
/* arbitrary value */
XFT_SIZE, XftTypeDouble, 12.0,
#endif
XFT_PIXEL_SIZE, XftTypeDouble, (double) XFT_PIXEL_SIZE, XftTypeDouble, (double)
targeth / 10.0, targeth / 10.0,
#if 0
XFT_CHAR_WIDTH, XftTypeInteger, (int) maxw,
XFT_CHAR_HEIGHT, XftTypeInteger, (int)
(targeth / 10U),
#endif
XFT_SPACING, XftTypeInteger, XFT_MONO, XFT_SPACING, XftTypeInteger, XFT_MONO,
XFT_SLANT, XftTypeInteger, 0, XFT_SLANT, XftTypeInteger, 0,
XFT_ANTIALIAS, XftTypeBool, False, XFT_ANTIALIAS, XftTypeBool, False,
@ -1942,15 +1969,7 @@ find_best_xft_font_size(XtermWidget xw,
} }
} }
if (!font) { if (!font) {
#ifdef DEBUG_FONT_SIZE_SEARCH TRACE(("unable to open a monospaced Xft font matching \"%s\" with pixelsize %g\n",
{
char buffer[1024];
if (XftNameUnparse(font->pattern, buffer, (int) sizeof(buffer)))
printf("font name unparsed: \"%s\"\n", buffer);
}
#endif
TRACE(("unable to open a monospaced Xft font matching '%s' with pixelsize %g\n",
fontname, targeth / 10.0)); fontname, targeth / 10.0));
return NULL; return NULL;
} }
@ -1966,12 +1985,12 @@ find_best_xft_font_size(XtermWidget xw,
} }
#endif #endif
if (cacheindex < FONT_SIZE_CACHE_SIZE && if (cp != NULL &&
targeth == cache[cacheindex].targeth) { targeth == cp->targeth) {
*w = cache[cacheindex].w; *w = cp->w;
*h = cache[cacheindex].h; *h = cp->h;
*xmin = cache[cacheindex].xmin; *xmin = cp->xmin;
*ymin = cache[cacheindex].ymin; *ymin = cp->ymin;
} else { } else {
get_xft_glyph_dimensions(xw, font, w, h, xmin, ymin); get_xft_glyph_dimensions(xw, font, w, h, xmin, ymin);
@ -1990,28 +2009,26 @@ find_best_xft_font_size(XtermWidget xw,
#endif #endif
if (*h > maxh) { if (*h > maxh) {
float ratio = (float) (*h) / (float) maxh;
XftFontClose(display, font); XftFontClose(display, font);
#ifdef DEBUG_FONT_SIZE_SEARCH #ifdef DEBUG_FONT_SIZE_SEARCH
TRACE(("got %ux%u glyph; too tall; reducing target size\n", *w, *h)); TRACE(("got %ux%u glyph; too tall; reducing target size\n", *w, *h));
#endif #endif
if (*h > 2U * maxh) { if (targeth >= 10U && ratio > 1.1) {
targeth /= (*h / maxh); targeth = (unsigned) ((float) targeth / ratio);
} else if (targeth > 10U && *h > maxh + 1U) {
targeth -= 10U;
} else { } else {
targeth--; targeth--;
} }
continue; continue;
} }
if (*w > maxw) { if (*w > maxw) {
float ratio = (float) (*w) / (float) maxw;
XftFontClose(display, font); XftFontClose(display, font);
#ifdef DEBUG_FONT_SIZE_SEARCH #ifdef DEBUG_FONT_SIZE_SEARCH
TRACE(("got %ux%u glyph; too wide; reducing target size\n", *w, *h)); TRACE(("got %ux%u glyph; too wide; reducing target size\n", *w, *h));
#endif #endif
if (*w > 2U * maxw) { if (targeth >= 10U && ratio > 1.1) {
targeth /= (*w / maxw); targeth = (unsigned) ((float) targeth / ratio);
} else if (targeth > 10U && *w > maxw + 1U) {
targeth -= 10U;
} else { } else {
targeth--; targeth--;
} }
@ -2052,34 +2069,32 @@ find_best_xft_font_size(XtermWidget xw,
} }
#endif #endif
if (cacheindex == FONT_SIZE_CACHE_SIZE) { if (cp == NULL) {
for (ii = 0U; ii < FONT_SIZE_CACHE_SIZE; ii++) { for (ii = 0U; ii < FONT_SIZE_CACHE_SIZE; ii++) {
if (cache[ii].maxw == 0U || cache[ii].maxh == 0U || if (font_cache[ii].maxw == 0U ||
cache[ii].max_pixels == 0U) { font_cache[ii].maxh == 0U ||
CopyFontname(cache[ii].fontname, fontname); font_cache[ii].max_pixels == 0U) {
cache[ii].maxw = maxw; cp = &font_cache[ii];
cache[ii].maxh = maxh;
cache[ii].max_pixels = max_pixels;
cache[ii].targeth = targeth;
cache[ii].w = *w;
cache[ii].h = *h;
cache[ii].xmin = *xmin;
cache[ii].ymin = *ymin;
break; break;
} }
} }
if (ii == FONT_SIZE_CACHE_SIZE) { if (cp == NULL) {
ii = targeth % FONT_SIZE_CACHE_SIZE; ii = targeth % FONT_SIZE_CACHE_SIZE;
CopyFontname(cache[ii].fontname, fontname); cp = &font_cache[ii];
cache[ii].maxw = maxw; close_xft_font(xw, cp->font_data);
cache[ii].maxh = maxh;
cache[ii].max_pixels = max_pixels;
cache[ii].targeth = targeth;
cache[ii].w = *w;
cache[ii].h = *h;
cache[ii].xmin = *xmin;
cache[ii].ymin = *ymin;
} }
CopyFontname(cp->fontname, fontname);
cp->maxw = maxw;
cp->maxh = maxh;
cp->max_pixels = max_pixels;
cp->targeth = targeth;
cp->w = *w;
cp->h = *h;
cp->xmin = *xmin;
cp->ymin = *ymin;
}
if (cp != NULL) {
cp->font_data = font;
} }
return font; return font;
} }
@ -2102,7 +2117,6 @@ get_xft_bitmap_of_character(RegisGraphicsContext const *context,
*/ */
#ifdef XRENDERFONT #ifdef XRENDERFONT
XtermWidget xw = context->destination_graphic->xw; XtermWidget xw = context->destination_graphic->xw;
Display *display = XtDisplay(xw);
XftFont *font; XftFont *font;
unsigned xmin = 0U, ymin = 0U; unsigned xmin = 0U, ymin = 0U;
@ -2117,17 +2131,16 @@ get_xft_bitmap_of_character(RegisGraphicsContext const *context,
if (*w == 0U || *h == 0U) { if (*w == 0U || *h == 0U) {
TRACE(("empty glyph found for '%c'\n", ch)); TRACE(("empty glyph found for '%c'\n", ch));
XftFontClose(display, font); close_xft_font(xw, font);
return 1; return 1;
} }
if (!copy_bitmap_from_xft_font(xw, font, CharOf(ch), pixels, *w, *h, if (!copy_bitmap_from_xft_font(xw, font, CharOf(ch), pixels, *w, *h,
xmin, ymin)) { xmin, ymin)) {
TRACE(("Unable to create bitmap for '%c'\n", ch)); TRACE(("Unable to create bitmap for '%c'\n", ch));
XftFontClose(display, font); close_xft_font(xw, font);
return 0; return 0;
} }
XftFontClose(display, font);
# ifdef DEBUG_XFT_GLYPH_LOADING # ifdef DEBUG_XFT_GLYPH_LOADING
TRACE(("loaded glyph '%c' at max size %dx%d\n", ch, maxw, maxh)); TRACE(("loaded glyph '%c' at max size %dx%d\n", ch, maxw, maxh));
# endif # endif
@ -2365,7 +2378,7 @@ get_bitmap_of_character(RegisGraphicsContext const *context, int ch,
if (fontname) { if (fontname) {
#ifdef DEBUG_GLYPH_RETRIEVAL #ifdef DEBUG_GLYPH_RETRIEVAL
TRACE(("using xft font %s\n", fontname)); TRACE(("using xft font \"%s\"\n", fontname));
#endif #endif
if (get_xft_bitmap_of_character(context, fontname, ch, if (get_xft_bitmap_of_character(context, fontname, ch,
maxw, maxh, pixels, maxw, maxh, pixels,
@ -3151,6 +3164,37 @@ extract_regis_command(RegisDataFragment *input, char *command)
return 1; return 1;
} }
/*
* Check a ReGIS alphabet name before reporting it, to pick an appropriate
* delimiter. If the string is empty, or contains nonreportable characters,
* just return NUL.
*/
static int
pick_quote(const char *value)
{
Bool s_quote = False;
Bool d_quote = False;
if (*value != '\0') {
while (*value != '\0') {
int ch = CharOf(*value++);
if (ch == D_QUOTE)
d_quote = True;
else if (ch == S_QUOTE)
s_quote = True;
else if (!isName(ch))
s_quote = d_quote = True;
}
} else {
s_quote = d_quote = True;
}
return ((s_quote && d_quote)
? 0
: (s_quote
? D_QUOTE
: S_QUOTE));
}
static int static int
extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen) extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen)
{ {
@ -3166,7 +3210,7 @@ extract_regis_string(RegisDataFragment *input, char *out, unsigned maxlen)
return 0; return 0;
ch = peek_fragment(input); ch = peek_fragment(input);
if (ch != '\'' && ch != '"') if (!isQuote(ch))
return 0; return 0;
open_quote_ch = ch; open_quote_ch = ch;
outlen = 0U; outlen = 0U;
@ -3246,7 +3290,7 @@ extract_regis_parenthesized_data(RegisDataFragment *input,
for (; input->pos < input->len; input->pos++, output->len++) { for (; input->pos < input->len; input->pos++, output->len++) {
char prev_ch = ch; char prev_ch = ch;
ch = input->start[input->pos]; ch = input->start[input->pos];
if (ch == '\'' || ch == '"') { if (isQuote(ch)) {
if (open_quote_ch == '\0') { if (open_quote_ch == '\0') {
open_quote_ch = ch; open_quote_ch = ch;
} else { } else {
@ -3314,7 +3358,7 @@ extract_regis_option(RegisDataFragment *input,
if (ch == ';' || ch == ',' || if (ch == ';' || ch == ',' ||
ch == '(' || ch == ')' || ch == '(' || ch == ')' ||
ch == '[' || ch == ']' || ch == '[' || ch == ']' ||
ch == '"' || ch == '\'' || isQuote(ch) ||
isdigit(CharOf(ch))) { isdigit(CharOf(ch))) {
return 0; return 0;
} }
@ -3330,7 +3374,7 @@ extract_regis_option(RegisDataFragment *input,
TRACE(("looking at char '%c' in option '%c'\n", ch, *option)); TRACE(("looking at char '%c' in option '%c'\n", ch, *option));
/* FIXME: any special rules for commas? */ /* FIXME: any special rules for commas? */
/* FIXME: handle escaped quotes */ /* FIXME: handle escaped quotes */
if (ch == '\'' || ch == '"') { if (isQuote(ch)) {
if (open_quote_ch == ch) { if (open_quote_ch == ch) {
open_quote_ch = '\0'; open_quote_ch = '\0';
} else { } else {
@ -3421,33 +3465,56 @@ regis_num_to_int(RegisDataFragment const *input, int *out)
return 1; return 1;
} }
#define spec_H xBIT(0)
#define spec_L xBIT(1)
#define spec_S xBIT(2)
#define spec_HLS (spec_H | spec_L | spec_S)
#define spec_R xBIT(3)
#define spec_G xBIT(4)
#define spec_B xBIT(5)
#define spec_RGB (spec_R | spec_G | spec_B)
static int static int
load_regis_colorspec(RegisGraphicsContext const *context, load_regis_colorspec(RegisGraphicsContext const *context,
RegisDataFragment const *input, RegisDataFragment const *input,
short *r_out, short *g_out, short *b_out) ColorRegister *colors)
{ {
RegisDataFragment colorspec; RegisDataFragment colorspec;
short r = -1, g = -1, b = -1; short r = colors->r;
short g = colors->g;
short b = colors->b;
short l = -1; short l = -1;
int simple; int simple;
unsigned len;
unsigned spec = 0;
assert(context); assert(context);
assert(input); assert(input);
assert(r_out); assert(colors);
assert(g_out);
assert(b_out);
copy_fragment(&colorspec, input); copy_fragment(&colorspec, input);
TRACE(("colorspec option: \"%s\"\n", fragment_to_tempstr(&colorspec))); TRACE(("colorspec option: \"%s\"\n", fragment_to_tempstr(&colorspec)));
skip_regis_whitespace(&colorspec); skip_regis_whitespace(&colorspec);
simple = 0; simple = 0;
if (fragment_remaining(&colorspec) == 1U) { if ((len = fragment_remaining(&colorspec)) == 1U) {
simple = 1; simple = 1;
} else if (fragment_remaining(&colorspec) > 1U) { } else if (len > 1U) {
char after = get_fragment(&colorspec, 1U); unsigned n;
if (IsSpace(after)) for (n = 1; n < len; ++n) {
simple = 1; char after = get_fragment(&colorspec, n);
/* if no parameters, we might see a right-parenthesis, but on error
* we can anything */
if (strchr("[(,)]", after) != NULL) {
simple = 1;
break;
} else if (!IsSpace(after)) {
break;
}
}
} }
if (simple) { if (simple) {
char ch = pop_fragment(&colorspec); char ch = pop_fragment(&colorspec);
@ -3576,7 +3643,7 @@ load_regis_colorspec(RegisGraphicsContext const *context,
return 0; return 0;
} }
if (!regis_num_to_int(&num, &val)) { if (!regis_num_to_int(&num, &val)) {
TRACE(("DATA_ERROR: component value %s is not a number\n", TRACE(("DATA_ERROR: component value \"%s\" is not a number\n",
fragment_to_tempstr(&num))); fragment_to_tempstr(&num)));
return 0; return 0;
} }
@ -3589,38 +3656,56 @@ load_regis_colorspec(RegisGraphicsContext const *context,
switch (comp) { switch (comp) {
case 'H': case 'H':
h = (short) val; h = (short) val;
spec |= spec_H;
break; break;
case 'L': case 'L':
l = (short) val; l = (short) val;
spec |= spec_L;
break; break;
case 'S': case 'S':
s = (short) val; s = (short) val;
spec |= spec_S;
break; break;
case 'R': case 'R':
r = (short) val; r = (short) val;
spec |= spec_R;
break; break;
case 'G': case 'G':
g = (short) val; g = (short) val;
spec |= spec_G;
break; break;
case 'B': case 'B':
b = (short) val; b = (short) val;
spec |= spec_B;
break; break;
} }
} }
if (h >= 0 && l >= 0 && s >= 0 && r < 0 && g < 0 && b < 0) { if ((spec & spec_HLS) && (spec & spec_RGB)) {
TRACE(("DATA_ERROR: conflicting colorspec format\n"));
return 0;
} else if (spec == spec_HLS) {
TRACE(("found HLS colorspec to be converted: %hd,%hd,%hd\n", TRACE(("found HLS colorspec to be converted: %hd,%hd,%hd\n",
h, l, s)); h, l, s));
hls2rgb(h, l, s, &r, &g, &b); hls2rgb(h, l, s, &r, &g, &b);
TRACE(("converted to RGB: %hd,%hd,%hd\n", r, g, b)); TRACE(("converted to RGB: %hd,%hd,%hd\n", r, g, b));
} else if (h < 0 && l < 0 && s < 0 && r >= 0 && g >= 0 && b >= 0) { } else if (spec == spec_RGB) {
TRACE(("found RGB colorspec: %hd,%hd,%hd\n", r, g, b)); TRACE(("found RGB colorspec: %hd,%hd,%hd\n", r, g, b));
l = (short) ((MIN3(r, g, b) + MAX3(r, g, b)) / 2); l = (short) ((MIN3(r, g, b) + MAX3(r, g, b)) / 2);
TRACE(("calculated L: %d\n", l)); TRACE(("calculated L: %d\n", l));
} else if (h < 0 && l >= 0 && s < 0 && r < 0 && g < 0 && b < 0) { } else if ((spec & spec_HLS)) {
TRACE(("found L colorspec to be converted: %hd,%hd,%hd\n", short old_h, old_l, old_s;
TRACE(("using partial HLS %hd,%hd,%hd\n", h, l, s));
rgb2hls(r, g, b, &old_h, &old_l, &old_s);
if (h < 0)
h = old_h;
if (l < 0)
l = old_l;
if (s < 0)
s = old_s;
TRACE(("resulting HLS colorspec to convert: %hd,%hd,%hd\n",
h, l, s)); h, l, s));
hls2rgb(0, l, 0, &r, &g, &b); hls2rgb(h, l, s, &r, &g, &b);
TRACE(("converted to RGB: %hd,%hd,%hd\n", r, g, b)); TRACE(("converted to RGB: %hd,%hd,%hd\n", r, g, b));
} else { } else {
TRACE(("DATA_ERROR: unrecognized colorspec format\n")); TRACE(("DATA_ERROR: unrecognized colorspec format\n"));
@ -3636,9 +3721,9 @@ load_regis_colorspec(RegisGraphicsContext const *context,
TRACE(("converted to grayscale: %hd,%hd,%hd\n", r, g, b)); TRACE(("converted to grayscale: %hd,%hd,%hd\n", r, g, b));
} }
*r_out = r; colors->r = r;
*g_out = g; colors->g = g;
*b_out = b; colors->b = b;
skip_regis_whitespace(&colorspec); skip_regis_whitespace(&colorspec);
if (!fragment_consumed(&colorspec)) { if (!fragment_consumed(&colorspec)) {
@ -3671,7 +3756,7 @@ load_regis_regnum_or_colorspec(RegisGraphicsContext const *context,
if (extract_regis_num(&colorspec, &num)) { if (extract_regis_num(&colorspec, &num)) {
if (!regis_num_to_int(&num, &val)) { if (!regis_num_to_int(&num, &val)) {
TRACE(("DATA_ERROR: colorspec value %s is not a valid register\n", TRACE(("DATA_ERROR: colorspec value \"%s\" is not a valid register\n",
fragment_to_tempstr(&num))); fragment_to_tempstr(&num)));
return 0; return 0;
} }
@ -3705,15 +3790,16 @@ load_regis_regnum_or_colorspec(RegisGraphicsContext const *context,
} }
if (extract_regis_parenthesized_data(&colorspec, &coloroption)) { if (extract_regis_parenthesized_data(&colorspec, &coloroption)) {
short r, g, b; ColorRegister find_reg =
{-1, -1, -1};
if (!load_regis_colorspec(context, &coloroption, &r, &g, &b)) { if (!load_regis_colorspec(context, &coloroption, &find_reg)) {
TRACE(("unable to parse colorspec\n")); TRACE(("unable to parse colorspec\n"));
return 0; return 0;
} }
*out = find_color_register(context->destination_graphic->color_registers, *out = find_color_register(context->destination_graphic->color_registers,
r, g, b); find_reg.r, find_reg.g, find_reg.b);
TRACE(("colorspec maps to closest register %u\n", *out)); TRACE(("colorspec maps to closest register %u\n", *out));
return 1; return 1;
@ -3847,11 +3933,11 @@ load_regis_mult_extent(char const *extent, int *w, int *h)
int px, py; int px, py;
if (!load_regis_raw_extent(extent, &relx, &rely, &px, &py, 1)) { if (!load_regis_raw_extent(extent, &relx, &rely, &px, &py, 1)) {
TRACE(("invalid coordinates in extent %s\n", extent)); TRACE(("invalid coordinates in extent \"%s\"\n", extent));
return 0; return 0;
} }
if (relx | rely) { if (relx | rely) {
TRACE(("invalid relative value in multiplier extent %s\n", extent)); TRACE(("invalid relative value in multiplier extent \"%s\"\n", extent));
return 0; return 0;
} }
@ -3869,7 +3955,7 @@ load_regis_pixel_extent(char const *extent, int origx, int origy,
int px, py; int px, py;
if (!load_regis_raw_extent(extent, &relx, &rely, &px, &py, 1)) { if (!load_regis_raw_extent(extent, &relx, &rely, &px, &py, 1)) {
TRACE(("invalid coordinates in extent %s\n", extent)); TRACE(("invalid coordinates in extent \"%s\"\n", extent));
return 0; return 0;
} }
@ -3894,7 +3980,7 @@ load_regis_coord_extent(RegisGraphicsContext const *context, char const *extent,
int ux, uy; int ux, uy;
if (!load_regis_raw_extent(extent, &relx, &rely, &ux, &uy, COORD_SCALE)) { if (!load_regis_raw_extent(extent, &relx, &rely, &ux, &uy, COORD_SCALE)) {
TRACE(("invalid coordinates in extent %s\n", extent)); TRACE(("invalid coordinates in extent \"%s\"\n", extent));
return 0; return 0;
} }
@ -5008,6 +5094,7 @@ parse_regis_command(RegisParseState *state)
static int static int
parse_regis_option(RegisParseState *state, RegisGraphicsContext *context) parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
{ {
XtermWidget xw = context->display_graphic->xw;
RegisDataFragment optionarg; RegisDataFragment optionarg;
if (!extract_regis_option(&state->input, &state->option, &optionarg)) if (!extract_regis_option(&state->input, &state->option, &optionarg))
@ -5586,13 +5673,18 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
state->option, fragment_to_tempstr(&optionarg))); state->option, fragment_to_tempstr(&optionarg)));
break; break;
} { } {
char reply[64]; unsigned err_code = 0U;
unsigned err_char = 0U;
TRACE(("got report last error condition\n")); TRACE(("got report last error condition\n"));
/* FIXME: implement after adding error tracking */ /* FIXME: implement after adding error tracking */
sprintf(reply, "\"%u,%u\"\r", 0U, 0U); unparseputc(xw, D_QUOTE);
unparseputs(context->display_graphic->xw, reply); unparseputn(xw, err_code);
unparse_end(context->display_graphic->xw); unparseputc(xw, ',');
unparseputn(xw, err_char);
unparseputc(xw, D_QUOTE);
unparseputc(xw, '\r');
unparse_end(xw);
} }
break; break;
case 'I': case 'I':
@ -5639,8 +5731,8 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
/* FIXME: implement arrow key movement */ /* FIXME: implement arrow key movement */
/* FIXME: implement button/key collection */ /* FIXME: implement button/key collection */
unparseputs(context->display_graphic->xw, "\r"); unparseputc(xw, '\r');
unparse_end(context->display_graphic->xw); unparse_end(xw);
skip_regis_whitespace(&optionarg); skip_regis_whitespace(&optionarg);
if (!fragment_consumed(&optionarg)) { if (!fragment_consumed(&optionarg)) {
@ -5657,25 +5749,22 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
if (!fragment_consumed(&optionarg)) { if (!fragment_consumed(&optionarg)) {
TRACE(("DATA_ERROR: unexpected arguments to ReGIS report command option '%c' arg \"%s\"\n", TRACE(("DATA_ERROR: unexpected arguments to ReGIS report command option '%c' arg \"%s\"\n",
state->option, fragment_to_tempstr(&optionarg))); state->option, fragment_to_tempstr(&optionarg)));
break; } else if (state->load_index == MAX_REGIS_ALPHABETS) {
} { /* If this happens something went wrong elsewhere. */
char buffer[32]; TRACE(("DATA_ERROR: unable to report current load alphabet\n"));
unparseputs(xw, "A0\"\"\r");
if (state->load_index == MAX_REGIS_ALPHABETS) { unparse_end(xw);
/* If this happens something went wrong elsewhere. */ } else {
TRACE(("DATA_ERROR: unable to report current load alphabet\n")); int delim = pick_quote(state->load_name);
unparseputs(context->display_graphic->xw, "A0\"\"\r"); if (delim != '\0') {
unparse_end(context->display_graphic->xw); unparseputs(xw, "A");
break; unparseputn(xw, state->load_alphabet);
unparseputc(xw, delim);
unparseputs(xw, state->load_name);
unparseputc(xw, delim);
} }
unparseputc(xw, '\r');
unparseputs(context->display_graphic->xw, "A"); unparse_end(xw);
sprintf(buffer, "%u", state->load_alphabet);
unparseputs(context->display_graphic->xw, buffer);
unparseputs(context->display_graphic->xw, "\"");
unparseputs(context->display_graphic->xw, state->load_name);
unparseputs(context->display_graphic->xw, "\"\r");
unparse_end(context->display_graphic->xw);
} }
break; break;
case 'M': case 'M':
@ -5717,27 +5806,31 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
} }
if (name == '=') { if (name == '=') {
char reply[64]; unsigned max_available = 1000U;
unsigned cur_available = max_available;
TRACE(("got report macrograph storage request\n")); TRACE(("got report macrograph storage request\n"));
/* FIXME: Implement when macrographs are supported. */ /* FIXME: Implement when macrographs are supported. */
sprintf(reply, "\"%u,%u\"\r", 1000U, 1000U); unparseputc(xw, D_QUOTE);
unparseputs(context->display_graphic->xw, reply); unparseputn(xw, cur_available);
unparse_end(context->display_graphic->xw); unparseputc(xw, ',');
unparseputn(xw, max_available);
unparseputc(xw, D_QUOTE);
unparseputc(xw, '\r');
unparse_end(xw);
} else if (name < 'A' || name > 'Z') { } else if (name < 'A' || name > 'Z') {
TRACE(("DATA_ERROR: invalid macrograph name: \"%c\"\n", name)); TRACE(("DATA_ERROR: invalid macrograph name: \"%c\"\n", name));
/* FIXME: what should happen? */ /* FIXME: what should happen? */
break; break;
} else { } else {
char temp[8];
TRACE(("got report macrograph request for name '%c'\n", name)); TRACE(("got report macrograph request for name '%c'\n", name));
sprintf(temp, "@=%c", name); unparseputs(xw, "@=");
unparseputs(context->display_graphic->xw, temp); unparseputc(xw, name);
/* FIXME: Allow this to be disabled for security reasons. */ /* FIXME: Allow this to be disabled for security reasons. */
/* FIXME: implement when macrographs are supported. */ /* FIXME: implement when macrographs are supported. */
unparseputs(context->display_graphic->xw, "@;\r"); unparseputs(xw, "@;");
unparse_end(context->display_graphic->xw); unparseputc(xw, '\r');
unparse_end(xw);
} }
} }
break; break;
@ -5785,78 +5878,59 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
TRACE(("got report cursor position (output=%d)\n", output)); TRACE(("got report cursor position (output=%d)\n", output));
/* FIXME: look into supporting ANSI locator reports (DECLRP) */ /* FIXME: look into supporting ANSI locator reports (DECLRP) */
unparseputc(xw, L_BLOK);
if (output == 1) { if (output == 1) {
char reply[64];
/* FIXME: verify in absolute, not user, coordinates */ /* FIXME: verify in absolute, not user, coordinates */
sprintf(reply, "[%d,%d]\r", unparseputn(xw, (unsigned) context->graphics_output_cursor_x);
context->graphics_output_cursor_x, unparseputc(xw, ',');
context->graphics_output_cursor_y); unparseputn(xw, (unsigned) context->graphics_output_cursor_y);
unparseputs(context->display_graphic->xw, reply); } else if (context->multi_input_mode) {
unparse_end(context->display_graphic->xw); /* FIXME: track input coordinates */
unsigned x = 0, y = 0; /* placeholders */
/* send CSI240~[x,y]\r with current input cursor location */
/* FIXME: verify no leading char or button sequence */
/* FIXME: should we ever send an eight-bit CSI? */
/* FIXME: verify in absolute, not user, coordinates */
TRACE(("sending multi-mode input report at %u,%u\n", x, y));
unparseputn(xw, x);
unparseputc(xw, ',');
unparseputn(xw, y);
} else { } else {
char reply[64]; char ch = ' '; /* placeholder */
int x, y; unsigned x = 0, y = 0; /* placeholders */
if (context->multi_input_mode) { /* FIXME: wait for first non-arrow keypress or mouse click, and don't update graphics while waiting */
/* FIXME: track input coordinates */ /* send <key or button>[x,y]\r to report input cursor location */
x = y = 0; /* placeholders */
/* send CSI240~[x,y]\r with current input cursor location */ /* null button: CSI240~ */
/* left button: CSI241~ */
/* FIXME: verify no leading char or button sequence */ /* middle button: CSI243~ */
/* FIXME: should we ever send an eight-bit CSI? */ /* right button: CSI245~ */
/* FIXME: verify in absolute, not user, coordinates */ /* extra button: CSI247~ */
TRACE(("sending multi-mode input report at %d,%d\n", /* FIXME: support DECLBD to change button assignments */
x, y)); /* FIXME: verify no leading char or button sequence */
sprintf(reply, "[%d,%d]\r", x, y); TRACE(("sending one-shot input report with %c at %u,%u\n",
unparseputs(context->display_graphic->xw, reply); ch, x, y));
unparse_end(context->display_graphic->xw); if (ch != '\177') {
break; unparseputn(xw, x);
} else { unparseputc(xw, ',');
char ch; unparseputn(xw, y);
/* FIXME: wait for first non-arrow keypress or mouse click, and don't update graphics while waiting */
ch = ' '; /* placeholder */
x = y = 0; /* placeholders */
/* send <key or button>[x,y]\r to report input cursor location */
/* null button: CSI240~ */
/* left button: CSI241~ */
/* middle button: CSI243~ */
/* right button: CSI245~ */
/* extra button: CSI247~ */
/* FIXME: support DECLBD to change button assignments */
/* FIXME: verify no leading char or button sequence */
TRACE(("sending one-shot input report with %c at %d,%d\n",
ch, x, y));
#if 0 /* FIXME - dead code */
if (ch == '\r') {
/* Return only reports the location. */
sprintf(reply, "[%d,%d]\r", x, y);
} else if (ch == '\177') {
/* DEL exits locator mode reporting nothing. */
sprintf(reply, "\r");
} else
#endif
{
sprintf(reply, "%c[%d,%d]\r", ch, x, y);
}
unparseputs(context->display_graphic->xw, reply);
unparse_end(context->display_graphic->xw);
/* FIXME: exit one-shot mode and disable input cursor */
break;
} }
/* FIXME: exit one-shot mode and disable input cursor */
} }
unparseputc(xw, R_BLOK);
unparseputc(xw, '\r');
unparse_end(xw);
} }
break; break;
default: default:
TRACE(("DATA_ERROR: sending empty report for unknown ReGIS report command option '%c' arg \"%s\"\n", TRACE(("DATA_ERROR: sending empty report for unknown ReGIS report command option '%c' arg \"%s\"\n",
state->option, fragment_to_tempstr(&optionarg))); state->option, fragment_to_tempstr(&optionarg)));
/* Unknown report request types must receive empty reports. */ /* Unknown report request types must receive empty reports. */
unparseputs(context->display_graphic->xw, "\r"); unparseputs(xw, "\r");
unparse_end(context->display_graphic->xw); unparse_end(xw);
break; break;
} }
break; break;
@ -6060,7 +6134,7 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
if (extract_regis_num(&optionarg, &regnum)) { if (extract_regis_num(&optionarg, &regnum)) {
int register_num; int register_num;
int color_only; int color_only;
short r, g, b; ColorRegister my_reg;
if (!regis_num_to_int(&regnum, &register_num)) { if (!regis_num_to_int(&regnum, &register_num)) {
TRACE(("DATA_ERROR: unable to parse int in screen color register mapping option: \"%s\"\n", TRACE(("DATA_ERROR: unable to parse int in screen color register mapping option: \"%s\"\n",
@ -6093,10 +6167,17 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
break; break;
} }
TRACE(("mapping register %d to color spec: \"%s\"\n", fetch_color_register(context->destination_graphic,
register_num, fragment_to_tempstr(&colorspec))); (RegisterNum) register_num,
if (!load_regis_colorspec(context, &colorspec, &my_reg);
&r, &g, &b)) {
TRACE(("mapping register %d %d,%d,%d to color spec: \"%s\"\n",
register_num,
my_reg.r,
my_reg.g,
my_reg.b,
fragment_to_tempstr(&colorspec)));
if (!load_regis_colorspec(context, &colorspec, &my_reg)) {
TRACE(("DATA_ERROR: unable to use colorspec for mapping of register %d\n", TRACE(("DATA_ERROR: unable to use colorspec for mapping of register %d\n",
register_num)); register_num));
return 1; return 1;
@ -6106,13 +6187,13 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
(context->graphics_termid == 240 || (context->graphics_termid == 240 ||
context->graphics_termid == 330)) { context->graphics_termid == 330)) {
TRACE(("NOT setting color register %d to %hd,%hd,%hd\n", TRACE(("NOT setting color register %d to %hd,%hd,%hd\n",
register_num, r, g, b)); register_num, my_reg.r, my_reg.g, my_reg.b));
} else { } else {
TRACE(("setting color register %d to %hd,%hd,%hd\n", TRACE(("setting color register %d to %hd,%hd,%hd\n",
register_num, r, g, b)); register_num, my_reg.r, my_reg.g, my_reg.b));
update_color_register(context->destination_graphic, update_color_register(context->destination_graphic,
(RegisterNum) register_num, (RegisterNum) register_num,
r, g, b); my_reg.r, my_reg.g, my_reg.b);
} }
continue; continue;
} { } {
@ -6154,7 +6235,7 @@ parse_regis_option(RegisParseState *state, RegisGraphicsContext *context)
TRACE(("using display page number: %d\n", page)); TRACE(("using display page number: %d\n", page));
context->display_page = (unsigned) page; context->display_page = (unsigned) page;
map_regis_graphics_pages(context->display_graphic->xw, context); map_regis_graphics_pages(xw, context);
} }
break; break;
case 'T': case 'T':
@ -7433,12 +7514,6 @@ parse_regis_toplevel(RegisParseState *state, RegisGraphicsContext *context)
{ {
RegisDataFragment parenthesized; RegisDataFragment parenthesized;
char ch; char ch;
#if 0
TRACE(("reference line: shading=%d ref=%u loc=%d\n",
context->temporary_write_controls.shading_enabled,
context->temporary_write_controls.shading_reference_dim,
context->temporary_write_controls.shading_reference));
#endif
#ifdef DEBUG_PARSING #ifdef DEBUG_PARSING
TRACE(("parsing top level: char %u of %u (next char '%c')\n", TRACE(("parsing top level: char %u of %u (next char '%c')\n",
@ -7581,6 +7656,13 @@ parse_regis_toplevel(RegisParseState *state, RegisGraphicsContext *context)
return 0; return 0;
} }
void
reset_regis(void)
{
persistent_context.width = 0;
persistent_context.height = 0;
}
void void
parse_regis(XtermWidget xw, ANSI *params, char const *string) parse_regis(XtermWidget xw, ANSI *params, char const *string)
{ {

View file

@ -1,8 +1,8 @@
/* $XTermId: graphics_regis.h,v 1.2 2016/05/29 16:34:47 tom Exp $ */ /* $XTermId: graphics_regis.h,v 1.3 2023/07/07 20:10:32 tom Exp $ */
/* /*
* Copyright 2014,2016 by Ross Combs * Copyright 2014-2016,2023 by Ross Combs
* Copyright 2014,2016 by Thomas E. Dickey * Copyright 2014-2016,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -38,8 +38,10 @@
#include <ptyx.h> #include <ptyx.h>
#if OPT_REGIS_GRAPHICS #if OPT_REGIS_GRAPHICS
extern void reset_regis(void);
extern void parse_regis(XtermWidget /* xw */, ANSI */* params */, char const */* string */); extern void parse_regis(XtermWidget /* xw */, ANSI */* params */, char const */* string */);
#else #else
#define reset_regis() /* nothing */
#define parse_regis(xw, params, string) /* nothing */ #define parse_regis(xw, params, string) /* nothing */
#endif #endif

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,8 @@
/* $XTermId: graphics_sixel.h,v 1.4 2016/05/29 16:35:11 tom Exp $ */ /* $XTermId: graphics_sixel.h,v 1.9 2024/07/01 21:19:14 tom Exp $ */
/* /*
* Copyright 2014-2016,2024 by Thomas E. Dickey
* Copyright 2014,2016 by Ross Combs * Copyright 2014,2016 by Ross Combs
* Copyright 2014,2016 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -38,9 +38,9 @@
#include <ptyx.h> #include <ptyx.h>
#if OPT_SIXEL_GRAPHICS #if OPT_SIXEL_GRAPHICS
extern int parse_sixel(XtermWidget /* xw */, ANSI */* params */, char const */* string */); extern void parse_sixel_init(XtermWidget /* xw */, ANSI * /* params */);
#else extern void parse_sixel_char(char /* cp */);
#define parse_sixel(xw, params, string) /* nothing */ extern void parse_sixel_finished(void);
#endif #endif
/* *INDENT-ON* */ /* *INDENT-ON* */

View file

@ -1,7 +1,7 @@
/* $XTermId: input.c,v 1.369 2022/11/24 12:48:54 tom Exp $ */ /* $XTermId: input.c,v 1.370 2023/05/09 08:14:04 tom Exp $ */
/* /*
* Copyright 1999-2021,2022 by Thomas E. Dickey * Copyright 1999-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -1204,8 +1204,7 @@ Input(XtermWidget xw,
reply.a_param[0] = (ParmType) dec_code; reply.a_param[0] = (ParmType) dec_code;
reply.a_final = '~'; reply.a_final = '~';
} }
if (reply.a_final != 0 if (reply.a_nparam == 0 || reply.a_param[0] >= 0)
&& (reply.a_nparam == 0 || reply.a_param[0] >= 0))
unparseseq(xw, &reply); unparseseq(xw, &reply);
} }
key = True; key = True;

View file

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# $XTermId: koi8rxterm,v 1.6 2021/01/27 01:35:34 tom Exp $ # $XTermId: koi8rxterm,v 1.7 2023/05/03 23:59:22 tom Exp $
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# this file is part of xterm # this file is part of xterm
# #
# Copyright 2007,2021 by Thomas E. Dickey # Copyright 2007-2021,2023 by Thomas E. Dickey
# #
# All Rights Reserved # All Rights Reserved
# #
# Permission is hereby granted, free of charge, to any person obtaining a # Permission is hereby granted, free of charge, to any person obtaining a
@ -112,4 +112,4 @@ fi
# for testing: # for testing:
#test -f ./xterm && XTERM_PROGRAM=./xterm #test -f ./xterm && XTERM_PROGRAM=./xterm
exec "$XTERM_PROGRAM" -class KOI8RXTerm -title "$whoami" -k8 "$@" exec "$XTERM_PROGRAM" -class KOI8RXTerm -k8 "$@"

View file

@ -1,6 +1,6 @@
.\" $XTermId: koi8rxterm.man,v 1.8 2018/06/23 00:19:53 tom Exp $ .\" $XTermId: koi8rxterm.man,v 1.9 2024/01/11 21:55:09 tom Exp $
.\" .\"
.\" Copyright 2007-2012, 2018 Thomas E. Dickey .\" Copyright 2007-2018,2024 Thomas E. Dickey
.\" Copyright 2004 Branden Robinson .\" Copyright 2004 Branden Robinson
.\" .\"
.\" Permission is hereby granted, free of charge, to any person obtaining a .\" Permission is hereby granted, free of charge, to any person obtaining a
@ -24,16 +24,24 @@
.ds N Koi8rxterm .ds N Koi8rxterm
.ds n koi8rxterm .ds n koi8rxterm
.\" .\"
.ie \n(.g .ds AQ \(aq
.el .ds AQ '
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.\"
.TH KOI8RXTERM 1 "__app_date__" "__app_version__" "X Window System" .TH KOI8RXTERM 1 "__app_date__" "__app_version__" "X Window System"
.\"
.ie \n(.g \{\
.ds `` \(lq
.ds '' \(rq
.ds ' \(aq
.\}
.el \{\
.ie t .ds `` ``
.el .ds `` ""
.ie t .ds '' ''
.el .ds '' ""
.ie t .ds ' \(aq
.el .ds ' '
.\}
.SH NAME .SH NAME
koi8rxterm \- X terminal emulator for KOI8-R environments koi8rxterm \-
X terminal emulator for KOI8-R environments
.SH SYNOPSIS .SH SYNOPSIS
.B \*n .B \*n
[ [
@ -95,7 +103,7 @@ is available for Unicode UTF-8 environments.
.B LC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG .B LC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG
The values of these variables are checked, in order, to determine the The values of these variables are checked, in order, to determine the
character set used by the current locale. character set used by the current locale.
.SH AUTHOR .SH AUTHORS
.B \*n .B \*n
was written by Branden Robinson and is very heavily based on was written by Branden Robinson and is very heavily based on
.BR uxterm , .BR uxterm ,

View file

@ -1,7 +1,7 @@
/* $XTermId: linedata.c,v 1.102 2022/09/18 21:17:43 tom Exp $ */ /* $XTermId: linedata.c,v 1.106 2023/12/31 20:12:06 tom Exp $ */
/* /*
* Copyright 2009-2021,2022 by Thomas E. Dickey * Copyright 2009-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -91,6 +91,10 @@ copyLineData(LineData *dst, CLineData *src)
+ sizeof(dst->charData[0]) + sizeof(dst->charData[0])
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
+ sizeof(dst->combData[0][0]) * dst->combSize + sizeof(dst->combData[0][0]) * dst->combSize
#endif
#if OPT_DEC_RECTOPS
+ sizeof(dst->charSeen[0])
+ sizeof(dst->charSets[0])
#endif #endif
); );
@ -110,6 +114,10 @@ copyLineData(LineData *dst, CLineData *src)
dst->color[col] = src->color[col]; dst->color[col] = src->color[col];
#endif #endif
dst->charData[col] = src->charData[col]; dst->charData[col] = src->charData[col];
#if OPT_DEC_RECTOPS
dst->charSeen[col] = src->charSeen[col];
dst->charSets[col] = src->charSets[col];
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
for (comb = 0; comb < dst->combSize; ++comb) { for (comb = 0; comb < dst->combSize; ++comb) {
dst->combData[comb][col] = src->combData[comb][col]; dst->combData[comb][col] = src->combData[comb][col];
@ -122,6 +130,10 @@ copyLineData(LineData *dst, CLineData *src)
dst->color[col] = initCColor; dst->color[col] = initCColor;
#endif #endif
dst->charData[col] = 0; dst->charData[col] = 0;
#if OPT_DEC_RECTOPS
dst->charSeen[col] = 0;
dst->charSets[col] = 0;
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
for (comb = 0; comb < dst->combSize; ++comb) { for (comb = 0; comb < dst->combSize; ++comb) {
dst->combData[comb][col] = 0; dst->combData[comb][col] = 0;
@ -174,6 +186,10 @@ initLineData(XtermWidget xw)
TRACE((" offset(bufHead) %lu\n", (unsigned long) offsetof(LineData, bufHead))); TRACE((" offset(bufHead) %lu\n", (unsigned long) offsetof(LineData, bufHead)));
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
TRACE((" offset(combSize) %lu\n", (unsigned long) offsetof(LineData, combSize))); TRACE((" offset(combSize) %lu\n", (unsigned long) offsetof(LineData, combSize)));
#endif
#if OPT_DEC_RECTOPS
TRACE((" offset(*charSeen) %lu\n", (unsigned long) offsetof(LineData, charSeen)));
TRACE((" offset(*charSets) %lu\n", (unsigned long) offsetof(LineData, charSets)));
#endif #endif
TRACE((" offset(*attribs) %lu\n", (unsigned long) offsetof(LineData, attribs))); TRACE((" offset(*attribs) %lu\n", (unsigned long) offsetof(LineData, attribs)));
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
@ -190,6 +206,10 @@ initLineData(XtermWidget xw)
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
TRACE((" offset(combSize) %lu\n", (unsigned long) offsetof(CellData, combSize))); TRACE((" offset(combSize) %lu\n", (unsigned long) offsetof(CellData, combSize)));
#endif #endif
#if OPT_DEC_RECTOPS
TRACE((" offset(charSeen) %lu\n", (unsigned long) offsetof(CellData, charSeen)));
TRACE((" offset(charSets) %lu\n", (unsigned long) offsetof(CellData, charSets)));
#endif
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
TRACE((" offset(color) %lu\n", (unsigned long) offsetof(CellData, color))); TRACE((" offset(color) %lu\n", (unsigned long) offsetof(CellData, color)));
#endif #endif
@ -234,7 +254,10 @@ saveCellData(TScreen *screen,
if_OPT_ISO_COLORS(screen, { if_OPT_ISO_COLORS(screen, {
item->color = ld->color[column]; item->color = ld->color[column];
}); });
item->charData = ld->charData[column]; if_OPT_DEC_RECTOPS({
item->charSeen = ld->charSeen[column];
item->charData = ld->charData[column];
});
if_OPT_WIDE_CHARS(screen, { if_OPT_WIDE_CHARS(screen, {
size_t off; size_t off;
Bool blank = (((item->charData == HIDDEN_CHAR) Bool blank = (((item->charData == HIDDEN_CHAR)
@ -245,9 +268,13 @@ saveCellData(TScreen *screen,
&& (limits == NULL && (limits == NULL
|| (column + 1) >= limits->right))); || (column + 1) >= limits->right)));
if (blank) { if (blank) {
if_OPT_DEC_RECTOPS(item->charSeen = ' ');
item->charData = (CharData) ' '; item->charData = (CharData) ' ';
} }
item->combSize = blank ? 0 : ld->combSize; item->combSize = blank ? 0 : ld->combSize;
if_OPT_DEC_RECTOPS(item->charSets = (blank
? 0
: ld->charSets[column]));
for_each_combData(off, item) { for_each_combData(off, item) {
item->combData[off] = ld->combData[off][column]; item->combData[off] = ld->combData[off][column];
} }
@ -273,10 +300,15 @@ restoreCellData(TScreen *screen,
if_OPT_ISO_COLORS(screen, { if_OPT_ISO_COLORS(screen, {
ld->color[column] = item->color; ld->color[column] = item->color;
}); });
if_OPT_DEC_RECTOPS({
ld->charSeen[column] = item->charSeen;
ld->charSets[column] = item->charSets;
});
ld->charData[column] = item->charData; ld->charData[column] = item->charData;
if_OPT_WIDE_CHARS(screen, { if_OPT_WIDE_CHARS(screen, {
size_t off; size_t off;
ld->combSize = item->combSize; ld->combSize = item->combSize;
if_OPT_DEC_RECTOPS(ld->charSets[column] = item->charSets);
for_each_combData(off, ld) { for_each_combData(off, ld) {
ld->combData[off][column] = item->combData[off]; ld->combData[off][column] = item->combData[off];
} }

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
/* $XTermId: main.h,v 1.82 2022/11/21 22:28:35 tom Exp $ */ /* $XTermId: main.h,v 1.85 2023/10/22 10:34:12 tom Exp $ */
/* /*
* Copyright 2000-2021,2022 by Thomas E. Dickey * Copyright 2000-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -132,7 +132,7 @@
#endif #endif
#ifndef DEF_DISALLOWED_PASTE_CONTROLS #ifndef DEF_DISALLOWED_PASTE_CONTROLS
#define DEF_DISALLOWED_PASTE_CONTROLS "BS,DEL,ENQ,EOT,ESC,NUL" #define DEF_DISALLOWED_PASTE_CONTROLS "BS,DEL,ENQ,EOT,ESC,NUL,STTY"
#endif #endif
#ifndef DEF_DISALLOWED_TCAP #ifndef DEF_DISALLOWED_TCAP
@ -227,10 +227,26 @@
#define DEF_SCROLL_LINES 1 #define DEF_SCROLL_LINES 1
#endif #endif
#ifndef DEF_SL_CLOCK
#define DEF_SL_CLOCK 1000
#endif
#ifndef DEF_SL_COORDS
#define DEF_SL_COORDS 80
#endif
#ifndef DEF_SL_FORMAT #ifndef DEF_SL_FORMAT
#define DEF_SL_FORMAT "%{version%} %{position%} %{unixtime%}" #define DEF_SL_FORMAT "%{version%} %{position%} %{unixtime%}"
#endif #endif
#ifndef DEF_STRINGS_MAX
#if OPT_REGIS_GRAPHICS || OPT_SIXEL_GRAPHICS
#define DEF_STRINGS_MAX 600000
#else
#define DEF_STRINGS_MAX 20000
#endif
#endif
#ifndef DEF_TITLE_MODES #ifndef DEF_TITLE_MODES
#define DEF_TITLE_MODES 0 #define DEF_TITLE_MODES 0
#endif #endif

View file

@ -1,7 +1,7 @@
/* $XTermId: menu.c,v 1.370 2022/10/07 08:00:53 Ben.Wong Exp $ */ /* $XTermId: menu.c,v 1.375 2023/12/01 21:39:31 tom Exp $ */
/* /*
* Copyright 1999-2021,2022 by Thomas E. Dickey * Copyright 1999-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -55,6 +55,7 @@
#include <xterm.h> #include <xterm.h>
#include <data.h> #include <data.h>
#include <error.h>
#include <menu.h> #include <menu.h>
#include <fontutils.h> #include <fontutils.h>
#include <xstrings.h> #include <xstrings.h>
@ -696,7 +697,7 @@ create_menu(Widget w, XtermWidget xw, MenuIndex num)
toplevel, toplevel,
NULL, 0); NULL, 0);
TRACE(("created popupShell(%s) widget %p, window %#lx\n", TRACE(("created popupShell(%s) widget %p, window %#lx\n",
data->internal_name, list->w, XtWindow(list->w))); data->internal_name, (void *) list->w, XtWindow(list->w)));
#endif #endif
if (list->w != 0) { if (list->w != 0) {
Boolean *unused = unusedEntries(xw, num); Boolean *unused = unusedEntries(xw, num);
@ -1434,7 +1435,7 @@ do_quit(Widget gw GCC_UNUSED,
XtPointer closure GCC_UNUSED, XtPointer closure GCC_UNUSED,
XtPointer data GCC_UNUSED) XtPointer data GCC_UNUSED)
{ {
Cleanup(SIGHUP); Cleanup(ERROR_MISC);
} }
/* /*
@ -3754,6 +3755,7 @@ update_titeInhibit(void)
void void
update_activeicon(void) update_activeicon(void)
{ {
SetItemSensitivity(vtMenuEntries[vtMenu_activeicon].widget, False);
UpdateCheckbox("update_activeicon", UpdateCheckbox("update_activeicon",
vtMenuEntries, vtMenuEntries,
vtMenu_activeicon, vtMenu_activeicon,

View file

@ -1,9 +1,9 @@
#!/bin/sh #!/bin/sh
# $XTermId: minstall.in,v 1.27 2022/10/02 20:13:11 tom Exp $ # $XTermId: minstall.in,v 1.32 2023/10/08 21:11:07 tom Exp $
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# this file is part of xterm # this file is part of xterm
# #
# Copyright 2001-2021,2022 by Thomas E. Dickey # Copyright 2001-2022,2023 by Thomas E. Dickey
# #
# All Rights Reserved # All Rights Reserved
# #
@ -66,55 +66,23 @@ break
fi fi
done done
prefix=@prefix@
exec_prefix=@exec_prefix@
datarootdir=@datarootdir@
datadir=@datadir@
# get parameters # get parameters
MINSTALL="$1" MINSTALL="$1"
OLD_FILE="$2" OLD_FILE="$2"
END_FILE="$3" END_FILE="$3"
APPS_DIR="$4" APP_name="$4"
APP_TYPE="$5" USE_name="$5"
APP_name="$6"
USE_name="$7"
XPMS_DIR="$8"
suffix=`echo "$END_FILE" | sed -e 's%^.*\.%%'` suffix=`echo "$END_FILE" | sed -e 's%^.*\.%%'`
NEW_FILE=temp$$ NEW_FILE=temp$$
MY_MANSECT=$suffix MY_MANSECT=$suffix
# utmp and wtmp have different pathnames on different systems, but there
# 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=utmp
UTMP_PATH=/etc
for name in /etc /var/adm /var/run /var/log
do
if test -f $name/utmpx ; then
UTMP_NAME=utmpx
UTMP_PATH=$name
break
elif test -f $name/utmp ; then
UTMP_PATH=$name
break
fi
done
UTMP_PATH=$UTMP_PATH/$UTMP_NAME
WTMP_NAME=wtmp
WTMP_PATH=/etc
for name in /etc /var/adm /var/run /var/log
do
if test -f $name/wtmpx ; then
WTMP_NAME=wtmpx
WTMP_PATH=$name
break
elif test -f $name/wtmp ; then
WTMP_PATH=$name
break
fi
done
WTMP_PATH=$WTMP_PATH/$WTMP_NAME
lower=abcdefghijklmnopqrstuvwxyz lower=abcdefghijklmnopqrstuvwxyz
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
@ -157,15 +125,16 @@ sed -e 's%__vendorversion__%"X Window System"%' \
-e "s%__delete_is_del__%@delete_is_del@%" \ -e "s%__delete_is_del__%@delete_is_del@%" \
-e "s%__double_buffer__%@double_buffer@%" \ -e "s%__double_buffer__%@double_buffer@%" \
-e "s%__initial_erase__%@initial_erase@%" \ -e "s%__initial_erase__%@initial_erase@%" \
-e "s%__default_class__%$APP_TYPE%" \ -e "s%__default_class__%@APP_CLASS@%" \
-e "s%__apploaddir__%$APPS_DIR%" \ -e "s%__apploaddir__%@APPSDIR@%" \
-e "s%__mansuffix__%$MY_MANSECT%g" \ -e "s%__mansuffix__%$MY_MANSECT%g" \
-e "s%__miscmansuffix__%$X_MANSECT%g" \ -e "s%__miscmansuffix__%$X_MANSECT%g" \
-e "s%__pixmapsdir__%$XPMS_DIR%" \ -e "s%__pixmapsdir__%@PIXMAPDIR@%" \
-e 's%fIutmp\\%fI'$UTMP_NAME'\\%g' \ -e "s%__strings_max__%@STRINGS_MAX@%" \
-e "s%/etc/utmp%$UTMP_PATH%g" \ -e "s%__utmp_name__%@UTMP_NAME@%g" \
-e 's%fIwtmp\\%fI'$WTMP_NAME'\\%g' \ -e "s%__utmp_path__%@UTMP_PATH@%g" \
-e "s%/etc/wtmp%$WTMP_PATH%g" \ -e "s%__wtmp_name__%@WTMP_NAME@%g" \
-e "s%__wtmp_path__%@WTMP_PATH@%g" \
-e 's%/\\(\*\*%/*%g' \ -e 's%/\\(\*\*%/*%g' \
"$OLD_FILE" >$NEW_FILE "$OLD_FILE" >$NEW_FILE
# diff -u $OLD_FILE $NEW_FILE # diff -u $OLD_FILE $NEW_FILE

View file

@ -1,7 +1,7 @@
/* $XTermId: misc.c,v 1.1044 2023/01/07 01:11:16 tom Exp $ */ /* $XTermId: misc.c,v 1.1094 2024/06/26 08:05:39 tom Exp $ */
/* /*
* Copyright 1999-2022,2023 by Thomas E. Dickey * Copyright 1999-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -138,8 +138,6 @@
static Boolean xtermAllocColor(XtermWidget, XColor *, const char *); static Boolean xtermAllocColor(XtermWidget, XColor *, const char *);
static Cursor make_hidden_cursor(XtermWidget); static Cursor make_hidden_cursor(XtermWidget);
static char emptyString[] = "";
#if OPT_EXEC_XTERM #if OPT_EXEC_XTERM
/* Like readlink(2), but returns a malloc()ed buffer, or NULL on /* Like readlink(2), but returns a malloc()ed buffer, or NULL on
error; adapted from libc docs */ error; adapted from libc docs */
@ -308,14 +306,9 @@ do_xevents(XtermWidget xw)
TScreen *screen = TScreenOf(xw); TScreen *screen = TScreenOf(xw);
if (xtermAppPending() if (xtermAppPending()
|| || GetBytesAvailable(screen->display) > 0) {
#if defined(VMS) || defined(__VMS)
screen->display->qlen > 0
#else
GetBytesAvailable(ConnectionNumber(screen->display)) > 0
#endif
)
xevents(xw); xevents(xw);
}
} }
void void
@ -1346,7 +1339,7 @@ AtomBell(XtermWidget xw, int which)
for (n = 0; n < XtNumber(table); ++n) { for (n = 0; n < XtNumber(table); ++n) {
if (table[n].value == which) { if (table[n].value == which) {
result = XInternAtom(XtDisplay(xw), table[n].name, False); result = CachedInternAtom(XtDisplay(xw), table[n].name);
break; break;
} }
} }
@ -1780,10 +1773,11 @@ xtermDeiconify(XtermWidget xw)
Display *dpy = screen->display; Display *dpy = screen->display;
Window target = VShellWindow(xw); Window target = VShellWindow(xw);
XEvent e; XEvent e;
Atom atom_state = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False); Atom atom_state = CachedInternAtom(dpy, "_NET_ACTIVE_WINDOW");
if (xtermIsIconified(xw)) { if (xtermIsIconified(xw)) {
TRACE(("...de-iconify window %#lx\n", target)); TRACE(("...de-iconify window %#lx\n", target));
ResetHiddenHint(xw);
XMapWindow(dpy, target); XMapWindow(dpy, target);
memset(&e, 0, sizeof(e)); memset(&e, 0, sizeof(e));
@ -1833,8 +1827,8 @@ xtermIsIconified(XtermWidget xw)
unsigned char *prop_return = 0; unsigned char *prop_return = 0;
long long_length = 1024; long long_length = 1024;
Atom requested_type = XA_ATOM; Atom requested_type = XA_ATOM;
Atom is_hidden = XInternAtom(dpy, "_NET_WM_STATE_HIDDEN", False); Atom is_hidden = CachedInternAtom(dpy, "_NET_WM_STATE_HIDDEN");
Atom wm_state = XInternAtom(dpy, "_NET_WM_STATE", False); Atom wm_state = CachedInternAtom(dpy, "_NET_WM_STATE");
/* this works with non-EWMH */ /* this works with non-EWMH */
result = (win_attrs.map_state != IsViewable) ? True : False; result = (win_attrs.map_state != IsViewable) ? True : False;
@ -2484,9 +2478,11 @@ GenerateLogPath(void)
} }
} }
#else #else
static const char log_def_name[] = "XtermLog.XXXXXX"; {
if ((log_default = x_strdup(log_def_name)) != NULL) { static const char log_def_name[] = "XtermLog.XXXXXX";
MakeTemp(log_default); if ((log_default = x_strdup(log_def_name)) != NULL) {
MakeTemp(log_default);
}
} }
#endif #endif
@ -3482,7 +3478,7 @@ xtermIsPrintable(XtermWidget xw, Char **bufp, Char *last)
PtyData data; PtyData data;
if (decodeUtf8(screen, fakePtyData(&data, cp, last))) { if (decodeUtf8(screen, fakePtyData(&data, cp, last))) {
if (data.utf_data != UCS_REPL if (!is_UCS_SPECIAL(data.utf_data)
&& (data.utf_data >= 128 || && (data.utf_data >= 128 ||
ansi_table[data.utf_data] == CASE_PRINT)) { ansi_table[data.utf_data] == CASE_PRINT)) {
next += (data.utf_size - 1); next += (data.utf_size - 1);
@ -4462,7 +4458,7 @@ parse_decudk(XtermWidget xw, const char *cp)
* Parse numeric parameters. Normally we use a state machine to simplify * Parse numeric parameters. Normally we use a state machine to simplify
* interspersing with control characters, but have the string already. * interspersing with control characters, but have the string already.
*/ */
static void void
parse_ansi_params(ANSI *params, const char **string) parse_ansi_params(ANSI *params, const char **string)
{ {
const char *cp = *string; const char *cp = *string;
@ -4615,7 +4611,6 @@ parse_decdld(ANSI *params, const char *string)
#define parse_decdld(p,q) /* nothing */ #define parse_decdld(p,q) /* nothing */
#endif #endif
#if OPT_DEC_RECTOPS
static const char * static const char *
skip_params(const char *cp) skip_params(const char *cp)
{ {
@ -4624,9 +4619,11 @@ skip_params(const char *cp)
return cp; return cp;
} }
#if OPT_MOD_FKEYS || OPT_DEC_RECTOPS || (OPT_VT525_COLORS && OPT_ISO_COLORS)
static int static int
parse_int_param(const char **cp) parse_int_param(const char **cp)
{ {
Boolean found = False;
int result = 0; int result = 0;
const char *s = *cp; const char *s = *cp;
while (*s != '\0') { while (*s != '\0') {
@ -4635,15 +4632,18 @@ parse_int_param(const char **cp)
break; break;
} else if (*s >= '0' && *s <= '9') { } else if (*s >= '0' && *s <= '9') {
result = (result * 10) + (*s++ - '0'); result = (result * 10) + (*s++ - '0');
found = True;
} else { } else {
s += strlen(s); s += strlen(s);
} }
} }
TRACE(("parse-int %s ->%d, %#x->%s\n", *cp, result, result, s)); TRACE(("parse-int \"%s\" ->%d, %#x->\"%s\"\n", *cp, result, result, s));
*cp = s; *cp = s;
return result; return found ? result : -1;
} }
#endif
#if OPT_DEC_RECTOPS
static int static int
parse_chr_param(const char **cp) parse_chr_param(const char **cp)
{ {
@ -4658,11 +4658,17 @@ parse_chr_param(const char **cp)
} }
} }
} }
TRACE(("parse-chr %s ->%d, %#x->%s\n", *cp, result, result, s)); TRACE(("parse-chr %s ->%#x, %#x->%s\n", *cp, result, result, s));
*cp = s; *cp = s;
return result; return result;
} }
#if OPT_TRACE
#define done_DECCIR() do { TRACE(("...quit DECCIR @%d\n", __LINE__)); return; } while(0)
#else
#define done_DECCIR() return
#endif
static void static void
restore_DECCIR(XtermWidget xw, const char *cp) restore_DECCIR(XtermWidget xw, const char *cp)
{ {
@ -4671,22 +4677,33 @@ restore_DECCIR(XtermWidget xw, const char *cp)
/* row */ /* row */
if ((value = parse_int_param(&cp)) <= 0 || value > MaxRows(screen)) if ((value = parse_int_param(&cp)) <= 0 || value > MaxRows(screen))
return; done_DECCIR();
screen->cur_row = (value - 1); screen->cur_row = (value - 1);
/* column */ /* column */
if ((value = parse_int_param(&cp)) <= 0 || value > MaxCols(screen)) if ((value = parse_int_param(&cp)) <= 0 || value > MaxCols(screen))
return; done_DECCIR();
screen->cur_col = (value - 1); screen->cur_col = (value - 1);
/* page */ /* page */
if (parse_int_param(&cp) != 1) if (parse_int_param(&cp) != 1)
return; done_DECCIR();
/* rendition */ /* rendition */
if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40) if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40) {
return; if (value & 0x10) {
/*
* VT420 is documented for bit 5 always reset; VT520/VT525 are not
* documented, but do use the bit for setting invisible mode.
*/
if (screen->vtXX_level <= 4)
done_DECCIR();
} else if (!(value & 0x40)) {
done_DECCIR();
}
}
UIntClr(xw->flags, (INVERSE | BLINK | UNDERLINE | BOLD)); UIntClr(xw->flags, (INVERSE | BLINK | UNDERLINE | BOLD));
xw->flags |= (value & 16) ? INVISIBLE : 0;
xw->flags |= (value & 8) ? INVERSE : 0; xw->flags |= (value & 8) ? INVERSE : 0;
xw->flags |= (value & 4) ? BLINK : 0; xw->flags |= (value & 4) ? BLINK : 0;
xw->flags |= (value & 2) ? UNDERLINE : 0; xw->flags |= (value & 2) ? UNDERLINE : 0;
@ -4694,38 +4711,39 @@ restore_DECCIR(XtermWidget xw, const char *cp)
/* attributes */ /* attributes */
if (((value = parse_chr_param(&cp)) & 0xfe) != 0x40) if (((value = parse_chr_param(&cp)) & 0xfe) != 0x40)
return; done_DECCIR();
screen->protected_mode &= ~DEC_PROTECT; screen->protected_mode &= ~DEC_PROTECT;
screen->protected_mode |= (value & 1) ? DEC_PROTECT : 0; screen->protected_mode |= (value & 1) ? DEC_PROTECT : 0;
/* flags */ /* flags */
if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40) if (((value = parse_chr_param(&cp)) & 0xf0) != 0x40)
return; done_DECCIR();
screen->do_wrap = (value & 8) ? True : False; screen->do_wrap = (value & 8) ? True : False;
screen->curss = (Char) ((value & 4) ? 3 : ((value & 2) ? 2 : 0)); screen->curss = (Char) ((value & 4) ? 3 : ((value & 2) ? 2 : 0));
UIntClr(xw->flags, ORIGIN); UIntClr(xw->flags, ORIGIN);
xw->flags |= (value & 1) ? ORIGIN : 0; xw->flags |= (value & 1) ? ORIGIN : 0;
if ((value = (parse_chr_param(&cp) - '0')) < 0 || value >= NUM_GSETS) if ((value = (parse_chr_param(&cp) - '0')) < 0 || value >= NUM_GSETS)
return; done_DECCIR();
screen->curgl = (Char) value; screen->curgl = (Char) value;
if ((value = (parse_chr_param(&cp) - '0')) < 0 || value >= NUM_GSETS) if ((value = (parse_chr_param(&cp) - '0')) < 0 || value >= NUM_GSETS)
return; done_DECCIR();
screen->curgr = (Char) value; screen->curgr = (Char) value;
/* character-set size */ /* character-set size */
if (parse_chr_param(&cp) != 0x4f) /* works for xterm */ if (parse_chr_param(&cp) == 0xffff) /* FIXME: limit SCS? */
return; done_DECCIR();
/* SCS designators */ /* SCS designators */
for (value = 0; value < NUM_GSETS; ++value) { for (value = 0; value < NUM_GSETS; ++value) {
if (*cp == '%') { if (*cp == '\0') {
xtermDecodeSCS(xw, value, 0, '%', *++cp); done_DECCIR();
} else if (*cp != '\0') { } else if (strchr("%&\"", *cp) != NULL) {
xtermDecodeSCS(xw, value, 0, '\0', *cp); int prefix = *cp++;
xtermDecodeSCS(xw, value, 0, prefix, *cp);
} else { } else {
return; xtermDecodeSCS(xw, value, 0, '\0', *cp);
} }
cp++; cp++;
} }
@ -4747,10 +4765,8 @@ restore_DECTABSR(XtermWidget xw, const char *cp)
--stop; --stop;
if (OkTAB(stop)) { if (OkTAB(stop)) {
TabSet(xw->tabs, stop); TabSet(xw->tabs, stop);
stop = 0;
} else {
fail = True;
} }
stop = 0;
} else { } else {
fail = True; fail = True;
} }
@ -4762,7 +4778,116 @@ restore_DECTABSR(XtermWidget xw, const char *cp)
TRACE(("...done DECTABSR\n")); TRACE(("...done DECTABSR\n"));
} }
#endif #endif /* OPT_DEC_RECTOPS */
/*
* VT510 and VT520 reference manual have the same explanation for Pn (params),
* but it does not agree with the possible values for Dscs because it refers
* to "ISO Latin-7" (ISO 8859-13 aka "Baltic Rim"), and omits ISO Greek
* (ISO 8859-7):
*
* ------------------------------------------------------------------------
* Pn Meaning
* ------------------------------------------------------------------------
* 0 DEC, ISO Latin-1, ISO Latin-2
* 1 ISO Latin-5, ISO Latin-7, ISO Cyrillic, ISO Hebrew
* ------------------------------------------------------------------------
*
* versus
*
* ------------------------------------------------------------------------
* Dscs Character Set
* ------------------------------------------------------------------------
* %5 DEC Supplemental
* "? DEC Greek
* "4 DEC Hebrew
* %0 DEC Turkish
* &4 DEC Cyrillic
* < User-preferred Supplemental
* A ISO Latin-1 Supplemental
* B ISO Latin-2 Supplemental
* F ISO Greek Supplemental
* H ISO Hebrew Supplemental
* M ISO Latin-5 Supplemental
* L ISO Latin-Cyrillic
* ------------------------------------------------------------------------
*
* DEC 070, page 5-123 explains that Pn ("Ps" in the text) selects 94 or 96
* character sets (0 or 1, respectively), and on the next page states that
* the valid combinations are 0 (DEC Supplemental) and 1 (ISO Latin-1
* supplemental). The document comments in regard to LS0 that (applications)
* should not assume that they can use 96-character sets for G0, but that it
* is possible to do this using UPSS.
*
* The VT510/VT520 reference manuals under SCS Select Character Set show
* a list of 94- and 96-character sets with "DEC" and "NRCS" as 94-characters,
* and the "ISO" as 96-characters. A few 94-character sets are added, based
* on testing VT520/VT525 that shows that DEC Special Graphics also is allowed.
*/
static Bool
decode_upss(XtermWidget xw, const char *cp, char psarg, DECNRCM_codes * upss)
{
/* *INDENT-OFF* */
static const struct {
DECNRCM_codes code;
int params; /* 0 for 94-characters, 1 for 96-characters */
int prefix;
int suffix;
int min_level;
int max_level;
} upss_table[] = {
{ DFT_UPSS, 0, '%', '5', 3, 9 },
{ nrc_ASCII, 0, 0, 'A', 1, 9 }, /* undocumented */
{ nrc_DEC_Spec_Graphic, 0, 0, '0', 1, 9 }, /* undocumented */
{ nrc_DEC_Technical, 0, 0, '>', 3, 9 }, /* undocumented */
{ nrc_DEC_Greek_Supp, 0, '"', '?', 5, 9 },
{ nrc_DEC_Hebrew_Supp, 0, '"', '4', 5, 9 },
{ nrc_DEC_Turkish_Supp, 0, '%', '0', 5, 9 },
{ nrc_DEC_Cyrillic, 0, '&', '4', 5, 9 },
{ ALT_UPSS, 1, 0, 'A', 3, 9 },
{ nrc_ISO_Latin_2_Supp, 1, 0, 'B', 5, 9 },
{ nrc_ISO_Greek_Supp, 1, 0, 'F', 5, 9 },
{ nrc_ISO_Hebrew_Supp, 1, 0, 'H', 5, 9 },
{ nrc_ISO_Latin_5_Supp, 1, 0, 'M', 5, 9 },
{ nrc_ISO_Latin_Cyrillic, 1, 0, 'L', 5, 9 },
};
/* *INDENT-ON* */
TScreen *screen = TScreenOf(xw);
Bool result = False;
*upss = nrc_ASCII;
if (screen->vtXX_level >= 3) {
Cardinal n;
for (n = 0; n < XtNumber(upss_table); ++n) {
if (((int) psarg - '0') != upss_table[n].params)
continue;
if (cp[1] == '\0') {
if (upss_table[n].suffix != cp[0])
continue;
} else if (cp[2] == '\0') {
if (upss_table[n].prefix != cp[0])
continue;
if (upss_table[n].suffix != cp[1])
continue;
} else {
continue;
}
result = True;
*upss = upss_table[n].code;
if (*upss == DFT_UPSS) {
TRACE(("DECAUPSS (default)\n"));
} else if (*upss == ALT_UPSS) {
TRACE(("DECAUPSS (alternate)\n"));
}
break;
}
TRACE(("DECAUPSS %ssuccessful %s\n",
result ? "" : "not ", visibleScsCode(*upss)));
}
return result;
}
void void
do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen) do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
@ -4772,8 +4897,12 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
const char *cp = (const char *) dcsbuf; const char *cp = (const char *) dcsbuf;
Bool okay; Bool okay;
ANSI params; ANSI params;
#if OPT_DEC_RECTOPS
char psarg = '0'; char psarg = '0';
#if OPT_VT525_COLORS && OPT_ISO_COLORS
const char *cp2;
#endif
#if (OPT_VT525_COLORS && OPT_ISO_COLORS) || OPT_MOD_FKEYS
int ival;
#endif #endif
TRACE(("do_dcs(%s:%lu)\n", (char *) dcsbuf, (unsigned long) dcslen)); TRACE(("do_dcs(%s:%lu)\n", (char *) dcsbuf, (unsigned long) dcslen));
@ -4863,13 +4992,80 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
screen->status_type, screen->status_type,
cp); cp);
} else } else
#endif
#if OPT_DEC_RECTOPS
if (!strcmp(cp, "*x")) { /* DECSACE */
TRACE(("reply DECSACE\n"));
sprintf(reply, "%d%s",
screen->cur_decsace,
cp);
} else
#endif #endif
if (!strcmp(cp, "*|")) { /* DECSNLS */ if (!strcmp(cp, "*|")) { /* DECSNLS */
TRACE(("reply DECSNLS\n")); TRACE(("reply DECSNLS\n"));
sprintf(reply, "%d%s", sprintf(reply, "%d%s",
screen->max_row + 1, screen->max_row + 1,
cp); cp);
} else { } else
#if OPT_VT525_COLORS && OPT_ISO_COLORS
if (screen->terminal_id == 525
&& !strcmp((cp2 = skip_params(cp)), ",}")) { /* DECATC */
ival = parse_int_param(&cp);
TRACE(("reply DECATC:%s\n", cp));
if (ival >= 0 && ival < 16 && *cp2 == ',') {
sprintf(reply, "%d;%d;%d%s", ival,
screen->alt_colors[ival].fg,
screen->alt_colors[ival].bg,
cp2);
} else {
okay = False;
}
} else if (screen->terminal_id == 525
&& !strcmp((cp2 = skip_params(cp)), ",|")) { /* DECAC */
ival = parse_int_param(&cp);
TRACE(("reply DECAC\n"));
switch (ival) {
case 1: /* normal text */
sprintf(reply, "%d,%d%s",
screen->assigned_fg,
screen->assigned_bg,
cp2);
break;
case 2: /* window frame (not implemented) */
/* FALLTHRU */
default:
okay = False;
break;
}
} else
#endif
#if OPT_MOD_FKEYS
if (*cp == '>' && !strcmp(skip_params(1 + cp), "m")) { /* XTQMODKEYS */
++cp;
okay = True;
ival = parse_int_param(&cp);
#define GET_MOD_FKEYS(field) xw->keyboard.modify_now.field
#define FMT_MOD_FKEYS(field) sprintf(reply, ">%d;%dm", ival, GET_MOD_FKEYS(field))
switch (ival) {
case 0:
FMT_MOD_FKEYS(allow_keys);
break;
case 1:
FMT_MOD_FKEYS(cursor_keys);
break;
case 2:
FMT_MOD_FKEYS(function_keys);
break;
case 4:
FMT_MOD_FKEYS(other_keys);
break;
default:
okay = False;
break;
}
} else
#endif
{
okay = False; okay = False;
} }
@ -4935,7 +5131,7 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
unparseputn(xw, xw->rgb_widths[0]); unparseputn(xw, xw->rgb_widths[0]);
} else { } else {
char temp[1024]; char temp[1024];
sprintf(temp, "%d/%d/%d", sprintf(temp, "%u/%u/%u",
xw->rgb_widths[0], xw->rgb_widths[0],
xw->rgb_widths[1], xw->rgb_widths[1],
xw->rgb_widths[2]); xw->rgb_widths[2]);
@ -4988,6 +5184,7 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
break; /* no data found, error */ break; /* no data found, error */
} }
if ((cp - parsed) > 1024) { if ((cp - parsed) > 1024) {
free(name);
break; /* ignore improbable resource */ break; /* ignore improbable resource */
} }
TRACE(("query-feature '%s'\n", name)); TRACE(("query-feature '%s'\n", name));
@ -5032,8 +5229,25 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
#endif #endif
} }
break; break;
#if OPT_DEC_RECTOPS case '0':
/* FALLTHRU */
case '1': case '1':
if (screen->vtXX_level >= 3 && *skip_params(cp) == '!') {
DECNRCM_codes upss;
psarg = *cp++;
if (*cp++ == '!' && *cp++ == 'u') {
#if OPT_WIDE_CHARS
if (screen->wide_chars && screen->utf8_mode) {
; /* EMPTY */
} else
#endif
if (decode_upss(xw, cp, psarg, &upss)) {
screen->gsets_upss = upss;
}
}
break;
}
#if OPT_DEC_RECTOPS
/* FALLTHRU */ /* FALLTHRU */
case '2': case '2':
if (*skip_params(cp) == '$') { if (*skip_params(cp) == '$') {
@ -5058,7 +5272,6 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
/* FALLTHRU */ /* FALLTHRU */
default: default:
if (optRegisGraphics(screen) || if (optRegisGraphics(screen) ||
optSixelGraphics(screen) ||
screen->vtXX_level >= 2) { /* VT220 */ screen->vtXX_level >= 2) { /* VT220 */
parse_ansi_params(&params, &cp); parse_ansi_params(&params, &cp);
switch (params.a_final) { switch (params.a_final) {
@ -5071,14 +5284,7 @@ do_dcs(XtermWidget xw, Char *dcsbuf, size_t dcslen)
TRACE(("ignoring ReGIS graphic (compilation flag not enabled)\n")); TRACE(("ignoring ReGIS graphic (compilation flag not enabled)\n"));
#endif #endif
break; break;
case 'q': /* sixel */ case 'q': /* sixel is done in charproc.c */
#if OPT_SIXEL_GRAPHICS
if (optSixelGraphics(screen)) {
(void) parse_sixel(xw, &params, cp);
}
#else
TRACE(("ignoring sixel graphic (compilation flag not enabled)\n"));
#endif
break; break;
case '|': /* DECUDK */ case '|': /* DECUDK */
if (screen->vtXX_level >= 2) { /* VT220 */ if (screen->vtXX_level >= 2) { /* VT220 */
@ -5304,6 +5510,9 @@ do_dec_rqm(XtermWidget xw, int nparams, int *params)
if_PRINT_GRAPHICS2(result = MdBool(screen->graphics_print_color_syntax)) if_PRINT_GRAPHICS2(result = MdBool(screen->graphics_print_color_syntax))
result = MdFlag(xw->flags, REVERSEWRAP); result = MdFlag(xw->flags, REVERSEWRAP);
break; break;
case srm_REVERSEWRAP2: /* extended reverse wraparound */
result = MdFlag(xw->flags, REVERSEWRAP2);
break;
#if defined(ALLOWLOGGING) #if defined(ALLOWLOGGING)
case srm_ALLOWLOGGING: /* logging */ case srm_ALLOWLOGGING: /* logging */
if_PRINT_GRAPHICS2(result = MdBool(screen->graphics_print_background_mode)) if_PRINT_GRAPHICS2(result = MdBool(screen->graphics_print_background_mode))
@ -5429,6 +5638,9 @@ do_dec_rqm(XtermWidget xw, int nparams, int *params)
case srm_SAVE_CURSOR: case srm_SAVE_CURSOR:
result = MdBool(screen->sc[screen->whichBuf].saved); result = MdBool(screen->sc[screen->whichBuf].saved);
break; break;
case srm_FAST_SCROLL:
result = MdBool(screen->fastscroll);
break;
#if OPT_TCAP_FKEYS #if OPT_TCAP_FKEYS
case srm_TCAP_FKEYS: case srm_TCAP_FKEYS:
result = MdBool(xw->keyboard.type == keyboardIsTermcap); result = MdBool(xw->keyboard.type == keyboardIsTermcap);
@ -5489,6 +5701,35 @@ do_dec_rqm(XtermWidget xw, int nparams, int *params)
result = MdBool(screen->sixel_scrolls_right); result = MdBool(screen->sixel_scrolls_right);
break; break;
#endif #endif
case srm_DECARSM: /* ignore */
case srm_DECATCBM: /* ignore */
case srm_DECATCUM: /* ignore */
case srm_DECBBSM: /* ignore */
case srm_DECCAAM: /* ignore */
case srm_DECCANSM: /* ignore */
case srm_DECCAPSLK: /* ignore */
case srm_DECCRTSM: /* ignore */
case srm_DECECM: /* ignore */
case srm_DECFWM: /* ignore */
case srm_DECHCCM: /* ignore */
case srm_DECHDPXM: /* ignore */
case srm_DECHEM: /* ignore */
case srm_DECHWUM: /* ignore */
case srm_DECIPEM: /* ignore */
case srm_DECKBUM: /* ignore */
case srm_DECKLHIM: /* ignore */
case srm_DECKPM: /* ignore */
case srm_DECRLM: /* ignore */
case srm_DECMCM: /* ignore */
case srm_DECNAKB: /* ignore */
case srm_DECNULM: /* ignore */
case srm_DECNUMLK: /* ignore */
case srm_DECOSCNM: /* ignore */
case srm_DECPCCM: /* ignore */
case srm_DECRLCM: /* ignore */
case srm_DECRPL: /* ignore */
case srm_DECVCCM: /* ignore */
case srm_DECXRLM: /* ignore */
default: default:
TRACE(("DATA_ERROR: requested report for unknown private mode %d\n", TRACE(("DATA_ERROR: requested report for unknown private mode %d\n",
params[0])); params[0]));
@ -5914,7 +6155,9 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value)
char *buf = 0; char *buf = 0;
XtSetArg(args[0], my_attr, &buf); XtSetArg(args[0], my_attr, &buf);
XtGetValues(top, args, 1); XtGetValues(top, args, 1);
TRACE(("...comparing{%s}\n", NonNull(buf))); TRACE(("...comparing resource{%s} to new value{%s}\n",
NonNull(buf),
NonNull(value)));
if (buf != 0 && strcmp(value, buf) == 0) if (buf != 0 && strcmp(value, buf) == 0)
changed = False; changed = False;
} }
@ -5932,7 +6175,7 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value)
const char *propname = (!strcmp(my_attr, XtNtitle) const char *propname = (!strcmp(my_attr, XtNtitle)
? "_NET_WM_NAME" ? "_NET_WM_NAME"
: "_NET_WM_ICON_NAME"); : "_NET_WM_ICON_NAME");
Atom my_atom = XInternAtom(dpy, propname, False); Atom my_atom = CachedInternAtom(dpy, propname);
if (my_atom != None) { if (my_atom != None) {
changed = True; changed = True;
@ -5997,9 +6240,6 @@ ChangeGroup(XtermWidget xw, const char *attribute, char *value)
void void
ChangeIconName(XtermWidget xw, char *name) ChangeIconName(XtermWidget xw, char *name)
{ {
if (name == 0) {
name = emptyString;
}
if (!showZIconBeep(xw, name)) if (!showZIconBeep(xw, name))
ChangeGroup(xw, XtNiconName, name); ChangeGroup(xw, XtNiconName, name);
} }
@ -6023,7 +6263,7 @@ ChangeXprop(char *buf)
if (pchEndPropName) if (pchEndPropName)
*pchEndPropName = '\0'; *pchEndPropName = '\0';
aprop = XInternAtom(dpy, buf, False); aprop = CachedInternAtom(dpy, buf);
if (pchEndPropName == NULL) { if (pchEndPropName == NULL) {
/* no "=value" given, so delete the property */ /* no "=value" given, so delete the property */
XDeleteProperty(dpy, w, aprop); XDeleteProperty(dpy, w, aprop);
@ -6581,7 +6821,7 @@ xt_error(String message)
if (x_getenv("DISPLAY") == 0) { if (x_getenv("DISPLAY") == 0) {
xtermWarning("DISPLAY is not set\n"); xtermWarning("DISPLAY is not set\n");
} }
exit(1); exit(ERROR_MISC);
} }
int int
@ -7593,6 +7833,90 @@ xtermSetWinSize(XtermWidget xw)
} }
} }
static void
xtermInitTitle(TScreen *screen, int which)
{
TRACE(("xtermInitTitle #%d\n", which));
screen->saved_titles.data[which].iconName = NULL;
screen->saved_titles.data[which].windowName = NULL;
}
/*
* Store/update an item on the title stack.
*/
void
xtermPushTitle(TScreen *screen, int which, SaveTitle * item)
{
if (which-- <= 0) {
which = screen->saved_titles.used++;
screen->saved_titles.used %= MAX_SAVED_TITLES;
}
which %= MAX_SAVED_TITLES;
xtermFreeTitle(&screen->saved_titles.data[which]);
screen->saved_titles.data[which] = *item;
TRACE(("xtermPushTitle #%d: icon='%s', window='%s'\n", which,
NonNull(item->iconName),
NonNull(item->windowName)));
}
/*
* Pop/retrieve an item from the title stack.
*/
Boolean
xtermPopTitle(TScreen *screen, int which, SaveTitle * item)
{
Boolean result = True;
Boolean popped = False;
if (which-- > 0) {
which %= MAX_SAVED_TITLES;
} else if (screen->saved_titles.used > 0) {
which = ((--(screen->saved_titles.used) + MAX_SAVED_TITLES) % MAX_SAVED_TITLES);
popped = True;
} else {
result = False;
}
if (result) {
*item = screen->saved_titles.data[which];
TRACE(("xtermPopTitle #%d: icon='%s', window='%s'\n", which,
NonNull(item->iconName),
NonNull(item->windowName)));
/* if the data is incomplete, try to get it from the next levels */
#define TryHigher(name) \
if (item->name == NULL) { \
int n; \
for (n = 1; n < MAX_SAVED_TITLES; ++n) { \
int nw = ((which - n) + MAX_SAVED_TITLES) % MAX_SAVED_TITLES; \
if ((item->name = screen->saved_titles.data[nw].name) != NULL) { \
item->name = x_strdup(item->name); \
break; \
} \
} \
}
TryHigher(iconName);
TryHigher(windowName);
if (popped) {
xtermInitTitle(screen, which);
}
}
return result;
}
/*
* Discard data used for pushing or popping title.
*/
void
xtermFreeTitle(SaveTitle * item)
{
TRACE(("xtermFreeTitle icon='%s', window='%s'\n",
NonNull(item->iconName),
NonNull(item->windowName)));
FreeAndNull(item->iconName);
FreeAndNull(item->windowName);
}
#if OPT_XTERM_SGR #if OPT_XTERM_SGR
#if OPT_TRACE #if OPT_TRACE

View file

@ -1,3 +1,93 @@
xterm-dev (393) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Sat, 25 May 2024 09:03:00 -0400
xterm-dev (392) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Wed, 15 May 2024 16:52:03 -0400
xterm-dev (391) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Tue, 16 Apr 2024 03:51:06 -0400
xterm-dev (390) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Thu, 11 Jan 2024 16:18:30 -0500
xterm-dev (389) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Sun, 12 Nov 2023 16:48:50 -0500
xterm-dev (388) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Fri, 20 Oct 2023 16:43:09 -0400
xterm-dev (387) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Tue, 10 Oct 2023 20:02:59 -0400
xterm-dev (386) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Mon, 02 Oct 2023 17:19:01 -0400
xterm-dev (385) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Thu, 13 Jul 2023 14:57:11 -0400
xterm-dev (384) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Thu, 29 Jun 2023 18:22:58 -0400
xterm-dev (383) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Wed, 31 May 2023 13:04:55 -0400
xterm-dev (382) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Mon, 29 May 2023 07:15:40 -0400
xterm-dev (381) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Sun, 28 May 2023 04:34:22 -0400
xterm-dev (380) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Sun, 26 Feb 2023 20:00:24 -0500
xterm-dev (379) unstable; urgency=low
* maintenance updates
-- Thomas E. Dickey <dickey@invisible-island.net> Tue, 24 Jan 2023 20:14:44 -0500
xterm-dev (378) unstable; urgency=low xterm-dev (378) unstable; urgency=low
* maintenance updates * maintenance updates

View file

@ -1 +1 @@
10 12

View file

@ -35,7 +35,7 @@ authorization.
Files: * */* Files: * */*
License: MIT-X11 License: MIT-X11
Copyright 1996-2022,2023 by Thomas E. Dickey Copyright 1996-2023,2024 by Thomas E. Dickey
(date ranges vary, depending on when the respective files were first changed (date ranges vary, depending on when the respective files were first changed
significantly, and run through the most recent change date). significantly, and run through the most recent change date).

View file

@ -109,7 +109,7 @@ install: install-stamp
install-stamp: build-stamp install-stamp: build-stamp
dh_testdir dh_testdir
dh_testroot dh_testroot
dh_clean -k dh_prep
dh_installdirs dh_installdirs
$(MAKE) install \ $(MAKE) install \
@ -123,8 +123,8 @@ install-indep:
install-arch: install-arch:
dh_testdir dh_testdir
dh_testroot dh_testroot
dh_prep -s dh_prep -a
dh_installdirs -s dh_installdirs -a
$(MAKE) install-bin \ $(MAKE) install-bin \
DESTDIR=$(DSTDIR) DESTDIR=$(DSTDIR)

View file

@ -4,22 +4,4 @@
xterm-dev: command-in-menu-file-and-desktop-file xterm-dev usr/share/menu/xterm-dev:7 xterm-dev: command-in-menu-file-and-desktop-file xterm-dev usr/share/menu/xterm-dev:7
xterm-dev: command-in-menu-file-and-desktop-file uxterm-dev usr/share/menu/xterm-dev:14 xterm-dev: command-in-menu-file-and-desktop-file uxterm-dev usr/share/menu/xterm-dev:14
# The lintian warning is incorrect: there is no portable path for Perl.
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906901
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=904409
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/256colors.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/256colors2.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/88colors.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/88colors2.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/closest-rgb.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/dynamic.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/paste64.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/query-color.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/query-fonts.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/query-status.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/report-sgr.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/resize.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/sgrPushPop.pl (#!/usr/bin/env != /usr/bin/perl)
xterm-dev: wrong-path-for-interpreter usr/share/doc/xterm-dev/examples/vttests/tcapquery.pl (#!/usr/bin/env != /usr/bin/perl)
# vile: confmode # vile: confmode

View file

@ -1,4 +1,4 @@
# $XTermId: Makefile,v 1.99 2022/11/26 12:25:02 tom Exp $ # $XTermId: Makefile,v 1.114 2024/05/25 13:03:00 tom Exp $
# $FreeBSD: head/x11/xterm/Makefile 492827 2019-02-13 06:43:36Z ehaupt $ # $FreeBSD: head/x11/xterm/Makefile 492827 2019-02-13 06:43:36Z ehaupt $
# This is adapted from the FreeBSD port, installing as "xterm-dev" with # This is adapted from the FreeBSD port, installing as "xterm-dev" with
@ -7,7 +7,7 @@
# and "make makesum". # and "make makesum".
PORTNAME= xterm PORTNAME= xterm
PORTVERSION= 378 PORTVERSION= 393
CATEGORIES= x11 CATEGORIES= x11
MASTER_SITES= ftp://ftp.invisible-island.net/xterm/:src1 \ MASTER_SITES= ftp://ftp.invisible-island.net/xterm/:src1 \
https://invisible-mirror.net/archives/xterm/:src1 https://invisible-mirror.net/archives/xterm/:src1

View file

@ -1,6 +1,6 @@
# $NetBSD: Makefile,v 1.117 2018/03/12 11:18:00 wiz Exp $ # $NetBSD: Makefile,v 1.117 2018/03/12 11:18:00 wiz Exp $
DISTNAME= xterm-378 DISTNAME= xterm-393
PKGREVISION= 1 PKGREVISION= 1
CATEGORIES= x11 CATEGORIES= x11
MASTER_SITES= ftp://ftp.invisible-island.net/xterm/ MASTER_SITES= ftp://ftp.invisible-island.net/xterm/

View file

@ -1,15 +1,15 @@
# $XTermId: xterm.spec,v 1.156 2022/11/26 12:25:02 tom Exp $ # $XTermId: xterm.spec,v 1.172 2024/05/25 13:03:00 tom Exp $
Summary: X terminal emulator (development version) Summary: X terminal emulator (development version)
%global my_middle xterm %global my_middle xterm
%global my_suffix -dev %global my_suffix -dev
%global fullname %{my_middle}%{my_suffix} %global fullname %{my_middle}%{my_suffix}
%global my_class XTermDev %global my_class XTermDev
Name: %{fullname} Name: %{fullname}
Version: 378 Version: 393
Release: 1 Release: 1
License: X11 License: X11
Group: User Interface/X Group: User Interface/X
Source: xterm-%{version}.tgz Source: https://invisible-island.net/archives/xterm/xterm-%{version}.tgz
URL: https://invisible-island.net/xterm/ URL: https://invisible-island.net/xterm/
Provides: x-terminal-emulator >= %{version} Provides: x-terminal-emulator >= %{version}
@ -209,14 +209,6 @@ if [ -x %{_bindir}/gtk-update-icon-cache ]; then
fi fi
%endif %endif
%clean
if rm -rf $RPM_BUILD_ROOT; then
echo OK
else
find $RPM_BUILD_ROOT -type f | grep -F -v /.nfs && exit 1
fi
exit 0
%files %files
%defattr(-,root,root,-) %defattr(-,root,root,-)
%{_bindir}/koi8r%{fullname} %{_bindir}/koi8r%{fullname}

View file

@ -1,7 +1,7 @@
/* $XTermId: print.c,v 1.173 2022/09/18 21:00:08 tom Exp $ */ /* $XTermId: print.c,v 1.176 2023/11/24 12:16:37 tom Exp $ */
/* /*
* Copyright 1997-2021,2022 by Thomas E. Dickey * Copyright 1997-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -395,6 +395,7 @@ send_SGR(XtermWidget xw, unsigned attr, unsigned fg, unsigned bg)
if ((attr & FG_COLOR) && (fg != NO_COLOR)) { if ((attr & FG_COLOR) && (fg != NO_COLOR)) {
if (TScreenOf(xw)->boldColors if (TScreenOf(xw)->boldColors
&& fg > 8 && fg > 8
&& fg < 16
&& (attr & BOLD) != 0) && (attr & BOLD) != 0)
fg -= 8; fg -= 8;
} }
@ -413,6 +414,17 @@ charToPrinter(XtermWidget xw, unsigned chr)
{ {
TScreen *screen = TScreenOf(xw); TScreen *screen = TScreenOf(xw);
#if OPT_WIDE_CHARS
if (screen->wide_chars && screen->utf8_mode) {
if (chr == UCS_REPL) {
stringToPrinter(xw, screen->default_string);
return;
}
}
#endif
if (is_NON_CHAR(chr))
return;
if (!SPS.isOpen && (SPS.toFile || xtermHasPrinter(xw))) { if (!SPS.isOpen && (SPS.toFile || xtermHasPrinter(xw))) {
switch (SPS.toFile) { switch (SPS.toFile) {
/* /*
@ -453,7 +465,7 @@ charToPrinter(XtermWidget xw, unsigned chr)
/* don't want privileges! */ /* don't want privileges! */
if (xtermResetIds(screen) < 0) if (xtermResetIds(screen) < 0)
exit(1); exit(ERROR_MISC);
SPS.fp = popen(SPS.printer_command, "w"); SPS.fp = popen(SPS.printer_command, "w");
if (SPS.fp != 0) { if (SPS.fp != 0) {

View file

@ -1,7 +1,7 @@
/* $XTermId: ptydata.c,v 1.158 2022/10/10 19:27:56 tom Exp $ */ /* $XTermId: ptydata.c,v 1.160 2024/05/10 22:54:17 tom Exp $ */
/* /*
* Copyright 1999-2020,2022 by Thomas E. Dickey * Copyright 1999-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -98,13 +98,24 @@ decodeUtf8(TScreen *screen, PtyData *data)
} else if (c < 0xc0) { } else if (c < 0xc0) {
/* We received a continuation byte */ /* We received a continuation byte */
if (utf_count < 1) { if (utf_count < 1) {
/* if (screen->c1_printable) {
* We received a continuation byte before receiving a sequence data->utf_data = (IChar) c;
* state. Or an attempt to use a C1 control string. Either } else if ((i + 1) < length
* way, it is mapped to the replacement character, unless && data->next[i + 1] > 0x20
* allowed by optional feature. && data->next[i + 1] < 0x80) {
*/ /*
data->utf_data = (IChar) (screen->c1_printable ? c : UCS_REPL); * Allow for C1 control string if the next byte is
* available for inspection.
*/
data->utf_data = (IChar) c;
} else {
/*
* We received a continuation byte before receiving a
* sequence state, or a failed attempt to use a C1 control
* string.
*/
data->utf_data = (IChar) UCS_REPL;
}
data->utf_size = (i + 1); data->utf_size = (i + 1);
break; break;
} else if (screen->utf8_weblike } else if (screen->utf8_weblike
@ -224,10 +235,10 @@ decodeUtf8(TScreen *screen, PtyData *data)
} }
} }
#if OPT_TRACE > 1 #if OPT_TRACE > 1
TRACE(("UTF-8 char %04X [%d..%d]\n", TRACE(("UTF-8 char %04X [%lu..%lu]\n",
data->utf_data, data->utf_data,
(size_t) (data->next - data->buffer), (unsigned long) (data->next - data->buffer),
(size_t) (data->next - data->buffer + data->utf_size - 1))); (unsigned long) (data->next - data->buffer + data->utf_size - 1)));
#endif #endif
return (data->utf_size != 0); return (data->utf_size != 0);
@ -889,7 +900,7 @@ do_range(const char *source)
data->last = data->buffer + j; data->last = data->buffer + j;
while (decodeUtf8(&screen, data)) { while (decodeUtf8(&screen, data)) {
total_test++; total_test++;
if (data->utf_data == UCS_REPL) if (is_UCS_SPECIAL(data->utf_data))
total_errs++; total_errs++;
data->next += data->utf_size; data->next += data->utf_size;
if (message_level > 1) { if (message_level > 1) {

View file

@ -1,7 +1,7 @@
/* $XTermId: ptyx.h,v 1.1082 2023/01/02 13:24:41 tom Exp $ */ /* $XTermId: ptyx.h,v 1.1124 2024/05/21 23:30:59 tom Exp $ */
/* /*
* Copyright 1999-2022,2023 by Thomas E. Dickey * Copyright 1999-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -389,6 +389,7 @@ typedef struct {
#define ANSI_OSC 0x9D #define ANSI_OSC 0x9D
#define ANSI_PM 0x9E #define ANSI_PM 0x9E
#define ANSI_APC 0x9F #define ANSI_APC 0x9F
#define XTERM_PUA 0xEEEE /* internal mapping for DEC Technical */
#define BAD_ASCII '?' #define BAD_ASCII '?'
#define NonLatin1(c) (((c) != ANSI_LF) && \ #define NonLatin1(c) (((c) != ANSI_LF) && \
@ -397,6 +398,9 @@ typedef struct {
((c) >= ANSI_DEL && (c) <= ANSI_APC))) ((c) >= ANSI_DEL && (c) <= ANSI_APC)))
#define OnlyLatin1(c) (NonLatin1(c) ? BAD_ASCII : (c)) #define OnlyLatin1(c) (NonLatin1(c) ? BAD_ASCII : (c))
#define L_BLOK '['
#define R_BLOK ']'
#define L_CURL '{' #define L_CURL '{'
#define R_CURL '}' #define R_CURL '}'
@ -445,6 +449,12 @@ typedef struct {
typedef short ParmType; typedef short ParmType;
typedef unsigned short UParm; /* unparseputn passes ParmType */ typedef unsigned short UParm; /* unparseputn passes ParmType */
#define MaxSParm 0x7fff /* limit if a signed value is needed */
#define MaxUParm 0xffff /* limit if unsigned value is needed */
#define SParmOf(n) ((int)(ParmType)(n))
#define UParmOf(n) ((unsigned)(UParm)(n))
typedef struct { typedef struct {
Char a_type; /* CSI, etc., see unparseq() */ Char a_type; /* CSI, etc., see unparseq() */
Char a_pintro; /* private-mode char, if any */ Char a_pintro; /* private-mode char, if any */
@ -485,15 +495,14 @@ typedef struct {
int height; int height;
} BitmapBits; } BitmapBits;
/* bit-assignments for extensions to DECRQCRA */ /* bit-assignments for extensions to DECRQCRA, to omit DEC features */
typedef enum { typedef enum {
csDEC = 0 csDEC = 0
,csPOSITIVE = xBIT(0) ,csPOSITIVE = xBIT(0) /* do not negate the result */
,csATTRIBS = xBIT(1) ,csATTRIBS = xBIT(1) /* do not report the VT100 video attributes */
,csNOTRIM = xBIT(2) ,csNOTRIM = xBIT(2) /* do not omit checksum for blanks */
,csDRAWN = xBIT(3) ,csDRAWN = xBIT(3) /* do not skip uninitialized cells */
,csBYTE = xBIT(4) ,csBYTE = xBIT(4) /* do not mask cell value to 8 bits or ignore combining chars */
,cs8TH = xBIT(5)
} CSBITS; } CSBITS;
#define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp #define EXCHANGE(a,b,tmp) tmp = a; a = b; b = tmp
@ -830,6 +839,10 @@ typedef enum {
#define OPT_WIDE_ATTRS 1 /* true if xterm supports 16-bit attributes */ #define OPT_WIDE_ATTRS 1 /* true if xterm supports 16-bit attributes */
#endif #endif
#ifndef OPT_VT525_COLORS
#define OPT_VT525_COLORS 1 /* true if xterm is configured for VT525 colors */
#endif
#ifndef OPT_WIDE_CHARS #ifndef OPT_WIDE_CHARS
#define OPT_WIDE_CHARS 1 /* true if xterm supports 16-bit characters */ #define OPT_WIDE_CHARS 1 /* true if xterm supports 16-bit characters */
#endif #endif
@ -923,7 +936,7 @@ typedef enum {
, gcBoldReverse , gcBoldReverse
, gcFiller , gcFiller
, gcBorder , gcBorder
#if OPT_BOX_CHARS #if OPT_BOX_CHARS || OPT_WIDE_CHARS
, gcLine , gcLine
, gcDots , gcDots
#endif #endif
@ -1028,6 +1041,7 @@ typedef enum {
,nrc_DEC_Supp /* vt2xx */ ,nrc_DEC_Supp /* vt2xx */
,nrc_DEC_Supp_Graphic /* vt3xx */ ,nrc_DEC_Supp_Graphic /* vt3xx */
,nrc_DEC_Technical /* vt3xx */ ,nrc_DEC_Technical /* vt3xx */
,nrc_DEC_UPSS /* vt3xx */
,nrc_Dutch /* vt2xx */ ,nrc_Dutch /* vt2xx */
,nrc_Finnish /* vt2xx */ ,nrc_Finnish /* vt2xx */
,nrc_Finnish2 /* vt2xx */ ,nrc_Finnish2 /* vt2xx */
@ -1043,7 +1057,7 @@ typedef enum {
,nrc_Hebrew /* vt5xx */ ,nrc_Hebrew /* vt5xx */
,nrc_ISO_Hebrew_Supp /* vt5xx */ ,nrc_ISO_Hebrew_Supp /* vt5xx */
,nrc_Italian /* vt2xx */ ,nrc_Italian /* vt2xx */
,nrc_ISO_Latin_1_Supp /* vt5xx */ ,nrc_ISO_Latin_1_Supp /* vt3xx */
,nrc_ISO_Latin_2_Supp /* vt5xx */ ,nrc_ISO_Latin_2_Supp /* vt5xx */
,nrc_ISO_Latin_5_Supp /* vt5xx */ ,nrc_ISO_Latin_5_Supp /* vt5xx */
,nrc_ISO_Latin_Cyrillic /* vt5xx */ ,nrc_ISO_Latin_Cyrillic /* vt5xx */
@ -1062,19 +1076,26 @@ typedef enum {
,nrc_Unknown ,nrc_Unknown
} DECNRCM_codes; } DECNRCM_codes;
/*
* Default and alternate codes for user-preferred supplemental set.
*/
#define DFT_UPSS nrc_DEC_Supp_Graphic
#define ALT_UPSS nrc_ISO_Latin_1_Supp
#define PreferredUPSS(screen) ((screen)->prefer_latin1 ? ALT_UPSS : DFT_UPSS)
/* /*
* Use this enumerated type to check consistency among dpmodes(), savemodes() * Use this enumerated type to check consistency among dpmodes(), savemodes()
* restoremodes() and do_dec_rqm(). * restoremodes() and do_dec_rqm().
*/ */
typedef enum { typedef enum {
srm_DECCKM = 1 srm_DECCKM = 1 /* Cursor Keys Mode */
,srm_DECANM = 2 ,srm_DECANM = 2 /* ANSI Mode */
,srm_DECCOLM = 3 ,srm_DECCOLM = 3 /* Column Mode */
,srm_DECSCLM = 4 ,srm_DECSCLM = 4 /* Scrolling Mode */
,srm_DECSCNM = 5 ,srm_DECSCNM = 5 /* Screen Mode */
,srm_DECOM = 6 ,srm_DECOM = 6 /* Origin Mode */
,srm_DECAWM = 7 ,srm_DECAWM = 7 /* Autowrap Mode */
,srm_DECARM = 8 ,srm_DECARM = 8 /* Autorepeat Mode */
,srm_X10_MOUSE = SET_X10_MOUSE ,srm_X10_MOUSE = SET_X10_MOUSE
#if OPT_TOOLBAR #if OPT_TOOLBAR
,srm_RXVT_TOOLBAR = 10 ,srm_RXVT_TOOLBAR = 10
@ -1084,19 +1105,21 @@ typedef enum {
,srm_CURSOR_BLINK_OPS = 13 ,srm_CURSOR_BLINK_OPS = 13
,srm_XOR_CURSOR_BLINKS = 14 ,srm_XOR_CURSOR_BLINKS = 14
#endif #endif
,srm_DECPFF = 18 ,srm_DECPFF = 18 /* Print Form Feed Mode */
,srm_DECPEX = 19 ,srm_DECPEX = 19 /* Printer Extent Mode */
,srm_DECTCEM = 25 ,srm_DECTCEM = 25 /* Text Cursor Enable Mode */
,srm_RXVT_SCROLLBAR = 30 ,srm_RXVT_SCROLLBAR = 30
,srm_DECRLM = 34 /* vt510:Cursor Right to Left Mode */
#if OPT_SHIFT_FONTS #if OPT_SHIFT_FONTS
,srm_RXVT_FONTSIZE = 35 ,srm_RXVT_FONTSIZE = 35 /* also vt520:DECHEBM */
#endif #endif
,srm_DECHEM = 36 /* vt510:Hebrew Encoding Mode */
#if OPT_TEK4014 #if OPT_TEK4014
,srm_DECTEK = 38 ,srm_DECTEK = 38
#endif #endif
,srm_132COLS = 40 ,srm_132COLS = 40
,srm_CURSES_HACK = 41 ,srm_CURSES_HACK = 41
,srm_DECNRCM = 42 ,srm_DECNRCM = 42 /* National Replacement Character Set Mode */
#if OPT_PRINT_GRAPHICS #if OPT_PRINT_GRAPHICS
,srm_DECGEPM = 43 /* Graphics Expanded Print Mode */ ,srm_DECGEPM = 43 /* Graphics Expanded Print Mode */
#endif #endif
@ -1108,13 +1131,40 @@ typedef enum {
,srm_DECGPBM = 46 /* Graphics Print Background Mode */ ,srm_DECGPBM = 46 /* Graphics Print Background Mode */
#endif #endif
,srm_ALTBUF = 47 /* also DECGRPM (Graphics Rotated Print Mode) */ ,srm_ALTBUF = 47 /* also DECGRPM (Graphics Rotated Print Mode) */
,srm_DECNKM = 66 ,srm_DECNAKB = 57 /* vt510:Greek/N-A Keyboard Mapping */
,srm_DECBKM = 67 ,srm_DECIPEM = 58 /* vt510:IBM ProPrinter Emulation Mode */
,srm_DECLRMM = 69 ,srm_DECHCCM = 60 /* vt420:Horizontal Cursor-Coupling Mode */
,srm_DECVCCM = 61 /* vt420:Vertical Cursor-Coupling Mode */
,srm_DECPCCM = 64 /* vt420:Page Cursor-Coupling Mode */
,srm_DECNKM = 66 /* vt420:Numeric Keypad Mode */
,srm_DECBKM = 67 /* vt420:Backarrow Key mode */
,srm_DECKBUM = 68 /* vt420:Keyboard Usage mode */
,srm_DECLRMM = 69 /* vt420:Vertical Split Screen Mode (DECVSSM) */
,srm_DECXRLM = 73 /* vt420:Transmit Rate Limiting */
#if OPT_SIXEL_GRAPHICS #if OPT_SIXEL_GRAPHICS
,srm_DECSDM = 80 /* Sixel Display Mode */ ,srm_DECSDM = 80 /* Sixel Display Mode */
#endif #endif
,srm_DECNCSM = 95 ,srm_DECKPM = 81 /* vt420:Key Position Mode */
,srm_DECNCSM = 95 /* vt510:No Clearing Screen On Column Change */
,srm_DECRLCM = 96 /* vt510:Right-to-Left Copy */
,srm_DECCRTSM = 97 /* vt510:CRT Save Mode */
,srm_DECARSM = 98 /* vt510:Auto Resize Mode */
,srm_DECMCM = 99 /* vt510:Modem Control Mode */
,srm_DECCAAM = 100 /* vt510:Auto Answerback Mode */
,srm_DECCANSM = 101 /* vt510:Conceal Answerback Message Mode */
,srm_DECNULM = 102 /* vt510:Ignoring Null Mode */
,srm_DECHDPXM = 103 /* vt510:Half-Duplex Mode */
,srm_DECOSCNM = 106 /* vt510:Overscan Mode */
,srm_DECNUMLK = 108 /* vt510:Num Lock Mode */
,srm_DECCAPSLK = 109 /* vt510:Caps Lock Mode */
,srm_DECKLHIM = 110 /* vt510:Keyboard LEDs Host Indicator Mode */
,srm_DECFWM = 111 /* vt520:Framed Windows Mode */
,srm_DECRPL = 112 /* vt520:Review Previous Lines */
,srm_DECHWUM = 113 /* vt520:Host Wake-Up */
,srm_DECATCUM = 114 /* vt520:Alternate Text Color Underline */
,srm_DECATCBM = 115 /* vt520:Alternate Text Color Blink */
,srm_DECBBSM = 116 /* vt520:Bold and Blink Style Mode */
,srm_DECECM = 117 /* vt520:Erase Color Mode */
,srm_VT200_MOUSE = SET_VT200_MOUSE ,srm_VT200_MOUSE = SET_VT200_MOUSE
,srm_VT200_HIGHLIGHT_MOUSE = SET_VT200_HIGHLIGHT_MOUSE ,srm_VT200_HIGHLIGHT_MOUSE = SET_VT200_HIGHLIGHT_MOUSE
,srm_BTN_EVENT_MOUSE = SET_BTN_EVENT_MOUSE ,srm_BTN_EVENT_MOUSE = SET_BTN_EVENT_MOUSE
@ -1129,6 +1179,7 @@ typedef enum {
,srm_ALTERNATE_SCROLL = SET_ALTERNATE_SCROLL ,srm_ALTERNATE_SCROLL = SET_ALTERNATE_SCROLL
,srm_RXVT_SCROLL_TTY_OUTPUT = 1010 ,srm_RXVT_SCROLL_TTY_OUTPUT = 1010
,srm_RXVT_SCROLL_TTY_KEYPRESS = 1011 ,srm_RXVT_SCROLL_TTY_KEYPRESS = 1011
,srm_FAST_SCROLL = 1014
,srm_EIGHT_BIT_META = 1034 ,srm_EIGHT_BIT_META = 1034
#if OPT_NUM_LOCK #if OPT_NUM_LOCK
,srm_REAL_NUMLOCK = 1035 ,srm_REAL_NUMLOCK = 1035
@ -1143,6 +1194,7 @@ typedef enum {
,srm_BELL_IS_URGENT = 1042 ,srm_BELL_IS_URGENT = 1042
,srm_POP_ON_BELL = 1043 ,srm_POP_ON_BELL = 1043
,srm_KEEP_CLIPBOARD = 1044 ,srm_KEEP_CLIPBOARD = 1044
,srm_REVERSEWRAP2 = 1045 /* reverse-wrap without limits */
,srm_ALLOW_ALTBUF = 1046 ,srm_ALLOW_ALTBUF = 1046
,srm_OPT_ALTBUF = 1047 ,srm_OPT_ALTBUF = 1047
,srm_SAVE_CURSOR = 1048 ,srm_SAVE_CURSOR = 1048
@ -1295,6 +1347,7 @@ typedef enum {
/* aliases */ /* aliases */
, DATA(C0) , DATA(C0)
, DATA(DEL) , DATA(DEL)
, DATA(STTY)
#undef DATA #undef DATA
, epLAST , epLAST
} PasteControls; } PasteControls;
@ -1531,10 +1584,10 @@ typedef enum {
#if OPT_DEC_CHRSET #if OPT_DEC_CHRSET
#define if_OPT_DEC_CHRSET(code) code #define if_OPT_DEC_CHRSET(code) code
/* Use 2 bits for encoding the double high/wide sense of characters */ /* Use 2 bits for encoding the double high/wide sense of characters */
#define CSET_SWL 0 #define CSET_SWL 0 /* character set: single-width line */
#define CSET_DHL_TOP 1 #define CSET_DHL_TOP 1 /* character set: double-height top line */
#define CSET_DHL_BOT 2 #define CSET_DHL_BOT 2 /* character set: double-height bottom line */
#define CSET_DWL 3 #define CSET_DWL 3 /* character set: double-width line */
#define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */ #define NUM_CHRSET 8 /* normal/bold and 4 CSET_xxx values */
/* Use remaining bits for encoding the other character-sets */ /* Use remaining bits for encoding the other character-sets */
@ -1584,6 +1637,14 @@ typedef enum {
/***====================================================================***/ /***====================================================================***/
#if OPT_DEC_RECTOPS
#define if_OPT_DEC_RECTOPS(stmt) stmt
#else
#define if_OPT_DEC_RECTOPS(stmt) /* nothing */
#endif
/***====================================================================***/
#if OPT_EBCDIC #if OPT_EBCDIC
extern int E2A(int); extern int E2A(int);
extern int A2E(int); extern int A2E(int);
@ -1594,6 +1655,9 @@ extern int A2E(int);
#define CONTROL(a) (A2E(E2A(a)&037)) #define CONTROL(a) (A2E(E2A(a)&037))
#define XTERM_ERASE A2E(CONTROL('H'))
#define XTERM_LNEXT A2E(CONTROL('V'))
/***====================================================================***/ /***====================================================================***/
#if OPT_TEK4014 #if OPT_TEK4014
@ -1652,15 +1716,24 @@ typedef unsigned char IAttr; /* at least 8 bits */
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
#define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code #define if_OPT_WIDE_CHARS(screen, code) if(screen->wide_chars) code
#define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow #define if_WIDE_OR_NARROW(screen, wide, narrow) if(screen->wide_chars) wide else narrow
#define NARROW_ICHAR 0xffff #define NARROW_ICHAR 0xffff
#if OPT_WIDER_ICHAR #if OPT_WIDER_ICHAR
#define WIDEST_ICHAR 0x1fffff #define is_NON_CHAR(c) (((c) >= 0xffd0 && (c) <= 0xfdef) || \
typedef unsigned IChar; /* for 8-21 bit characters */ (((c) & 0xffff) >= 0xfffe))
#define is_UCS_SPECIAL(c) ((c) >= 0xfff0 && (c) <= 0xffff)
#define WIDEST_ICHAR 0x1fffff
typedef unsigned IChar; /* for 8-21 bit characters */
#else #else
#define WIDEST_ICHAR NARROW_ICHAR #define is_NON_CHAR(c) (((c) >= 0xffd0 && (c) <= 0xfdef) || \
((c) >= 0xfffe && (c) <= 0xffff))
#define is_UCS_SPECIAL(c) ((c) >= 0xfff0)
#define WIDEST_ICHAR NARROW_ICHAR
typedef unsigned short IChar; /* for 8-16 bit characters */ typedef unsigned short IChar; /* for 8-16 bit characters */
#endif #endif
#else #else /* !OPT_WIDE_CHARS */
#undef OPT_WIDER_ICHAR
#define OPT_WIDER_ICHAR 0
#define is_NON_CHAR(c) ((c) > 255)
#define if_OPT_WIDE_CHARS(screen, code) /* nothing */ #define if_OPT_WIDE_CHARS(screen, code) /* nothing */
#define if_WIDE_OR_NARROW(screen, wide, narrow) narrow #define if_WIDE_OR_NARROW(screen, wide, narrow) narrow
typedef unsigned char IChar; /* for 8-bit characters */ typedef unsigned char IChar; /* for 8-bit characters */
@ -1811,16 +1884,20 @@ typedef IChar CharData;
*/ */
typedef struct { typedef struct {
Dimension lineSize; /* number of columns in this row */ Dimension lineSize; /* number of columns in this row */
RowData bufHead; /* flag for wrapped lines */ RowData bufHead; /* flag for wrapped lines */
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
Char combSize; /* number of items in combData[] */ Char combSize; /* number of items in combData[] */
#endif #endif
IAttr *attribs; /* video attributes */ #if OPT_DEC_RECTOPS
Char *charSets; /* SCS code (DECNRCM_codes) */
Char *charSeen; /* pre-SCS value */
#endif
IAttr *attribs; /* video attributes */
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
CellColor *color; /* foreground+background color numbers */ CellColor *color; /* foreground+background color numbers */
#endif #endif
CharData *charData; /* cell's base character */ CharData *charData; /* cell's base character */
CharData *combData[1]; /* first enum past fixed-offsets */ CharData *combData[1]; /* first field past fixed-offsets */
} LineData; } LineData;
typedef const LineData CLineData; typedef const LineData CLineData;
@ -1830,12 +1907,16 @@ typedef const LineData CLineData;
* variable. * variable.
*/ */
typedef struct { typedef struct {
IAttr attribs; IAttr attribs; /* video attributes */
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
Char combSize; /* number of items in combData[] */ Char combSize; /* number of items in combData[] */
#endif
#if OPT_DEC_RECTOPS
Char charSets; /* SCS code (DECNRCM_codes) */
Char charSeen; /* pre-SCS value */
#endif #endif
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
CellColor color; /* color-array */ CellColor color; /* foreground+background color numbers */
#endif #endif
CharData charData; /* cell's base character */ CharData charData; /* cell's base character */
CharData combData[1]; /* array of combining chars */ CharData combData[1]; /* array of combining chars */
@ -2018,6 +2099,7 @@ typedef enum {
DP_DECTCEM, DP_DECTCEM,
DP_DELETE_IS_DEL, DP_DELETE_IS_DEL,
DP_EIGHT_BIT_META, DP_EIGHT_BIT_META,
DP_FAST_SCROLL,
DP_KEEP_CLIPBOARD, DP_KEEP_CLIPBOARD,
DP_KEEP_SELECTION, DP_KEEP_SELECTION,
DP_KEYBOARD_TYPE, DP_KEYBOARD_TYPE,
@ -2038,6 +2120,7 @@ typedef enum {
DP_X_MOUSE, DP_X_MOUSE,
DP_X_NCSM, DP_X_NCSM,
DP_X_REVWRAP, DP_X_REVWRAP,
DP_X_REVWRAP2,
DP_X_X10MSE, DP_X_X10MSE,
#if OPT_BLINK_CURS #if OPT_BLINK_CURS
DP_CRS_BLINK, DP_CRS_BLINK,
@ -2138,6 +2221,10 @@ typedef struct {
} ScrnColors; } ScrnColors;
#define NUM_GSETS 4 #define NUM_GSETS 4
#define NUM_GSETS2 (NUM_GSETS + 1) /* include user-preferred */
#define gsets_upss gsets[4]
#define SAVED_CURSORS 2
typedef struct { typedef struct {
Boolean saved; Boolean saved;
@ -2146,7 +2233,7 @@ typedef struct {
IFlags flags; /* VTxxx saves graphics rendition */ IFlags flags; /* VTxxx saves graphics rendition */
Char curgl; Char curgl;
Char curgr; Char curgr;
DECNRCM_codes gsets[NUM_GSETS]; DECNRCM_codes gsets[NUM_GSETS2];
Boolean wrap_flag; Boolean wrap_flag;
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
int cur_foreground; /* current foreground color */ int cur_foreground; /* current foreground color */
@ -2163,7 +2250,12 @@ typedef struct _SaveTitle {
char *windowName; char *windowName;
} SaveTitle; } SaveTitle;
#define SAVED_CURSORS 2 #define MAX_SAVED_TITLES 10
typedef struct {
int used; /* index to current item */
SaveTitle data[MAX_SAVED_TITLES];
} SavedTitles;
typedef struct { typedef struct {
int width; /* if > 0, width of scrollbar, */ int width; /* if > 0, width of scrollbar, */
@ -2330,6 +2422,7 @@ typedef struct {
IChar *unparse_bfr; IChar *unparse_bfr;
unsigned unparse_len; unsigned unparse_len;
unsigned unparse_max; /* limitResponse resource */ unsigned unparse_max; /* limitResponse resource */
unsigned strings_max; /* maxStringParse resource */
#if OPT_TCAP_QUERY #if OPT_TCAP_QUERY
int tc_query_code; int tc_query_code;
@ -2365,6 +2458,14 @@ typedef struct {
#if OPT_WIDE_ATTRS && OPT_SGR2_HASH #if OPT_WIDE_ATTRS && OPT_SGR2_HASH
Boolean faint_relative; /* faint is relative? */ Boolean faint_relative; /* faint is relative? */
#endif #endif
#if OPT_VT525_COLORS
int assigned_fg; /* DECAC */
int assigned_bg;
struct {
int fg; /* 0..15 */
int bg; /* 0..15 */
} alt_colors[16]; /* DECATC if DECSTGLT is 1 or 2 */
#endif
#endif /* OPT_ISO_COLORS */ #endif /* OPT_ISO_COLORS */
#if OPT_DEC_CHRSET #if OPT_DEC_CHRSET
Boolean font_doublesize;/* enable font-scaling */ Boolean font_doublesize;/* enable font-scaling */
@ -2404,9 +2505,10 @@ typedef struct {
Boolean char_was_written; Boolean char_was_written;
int last_written_col; int last_written_col;
int last_written_row; int last_written_row;
TypedBuffer(XChar2b);
TypedBuffer(char);
#endif #endif
TypedBuffer(IChar);
TypedBuffer(Char);
TypedBuffer(XChar2b);
#if OPT_BROKEN_OSC #if OPT_BROKEN_OSC
Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */ Boolean brokenLinuxOSC; /* true to ignore Linux palette ctls */
#endif #endif
@ -2533,7 +2635,8 @@ typedef struct {
Cursor pointer_cursor; /* current pointer cursor */ Cursor pointer_cursor; /* current pointer cursor */
Cursor hidden_cursor; /* hidden cursor in window */ Cursor hidden_cursor; /* hidden cursor in window */
String answer_back; /* response to ENQ */ String answer_back; /* response to ENQ */
Boolean prefer_latin1; /* preference for UPSS */
PrinterState printer_state; /* actual printer state */ PrinterState printer_state; /* actual printer state */
PrinterFlags printer_flags; /* working copy of printer flags */ PrinterFlags printer_flags; /* working copy of printer flags */
@ -2547,10 +2650,13 @@ typedef struct {
#if OPT_BOX_CHARS #if OPT_BOX_CHARS
Boolean force_box_chars;/* true if we assume no boxchars */ Boolean force_box_chars;/* true if we assume no boxchars */
Boolean broken_box_chars;/* true if broken boxchars */ Boolean broken_box_chars;/* true if broken boxchars */
Boolean force_all_chars;/* true to outline missing chars */
Boolean assume_all_chars;/* true to allow missing chars */ Boolean assume_all_chars;/* true to allow missing chars */
Boolean allow_packing; /* true to allow packed-fonts */ Boolean allow_packing; /* true to allow packed-fonts */
#endif #endif
#if OPT_BOX_CHARS || OPT_WIDE_CHARS
Boolean force_all_chars;/* true to outline missing chars */
#endif
Dimension fnt_wide; Dimension fnt_wide;
Dimension fnt_high; Dimension fnt_high;
float scale_height; /* scaling for font-height */ float scale_height; /* scaling for font-height */
@ -2572,6 +2678,7 @@ typedef struct {
int cursor_state; /* ON, OFF, or BLINKED_OFF */ int cursor_state; /* ON, OFF, or BLINKED_OFF */
int cursor_busy; /* do not redraw... */ int cursor_busy; /* do not redraw... */
Boolean cursor_underline; /* true if cursor is in underline mode */ Boolean cursor_underline; /* true if cursor is in underline mode */
Boolean cursor_bar; /* true if cursor is in bar mode */
XtCursorShape cursor_shape; XtCursorShape cursor_shape;
#if OPT_BLINK_CURS #if OPT_BLINK_CURS
BlinkOps cursor_blink; /* cursor blink enable */ BlinkOps cursor_blink; /* cursor blink enable */
@ -2685,16 +2792,17 @@ typedef struct {
int title_modes; /* control set/get of titles */ int title_modes; /* control set/get of titles */
int title_modes0; /* ...initial value */ int title_modes0; /* ...initial value */
SaveTitle *save_title; SavedTitles saved_titles;
/* Improved VT100 emulation stuff. */ /* Improved VT100 emulation stuff. */
String keyboard_dialect; /* default keyboard dialect */ String keyboard_dialect; /* default keyboard dialect */
DECNRCM_codes gsets[NUM_GSETS]; /* G0 through G3. */ DECNRCM_codes gsets[NUM_GSETS2]; /* G0 through G3, plus UPSS */
Char curgl; /* Current GL setting. */ Char curgl; /* Current GL setting. */
Char curgr; /* Current GR setting. */ Char curgr; /* Current GR setting. */
Char curss; /* Current single shift. */ Char curss; /* Current single shift. */
String term_id; /* resource for terminal_id */ String term_id; /* resource for terminal_id */
int terminal_id; /* 100=vt100, 220=vt220, etc. */ int terminal_id; /* 100=vt100, 220=vt220, etc. */
int display_da1; /* 100=vt100, 220=vt220, etc. */
int vtXX_level; /* 0=vt52, 1,2,3 = vt100 ... vt320 */ int vtXX_level; /* 0=vt52, 1,2,3 = vt100 ... vt320 */
int ansi_level; /* dpANSI levels 1,2,3 */ int ansi_level; /* dpANSI levels 1,2,3 */
int protected_mode; /* 0=off, 1=DEC, 2=ISO */ int protected_mode; /* 0=off, 1=DEC, 2=ISO */
@ -2743,11 +2851,14 @@ typedef struct {
#if OPT_SIXEL_GRAPHICS #if OPT_SIXEL_GRAPHICS
Boolean sixel_scrolling; /* sixel scrolling */ Boolean sixel_scrolling; /* sixel scrolling */
Boolean sixel_scrolls_right; /* sixel scrolling moves cursor to right */ Boolean sixel_scrolls_right; /* sixel scrolling moves cursor to right */
Boolean sixel_scrolls_right0; /* initial sixelScrolling mode */
#endif #endif
#if OPT_GRAPHICS #if OPT_GRAPHICS
int numcolorregisters; /* number of supported color registers */ int numcolorregisters; /* number of supported color registers */
Boolean privatecolorregisters; /* private color registers for each graphic */ Boolean privatecolorregisters; /* private color registers for each graphic */
Boolean privatecolorregisters0; /* initial privateColorRegisters */
Boolean incremental_graphics; /* draw graphics incrementally */
#endif #endif
/* Graphics Printing */ /* Graphics Printing */
@ -2782,10 +2893,10 @@ typedef struct {
if (IsStatusShown(screen) && (screen)->status_active) stmt if (IsStatusShown(screen) && (screen)->status_active) stmt
Boolean status_timeout; /* status timeout needs service */ Boolean status_timeout; /* status timeout needs service */
Boolean status_active; /* DECSASD */ int status_active; /* DECSASD */
int status_type; /* DECSSDT */ int status_type; /* DECSSDT */
int status_shown; /* last-displayed type */ int status_shown; /* last-displayed type */
SavedCursor status_data[2]; SavedCursor status_data[2]; /* main- and status-cursors */
char * status_fmt; /* format for indicator-status */ char * status_fmt; /* format for indicator-status */
#else /* !OPT_STATUS_LINE */ #else /* !OPT_STATUS_LINE */
@ -2804,7 +2915,7 @@ typedef struct {
Char vt52_save_curgl; Char vt52_save_curgl;
Char vt52_save_curgr; Char vt52_save_curgr;
Char vt52_save_curss; Char vt52_save_curss;
DECNRCM_codes vt52_save_gsets[NUM_GSETS]; DECNRCM_codes vt52_save_gsets[NUM_GSETS2];
#endif #endif
/* Testing */ /* Testing */
#if OPT_XMC_GLITCH #if OPT_XMC_GLITCH
@ -3230,6 +3341,7 @@ typedef struct _Misc {
float face_size[NMENUFONTS]; float face_size[NMENUFONTS];
char *render_font_s; char *render_font_s;
int limit_fontsets; int limit_fontsets;
int limit_fontheight;
int limit_fontwidth; int limit_fontwidth;
#endif #endif
} Misc; } Misc;
@ -3286,6 +3398,14 @@ typedef struct _Work {
ScrnColors *oldColors; ScrnColors *oldColors;
Boolean palette_changed; Boolean palette_changed;
Boolean broken_box_chars; Boolean broken_box_chars;
/* data write dotext/WriteText */
IChar *write_text; /* points to print_area */
#if OPT_DEC_RECTOPS
Char *write_sums; /* if non-null, points to buffer_sums */
Char *buffer_sums; /* data for ->charSeen[] */
Char *buffer_sets; /* data for ->charSets[] */
size_t sizeof_sums; /* allocated size of buffer_sums */
#endif
} Work; } Work;
typedef struct {int foo;} XtermClassPart, TekClassPart; typedef struct {int foo;} XtermClassPart, TekClassPart;
@ -3326,7 +3446,7 @@ extern WidgetClass tekWidgetClass;
#define TAB_ARRAY_SIZE (1024 / TAB_BITS_WIDTH) #define TAB_ARRAY_SIZE (1024 / TAB_BITS_WIDTH)
#define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE) #define MAX_TABS (TAB_BITS_WIDTH * TAB_ARRAY_SIZE)
#define OkTAB(c) ((c) >= 0 && (c) < MAX_TABS) #define OkTAB(c) ((c) > 0 && (c) < MAX_TABS)
typedef unsigned Tabs [TAB_ARRAY_SIZE]; typedef unsigned Tabs [TAB_ARRAY_SIZE];
@ -3429,45 +3549,57 @@ typedef struct _TekWidgetRec {
the screen. Used to distinguish the screen. Used to distinguish
blanks from empty parts of the blanks from empty parts of the
screen when selecting */ screen when selecting */
/*
* This does not fit in a byte with the other (more important) attributes, but
* if wide-attributes are configured, it is possible to maintain it there.
*/
#define INVISIBLE AttrBIT(8) /* true if writing invisible text */
#if OPT_WIDE_ATTRS #if OPT_WIDE_ATTRS
#define ATR_FAINT AttrBIT(8) #define ATR_FAINT AttrBIT(9)
#define ATR_ITALIC AttrBIT(9) #define ATR_ITALIC AttrBIT(10)
#define ATR_STRIKEOUT AttrBIT(10) #define ATR_STRIKEOUT AttrBIT(11)
#define ATR_DBL_UNDER AttrBIT(11) #define ATR_DBL_UNDER AttrBIT(12)
#define ATR_DIRECT_FG AttrBIT(12) #define ATR_DIRECT_FG AttrBIT(13)
#define ATR_DIRECT_BG AttrBIT(13) #define ATR_DIRECT_BG AttrBIT(14)
#define SGR_MASK2 (ATR_FAINT | ATR_ITALIC | ATR_STRIKEOUT | ATR_DBL_UNDER | ATR_DIRECT_FG | ATR_DIRECT_BG) #define SGR_MASK2 (ATR_FAINT | ATR_ITALIC | ATR_STRIKEOUT | ATR_DBL_UNDER | ATR_DIRECT_FG | ATR_DIRECT_BG)
#define AttrEND 15
#else #else
#define SGR_MASK2 0 #define SGR_MASK2 0
#define AttrEND 9
#endif #endif
/* /*
* Other flags * Other flags
*/ */
#define WRAPAROUND MiscBIT(0) /* true if auto wraparound mode */ #define REVERSE_VIDEO MiscBIT(0) /* true if screen white on black */
#define REVERSEWRAP MiscBIT(1) /* true if reverse wraparound mode */ #define WRAPAROUND MiscBIT(1) /* true if auto wraparound mode */
#define REVERSE_VIDEO MiscBIT(2) /* true if screen white on black */ #define REVERSEWRAP MiscBIT(2) /* true if reverse wraparound mode */
#define LINEFEED MiscBIT(3) /* true if in auto linefeed mode */ #define REVERSEWRAP2 MiscBIT(3) /* true if extended reverse wraparound */
#define ORIGIN MiscBIT(4) /* true if in origin mode */ #define LINEFEED MiscBIT(4) /* true if in auto linefeed mode */
#define INSERT MiscBIT(5) /* true if in insert mode */ #define ORIGIN MiscBIT(5) /* true if in origin mode */
#define SMOOTHSCROLL MiscBIT(6) /* true if in smooth scroll mode */ #define INSERT MiscBIT(6) /* true if in insert mode */
#define IN132COLUMNS MiscBIT(7) /* true if in 132 column mode */ #define SMOOTHSCROLL MiscBIT(7) /* true if in smooth scroll mode */
#define INVISIBLE MiscBIT(8) /* true if writing invisible text */ #define IN132COLUMNS MiscBIT(8) /* true if in 132 column mode */
#define NATIONAL MiscBIT(9) /* true if writing national charset */ #define NATIONAL MiscBIT(9) /* true if writing national charset */
#define LEFT_RIGHT MiscBIT(10) /* true if left/right margin mode */ #define LEFT_RIGHT MiscBIT(10) /* true if left/right margin mode */
#define NOCLEAR_COLM MiscBIT(11) /* true if no clear on DECCOLM change */ #define NOCLEAR_COLM MiscBIT(11) /* true if no clear on DECCOLM change */
#define DrawBIT(n) xBIT(n + 8) /* XTermDraw.draw_flags */ /*
* Drawing-bits start after the video/color attributes, and are independent
* of the miscellaneous flags.
*/
#define DrawBIT(n) xBIT(n + AttrEND) /* XTermDraw.draw_flags */
/* The following attributes are used in the argument of drawXtermText() */ /* The following attributes are used in the argument of drawXtermText() */
#define NOBACKGROUND DrawBIT(0) /* Used for overstrike */ #define NOBACKGROUND DrawBIT(0) /* Used for overstrike */
#define NOTRANSLATION DrawBIT(1) /* No scan for chars missing in font */ #define NOTRANSLATION DrawBIT(1) /* No scan for chars missing in font */
#define DOUBLEWFONT DrawBIT(2) /* The actual X-font is double-width */ #define DOUBLEWFONT DrawBIT(2) /* The actual X-font is double-width */
#define DOUBLEHFONT DrawBIT(3) /* The actual X-font is double-height */ #define DOUBLEHFONT DrawBIT(3) /* The actual X-font is double-height */
#define CHARBYCHAR DrawBIT(4) /* Draw chars one-by-one */ #define DOUBLEFIRST DrawBIT(4) /* Draw chars one-by-one */
#define CHARBYCHAR DrawBIT(5) /* Draw chars one-by-one */
/* The following attribute is used in the argument of xtermSpecialFont etc */ /* The following attribute is used in the argument of xtermSpecialFont etc */
#define NORESOLUTION DrawBIT(5) /* find the font without resolution */ #define NORESOLUTION DrawBIT(6) /* find the font without resolution */
/* /*
* Groups of attributes * Groups of attributes

View file

@ -1,7 +1,7 @@
/* $XTermId: resize.c,v 1.148 2022/02/18 20:32:48 tom Exp $ */ /* $XTermId: resize.c,v 1.150 2023/03/31 23:09:38 tom Exp $ */
/* /*
* Copyright 2003-2021,2022 by Thomas E. Dickey * Copyright 2003-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -98,7 +98,7 @@ int ignore_unused;
#define SUN 1 #define SUN 1
#define VT100 0 #define VT100 0
#define TIMEOUT 10 #define TIMEOUT 3
#define SHELL_UNKNOWN 0 #define SHELL_UNKNOWN 0
#define SHELL_C 1 #define SHELL_C 1
@ -133,6 +133,11 @@ static const char *const emuname[EMULATIONS] =
}; };
static char *myname; static char *myname;
static int shell_type = SHELL_UNKNOWN; static int shell_type = SHELL_UNKNOWN;
static const char *const getattr[EMULATIONS] =
{
ESCAPE("[c"),
NULL,
};
static const char *const getsize[EMULATIONS] = static const char *const getsize[EMULATIONS] =
{ {
ESCAPE("7") ESCAPE("[r") ESCAPE("[9999;9999H") ESCAPE("[6n"), ESCAPE("7") ESCAPE("[r") ESCAPE("[9999;9999H") ESCAPE("[6n"),
@ -164,7 +169,12 @@ static struct termios tioorig;
static struct sgttyb sgorig; static struct sgttyb sgorig;
#endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */ #endif /* USE_ANY_SYSV_TERMIO/USE_TERMIOS */
static const char *const size[EMULATIONS] = static const char *const reply_attr[EMULATIONS] =
{
ESCAPE("[?%d;%dc"),
NULL,
};
static const char *const reply_size[EMULATIONS] =
{ {
ESCAPE("[%d;%dR"), ESCAPE("[%d;%dR"),
ESCAPE("[8;%d;%dt"), ESCAPE("[8;%d;%dt"),
@ -211,10 +221,12 @@ onintr(int sig GCC_UNUSED)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
const char *timeout_message = "?";
static void static void
resize_timeout(int sig) resize_timeout(int sig)
{ {
fprintf(stderr, "\n%s: Time out occurred\r\n", myname); fprintf(stderr, "\n%s: %s\r\n", myname, timeout_message);
onintr(sig); onintr(sig);
} }
@ -267,7 +279,9 @@ checkdigits(char *str)
static void static void
unexpected_char(int c) unexpected_char(int c)
{ {
fprintf(stderr, "%s: unknown character %#x, exiting.\r\n", myname, c); fprintf(stderr,
"%s: unknown character %#x, exiting.\r\n",
myname, (unsigned) c);
onintr(0); onintr(0);
} }
@ -275,19 +289,18 @@ static void
readstring(FILE *fp, char *buf, const char *str) readstring(FILE *fp, char *buf, const char *str)
{ {
int last, c; int last, c;
#if !defined(USG) && !defined(__minix) #if HAVE_SETITIMER
/* What is the advantage of setitimer() over alarm()? */
struct itimerval it; struct itimerval it;
#endif #endif
int limit = (BUFSIZ - 3); int limit = (BUFSIZ - 3);
signal(SIGALRM, resize_timeout); signal(SIGALRM, resize_timeout);
#if defined(USG) || defined(__minix) #if HAVE_SETITIMER
alarm(TIMEOUT);
#else
memset((char *) &it, 0, sizeof(struct itimerval)); memset((char *) &it, 0, sizeof(struct itimerval));
it.it_value.tv_sec = TIMEOUT; it.it_value.tv_sec = TIMEOUT;
setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL); setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);
#else
alarm(TIMEOUT);
#endif #endif
if ((c = getc(fp)) == 0233) { /* meta-escape, CSI */ if ((c = getc(fp)) == 0233) { /* meta-escape, CSI */
c = ESCAPE("")[0]; c = ESCAPE("")[0];
@ -312,11 +325,11 @@ readstring(FILE *fp, char *buf, const char *str)
if (c == last) if (c == last)
break; break;
} }
#if defined(USG) || defined(__minix) #if HAVE_SETITIMER
alarm(0);
#else
memset((char *) &it, 0, sizeof(struct itimerval)); memset((char *) &it, 0, sizeof(struct itimerval));
setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL); setitimer(ITIMER_REAL, &it, (struct itimerval *) NULL);
#else
alarm(0);
#endif #endif
*buf = 0; *buf = 0;
} }
@ -513,9 +526,15 @@ main(int argc, char **argv ENVP_ARG)
free(tmpbuf); free(tmpbuf);
} }
} }
if (getattr[emu]) {
timeout_message = "Terminal is not VT100-compatible";
IGNORE_RC(write(tty, getattr[emu], strlen(getattr[emu])));
readstring(ttyfp, buf, reply_attr[emu]);
}
timeout_message = "Time out occurred";
IGNORE_RC(write(tty, getsize[emu], strlen(getsize[emu]))); IGNORE_RC(write(tty, getsize[emu], strlen(getsize[emu])));
readstring(ttyfp, buf, size[emu]); readstring(ttyfp, buf, reply_size[emu]);
if (sscanf(buf, size[emu], &rows, &cols) != 2) { if (sscanf(buf, reply_size[emu], &rows, &cols) != 2) {
fprintf(stderr, "%s: Can't get rows and columns\r\n", myname); fprintf(stderr, "%s: Can't get rows and columns\r\n", myname);
onintr(0); onintr(0);
} }

View file

@ -1,6 +1,6 @@
.\" $XTermId: resize.man,v 1.37 2019/02/07 00:16:12 tom Exp $ .\" $XTermId: resize.man,v 1.40 2024/01/11 22:06:30 tom Exp $
.\" .\"
.\" Copyright 1998-2017,2019 by Thomas E. Dickey .\" Copyright 1998-2023,2024 by Thomas E. Dickey
.\" .\"
.\" All Rights Reserved .\" All Rights Reserved
.\" .\"
@ -32,22 +32,49 @@
.\" .\"
.ds N Resize .ds N Resize
.ds n resize .ds n resize
.
.TH RESIZE 1 "__app_date__" "__app_version__" "X Window System"
.\" .\"
.\" Bulleted paragraph .ie n .ds CW R
.el \{
.ie \n(.g .ds CW CR
.el .ds CW CW
.\}
.
.ie \n(.g \{\
.ds `` \(lq
.ds '' \(rq
.ds ' \(aq
.\}
.el \{\
.ie t .ds `` ``
.el .ds `` ""
.ie t .ds '' ''
.el .ds '' ""
.ie t .ds ' \(aq
.el .ds ' '
.\}
.de bP .de bP
.ie n .IP \(bu 4 .ie n .IP \(bu 4
.el .IP \(bu 2 .el .IP \(bu 2
.. ..
.\" Escape single quotes in literal strings from groff's Unicode transform. .de NE
.ie \n(.g .ds AQ \(aq .fi
.el .ds AQ ' .ft R
.ie \n(.g .ds `` \(lq .ie n .in -4
.el .ds `` `` .el .in -2
.ie \n(.g .ds '' \(rq ..
.el .ds '' '' .de NS
.TH RESIZE 1 "__app_date__" "__app_version__" "X Window System" .ie n .sp
.el .sp .5
.ie n .in +4
.el .in +2
.nf
.ft \*(CW
..
.SH NAME .SH NAME
resize \- set environment and terminal settings to current xterm window size resize \-
set environment and terminal settings to current xterm window size
.SH SYNOPSIS .SH SYNOPSIS
.B \*n .B \*n
[ \fB\-v\fP | \fB\-u\fP | \fB\-c\fP ] [ \fB\-s\fP [ \fIrow col\fP ] ] [ \fB\-v\fP | \fB\-u\fP | \fB\-c\fP ] [ \fB\-s\fP [ \fIrow col\fP ] ]
@ -98,34 +125,6 @@ This affects the values shown by \fIstty\fP.
finally, \fI\*n\fP generates shell commands for setting the finally, \fI\*n\fP generates shell commands for setting the
environment variables, environment variables,
and writes that to the standard output. and writes that to the standard output.
.SH EXAMPLES
For \fI\*n\fP's output to take effect,
\fI\*n\fP must either be evaluated
as part of the command line (usually done with a shell alias or function) or
else redirected to a file which can then be read in.
From the C shell (usually
known as \fI/bin/csh\fP), the following alias could be defined in the
user's \fI.cshrc\fP:
.sp
.nf
% alias rs \*(AQset noglob; eval \fC\`\fP\*n\fC\`\fP\*(AQ
.fi
.sp
After resizing the window, the user would type:
.sp
.nf
% rs
.fi
.sp
Users of versions of the Bourne shell (usually known as \fI/bin/sh\fP) that
don't have command
functions will need to send the output to a temporary file and then read it back
in with the \*(``.\*('' command:
.sp
.nf
$ \*n > /tmp/out
$ .\0/tmp/out
.fi
.SH OPTIONS .SH OPTIONS
The following options may be used with \fI\*n\fP: The following options may be used with \fI\*n\fP:
.TP 8 .TP 8
@ -167,13 +166,6 @@ which causes makes it assume the \fB\-s\fP option.
The \fIrows\fP and The \fIrows\fP and
\fIcolumns\fP arguments must appear last; though they are normally \fIcolumns\fP arguments must appear last; though they are normally
associated with the \fB\-s\fP option, they are parsed separately. associated with the \fB\-s\fP option, they are parsed separately.
.SH FILES
.TP 15
/etc/termcap
for the base termcap entry to modify.
.TP 15
~/.cshrc
user's alias for the command.
.SH ENVIRONMENT .SH ENVIRONMENT
.TP 15 .TP 15
SHELL SHELL
@ -217,12 +209,38 @@ generated shell command
sets these variables on systems using terminfo. sets these variables on systems using terminfo.
Many applications (including the curses library) Many applications (including the curses library)
use those variables when set to override their screensize. use those variables when set to override their screensize.
.SH "SEE ALSO" .SH FILES
use_env(3x) .TP 15
.br /etc/termcap
csh(1), stty(1), tset(1) for the base termcap entry to modify.
.br .TP 15
xterm(__mansuffix__) ~/.cshrc
user's alias for the command.
.SH EXAMPLES
For \fI\*n\fP's output to take effect,
\fI\*n\fP must either be evaluated
as part of the command line (usually done with a shell alias or function) or
else redirected to a file which can then be read in.
From the C shell (usually
known as \fI/bin/csh\fP), the following alias could be defined in the
user's \fI.cshrc\fP:
.NS
% alias rs \*'set noglob; eval \`\*n\`\*'
.NE
.PP
After resizing the window, the user would type:
.NS
% rs
.NE
.PP
Users of versions of the Bourne shell (usually known as \fI/bin/sh\fP) that
don't have command
functions will need to send the output to a temporary file and then read it back
in with the \*(``.\*('' command:
.NS
$ \*n > /tmp/out
$ .\0/tmp/out
.NE
.SH AUTHORS .SH AUTHORS
Mark Vandevoorde (MIT-Athena), Edward Moy (Berkeley) Mark Vandevoorde (MIT-Athena), Edward Moy (Berkeley)
.br .br
@ -233,3 +251,9 @@ Copyright (c) 1984, 1985 by X Consortium
See See
.IR X (__miscmansuffix__) .IR X (__miscmansuffix__)
for a complete copyright notice. for a complete copyright notice.
.SH "SEE ALSO"
use_env(3x)
.br
csh(1), stty(1), tset(1)
.br
xterm(__mansuffix__)

View file

@ -1,7 +1,7 @@
/* $XTermId: screen.c,v 1.627 2022/10/23 22:57:40 tom Exp $ */ /* $XTermId: screen.c,v 1.651 2024/02/13 22:10:51 tom Exp $ */
/* /*
* Copyright 1999-2021,2022 by Thomas E. Dickey * Copyright 1999-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -193,6 +193,9 @@ setupLineData(TScreen *screen,
/* these names are based on types */ /* these names are based on types */
unsigned skipNcolIAttr; unsigned skipNcolIAttr;
unsigned skipNcolCharData; unsigned skipNcolCharData;
#if OPT_DEC_RECTOPS
unsigned skipNcolChar;
#endif
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
unsigned skipNcolCellColor; unsigned skipNcolCellColor;
#endif #endif
@ -207,8 +210,12 @@ setupLineData(TScreen *screen,
} }
#endif #endif
skipNcolIAttr = (ncol * SizeofScrnPtr(attribs)); /* *INDENT-EQLS* */
skipNcolCharData = (ncol * SizeofScrnPtr(charData)); skipNcolIAttr = (ncol * SizeofScrnPtr(attribs));
skipNcolCharData = (ncol * SizeofScrnPtr(charData));
#if OPT_DEC_RECTOPS
skipNcolChar = (ncol * SizeofScrnPtr(charSeen)); /* = charSets */
#endif
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
skipNcolCellColor = (ncol * SizeofScrnPtr(color)); skipNcolCellColor = (ncol * SizeofScrnPtr(color));
#endif #endif
@ -226,6 +233,10 @@ setupLineData(TScreen *screen,
SetupScrnPtr(ptr->color, data, CellColor); SetupScrnPtr(ptr->color, data, CellColor);
#endif #endif
SetupScrnPtr(ptr->charData, data, CharData); SetupScrnPtr(ptr->charData, data, CharData);
#if OPT_DEC_RECTOPS
SetupScrnPtr(ptr->charSeen, data, Char);
SetupScrnPtr(ptr->charSets, data, Char);
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
if (screen->wide_chars) { if (screen->wide_chars) {
unsigned extra = (unsigned) screen->max_combining; unsigned extra = (unsigned) screen->max_combining;
@ -302,9 +313,16 @@ sizeofScrnRow(TScreen *screen, unsigned ncol)
(void) screen; (void) screen;
result = (ncol * (unsigned) sizeof(CharData)); result = (ncol * (unsigned) sizeof(CharData)); /* ->charData */
AlignValue(result); AlignValue(result);
#if OPT_DEC_RECTOPS
result += (ncol * (unsigned) sizeof(Char)); /* ->charSeen */
AlignValue(result);
result += (ncol * (unsigned) sizeof(Char)); /* ->charSets */
AlignValue(result);
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
if (screen->wide_chars) { if (screen->wide_chars) {
result *= (unsigned) (1 + screen->max_combining); result *= (unsigned) (1 + screen->max_combining);
@ -800,6 +818,7 @@ ClearCells(XtermWidget xw, int flags, unsigned len, int row, int col)
flags = (int) ((unsigned) flags | TERM_COLOR_FLAGS(xw)); flags = (int) ((unsigned) flags | TERM_COLOR_FLAGS(xw));
for (n = 0; n < len; ++n) { for (n = 0; n < len; ++n) {
if_OPT_DEC_RECTOPS(ld->charSeen[(unsigned) col + n] = ' ');
ld->charData[(unsigned) col + n] = (CharData) ' '; ld->charData[(unsigned) col + n] = (CharData) ' ';
} }
@ -867,16 +886,20 @@ ScrnDisownSelection(XtermWidget xw)
*/ */
void void
ScrnWriteText(XtermWidget xw, ScrnWriteText(XtermWidget xw,
IChar *str, Cardinal offset,
Cardinal length,
unsigned flags, unsigned flags,
CellColor cur_fg_bg, CellColor cur_fg_bg)
unsigned length)
{ {
IChar *str = xw->work.write_text + offset;
TScreen *screen = TScreenOf(xw); TScreen *screen = TScreenOf(xw);
LineData *ld; LineData *ld;
IAttr *attrs; IAttr *attrs;
int avail = MaxCols(screen) - screen->cur_col; int avail = MaxCols(screen) - screen->cur_col;
IChar *chars; IChar *chars;
#if OPT_DEC_RECTOPS
Char *seens;
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
IChar starcol1; IChar starcol1;
#endif #endif
@ -898,6 +921,7 @@ ScrnWriteText(XtermWidget xw,
ld = getLineData(screen, screen->cur_row); ld = getLineData(screen, screen->cur_row);
if_OPT_DEC_RECTOPS(seens = ld->charSeen + screen->cur_col);
chars = ld->charData + screen->cur_col; chars = ld->charData + screen->cur_col;
attrs = ld->attribs + screen->cur_col; attrs = ld->attribs + screen->cur_col;
@ -905,12 +929,26 @@ ScrnWriteText(XtermWidget xw,
starcol1 = *chars; starcol1 = *chars;
#endif #endif
/* write blanks if we're writing invisible text */ /*
* Copy the string onto the line,
* writing blanks if we're writing invisible text.
*/
for (n = 0; n < length; ++n) { for (n = 0; n < length; ++n) {
if ((flags & INVISIBLE)) #if OPT_DEC_RECTOPS
chars[n] = ' '; if (xw->work.write_sums != NULL) {
else ld->charSeen[screen->cur_col + (int) n] = xw->work.buffer_sums[n];
chars[n] = str[n]; ld->charSets[screen->cur_col + (int) n] = xw->work.buffer_sets[n];
} else {
seens[n] = (str[n] < 32
#if OPT_WIDE_CHARS
|| str[n] > 255
#endif
)
? ANSI_ESC
: (Char) str[n];
}
#endif /* OPT_DEC_RECTOPS */
chars[n] = str[n];
} }
#if OPT_BLINK_TEXT #if OPT_BLINK_TEXT
@ -1049,6 +1087,10 @@ ScrnClearLines(XtermWidget xw, ScrnBuf sb, int where, unsigned n, unsigned size)
memset(work->color, 0, size * sizeof(work->color[0])); memset(work->color, 0, size * sizeof(work->color[0]));
#endif #endif
} }
if_OPT_DEC_RECTOPS({
memset(work->charSeen, 0, size * sizeof(Char));
memset(work->charSets, 0, size * sizeof(work->charSets[0]));
});
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
if (screen->wide_chars) { if (screen->wide_chars) {
size_t off; size_t off;
@ -1636,7 +1678,6 @@ ScrnRefresh(XtermWidget xw,
fg = extract_fg(xw, fg_bg, flags); fg = extract_fg(xw, fg_bg, flags);
bg = extract_bg(xw, fg_bg, flags); bg = extract_bg(xw, fg_bg, flags);
}); });
#if OPT_WIDE_ATTRS #if OPT_WIDE_ATTRS
old_attrs = xtermUpdateItalics(xw, flags, old_attrs); old_attrs = xtermUpdateItalics(xw, flags, old_attrs);
#endif #endif
@ -1896,7 +1937,7 @@ freeLineData(TScreen *screen, LineData *source)
#define ALLOC_IT(field) \ #define ALLOC_IT(field) \
if (result != NULL) { \ if (result != NULL) { \
if ((result->field = calloc(ncol, sizeof(*result->field))) == NULL) { \ if ((result->field = calloc((size_t) ncol, sizeof(*result->field))) == NULL) { \
result = freeLineData(screen, result); \ result = freeLineData(screen, result); \
} \ } \
} }
@ -1913,14 +1954,18 @@ allocLineData(TScreen *screen, LineData *source)
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
size += source->combSize * sizeof(result->combData[0]); size += source->combSize * sizeof(result->combData[0]);
#endif #endif
if ((result = calloc(1, size)) != NULL) { if ((result = calloc((size_t) 1, size)) != NULL) {
result->lineSize = ncol; result->lineSize = ncol;
ALLOC_IT(attribs); ALLOC_IT(attribs);
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
ALLOC_IT(color); ALLOC_IT(color);
#endif #endif
#if OPT_DEC_RECTOPS
ALLOC_IT(charSeen);
ALLOC_IT(charData); ALLOC_IT(charData);
#endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
ALLOC_IT(charSets);
if_OPT_WIDE_CHARS(screen, { if_OPT_WIDE_CHARS(screen, {
size_t off; size_t off;
for_each_combData(off, source) { for_each_combData(off, source) {
@ -2603,11 +2648,6 @@ ScrnCopyRectangle(XtermWidget xw, XTermRect *source, int nparam, int *params)
/* /*
* Modifies the video-attributes only - so selection (not a video attribute) is * Modifies the video-attributes only - so selection (not a video attribute) is
* unaffected. Colors and double-size flags are unaffected as well. * unaffected. Colors and double-size flags are unaffected as well.
*
* FIXME: our representation for "invisible" does not work with this operation,
* since the attribute byte is fully-allocated for other flags. The logic
* is shown for INVISIBLE because it's harmless, and useful in case the
* CHARDRAWN or PROTECTED flags are reassigned.
*/ */
void void
ScrnMarkRectangle(XtermWidget xw, ScrnMarkRectangle(XtermWidget xw,
@ -2812,14 +2852,13 @@ xtermCheckRect(XtermWidget xw,
int trimmed = 0; int trimmed = 0;
int mode = screen->checksum_ext; int mode = screen->checksum_ext;
TRACE(("xtermCheckRect: %s%s%s%s%s%s%s\n", TRACE(("xtermCheckRect: %s%s%s%s%s%s\n",
(mode == csDEC) ? "DEC" : "checksumExtension", (mode == csDEC) ? "DEC" : "checksumExtension",
(mode & csPOSITIVE) ? " !negative" : "", (mode & csPOSITIVE) ? " !negative" : "",
(mode & csATTRIBS) ? " !attribs" : "", (mode & csATTRIBS) ? " !attribs" : "",
(mode & csNOTRIM) ? " !trimmed" : "", (mode & csNOTRIM) ? " !trimmed" : "",
(mode & csDRAWN) ? " !drawn" : "", (mode & csDRAWN) ? " !drawn" : "",
(mode & csBYTE) ? " !byte" : "", (mode & csBYTE) ? " !byte" : ""));
(mode & cs8TH) ? " !7bit" : ""));
if (nparam > 2) { if (nparam > 2) {
nparam -= 2; nparam -= 2;
@ -2832,29 +2871,62 @@ xtermCheckRect(XtermWidget xw,
int row, col; int row, col;
Boolean first = True; Boolean first = True;
int embedded = 0; int embedded = 0;
DECNRCM_codes my_GR = screen->gsets[(int) screen->curgr];
for (row = top; row <= bottom; ++row) { for (row = top; row <= bottom; ++row) {
int left = (target.left - 1); int left = (target.left - 1);
int right = (target.right - 1); int right = (target.right - 1);
int ch;
ld = getLineData(screen, row); ld = getLineData(screen, row);
if (ld == 0) if (ld == 0)
continue; continue;
for (col = left; col <= right && col < (int) ld->lineSize; ++col) { for (col = left; col <= right && col < (int) ld->lineSize; ++col) {
int ch = ((ld->attribs[col] & CHARDRAWN) if (!(ld->attribs[col] & CHARDRAWN)) {
? (int) ld->charData[col] if (!(mode & (csNOTRIM | csDRAWN)))
: ' '); continue;
if (!(mode & csBYTE)) { ch = ' ';
unsigned c2 = (unsigned) ch; } else if (!(mode & csBYTE)) {
if (c2 > 0x7f && my_GR != nrc_ASCII) { ch = xtermCharSetDec(xw,
c2 = xtermCharSetIn(xw, c2, my_GR); ld->charSeen[col],
if (!(mode & cs8TH) && (c2 < 0x80)) ld->charSets[col]);
c2 |= 0x80; } else {
} ch = (int) ld->charData[col];
ch = (c2 & 0xff); if_OPT_WIDE_CHARS(screen, {
if (is_UCS_SPECIAL(ch))
continue;
});
} }
if (!(mode & csATTRIBS)) { if (!(mode & csATTRIBS)) {
#if OPT_ISO_COLORS && OPT_VT525_COLORS
if (screen->terminal_id == 525) {
IAttr flags = ld->attribs[col];
CellColor fg_bg = ld->color[col];
int fg = (int) extract_fg(xw, fg_bg, flags);
int bg = (int) extract_bg(xw, fg_bg, flags);
Boolean dft_bg = (bg < 0);
Boolean dft_fg = (fg < 0);
if (dft_bg)
bg = screen->assigned_bg;
if (bg >= 0 && bg < 16)
ch += bg;
if (dft_fg)
fg = screen->assigned_fg;
if (fg >= 0 && fg < 16)
ch += (fg << 4);
/* special case to match VT525 behavior */
if (dft_bg && !dft_fg && (ld->attribs[col] & BOLD))
ch -= 0x80;
}
#endif
if (ld->attribs[col] & PROTECTED)
ch += 0x4;
#if OPT_WIDE_ATTRS
if (ld->attribs[col] & INVISIBLE)
ch += 0x8;
#endif
if (ld->attribs[col] & UNDERLINE) if (ld->attribs[col] & UNDERLINE)
ch += 0x10; ch += 0x10;
if (ld->attribs[col] & INVERSE) if (ld->attribs[col] & INVERSE)
@ -2871,20 +2943,16 @@ xtermCheckRect(XtermWidget xw,
if ((mode & csNOTRIM)) if ((mode & csNOTRIM))
embedded += ch; embedded += ch;
} }
if ((ld->attribs[col] & CHARDRAWN)) { total += ch;
total += ch; if_OPT_WIDE_CHARS(screen, {
if_OPT_WIDE_CHARS(screen, { /* FIXME - not counted if trimming blanks */
/* FIXME - not counted if trimming blanks */ if (!(mode & csBYTE)) {
if (!(mode & csBYTE)) { size_t off;
size_t off; for_each_combData(off, ld) {
for_each_combData(off, ld) { total += (int) ld->combData[off][col];
total += (int) ld->combData[off][col];
}
} }
}) }
} else if (!(mode & csDRAWN)) { });
total += ch;
}
first = ((mode & csNOTRIM) != 0) ? True : False; first = ((mode & csNOTRIM) != 0) ? True : False;
} }
if (!(mode & csNOTRIM)) { if (!(mode & csNOTRIM)) {
@ -2901,6 +2969,55 @@ xtermCheckRect(XtermWidget xw,
} }
#endif /* OPT_DEC_RECTOPS */ #endif /* OPT_DEC_RECTOPS */
static void
set_ewmh_hint(XtermWidget xw, int operation, _Xconst char *prop)
{
TScreen *screen = TScreenOf(xw);
Display *dpy = screen->display;
Window window;
XEvent e;
Atom atom_fullscreen = CachedInternAtom(dpy, prop);
Atom atom_state = CachedInternAtom(dpy, "_NET_WM_STATE");
#if OPT_TRACE
const char *what = "?";
switch (operation) {
case _NET_WM_STATE_ADD:
what = "adding";
break;
case _NET_WM_STATE_REMOVE:
what = "removing";
break;
}
TRACE(("set_ewmh_hint %s %s\n", what, prop));
#endif
#if OPT_TEK4014
if (TEK4014_ACTIVE(xw)) {
window = TShellWindow;
} else
#endif
window = VShellWindow(xw);
memset(&e, 0, sizeof(e));
e.xclient.type = ClientMessage;
e.xclient.message_type = atom_state;
e.xclient.display = dpy;
e.xclient.window = window;
e.xclient.format = 32;
e.xclient.data.l[0] = operation;
e.xclient.data.l[1] = (long) atom_fullscreen;
XSendEvent(dpy, DefaultRootWindow(dpy), False,
SubstructureRedirectMask, &e);
}
void
ResetHiddenHint(XtermWidget xw)
{
set_ewmh_hint(xw, _NET_WM_STATE_REMOVE, "_NET_WM_STATE_HIDDEN");
}
#if OPT_MAXIMIZE #if OPT_MAXIMIZE
static _Xconst char * static _Xconst char *
@ -2982,39 +3099,6 @@ unset_resize_increments(XtermWidget xw)
XFlush(XtDisplay(xw)); XFlush(XtDisplay(xw));
} }
static void
set_ewmh_hint(Display *dpy, Window window, int operation, _Xconst char *prop)
{
XEvent e;
Atom atom_fullscreen = XInternAtom(dpy, prop, False);
Atom atom_state = XInternAtom(dpy, "_NET_WM_STATE", False);
#if OPT_TRACE
const char *what = "?";
switch (operation) {
case _NET_WM_STATE_ADD:
what = "adding";
break;
case _NET_WM_STATE_REMOVE:
what = "removing";
break;
}
TRACE(("set_ewmh_hint %s %s\n", what, prop));
#endif
memset(&e, 0, sizeof(e));
e.xclient.type = ClientMessage;
e.xclient.message_type = atom_state;
e.xclient.display = dpy;
e.xclient.window = window;
e.xclient.format = 32;
e.xclient.data.l[0] = operation;
e.xclient.data.l[1] = (long) atom_fullscreen;
XSendEvent(dpy, DefaultRootWindow(dpy), False,
SubstructureRedirectMask, &e);
}
/* /*
* Check if the given property is supported on the root window. * Check if the given property is supported on the root window.
* *
@ -3029,8 +3113,8 @@ set_ewmh_hint(Display *dpy, Window window, int operation, _Xconst char *prop)
static Boolean static Boolean
probe_netwm(Display *dpy, _Xconst char *propname) probe_netwm(Display *dpy, _Xconst char *propname)
{ {
Atom atom_fullscreen = XInternAtom(dpy, propname, False); Atom atom_fullscreen = CachedInternAtom(dpy, propname);
Atom atom_supported = XInternAtom(dpy, "_NET_SUPPORTED", False); Atom atom_supported = CachedInternAtom(dpy, "_NET_SUPPORTED");
Atom actual_type; Atom actual_type;
int actual_format; int actual_format;
long long_offset = 0; long long_offset = 0;
@ -3107,15 +3191,10 @@ FullScreen(XtermWidget xw, int new_ewmh_mode)
_Xconst char *newprop; _Xconst char *newprop;
int which = 0; int which = 0;
Window window;
#if OPT_TEK4014 #if OPT_TEK4014
if (TEK4014_ACTIVE(xw)) { if (TEK4014_ACTIVE(xw))
which = 1; which = 1;
window = TShellWindow;
} else
#endif #endif
window = VShellWindow(xw);
old_ewmh_mode = xw->work.ewmh[which].mode; old_ewmh_mode = xw->work.ewmh[which].mode;
oldprop = ewmhProperty(old_ewmh_mode); oldprop = ewmhProperty(old_ewmh_mode);
@ -3146,15 +3225,15 @@ FullScreen(XtermWidget xw, int new_ewmh_mode)
TRACE(("...new EWMH mode is allowed\n")); TRACE(("...new EWMH mode is allowed\n"));
if (new_ewmh_mode && !xw->work.ewmh[which].mode) { if (new_ewmh_mode && !xw->work.ewmh[which].mode) {
unset_resize_increments(xw); unset_resize_increments(xw);
set_ewmh_hint(dpy, window, _NET_WM_STATE_ADD, newprop); set_ewmh_hint(xw, _NET_WM_STATE_ADD, newprop);
} else if (xw->work.ewmh[which].mode && !new_ewmh_mode) { } else if (xw->work.ewmh[which].mode && !new_ewmh_mode) {
if (!xw->misc.resizeByPixel) { if (!xw->misc.resizeByPixel) {
set_resize_increments(xw); set_resize_increments(xw);
} }
set_ewmh_hint(dpy, window, _NET_WM_STATE_REMOVE, oldprop); set_ewmh_hint(xw, _NET_WM_STATE_REMOVE, oldprop);
} else { } else {
set_ewmh_hint(dpy, window, _NET_WM_STATE_REMOVE, oldprop); set_ewmh_hint(xw, _NET_WM_STATE_REMOVE, oldprop);
set_ewmh_hint(dpy, window, _NET_WM_STATE_ADD, newprop); set_ewmh_hint(xw, _NET_WM_STATE_ADD, newprop);
} }
xw->work.ewmh[which].mode = new_ewmh_mode; xw->work.ewmh[which].mode = new_ewmh_mode;
update_fullscreen(); update_fullscreen();

View file

@ -1,7 +1,7 @@
/* $XTermId: scrollbar.c,v 1.214 2021/12/31 23:35:02 tom Exp $ */ /* $XTermId: scrollbar.c,v 1.215 2023/11/12 22:08:19 tom Exp $ */
/* /*
* Copyright 2000-2020,2021 by Thomas E. Dickey * Copyright 2000-2021,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -862,7 +862,7 @@ getXkbLED(Display *dpy, const char *name, Boolean *result)
Bool state; Bool state;
if (have_xkb(dpy)) { if (have_xkb(dpy)) {
my_atom = XInternAtom(dpy, name, False); my_atom = CachedInternAtom(dpy, name);
if ((my_atom != None) && if ((my_atom != None) &&
XkbGetNamedIndicator(dpy, my_atom, NULL, &state, NULL, NULL)) { XkbGetNamedIndicator(dpy, my_atom, NULL, &state, NULL, NULL)) {
*result = (Boolean) state; *result = (Boolean) state;
@ -883,7 +883,7 @@ showXkbLED(Display *dpy, const char *name, Bool enable)
Boolean result = False; Boolean result = False;
if (have_xkb(dpy)) { if (have_xkb(dpy)) {
my_atom = XInternAtom(dpy, name, False); my_atom = CachedInternAtom(dpy, name);
if ((my_atom != None) && if ((my_atom != None) &&
XkbGetNamedIndicator(dpy, my_atom, NULL, NULL, NULL, NULL) && XkbGetNamedIndicator(dpy, my_atom, NULL, NULL, NULL, NULL) &&
XkbSetNamedIndicator(dpy, my_atom, True, enable, False, NULL)) { XkbSetNamedIndicator(dpy, my_atom, True, enable, False, NULL)) {

View file

@ -1,7 +1,7 @@
/* $XTermId: svg.c,v 1.21 2021/09/19 18:22:57 tom Exp $ */ /* $XTermId: svg.c,v 1.23 2023/03/31 23:08:13 tom Exp $ */
/* /*
* Copyright 2017-2020,2021 Thomas E. Dickey * Copyright 2017-2021,2023 Thomas E. Dickey
* Copyright 2015-2016,2017 Jens Schweikhardt * Copyright 2015-2016,2017 Jens Schweikhardt
* *
* All Rights Reserved * All Rights Reserved
@ -105,11 +105,12 @@ dumpSvgScreen(XtermWidget xw, FILE *fp)
int row; int row;
fprintf(fp, " <rect x='0' y='0' width='%u' height='%u' fill='%s'/>\n", fprintf(fp, " <rect x='0' y='0' width='%u' height='%u' fill='%s'/>\n",
cols * CELLW + 2 * (bw + ib), rows * CELLH + 2 * (bw + ib), (unsigned) (cols * CELLW + 2 * (bw + ib)),
(unsigned) (rows * CELLH + 2 * (bw + ib)),
PixelToCSSColor(xw, xw->core.border_pixel)); PixelToCSSColor(xw, xw->core.border_pixel));
fprintf(fp, " <rect x='%u' y='%u' width='%u' height='%u' fill='%s'/>\n", fprintf(fp, " <rect x='%u' y='%u' width='%u' height='%u' fill='%s'/>\n",
bw, bw, bw, bw,
MaxCols(s) * CELLW + 2 * ib, (unsigned) (MaxCols(s) * CELLW + 2 * ib),
(unsigned) (rows * CELLH + 2 * ib), (unsigned) (rows * CELLH + 2 * ib),
PixelToCSSColor(xw, xw->old_background)); PixelToCSSColor(xw, xw->old_background));

View file

@ -1,10 +1,10 @@
# $XTermId: terminfo,v 1.206 2023/01/08 10:51:12 tom Exp $ # $XTermId: terminfo,v 1.209 2024/02/11 23:35:48 tom Exp $
# #
# Updates/notes/new entries (e.g., xterm-8bit, xterm-16color, xterm-256color) # Updates/notes/new entries (e.g., xterm-8bit, xterm-16color, xterm-256color)
# - Thomas E. Dickey # - Thomas E. Dickey
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Copyright 1996-2022,2023 by Thomas E. Dickey # Copyright 1996-2023,2024 by Thomas E. Dickey
# #
# All Rights Reserved # All Rights Reserved
# #
@ -130,11 +130,6 @@
# respectively. # respectively.
# #
xterm-new|modern xterm terminal emulator, xterm-new|modern xterm terminal emulator,
npc,
indn=\E[%p1%dS,
kcbt=\E[Z,
kent=\EOM,
nel=\EE,
use=dec+sl, use=dec+sl,
use=ecma+index, use=ecma+index,
use=xterm+keypad, use=xterm+keypad,
@ -147,6 +142,7 @@ xterm-new|modern xterm terminal emulator,
use=xterm+nofkeys, use=xterm+nofkeys,
use=bracketed+paste, use=bracketed+paste,
use=report+version, use=report+version,
use=xterm+focus,
# Left/right margins are supported in xterm since patch #279 (2012/05/10) # Left/right margins are supported in xterm since patch #279 (2012/05/10)
vt420+lrmm|VT420 left/right margins, vt420+lrmm|VT420 left/right margins,
@ -155,9 +151,23 @@ vt420+lrmm|VT420 left/right margins,
smglr=\E[?69h\E[%i%p1%d;%p2%ds, smglr=\E[?69h\E[%i%p1%d;%p2%ds,
smgrp=\E[?69h\E[%i;%p1%ds, smgrp=\E[?69h\E[%i;%p1%ds,
# These "ansi+XXX" blocks were added in ncurses 5.0: # These "ansi+XXX" blocks were added in ncurses 5.0 or 5.1:
ansi+rep, ansi+arrows|ANSI normal-mode home and cursor-keys,
rep=%p1%c\E[%p2%{1}%-%db, kbs=^H,
kcub1=\E[D,
kcud1=\E[B,
kcuf1=\E[C,
kcuu1=\E[A,
khome=\E[H,
ansi+csr|ANSI scroll-region plus cursor save & restore,
csr=\E[%i%p1%d;%p2%dr,
rc=\E8,
sc=\E7,
ansi+cup|ANSI absolute cursor-addressing,
cup=\E[%i%p1%d;%p2%dH,
home=\E[H,
ansi+enq|ncurses extension for ANSI ENQ, ansi+enq|ncurses extension for ANSI ENQ,
u6=\E[%i%d;%dR, u6=\E[%i%d;%dR,
@ -165,6 +175,172 @@ ansi+enq|ncurses extension for ANSI ENQ,
u8=\E[?%[;0123456789]c, u8=\E[?%[;0123456789]c,
u9=\E[c, u9=\E[c,
ansi+erase|ANSI clear screen/line,
clear=\E[H\E[J,
ed=\E[J,
el=\E[K,
ansi+idc1|ANSI insert/delete one character,
dch1=\E[P,
ich1=\E[@,
rmir=\E[4l,
smir=\E[4h,
ansi+idc|ANSI insert/delete characters,
dch=\E[%p1%dP,
ich=\E[%p1%d@,
use=ansi+idc1,
ansi+idl1|ANSI insert/delete one line,
dl1=\E[M,
il1=\E[L,
ansi+idl|ANSI insert/delete lines,
dl=\E[%p1%dM,
il=\E[%p1%dL,
use=ansi+idl1,
ansi+inittabs|ANSI initial tab-stops,
it#8,
use=ansi+tabs,
ansi+local1|ANSI normal-mode cursor-keys,
cub1=\E[D,
cud1=\E[B,
cuf1=\E[C,
cuu1=\E[A,
ansi+local|ANSI normal-mode parameterized cursor-keys,
cub=\E[%p1%dD,
cud=\E[%p1%dB,
cuf=\E[%p1%dC,
cuu=\E[%p1%dA,
use=ansi+local1,
ansi+pp|ANSI printer port,
mc5i,
mc0=\E[i,
mc4=\E[4i,
mc5=\E[5i,
ansi+rep|ANSI repeat-character,
rep=%p1%c\E[%p2%{1}%-%db,
ansi+sgr|ANSI graphic renditions,
blink=\E[5m,
invis=\E[8m,
rev=\E[7m,
sgr=\E[0
%?
%p3
%t;7
%;
%?
%p4
%t;5
%;
%?
%p7
%t;8
%;
m,
sgr0=\E[0m,
ansi+sgrso|ANSI standout only,
rmso=\E[m,
smso=\E[7m,
ansi+sgrul|ANSI underline only,
rmul=\E[m,
smul=\E[4m,
ansi+sgrbold|ANSI graphic renditions; assuming terminal has bold; not dim,
bold=\E[1m,
sgr=\E[
%?
%p1
%t7;
%;
%?
%p2
%t4;
%;
%?
%p3
%t7;
%;
%?
%p4
%t5;
%;
%?
%p6
%t1;
%;
%?
%p7
%t8;
%;
m,
use=ansi+sgr,
use=ansi+sgrso,
use=ansi+sgrul,
ansi+sgrdim|ANSI graphic renditions; assuming terminal has dim; not bold,
dim=\E[2m,
sgr=\E[
%?
%p1
%t7;
%;
%?
%p2
%t4;
%;
%?
%p3
%t7;
%;
%?
%p4
%t5;
%;
%?
%p5
%t2;
%;
%?
%p7
%t8;
%;
m,
use=ansi+sgr,
use=ansi+sgrso,
use=ansi+sgrul,
ansi+tabs|ANSI tab-stops,
cbt=\E[Z,
ht=^I,
hts=\EH,
tbc=\E[3g,
# These were added after ncurses 6.0:
ansi+apparrows|ANSI application-mode home and cursor-keys,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
khome=\EOH,
use=ansi+arrows,
ansi+cpr|ncurses extension for ANSI CPR,
u6=\E[%i%d;%dR,
u7=\E[6n,
ansi+rca2|ANSI relative cursor-addressing,
hpa=\E[%i%p1%dG,
vpa=\E[%i%p1%dd,
# Encode modifiers using parameters (see "Xterm Control Sequences" ctlseqs.ms). # Encode modifiers using parameters (see "Xterm Control Sequences" ctlseqs.ms).
# Note that this is unrelated to PCTERM. # Note that this is unrelated to PCTERM.
# #
@ -908,7 +1084,7 @@ xterm+pce0|fragment with modifyCursorKeys:0,
kPRV5=\E[5;5~, kPRV5=\E[5;5~,
kPRV6=\E[5;6~, kPRV6=\E[5;6~,
kPRV7=\E[5;7~, kPRV7=\E[5;7~,
use=xterm+edit, use=vt220+pcedit,
ecma+italics|ECMA-48 italics, ecma+italics|ECMA-48 italics,
ritm=\E[23m, ritm=\E[23m,
@ -968,6 +1144,16 @@ xterm+x11mouse|X11 xterm mouse protocol,
%p2%'!'%+%c %p2%'!'%+%c
%p1%'!'%+%c, %p1%'!'%+%c,
# xterm patch #224 2007/2/11 added private mode 1004, for enabling/disabling
# focus in/out event reporting. The 1004 is normally part of XM in a different
# building-block, e.g., for reporting any events.
xterm+focus|xterm focus-in/out event "keys",
XF,
fd=\E[?1004l,
fe=\E[?1004h,
kxIN=\E[I,
kxOUT=\E[O,
# https://invisible-island.net/xterm/xterm-paste64.html # https://invisible-island.net/xterm/xterm-paste64.html
# #
# Bracketed paste was introduced by xterm patch #203 in May 2005, as part of a # Bracketed paste was introduced by xterm patch #203 in May 2005, as part of a
@ -988,7 +1174,21 @@ bracketed+paste|xterm bracketed paste,
# For example: # For example:
# ^[P>|XTerm(354)^[\ # ^[P>|XTerm(354)^[\
report+version|Report xterm name and version (XTVERSION)., report+version|Report xterm name and version (XTVERSION).,
RV=\E[>0q, XR=\E[>0q,
xr=\EP>\\|XTerm\\([1-9][0-9]+\\)
\E\\\\,
use=report+da2,
# Vim uses RV to denote the secondary device attributes. Xterm documents the
# - first parameter as the terminal type (extending it to VT100),
# - the second as the patch number for xterm, and
# - the third parameter as zero.
# Other terminals may provide useful responses, though few are documented.
#
# Since patch #280 2012/06/24, xterm by default reports itself as a VT420.
report+da2|report secondary device attributes (DA2),
RV=\E[>c,
rv=\E\\[41;[1-6][0-9][0-9];0c,
# This chunk is used for building the VT220/Sun/PC keyboard variants. # This chunk is used for building the VT220/Sun/PC keyboard variants.
xterm-basic|modern xterm terminal emulator - common, xterm-basic|modern xterm terminal emulator - common,
@ -996,7 +1196,6 @@ xterm-basic|modern xterm terminal emulator - common,
am, am,
bce, bce,
km, km,
mc5i,
mir, mir,
msgr, msgr,
xenl, xenl,
@ -1004,59 +1203,34 @@ xterm-basic|modern xterm terminal emulator - common,
XT, XT,
colors#8, colors#8,
cols#80, cols#80,
it#8,
lines#24, lines#24,
pairs#64, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqr acsc=``aaffggiijjkkllmmnnooppqqr
rssttuuvvwwxxyyzz{{||}}~~, rssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bel=^G,
blink=\E[5m,
bold=\E[1m,
cbt=\E[Z,
civis=\E[?25l, civis=\E[?25l,
clear=\E[H\E[2J, clear=\E[H\E[2J,
cnorm=\E[?12l\E[?25h, cnorm=\E[?12l\E[?25h,
cr=\r, cr=\r,
csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD,
cub1=^H, cub1=^H,
cud=\E[%p1%dB,
cud1=\n, cud1=\n,
cuf=\E[%p1%dC,
cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA,
cuu1=\E[A,
cvvis=\E[?12;25h, cvvis=\E[?12;25h,
dch=\E[%p1%dP, dch=\E[%p1%dP,
dch1=\E[P, dch1=\E[P,
dim=\E[2m,
dl=\E[%p1%dM,
dl1=\E[M,
ech=\E[%p1%dX, ech=\E[%p1%dX,
ed=\E[J, ed=\E[J,
el=\E[K, el=\E[K,
el1=\E[1K, el1=\E[1K,
flash=\E[?5h$<100/>\E[?5l, flash=\E[?5h$<100/>\E[?5l,
home=\E[H, home=\E[H,
hpa=\E[%i%p1%dG,
ht=^I,
hts=\EH,
ich=\E[%p1%d@, ich=\E[%p1%d@,
il=\E[%p1%dL,
il1=\E[L,
ind=\n, ind=\n,
invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, is2=\E[!p\E[?3;4l\E[4l\E>,
kmous=\E[M, kmous=\E[M,
mc0=\E[i,
mc4=\E[4i,
mc5=\E[5i,
meml=\El, meml=\El,
memu=\Em, memu=\Em,
op=\E[39;49m, op=\E[39;49m,
rc=\E8,
rev=\E[7m,
ri=\EM, ri=\EM,
rmacs=\E(B, rmacs=\E(B,
rmam=\E[?7l, rmam=\E[?7l,
@ -1067,7 +1241,6 @@ xterm-basic|modern xterm terminal emulator - common,
rmul=\E[24m, rmul=\E[24m,
rs1=\Ec, rs1=\Ec,
rs2=\E[!p\E[?3;4l\E[4l\E>, rs2=\E[!p\E[?3;4l\E[4l\E>,
sc=\E7,
setab=\E[4%p1%dm, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4 setb=\E[4
@ -1144,12 +1317,16 @@ xterm-basic|modern xterm terminal emulator - common,
smir=\E[4h, smir=\E[4h,
smkx=\E[?1h\E=, smkx=\E[?1h\E=,
smm=\E[?1034h, smm=\E[?1034h,
smso=\E[7m,
smul=\E[4m,
tbc=\E[3g,
vpa=\E[%i%p1%dd,
E3=\E[3J, E3=\E[3J,
use=ansi+csr,
use=ansi+enq, use=ansi+enq,
use=ansi+idl,
use=ansi+inittabs,
use=ansi+local,
use=ansi+pp,
use=ansi+rca2,
use=ansi+sgrbold,
use=ansi+sgrdim,
use=xterm+alt+title, use=xterm+alt+title,
use=xterm+kbs, use=xterm+kbs,
@ -1164,6 +1341,7 @@ xterm+nofkeys|building block for xterm fkey-variants,
use=vt420+lrmm, use=vt420+lrmm,
use=xterm+sm+1006, use=xterm+sm+1006,
use=xterm+tmux, use=xterm+tmux,
use=xterm+focus,
use=ecma+italics, use=ecma+italics,
use=xterm+keypad, use=xterm+keypad,
use=xterm-basic, use=xterm-basic,
@ -1184,12 +1362,7 @@ xterm+nofkeys|building block for xterm fkey-variants,
xterm-vt220|xterm emulating vt220, xterm-vt220|xterm emulating vt220,
npc, npc,
kcbt=\E[Z, kcbt=\E[Z,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
kend=\E[4~, kend=\E[4~,
kent=\EOM,
kf10=\E[21~, kf10=\E[21~,
kf11=\E[23~, kf11=\E[23~,
kf12=\E[24~, kf12=\E[24~,
@ -1207,18 +1380,16 @@ xterm-vt220|xterm emulating vt220,
kf8=\E[19~, kf8=\E[19~,
kf9=\E[20~, kf9=\E[20~,
khome=\E[1~, khome=\E[1~,
kich1=\E[2~,
kmous=\E[M, kmous=\E[M,
knp=\E[6~,
kpp=\E[5~,
nel=\EE, nel=\EE,
use=xterm+app, use=xterm+app,
use=xterm+edit,
use=vt220+keypad, use=vt220+keypad,
use=vt220+pcedit,
use=ecma+italics, use=ecma+italics,
use=ecma+index, use=ecma+index,
use=ansi+rep, use=ansi+rep,
use=ecma+strikeout, use=ecma+strikeout,
use=xterm+focus,
use=xterm+sm+1006, use=xterm+sm+1006,
use=xterm+tmux, use=xterm+tmux,
use=xterm+keypad, use=xterm+keypad,
@ -1333,13 +1504,8 @@ vt52+keypad|DECScope auxiliary keypad,
xterm-sun|xterm with sun function keys, xterm-sun|xterm with sun function keys,
kb2=\E[218z, kb2=\E[218z,
kcpy=\E[197z, kcpy=\E[197z,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
kdch1=\E[3z, kdch1=\E[3z,
kend=\E[220z, kend=\E[220z,
kent=\EOM,
kf1=\E[224z, kf1=\E[224z,
kf10=\E[233z, kf10=\E[233z,
kf11=\E[192z, kf11=\E[192z,
@ -1379,6 +1545,8 @@ xterm-sun|xterm with sun function keys,
knp=\E[222z, knp=\E[222z,
kpp=\E[216z, kpp=\E[216z,
kund=\E[195z, kund=\E[195z,
use=xterm+kbs,
use=ansi+apparrows,
use=xterm+nopcfkeys, use=xterm+nopcfkeys,
use=xterm+nofkeys, use=xterm+nofkeys,
@ -1491,7 +1659,7 @@ xterm-sco|xterm with SCO function keys,
kmous=\E[>M, kmous=\E[>M,
knp=\E[G, knp=\E[G,
kpp=\E[I, kpp=\E[I,
use=xterm+noapp, use=vt100+noapp,
use=xterm+nofkeys, use=xterm+nofkeys,
# #
# Other variants (these are all very old entries, from X11R5): # Other variants (these are all very old entries, from X11R5):
@ -1569,15 +1737,22 @@ xterm-noapp|xterm with cursor keys in normal mode,
rmkx=\E>, rmkx=\E>,
smcup@, smcup@,
smkx=\E=, smkx=\E=,
use=xterm+noapp, use=vt100+noapp,
use=xterm, use=xterm,
xterm+noapp|fragment with cursor keys in normal mode, vt100+noapp|fragment with cursor keys in normal mode,
kcub1=\E[D, kcub1=\E[D,
kcud1=\E[B, kcud1=\E[B,
kcuf1=\E[C, kcuf1=\E[C,
kcuu1=\E[A, kcuu1=\E[A,
use=xterm+noapp+pc, use=vt100+noapp+pc,
xterm+acs|ISO-2022 alternate character-switching for xterm,
acsc=``aaffggiijjkkllmmnnooppqqr
rssttuuvvwwxxyyzz{{||}}~~,
enacs@,
rmacs=\E(B,
smacs=\E(0,
xterm+app|fragment with cursor keys in application mode, xterm+app|fragment with cursor keys in application mode,
kcub1=\EOD, kcub1=\EOD,
@ -1586,7 +1761,7 @@ xterm+app|fragment with cursor keys in application mode,
kcuu1=\EOA, kcuu1=\EOA,
use=xterm+app+pc, use=xterm+app+pc,
xterm+noapp+pc|fragment for noapp pc-style home/end, vt100+noapp+pc|fragment for noapp pc-style home/end,
kend=\E[F, kend=\E[F,
khome=\E[H, khome=\E[H,
@ -1594,7 +1769,7 @@ xterm+app+pc|fragment for app pc-style home/end,
kend=\EOF, kend=\EOF,
khome=\EOH, khome=\EOH,
xterm+edit|fragment for 6-key editing-keypad, vt220+pcedit|fragment for 6-key editing-keypad,
kdch1=\E[3~, kdch1=\E[3~,
kich1=\E[2~, kich1=\E[2~,
knp=\E[6~, knp=\E[6~,
@ -1616,10 +1791,6 @@ xterm+vt+edit|fragment for vt220-style editing keypad,
kfnd=\E[1~, kfnd=\E[1~,
kslt=\E[4~, kslt=\E[4~,
xterm+noalt|xterm without altscreen,
rmcup@,
smcup@,
xterm+alt1049|xterm 90 feature, xterm+alt1049|xterm 90 feature,
rmcup=\E[?1049l, rmcup=\E[?1049l,
smcup=\E[?1049h, smcup=\E[?1049h,
@ -2066,8 +2237,6 @@ xterm+256color2|xterm 256-color feature,
%p1%d %p1%d
%; %;
m, m,
setb@,
setf@,
use=xterm+256color, use=xterm+256color,
xterm-256color|xterm with 256 colors, xterm-256color|xterm with 256 colors,
use=xterm+256color2, use=xterm+256color2,
@ -2150,8 +2319,6 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
it#8, it#8,
lines#24, lines#24,
pairs#64, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqr
rssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bel=^G,
blink=\2335m, blink=\2335m,
bold=\2331m, bold=\2331m,
@ -2240,7 +2407,6 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
rc=\E8, rc=\E8,
rev=\2337m, rev=\2337m,
ri=\215, ri=\215,
rmacs=\E(B,
rmam=\233?7l, rmam=\233?7l,
rmcup=\233?1049l, rmcup=\233?1049l,
rmir=\2334l, rmir=\2334l,
@ -2318,7 +2484,6 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
\E(B \E(B
%;, %;,
sgr0=\2330m\E(B, sgr0=\2330m\E(B,
smacs=\E(0,
smam=\233?7h, smam=\233?7h,
smcup=\233?1049h, smcup=\233?1049h,
smir=\2334h, smir=\2334h,
@ -2331,6 +2496,7 @@ xterm-8bit|xterm terminal emulator with 8-bit controls (X Window System),
u8=\233[?%[;0123456789]c, u8=\233[?%[;0123456789]c,
u9=\E[c, u9=\E[c,
vpa=\233%i%p1%dd, vpa=\233%i%p1%dd,
use=xterm+acs,
use=xterm+kbs, use=xterm+kbs,
# #
xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System), xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
@ -2338,7 +2504,6 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
am, am,
bce, bce,
km, km,
mc5i,
mir, mir,
msgr, msgr,
npc, npc,
@ -2347,50 +2512,30 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
XT, XT,
colors#8, colors#8,
cols#80, cols#80,
it#8,
lines#24, lines#24,
pairs#64, pairs#64,
acsc=``aaffggiijjkkllmmnnooppqqr acsc=``aaffggiijjkkllmmnnooppqqr
rssttuuvvwwxxyyzz{{||}}~~, rssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bel=^G,
blink=\E[5m,
bold=\E[1m,
cbt=\E[Z,
civis=\E[?25l, civis=\E[?25l,
clear=\E[H\E[2J, clear=\E[H\E[2J,
cnorm=\E[?12l\E[?25h, cnorm=\E[?12l\E[?25h,
cr=\r, cr=\r,
csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD,
cub1=^H, cub1=^H,
cud=\E[%p1%dB,
cud1=\n, cud1=\n,
cuf=\E[%p1%dC,
cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA,
cuu1=\E[A,
cvvis=\E[?12;25h, cvvis=\E[?12;25h,
dch=\E[%p1%dP, dch=\E[%p1%dP,
dch1=\E[P, dch1=\E[P,
dl=\E[%p1%dM,
dl1=\E[M,
ech=\E[%p1%dX, ech=\E[%p1%dX,
ed=\E[J, ed=\E[J,
el=\E[K, el=\E[K,
el1=\E[1K, el1=\E[1K,
enacs=\E(B\E)0, enacs=\E(B\E)0,
flash=\E[?5h$<100/>\E[?5l, flash=\E[?5h$<100/>\E[?5l,
home=\E[H,
hpa=\E[%i%p1%dG, hpa=\E[%i%p1%dG,
ht=^I,
hts=\EH,
ich=\E[%p1%d@, ich=\E[%p1%d@,
il=\E[%p1%dL,
il1=\E[L,
ind=\n, ind=\n,
indn=\E[%p1%dS, indn=\E[%p1%dS,
invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, is2=\E[!p\E[?3;4l\E[4l\E>,
kDC=\E[3;2~, kDC=\E[3;2~,
kEND=\E[1;2F, kEND=\E[1;2F,
@ -2402,10 +2547,6 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
kRIT=\E[1;2C, kRIT=\E[1;2C,
kb2=\EOE, kb2=\EOE,
kcbt=\E[Z, kcbt=\E[Z,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
kdch1=\E[3~, kdch1=\E[3~,
kend=\EOF, kend=\EOF,
kent=\EOM, kent=\EOM,
@ -2457,19 +2598,13 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
kf7=\E[18~, kf7=\E[18~,
kf8=\E[19~, kf8=\E[19~,
kf9=\E[20~, kf9=\E[20~,
khome=\EOH,
kich1=\E[2~, kich1=\E[2~,
kmous=\E[M, kmous=\E[M,
knp=\E[6~, knp=\E[6~,
kpp=\E[5~, kpp=\E[5~,
mc0=\E[i,
mc4=\E[4i,
mc5=\E[5i,
meml=\El, meml=\El,
memu=\Em, memu=\Em,
op=\E[39;49m, op=\E[39;49m,
rc=\E8,
rev=\E[7m,
ri=\EM, ri=\EM,
rin=\E[%p1%dT, rin=\E[%p1%dT,
rmacs=^O, rmacs=^O,
@ -2480,7 +2615,6 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
rmul=\E[24m, rmul=\E[24m,
rs1=\Ec, rs1=\Ec,
rs2=\E[!p\E[?3;4l\E[4l\E>, rs2=\E[!p\E[?3;4l\E[4l\E>,
sc=\E7,
setab=\E[4%p1%dm, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm, setaf=\E[3%p1%dm,
setb=\E[4 setb=\E[4
@ -2551,20 +2685,24 @@ xterm-xf86-v44|xterm terminal emulator (XFree86 4.4 Window System),
smam=\E[?7h, smam=\E[?7h,
smir=\E[4h, smir=\E[4h,
smkx=\E[?1h\E=, smkx=\E[?1h\E=,
smso=\E[7m,
smul=\E[4m,
tbc=\E[3g,
u6=\E[%i%d;%dR,
u7=\E[6n,
u8=\E[?1;2c, u8=\E[?1;2c,
u9=\E[c,
vpa=\E[%i%p1%dd, vpa=\E[%i%p1%dd,
ka2=\EOx, ka2=\EOx,
kb1=\EOt, kb1=\EOt,
kb3=\EOv, kb3=\EOv,
kc2=\EOr, kc2=\EOr,
use=xterm+alt1049,
use=xterm+kbs, use=xterm+kbs,
use=ansi+apparrows,
use=ansi+csr,
use=ansi+cup,
use=ansi+enq,
use=ansi+idl,
use=ansi+inittabs,
use=ansi+local,
use=ansi+pp,
use=ansi+sgrbold,
use=xterm+alt1049,
xterm-xfree86|xterm terminal emulator (XFree86 4.4 Window System), xterm-xfree86|xterm terminal emulator (XFree86 4.4 Window System),
use=xterm-xf86-v44, use=xterm-xf86-v44,
# #
@ -2590,24 +2728,19 @@ xterm-r6|xterm X11R6 version,
bold=\E[1m, bold=\E[1m,
clear=\E[H\E[2J, clear=\E[H\E[2J,
cr=\r, cr=\r,
csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub=\E[%p1%dD,
cub1=^H, cub1=^H,
cud=\E[%p1%dB, cud=\E[%p1%dB,
cud1=\n, cud1=\n,
cuf=\E[%p1%dC, cuf=\E[%p1%dC,
cuf1=\E[C, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA, cuu=\E[%p1%dA,
cuu1=\E[A, cuu1=\E[A,
dch=\E[%p1%dP, dch=\E[%p1%dP,
dch1=\E[P, dch1=\E[P,
dl=\E[%p1%dM, dl=\E[%p1%dM,
dl1=\E[M, dl1=\E[M,
ed=\E[J,
el=\E[K,
enacs=\E)0, enacs=\E)0,
home=\E[H,
ht=^I, ht=^I,
hts=\EH, hts=\EH,
il=\E[%p1%dL, il=\E[%p1%dL,
@ -2619,7 +2752,6 @@ xterm-r6|xterm X11R6 version,
kcud1=\EOB, kcud1=\EOB,
kcuf1=\EOC, kcuf1=\EOC,
kcuu1=\EOA, kcuu1=\EOA,
kdch1=\E[3~,
kf1=\E[11~, kf1=\E[11~,
kf10=\E[21~, kf10=\E[21~,
kf11=\E[23~, kf11=\E[23~,
@ -2643,7 +2775,6 @@ xterm-r6|xterm X11R6 version,
kmous=\E[M, kmous=\E[M,
meml=\El, meml=\El,
memu=\Em, memu=\Em,
rc=\E8,
rev=\E[7m, rev=\E[7m,
ri=\EM, ri=\EM,
rmacs=^O, rmacs=^O,
@ -2654,7 +2785,6 @@ xterm-r6|xterm X11R6 version,
rmul=\E[m, rmul=\E[m,
rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[ rs2=\E[m\E[?7h\E[4l\E>\E7\E[r\E[
?1;3;4;6l\E8, ?1;3;4;6l\E8,
sc=\E7,
sgr0=\E[m, sgr0=\E[m,
smacs=^N, smacs=^N,
smcup=\E7\E[?47h, smcup=\E7\E[?47h,
@ -2663,10 +2793,12 @@ xterm-r6|xterm X11R6 version,
smso=\E[7m, smso=\E[7m,
smul=\E[4m, smul=\E[4m,
tbc=\E[3g, tbc=\E[3g,
u6=\E[%i%d;%dR,
u7=\E[6n,
u8=\E[?1;2c, u8=\E[?1;2c,
u9=\E[c, u9=\E[c,
use=ansi+cpr,
use=ansi+csr,
use=ansi+cup,
use=ansi+erase,
use=xterm+kbs, use=xterm+kbs,
use=xterm+decedit, use=xterm+decedit,
xterm-old|antique xterm version, xterm-old|antique xterm version,
@ -2697,34 +2829,15 @@ xterm-r5|xterm R5 version,
bold=\E[1m, bold=\E[1m,
clear=\E[H\E[2J, clear=\E[H\E[2J,
cr=\r, cr=\r,
csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD,
cub1=^H, cub1=^H,
cud=\E[%p1%dB,
cud1=\n, cud1=\n,
cuf=\E[%p1%dC,
cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cup=\E[%i%p1%d;%p2%dH,
cuu=\E[%p1%dA,
cuu1=\E[A,
dch=\E[%p1%dP,
dch1=\E[P,
dl=\E[%p1%dM,
dl1=\E[M,
ed=\E[J, ed=\E[J,
el=\E[K, el=\E[K,
home=\E[H, home=\E[H,
ht=^I, ht=^I,
hts=\EH, hts=\EH,
ich=\E[%p1%d@,
ich1=\E[@,
il=\E[%p1%dL,
il1=\E[L,
ind=\n, ind=\n,
kcub1=\EOD,
kcud1=\EOB,
kcuf1=\EOC,
kcuu1=\EOA,
kdch1=\E[3~, kdch1=\E[3~,
kdl1=\E[31~, kdl1=\E[31~,
kel=\E[8~, kel=\E[8~,
@ -2748,16 +2861,12 @@ xterm-r5|xterm R5 version,
kmous=\E[M, kmous=\E[M,
knp=\E[6~, knp=\E[6~,
kpp=\E[5~, kpp=\E[5~,
rc=\E8,
rev=\E[7m, rev=\E[7m,
ri=\EM, ri=\EM,
rmir=\E[4l,
rmkx=\E[?1l\E>, rmkx=\E[?1l\E>,
rmso=\E[m,
rmul=\E[m, rmul=\E[m,
rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h
\E[m\E[r\E[2J\E[H, \E[m\E[r\E[2J\E[H,
sc=\E7,
sgr=\E[ sgr=\E[
%? %?
%p1 %p1
@ -2781,16 +2890,18 @@ xterm-r5|xterm R5 version,
%; %;
m, m,
sgr0=\E[m, sgr0=\E[m,
smir=\E[4h,
smkx=\E[?1h\E=, smkx=\E[?1h\E=,
smso=\E[7m,
smul=\E[4m, smul=\E[4m,
tbc=\E[3g, tbc=\E[3g,
u6=\E[%i%d;%dR,
u7=\E[6n,
u8=\E[?1;2c, u8=\E[?1;2c,
u9=\E[c,
use=xterm+kbs, use=xterm+kbs,
use=ansi+apparrows,
use=ansi+csr,
use=ansi+enq,
use=ansi+idc,
use=ansi+idl,
use=ansi+local,
use=ansi+sgrso,
# DEC status-line is an extension for VT220, and standard with VT320 and up. # DEC status-line is an extension for VT220, and standard with VT320 and up.
dec+sl|DEC VTxx status line, dec+sl|DEC VTxx status line,

View file

@ -1,7 +1,7 @@
/* $XTermId: trace.c,v 1.239 2022/10/06 20:43:02 tom Exp $ */ /* $XTermId: trace.c,v 1.240 2023/10/14 16:52:49 tom Exp $ */
/* /*
* Copyright 1997-2021,2022 by Thomas E. Dickey * Copyright 1997-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -269,6 +269,7 @@ visibleScsCode(DECNRCM_codes chrset)
MAP("1", nrc_DEC_Alt_Chars); MAP("1", nrc_DEC_Alt_Chars);
MAP("2", nrc_DEC_Alt_Graphics); MAP("2", nrc_DEC_Alt_Graphics);
MAP("<", nrc_DEC_Supp); MAP("<", nrc_DEC_Supp);
MAP("<", nrc_DEC_UPSS);
MAP("%5", nrc_DEC_Supp_Graphic); MAP("%5", nrc_DEC_Supp_Graphic);
MAP(">", nrc_DEC_Technical); MAP(">", nrc_DEC_Technical);
MAP("4", nrc_Dutch); MAP("4", nrc_Dutch);

View file

@ -1,7 +1,7 @@
/* $XTermId: trace.h,v 1.94 2022/10/06 20:40:49 tom Exp $ */ /* $XTermId: trace.h,v 1.95 2024/05/15 23:51:40 tom Exp $ */
/* /*
* Copyright 1997-2021,2022 by Thomas E. Dickey * Copyright 1997-2022,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -92,7 +92,7 @@ extern void TraceArgv(const char * /* tag */, char ** /* argv */);
extern const char *trace_who; extern const char *trace_who;
#undef TRACE_CHILD #undef TRACE_CHILD
#define TRACE_CHILD int tracing_child = (trace_who = "child") != 0; (void) tracing_child; #define TRACE_CHILD int tracing_child = (trace_who = "child") != 0; (void) tracing_child
extern void TraceEvent(const char *, XEvent *, String *, Cardinal *); extern void TraceEvent(const char *, XEvent *, String *, Cardinal *);
#undef TRACE_EVENT #undef TRACE_EVENT

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# $XTermId: uxterm,v 1.29 2020/03/07 15:52:31 tom Exp $ # $XTermId: uxterm,v 1.30 2023/05/03 23:47:34 tom Exp $
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# this file is part of xterm # this file is part of xterm
# #
# Copyright 2001-2007,2020 by Thomas E. Dickey # Copyright 2001-2020,2023 by Thomas E. Dickey
# #
# All Rights Reserved # All Rights Reserved
# #
# Permission is hereby granted, free of charge, to any person obtaining a # Permission is hereby granted, free of charge, to any person obtaining a
@ -83,7 +83,7 @@ done
# user's shell does not reset unknown locale specifiers, but not all shells do. # user's shell does not reset unknown locale specifiers, but not all shells do.
if test $found != yes ; then if test $found != yes ; then
if test -n "$value" ; then if test -n "$value" ; then
value=`echo ${value} |sed -e 's/[.@].*//'`.UTF-8 value=`echo "${value}" |sed -e 's/[.@].*//'`.UTF-8
else else
expect= expect=
for name in LC_ALL LC_CTYPE LANG for name in LC_ALL LC_CTYPE LANG
@ -146,4 +146,4 @@ fi
# for testing: # for testing:
#test -f ./xterm && XTERM_PROGRAM=./xterm #test -f ./xterm && XTERM_PROGRAM=./xterm
exec "$XTERM_PROGRAM" -class UXTerm -title "$whoami" -u8 "$@" exec "$XTERM_PROGRAM" -class UXTerm -u8 "$@"

View file

@ -1,6 +1,6 @@
.\" $XTermId: uxterm.man,v 1.8 2018/06/23 00:19:44 tom Exp $ .\" $XTermId: uxterm.man,v 1.9 2024/01/11 22:10:29 tom Exp $
.\" .\"
.\" Copyright 2007-2012, 2018 Thomas E. Dickey .\" Copyright 2007-2018,2024 Thomas E. Dickey
.\" Copyright 2001, 2004 Branden Robinson .\" Copyright 2001, 2004 Branden Robinson
.\" .\"
.\" Permission is hereby granted, free of charge, to any person obtaining a .\" Permission is hereby granted, free of charge, to any person obtaining a
@ -23,17 +23,25 @@
.\" .\"
.ds N Uxterm .ds N Uxterm
.ds n uxterm .ds n uxterm
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds AQ \(aq
.el .ds AQ '
.ie \n(.g .ds `` \(lq
.el .ds `` ``
.ie \n(.g .ds '' \(rq
.el .ds '' ''
.\"
.TH UXTERM 1 "__app_date__" "__app_version__" "X Window System" .TH UXTERM 1 "__app_date__" "__app_version__" "X Window System"
.
.ie \n(.g \{\
.ds `` \(lq
.ds '' \(rq
.ds ' \(aq
.\}
.el \{\
.ie t .ds `` ``
.el .ds `` ""
.ie t .ds '' ''
.el .ds '' ""
.ie t .ds ' \(aq
.el .ds ' '
.\}
.
.SH NAME .SH NAME
uxterm \- X terminal emulator for Unicode (UTF-8) environments uxterm \-
X terminal emulator for Unicode (UTF-8) environments
.SH SYNOPSIS .SH SYNOPSIS
.B \*n .B \*n
[ [
@ -94,7 +102,7 @@ is available for KOI8-R environments.
.B LC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG .B LC_ALL\fR, \fBLC_CTYPE\fR, \fBLANG
The values of these variables are checked, in order, to determine the The values of these variables are checked, in order, to determine the
character set used by the current locale. character set used by the current locale.
.SH AUTHOR .SH AUTHORS
Thomas Dickey Thomas Dickey
.SH "SEE ALSO" .SH "SEE ALSO"
.B locale(1), .B locale(1),

View file

@ -1,7 +1,7 @@
/* $XTermId: version.h,v 1.536 2023/01/09 10:29:58 tom Exp $ */ /* $XTermId: version.h,v 1.565 2024/07/11 23:38:21 tom Exp $ */
/* /*
* Copyright 1998-2022,2023 by Thomas E. Dickey * Copyright 1998-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -38,8 +38,8 @@
* version of X to which this version of xterm has been built. The resulting * version of X to which this version of xterm has been built. The resulting
* number in parentheses is my patch number (Thomas E. Dickey). * number in parentheses is my patch number (Thomas E. Dickey).
*/ */
#define XTERM_PATCH 378 #define XTERM_PATCH 393
#define XTERM_DATE 2023-01-09 #define XTERM_DATE 2024-07-11
#ifndef __vendorversion__ #ifndef __vendorversion__
#define __vendorversion__ "XTerm/SecBSD" #define __vendorversion__ "XTerm/SecBSD"

View file

@ -1,5 +1,5 @@
#!/usr/bin/env perl #!/usr/bin/env perl
# $XTermId: vxt-insdelln,v 1.10 2022/10/10 17:05:38 tom Exp $ # $XTermId: insdelln.pl,v 1.10 2022/10/10 17:05:38 tom Exp $
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# this file is part of xterm # this file is part of xterm
# #

View file

@ -1,9 +1,9 @@
/* $XTermId: wcwidth.c,v 1.61 2022/09/24 00:24:57 tom Exp $ */ /* $XTermId: wcwidth.c,v 1.73 2024/07/06 00:45:04 tom Exp $ */
/* $XFree86: xc/programs/xterm/wcwidth.c,v 1.9 2006/06/19 00:36:52 dickey Exp $ */ /* $XFree86: xc/programs/xterm/wcwidth.c,v 1.9 2006/06/19 00:36:52 dickey Exp $ */
/* /*
* Copyright 2002-2021,2022 by Thomas E. Dickey * Copyright 2002-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -115,16 +115,23 @@
*----------------------------------------------------------------------------- *-----------------------------------------------------------------------------
*/ */
#ifdef HAVE_CONFIG_H
#include <xtermcfg.h>
#endif
#ifdef TEST_DRIVER #ifdef TEST_DRIVER
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> /* EXIT_SUCCESS, etc. */ #include <stdlib.h> /* EXIT_SUCCESS, etc. */
#include <unistd.h> /* getopt() */ #include <unistd.h> /* getopt() */
#include <string.h> /* strncmp() */ #include <string.h> /* strncmp() */
#include <locale.h> /* setlocale() */ #include <locale.h> /* setlocale() */
#include <wchar.h> /* wcwidth() */
#include <wctype.h> /* this module */ #include <wctype.h> /* this module */
#endif #endif
#ifdef HAVE_WCHAR_H
#include <wchar.h> /* wcwidth() */
#endif
#include <wcwidth.h> #include <wcwidth.h>
struct interval { struct interval {
@ -223,7 +230,7 @@ int mk_wcwidth(wchar_t ucs)
{ 0x0890, 0x0891 }, { 0x08E2, 0x08E2 }, { 0x180E, 0x180E }, { 0x0890, 0x0891 }, { 0x08E2, 0x08E2 }, { 0x180E, 0x180E },
{ 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2064 },
{ 0x2066, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x2066, 0x206F }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB },
{ 0x110BD, 0x110BD }, { 0x110CD, 0x110CD }, { 0x13430, 0x13438 }, { 0x110BD, 0x110BD }, { 0x110CD, 0x110CD }, { 0x13430, 0x1343F },
{ 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 }, { 0x1BCA0, 0x1BCA3 }, { 0x1D173, 0x1D17A }, { 0xE0001, 0xE0001 },
{ 0xE0020, 0xE007F } { 0xE0020, 0xE007F }
}; };
@ -267,7 +274,7 @@ int mk_wcwidth(wchar_t ucs)
{ 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0D81, 0x0D81 }, { 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0D81, 0x0D81 },
{ 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 },
{ 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E },
{ 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECE },
{ 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 },
{ 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 },
{ 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC },
@ -311,44 +318,48 @@ int mk_wcwidth(wchar_t ucs)
{ 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x102E0, 0x102E0 }, { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 },
{ 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A },
{ 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x10D24, 0x10D27 }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x10D24, 0x10D27 },
{ 0x10EAB, 0x10EAC }, { 0x10F46, 0x10F50 }, { 0x10F82, 0x10F85 }, { 0x10EAB, 0x10EAC }, { 0x10EFD, 0x10EFF }, { 0x10F46, 0x10F50 },
{ 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11070, 0x11070 }, { 0x10F82, 0x10F85 }, { 0x11001, 0x11001 }, { 0x11038, 0x11046 },
{ 0x11073, 0x11074 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x11070, 0x11070 }, { 0x11073, 0x11074 }, { 0x1107F, 0x11081 },
{ 0x110B9, 0x110BA }, { 0x110C2, 0x110C2 }, { 0x11100, 0x11102 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, { 0x110C2, 0x110C2 },
{ 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 },
{ 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, { 0x111C9, 0x111CC }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE },
{ 0x111CF, 0x111CF }, { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x111C9, 0x111CC }, { 0x111CF, 0x111CF }, { 0x1122F, 0x11231 },
{ 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, { 0x112DF, 0x112DF }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E },
{ 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133B, 0x1133C }, { 0x11241, 0x11241 }, { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA },
{ 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11300, 0x11301 }, { 0x1133B, 0x1133C }, { 0x11340, 0x11340 },
{ 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11438, 0x1143F },
{ 0x1145E, 0x1145E }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, { 0x1145E, 0x1145E },
{ 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 },
{ 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD },
{ 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, { 0x11633, 0x1163A },
{ 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB },
{ 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 },
{ 0x11727, 0x1172B }, { 0x1182F, 0x11837 }, { 0x11839, 0x1183A }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, { 0x11727, 0x1172B },
{ 0x1193B, 0x1193C }, { 0x1193E, 0x1193E }, { 0x11943, 0x11943 }, { 0x1182F, 0x11837 }, { 0x11839, 0x1183A }, { 0x1193B, 0x1193C },
{ 0x119D4, 0x119D7 }, { 0x119DA, 0x119DB }, { 0x119E0, 0x119E0 }, { 0x1193E, 0x1193E }, { 0x11943, 0x11943 }, { 0x119D4, 0x119D7 },
{ 0x11A01, 0x11A0A }, { 0x11A33, 0x11A38 }, { 0x11A3B, 0x11A3E }, { 0x119DA, 0x119DB }, { 0x119E0, 0x119E0 }, { 0x11A01, 0x11A0A },
{ 0x11A47, 0x11A47 }, { 0x11A51, 0x11A56 }, { 0x11A59, 0x11A5B }, { 0x11A33, 0x11A38 }, { 0x11A3B, 0x11A3E }, { 0x11A47, 0x11A47 },
{ 0x11A8A, 0x11A96 }, { 0x11A98, 0x11A99 }, { 0x11C30, 0x11C36 }, { 0x11A51, 0x11A56 }, { 0x11A59, 0x11A5B }, { 0x11A8A, 0x11A96 },
{ 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11A98, 0x11A99 }, { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D },
{ 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 },
{ 0x11D31, 0x11D36 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, { 0x11D31, 0x11D36 },
{ 0x11D3F, 0x11D45 }, { 0x11D47, 0x11D47 }, { 0x11D90, 0x11D91 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, { 0x11D3F, 0x11D45 },
{ 0x11D95, 0x11D95 }, { 0x11D97, 0x11D97 }, { 0x11EF3, 0x11EF4 }, { 0x11D47, 0x11D47 }, { 0x11D90, 0x11D91 }, { 0x11D95, 0x11D95 },
{ 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F }, { 0x11D97, 0x11D97 }, { 0x11EF3, 0x11EF4 }, { 0x11F00, 0x11F01 },
{ 0x16F8F, 0x16F92 }, { 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E }, { 0x11F36, 0x11F3A }, { 0x11F40, 0x11F40 }, { 0x11F42, 0x11F42 },
{ 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, { 0x1D167, 0x1D169 }, { 0x13440, 0x13440 }, { 0x13447, 0x13455 }, { 0x16AF0, 0x16AF4 },
{ 0x1D17B, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F }, { 0x16F8F, 0x16F92 },
{ 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E }, { 0x1CF00, 0x1CF2D },
{ 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1CF30, 0x1CF46 }, { 0x1D167, 0x1D169 }, { 0x1D17B, 0x1D182 },
{ 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 },
{ 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 },
{ 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF },
{ 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 },
{ 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E08F, 0x1E08F },
{ 0x1E130, 0x1E136 }, { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF }, { 0x1E130, 0x1E136 }, { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF },
{ 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0100, 0xE01EF } { 0x1E4EC, 0x1E4EF }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A },
{ 0xE0100, 0xE01EF }
}; };
/* *INDENT-ON* */ /* *INDENT-ON* */
@ -399,7 +410,7 @@ int mk_wcwidth(wchar_t ucs)
{ 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB }, { 0x0CA9, 0x0CA9 }, { 0x0CB4, 0x0CB4 }, { 0x0CBA, 0x0CBB },
{ 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 }, { 0x0CC5, 0x0CC5 }, { 0x0CC9, 0x0CC9 }, { 0x0CCE, 0x0CD4 },
{ 0x0CD7, 0x0CDC }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 }, { 0x0CD7, 0x0CDC }, { 0x0CDF, 0x0CDF }, { 0x0CE4, 0x0CE5 },
{ 0x0CF0, 0x0CF0 }, { 0x0CF3, 0x0CFF }, { 0x0D0D, 0x0D0D }, { 0x0CF0, 0x0CF0 }, { 0x0CF4, 0x0CFF }, { 0x0D0D, 0x0D0D },
{ 0x0D11, 0x0D11 }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 }, { 0x0D11, 0x0D11 }, { 0x0D45, 0x0D45 }, { 0x0D49, 0x0D49 },
{ 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D80 }, { 0x0D50, 0x0D53 }, { 0x0D64, 0x0D65 }, { 0x0D80, 0x0D80 },
{ 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 }, { 0x0D84, 0x0D84 }, { 0x0D97, 0x0D99 }, { 0x0DB2, 0x0DB2 },
@ -409,7 +420,7 @@ int mk_wcwidth(wchar_t ucs)
{ 0x0E3B, 0x0E3E }, { 0x0E5C, 0x0E80 }, { 0x0E83, 0x0E83 }, { 0x0E3B, 0x0E3E }, { 0x0E5C, 0x0E80 }, { 0x0E83, 0x0E83 },
{ 0x0E85, 0x0E85 }, { 0x0E8B, 0x0E8B }, { 0x0EA4, 0x0EA4 }, { 0x0E85, 0x0E85 }, { 0x0E8B, 0x0E8B }, { 0x0EA4, 0x0EA4 },
{ 0x0EA6, 0x0EA6 }, { 0x0EBE, 0x0EBF }, { 0x0EC5, 0x0EC5 }, { 0x0EA6, 0x0EA6 }, { 0x0EBE, 0x0EBF }, { 0x0EC5, 0x0EC5 },
{ 0x0EC7, 0x0EC7 }, { 0x0ECE, 0x0ECF }, { 0x0EDA, 0x0EDB }, { 0x0EC7, 0x0EC7 }, { 0x0ECF, 0x0ECF }, { 0x0EDA, 0x0EDB },
{ 0x0EE0, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 }, { 0x0EE0, 0x0EFF }, { 0x0F48, 0x0F48 }, { 0x0F6D, 0x0F70 },
{ 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD }, { 0x0F98, 0x0F98 }, { 0x0FBD, 0x0FBD }, { 0x0FCD, 0x0FCD },
{ 0x0FDB, 0x0FFF }, { 0x10C6, 0x10C6 }, { 0x10C8, 0x10CC }, { 0x0FDB, 0x0FFF }, { 0x10C6, 0x10C6 }, { 0x10C8, 0x10CC },
@ -449,117 +460,120 @@ int mk_wcwidth(wchar_t ucs)
{ 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF }, { 0x2DBF, 0x2DBF }, { 0x2DC7, 0x2DC7 }, { 0x2DCF, 0x2DCF },
{ 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E5E, 0x2E7F }, { 0x2DD7, 0x2DD7 }, { 0x2DDF, 0x2DDF }, { 0x2E5E, 0x2E7F },
{ 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF }, { 0x2E9A, 0x2E9A }, { 0x2EF4, 0x2EFF }, { 0x2FD6, 0x2FEF },
{ 0x2FFC, 0x2FFF }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3040, 0x3040 }, { 0x3097, 0x3098 }, { 0x3100, 0x3104 },
{ 0x3100, 0x3104 }, { 0x3130, 0x3130 }, { 0x318F, 0x318F }, { 0x3130, 0x3130 }, { 0x318F, 0x318F }, { 0x31E4, 0x31EE },
{ 0x31E4, 0x31EF }, { 0x321F, 0x321F }, { 0x4DB6, 0x4DBF }, { 0x321F, 0x321F }, { 0x4DB6, 0x4DBF }, { 0x9FD6, 0x9FFF },
{ 0x9FD6, 0x9FFF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA48D, 0xA48F }, { 0xA4C7, 0xA4CF }, { 0xA62C, 0xA63F },
{ 0xA62C, 0xA63F }, { 0xA6F8, 0xA6FF }, { 0xA7CB, 0xA7CF }, { 0xA6F8, 0xA6FF }, { 0xA7CB, 0xA7CF }, { 0xA7D2, 0xA7D2 },
{ 0xA7D2, 0xA7D2 }, { 0xA7D4, 0xA7D4 }, { 0xA7DA, 0xA7F1 }, { 0xA7D4, 0xA7D4 }, { 0xA7DA, 0xA7F1 }, { 0xA82D, 0xA82F },
{ 0xA82D, 0xA82F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA83A, 0xA83F }, { 0xA878, 0xA87F }, { 0xA8C6, 0xA8CD },
{ 0xA8C6, 0xA8CD }, { 0xA8DA, 0xA8DF }, { 0xA954, 0xA95E }, { 0xA8DA, 0xA8DF }, { 0xA954, 0xA95E }, { 0xA97D, 0xA97F },
{ 0xA97D, 0xA97F }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9CE, 0xA9CE }, { 0xA9DA, 0xA9DD }, { 0xA9FF, 0xA9FF },
{ 0xA9FF, 0xA9FF }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA37, 0xAA3F }, { 0xAA4E, 0xAA4F }, { 0xAA5A, 0xAA5B },
{ 0xAA5A, 0xAA5B }, { 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 }, { 0xAAC3, 0xAADA }, { 0xAAF7, 0xAB00 }, { 0xAB07, 0xAB08 },
{ 0xAB07, 0xAB08 }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB0F, 0xAB10 }, { 0xAB17, 0xAB1F }, { 0xAB27, 0xAB27 },
{ 0xAB27, 0xAB27 }, { 0xAB2F, 0xAB2F }, { 0xAB6C, 0xAB6F }, { 0xAB2F, 0xAB2F }, { 0xAB6C, 0xAB6F }, { 0xABEE, 0xABEF },
{ 0xABEE, 0xABEF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xABFA, 0xABFF }, { 0xD7A4, 0xD7AF }, { 0xD7C7, 0xD7CA },
{ 0xD7C7, 0xD7CA }, { 0xD7FC, 0xDFFF }, { 0xFA6E, 0xFA6F }, { 0xD7FC, 0xDFFF }, { 0xFA6E, 0xFA6F }, { 0xFADA, 0xFAFF },
{ 0xFADA, 0xFAFF }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB07, 0xFB12 }, { 0xFB18, 0xFB1C }, { 0xFB37, 0xFB37 },
{ 0xFB37, 0xFB37 }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, { 0xFB3D, 0xFB3D }, { 0xFB3F, 0xFB3F }, { 0xFB42, 0xFB42 },
{ 0xFB42, 0xFB42 }, { 0xFB45, 0xFB45 }, { 0xFBC3, 0xFBD2 }, { 0xFB45, 0xFB45 }, { 0xFBC3, 0xFBD2 }, { 0xFD90, 0xFD91 },
{ 0xFD90, 0xFD91 }, { 0xFDC8, 0xFDCE }, { 0xFDD0, 0xFDEF }, { 0xFDC8, 0xFDCE }, { 0xFDD0, 0xFDEF }, { 0xFE1A, 0xFE1F },
{ 0xFE1A, 0xFE1F }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE53, 0xFE53 }, { 0xFE67, 0xFE67 }, { 0xFE6C, 0xFE6F },
{ 0xFE6C, 0xFE6F }, { 0xFE75, 0xFE75 }, { 0xFEFD, 0xFEFE }, { 0xFE75, 0xFE75 }, { 0xFEFD, 0xFEFE }, { 0xFF00, 0xFF00 },
{ 0xFF00, 0xFF00 }, { 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 }, { 0xFFBF, 0xFFC1 }, { 0xFFC8, 0xFFC9 }, { 0xFFD0, 0xFFD1 },
{ 0xFFD0, 0xFFD1 }, { 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF }, { 0xFFD8, 0xFFD9 }, { 0xFFDD, 0xFFDF }, { 0xFFE7, 0xFFE7 },
{ 0xFFE7, 0xFFE7 }, { 0xFFEF, 0xFFF8 }, { 0xFFFE, 0xFFFF }, { 0xFFEF, 0xFFF8 }, { 0xFFFE, 0xFFFF }, { 0x1000C, 0x1000C },
{ 0x1000C, 0x1000C }, { 0x10027, 0x10027 }, { 0x1003B, 0x1003B }, { 0x10027, 0x10027 }, { 0x1003B, 0x1003B }, { 0x1003E, 0x1003E },
{ 0x1003E, 0x1003E }, { 0x1004E, 0x1004F }, { 0x1005E, 0x1007F }, { 0x1004E, 0x1004F }, { 0x1005E, 0x1007F }, { 0x100FB, 0x100FF },
{ 0x100FB, 0x100FF }, { 0x10103, 0x10106 }, { 0x10134, 0x10136 }, { 0x10103, 0x10106 }, { 0x10134, 0x10136 }, { 0x1018F, 0x1018F },
{ 0x1018F, 0x1018F }, { 0x1019D, 0x1019F }, { 0x101A1, 0x101CF }, { 0x1019D, 0x1019F }, { 0x101A1, 0x101CF }, { 0x101FE, 0x1027F },
{ 0x101FE, 0x1027F }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102DF }, { 0x1029D, 0x1029F }, { 0x102D1, 0x102DF }, { 0x102FC, 0x102FF },
{ 0x102FC, 0x102FF }, { 0x10324, 0x1032C }, { 0x1034B, 0x1034F }, { 0x10324, 0x1032C }, { 0x1034B, 0x1034F }, { 0x1037B, 0x1037F },
{ 0x1037B, 0x1037F }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x1039E, 0x1039E }, { 0x103C4, 0x103C7 }, { 0x103D6, 0x103FF },
{ 0x103D6, 0x103FF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x104AF }, { 0x1049E, 0x1049F }, { 0x104AA, 0x104AF }, { 0x104D4, 0x104D7 },
{ 0x104D4, 0x104D7 }, { 0x104FC, 0x104FF }, { 0x10528, 0x1052F }, { 0x104FC, 0x104FF }, { 0x10528, 0x1052F }, { 0x10564, 0x1056E },
{ 0x10564, 0x1056E }, { 0x1057B, 0x1057B }, { 0x1058B, 0x1058B }, { 0x1057B, 0x1057B }, { 0x1058B, 0x1058B }, { 0x10593, 0x10593 },
{ 0x10593, 0x10593 }, { 0x10596, 0x10596 }, { 0x105A2, 0x105A2 }, { 0x10596, 0x10596 }, { 0x105A2, 0x105A2 }, { 0x105B2, 0x105B2 },
{ 0x105B2, 0x105B2 }, { 0x105BA, 0x105BA }, { 0x105BD, 0x105FF }, { 0x105BA, 0x105BA }, { 0x105BD, 0x105FF }, { 0x10737, 0x1073F },
{ 0x10737, 0x1073F }, { 0x10756, 0x1075F }, { 0x10768, 0x1077F }, { 0x10756, 0x1075F }, { 0x10768, 0x1077F }, { 0x10786, 0x10786 },
{ 0x10786, 0x10786 }, { 0x107B1, 0x107B1 }, { 0x107BB, 0x107FF }, { 0x107B1, 0x107B1 }, { 0x107BB, 0x107FF }, { 0x10806, 0x10807 },
{ 0x10806, 0x10807 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10809, 0x10809 }, { 0x10836, 0x10836 }, { 0x10839, 0x1083B },
{ 0x10839, 0x1083B }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x1083D, 0x1083E }, { 0x10856, 0x10856 }, { 0x1089F, 0x108A6 },
{ 0x1089F, 0x108A6 }, { 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 }, { 0x108B0, 0x108DF }, { 0x108F3, 0x108F3 }, { 0x108F6, 0x108FA },
{ 0x108F6, 0x108FA }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x1091C, 0x1091E }, { 0x1093A, 0x1093E }, { 0x10940, 0x1097F },
{ 0x10940, 0x1097F }, { 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 }, { 0x109B8, 0x109BB }, { 0x109D0, 0x109D1 }, { 0x10A04, 0x10A04 },
{ 0x10A04, 0x10A04 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A07, 0x10A0B }, { 0x10A14, 0x10A14 }, { 0x10A18, 0x10A18 },
{ 0x10A18, 0x10A18 }, { 0x10A36, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A36, 0x10A37 }, { 0x10A3B, 0x10A3E }, { 0x10A49, 0x10A4F },
{ 0x10A49, 0x10A4F }, { 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF }, { 0x10A59, 0x10A5F }, { 0x10AA0, 0x10ABF }, { 0x10AE7, 0x10AEA },
{ 0x10AE7, 0x10AEA }, { 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10AF7, 0x10AFF }, { 0x10B36, 0x10B38 }, { 0x10B56, 0x10B57 },
{ 0x10B56, 0x10B57 }, { 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 }, { 0x10B73, 0x10B77 }, { 0x10B92, 0x10B98 }, { 0x10B9D, 0x10BA8 },
{ 0x10B9D, 0x10BA8 }, { 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F }, { 0x10BB0, 0x10BFF }, { 0x10C49, 0x10C7F }, { 0x10CB3, 0x10CBF },
{ 0x10CB3, 0x10CBF }, { 0x10CF3, 0x10CF9 }, { 0x10D28, 0x10D2F }, { 0x10CF3, 0x10CF9 }, { 0x10D28, 0x10D2F }, { 0x10D3A, 0x10E5F },
{ 0x10D3A, 0x10E5F }, { 0x10E7F, 0x10E7F }, { 0x10EAA, 0x10EAA }, { 0x10E7F, 0x10E7F }, { 0x10EAA, 0x10EAA }, { 0x10EAE, 0x10EAF },
{ 0x10EAE, 0x10EAF }, { 0x10EB2, 0x10EFF }, { 0x10F28, 0x10F2F }, { 0x10EB2, 0x10EFC }, { 0x10F28, 0x10F2F }, { 0x10F5A, 0x10F6F },
{ 0x10F5A, 0x10F6F }, { 0x10F8A, 0x10FAF }, { 0x10FCC, 0x10FDF }, { 0x10F8A, 0x10FAF }, { 0x10FCC, 0x10FDF }, { 0x10FF7, 0x10FFF },
{ 0x10FF7, 0x10FFF }, { 0x1104E, 0x11051 }, { 0x11076, 0x1107E }, { 0x1104E, 0x11051 }, { 0x11076, 0x1107E }, { 0x110C3, 0x110CC },
{ 0x110C3, 0x110CC }, { 0x110CE, 0x110CF }, { 0x110E9, 0x110EF }, { 0x110CE, 0x110CF }, { 0x110E9, 0x110EF }, { 0x110FA, 0x110FF },
{ 0x110FA, 0x110FF }, { 0x11135, 0x11135 }, { 0x11148, 0x1114F }, { 0x11135, 0x11135 }, { 0x11148, 0x1114F }, { 0x11177, 0x1117F },
{ 0x11177, 0x1117F }, { 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF }, { 0x111E0, 0x111E0 }, { 0x111F5, 0x111FF }, { 0x11212, 0x11212 },
{ 0x11212, 0x11212 }, { 0x1123F, 0x1127F }, { 0x11287, 0x11287 }, { 0x11242, 0x1127F }, { 0x11287, 0x11287 }, { 0x11289, 0x11289 },
{ 0x11289, 0x11289 }, { 0x1128E, 0x1128E }, { 0x1129E, 0x1129E }, { 0x1128E, 0x1128E }, { 0x1129E, 0x1129E }, { 0x112AA, 0x112AF },
{ 0x112AA, 0x112AF }, { 0x112EB, 0x112EF }, { 0x112FA, 0x112FF }, { 0x112EB, 0x112EF }, { 0x112FA, 0x112FF }, { 0x11304, 0x11304 },
{ 0x11304, 0x11304 }, { 0x1130D, 0x1130E }, { 0x11311, 0x11312 }, { 0x1130D, 0x1130E }, { 0x11311, 0x11312 }, { 0x11329, 0x11329 },
{ 0x11329, 0x11329 }, { 0x11331, 0x11331 }, { 0x11334, 0x11334 }, { 0x11331, 0x11331 }, { 0x11334, 0x11334 }, { 0x1133A, 0x1133A },
{ 0x1133A, 0x1133A }, { 0x11345, 0x11346 }, { 0x11349, 0x1134A }, { 0x11345, 0x11346 }, { 0x11349, 0x1134A }, { 0x1134E, 0x1134F },
{ 0x1134E, 0x1134F }, { 0x11351, 0x11356 }, { 0x11358, 0x1135C }, { 0x11351, 0x11356 }, { 0x11358, 0x1135C }, { 0x11364, 0x11365 },
{ 0x11364, 0x11365 }, { 0x1136D, 0x1136F }, { 0x11375, 0x113FF }, { 0x1136D, 0x1136F }, { 0x11375, 0x113FF }, { 0x1145C, 0x1145C },
{ 0x1145C, 0x1145C }, { 0x11462, 0x1147F }, { 0x114C8, 0x114CF }, { 0x11462, 0x1147F }, { 0x114C8, 0x114CF }, { 0x114DA, 0x1157F },
{ 0x114DA, 0x1157F }, { 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF }, { 0x115B6, 0x115B7 }, { 0x115DE, 0x115FF }, { 0x11645, 0x1164F },
{ 0x11645, 0x1164F }, { 0x1165A, 0x1165F }, { 0x1166D, 0x1167F }, { 0x1165A, 0x1165F }, { 0x1166D, 0x1167F }, { 0x116BA, 0x116BF },
{ 0x116BA, 0x116BF }, { 0x116CA, 0x116FF }, { 0x1171B, 0x1171C }, { 0x116CA, 0x116FF }, { 0x1171B, 0x1171C }, { 0x1172C, 0x1172F },
{ 0x1172C, 0x1172F }, { 0x11747, 0x117FF }, { 0x1183C, 0x1189F }, { 0x11747, 0x117FF }, { 0x1183C, 0x1189F }, { 0x118F3, 0x118FE },
{ 0x118F3, 0x118FE }, { 0x11907, 0x11908 }, { 0x1190A, 0x1190B }, { 0x11907, 0x11908 }, { 0x1190A, 0x1190B }, { 0x11914, 0x11914 },
{ 0x11914, 0x11914 }, { 0x11917, 0x11917 }, { 0x11936, 0x11936 }, { 0x11917, 0x11917 }, { 0x11936, 0x11936 }, { 0x11939, 0x1193A },
{ 0x11939, 0x1193A }, { 0x11947, 0x1194F }, { 0x1195A, 0x1199F }, { 0x11947, 0x1194F }, { 0x1195A, 0x1199F }, { 0x119A8, 0x119A9 },
{ 0x119A8, 0x119A9 }, { 0x119D8, 0x119D9 }, { 0x119E5, 0x119FF }, { 0x119D8, 0x119D9 }, { 0x119E5, 0x119FF }, { 0x11A48, 0x11A4F },
{ 0x11A48, 0x11A4F }, { 0x11AA3, 0x11AAF }, { 0x11AF9, 0x11BFF }, { 0x11AA3, 0x11AAF }, { 0x11AF9, 0x11AFF }, { 0x11B0A, 0x11BFF },
{ 0x11C09, 0x11C09 }, { 0x11C37, 0x11C37 }, { 0x11C46, 0x11C4F }, { 0x11C09, 0x11C09 }, { 0x11C37, 0x11C37 }, { 0x11C46, 0x11C4F },
{ 0x11C6D, 0x11C6F }, { 0x11C90, 0x11C91 }, { 0x11CA8, 0x11CA8 }, { 0x11C6D, 0x11C6F }, { 0x11C90, 0x11C91 }, { 0x11CA8, 0x11CA8 },
{ 0x11CB7, 0x11CFF }, { 0x11D07, 0x11D07 }, { 0x11D0A, 0x11D0A }, { 0x11CB7, 0x11CFF }, { 0x11D07, 0x11D07 }, { 0x11D0A, 0x11D0A },
{ 0x11D37, 0x11D39 }, { 0x11D3B, 0x11D3B }, { 0x11D3E, 0x11D3E }, { 0x11D37, 0x11D39 }, { 0x11D3B, 0x11D3B }, { 0x11D3E, 0x11D3E },
{ 0x11D48, 0x11D4F }, { 0x11D5A, 0x11D5F }, { 0x11D66, 0x11D66 }, { 0x11D48, 0x11D4F }, { 0x11D5A, 0x11D5F }, { 0x11D66, 0x11D66 },
{ 0x11D69, 0x11D69 }, { 0x11D8F, 0x11D8F }, { 0x11D92, 0x11D92 }, { 0x11D69, 0x11D69 }, { 0x11D8F, 0x11D8F }, { 0x11D92, 0x11D92 },
{ 0x11D99, 0x11D9F }, { 0x11DAA, 0x11EDF }, { 0x11EF9, 0x11FAF }, { 0x11D99, 0x11D9F }, { 0x11DAA, 0x11EDF }, { 0x11EF9, 0x11EFF },
{ 0x11F11, 0x11F11 }, { 0x11F3B, 0x11F3D }, { 0x11F5A, 0x11FAF },
{ 0x11FB1, 0x11FBF }, { 0x11FF2, 0x11FFE }, { 0x1239A, 0x123FF }, { 0x11FB1, 0x11FBF }, { 0x11FF2, 0x11FFE }, { 0x1239A, 0x123FF },
{ 0x1246F, 0x1246F }, { 0x12475, 0x1247F }, { 0x12544, 0x12F8F }, { 0x1246F, 0x1246F }, { 0x12475, 0x1247F }, { 0x12544, 0x12F8F },
{ 0x12FF3, 0x12FFF }, { 0x1342F, 0x1342F }, { 0x13439, 0x143FF }, { 0x12FF3, 0x12FFF }, { 0x13456, 0x143FF }, { 0x14647, 0x167FF },
{ 0x14647, 0x167FF }, { 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F }, { 0x16A39, 0x16A3F }, { 0x16A5F, 0x16A5F }, { 0x16A6A, 0x16A6D },
{ 0x16A6A, 0x16A6D }, { 0x16ABF, 0x16ABF }, { 0x16ACA, 0x16ACF }, { 0x16ABF, 0x16ABF }, { 0x16ACA, 0x16ACF }, { 0x16AEE, 0x16AEF },
{ 0x16AEE, 0x16AEF }, { 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F }, { 0x16AF6, 0x16AFF }, { 0x16B46, 0x16B4F }, { 0x16B5A, 0x16B5A },
{ 0x16B5A, 0x16B5A }, { 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C }, { 0x16B62, 0x16B62 }, { 0x16B78, 0x16B7C }, { 0x16B90, 0x16E3F },
{ 0x16B90, 0x16E3F }, { 0x16E9B, 0x16EFF }, { 0x16F4B, 0x16F4E }, { 0x16E9B, 0x16EFF }, { 0x16F4B, 0x16F4E }, { 0x16F88, 0x16F8E },
{ 0x16F88, 0x16F8E }, { 0x16FA0, 0x16FDF }, { 0x16FE5, 0x16FEF }, { 0x16FA0, 0x16FDF }, { 0x16FE5, 0x16FEF }, { 0x16FF2, 0x187FF },
{ 0x16FF2, 0x187FF }, { 0x18CD6, 0x1AFEF }, { 0x1AFF4, 0x1AFF4 }, { 0x18CD6, 0x1AFEF }, { 0x1AFF4, 0x1AFF4 }, { 0x1AFFC, 0x1AFFC },
{ 0x1AFFC, 0x1AFFC }, { 0x1AFFF, 0x1AFFF }, { 0x1B123, 0x1B14F }, { 0x1AFFF, 0x1AFFF }, { 0x1B123, 0x1B131 }, { 0x1B133, 0x1B14F },
{ 0x1B153, 0x1B163 }, { 0x1B168, 0x1B16F }, { 0x1B2FC, 0x1BBFF }, { 0x1B153, 0x1B154 }, { 0x1B156, 0x1B163 }, { 0x1B168, 0x1B16F },
{ 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F }, { 0x1BC89, 0x1BC8F }, { 0x1B2FC, 0x1BBFF }, { 0x1BC6B, 0x1BC6F }, { 0x1BC7D, 0x1BC7F },
{ 0x1BC9A, 0x1BC9B }, { 0x1BCA4, 0x1CEFF }, { 0x1CF2E, 0x1CF2F }, { 0x1BC89, 0x1BC8F }, { 0x1BC9A, 0x1BC9B }, { 0x1BCA4, 0x1CEFF },
{ 0x1CF47, 0x1CF4F }, { 0x1CFC4, 0x1CFFF }, { 0x1D0F6, 0x1D0FF }, { 0x1CF2E, 0x1CF2F }, { 0x1CF47, 0x1CF4F }, { 0x1CFC4, 0x1CFFF },
{ 0x1D127, 0x1D128 }, { 0x1D1EB, 0x1D1FF }, { 0x1D246, 0x1D2DF }, { 0x1D0F6, 0x1D0FF }, { 0x1D127, 0x1D128 }, { 0x1D1EB, 0x1D1FF },
{ 0x1D2F4, 0x1D2FF }, { 0x1D357, 0x1D35F }, { 0x1D379, 0x1D3FF }, { 0x1D246, 0x1D2BF }, { 0x1D2D4, 0x1D2DF }, { 0x1D2F4, 0x1D2FF },
{ 0x1D455, 0x1D455 }, { 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 }, { 0x1D357, 0x1D35F }, { 0x1D379, 0x1D3FF }, { 0x1D455, 0x1D455 },
{ 0x1D4A3, 0x1D4A4 }, { 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD }, { 0x1D49D, 0x1D49D }, { 0x1D4A0, 0x1D4A1 }, { 0x1D4A3, 0x1D4A4 },
{ 0x1D4BA, 0x1D4BA }, { 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 }, { 0x1D4A7, 0x1D4A8 }, { 0x1D4AD, 0x1D4AD }, { 0x1D4BA, 0x1D4BA },
{ 0x1D506, 0x1D506 }, { 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 }, { 0x1D4BC, 0x1D4BC }, { 0x1D4C4, 0x1D4C4 }, { 0x1D506, 0x1D506 },
{ 0x1D51D, 0x1D51D }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D50B, 0x1D50C }, { 0x1D515, 0x1D515 }, { 0x1D51D, 0x1D51D },
{ 0x1D545, 0x1D545 }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D53A, 0x1D53A }, { 0x1D53F, 0x1D53F }, { 0x1D545, 0x1D545 },
{ 0x1D6A6, 0x1D6A7 }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, { 0x1D547, 0x1D549 }, { 0x1D551, 0x1D551 }, { 0x1D6A6, 0x1D6A7 },
{ 0x1DAA0, 0x1DAA0 }, { 0x1DAB0, 0x1DEFF }, { 0x1DF1F, 0x1DFFF }, { 0x1D7CC, 0x1D7CD }, { 0x1DA8C, 0x1DA9A }, { 0x1DAA0, 0x1DAA0 },
{ 0x1DAB0, 0x1DEFF }, { 0x1DF1F, 0x1DF24 }, { 0x1DF2B, 0x1DFFF },
{ 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 }, { 0x1E007, 0x1E007 }, { 0x1E019, 0x1E01A }, { 0x1E022, 0x1E022 },
{ 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E0FF }, { 0x1E12D, 0x1E12F }, { 0x1E025, 0x1E025 }, { 0x1E02B, 0x1E02F }, { 0x1E06E, 0x1E08E },
{ 0x1E13E, 0x1E13F }, { 0x1E14A, 0x1E14D }, { 0x1E150, 0x1E28F }, { 0x1E090, 0x1E0FF }, { 0x1E12D, 0x1E12F }, { 0x1E13E, 0x1E13F },
{ 0x1E2AF, 0x1E2BF }, { 0x1E2FA, 0x1E2FE }, { 0x1E300, 0x1E7DF }, { 0x1E14A, 0x1E14D }, { 0x1E150, 0x1E28F }, { 0x1E2AF, 0x1E2BF },
{ 0x1E2FA, 0x1E2FE }, { 0x1E300, 0x1E4CF }, { 0x1E4FA, 0x1E7DF },
{ 0x1E7E7, 0x1E7E7 }, { 0x1E7EC, 0x1E7EC }, { 0x1E7EF, 0x1E7EF }, { 0x1E7E7, 0x1E7E7 }, { 0x1E7EC, 0x1E7EC }, { 0x1E7EF, 0x1E7EF },
{ 0x1E7FF, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF }, { 0x1E7FF, 0x1E7FF }, { 0x1E8C5, 0x1E8C6 }, { 0x1E8D7, 0x1E8FF },
{ 0x1E94C, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EC70 }, { 0x1E94C, 0x1E94F }, { 0x1E95A, 0x1E95D }, { 0x1E960, 0x1EC70 },
@ -579,17 +593,16 @@ int mk_wcwidth(wchar_t ucs)
{ 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF }, { 0x1F0C0, 0x1F0C0 }, { 0x1F0D0, 0x1F0D0 }, { 0x1F0F6, 0x1F0FF },
{ 0x1F1AE, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23C, 0x1F23F }, { 0x1F1AE, 0x1F1E5 }, { 0x1F203, 0x1F20F }, { 0x1F23C, 0x1F23F },
{ 0x1F249, 0x1F24F }, { 0x1F252, 0x1F25F }, { 0x1F266, 0x1F2FF }, { 0x1F249, 0x1F24F }, { 0x1F252, 0x1F25F }, { 0x1F266, 0x1F2FF },
{ 0x1F6D8, 0x1F6DC }, { 0x1F6ED, 0x1F6EF }, { 0x1F6FD, 0x1F6FF }, { 0x1F6D8, 0x1F6DB }, { 0x1F6ED, 0x1F6EF }, { 0x1F6FD, 0x1F6FF },
{ 0x1F774, 0x1F77F }, { 0x1F7D9, 0x1F7DF }, { 0x1F7EC, 0x1F7EF }, { 0x1F777, 0x1F77A }, { 0x1F7DA, 0x1F7DF }, { 0x1F7EC, 0x1F7EF },
{ 0x1F7F1, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F }, { 0x1F7F1, 0x1F7FF }, { 0x1F80C, 0x1F80F }, { 0x1F848, 0x1F84F },
{ 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F8AF }, { 0x1F85A, 0x1F85F }, { 0x1F888, 0x1F88F }, { 0x1F8AE, 0x1F8AF },
{ 0x1F8B2, 0x1F8FF }, { 0x1FA54, 0x1FA5F }, { 0x1FA6E, 0x1FA6F }, { 0x1F8B2, 0x1F8FF }, { 0x1FA54, 0x1FA5F }, { 0x1FA6E, 0x1FA6F },
{ 0x1FA75, 0x1FA77 }, { 0x1FA7D, 0x1FA7F }, { 0x1FA87, 0x1FA8F }, { 0x1FA7D, 0x1FA7F }, { 0x1FA89, 0x1FA8F }, { 0x1FABE, 0x1FABE },
{ 0x1FAAD, 0x1FAAF }, { 0x1FABB, 0x1FABF }, { 0x1FAC6, 0x1FACF }, { 0x1FAC6, 0x1FACD }, { 0x1FADC, 0x1FADF }, { 0x1FAE9, 0x1FAEF },
{ 0x1FADA, 0x1FADF }, { 0x1FAE8, 0x1FAEF }, { 0x1FAF7, 0x1FAFF }, { 0x1FAF9, 0x1FAFF }, { 0x1FB93, 0x1FB93 }, { 0x1FBCB, 0x1FBEF },
{ 0x1FB93, 0x1FB93 }, { 0x1FBCB, 0x1FBEF }, { 0x1FBFA, 0x1FFFF }, { 0x1FBFA, 0x1FFFF }, { 0x2A6D7, 0x2F7FF }, { 0x2FA1E, 0xE0000 },
{ 0x2A6D7, 0x2F7FF }, { 0x2FA1E, 0xE0000 }, { 0xE0002, 0xE001F }, { 0xE0002, 0xE001F }, { 0xE0080, 0xE00FF }, { 0xE01F0, 0x10FFFD }
{ 0xE0080, 0xE00FF }, { 0xE01F0, 0x10FFFD }
}; };
/* *INDENT-ON* */ /* *INDENT-ON* */
@ -612,35 +625,37 @@ int mk_wcwidth(wchar_t ucs)
{ 0x2753, 0x2755 }, { 0x2757, 0x2757 }, { 0x2795, 0x2797 }, { 0x2753, 0x2755 }, { 0x2757, 0x2757 }, { 0x2795, 0x2797 },
{ 0x27B0, 0x27B0 }, { 0x27BF, 0x27BF }, { 0x2B1B, 0x2B1C }, { 0x27B0, 0x27B0 }, { 0x27BF, 0x27BF }, { 0x2B1B, 0x2B1C },
{ 0x2B50, 0x2B50 }, { 0x2B55, 0x2B55 }, { 0x2E80, 0x2E99 }, { 0x2B50, 0x2B50 }, { 0x2B55, 0x2B55 }, { 0x2E80, 0x2E99 },
{ 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFB }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x3029 },
{ 0x3000, 0x3029 }, { 0x302E, 0x303E }, { 0x3041, 0x3096 }, { 0x302E, 0x303E }, { 0x3041, 0x3096 }, { 0x309B, 0x30FF },
{ 0x309B, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 },
{ 0x3190, 0x31E3 }, { 0x31F0, 0x321E }, { 0x3220, 0x3247 }, { 0x31EF, 0x321E }, { 0x3220, 0x3247 }, { 0x3250, 0x4DBF },
{ 0x3250, 0x4DBF }, { 0x4E00, 0xA48C }, { 0xA490, 0xA4C6 }, { 0x4E00, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA960, 0xA97C },
{ 0xA960, 0xA97C }, { 0xAC00, 0xD7A3 }, { 0xF900, 0xFAFF }, { 0xAC00, 0xD7A3 }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 },
{ 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE10, 0xFE19 }, { 0xFE30, 0xFE52 }, { 0xFE54, 0xFE66 },
{ 0xFE68, 0xFE6B }, { 0xFF01, 0xFF60 }, { 0xFFE0, 0xFFE6 }, { 0xFE68, 0xFE6B }, { 0xFF01, 0xFF60 }, { 0xFFE0, 0xFFE6 },
{ 0x16FE0, 0x16FE3 }, { 0x16FF0, 0x16FF1 }, { 0x17000, 0x187F7 }, { 0x16FE0, 0x16FE3 }, { 0x16FF0, 0x16FF1 }, { 0x17000, 0x187F7 },
{ 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 }, { 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 },
{ 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 }, { 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 },
{ 0x1B150, 0x1B152 }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1B132, 0x1B132 }, { 0x1B150, 0x1B152 }, { 0x1B155, 0x1B155 },
{ 0x1F004, 0x1F004 }, { 0x1F0CF, 0x1F0CF }, { 0x1F18E, 0x1F18E }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1F004, 0x1F004 },
{ 0x1F191, 0x1F19A }, { 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F0CF, 0x1F0CF }, { 0x1F18E, 0x1F18E }, { 0x1F191, 0x1F19A },
{ 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 }, { 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 },
{ 0x1F300, 0x1F320 }, { 0x1F32D, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 }, { 0x1F300, 0x1F320 },
{ 0x1F37E, 0x1F393 }, { 0x1F3A0, 0x1F3CA }, { 0x1F3CF, 0x1F3D3 }, { 0x1F32D, 0x1F335 }, { 0x1F337, 0x1F37C }, { 0x1F37E, 0x1F393 },
{ 0x1F3E0, 0x1F3F0 }, { 0x1F3F4, 0x1F3F4 }, { 0x1F3F8, 0x1F43E }, { 0x1F3A0, 0x1F3CA }, { 0x1F3CF, 0x1F3D3 }, { 0x1F3E0, 0x1F3F0 },
{ 0x1F440, 0x1F440 }, { 0x1F442, 0x1F4FC }, { 0x1F4FF, 0x1F53D }, { 0x1F3F4, 0x1F3F4 }, { 0x1F3F8, 0x1F43E }, { 0x1F440, 0x1F440 },
{ 0x1F54B, 0x1F54E }, { 0x1F550, 0x1F567 }, { 0x1F57A, 0x1F57A }, { 0x1F442, 0x1F4FC }, { 0x1F4FF, 0x1F53D }, { 0x1F54B, 0x1F54E },
{ 0x1F595, 0x1F596 }, { 0x1F5A4, 0x1F5A4 }, { 0x1F5FB, 0x1F64F }, { 0x1F550, 0x1F567 }, { 0x1F57A, 0x1F57A }, { 0x1F595, 0x1F596 },
{ 0x1F680, 0x1F6C5 }, { 0x1F6CC, 0x1F6CC }, { 0x1F6D0, 0x1F6D2 }, { 0x1F5A4, 0x1F5A4 }, { 0x1F5FB, 0x1F64F }, { 0x1F680, 0x1F6C5 },
{ 0x1F6D5, 0x1F6D7 }, { 0x1F6DD, 0x1F6DF }, { 0x1F6EB, 0x1F6EC }, { 0x1F6CC, 0x1F6CC }, { 0x1F6D0, 0x1F6D2 }, { 0x1F6D5, 0x1F6D7 },
{ 0x1F6F4, 0x1F6FC }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F6DC, 0x1F6DF }, { 0x1F6EB, 0x1F6EC }, { 0x1F6F4, 0x1F6FC },
{ 0x1F90C, 0x1F93A }, { 0x1F93C, 0x1F945 }, { 0x1F947, 0x1F9FF }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F90C, 0x1F93A },
{ 0x1FA70, 0x1FA74 }, { 0x1FA78, 0x1FA7C }, { 0x1FA80, 0x1FA86 }, { 0x1F93C, 0x1F945 }, { 0x1F947, 0x1F9FF }, { 0x1FA70, 0x1FA7C },
{ 0x1FA90, 0x1FAAC }, { 0x1FAB0, 0x1FABA }, { 0x1FAC0, 0x1FAC5 }, { 0x1FA80, 0x1FA88 }, { 0x1FA90, 0x1FABD }, { 0x1FABF, 0x1FAC5 },
{ 0x1FAD0, 0x1FAD9 }, { 0x1FAE0, 0x1FAE7 }, { 0x1FAF0, 0x1FAF6 }, { 0x1FACE, 0x1FADB }, { 0x1FAE0, 0x1FAE8 }, { 0x1FAF0, 0x1FAF8 },
{ 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD } { 0x20000, 0x2A6DF }, { 0x2A700, 0x2B739 }, { 0x2B740, 0x2B81D },
{ 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, { 0x2EBF0, 0x2EE5D },
{ 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }
}; };
/* *INDENT-ON* */ /* *INDENT-ON* */
@ -659,7 +674,7 @@ int mk_wcwidth(wchar_t ucs)
result = use_latin1; result = use_latin1;
} else if (Lookup(cmp, formatting)) { } else if (Lookup(cmp, formatting)) {
/* treat formatting characters like control characters */ /* treat formatting characters like control characters */
result = -1; result = 0;
} else if (Lookup(cmp, combining)) { } else if (Lookup(cmp, combining)) {
/* binary search in table of non-spacing characters */ /* binary search in table of non-spacing characters */
result = 0; result = 0;
@ -669,6 +684,12 @@ int mk_wcwidth(wchar_t ucs)
if (Lookup(cmp, doublewidth)) { if (Lookup(cmp, doublewidth)) {
result = 2; result = 2;
} else if (cmp >= 0xd800 && cmp <= 0xdfff) {
#ifdef HAVE_WCWIDTH
result = (wcwidth)(ucs);
#else
result = -1;
#endif
} else if (cmp >= unknowns[0].first && Lookup(cmp, unknowns)) { } else if (cmp >= unknowns[0].first && Lookup(cmp, unknowns)) {
result = -1; result = -1;
} }
@ -868,8 +889,9 @@ static void do_range(const char *source)
int lo, hi; int lo, hi;
if (decode_range(source, &lo, &hi)) { if (decode_range(source, &lo, &hi)) {
while (lo <= hi) { while (lo <= hi) {
int local_rc = opt_wider ? mk_wcwidth_cjk(lo) : mk_wcwidth(lo); wchar_t wlo = (wchar_t) lo;
int other_rc = wcwidth(lo); int local_rc = opt_wider ? mk_wcwidth_cjk(wlo) : mk_wcwidth(wlo);
int other_rc = wcwidth(wlo);
++total_test; ++total_test;
if (opt_all || (local_rc != other_rc)) { if (opt_all || (local_rc != other_rc)) {
if (!opt_quiet) if (!opt_quiet)

View file

@ -1,7 +1,7 @@
/* $XTermId: xstrings.c,v 1.79 2022/11/16 23:54:32 tom Exp $ */ /* $XTermId: xstrings.c,v 1.80 2023/05/09 08:13:56 tom Exp $ */
/* /*
* Copyright 2000-2020,2022 by Thomas E. Dickey * Copyright 2000-2022,2023 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -163,9 +163,8 @@ login_alias(char *login_name, uid_t uid, struct passwd *in_out)
if (!IsEmpty(login_name) if (!IsEmpty(login_name)
&& strcmp(login_name, in_out->pw_name)) { && strcmp(login_name, in_out->pw_name)) {
struct passwd pw2; struct passwd pw2;
Boolean ok2;
if ((ok2 = x_getpwnam(login_name, &pw2))) { if (x_getpwnam(login_name, &pw2)) {
uid_t uid2 = pw2.pw_uid; uid_t uid2 = pw2.pw_uid;
struct passwd pw3; struct passwd pw3;
Boolean ok3; Boolean ok3;
@ -177,8 +176,7 @@ login_alias(char *login_name, uid_t uid, struct passwd *in_out)
} else { } else {
FreeAndNull(login_name); FreeAndNull(login_name);
} }
if (ok2) free_pw(&pw2);
free_pw(&pw2);
if (ok3) if (ok3)
free_pw(&pw3); free_pw(&pw3);
} }

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2014-2022,2023 Thomas Dickey <dickey@invisible-island.net> --> <!-- Copyright 2014-2023,2024 Thomas Dickey <dickey@invisible-island.net> -->
<component type="desktop"> <component type="desktop">
<id>xterm.desktop</id> <id>xterm.desktop</id>
<metadata_license>CC-BY-3.0</metadata_license> <metadata_license>CC-BY-3.0</metadata_license>
@ -35,7 +35,7 @@
<keyword>terminal</keyword> <keyword>terminal</keyword>
</keywords> </keywords>
<releases> <releases>
<release version="378" date="2023-01-09"/> <release version="393" date="2024-07-11"/>
</releases> </releases>
<url type="homepage">https://invisible-island.net/xterm/</url> <url type="homepage">https://invisible-island.net/xterm/</url>
<update_contact>dickey@invisible-island.net</update_contact> <update_contact>dickey@invisible-island.net</update_contact>

View file

@ -1,7 +1,7 @@
/* $XTermId: xterm.h,v 1.922 2023/01/04 09:21:42 tom Exp $ */ /* $XTermId: xterm.h,v 1.948 2024/06/26 07:45:55 tom Exp $ */
/* /*
* Copyright 1999-2022,2023 by Thomas E. Dickey * Copyright 1999-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -135,15 +135,15 @@
#define HAVE_UTMP_UT_SESSION 1 #define HAVE_UTMP_UT_SESSION 1
#endif #endif
#if !(defined(linux) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4) && !defined(__FreeBSD__) #if !(defined(__linux__) && (!defined(__GLIBC__) || (__GLIBC__ < 2))) && !defined(SVR4) && !defined(__FreeBSD__)
#define ut_xstatus ut_exit.e_exit #define ut_xstatus ut_exit.e_exit
#endif #endif
#if defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX) || (defined(linux) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0))) #if defined(SVR4) || defined(__SCO__) || defined(BSD_UTMPX) || (defined(__linux__) && defined(__GLIBC__) && (__GLIBC__ >= 2) && !(defined(__powerpc__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0)))
#define HAVE_UTMP_UT_XTIME 1 #define HAVE_UTMP_UT_XTIME 1
#endif #endif
#if defined(linux) || defined(__CYGWIN__) #if defined(__linux__) || defined(__CYGWIN__)
#define USE_LASTLOG #define USE_LASTLOG
#define HAVE_LASTLOG_H #define HAVE_LASTLOG_H
#define USE_STRUCT_LASTLOG #define USE_STRUCT_LASTLOG
@ -170,11 +170,11 @@
#define OPT_SCO_FUNC_KEYS 1 #define OPT_SCO_FUNC_KEYS 1
#endif #endif
#if defined(__SCO__) || defined(SVR4) || defined(_POSIX_SOURCE) || defined(__QNX__) || defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(__CYGWIN__) #if defined(__SCO__) || defined(SVR4) || defined(_POSIX_VERSION) || defined(__QNX__) || defined(__hpux) || (defined(BSD) && (BSD >= 199103)) || defined(__CYGWIN__)
#define USE_POSIX_WAIT #define USE_POSIX_WAIT
#endif #endif
#if defined(AIXV3) || defined(CRAY) || defined(__SCO__) || defined(SVR4) || (defined(SYSV) && defined(i386)) || defined(__MVS__) || defined(__hpux) || defined(__osf__) || defined(linux) || defined(macII) || defined(BSD_UTMPX) #if defined(AIXV3) || defined(CRAY) || defined(__SCO__) || defined(SVR4) || (defined(SYSV) && defined(i386)) || defined(__MVS__) || defined(__hpux) || defined(__osf__) || defined(__linux__) || defined(macII) || defined(BSD_UTMPX)
#define USE_SYSV_UTMP #define USE_SYSV_UTMP
#endif #endif
@ -205,14 +205,28 @@
#define HAVE_XKB_BELL_EXT 1 #define HAVE_XKB_BELL_EXT 1
#endif #endif
#if (defined(SVR4) && !defined(__CYGWIN__)) || defined(linux) || (defined(BSD) && (BSD >= 199103)) #if (defined(SVR4) && !defined(__CYGWIN__)) || defined(__linux__) || (defined(BSD) && (BSD >= 199103))
#define HAVE_POSIX_SAVED_IDS #define HAVE_POSIX_SAVED_IDS
#endif #endif
#if defined(linux) || defined(__GLIBC__) || (defined(SYSV) && (defined(CRAY) || defined(macII) || defined(__hpux) || defined(__osf__) || defined(__sgi))) || !(defined(SYSV) || defined(__QNX__) || defined(VMS) || defined(__INTERIX)) #if defined(__linux__) || defined(__GLIBC__) || (defined(SYSV) && (defined(CRAY) || defined(macII) || defined(__hpux) || defined(__osf__) || defined(__sgi))) || !(defined(SYSV) || defined(__QNX__) || defined(VMS) || defined(__INTERIX))
#define HAVE_INITGROUPS #define HAVE_INITGROUPS
#endif #endif
#if defined(__linux__)
#define HAVE_PTY_H
#endif
#if !defined(USG) && !defined(__minix)
#define HAVE_SETITIMER 1
#else
#define HAVE_SETITIMER 0
#endif
#if defined(_POSIX_VERSION) || defined(SVR4) || defined(__convex__) || defined(__SCO__) || defined(__QNX__)
#define HAVE_SETSID 1
#endif
#endif /* HAVE_CONFIG_H */ #endif /* HAVE_CONFIG_H */
#ifndef HAVE_X11_DECKEYSYM_H #ifndef HAVE_X11_DECKEYSYM_H
@ -283,7 +297,7 @@ extern int errno;
* FIXME: Toggling logging from xterm hangs under Linux 2.0.29 with libc5 if * FIXME: Toggling logging from xterm hangs under Linux 2.0.29 with libc5 if
* we use 'waitpid()', while 'wait()' seems to work properly. * we use 'waitpid()', while 'wait()' seems to work properly.
*/ */
#ifdef linux #ifdef __linux__
#undef HAVE_WAITPID #undef HAVE_WAITPID
#endif #endif
@ -386,7 +400,7 @@ extern int errno;
#include <setjmp.h> #include <setjmp.h>
#if !defined(VMS) && !(defined(linux) && defined(__USE_GNU)) && !defined(__hpux) && !defined(_ALL_SOURCE) && !defined(__osf__) #if !defined(VMS) && !(defined(__linux__) && defined(__USE_GNU)) && !defined(__hpux) && !defined(_ALL_SOURCE) && !defined(__osf__)
extern char **environ; extern char **environ;
#endif #endif
@ -434,6 +448,7 @@ extern char **environ;
/***====================================================================***/ /***====================================================================***/
#define XtNactiveIcon "activeIcon"
#define XtNallowBoldFonts "allowBoldFonts" #define XtNallowBoldFonts "allowBoldFonts"
#define XtNallowC1Printable "allowC1Printable" #define XtNallowC1Printable "allowC1Printable"
#define XtNallowColorOps "allowColorOps" #define XtNallowColorOps "allowColorOps"
@ -455,10 +470,11 @@ extern char **environ;
#define XtNappcursorDefault "appcursorDefault" #define XtNappcursorDefault "appcursorDefault"
#define XtNappkeypadDefault "appkeypadDefault" #define XtNappkeypadDefault "appkeypadDefault"
#define XtNassumeAllChars "assumeAllChars" #define XtNassumeAllChars "assumeAllChars"
#define XtNautoWrap "autoWrap"
#define XtNautoScrollLock "autoScrollLock" #define XtNautoScrollLock "autoScrollLock"
#define XtNautoWrap "autoWrap"
#define XtNawaitInput "awaitInput" #define XtNawaitInput "awaitInput"
#define XtNbackarrowKey "backarrowKey" #define XtNbackarrowKey "backarrowKey"
#define XtNbackarrowKeyIsErase "backarrowKeyIsErase"
#define XtNbellIsUrgent "bellIsUrgent" #define XtNbellIsUrgent "bellIsUrgent"
#define XtNbellOnReset "bellOnReset" #define XtNbellOnReset "bellOnReset"
#define XtNbellSuppressTime "bellSuppressTime" #define XtNbellSuppressTime "bellSuppressTime"
@ -487,11 +503,13 @@ extern char **environ;
#define XtNcombiningChars "combiningChars" #define XtNcombiningChars "combiningChars"
#define XtNctrlFKeys "ctrlFKeys" #define XtNctrlFKeys "ctrlFKeys"
#define XtNcurses "curses" #define XtNcurses "curses"
#define XtNcursorBar "cursorBar"
#define XtNcursorBlink "cursorBlink" #define XtNcursorBlink "cursorBlink"
#define XtNcursorBlinkXOR "cursorBlinkXOR" #define XtNcursorBlinkXOR "cursorBlinkXOR"
#define XtNcursorColor "cursorColor" #define XtNcursorColor "cursorColor"
#define XtNcursorOffTime "cursorOffTime" #define XtNcursorOffTime "cursorOffTime"
#define XtNcursorOnTime "cursorOnTime" #define XtNcursorOnTime "cursorOnTime"
#define XtNcursorTheme "cursorTheme"
#define XtNcursorUnderLine "cursorUnderLine" #define XtNcursorUnderLine "cursorUnderLine"
#define XtNcutNewline "cutNewline" #define XtNcutNewline "cutNewline"
#define XtNcutToBeginningOfLine "cutToBeginningOfLine" #define XtNcutToBeginningOfLine "cutToBeginningOfLine"
@ -538,9 +556,16 @@ extern char **environ;
#define XtNhighlightReverse "highlightReverse" #define XtNhighlightReverse "highlightReverse"
#define XtNhighlightSelection "highlightSelection" #define XtNhighlightSelection "highlightSelection"
#define XtNhighlightTextColor "highlightTextColor" #define XtNhighlightTextColor "highlightTextColor"
#define XtNhold "hold"
#define XtNhpFunctionKeys "hpFunctionKeys"
#define XtNhpLowerleftBugCompat "hpLowerleftBugCompat" #define XtNhpLowerleftBugCompat "hpLowerleftBugCompat"
#define XtNi18nSelections "i18nSelections" #define XtNi18nSelections "i18nSelections"
#define XtNiconBorderColor "iconBorderColor"
#define XtNiconBorderWidth "iconBorderWidth"
#define XtNiconFont "iconFont"
#define XtNiconGeometry "iconGeometry"
#define XtNiconHint "iconHint" #define XtNiconHint "iconHint"
#define XtNincrementalGraphics "incrementalGraphics"
#define XtNindicatorFormat "indicatorFormat" #define XtNindicatorFormat "indicatorFormat"
#define XtNinitialFont "initialFont" #define XtNinitialFont "initialFont"
#define XtNinternalBorder "internalBorder" #define XtNinternalBorder "internalBorder"
@ -549,8 +574,10 @@ extern char **environ;
#define XtNkeepClipboard "keepClipboard" #define XtNkeepClipboard "keepClipboard"
#define XtNkeepSelection "keepSelection" #define XtNkeepSelection "keepSelection"
#define XtNkeyboardDialect "keyboardDialect" #define XtNkeyboardDialect "keyboardDialect"
#define XtNlimitFontsets "limitFontsets" #define XtNkeyboardType "keyboardType"
#define XtNlimitFontHeight "limitFontHeight"
#define XtNlimitFontWidth "limitFontWidth" #define XtNlimitFontWidth "limitFontWidth"
#define XtNlimitFontsets "limitFontsets"
#define XtNlimitResize "limitResize" #define XtNlimitResize "limitResize"
#define XtNlimitResponse "limitResponse" #define XtNlimitResponse "limitResponse"
#define XtNlocale "locale" #define XtNlocale "locale"
@ -560,11 +587,16 @@ extern char **environ;
#define XtNlogging "logging" #define XtNlogging "logging"
#define XtNloginShell "loginShell" #define XtNloginShell "loginShell"
#define XtNmarginBell "marginBell" #define XtNmarginBell "marginBell"
#define XtNmaxBufSize "maxBufSize"
#define XtNmaxGraphicSize "maxGraphicSize" #define XtNmaxGraphicSize "maxGraphicSize"
#define XtNmaxStringParse "maxStringParse"
#define XtNmaximized "maximized" #define XtNmaximized "maximized"
#define XtNmenuBar "menuBar" /* internal */ #define XtNmenuBar "menuBar" /* internal */
#define XtNmenuHeight "menuHeight" #define XtNmenuHeight "menuHeight"
#define XtNmenuLocale "menuLocale"
#define XtNmessages "messages"
#define XtNmetaSendsEscape "metaSendsEscape" #define XtNmetaSendsEscape "metaSendsEscape"
#define XtNminBufSize "minBufSize"
#define XtNmkSamplePass "mkSamplePass" #define XtNmkSamplePass "mkSamplePass"
#define XtNmkSampleSize "mkSampleSize" #define XtNmkSampleSize "mkSampleSize"
#define XtNmkWidth "mkWidth" #define XtNmkWidth "mkWidth"
@ -581,6 +613,7 @@ extern char **environ;
#define XtNnumColorRegisters "numColorRegisters" #define XtNnumColorRegisters "numColorRegisters"
#define XtNnumLock "numLock" #define XtNnumLock "numLock"
#define XtNoldXtermFKeys "oldXtermFKeys" #define XtNoldXtermFKeys "oldXtermFKeys"
#define XtNomitTranslation "omitTranslation"
#define XtNpointerColor "pointerColor" #define XtNpointerColor "pointerColor"
#define XtNpointerColorBackground "pointerColorBackground" #define XtNpointerColorBackground "pointerColorBackground"
#define XtNpointerFont "pointerFont" #define XtNpointerFont "pointerFont"
@ -588,7 +621,14 @@ extern char **environ;
#define XtNpointerShape "pointerShape" #define XtNpointerShape "pointerShape"
#define XtNpopOnBell "popOnBell" #define XtNpopOnBell "popOnBell"
#define XtNprecompose "precompose" #define XtNprecompose "precompose"
#define XtNpreferLatin1 "preferLatin1"
#define XtNprintAttributes "printAttributes" #define XtNprintAttributes "printAttributes"
#define XtNprintFileImmediate "printFileImmediate"
#define XtNprintFileOnXError "printFileOnXError"
#define XtNprintModeImmediate "printModeImmediate"
#define XtNprintModeOnXError "printModeOnXError"
#define XtNprintOptsImmediate "printOptsImmediate"
#define XtNprintOptsOnXError "printOptsOnXError"
#define XtNprinterAutoClose "printerAutoClose" #define XtNprinterAutoClose "printerAutoClose"
#define XtNprinterCommand "printerCommand" #define XtNprinterCommand "printerCommand"
#define XtNprinterControlMode "printerControlMode" #define XtNprinterControlMode "printerControlMode"
@ -596,23 +636,34 @@ extern char **environ;
#define XtNprinterFormFeed "printerFormFeed" #define XtNprinterFormFeed "printerFormFeed"
#define XtNprinterNewLine "printerNewLine" #define XtNprinterNewLine "printerNewLine"
#define XtNprivateColorRegisters "privateColorRegisters" #define XtNprivateColorRegisters "privateColorRegisters"
#define XtNptyHandshake "ptyHandshake"
#define XtNptyInitialErase "ptyInitialErase"
#define XtNptySttySize "ptySttySize"
#define XtNquietGrab "quietGrab" #define XtNquietGrab "quietGrab"
#define XtNregisDefaultFont "regisDefaultFont" #define XtNregisDefaultFont "regisDefaultFont"
#define XtNregisScreenSize "regisScreenSize" #define XtNregisScreenSize "regisScreenSize"
#define XtNrenderFont "renderFont" #define XtNrenderFont "renderFont"
#define XtNreportCClass "reportCClass"
#define XtNreportColors "reportColors"
#define XtNreportFonts "reportFonts"
#define XtNreportIcons "reportIcons"
#define XtNreportXRes "reportXRes"
#define XtNresizeByPixel "resizeByPixel" #define XtNresizeByPixel "resizeByPixel"
#define XtNresizeGravity "resizeGravity" #define XtNresizeGravity "resizeGravity"
#define XtNretryInputMethod "retryInputMethod" #define XtNretryInputMethod "retryInputMethod"
#define XtNreverseWrap "reverseWrap" #define XtNreverseWrap "reverseWrap"
#define XtNrightScrollBar "rightScrollBar" #define XtNrightScrollBar "rightScrollBar"
#define XtNsameName "sameName"
#define XtNsaveLines "saveLines" #define XtNsaveLines "saveLines"
#define XtNscaleHeight "scaleHeight" #define XtNscaleHeight "scaleHeight"
#define XtNscoFunctionKeys "scoFunctionKeys"
#define XtNscrollBar "scrollBar" #define XtNscrollBar "scrollBar"
#define XtNscrollBarBorder "scrollBarBorder" #define XtNscrollBarBorder "scrollBarBorder"
#define XtNscrollKey "scrollKey" #define XtNscrollKey "scrollKey"
#define XtNscrollLines "scrollLines" #define XtNscrollLines "scrollLines"
#define XtNscrollTtyOutput "scrollTtyOutput" #define XtNscrollTtyOutput "scrollTtyOutput"
#define XtNselectToClipboard "selectToClipboard" #define XtNselectToClipboard "selectToClipboard"
#define XtNsessionMgt "sessionMgt"
#define XtNshiftEscape "shiftEscape" #define XtNshiftEscape "shiftEscape"
#define XtNshiftFonts "shiftFonts" #define XtNshiftFonts "shiftFonts"
#define XtNshowBlinkAsBold "showBlinkAsBold" #define XtNshowBlinkAsBold "showBlinkAsBold"
@ -621,29 +672,39 @@ extern char **environ;
#define XtNsignalInhibit "signalInhibit" #define XtNsignalInhibit "signalInhibit"
#define XtNsixelScrolling "sixelScrolling" #define XtNsixelScrolling "sixelScrolling"
#define XtNsixelScrollsRight "sixelScrollsRight" #define XtNsixelScrollsRight "sixelScrollsRight"
#define XtNsunFunctionKeys "sunFunctionKeys"
#define XtNsunKeyboard "sunKeyboard"
#define XtNtcapFunctionKeys "tcapFunctionKeys"
#define XtNtekGeometry "tekGeometry" #define XtNtekGeometry "tekGeometry"
#define XtNtekInhibit "tekInhibit" #define XtNtekInhibit "tekInhibit"
#define XtNtekSmall "tekSmall" #define XtNtekSmall "tekSmall"
#define XtNtekStartup "tekStartup" #define XtNtekStartup "tekStartup"
#define XtNtermName "termName"
#define XtNtiXtraScroll "tiXtraScroll" #define XtNtiXtraScroll "tiXtraScroll"
#define XtNtiteInhibit "titeInhibit" #define XtNtiteInhibit "titeInhibit"
#define XtNtitleModes "titleModes" #define XtNtitleModes "titleModes"
#define XtNtoolBar "toolBar" #define XtNtoolBar "toolBar"
#define XtNtrimSelection "trimSelection" #define XtNtrimSelection "trimSelection"
#define XtNttyModes "ttyModes"
#define XtNunderLine "underLine" #define XtNunderLine "underLine"
#define XtNuseBorderClipping "useBorderClipping" #define XtNuseBorderClipping "useBorderClipping"
#define XtNuseClipping "useClipping" #define XtNuseClipping "useClipping"
#define XtNuseInsertMode "useInsertMode"
#define XtNutf8 "utf8" #define XtNutf8 "utf8"
#define XtNutf8Fonts "utf8Fonts" #define XtNutf8Fonts "utf8Fonts"
#define XtNutf8Latin1 "utf8Latin1" #define XtNutf8Latin1 "utf8Latin1"
#define XtNutf8SelectTypes "utf8SelectTypes" #define XtNutf8SelectTypes "utf8SelectTypes"
#define XtNutf8Title "utf8Title" #define XtNutf8Title "utf8Title"
#define XtNutf8Weblike "utf8Weblike" #define XtNutf8Weblike "utf8Weblike"
#define XtNutmpDisplayId "utmpDisplayId"
#define XtNutmpInhibit "utmpInhibit"
#define XtNvalidShells "validShells"
#define XtNveryBoldColors "veryBoldColors" #define XtNveryBoldColors "veryBoldColors"
#define XtNvisualBell "visualBell" #define XtNvisualBell "visualBell"
#define XtNvisualBellDelay "visualBellDelay" #define XtNvisualBellDelay "visualBellDelay"
#define XtNvisualBellLine "visualBellLine" #define XtNvisualBellLine "visualBellLine"
#define XtNvt100Graphics "vt100Graphics" #define XtNvt100Graphics "vt100Graphics"
#define XtNwaitForMap "waitForMap"
#define XtNwideBoldFont "wideBoldFont" #define XtNwideBoldFont "wideBoldFont"
#define XtNwideChars "wideChars" #define XtNwideChars "wideChars"
#define XtNwideFont "wideFont" #define XtNwideFont "wideFont"
@ -655,7 +716,10 @@ extern char **environ;
#define XtNxmcGlitch "xmcGlitch" /* ncurses-testing */ #define XtNxmcGlitch "xmcGlitch" /* ncurses-testing */
#define XtNxmcInline "xmcInline" /* ncurses-testing */ #define XtNxmcInline "xmcInline" /* ncurses-testing */
#define XtNxmcMoveSGR "xmcMoveSGR" /* ncurses-testing */ #define XtNxmcMoveSGR "xmcMoveSGR" /* ncurses-testing */
#define XtNzIconBeep "zIconBeep"
#define XtNzIconTitleFormat "zIconTitleFormat"
#define XtCActiveIcon "ActiveIcon"
#define XtCAllowBoldFonts "AllowBoldFonts" #define XtCAllowBoldFonts "AllowBoldFonts"
#define XtCAllowC1Printable "AllowC1Printable" #define XtCAllowC1Printable "AllowC1Printable"
#define XtCAllowColorOps "AllowColorOps" #define XtCAllowColorOps "AllowColorOps"
@ -676,10 +740,11 @@ extern char **environ;
#define XtCAppcursorDefault "AppcursorDefault" #define XtCAppcursorDefault "AppcursorDefault"
#define XtCAppkeypadDefault "AppkeypadDefault" #define XtCAppkeypadDefault "AppkeypadDefault"
#define XtCAssumeAllChars "AssumeAllChars" #define XtCAssumeAllChars "AssumeAllChars"
#define XtCAutoWrap "AutoWrap"
#define XtCAutoScrollLock "AutoScrollLock" #define XtCAutoScrollLock "AutoScrollLock"
#define XtCAutoWrap "AutoWrap"
#define XtCAwaitInput "AwaitInput" #define XtCAwaitInput "AwaitInput"
#define XtCBackarrowKey "BackarrowKey" #define XtCBackarrowKey "BackarrowKey"
#define XtCBackarrowKeyIsErase "BackarrowKeyIsErase"
#define XtCBellIsUrgent "BellIsUrgent" #define XtCBellIsUrgent "BellIsUrgent"
#define XtCBellOnReset "BellOnReset" #define XtCBellOnReset "BellOnReset"
#define XtCBellSuppressTime "BellSuppressTime" #define XtCBellSuppressTime "BellSuppressTime"
@ -703,10 +768,12 @@ extern char **environ;
#define XtCCombiningChars "CombiningChars" #define XtCCombiningChars "CombiningChars"
#define XtCCtrlFKeys "CtrlFKeys" #define XtCCtrlFKeys "CtrlFKeys"
#define XtCCurses "Curses" #define XtCCurses "Curses"
#define XtCCursorBar "CursorBar"
#define XtCCursorBlink "CursorBlink" #define XtCCursorBlink "CursorBlink"
#define XtCCursorBlinkXOR "CursorBlinkXOR" #define XtCCursorBlinkXOR "CursorBlinkXOR"
#define XtCCursorOffTime "CursorOffTime" #define XtCCursorOffTime "CursorOffTime"
#define XtCCursorOnTime "CursorOnTime" #define XtCCursorOnTime "CursorOnTime"
#define XtCCursorTheme "CursorTheme"
#define XtCCursorUnderLine "CursorUnderLine" #define XtCCursorUnderLine "CursorUnderLine"
#define XtCCutNewline "CutNewline" #define XtCCutNewline "CutNewline"
#define XtCCutToBeginningOfLine "CutToBeginningOfLine" #define XtCCutToBeginningOfLine "CutToBeginningOfLine"
@ -751,17 +818,25 @@ extern char **environ;
#define XtCHighlightColorMode "HighlightColorMode" #define XtCHighlightColorMode "HighlightColorMode"
#define XtCHighlightReverse "HighlightReverse" #define XtCHighlightReverse "HighlightReverse"
#define XtCHighlightSelection "HighlightSelection" #define XtCHighlightSelection "HighlightSelection"
#define XtCHold "Hold"
#define XtCHpFunctionKeys "HpFunctionKeys"
#define XtCHpLowerleftBugCompat "HpLowerleftBugCompat" #define XtCHpLowerleftBugCompat "HpLowerleftBugCompat"
#define XtCI18nSelections "I18nSelections" #define XtCI18nSelections "I18nSelections"
#define XtCIconFont "IconFont"
#define XtCIconGeometry "IconGeometry"
#define XtCIconHint "IconHint" #define XtCIconHint "IconHint"
#define XtCIncrementalGraphics "IncrementalGraphics"
#define XtCIndicatorFormat "IndicatorFormat" #define XtCIndicatorFormat "IndicatorFormat"
#define XtCInitialFont "InitialFont" #define XtCInitialFont "InitialFont"
#define XtCInternalBorder "InternalBorder"
#define XtCJumpScroll "JumpScroll" #define XtCJumpScroll "JumpScroll"
#define XtCKeepClipboard "KeepClipboard" #define XtCKeepClipboard "KeepClipboard"
#define XtCKeepSelection "KeepSelection" #define XtCKeepSelection "KeepSelection"
#define XtCKeyboardDialect "KeyboardDialect" #define XtCKeyboardDialect "KeyboardDialect"
#define XtCLimitFontsets "LimitFontsets" #define XtCKeyboardType "KeyboardType"
#define XtCLimitFontHeight "LimitFontHeight"
#define XtCLimitFontWidth "LimitFontWidth" #define XtCLimitFontWidth "LimitFontWidth"
#define XtCLimitFontsets "LimitFontsets"
#define XtCLimitResize "LimitResize" #define XtCLimitResize "LimitResize"
#define XtCLimitResponse "LimitResponse" #define XtCLimitResponse "LimitResponse"
#define XtCLocale "Locale" #define XtCLocale "Locale"
@ -771,11 +846,16 @@ extern char **environ;
#define XtCLogging "Logging" #define XtCLogging "Logging"
#define XtCLoginShell "LoginShell" #define XtCLoginShell "LoginShell"
#define XtCMarginBell "MarginBell" #define XtCMarginBell "MarginBell"
#define XtCMaxBufSize "MaxBufSize"
#define XtCMaxGraphicSize "MaxGraphicSize" #define XtCMaxGraphicSize "MaxGraphicSize"
#define XtCMaxStringParse "MaxStringParse"
#define XtCMaximized "Maximized" #define XtCMaximized "Maximized"
#define XtCMenuBar "MenuBar" /* internal */ #define XtCMenuBar "MenuBar" /* internal */
#define XtCMenuHeight "MenuHeight" #define XtCMenuHeight "MenuHeight"
#define XtCMenuLocale "MenuLocale"
#define XtCMessages "Messages"
#define XtCMetaSendsEscape "MetaSendsEscape" #define XtCMetaSendsEscape "MetaSendsEscape"
#define XtCMinBufSize "MinBufSize"
#define XtCMkSamplePass "MkSamplePass" #define XtCMkSamplePass "MkSamplePass"
#define XtCMkSampleSize "MkSampleSize" #define XtCMkSampleSize "MkSampleSize"
#define XtCMkWidth "MkWidth" #define XtCMkWidth "MkWidth"
@ -791,11 +871,19 @@ extern char **environ;
#define XtCNumColorRegisters "NumColorRegisters" #define XtCNumColorRegisters "NumColorRegisters"
#define XtCNumLock "NumLock" #define XtCNumLock "NumLock"
#define XtCOldXtermFKeys "OldXtermFKeys" #define XtCOldXtermFKeys "OldXtermFKeys"
#define XtCOmitTranslation "OmitTranslation"
#define XtCPointerFont "PointerFont" #define XtCPointerFont "PointerFont"
#define XtCPointerMode "PointerMode" #define XtCPointerMode "PointerMode"
#define XtCPopOnBell "PopOnBell" #define XtCPopOnBell "PopOnBell"
#define XtCPrecompose "Precompose" #define XtCPrecompose "Precompose"
#define XtCPreferLatin1 "PreferLatin1"
#define XtCPrintAttributes "PrintAttributes" #define XtCPrintAttributes "PrintAttributes"
#define XtCPrintFileImmediate "PrintFileImmediate"
#define XtCPrintFileOnXError "PrintFileOnXError"
#define XtCPrintModeImmediate "PrintModeImmediate"
#define XtCPrintModeOnXError "PrintModeOnXError"
#define XtCPrintOptsImmediate "PrintOptsImmediate"
#define XtCPrintOptsOnXError "PrintOptsOnXError"
#define XtCPrinterAutoClose "PrinterAutoClose" #define XtCPrinterAutoClose "PrinterAutoClose"
#define XtCPrinterCommand "PrinterCommand" #define XtCPrinterCommand "PrinterCommand"
#define XtCPrinterControlMode "PrinterControlMode" #define XtCPrinterControlMode "PrinterControlMode"
@ -803,22 +891,33 @@ extern char **environ;
#define XtCPrinterFormFeed "PrinterFormFeed" #define XtCPrinterFormFeed "PrinterFormFeed"
#define XtCPrinterNewLine "PrinterNewLine" #define XtCPrinterNewLine "PrinterNewLine"
#define XtCPrivateColorRegisters "PrivateColorRegisters" #define XtCPrivateColorRegisters "PrivateColorRegisters"
#define XtCPtyHandshake "PtyHandshake"
#define XtCPtyInitialErase "PtyInitialErase"
#define XtCPtySttySize "PtySttySize"
#define XtCQuietGrab "QuietGrab" #define XtCQuietGrab "QuietGrab"
#define XtCRegisDefaultFont "RegisDefaultFont" #define XtCRegisDefaultFont "RegisDefaultFont"
#define XtCRegisScreenSize "RegisScreenSize" #define XtCRegisScreenSize "RegisScreenSize"
#define XtCRenderFont "RenderFont" #define XtCRenderFont "RenderFont"
#define XtCReportCClass "ReportCClass"
#define XtCReportColors "ReportColors"
#define XtCReportFonts "ReportFonts"
#define XtCReportIcons "ReportIcons"
#define XtCReportXRes "ReportXRes"
#define XtCResizeByPixel "ResizeByPixel" #define XtCResizeByPixel "ResizeByPixel"
#define XtCResizeGravity "ResizeGravity" #define XtCResizeGravity "ResizeGravity"
#define XtCRetryInputMethod "RetryInputMethod" #define XtCRetryInputMethod "RetryInputMethod"
#define XtCReverseWrap "ReverseWrap" #define XtCReverseWrap "ReverseWrap"
#define XtCRightScrollBar "RightScrollBar" #define XtCRightScrollBar "RightScrollBar"
#define XtCSameName "SameName"
#define XtCSaveLines "SaveLines" #define XtCSaveLines "SaveLines"
#define XtCScaleHeight "ScaleHeight" #define XtCScaleHeight "ScaleHeight"
#define XtCScoFunctionKeys "ScoFunctionKeys"
#define XtCScrollBar "ScrollBar" #define XtCScrollBar "ScrollBar"
#define XtCScrollBarBorder "ScrollBarBorder" #define XtCScrollBarBorder "ScrollBarBorder"
#define XtCScrollCond "ScrollCond" #define XtCScrollCond "ScrollCond"
#define XtCScrollLines "ScrollLines" #define XtCScrollLines "ScrollLines"
#define XtCSelectToClipboard "SelectToClipboard" #define XtCSelectToClipboard "SelectToClipboard"
#define XtCSessionMgt "SessionMgt"
#define XtCShiftEscape "ShiftEscape" #define XtCShiftEscape "ShiftEscape"
#define XtCShiftFonts "ShiftFonts" #define XtCShiftFonts "ShiftFonts"
#define XtCShowBlinkAsBold "ShowBlinkAsBold" #define XtCShowBlinkAsBold "ShowBlinkAsBold"
@ -827,28 +926,38 @@ extern char **environ;
#define XtCSignalInhibit "SignalInhibit" #define XtCSignalInhibit "SignalInhibit"
#define XtCSixelScrolling "SixelScrolling" #define XtCSixelScrolling "SixelScrolling"
#define XtCSixelScrollsRight "SixelScrollsRight" #define XtCSixelScrollsRight "SixelScrollsRight"
#define XtCSunFunctionKeys "SunFunctionKeys"
#define XtCSunKeyboard "SunKeyboard"
#define XtCTcapFunctionKeys "TcapFunctionKeys"
#define XtCTekInhibit "TekInhibit" #define XtCTekInhibit "TekInhibit"
#define XtCTekSmall "TekSmall" #define XtCTekSmall "TekSmall"
#define XtCTekStartup "TekStartup" #define XtCTekStartup "TekStartup"
#define XtCTermName "TermName"
#define XtCTiXtraScroll "TiXtraScroll" #define XtCTiXtraScroll "TiXtraScroll"
#define XtCTiteInhibit "TiteInhibit" #define XtCTiteInhibit "TiteInhibit"
#define XtCTitleModes "TitleModes" #define XtCTitleModes "TitleModes"
#define XtCToolBar "ToolBar" #define XtCToolBar "ToolBar"
#define XtCTrimSelection "TrimSelection" #define XtCTrimSelection "TrimSelection"
#define XtCTtyModes "TtyModes"
#define XtCUnderLine "UnderLine" #define XtCUnderLine "UnderLine"
#define XtCUseBorderClipping "UseBorderClipping" #define XtCUseBorderClipping "UseBorderClipping"
#define XtCUseClipping "UseClipping" #define XtCUseClipping "UseClipping"
#define XtCUseInsertMode "UseInsertMode"
#define XtCUtf8 "Utf8" #define XtCUtf8 "Utf8"
#define XtCUtf8Fonts "Utf8Fonts" #define XtCUtf8Fonts "Utf8Fonts"
#define XtCUtf8Latin1 "Utf8Latin1" #define XtCUtf8Latin1 "Utf8Latin1"
#define XtCUtf8SelectTypes "Utf8SelectTypes" #define XtCUtf8SelectTypes "Utf8SelectTypes"
#define XtCUtf8Title "Utf8Title" #define XtCUtf8Title "Utf8Title"
#define XtCUtf8Weblike "Utf8Weblike" #define XtCUtf8Weblike "Utf8Weblike"
#define XtCUtmpDisplayId "UtmpDisplayId"
#define XtCUtmpInhibit "UtmpInhibit"
#define XtCVT100Graphics "VT100Graphics" #define XtCVT100Graphics "VT100Graphics"
#define XtCValidShells "ValidShells"
#define XtCVeryBoldColors "VeryBoldColors" #define XtCVeryBoldColors "VeryBoldColors"
#define XtCVisualBell "VisualBell" #define XtCVisualBell "VisualBell"
#define XtCVisualBellDelay "VisualBellDelay" #define XtCVisualBellDelay "VisualBellDelay"
#define XtCVisualBellLine "VisualBellLine" #define XtCVisualBellLine "VisualBellLine"
#define XtCWaitForMap "WaitForMap"
#define XtCWideBoldFont "WideBoldFont" #define XtCWideBoldFont "WideBoldFont"
#define XtCWideChars "WideChars" #define XtCWideChars "WideChars"
#define XtCWideFont "WideFont" #define XtCWideFont "WideFont"
@ -860,6 +969,8 @@ extern char **environ;
#define XtCXmcGlitch "XmcGlitch" /* ncurses-testing */ #define XtCXmcGlitch "XmcGlitch" /* ncurses-testing */
#define XtCXmcInline "XmcInline" /* ncurses-testing */ #define XtCXmcInline "XmcInline" /* ncurses-testing */
#define XtCXmcMoveSGR "XmcMoveSGR" /* ncurses-testing */ #define XtCXmcMoveSGR "XmcMoveSGR" /* ncurses-testing */
#define XtCZIconBeep "ZIconBeep"
#define XtCZIconTitleFormat "ZIconTitleFormat"
#if defined(NO_ACTIVE_ICON) && !defined(XtNgeometry) #if defined(NO_ACTIVE_ICON) && !defined(XtNgeometry)
#define XtNgeometry "geometry" #define XtNgeometry "geometry"
@ -896,13 +1007,13 @@ extern void HandleGINInput PROTO_XT_ACTIONS_ARGS;
extern void TCursorToggle (TekWidget /* tw */, int /* toggle */); extern void TCursorToggle (TekWidget /* tw */, int /* toggle */);
extern void TekCopy (TekWidget /* tw */); extern void TekCopy (TekWidget /* tw */);
extern void TekEnqMouse (TekWidget /* tw */, int /* c */); extern void TekEnqMouse (TekWidget /* tw */, int /* c */);
extern void TekExpose (Widget /* w */, XEvent * /* event */, Region /* region */); extern void TekExpose (Widget /* w */, XEvent * /* event */, Region /* region */);
extern void TekGINoff (TekWidget /* tw */); extern void TekGINoff (TekWidget /* tw */);
extern void TekRefresh (TekWidget /* tw */); extern void TekRefresh (TekWidget /* tw */);
extern void TekRepaint (TekWidget /* xw */); extern void TekRepaint (TekWidget /* xw */);
extern void TekReverseVideo (XtermWidget /* xw */, TekWidget /* tw */); extern void TekReverseVideo (XtermWidget /* xw */, TekWidget /* tw */);
extern void TekRun (void); extern void TekRun (void);
extern void TekSetFontSize (TekWidget /* tw */, Bool /* fromMenu */, int /* newitem */); extern void TekSetFontSize (TekWidget /* tw */, Bool /* fromMenu */, int /* newitem */);
extern void TekSetWinSize (TekWidget /* tw */); extern void TekSetWinSize (TekWidget /* tw */);
extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */); extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */);
#endif #endif
@ -918,11 +1029,11 @@ extern void TekSimulatePageButton (TekWidget /* tw */, Bool /* reset */);
(s)->event_mask |= PointerMotionMask; \ (s)->event_mask |= PointerMotionMask; \
XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); } XSelectInput(XtDisplay((t)), XtWindow((t)), (long) (s)->event_mask); }
extern Bool SendMousePosition (XtermWidget /* w */, XEvent* /* event */); extern Bool SendMousePosition (XtermWidget /* w */, XEvent* /* event */);
extern XtermMouseModes okSendMousePos(XtermWidget /* xw */); extern XtermMouseModes okSendMousePos(XtermWidget /* xw */);
extern void DiredButton PROTO_XT_ACTIONS_ARGS; extern void DiredButton PROTO_XT_ACTIONS_ARGS;
extern void DisownSelection (XtermWidget /* xw */); extern void DisownSelection (XtermWidget /* xw */);
extern void UnhiliteSelection (XtermWidget /* xw */); extern void UnhiliteSelection (XtermWidget /* xw */);
extern void HandleCopySelection PROTO_XT_ACTIONS_ARGS; extern void HandleCopySelection PROTO_XT_ACTIONS_ARGS;
extern void HandleInsertSelection PROTO_XT_ACTIONS_ARGS; extern void HandleInsertSelection PROTO_XT_ACTIONS_ARGS;
extern void HandleKeyboardSelectEnd PROTO_XT_ACTIONS_ARGS; extern void HandleKeyboardSelectEnd PROTO_XT_ACTIONS_ARGS;
@ -936,8 +1047,8 @@ extern void HandleSelectExtend PROTO_XT_ACTIONS_ARGS;
extern void HandleSelectSet PROTO_XT_ACTIONS_ARGS; extern void HandleSelectSet PROTO_XT_ACTIONS_ARGS;
extern void HandleSelectStart PROTO_XT_ACTIONS_ARGS; extern void HandleSelectStart PROTO_XT_ACTIONS_ARGS;
extern void HandleStartExtend PROTO_XT_ACTIONS_ARGS; extern void HandleStartExtend PROTO_XT_ACTIONS_ARGS;
extern void ResizeSelection (TScreen * /* screen */, int /* rows */, int /* cols */); extern void ResizeSelection (TScreen * /* screen */, int /* rows */, int /* cols */);
extern void ScrollSelection (TScreen * /* screen */, int /* amount */, Bool /* always */); extern void ScrollSelection (TScreen * /* screen */, int /* amount */, Bool /* always */);
extern void TrackMouse (XtermWidget /* xw */, int /* func */, CELL * /* start */, int /* firstrow */, int /* lastrow */); extern void TrackMouse (XtermWidget /* xw */, int /* func */, CELL * /* start */, int /* firstrow */, int /* lastrow */);
extern void ViButton PROTO_XT_ACTIONS_ARGS; extern void ViButton PROTO_XT_ACTIONS_ARGS;
@ -946,8 +1057,8 @@ extern int xtermUtf8ToTextList (XtermWidget /* xw */, XTextProperty * /* text_pr
extern void xtermButtonInit (XtermWidget /* xw */); extern void xtermButtonInit (XtermWidget /* xw */);
#if OPT_DEC_LOCATOR #if OPT_DEC_LOCATOR
extern void GetLocatorPosition (XtermWidget /* w */); extern void GetLocatorPosition (XtermWidget /* w */);
extern void InitLocatorFilter (XtermWidget /* w */); extern void InitLocatorFilter (XtermWidget /* w */);
#endif /* OPT_DEC_LOCATOR */ #endif /* OPT_DEC_LOCATOR */
#if OPT_FOCUS_EVENT #if OPT_FOCUS_EVENT
@ -957,10 +1068,10 @@ extern void SendFocusButton(XtermWidget /* xw */, XFocusChangeEvent * /* event *
#endif #endif
#if OPT_PASTE64 #if OPT_PASTE64
extern void AppendToSelectionBuffer (TScreen * /* screen */, unsigned /* c */, String /* selection */); extern void AppendToSelectionBuffer (TScreen * /* screen */, unsigned /* c */, String /* selection */);
extern void ClearSelectionBuffer (TScreen * /* screen */, String /* selection */); extern void ClearSelectionBuffer (TScreen * /* screen */, String /* selection */);
extern void CompleteSelection (XtermWidget /* xw */, String * /* args */, Cardinal /* len */); extern void CompleteSelection (XtermWidget /* xw */, String * /* args */, Cardinal /* len */);
extern void xtermGetSelection (Widget /* w */, Time /* ev_time */, String * /* params */, Cardinal /* num_params */, Atom * /* targets */); extern void xtermGetSelection (Widget /* w */, Time /* ev_time */, String * /* params */, Cardinal /* num_params */, Atom * /* targets */);
#endif #endif
#if OPT_READLINE #if OPT_READLINE
@ -971,18 +1082,20 @@ extern void ReadLineButton PROTO_XT_ACTIONS_ARGS;
extern void report_char_class(XtermWidget); extern void report_char_class(XtermWidget);
#endif #endif
#define IsLatin1(n) (((n) >= 32 && (n) <= 126) || ((n) >= 160 && (n) <= 255)) #define IsAscii1(n) (((n) >= 32 && (n) <= 126))
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
#define WideCells(n) (((IChar)(n) >= first_widechar) ? my_wcwidth((wchar_t) (n)) : 1) #define WideCells(n) (((IChar)(n) >= first_widechar) ? my_wcwidth((wchar_t) (n)) : 1)
#define isWideFrg(n) (((n) == HIDDEN_CHAR) || (WideCells((n)) == 2)) #define isWideFrg(n) (((n) == HIDDEN_CHAR) || (WideCells((n)) == 2))
#define isWide(n) (((IChar)(n) >= first_widechar) && isWideFrg(n)) #define isWide(n) (((IChar)(n) >= first_widechar) && isWideFrg(n))
#define CharWidth(screen, n) ((!((screen)->utf8_mode) && ((n) < 256)) \ #define CharWidth(screen, n) (((n) < 256) \
? (IsLatin1(n) ? 1 : 0) \ ? (IsLatin1(n) ? 1 : 0) \
: my_wcwidth((wchar_t) (n))) : my_wcwidth((wchar_t) (n)))
#define IsLatin1(n) (IsAscii1(n) || ((n) >= 160 && (n) <= 255))
#else #else
#define WideCells(n) 1 #define WideCells(n) 1
#define CharWidth(screen, n) (IsLatin1(n) ? 1 : 0) #define CharWidth(screen, n) (IsLatin1(n) ? 1 : 0)
#define IsLatin1(n) (IsAscii1(n) || ((n) >= 160))
#endif #endif
/* cachedCgs.c */ /* cachedCgs.c */
@ -1000,6 +1113,7 @@ extern void setCgsCSet(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/
extern void setCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/); extern void setCgsFont(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/);
extern void setCgsFont2(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/, unsigned /*which*/); extern void setCgsFont2(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, XTermFonts * /*font*/, unsigned /*which*/);
extern void setCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/); extern void setCgsFore(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/);
extern void setCgsLine(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*cgsId*/, Pixel /*fg*/);
extern void swapCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/); extern void swapCgs(XtermWidget /*xw*/, VTwin * /*cgsWin*/, CgsEnum /*dstCgsId*/, CgsEnum /*srcCgsId*/);
#ifdef NO_LEAKS #ifdef NO_LEAKS
@ -1011,7 +1125,7 @@ extern Bool CheckBufPtrs (TScreen * /* screen */);
extern Bool set_cursor_gcs (XtermWidget /* xw */); extern Bool set_cursor_gcs (XtermWidget /* xw */);
extern char * vt100ResourceToString (XtermWidget /* xw */, const char * /* name */); extern char * vt100ResourceToString (XtermWidget /* xw */, const char * /* name */);
extern int VTInit (XtermWidget /* xw */); extern int VTInit (XtermWidget /* xw */);
extern Bool FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */); extern Bool FindFontSelection (XtermWidget /* xw */, const char * /* atom_name */, Bool /* justprobe */);
extern void HideCursor (XtermWidget /* xw */); extern void HideCursor (XtermWidget /* xw */);
extern void RestartBlinking(XtermWidget /* xw */); extern void RestartBlinking(XtermWidget /* xw */);
extern void ShowCursor (XtermWidget /* xw */); extern void ShowCursor (XtermWidget /* xw */);
@ -1020,7 +1134,7 @@ extern void ToggleAlternate (XtermWidget /* xw */);
extern void VTInitTranslations (void); extern void VTInitTranslations (void);
extern GCC_NORETURN void VTReset (XtermWidget /* xw */, int /* full */, int /* saved */); extern GCC_NORETURN void VTReset (XtermWidget /* xw */, int /* full */, int /* saved */);
extern void VTRun (XtermWidget /* xw */); extern void VTRun (XtermWidget /* xw */);
extern void dotext (XtermWidget /* xw */, DECNRCM_codes /* charset */, IChar * /* buf */, Cardinal /* len */); extern void dotext (XtermWidget /* xw */, DECNRCM_codes /* charset */, IChar * /* buf */, Cardinal /* len */);
extern void getKeymapResources(Widget /* w */, const char * /*mapName */, const char * /* mapClass */, const char * /* type */, void * /* result */, size_t /* size */); extern void getKeymapResources(Widget /* w */, const char * /*mapName */, const char * /* mapClass */, const char * /* type */, void * /* result */, size_t /* size */);
extern void initBorderGC (XtermWidget /* xw */, VTwin * /* win */); extern void initBorderGC (XtermWidget /* xw */, VTwin * /* win */);
extern void lookupSelectUnit(XtermWidget /* xw */, Cardinal /* item */, String /* value */); extern void lookupSelectUnit(XtermWidget /* xw */, Cardinal /* item */, String /* value */);
@ -1030,16 +1144,16 @@ extern void resetCharsets (TScreen * /* screen */);
extern void resetMargins (XtermWidget /* xw */); extern void resetMargins (XtermWidget /* xw */);
extern void restoreCharsets (TScreen * /* screen */, DECNRCM_codes * /* source */); extern void restoreCharsets (TScreen * /* screen */, DECNRCM_codes * /* source */);
extern void saveCharsets (TScreen * /* screen */, DECNRCM_codes * /* target */); extern void saveCharsets (TScreen * /* screen */, DECNRCM_codes * /* target */);
extern void set_max_col(TScreen * /* screen */, int /* cols */); extern void set_max_col(TScreen * /* screen */, int /* cols */);
extern void set_max_row(TScreen * /* screen */, int /* rows */); extern void set_max_row(TScreen * /* screen */, int /* rows */);
extern void unparse_disallowed_ops (XtermWidget /* xw */, char * /* value */); extern void unparse_disallowed_ops (XtermWidget /* xw */, char * /* value */);
extern void unparse_end (XtermWidget /* xw */); extern void unparse_end (XtermWidget /* xw */);
extern void unparseputc (XtermWidget /* xw */, int /* c */); extern void unparseputc (XtermWidget /* xw */, int /* c */);
extern void unparseputc1 (XtermWidget /* xw */, int /* c */); extern void unparseputc1 (XtermWidget /* xw */, int /* c */);
extern void unparseputn (XtermWidget /* xw */, unsigned /* n */); extern void unparseputn (XtermWidget /* xw */, unsigned /* n */);
extern void unparseputs (XtermWidget /* xw */, const char * /* s */); extern void unparseputs (XtermWidget /* xw */, const char * /* s */);
extern void unparseseq (XtermWidget /* xw */, ANSI * /* ap */); extern void unparseseq (XtermWidget /* xw */, ANSI * /* ap */);
extern void v_write (int /* f */, const Char * /* d */, size_t /* len */); extern void v_write (int /* f */, const Char * /* d */, size_t /* len */);
extern void xtermAddInput (Widget /* w */); extern void xtermAddInput (Widget /* w */);
extern void xtermDecodeSCS (XtermWidget /* xw */, int /* which */, int /* sgroup */, int /* prefix */, int /* suffix */); extern void xtermDecodeSCS (XtermWidget /* xw */, int /* which */, int /* sgroup */, int /* prefix */, int /* suffix */);
@ -1056,8 +1170,8 @@ extern TInput *lookupTInput (XtermWidget /* xw */, Widget /* w */);
#endif #endif
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
extern void SGR_Background (XtermWidget /* xw */, int /* color */); extern void SGR_Background (XtermWidget /* xw */, int /* color */);
extern void SGR_Foreground (XtermWidget /* xw */, int /* color */); extern void SGR_Foreground (XtermWidget /* xw */, int /* color */);
extern void setExtendedColors (XtermWidget /* xw */); extern void setExtendedColors (XtermWidget /* xw */);
#endif #endif
@ -1066,8 +1180,9 @@ extern void noleaks_charproc (void);
#endif #endif
/* charsets.c */ /* charsets.c */
extern unsigned xtermCharSetIn (XtermWidget /* xw */, unsigned /* code */, DECNRCM_codes /* charset */); extern unsigned xtermCharSetIn (XtermWidget /* xw */, unsigned /* code */, DECNRCM_codes /* charset */);
extern int xtermCharSetOut (XtermWidget /* xw */, IChar * /* buf */, IChar * /* ptr */, DECNRCM_codes /* charset */); extern Cardinal xtermCharSetOut (XtermWidget /* xw */, Cardinal /* length */, DECNRCM_codes /* charset */);
extern int xtermCharSetDec (XtermWidget /* xw */, IChar /* ch */, DECNRCM_codes /* cs */);
/* cursor.c */ /* cursor.c */
extern int CursorCol (XtermWidget /* xw */); extern int CursorCol (XtermWidget /* xw */);
@ -1080,17 +1195,17 @@ extern void CursorForward (XtermWidget /* xw */, int /* n */);
extern void CursorNextLine (XtermWidget /* xw */, int /* count */); extern void CursorNextLine (XtermWidget /* xw */, int /* count */);
extern void CursorPrevLine (XtermWidget /* xw */, int /* count */); extern void CursorPrevLine (XtermWidget /* xw */, int /* count */);
extern void CursorRestore2 (XtermWidget /* xw */, SavedCursor * /* sc */); extern void CursorRestore2 (XtermWidget /* xw */, SavedCursor * /* sc */);
extern void CursorRestore (XtermWidget /* xw */); extern void CursorRestore (XtermWidget /* xw */);
extern void CursorSave2 (XtermWidget /* xw */, SavedCursor * /* sc */); extern void CursorSave2 (XtermWidget /* xw */, SavedCursor * /* sc */);
extern void CursorSave (XtermWidget /* xw */); extern void CursorSave (XtermWidget /* xw */);
extern void CursorSet (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* flags */); extern void CursorSet (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* flags */);
extern void CursorUp (TScreen * /* screen */, int /* n */); extern void CursorUp (TScreen * /* screen */, int /* n */);
extern void RevIndex (XtermWidget /* xw */, int /* amount */); extern void RevIndex (XtermWidget /* xw */, int /* amount */);
extern void xtermIndex (XtermWidget /* xw */, int /* amount */); extern void xtermIndex (XtermWidget /* xw */, int /* amount */);
#if OPT_TRACE #if OPT_TRACE
extern int set_cur_col(TScreen * /* screen */, int /* value */); extern int set_cur_col(TScreen * /* screen */, int /* value */);
extern int set_cur_row(TScreen * /* screen */, int /* value */); extern int set_cur_row(TScreen * /* screen */, int /* value */);
#else #else
#define set_cur_col(screen, value) screen->cur_col = value #define set_cur_col(screen, value) screen->cur_col = value
#define set_cur_row(screen, value) \ #define set_cur_row(screen, value) \
@ -1104,11 +1219,11 @@ extern int set_cur_row(TScreen * /* screen */, int /* value */);
#endif #endif
/* cursorfont.c */ /* cursorfont.c */
extern Cursor CreateAlternateCursorFontCursor(Display * /* dpy */, char const * /* cursorfont */, unsigned int /* which */); extern Cursor CreateAlternateCursorFontCursor(Display * /* dpy */, char const * /* cursorfont */, unsigned int /* which */);
extern int CursorFontIndexFromShapeName(char const * /* shapename */); extern int CursorFontIndexFromShapeName(char const * /* shapename */);
/* doublechr.c */ /* doublechr.c */
extern void xterm_DECDHL (XtermWidget /* xw */, Bool /* top */); extern void xterm_DECDHL (XtermWidget /* xw */, Bool /* top */);
extern void xterm_DECSWL (XtermWidget /* xw */); extern void xterm_DECSWL (XtermWidget /* xw */);
extern void xterm_DECDWL (XtermWidget /* xw */); extern void xterm_DECDWL (XtermWidget /* xw */);
extern void xterm_ResetDouble(XtermWidget /* xw */); extern void xterm_ResetDouble(XtermWidget /* xw */);
@ -1125,7 +1240,7 @@ extern unsigned xtermParamToState (XtermWidget /* xw */, unsigned /* param */);
extern unsigned xtermStateToParam (XtermWidget /* xw */, unsigned /* state */); extern unsigned xtermStateToParam (XtermWidget /* xw */, unsigned /* state */);
extern Bool xtermDeleteIsDEL (XtermWidget /* xw */); extern Bool xtermDeleteIsDEL (XtermWidget /* xw */);
extern void Input (XtermWidget /* xw */, XKeyEvent */* event */, Bool /* eightbit */); extern void Input (XtermWidget /* xw */, XKeyEvent */* event */, Bool /* eightbit */);
extern void StringInput (XtermWidget /* xw */, const Char * /* string */, size_t /* nbytes */); extern void StringInput (XtermWidget /* xw */, const Char * /* string */, size_t /* nbytes */);
#if OPT_NUM_LOCK #if OPT_NUM_LOCK
extern void VTInitModifiers(XtermWidget /* xw */); extern void VTInitModifiers(XtermWidget /* xw */);
@ -1145,10 +1260,19 @@ extern void restoreCellData(TScreen * /* screen */, const CellData * /* data */,
/* main.c */ /* main.c */
#define ENVP_ARG /**/ #define ENVP_ARG /**/
extern int main (int /* argc */, char ** /* argv */ ENVP_ARG); extern int main (int /* argc */, char ** /* argv */ ENVP_ARG);
extern int GetBytesAvailable (int /* fd */); extern int xtermDisabledChar(void);
extern int kill_process_group (int /* pid */, int /* sig */); extern int GetBytesAvailable (Display * /* dpy */);
extern int kill_process_group (int /* pid */, int /* sig */);
extern int nonblocking_wait (void); extern int nonblocking_wait (void);
extern Atom CachedInternAtom(Display * /* display */, const char * /* name */);
extern int get_tty_erase(int /* fd */, int /* default_erase */, const char * /* tag */);
extern int get_tty_lnext(int /* fd */, int /* default_lnext */, const char * /* tag */);
#if (defined(VMS) || defined(__VMS))
#define GetBytesAvailable(dpy) ((dpy)->qlen > 0)
#endif
#if OPT_PTY_HANDSHAKE #if OPT_PTY_HANDSHAKE
extern void first_map_occurred (void); extern void first_map_occurred (void);
@ -1243,6 +1367,7 @@ extern void hide_tek_window (void);
extern void hide_vt_window (void); extern void hide_vt_window (void);
extern GCC_NORETURN void ice_error (IceConn /* iceConn */); extern GCC_NORETURN void ice_error (IceConn /* iceConn */);
extern void init_colored_cursor (Display * /* dpy */); extern void init_colored_cursor (Display * /* dpy */);
extern void parse_ansi_params(ANSI * /* params */, const char ** /* string */);
extern void reset_decudk (XtermWidget /* xw */); extern void reset_decudk (XtermWidget /* xw */);
extern void set_tek_visibility (Bool /* on */); extern void set_tek_visibility (Bool /* on */);
extern void set_vt_visibility (Bool /* on */); extern void set_vt_visibility (Bool /* on */);
@ -1265,6 +1390,10 @@ extern void xtermShowPointer (XtermWidget /* xw */, Bool /* enable */);
extern void xtermUnsetenv (const char * /* var */); extern void xtermUnsetenv (const char * /* var */);
extern void xtermWarning (const char * /*fmt*/,...) GCC_PRINTFLIKE(1,2); extern void xtermWarning (const char * /*fmt*/,...) GCC_PRINTFLIKE(1,2);
extern Boolean xtermPopTitle(TScreen * /* screen */, int /* which */, SaveTitle * /* item */);
extern void xtermPushTitle(TScreen * /* screen */, int /* which */, SaveTitle * /* item */);
extern void xtermFreeTitle(SaveTitle *item);
#if OPT_DABBREV #if OPT_DABBREV
extern void HandleDabbrevExpand PROTO_XT_ACTIONS_ARGS; extern void HandleDabbrevExpand PROTO_XT_ACTIONS_ARGS;
#endif #endif
@ -1298,12 +1427,12 @@ extern Boolean QueryOneColor(XtermWidget /* xw */, XColor * /* def */);
#endif #endif
#if OPT_MAXIMIZE #if OPT_MAXIMIZE
extern int QueryMaximize (XtermWidget /* xw */, unsigned * /* width */, unsigned * /* height */); extern int QueryMaximize (XtermWidget /* xw */, unsigned * /* width */, unsigned * /* height */);
extern void HandleDeIconify PROTO_XT_ACTIONS_ARGS; extern void HandleDeIconify PROTO_XT_ACTIONS_ARGS;
extern void HandleIconify PROTO_XT_ACTIONS_ARGS; extern void HandleIconify PROTO_XT_ACTIONS_ARGS;
extern void HandleMaximize PROTO_XT_ACTIONS_ARGS; extern void HandleMaximize PROTO_XT_ACTIONS_ARGS;
extern void HandleRestoreSize PROTO_XT_ACTIONS_ARGS; extern void HandleRestoreSize PROTO_XT_ACTIONS_ARGS;
extern void RequestMaximize (XtermWidget /* xw */, int /* maximize */); extern void RequestMaximize (XtermWidget /* xw */, int /* maximize */);
#endif #endif
#if OPT_REPORT_ICONS #if OPT_REPORT_ICONS
@ -1372,8 +1501,8 @@ extern PrinterFlags *getPrinterFlags (XtermWidget /* xw */, String * /* params *
extern int xtermPrinterControl (XtermWidget /* xw */, int /* chr */); extern int xtermPrinterControl (XtermWidget /* xw */, int /* chr */);
extern void setPrinterControlMode (XtermWidget /* xw */, int /* mode */); extern void setPrinterControlMode (XtermWidget /* xw */, int /* mode */);
extern void xtermAutoPrint (XtermWidget /* xw */, unsigned /* chr */); extern void xtermAutoPrint (XtermWidget /* xw */, unsigned /* chr */);
extern void xtermMediaControl (XtermWidget /* xw */, int /* param */, int /* private_seq */); extern void xtermMediaControl (XtermWidget /* xw */, int /* param */, int /* private_seq */);
extern void xtermPrintScreen (XtermWidget /* xw */, Bool /* use_DECPEX */, PrinterFlags * /* p */); extern void xtermPrintScreen (XtermWidget /* xw */, Bool /* use_DECPEX */, PrinterFlags * /* p */);
extern void xtermPrintEverything (XtermWidget /* xw */, PrinterFlags * /* p */); extern void xtermPrintEverything (XtermWidget /* xw */, PrinterFlags * /* p */);
extern void xtermPrintImmediately (XtermWidget /* xw */, String /* filename */, int /* opts */, int /* attributes */); extern void xtermPrintImmediately (XtermWidget /* xw */, String /* filename */, int /* opts */, int /* attributes */);
extern void xtermPrintOnXError (XtermWidget /* xw */, int /* n */); extern void xtermPrintOnXError (XtermWidget /* xw */, int /* n */);
@ -1395,7 +1524,7 @@ extern void xtermDumpSvg (XtermWidget /* xw */);
extern Bool decodeUtf8 (TScreen * /* screen */, PtyData * /* data */); extern Bool decodeUtf8 (TScreen * /* screen */, PtyData * /* data */);
extern int readPtyData (XtermWidget /* xw */, PtySelect * /* select_mask */, PtyData * /* data */); extern int readPtyData (XtermWidget /* xw */, PtySelect * /* select_mask */, PtyData * /* data */);
extern void fillPtyData (XtermWidget /* xw */, PtyData * /* data */, const char * /* value */, size_t /* length */); extern void fillPtyData (XtermWidget /* xw */, PtyData * /* data */, const char * /* value */, size_t /* length */);
extern void initPtyData (PtyData ** /* data */); extern void initPtyData (PtyData ** /* data */);
extern void trimPtyData (XtermWidget /* xw */, PtyData * /* data */); extern void trimPtyData (XtermWidget /* xw */, PtyData * /* data */);
@ -1405,12 +1534,12 @@ extern void noleaks_ptydata ( void );
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
extern Boolean isValidUTF8 (Char * /* lp */); extern Boolean isValidUTF8 (Char * /* lp */);
extern Char *convertToUTF8 (Char * /* lp */, unsigned /* c */); extern Char *convertToUTF8 (Char * /* lp */, unsigned /* c */);
extern Char *convertFromUTF8 (Char * /* lp */, unsigned * /* cp */); extern Char *convertFromUTF8 (Char * /* lp */, unsigned * /* cp */);
extern IChar nextPtyData (TScreen * /* screen */, PtyData * /* data */); extern IChar nextPtyData (TScreen * /* screen */, PtyData * /* data */);
extern PtyData * fakePtyData (PtyData * /* result */, Char * /* next */, Char * /* last */); extern PtyData * fakePtyData (PtyData * /* result */, Char * /* next */, Char * /* last */);
extern void switchPtyData (TScreen * /* screen */, int /* f */); extern void switchPtyData (TScreen * /* screen */, int /* f */);
extern void writePtyData (int /* f */, IChar * /* d */, size_t /* len */); extern void writePtyData (int /* f */, IChar * /* d */, size_t /* len */);
#define morePtyData(screen, data) \ #define morePtyData(screen, data) \
(((data)->last > (data)->next) \ (((data)->last > (data)->next) \
@ -1443,30 +1572,31 @@ extern void writePtyData (int /* f */, IChar * /* d */, size_t /* len */);
#define _NET_WM_STATE_ADD 1 /* add/set property */ #define _NET_WM_STATE_ADD 1 /* add/set property */
#define _NET_WM_STATE_TOGGLE 2 /* toggle property */ #define _NET_WM_STATE_TOGGLE 2 /* toggle property */
extern Bool non_blank_line (TScreen */* screen */, int /* row */, int /* col */, int /* len */); extern Bool non_blank_line (TScreen */* screen */, int /* row */, int /* col */, int /* len */);
extern Char * allocScrnData (TScreen * /* screen */, unsigned /* nrow */, unsigned /* ncol */, Bool /* bottom */); extern Char * allocScrnData (TScreen * /* screen */, unsigned /* nrow */, unsigned /* ncol */, Bool /* bottom */);
extern ScrnBuf allocScrnBuf (XtermWidget /* xw */, unsigned /* nrow */, unsigned /* ncol */, ScrnPtr * /* addr */); extern ScrnBuf allocScrnBuf (XtermWidget /* xw */, unsigned /* nrow */, unsigned /* ncol */, ScrnPtr * /* addr */);
extern ScrnBuf scrnHeadAddr (TScreen * /* screen */, ScrnBuf /* base */, unsigned /* offset */); extern ScrnBuf scrnHeadAddr (TScreen * /* screen */, ScrnBuf /* base */, unsigned /* offset */);
extern size_t ScrnPointers (TScreen * /* screen */, size_t /* len */); extern size_t ScrnPointers (TScreen * /* screen */, size_t /* len */);
extern void ClearBufRows (XtermWidget /* xw */, int /* first */, int /* last */); extern void ClearBufRows (XtermWidget /* xw */, int /* first */, int /* last */);
extern void ClearCells (XtermWidget /* xw */, int /* flags */, unsigned /* len */, int /* row */, int /* col */); extern void ClearCells (XtermWidget /* xw */, int /* flags */, unsigned /* len */, int /* row */, int /* col */);
extern void CopyCells (TScreen * /* screen */, LineData * /* src */, LineData * /* dst */, int /* col */, int /* len */, Bool /* down */); extern void CopyCells (TScreen * /* screen */, LineData * /* src */, LineData * /* dst */, int /* col */, int /* len */, Bool /* down */);
extern void FullScreen (XtermWidget /* xw */, int /* mode */); extern void FullScreen (XtermWidget /* xw */, int /* mode */);
extern void FreeMarkGCs (XtermWidget /* xw */); extern void FreeMarkGCs (XtermWidget /* xw */);
extern void ScreenResize (XtermWidget /* xw */, int /* width */, int /* height */, unsigned * /* flags */); extern void ResetHiddenHint (XtermWidget /* xw */);
extern void ScreenResize (XtermWidget /* xw */, int /* width */, int /* height */, unsigned * /* flags */);
extern void ScrnAllocBuf (XtermWidget /* xw */); extern void ScrnAllocBuf (XtermWidget /* xw */);
extern void ScrnClearCells (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */); extern void ScrnClearCells (XtermWidget /* xw */, int /* row */, int /* col */, unsigned /* len */);
extern void ScrnDeleteChar (XtermWidget /* xw */, unsigned /* n */); extern void ScrnDeleteChar (XtermWidget /* xw */, unsigned /* n */);
extern void ScrnDeleteCol (XtermWidget /* xw */, unsigned /* n */); extern void ScrnDeleteCol (XtermWidget /* xw */, unsigned /* n */);
extern void ScrnDeleteLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* n */, int /* last */, unsigned /* where */); extern void ScrnDeleteLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* n */, int /* last */, unsigned /* where */);
extern void ScrnDisownSelection (XtermWidget /* xw */); extern void ScrnDisownSelection (XtermWidget /* xw */);
extern void ScrnFillRectangle (XtermWidget /* xw */, XTermRect *, int , unsigned /* flags */, Bool /* keepColors */); extern void ScrnFillRectangle (XtermWidget /* xw */, XTermRect *, int , unsigned /* flags */, Bool /* keepColors */);
extern void ScrnInsertChar (XtermWidget /* xw */, unsigned /* n */); extern void ScrnInsertChar (XtermWidget /* xw */, unsigned /* n */);
extern void ScrnInsertCol (XtermWidget /* xw */, unsigned /* n */); extern void ScrnInsertCol (XtermWidget /* xw */, unsigned /* n */);
extern void ScrnInsertLine (XtermWidget /* xw */, ScrnBuf /* sb */, int /* last */, int /* where */, 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 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 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 */, Cardinal /* offset */, Cardinal /* length */, unsigned /* flags */, CellColor /* cur_fg_bg */);
extern void ShowWrapMarks (XtermWidget /* xw */, int /* row */, CLineData * /* ld */); extern void ShowWrapMarks (XtermWidget /* xw */, int /* row */, CLineData * /* ld */);
extern void setupLineData (TScreen * /* screen */, ScrnBuf /* base */, Char * /* data */, unsigned /* nrow */, unsigned /* ncol */, Bool /* bottom */); extern void setupLineData (TScreen * /* screen */, ScrnBuf /* base */, Char * /* data */, unsigned /* nrow */, unsigned /* ncol */, Bool /* bottom */);
extern void xtermParseRect (XtermWidget /* xw */, int, int *, XTermRect *); extern void xtermParseRect (XtermWidget /* xw */, int, int *, XTermRect *);
@ -1556,16 +1686,16 @@ extern void DoResizeScreen (XtermWidget /* xw */);
extern void HandleScrollBack PROTO_XT_ACTIONS_ARGS; extern void HandleScrollBack PROTO_XT_ACTIONS_ARGS;
extern void HandleScrollForward PROTO_XT_ACTIONS_ARGS; extern void HandleScrollForward PROTO_XT_ACTIONS_ARGS;
extern void HandleScrollTo PROTO_XT_ACTIONS_ARGS; extern void HandleScrollTo PROTO_XT_ACTIONS_ARGS;
extern void ResizeScrollBar (XtermWidget /* xw */); extern void ResizeScrollBar (XtermWidget /* xw */);
extern void ScrollBarDrawThumb (XtermWidget /* xw */, int /* mode */); extern void ScrollBarDrawThumb (XtermWidget /* xw */, int /* mode */);
extern void ScrollBarOff (XtermWidget /* xw */); extern void ScrollBarOff (XtermWidget /* xw */);
extern void ScrollBarOn (XtermWidget /* xw */, Bool /* init */); extern void ScrollBarOn (XtermWidget /* xw */, Bool /* init */);
extern void ScrollBarReverseVideo (Widget /* scrollWidget */); extern void ScrollBarReverseVideo (Widget /* scrollWidget */);
extern void ToggleScrollBar (XtermWidget /* xw */); extern void ToggleScrollBar (XtermWidget /* xw */);
extern void WindowScroll (XtermWidget /* xw */, int /* top */, Bool /* always */); extern void WindowScroll (XtermWidget /* xw */, int /* top */, Bool /* always */);
#ifdef SCROLLBAR_RIGHT #ifdef SCROLLBAR_RIGHT
extern void updateRightScrollbar(XtermWidget /* xw */); extern void updateRightScrollbar(XtermWidget /* xw */);
#else #else
#define updateRightScrollbar(xw) /* nothing */ #define updateRightScrollbar(xw) /* nothing */
#endif #endif
@ -1580,10 +1710,12 @@ extern void TabZonk (Tabs /* tabs */);
extern Bool TabIsSet (Tabs /* tabs */, int /* col */); extern Bool TabIsSet (Tabs /* tabs */, int /* col */);
/* util.c */ /* util.c */
extern Boolean AssignFgColor (XtermWidget /* xw */, Pixel /* bg */);
extern Boolean AssignBgColor (XtermWidget /* xw */, Pixel /* bg */);
extern Boolean isDefaultBackground (const char * /* name */); extern Boolean isDefaultBackground (const char * /* name */);
extern Boolean isDefaultForeground (const char * /* name */); extern Boolean isDefaultForeground (const char * /* name */);
extern CgsEnum whichXtermCgs (XtermWidget /* xw */, unsigned /* attr_flags */, Bool /* hilite */); extern CgsEnum whichXtermCgs (XtermWidget /* xw */, unsigned /* attr_flags */, Bool /* hilite */);
extern GC updatedXtermGC (XtermWidget /* xw */, unsigned /* flags */, CellColor /* fg_bg */, Bool /* hilite */); extern GC updatedXtermGC (XtermWidget /* xw */, unsigned /* flags */, CellColor /* fg_bg */, Bool /* hilite */);
extern Pixel getXtermBackground (XtermWidget /* xw */, unsigned /* flags */, int /* color */); extern Pixel getXtermBackground (XtermWidget /* xw */, unsigned /* flags */, int /* color */);
extern Pixel getXtermForeground (XtermWidget /* xw */, unsigned /* flags */, int /* color */); extern Pixel getXtermForeground (XtermWidget /* xw */, unsigned /* flags */, int /* color */);
extern char * xtermSetLocale (int /* category */, String /* after */); extern char * xtermSetLocale (int /* category */, String /* after */);
@ -1592,32 +1724,32 @@ extern int HandleExposure (XtermWidget /* xw */, XEvent * /* event */);
extern int dimRound (double /* value */); extern int dimRound (double /* value */);
extern int drawXtermText (XTermDraw * /* param */, GC /* gc */, int /* x */, int /* y */, const IChar * /* text */, Cardinal /* len */); extern int drawXtermText (XTermDraw * /* param */, GC /* gc */, int /* x */, int /* y */, const IChar * /* text */, Cardinal /* len */);
extern int extendedBoolean (const char * /* value */, const FlagList * /* table */, Cardinal /* limit */); extern int extendedBoolean (const char * /* value */, const FlagList * /* table */, Cardinal /* limit */);
extern void ChangeColors (XtermWidget /* xw */, ScrnColors * /* pNew */); extern void ChangeColors (XtermWidget /* xw */, ScrnColors * /* pNew */);
extern void ClearLine (XtermWidget /* xw */); extern void ClearLine (XtermWidget /* xw */);
extern void ClearRight (XtermWidget /* xw */, int /* n */); extern void ClearRight (XtermWidget /* xw */, int /* n */);
extern void ClearScreen (XtermWidget /* xw */); extern void ClearScreen (XtermWidget /* xw */);
extern void DeleteChar (XtermWidget /* xw */, unsigned /* n */); extern void DeleteChar (XtermWidget /* xw */, unsigned /* n */);
extern void DeleteLine (XtermWidget /* xw */, int /* n */, Bool /* canSave */); extern void DeleteLine (XtermWidget /* xw */, int /* n */, Bool /* canSave */);
extern void FlushScroll (XtermWidget /* xw */); extern void FlushScroll (XtermWidget /* xw */);
extern void GetColors (XtermWidget /* xw */, ScrnColors * /* pColors */); extern void GetColors (XtermWidget /* xw */, ScrnColors * /* pColors */);
extern void InsertChar (XtermWidget /* xw */, unsigned /* n */); extern void InsertChar (XtermWidget /* xw */, unsigned /* n */);
extern void InsertLine (XtermWidget /* xw */, int /* n */); extern void InsertLine (XtermWidget /* xw */, int /* n */);
extern void RevScroll (XtermWidget /* xw */, int /* amount */); extern void RevScroll (XtermWidget /* xw */, int /* amount */);
extern void ReverseVideo (XtermWidget /* xw */); extern void ReverseVideo (XtermWidget /* xw */);
extern void WriteText (XtermWidget /* xw */, IChar * /* str */, Cardinal /* len */); extern void WriteText (XtermWidget /* xw */, Cardinal /* offset */, Cardinal /* len */);
extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */); extern void decode_keyboard_type (XtermWidget /* xw */, struct XTERM_RESOURCE * /* rp */);
extern void decode_wcwidth (XtermWidget /* xw */); extern void decode_wcwidth (XtermWidget /* xw */);
extern void do_cd_xtra_scroll (XtermWidget /* xw */, int /* param */); extern void do_cd_xtra_scroll (XtermWidget /* xw */, int /* param */);
extern void do_erase_display (XtermWidget /* xw */, int /* param */, int /* mode */); extern void do_erase_display (XtermWidget /* xw */, int /* param */, int /* mode */);
extern void do_erase_char (XtermWidget /* xw */, int /* param */, int /* mode */); extern void do_erase_char (XtermWidget /* xw */, int /* param */, int /* mode */);
extern void do_erase_line (XtermWidget /* xw */, int /* param */, int /* mode */); extern void do_erase_line (XtermWidget /* xw */, int /* param */, int /* mode */);
extern void do_ti_xtra_scroll (XtermWidget /* xw */); extern void do_ti_xtra_scroll (XtermWidget /* xw */);
extern void getXtermSizeHints (XtermWidget /* xw */); extern void getXtermSizeHints (XtermWidget /* xw */);
extern void recolor_cursor (TScreen * /* screen */, Cursor /* cursor */, unsigned long /* fg */, unsigned long /* bg */); extern void recolor_cursor (TScreen * /* screen */, Cursor /* cursor */, unsigned long /* fg */, unsigned long /* bg */);
extern void resetXtermGC (XtermWidget /* xw */, unsigned /* flags */, Bool /* hilite */); extern void resetXtermGC (XtermWidget /* xw */, unsigned /* flags */, Bool /* hilite */);
extern void scrolling_copy_area (XtermWidget /* xw */, int /* firstline */, int /* nlines */, int /* amount */); extern void scrolling_copy_area (XtermWidget /* xw */, int /* firstline */, int /* nlines */, int /* amount */);
extern void set_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */, Bool /* set */); extern void set_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */, Bool /* set */);
extern void toggle_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */); extern void toggle_keyboard_type (XtermWidget /* xw */, xtermKeyboardType /* type */);
extern void update_keyboard_type (void); extern void update_keyboard_type (void);
extern void xtermClear (XtermWidget /* xw */); extern void xtermClear (XtermWidget /* xw */);
extern void xtermClear2 (XtermWidget /* xw */, int /* x */, int /* y */, unsigned /* width */, unsigned /* height */); extern void xtermClear2 (XtermWidget /* xw */, int /* x */, int /* y */, unsigned /* width */, unsigned /* height */);
@ -1627,7 +1759,7 @@ extern void xtermRepaint (XtermWidget /* xw */);
extern void xtermResetLocale (int /* category */, char * /* before */); extern void xtermResetLocale (int /* category */, char * /* before */);
extern void xtermScroll (XtermWidget /* xw */, int /* amount */); extern void xtermScroll (XtermWidget /* xw */, int /* amount */);
extern void xtermScrollLR (XtermWidget /* xw */, int /* amount */, Bool /* toLeft */); extern void xtermScrollLR (XtermWidget /* xw */, int /* amount */, Bool /* toLeft */);
extern void xtermSizeHints (XtermWidget /* xw */, int /* scrollbarWidth */); extern void xtermSizeHints (XtermWidget /* xw */, int /* scrollbarWidth */);
struct Xinerama_geometry { struct Xinerama_geometry {
int x; int x;
@ -1643,10 +1775,10 @@ extern int XParseXineramaGeometry(Display * /* display */, char * /* parsestring
#if OPT_ISO_COLORS #if OPT_ISO_COLORS
extern Pixel extract_fg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */); extern Pixel extract_fg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */);
extern Pixel extract_bg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */); extern Pixel extract_bg (XtermWidget /* xw */, CellColor /* color */, unsigned /* flags */);
extern CellColor makeColorPair (XtermWidget /* xw */); extern CellColor makeColorPair (XtermWidget /* xw */);
extern void ClearCurBackground (XtermWidget /* xw */, int /* top */, int /* left */, unsigned /* height */, unsigned /* width */, unsigned /* fw */); extern void ClearCurBackground (XtermWidget /* xw */, int /* top */, int /* left */, unsigned /* height */, unsigned /* width */, unsigned /* fw */);
#define xtermColorPair(xw) makeColorPair(xw) #define xtermColorPair(xw) makeColorPair(xw)
@ -1735,7 +1867,7 @@ extern void discardRenderDraw(TScreen * /* screen */);
#if OPT_ZICONBEEP #if OPT_ZICONBEEP
extern void initZIconBeep(void); extern void initZIconBeep(void);
extern void resetZIconBeep(XtermWidget /* xw */); extern void resetZIconBeep(XtermWidget /* xw */);
extern Boolean showZIconBeep(XtermWidget /* xw */, char * /* name */); extern Boolean showZIconBeep(XtermWidget /* xw */, const char * /* name */);
#else #else
#define initZIconBeep() /* nothing */ #define initZIconBeep() /* nothing */
#define resetZIconBeep(xw) /* nothing */ #define resetZIconBeep(xw) /* nothing */
@ -1744,9 +1876,9 @@ extern Boolean showZIconBeep(XtermWidget /* xw */, char * /* name */);
#define XTERM_CELL(row,col) getXtermCell(screen, ROW2INX(screen, row), col) #define XTERM_CELL(row,col) getXtermCell(screen, ROW2INX(screen, row), col)
extern unsigned getXtermCell (TScreen * /* screen */, int /* row */, int /* col */); extern unsigned getXtermCell (TScreen * /* screen */, int /* row */, int /* col */);
extern unsigned getXtermCombining(TScreen * /* screen */, int /* row */, int /* col */, int /* off */); extern unsigned getXtermCombining(TScreen * /* screen */, int /* row */, int /* col */, int /* off */);
extern void putXtermCell (TScreen * /* screen */, int /* row */, int /* col */, int /* ch */); extern void putXtermCell (TScreen * /* screen */, int /* row */, int /* col */, int /* ch */);
#define IsCellCombined(screen, row, col) (getXtermCombining(screen, row, col, 0) != 0) #define IsCellCombined(screen, row, col) (getXtermCombining(screen, row, col, 0) != 0)
@ -1763,22 +1895,28 @@ extern void putXtermCell (TScreen * /* screen */, int /* row */, int /* col */
&& (sel) != (xw)->dft_background) && (sel) != (xw)->dft_background)
#endif #endif
#define setXtermLineAttributes(dpy, gc, width, style) \
XSetLineAttributes(dpy, gc, (unsigned) width, style, CapProjecting, JoinMiter);
#define resetXtermLineAttributes(dpy, gc) \
setXtermLineAttributes(dpy, gc, 0, LineSolid);
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
extern int DamagedCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */, int /* row */, int /* col */); extern int DamagedCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */, int /* row */, int /* col */);
extern int DamagedCurCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */); extern int DamagedCurCells(TScreen * /* screen */, unsigned /* n */, int * /* klp */, int * /* krp */);
extern unsigned AsciiEquivs(unsigned /* ch */); extern unsigned AsciiEquivs(unsigned /* ch */);
extern void addXtermCombining (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* ch */); extern void addXtermCombining (TScreen * /* screen */, int /* row */, int /* col */, unsigned /* ch */);
extern void allocXtermChars(ScrnPtr * /* buffer */, Cardinal /* length */); extern void allocXtermChars(ScrnPtr * /* buffer */, Cardinal /* length */);
#endif #endif
#if OPT_XMC_GLITCH #if OPT_XMC_GLITCH
extern void Mark_XMC (XtermWidget /* xw */, int /* param */); extern void Mark_XMC (XtermWidget /* xw */, int /* param */);
extern void Jump_XMC (XtermWidget /* xw */); extern void Jump_XMC (XtermWidget /* xw */);
extern void Resolve_XMC (XtermWidget /* xw */); extern void Resolve_XMC (XtermWidget /* xw */);
#endif #endif
#if OPT_WIDE_CHARS #if OPT_WIDE_CHARS
unsigned visual_width(const IChar * /* str */, Cardinal /* len */); unsigned visual_width(const IChar * /* str */, Cardinal /* len */);
#else #else
#define visual_width(a, b) (b) #define visual_width(a, b) (b)
#endif #endif

View file

@ -2,7 +2,7 @@
***************************************************************************** *****************************************************************************
* this file is part of xterm * * this file is part of xterm *
* * * *
* Copyright 1997-2022,2023 by Thomas E. Dickey * * Copyright 1997-2023,2024 by Thomas E. Dickey *
* * * *
* All Rights Reserved * * All Rights Reserved *
* * * *
@ -30,7 +30,7 @@
* sale, use or other dealings in this Software without prior written * * sale, use or other dealings in this Software without prior written *
* authorization. * * authorization. *
***************************************************************************** *****************************************************************************
$XTermId: xterm.log.html,v 1.2478 2023/01/09 10:29:25 tom Exp $ $XTermId: xterm.log.html,v 1.2635 2024/07/11 23:37:57 tom Exp $
--> -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html> <html>
@ -50,7 +50,7 @@
<body> <body>
<hr> <hr>
<p>Copyright &copy; 1997-2022,2023 by <a href= <p>Copyright &copy; 1997-2023,2024 by <a href=
"mailto:dickey@invisible-island.net">Thomas E. Dickey</a></p> "mailto:dickey@invisible-island.net">Thomas E. Dickey</a></p>
<hr> <hr>
@ -70,6 +70,36 @@
CHANGELOG</a>).</p> CHANGELOG</a>).</p>
<ul> <ul>
<li><a href="#xterm_393">Patch #393 - 2024/07/11</a></li>
<li><a href="#xterm_392">Patch #392 - 2024/05/22</a></li>
<li><a href="#xterm_391">Patch #391 - 2024/05/12</a></li>
<li><a href="#xterm_390">Patch #390 - 2024/02/19</a></li>
<li><a href="#xterm_389">Patch #389 - 2024/01/01</a></li>
<li><a href="#xterm_388">Patch #388 - 2023/10/22</a></li>
<li><a href="#xterm_387">Patch #387 - 2023/10/15</a></li>
<li><a href="#xterm_386">Patch #386 - 2023/10/09</a></li>
<li><a href="#xterm_385">Patch #385 - 2023/10/01</a></li>
<li><a href="#xterm_384">Patch #384 - 2023/07/10</a></li>
<li><a href="#xterm_383">Patch #383 - 2023/06/27</a></li>
<li><a href="#xterm_382">Patch #382 - 2023/05/30</a></li>
<li><a href="#xterm_381">Patch #381 - 2023/05/28</a></li>
<li><a href="#xterm_380">Patch #380 - 2023/05/09</a></li>
<li><a href="#xterm_379">Patch #379 - 2023/02/15</a></li>
<li><a href="#xterm_378">Patch #378 - 2023/01/09</a></li> <li><a href="#xterm_378">Patch #378 - 2023/01/09</a></li>
<li><a href="#xterm_377">Patch #377 - 2022/11/25</a></li> <li><a href="#xterm_377">Patch #377 - 2022/11/25</a></li>
@ -1034,6 +1064,606 @@
<li><a href="#xterm_01">Patch #1 - 1996/1/6</a></li> <li><a href="#xterm_01">Patch #1 - 1996/1/6</a></li>
</ul> </ul>
<h1><a name="xterm_393" id="xterm_393">Patch #393 -
2024/07/11</a></h1>
<ul>
<li>add a check for ANSI SC/RC, to ignore CSI parameters.</li>
<li>improve check for missing characters for bitmap-fonts by
using the normal font for reference in the case where the
current font, e.g., the wide-font was derived from the normal
font and lacks per-character metrics (report by Rajeev V.
Pillai).</li>
<li>fix regression in error-recovery for SGR parameters from
<a href="#xterm_357">patch #357</a> (report by James
Holderness).</li>
<li>remove some duplicates in <tt>xtermcfg.h</tt> (report by
Matthew Green).</li>
<li>change default for <tt>--enable-imake</tt> configure
option.</li>
<li>fixes for <tt>wcwidth</tt>:
<ul>
<li>return 0 for format effectors, like a zero-width
printing character rather than -1 like a control character
(report by Rajeev V. Pillai).</li>
<li>correct <tt>doublewidth</tt> to account for reserved
codepoints which are listed in the EastAsianWidth
file.</li>
<li>add a special case for surrogate pairs, which might be
checked in testing the <tt>wcwidth</tt> function.</li>
</ul>
</li>
<li>amend sixel bounds-check added in <a href=
"#xterm_371">patch #371</a> to not wrap out-of-bounds
data.</li>
<li>eliminate <tt>maxStringParse</tt> limit for SIXEL.</li>
<li>improve logic which ignores APC, PM and SOS controls to
also not accumulate their data temporarily in a buffer.</li>
<li>exclude <tt>TERM_INGRESS</tt> from cleanup of environment
variables (patch by Iain Riley).</li>
<li>fix some documentation typos (report by Thomas Wolff).</li>
</ul>
<h1><a name="xterm_392" id="xterm_392">Patch #392 -
2024/05/22</a></h1>
<ul>
<li>improve input decoding for non-Latin1 character sets by
preserving the sense of GL/GR.</li>
<li>add resource <tt>preferLatin1</tt> to simplify UPSS
configuration (Gentoo #932154).</li>
<li>build-fix for <tt>--disable-boxchars</tt>; <a href=
"#xterm_390">patch #390</a> reuses that feature's code to draw
the part of the DEC Technical character set which has no
Unicode equivalent.</li>
<li>modify <tt>#include</tt> of <tt>pty.h</tt> to work with
musl (report by Khem Raj).</li>
<li>improve definitions used in <tt>clock_gettime</tt> logic in
<tt>graphics_sixel.c</tt>, as well as updating comments (patch
by Ben Wong).</li>
<li>amend <code>allowC1Printable</code> changes from <a href=
"#xterm_391">patch #391</a>, restoring a special case which
caused C1 characters to be ignored (report/testcase by Dmytro
Bagrii).</li>
</ul>
<h1><a name="xterm_391" id="xterm_391">Patch #391 -
2024/05/12</a></h1>
<ul>
<li>improve integration between UTF-8 and
<code>allowC1Printable</code>.</li>
<li>alter SIXEL HLS computation to make blue 0 degrees (patch
by Ben Wong).</li>
<li>disable SIXEL aspect-ratio, pending a rewrite (patch by Ben
Wong).</li>
<li>add resource <code>incrementalGraphics</code> (prompted by
patch by Ben Wong).</li>
<li>reorganize <tt>graphics_sixel.c</tt> as a step toward
eliminating graphics buffer-size (integrated patch by Ben
Wong).</li>
<li>use <code>__linux__</code> consistently rather than the
older <code>linux</code>.</li>
<li>build-fix for musl (report by Jon&aacute;&scaron; Vidra,
adapted patch by Khem Raj):
<ul>
<li>modify <code><em>ifdef</em></code> for
<code>USE_OPENPTY</code>, changing test for
<code>__GLIBC__</code> to <code>__linux__</code></li>
<li>change <code><em>ifdef</em></code>'s for
<code>_POSIX_SOURCE</code> to
<code>_POSIX_VERSION</code></li>
<li>modify <code><em>ifdef</em></code> for
<code>setsid</code> to use a configure-script check for
that function's existence and move the old check to imake
fallbacks.</li>
</ul>
</li>
<li>minor consistency fixes for manpage.</li>
<li>fix regression in <a href="#xterm_390">patch #390</a>:
non-UTF8 text pasted as a XA_UTF8_STRING was not decoded
(report by Petri Kaukasoina).</li>
</ul>
<h1><a name="xterm_390" id="xterm_390">Patch #390 -
2024/02/19</a></h1>
<ul>
<li>improve typography of control-sequences page (patches by
Branden Robinson).</li>
<li>amend UPSS change from <a href="#xterm_389">patch #389</a>,
fixing a regression in VT100/VT220 character sets.</li>
<li>modify ANSI conformance per ECMA-43 and DEC 070:
<ul>
<li>set ANSI conformance level to 3 for DEC levels 2 and
up.</li>
<li>disable locking shifts in level 1, e.g., VT100.</li>
<li>disable single-shifts from G2/G3 in level 1.</li>
<li>use UPSS for G2/G3 in levels 2 and up.</li>
</ul>
</li>
<li>modify invisible-character attribute to permit
<tt>DECRQCRA</tt> to report a consistent checksum
(report/testcase by Thomas Wolff).</li>
<li>align terminfo building blocks in terminfo to correspond to
recent refactoring/trimming in ncurses.</li>
<li>set flag in regexec call for
<code>on<em>N</em>Clicks</code> to handle
&ldquo;<tt>^</tt>&rdquo; anchor (patch by Matthew Martin).</li>
<li>add line-drawing data for the characters in <a href=
"https://www.vt100.net/charsets/technical.html"><em>DEC
Technical</em></a> which have no Unicode equivalents.</li>
<li>remove a special case in <tt>encode_scs</tt> which made
xterm report Latin-1 when encoding is set to UTF-8, where ASCII
is the selected character set. This fixes a regression in
vttest for the <tt>DECRSPS</tt> cursor test.</li>
<li>correct values for <em>Ps</em> of <tt>DECAUPSS</tt> in
<tt>ctlseqs.ms</tt> (report by James Holderness).</li>
<li>simplify/correct expression for checking Unicode
non-characters (report by Thomas Wolff).</li>
<li>correct loop for trimming environment variables
(report/patch by Casper Dik).</li>
<li>fixes for manpage formatting (Debian #1041809).</li>
<li>update config.guess, config.sub</li>
</ul>
<h1><a name="xterm_389" id="xterm_389">Patch #389 -
2024/01/01</a></h1>
<ul>
<li>interchange variables in subparameter parsing, fixing a bug
where subparameters after the first parameter could be
misidentified (patch by Adam Saponara).</li>
<li>correct popping of icon/window titles in a case where only
one was pushed from <a href="#xterm_385">patch #385</a>
changes.</li>
<li>add <tt>XTQMODKEYS</tt> response in <tt>DECRQSS</tt>, as
alternative for vim.</li>
<li>correct <tt>DECCIR</tt> encoded information on character
set size, handle a VT525 quirk, and add <tt>DECST8C</tt>
(Windows Terminal #14984).</li>
<li>improve <tt>DECRQCRA</tt> (prompted by discussion with
James Holderness, Windows Terminal #14974).</li>
<li>add part of VT525 color controls:
<ul>
<li><tt>DECAC</tt>, to update default
foreground/background, respond to <tt>DECRQSS</tt></li>
<li><tt>DECATC</tt>, to respond with <tt>DECRQSS</tt></li>
</ul>
</li>
<li>prevent Unicode non-characters from being printed (prompted
by patch by Grady Martin).</li>
<li>modify <tt>send_SGR()</tt> to avoid modifying colors 16 to
255 in printed output (patch by Grady Martin).</li>
<li>minor cleanup of miscellaneous error-codes with
<tt>ERROR_MISC</tt>.</li>
<li>remove legacy <tt><em>CSI</em> 53</tt> for locator status,
corrected in <a href="#xterm_294">patch #294</a>.</li>
<li>modify <tt>DECRQUPSS</tt> and <tt>DECAUPSS</tt> feature to
support VT5xx character sets (report by Thomas Wolff).</li>
<li>improve configure script:
<ul>
<li>reduce configure-check compiler warnings (prompted by
Florian Weimer, Redhat #2251945)</li>
<li>improve usage messages in configure script to make it
clearer when an option value is optional.</li>
</ul>
</li>
<li>improve EWMH handling (report/analysis by Edward Rosten)
<ul>
<li>reset <tt>_NET_WM_STATE_HIDDEN</tt> flag from
<tt>_NET_WM_STATE</tt> before mapping the window to
deiconify.</li>
<li>cache X properties to reduce latency (adapted from
patch by Edward Rosten).</li>
</ul>
</li>
</ul>
<h1><a name="xterm_388" id="xterm_388">Patch #388 -
2023/10/22</a></h1>
<ul>
<li>improve <tt>disallowPasteControls</tt> by adding a category
for the special characters known to <tt>stty</tt> (prompted by
discussion with David Leadbeater).</li>
<li>amend support of <tt>DECAUPSS</tt>, undoing change to
initialization of G2/G3 so that pasting of GR characters works
properly (report/analysis by Petri Kaukasoina).</li>
<li>update config.guess, config.sub</li>
</ul>
<h1><a name="xterm_387" id="xterm_387">Patch #387 -
2023/10/15</a></h1>
<ul>
<li>add <tt>DECRQUPSS</tt> and <tt>DECAUPSS</tt>.</li>
<li>add <tt>DECRQDE</tt> (report by Jake Hamby).</li>
<li>correct indexing expression in title-stack, from <a href=
"#xterm_385">patch #385</a> changes (report by Brian
Lindholm).</li>
</ul>
<h1><a name="xterm_386" id="xterm_386">Patch #386 -
2023/10/09</a></h1>
<ul>
<li>improve references in <tt>ctlseqs.ms</tt> (prompted by
discussion with Kirill Chibisov).</li>
<li>make the maximum amount of memory used for buffering DCS
and OSC strings configurable with <tt>maxStringParse</tt>
resource (report by Daniel Franke).</li>
<li>improve performance of ReGIS when initializing the largest
fontsize (report by Ben Wong).</li>
<li>fix regression in SIXEL colors, in <a href=
"#xterm_385">patch #385</a> (report/patch by Jonny
Langley).</li>
<li>fix typo in <code>--with-wtmp</code> (report/patch by Sven
Joachim)</li>
</ul>
<h1><a name="xterm_385" id="xterm_385">Patch #385 -
2023/10/01</a></h1>
<ul>
<li>fixes for ReGIS (report by Ben Wong).
<ul>
<li>correct conversion from HLS to RGB</li>
<li>improve font-caching performance.</li>
</ul>
</li>
<li>update tables in <code>wcwidth.c</code> based on Unicode
15.1.0</li>
<li>improve <code>fastScroll</code> resource:
<ul>
<li>suppress screen-refreshes for carriage-returns</li>
<li>add <code>-jf</code> option to simplify use of this
resource.</li>
<li>add a control sequence for enabling/disabling the
resource.</li>
<li>enable this feature by default</li>
</ul>
</li>
<li>extend title-stack feature to allow an additional parameter
to directly access the stack, like the
<code>XTPUSHCOLORS</code> and <code>XTPOPCOLORS</code>
feature.</li>
<li>correct size and position of box shown for double-cell
character which happens to be missing from the bitmap font
(report by Peter Fabinski).</li>
<li>improved configure script:
<ul>
<li>add pattern for uClibc-ng to <tt>CF_XOPEN_SOURCE</tt>
(report/patch by Waldemar Brodkorb).</li>
<li>add configure options <tt>--with-utmp-path</tt> and
<tt>--with-wtmp-path</tt> to override configure script's
check for utmp/wtmp pathnames which are shown in the manual
(Debian #1042767).</li>
<li><tt>CF_XOPEN_SOURCE</tt> provides for defining
<tt>_DEFAULT_SOURCE</tt> for MinGW32 and MinGW64.</li>
<li>sed expression used to report gcc version now works
with MinGW</li>
</ul>
</li>
<li>ensure that line-attributes are reset after drawing missing
character (report by Christian Weisgerber).</li>
<li>update config.guess, config.sub</li>
</ul>
<h1><a name="xterm_384" id="xterm_384">Patch #384 -
2023/07/10</a></h1>
<ul>
<li>exclude ASCII space from <code>showMissingGlyphs</code>,
since a few bitmap fonts lack this (report by "SanRemo",
Emanuel Haupt).</li>
<li>correct a step in rendering double-width characters with
bitmap-fonts (report by Peter Fabinski, Debian #1039986).</li>
<li>fixes for ReGIS-related problems (report by Ben Wong):
<ul>
<li>mimic an undocumented hardware VT340 feature which
handles color initialization with incomplete
parameters.</li>
<li>handle whitespace between operator/operands for color
values.</li>
<li>reset ReGIS-context when resetting graphics in
<tt>RIS</tt>.</li>
</ul>
</li>
</ul>
<h1><a name="xterm_383" id="xterm_383">Patch #383 -
2023/06/27</a></h1>
<ul>
<li>expand description of full- and soft-reset in the
manual.</li>
<li>fixes for full- and soft-reset:
<ul>
<li>clear alternate screen on full reset.</li>
<li>disable menu-entry for active icon; it merely shows
whether the feature is enabled.</li>
<li>use <tt>appcursorDefault</tt> and
<tt>appkeypadDefault</tt> resources for reset of
<tt>DECCKM</tt> and <tt>DECKPAM</tt>.</li>
<li>save initial resource values for
<tt>sixelScrolling</tt> and <tt>privateColorRegisters</tt>,
using those in full reset.</li>
<li>update checkbox for <em>Enable Blinking Cursor</em>
(report by Rajeev V. Pillai).</li>
</ul>
</li>
<li>add reply for <tt>DECSACE</tt> with <tt>DECRQSS</tt>.</li>
<li>modify status-line feature to exit without erasing for
<tt>DECSTR</tt>.</li>
<li>add private mode <tt>1045</tt> which imitates the original
xterm cursor-back reverse wrapping mode <tt>45</tt> (see
<a href="#xterm_380">patch #380</a>).</li>
<li>improve checks for non-Unicode values, e.g., in
<tt>DECRQCRA</tt>.</li>
<li>re-checkout from RCS archive to fix stale identifiers
(report by Sven Joachim).</li>
</ul>
<h1><a name="xterm_382" id="xterm_382">Patch #382 -
2023/05/30</a></h1>
<ul>
<li>amend change to <tt>CursorBack</tt> in <a href=
"#xterm_380">patch #380</a>, allowing the result to be on the
hidden right-half of double-cell characters (report by Rajeev
V. Pillai).</li>
<li>amend <tt>xtermDrawString</tt>, fixing regression with
<tt>--disable-wide-chars</tt> configuration from <a href=
"#xterm_380">patch #380</a>.</li>
<li>corrected pathname for <tt>run-tic.sh</tt>, for full
install in an out-of-tree build (report by Rajeev V.
Pillai).</li>
</ul>
<h1><a name="xterm_381" id="xterm_381">Patch #381 -
2023/05/28</a></h1>
<ul>
<li>fix a regression in wide bitmap fonts versus check for
missing glyphs (report by Rajeev V. Pillai).</li>
</ul>
<h1><a name="xterm_380" id="xterm_380">Patch #380 -
2023/05/09</a></h1>
<ul>
<li>simplify the change for <code>sixelScrolling</code> from
<a href="#xterm_374">patch #374</a> (report by Per
Bothner).</li>
<li>add <tt>xterm+focus</tt> and <tt>report+da2</tt>, update
<tt>report+version</tt> building blocks in terminfo, from
post-ncurses 6.4</li>
<li>drop the <tt>-title</tt> option from <tt>uxterm</tt> and
<tt>koi8rxterm</tt>, because that interferes with deriving the
default title from the <tt>-e</tt> option (Debian #1031837).
Compensate for this by using the <tt>-class</tt> option to
derive a default title.</li>
<li>improve description of readline 2003 mode in
<tt>ctlseqs.ms</tt> (report by Thomas Wolff).</li>
<li>other improvements to status-line feature (report by Thomas
Wolff):
<ul>
<li>clear status line on <tt>DECCOLM</tt></li>
<li>ignore <tt>DECSASD</tt> if no previous
<tt>DECSSDT</tt></li>
<li>allow <tt>DECSSDT&nbsp;1</tt> immediately after
<tt>DECSSDT&nbsp;2</tt>, i.e., without switching back to
host mode.</li>
</ul>
</li>
<li>adjust <tt>RequestResize</tt> to avoid shrinking screen
when using <tt>DECCOLM</tt> while the status-line is active
(report/patch by Thomas Wolff).</li>
<li>disallow wrapping before the beginning of the screen, to
the end of the screen, for cursor-back sequences (Redhat
#2182357).</li>
<li>modify makefile to install the 16x16 xpm files (report by
Harald Dunkel).</li>
<li>update test-package to reflect resolution of Debian
#906901.</li>
<li>change default of <code>showMissingGlyphs</code> to
<em>True</em>.</li>
<li>improve handling of double-sized characters when those
happen to be missing from the bitmap font and/or are
fullwidth.</li>
<li>pointer/overflow fixes (reported by David Leadbeater):
<ul>
<li>improve limit-checks for control-sequence numeric
parameters in SIXEL graphics.</li>
<li>add null-pointer checks in <tt>WriteNow</tt> macro to
handle a case where <tt>SS2</tt> or <tt>SS3</tt> might be
in effect while processing a combining character.</li>
<li>disallow ReGIS reporting for character-set names
containing characters other than alphanumerics or
underscore.</li>
<li>implement TrueType fallback font for double-sized
characters, including Unicode fullwidth. Also add
<tt>limitFontHeight</tt> to provide for configuring the
distinction between slightly-oversized glyphs and
double-sized glyphs.</li>
</ul>
</li>
<li>configure script improvements:
<ul>
<li>check for <tt>nfsd_t</tt></li>
</ul>
</li>
<li>fix a typo in the underline cursor thickness derivation
(patch by Jan Engelhardt).</li>
</ul>
<h1><a name="xterm_379" id="xterm_379">Patch #379 -
2023/02/15</a></h1>
<ul>
<li>improve text-cursor (patch by Jan Engelhardt):
<ul>
<li>allow selecting <tt>CURSOR_BAR</tt> mode from
command-line/Xresources.</li>
<li>draw cursor using filled rectangle instead of rectangle
outline to permit thicker underlines/bars.</li>
<li>scale up cursor relative to font size.</li>
</ul>
</li>
<li>improve readline modes (Fedora #2166860):
<ul>
<li>document readline modes</li>
<li>change the feature to configure by default</li>
<li>replace hard-coded SS3 for cursor movement with current
mode</li>
<li>replace hard-coded erase/lnext characters with current
values</li>
</ul>
</li>
<li>improve status-line (report by Thomas Wolff):
<ul>
<li><tt>RIS</tt> turns off status-line</li>
<li>Right-margin (<tt>DECLRMM</tt> and <tt>DECSLRM</tt>)
limits the length of text written/updated in the
status-line.</li>
<li>Most controls which affect the whole screen are ignored
while updating the status-line.</li>
</ul>
</li>
<li>modify configure check for <tt>tgetent</tt> to allow for
some special cases of ncurses configuration (report by Satadru
Pramani).</li>
<li>reduce timeout, improve warning message if resize is run on
a terminal which is not VT100-compatible.</li>
<li>reduce compiler warnings in configure script.</li>
</ul>
<h1><a name="xterm_378" id="xterm_378">Patch #378 - <h1><a name="xterm_378" id="xterm_378">Patch #378 -
2023/01/09</a></h1> 2023/01/09</a></h1>

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
/* $XTermId: xterm_io.h,v 1.67 2020/01/18 18:48:19 tom Exp $ */ /* $XTermId: xterm_io.h,v 1.69 2024/05/03 23:32:26 tom Exp $ */
/* /*
* Copyright 2000-2018,2020 by Thomas E. Dickey * Copyright 2000-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -70,7 +70,7 @@
#endif #endif
#endif #endif
#ifdef linux #ifdef __linux__
#define USE_TERMIOS #define USE_TERMIOS
#define HAVE_POSIX_OPENPT 1 #define HAVE_POSIX_OPENPT 1
#define HAVE_PTSNAME 1 #define HAVE_PTSNAME 1
@ -99,7 +99,7 @@
#define HAVE_GRANTPT_PTY_ISATTY 1 #define HAVE_GRANTPT_PTY_ISATTY 1
#endif #endif
#if defined(__GLIBC__) && !(defined(linux) || defined(__GNU__)) #if defined(__GLIBC__) && !(defined(__linux__) || defined(__GNU__))
#define USE_POSIX_TERMIOS /* GNU/KFreeBSD and GNU/KNetBSD */ #define USE_POSIX_TERMIOS /* GNU/KFreeBSD and GNU/KNetBSD */
#endif #endif
@ -203,7 +203,7 @@
#ifdef Lynx #ifdef Lynx
#include <resource.h> #include <resource.h>
#elif !(defined(SYSV) || defined(linux) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__))) #elif !(defined(SYSV) || defined(__linux__) || defined(VMS) || (defined(__QNX__)&&!defined(__QNXNTO__)))
#include <sys/resource.h> #include <sys/resource.h>
#endif #endif
@ -225,7 +225,7 @@
#include <sys/filio.h> #include <sys/filio.h>
#endif #endif
#if defined(TIOCSLTC) && ! (defined(linux) || defined(__MVS__) || defined(Lynx) || defined(SVR4)) #if defined(TIOCSLTC) && ! (defined(__linux__) || defined(__MVS__) || defined(Lynx) || defined(SVR4))
#define HAS_LTCHARS #define HAS_LTCHARS
#endif #endif
@ -284,4 +284,18 @@
typedef unsigned short ttySize_t; typedef unsigned short ttySize_t;
#ifdef USE_ANY_SYSV_TERMIO
#define TERMIO_STRUCT struct termio
#define ttySetAttr(fd, datap) ioctl(fd, TCSETA, datap)
#define ttyGetAttr(fd, datap) ioctl(fd, TCGETA, datap)
#define ttyFlush(fd) ioctl(fd, TCFLSH, 1)
#elif defined(USE_POSIX_TERMIOS)
#define TERMIO_STRUCT struct termios
#define ttySetAttr(fd, datap) tcsetattr(fd, TCSANOW, datap)
#define ttyGetAttr(fd, datap) tcgetattr(fd, datap)
#define ttyFlush(fd) tcflush(fd, TCOFLUSH)
#else
#error Neither termio or termios is enabled
#endif /* USE_ANY_SYSV_TERMIO */
#endif /* included_xterm_io_h */ #endif /* included_xterm_io_h */

View file

@ -1,4 +1,4 @@
/* $XTermId: xtermcap.c,v 1.58 2023/01/02 18:19:19 tom Exp $ */ /* $XTermId: xtermcap.c,v 1.59 2023/12/25 21:18:03 tom Exp $ */
/* /*
* Copyright 2007-2020,2023 by Thomas E. Dickey * Copyright 2007-2020,2023 by Thomas E. Dickey
@ -649,6 +649,8 @@ free_termcap(XtermWidget xw)
} }
FreeAndNull(screen->tcap_fkeys); FreeAndNull(screen->tcap_fkeys);
} }
#else
(void) xw;
#endif #endif
TcapFree(); TcapFree();
} }

View file

@ -1,7 +1,7 @@
/* $XTermId: xtermcfg.hin,v 1.225 2022/02/13 13:50:45 tom Exp $ */ /* $XTermId: xtermcfg.hin,v 1.232 2024/05/17 08:13:42 tom Exp $ */
/* /*
* Copyright 1997-2021,2022 by Thomas E. Dickey * Copyright 1997-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -43,7 +43,6 @@
* DEBUG* (any debug-option) * DEBUG* (any debug-option)
* DUMP_* (mostly in the ReGIS/SIXEL code) * DUMP_* (mostly in the ReGIS/SIXEL code)
* HAS_LTCHARS * HAS_LTCHARS
* HAVE_SYS_PTEM_H
* PUCC_PTYD * PUCC_PTYD
* USE_LOGIN_DASH_P * USE_LOGIN_DASH_P
* USE_X11TERM * USE_X11TERM
@ -65,15 +64,18 @@
#define DFT_TERMTYPE "xterm" /* AC_ARG_WITH(default-term-type) */ #define DFT_TERMTYPE "xterm" /* AC_ARG_WITH(default-term-type) */
/* #undef DISABLE_SETGID */ /* CF_ARG_DISABLE(setgid) */ /* #undef DISABLE_SETGID */ /* CF_ARG_DISABLE(setgid) */
/* #undef DISABLE_SETUID */ /* CF_ARG_DISABLE(setuid) */ /* #undef DISABLE_SETUID */ /* CF_ARG_DISABLE(setuid) */
#define HAVE_CLOCK_GETTIME /* CF_FUNC_GETTIME */
#define HAVE_ENDUSERSHELL /* AC_CHECK_FUNCS(endusershell) */ #define HAVE_ENDUSERSHELL /* AC_CHECK_FUNCS(endusershell) */
#define HAVE_GETHOSTNAME 1 /* AC_CHECK_FUNCS(gethostname) */ #define HAVE_GETHOSTNAME 1 /* AC_CHECK_FUNCS(gethostname) */
#define HAVE_GETLOGIN 1 /* AC_CHECK_FUNCS(getlogin) */ #define HAVE_GETLOGIN 1 /* AC_CHECK_FUNCS(getlogin) */
#define HAVE_GETTIMEOFDAY /* CF_FUNC_GETTIME */
#define HAVE_GETUSERSHELL /* AC_CHECK_FUNCS(getusershell) */ #define HAVE_GETUSERSHELL /* AC_CHECK_FUNCS(getusershell) */
/* #undef HAVE_GRANTPT */ /* CF_FUNC_GRANTPT */ /* #undef HAVE_GRANTPT */ /* CF_FUNC_GRANTPT */
/* #undef HAVE_GRANTPT_PTY_ISATTY */ /* CF_FUNC_GRANTPT */ /* #undef HAVE_GRANTPT_PTY_ISATTY */ /* CF_FUNC_GRANTPT */
#define HAVE_INITGROUPS 1 /* AC_CHECK_FUNCS(initgroups) */ #define HAVE_INITGROUPS 1 /* AC_CHECK_FUNCS(initgroups) */
#define HAVE_LANGINFO_CODESET 1 /* AM_LANGINFO_CODESET */ #define HAVE_LANGINFO_CODESET 1 /* AM_LANGINFO_CODESET */
/* #undef HAVE_LASTLOG_H */ /* CF_LASTLOG */ /* #undef HAVE_LASTLOG_H */ /* CF_LASTLOG */
/* #undef HAVE_LIBUTIL_H */ /* AC_CHECK_HEADERS(libutil.h) */
#define HAVE_LIBXPM /* CF_WITH_XPM */ #define HAVE_LIBXPM /* CF_WITH_XPM */
/* #undef HAVE_LIB_NEXTAW */ /* CF_X_ATHENA(--with-neXtaw) */ /* #undef HAVE_LIB_NEXTAW */ /* CF_X_ATHENA(--with-neXtaw) */
/* #undef HAVE_LIB_PCRE */ /* CF_WITH_PCRE */ /* #undef HAVE_LIB_PCRE */ /* CF_WITH_PCRE */
@ -84,23 +86,29 @@
/* #undef HAVE_LIB_XAWPLUS */ /* CF_X_ATHENA(--with-XawPlus) */ /* #undef HAVE_LIB_XAWPLUS */ /* CF_X_ATHENA(--with-XawPlus) */
#define HAVE_LIB_XCURSOR 1 /* AC_CHECK_LIB(Xcursor) */ #define HAVE_LIB_XCURSOR 1 /* AC_CHECK_LIB(Xcursor) */
#define HAVE_MKDTEMP 1 /* AC_CHECK_FUNCS(mkdtemp) */ #define HAVE_MKDTEMP 1 /* AC_CHECK_FUNCS(mkdtemp) */
#define HAVE_MKSTEMP /* CF_MKSTEMP */ #define HAVE_MKSTEMP 1 /* CF_MKSTEMP */
/* #undef HAVE_NCURSES_CURSES_H */ /* AC_CHECK_HEADERS(ncurses/curses.h) */ /* #undef HAVE_NCURSES_CURSES_H */ /* AC_CHECK_HEADERS(ncurses/curses.h) */
/* #undef HAVE_NCURSES_TERM_H */ /* AC_CHECK_HEADERS(ncurses/term.h) */ /* #undef HAVE_NCURSES_TERM_H */ /* AC_CHECK_HEADERS(ncurses/term.h) */
#define HAVE_PATHS_H 1 /* CF_LASTLOG */ #define HAVE_PATHS_H 1 /* AC_CHECK_HEADERS(paths.h) */
/* #undef HAVE_PCRE2POSIX_H */ /* CF_WITH_PCRE2 */ /* #undef HAVE_PCRE2POSIX_H */ /* CF_WITH_PCRE2 */
/* #undef HAVE_PCRE2REGCOMP */ /* CF_WITH_PCRE2 */ /* #undef HAVE_PCRE2REGCOMP */ /* CF_WITH_PCRE2 */
/* #undef HAVE_PCREPOSIX_H */ /* CF_WITH_PCRE */ /* #undef HAVE_PCREPOSIX_H */ /* CF_WITH_PCRE */
/* #undef HAVE_POSIX_OPENPT */ /* CF_FUNC_GRANTPT */ /* #undef HAVE_POSIX_OPENPT */ /* CF_FUNC_GRANTPT */
#define HAVE_POSIX_SAVED_IDS 1 /* CF_POSIX_SAVED_IDS */ #define HAVE_POSIX_SAVED_IDS 1 /* CF_POSIX_SAVED_IDS */
/* #undef HAVE_PTSNAME */ /* CF_FUNC_GRANTPT */ /* #undef HAVE_PTSNAME */ /* CF_FUNC_GRANTPT */
/* #undef HAVE_PTY_H */ /* AC_CHECK_HEADERS(pty.h) */
#define HAVE_PUTENV 1 /* AC_CHECK_FUNCS(putenv) */ #define HAVE_PUTENV 1 /* AC_CHECK_FUNCS(putenv) */
#define HAVE_SCHED_YIELD 1 /* AC_CHECK_FUNCS(sched_yield) */ #define HAVE_SCHED_YIELD 1 /* AC_CHECK_FUNCS(sched_yield) */
#define HAVE_SETITIMER 1 /* CF_SETITIMER */
#define HAVE_SETPGID /* AC_CHECK_FUNCS(setpgid) */ #define HAVE_SETPGID /* AC_CHECK_FUNCS(setpgid) */
#define HAVE_SETSID 1 /* AC_CHECK_FUNCS(setsid) */
#define HAVE_STDINT_H 1 /* AC_PROG_CC_STDC */ #define HAVE_STDINT_H 1 /* AC_PROG_CC_STDC */
#define HAVE_STDLIB_H 1 /* AC_CHECK_HEADERS(stdlib.h) */ #define HAVE_STDLIB_H 1 /* AC_CHECK_HEADERS(stdlib.h) */
#undef HAVE_STDNORETURN_H /* CF_C11_NORETURN */ #undef HAVE_STDNORETURN_H /* CF_C11_NORETURN */
#define HAVE_STRFTIME 1 /* AC_CHECK_FUNCS(strftime) */ #define HAVE_STRFTIME 1 /* AC_CHECK_FUNCS(strftime) */
/* #undef HAVE_STROPTS_H */ /* AC_CHECK_HEADERS(stropts.h) */
#define HAVE_SYS_PARAM_H 1 /* AC_CHECK_HEADERS(sys/param.h) */
/* #undef HAVE_SYS_PTEM_H */ /* AC_CHECK_HEADERS(sys/ptem.h) */
/* #undef HAVE_SYS_TIME_H */ /* AC_HEADER_TIME */ /* #undef HAVE_SYS_TIME_H */ /* AC_HEADER_TIME */
#define HAVE_SYS_TTYDEFAULTS_H 1 /* AC_CHECK_HEADERS(sys/ttydefaults.h) */ #define HAVE_SYS_TTYDEFAULTS_H 1 /* AC_CHECK_HEADERS(sys/ttydefaults.h) */
#define HAVE_SYS_WAIT_H 1 /* AC_HEADER_SYS_WAIT */ #define HAVE_SYS_WAIT_H 1 /* AC_HEADER_SYS_WAIT */
@ -113,6 +121,7 @@
#define HAVE_UNISTD_H 1 /* AC_CHECK_HEADERS(unistd.h) */ #define HAVE_UNISTD_H 1 /* AC_CHECK_HEADERS(unistd.h) */
#define HAVE_UNSETENV /* AC_CHECK_FUNCS(unsetenv) */ #define HAVE_UNSETENV /* AC_CHECK_FUNCS(unsetenv) */
#define HAVE_USE_EXTENDED_NAMES 1 /* AC_CHECK_FUNCS(use_extended_names) */ #define HAVE_USE_EXTENDED_NAMES 1 /* AC_CHECK_FUNCS(use_extended_names) */
#define HAVE_UTIL_H /* AC_CHECK_HEADERS(util.h) */
#define HAVE_UTMP 1 /* CF_UTMP */ #define HAVE_UTMP 1 /* CF_UTMP */
#define HAVE_UTMP_UT_HOST 1 /* CF_UTMP_UT_HOST */ #define HAVE_UTMP_UT_HOST 1 /* CF_UTMP_UT_HOST */
/* #undef HAVE_UTMP_UT_SESSION */ /* CF_UTMP_UT_SESSION */ /* #undef HAVE_UTMP_UT_SESSION */ /* CF_UTMP_UT_SESSION */
@ -222,6 +231,7 @@
/* #undef cc_t */ /* CF_TYPE_CC_T */ /* #undef cc_t */ /* CF_TYPE_CC_T */
/* #undef gid_t */ /* AC_TYPE_UID_T */ /* #undef gid_t */ /* AC_TYPE_UID_T */
/* #undef mode_t */ /* AC_TYPE_MODE_T */ /* #undef mode_t */ /* AC_TYPE_MODE_T */
/* +#undef nfds_t */ /* CF_TYPE_NFDS_T */
/* #undef off_t */ /* AC_TYPE_OFF_T */ /* #undef off_t */ /* AC_TYPE_OFF_T */
/* #undef pid_t */ /* AC_TYPE_PID_T */ /* #undef pid_t */ /* AC_TYPE_PID_T */
/* #undef time_t */ /* AC_CHECK_TYPE(time_t, long) */ /* #undef time_t */ /* AC_CHECK_TYPE(time_t, long) */

View file

@ -1,7 +1,7 @@
/* $XTermId: xtermcfg.hin,v 1.227 2022/09/11 19:26:01 tom Exp $ */ /* $XTermId: xtermcfg.hin,v 1.233 2024/07/05 23:37:42 tom Exp $ */
/* /*
* Copyright 1997-2021,2022 by Thomas E. Dickey * Copyright 1997-2023,2024 by Thomas E. Dickey
* *
* All Rights Reserved * All Rights Reserved
* *
@ -43,7 +43,6 @@
* DEBUG* (any debug-option) * DEBUG* (any debug-option)
* DUMP_* (mostly in the ReGIS/SIXEL code) * DUMP_* (mostly in the ReGIS/SIXEL code)
* HAS_LTCHARS * HAS_LTCHARS
* HAVE_SYS_PTEM_H
* PUCC_PTYD * PUCC_PTYD
* USE_LOGIN_DASH_P * USE_LOGIN_DASH_P
* USE_X11TERM * USE_X11TERM
@ -65,15 +64,18 @@
#undef DFT_TERMTYPE /* AC_ARG_WITH(default-term-type) */ #undef DFT_TERMTYPE /* AC_ARG_WITH(default-term-type) */
#undef DISABLE_SETGID /* CF_ARG_DISABLE(setgid) */ #undef DISABLE_SETGID /* CF_ARG_DISABLE(setgid) */
#undef DISABLE_SETUID /* CF_ARG_DISABLE(setuid) */ #undef DISABLE_SETUID /* CF_ARG_DISABLE(setuid) */
#undef HAVE_CLOCK_GETTIME /* CF_FUNC_GETTIME */
#undef HAVE_ENDUSERSHELL /* AC_CHECK_FUNCS(endusershell) */ #undef HAVE_ENDUSERSHELL /* AC_CHECK_FUNCS(endusershell) */
#undef HAVE_GETHOSTNAME /* AC_CHECK_FUNCS(gethostname) */ #undef HAVE_GETHOSTNAME /* AC_CHECK_FUNCS(gethostname) */
#undef HAVE_GETLOGIN /* AC_CHECK_FUNCS(getlogin) */ #undef HAVE_GETLOGIN /* AC_CHECK_FUNCS(getlogin) */
#undef HAVE_GETTIMEOFDAY /* CF_FUNC_GETTIME */
#undef HAVE_GETUSERSHELL /* AC_CHECK_FUNCS(getusershell) */ #undef HAVE_GETUSERSHELL /* AC_CHECK_FUNCS(getusershell) */
#undef HAVE_GRANTPT /* CF_FUNC_GRANTPT */ #undef HAVE_GRANTPT /* CF_FUNC_GRANTPT */
#undef HAVE_GRANTPT_PTY_ISATTY /* CF_FUNC_GRANTPT */ #undef HAVE_GRANTPT_PTY_ISATTY /* CF_FUNC_GRANTPT */
#undef HAVE_INITGROUPS /* AC_CHECK_FUNCS(initgroups) */ #undef HAVE_INITGROUPS /* AC_CHECK_FUNCS(initgroups) */
#undef HAVE_LANGINFO_CODESET /* AM_LANGINFO_CODESET */ #undef HAVE_LANGINFO_CODESET /* AM_LANGINFO_CODESET */
#undef HAVE_LASTLOG_H /* CF_LASTLOG */ #undef HAVE_LASTLOG_H /* CF_LASTLOG */
#undef HAVE_LIBUTIL_H /* AC_CHECK_HEADERS(libutil.h) */
#undef HAVE_LIBXPM /* CF_WITH_XPM */ #undef HAVE_LIBXPM /* CF_WITH_XPM */
#undef HAVE_LIB_NEXTAW /* CF_X_ATHENA(--with-neXtaw) */ #undef HAVE_LIB_NEXTAW /* CF_X_ATHENA(--with-neXtaw) */
#undef HAVE_LIB_PCRE /* CF_WITH_PCRE */ #undef HAVE_LIB_PCRE /* CF_WITH_PCRE */
@ -94,13 +96,19 @@
#undef HAVE_POSIX_OPENPT /* CF_FUNC_GRANTPT */ #undef HAVE_POSIX_OPENPT /* CF_FUNC_GRANTPT */
#undef HAVE_POSIX_SAVED_IDS /* CF_POSIX_SAVED_IDS */ #undef HAVE_POSIX_SAVED_IDS /* CF_POSIX_SAVED_IDS */
#undef HAVE_PTSNAME /* CF_FUNC_GRANTPT */ #undef HAVE_PTSNAME /* CF_FUNC_GRANTPT */
#undef HAVE_PTY_H /* AC_CHECK_HEADERS(pty.h) */
#undef HAVE_PUTENV /* AC_CHECK_FUNCS(putenv) */ #undef HAVE_PUTENV /* AC_CHECK_FUNCS(putenv) */
#undef HAVE_SCHED_YIELD /* AC_CHECK_FUNCS(sched_yield) */ #undef HAVE_SCHED_YIELD /* AC_CHECK_FUNCS(sched_yield) */
#undef HAVE_SETITIMER /* CF_SETITIMER */
#undef HAVE_SETPGID /* AC_CHECK_FUNCS(setpgid) */ #undef HAVE_SETPGID /* AC_CHECK_FUNCS(setpgid) */
#undef HAVE_SETSID /* AC_CHECK_FUNCS(setsid) */
#undef HAVE_STDINT_H /* AC_PROG_CC_STDC */ #undef HAVE_STDINT_H /* AC_PROG_CC_STDC */
#undef HAVE_STDLIB_H /* AC_CHECK_HEADERS(stdlib.h) */ #undef HAVE_STDLIB_H /* AC_CHECK_HEADERS(stdlib.h) */
#undef HAVE_STDNORETURN_H /* CF_C11_NORETURN */ #undef HAVE_STDNORETURN_H /* CF_C11_NORETURN */
#undef HAVE_STRFTIME /* AC_CHECK_FUNCS(strftime) */ #undef HAVE_STRFTIME /* AC_CHECK_FUNCS(strftime) */
#undef HAVE_STROPTS_H /* AC_CHECK_HEADERS(stropts.h) */
#undef HAVE_SYS_PARAM_H /* AC_CHECK_HEADERS(sys/param.h) */
#undef HAVE_SYS_PTEM_H /* AC_CHECK_HEADERS(sys/ptem.h) */
#undef HAVE_SYS_TIME_H /* AC_HEADER_TIME */ #undef HAVE_SYS_TIME_H /* AC_HEADER_TIME */
#undef HAVE_SYS_TTYDEFAULTS_H /* AC_CHECK_HEADERS(sys/ttydefaults.h) */ #undef HAVE_SYS_TTYDEFAULTS_H /* AC_CHECK_HEADERS(sys/ttydefaults.h) */
#undef HAVE_SYS_WAIT_H /* AC_HEADER_SYS_WAIT */ #undef HAVE_SYS_WAIT_H /* AC_HEADER_SYS_WAIT */
@ -113,6 +121,7 @@
#undef HAVE_UNISTD_H /* AC_CHECK_HEADERS(unistd.h) */ #undef HAVE_UNISTD_H /* AC_CHECK_HEADERS(unistd.h) */
#undef HAVE_UNSETENV /* AC_CHECK_FUNCS(unsetenv) */ #undef HAVE_UNSETENV /* AC_CHECK_FUNCS(unsetenv) */
#undef HAVE_USE_EXTENDED_NAMES /* AC_CHECK_FUNCS(use_extended_names) */ #undef HAVE_USE_EXTENDED_NAMES /* AC_CHECK_FUNCS(use_extended_names) */
#undef HAVE_UTIL_H /* AC_CHECK_HEADERS(util.h) */
#undef HAVE_UTMP /* CF_UTMP */ #undef HAVE_UTMP /* CF_UTMP */
#undef HAVE_UTMP_UT_HOST /* CF_UTMP_UT_HOST */ #undef HAVE_UTMP_UT_HOST /* CF_UTMP_UT_HOST */
#undef HAVE_UTMP_UT_SESSION /* CF_UTMP_UT_SESSION */ #undef HAVE_UTMP_UT_SESSION /* CF_UTMP_UT_SESSION */
@ -222,6 +231,7 @@
#undef cc_t /* CF_TYPE_CC_T */ #undef cc_t /* CF_TYPE_CC_T */
#undef gid_t /* AC_TYPE_UID_T */ #undef gid_t /* AC_TYPE_UID_T */
#undef mode_t /* AC_TYPE_MODE_T */ #undef mode_t /* AC_TYPE_MODE_T */
#undef nfds_t /* CF_TYPE_NFDS_T */
#undef off_t /* AC_TYPE_OFF_T */ #undef off_t /* AC_TYPE_OFF_T */
#undef pid_t /* AC_TYPE_PID_T */ #undef pid_t /* AC_TYPE_PID_T */
#undef time_t /* AC_CHECK_TYPE(time_t, long) */ #undef time_t /* AC_CHECK_TYPE(time_t, long) */

View file

@ -83,7 +83,6 @@
./usr/X11R6/include/libdrm/vmwgfx_drm.h ./usr/X11R6/include/libdrm/vmwgfx_drm.h
./usr/X11R6/include/va/va.h ./usr/X11R6/include/va/va.h
./usr/X11R6/include/va/va_backend.h ./usr/X11R6/include/va/va_backend.h
./usr/X11R6/include/va/va_backend_glx.h
./usr/X11R6/include/va/va_backend_prot.h ./usr/X11R6/include/va/va_backend_prot.h
./usr/X11R6/include/va/va_backend_vpp.h ./usr/X11R6/include/va/va_backend_vpp.h
./usr/X11R6/include/va/va_compat.h ./usr/X11R6/include/va/va_compat.h
@ -108,7 +107,6 @@
./usr/X11R6/include/va/va_fei.h ./usr/X11R6/include/va/va_fei.h
./usr/X11R6/include/va/va_fei_h264.h ./usr/X11R6/include/va/va_fei_h264.h
./usr/X11R6/include/va/va_fei_hevc.h ./usr/X11R6/include/va/va_fei_hevc.h
./usr/X11R6/include/va/va_glx.h
./usr/X11R6/include/va/va_prot.h ./usr/X11R6/include/va/va_prot.h
./usr/X11R6/include/va/va_str.h ./usr/X11R6/include/va/va_str.h
./usr/X11R6/include/va/va_tpi.h ./usr/X11R6/include/va/va_tpi.h
@ -315,7 +313,6 @@
./usr/X11R6/lib/libdrm_radeon_p.a ./usr/X11R6/lib/libdrm_radeon_p.a
./usr/X11R6/lib/libepoxy.a ./usr/X11R6/lib/libepoxy.a
./usr/X11R6/lib/libepoxy.so.4.1 ./usr/X11R6/lib/libepoxy.so.4.1
./usr/X11R6/lib/libgallium_drv_video.a
./usr/X11R6/lib/libgbm.a ./usr/X11R6/lib/libgbm.a
./usr/X11R6/lib/libgbm.so.0.6 ./usr/X11R6/lib/libgbm.so.0.6
./usr/X11R6/lib/libgbm_p.a ./usr/X11R6/lib/libgbm_p.a
@ -324,8 +321,6 @@
./usr/X11R6/lib/libglapi_p.a ./usr/X11R6/lib/libglapi_p.a
./usr/X11R6/lib/libva-drm.la ./usr/X11R6/lib/libva-drm.la
./usr/X11R6/lib/libva-drm.so.2.22 ./usr/X11R6/lib/libva-drm.so.2.22
./usr/X11R6/lib/libva-glx.la
./usr/X11R6/lib/libva-glx.so.2.22
./usr/X11R6/lib/libva-x11.la ./usr/X11R6/lib/libva-x11.la
./usr/X11R6/lib/libva-x11.so.2.22 ./usr/X11R6/lib/libva-x11.so.2.22
./usr/X11R6/lib/libva.la ./usr/X11R6/lib/libva.la
@ -349,7 +344,6 @@
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc ./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
./usr/X11R6/lib/pkgconfig/libdrm_intel.pc ./usr/X11R6/lib/pkgconfig/libdrm_intel.pc
./usr/X11R6/lib/pkgconfig/libva-drm.pc ./usr/X11R6/lib/pkgconfig/libva-drm.pc
./usr/X11R6/lib/pkgconfig/libva-glx.pc
./usr/X11R6/lib/pkgconfig/libva-x11.pc ./usr/X11R6/lib/pkgconfig/libva-x11.pc
./usr/X11R6/lib/pkgconfig/libva.pc ./usr/X11R6/lib/pkgconfig/libva.pc
./usr/X11R6/lib/pkgconfig/osmesa.pc ./usr/X11R6/lib/pkgconfig/osmesa.pc

View file

@ -78,7 +78,6 @@
./usr/X11R6/include/libdrm/vmwgfx_drm.h ./usr/X11R6/include/libdrm/vmwgfx_drm.h
./usr/X11R6/include/va/va.h ./usr/X11R6/include/va/va.h
./usr/X11R6/include/va/va_backend.h ./usr/X11R6/include/va/va_backend.h
./usr/X11R6/include/va/va_backend_glx.h
./usr/X11R6/include/va/va_backend_prot.h ./usr/X11R6/include/va/va_backend_prot.h
./usr/X11R6/include/va/va_backend_vpp.h ./usr/X11R6/include/va/va_backend_vpp.h
./usr/X11R6/include/va/va_compat.h ./usr/X11R6/include/va/va_compat.h
@ -103,7 +102,6 @@
./usr/X11R6/include/va/va_fei.h ./usr/X11R6/include/va/va_fei.h
./usr/X11R6/include/va/va_fei_h264.h ./usr/X11R6/include/va/va_fei_h264.h
./usr/X11R6/include/va/va_fei_hevc.h ./usr/X11R6/include/va/va_fei_hevc.h
./usr/X11R6/include/va/va_glx.h
./usr/X11R6/include/va/va_prot.h ./usr/X11R6/include/va/va_prot.h
./usr/X11R6/include/va/va_str.h ./usr/X11R6/include/va/va_str.h
./usr/X11R6/include/va/va_tpi.h ./usr/X11R6/include/va/va_tpi.h
@ -303,7 +301,6 @@
./usr/X11R6/lib/libdrm_radeon_p.a ./usr/X11R6/lib/libdrm_radeon_p.a
./usr/X11R6/lib/libepoxy.a ./usr/X11R6/lib/libepoxy.a
./usr/X11R6/lib/libepoxy.so.4.1 ./usr/X11R6/lib/libepoxy.so.4.1
./usr/X11R6/lib/libgallium_drv_video.a
./usr/X11R6/lib/libgbm.a ./usr/X11R6/lib/libgbm.a
./usr/X11R6/lib/libgbm.so.0.6 ./usr/X11R6/lib/libgbm.so.0.6
./usr/X11R6/lib/libgbm_p.a ./usr/X11R6/lib/libgbm_p.a
@ -312,8 +309,6 @@
./usr/X11R6/lib/libglapi_p.a ./usr/X11R6/lib/libglapi_p.a
./usr/X11R6/lib/libva-drm.la ./usr/X11R6/lib/libva-drm.la
./usr/X11R6/lib/libva-drm.so.2.22 ./usr/X11R6/lib/libva-drm.so.2.22
./usr/X11R6/lib/libva-glx.la
./usr/X11R6/lib/libva-glx.so.2.22
./usr/X11R6/lib/libva-x11.la ./usr/X11R6/lib/libva-x11.la
./usr/X11R6/lib/libva-x11.so.2.22 ./usr/X11R6/lib/libva-x11.so.2.22
./usr/X11R6/lib/libva.la ./usr/X11R6/lib/libva.la
@ -335,7 +330,6 @@
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc ./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
./usr/X11R6/lib/pkgconfig/libdrm_radeon.pc ./usr/X11R6/lib/pkgconfig/libdrm_radeon.pc
./usr/X11R6/lib/pkgconfig/libva-drm.pc ./usr/X11R6/lib/pkgconfig/libva-drm.pc
./usr/X11R6/lib/pkgconfig/libva-glx.pc
./usr/X11R6/lib/pkgconfig/libva-x11.pc ./usr/X11R6/lib/pkgconfig/libva-x11.pc
./usr/X11R6/lib/pkgconfig/libva.pc ./usr/X11R6/lib/pkgconfig/libva.pc
./usr/X11R6/lib/pkgconfig/osmesa.pc ./usr/X11R6/lib/pkgconfig/osmesa.pc

View file

@ -78,7 +78,6 @@
./usr/X11R6/include/libdrm/vmwgfx_drm.h ./usr/X11R6/include/libdrm/vmwgfx_drm.h
./usr/X11R6/include/va/va.h ./usr/X11R6/include/va/va.h
./usr/X11R6/include/va/va_backend.h ./usr/X11R6/include/va/va_backend.h
./usr/X11R6/include/va/va_backend_glx.h
./usr/X11R6/include/va/va_backend_prot.h ./usr/X11R6/include/va/va_backend_prot.h
./usr/X11R6/include/va/va_backend_vpp.h ./usr/X11R6/include/va/va_backend_vpp.h
./usr/X11R6/include/va/va_compat.h ./usr/X11R6/include/va/va_compat.h
@ -103,7 +102,6 @@
./usr/X11R6/include/va/va_fei.h ./usr/X11R6/include/va/va_fei.h
./usr/X11R6/include/va/va_fei_h264.h ./usr/X11R6/include/va/va_fei_h264.h
./usr/X11R6/include/va/va_fei_hevc.h ./usr/X11R6/include/va/va_fei_hevc.h
./usr/X11R6/include/va/va_glx.h
./usr/X11R6/include/va/va_prot.h ./usr/X11R6/include/va/va_prot.h
./usr/X11R6/include/va/va_str.h ./usr/X11R6/include/va/va_str.h
./usr/X11R6/include/va/va_tpi.h ./usr/X11R6/include/va/va_tpi.h
@ -303,7 +301,6 @@
./usr/X11R6/lib/libdrm_radeon_p.a ./usr/X11R6/lib/libdrm_radeon_p.a
./usr/X11R6/lib/libepoxy.a ./usr/X11R6/lib/libepoxy.a
./usr/X11R6/lib/libepoxy.so.4.1 ./usr/X11R6/lib/libepoxy.so.4.1
./usr/X11R6/lib/libgallium_drv_video.a
./usr/X11R6/lib/libgbm.a ./usr/X11R6/lib/libgbm.a
./usr/X11R6/lib/libgbm.so.0.6 ./usr/X11R6/lib/libgbm.so.0.6
./usr/X11R6/lib/libgbm_p.a ./usr/X11R6/lib/libgbm_p.a
@ -312,8 +309,6 @@
./usr/X11R6/lib/libglapi_p.a ./usr/X11R6/lib/libglapi_p.a
./usr/X11R6/lib/libva-drm.la ./usr/X11R6/lib/libva-drm.la
./usr/X11R6/lib/libva-drm.so.2.22 ./usr/X11R6/lib/libva-drm.so.2.22
./usr/X11R6/lib/libva-glx.la
./usr/X11R6/lib/libva-glx.so.2.22
./usr/X11R6/lib/libva-x11.la ./usr/X11R6/lib/libva-x11.la
./usr/X11R6/lib/libva-x11.so.2.22 ./usr/X11R6/lib/libva-x11.so.2.22
./usr/X11R6/lib/libva.la ./usr/X11R6/lib/libva.la
@ -334,7 +329,6 @@
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc ./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
./usr/X11R6/lib/pkgconfig/libdrm_radeon.pc ./usr/X11R6/lib/pkgconfig/libdrm_radeon.pc
./usr/X11R6/lib/pkgconfig/libva-drm.pc ./usr/X11R6/lib/pkgconfig/libva-drm.pc
./usr/X11R6/lib/pkgconfig/libva-glx.pc
./usr/X11R6/lib/pkgconfig/libva-x11.pc ./usr/X11R6/lib/pkgconfig/libva-x11.pc
./usr/X11R6/lib/pkgconfig/libva.pc ./usr/X11R6/lib/pkgconfig/libva.pc
./usr/X11R6/lib/pkgconfig/osmesa.pc ./usr/X11R6/lib/pkgconfig/osmesa.pc

View file

@ -83,7 +83,6 @@
./usr/X11R6/include/libdrm/vmwgfx_drm.h ./usr/X11R6/include/libdrm/vmwgfx_drm.h
./usr/X11R6/include/va/va.h ./usr/X11R6/include/va/va.h
./usr/X11R6/include/va/va_backend.h ./usr/X11R6/include/va/va_backend.h
./usr/X11R6/include/va/va_backend_glx.h
./usr/X11R6/include/va/va_backend_prot.h ./usr/X11R6/include/va/va_backend_prot.h
./usr/X11R6/include/va/va_backend_vpp.h ./usr/X11R6/include/va/va_backend_vpp.h
./usr/X11R6/include/va/va_compat.h ./usr/X11R6/include/va/va_compat.h
@ -108,7 +107,6 @@
./usr/X11R6/include/va/va_fei.h ./usr/X11R6/include/va/va_fei.h
./usr/X11R6/include/va/va_fei_h264.h ./usr/X11R6/include/va/va_fei_h264.h
./usr/X11R6/include/va/va_fei_hevc.h ./usr/X11R6/include/va/va_fei_hevc.h
./usr/X11R6/include/va/va_glx.h
./usr/X11R6/include/va/va_prot.h ./usr/X11R6/include/va/va_prot.h
./usr/X11R6/include/va/va_str.h ./usr/X11R6/include/va/va_str.h
./usr/X11R6/include/va/va_tpi.h ./usr/X11R6/include/va/va_tpi.h
@ -315,7 +313,6 @@
./usr/X11R6/lib/libdrm_radeon_p.a ./usr/X11R6/lib/libdrm_radeon_p.a
./usr/X11R6/lib/libepoxy.a ./usr/X11R6/lib/libepoxy.a
./usr/X11R6/lib/libepoxy.so.4.1 ./usr/X11R6/lib/libepoxy.so.4.1
./usr/X11R6/lib/libgallium_drv_video.a
./usr/X11R6/lib/libgbm.a ./usr/X11R6/lib/libgbm.a
./usr/X11R6/lib/libgbm.so.0.6 ./usr/X11R6/lib/libgbm.so.0.6
./usr/X11R6/lib/libgbm_p.a ./usr/X11R6/lib/libgbm_p.a
@ -324,8 +321,6 @@
./usr/X11R6/lib/libglapi_p.a ./usr/X11R6/lib/libglapi_p.a
./usr/X11R6/lib/libva-drm.la ./usr/X11R6/lib/libva-drm.la
./usr/X11R6/lib/libva-drm.so.2.22 ./usr/X11R6/lib/libva-drm.so.2.22
./usr/X11R6/lib/libva-glx.la
./usr/X11R6/lib/libva-glx.so.2.22
./usr/X11R6/lib/libva-x11.la ./usr/X11R6/lib/libva-x11.la
./usr/X11R6/lib/libva-x11.so.2.22 ./usr/X11R6/lib/libva-x11.so.2.22
./usr/X11R6/lib/libva.la ./usr/X11R6/lib/libva.la
@ -349,7 +344,6 @@
./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc ./usr/X11R6/lib/pkgconfig/libdrm_amdgpu.pc
./usr/X11R6/lib/pkgconfig/libdrm_intel.pc ./usr/X11R6/lib/pkgconfig/libdrm_intel.pc
./usr/X11R6/lib/pkgconfig/libva-drm.pc ./usr/X11R6/lib/pkgconfig/libva-drm.pc
./usr/X11R6/lib/pkgconfig/libva-glx.pc
./usr/X11R6/lib/pkgconfig/libva-x11.pc ./usr/X11R6/lib/pkgconfig/libva-x11.pc
./usr/X11R6/lib/pkgconfig/libva.pc ./usr/X11R6/lib/pkgconfig/libva.pc
./usr/X11R6/lib/pkgconfig/osmesa.pc ./usr/X11R6/lib/pkgconfig/osmesa.pc

View file

@ -9,7 +9,9 @@
./usr/X11R6/lib/modules/dri/kms_swrast_dri.so ./usr/X11R6/lib/modules/dri/kms_swrast_dri.so
./usr/X11R6/lib/modules/dri/r300_dri.so ./usr/X11R6/lib/modules/dri/r300_dri.so
./usr/X11R6/lib/modules/dri/r600_dri.so ./usr/X11R6/lib/modules/dri/r600_dri.so
./usr/X11R6/lib/modules/dri/r600_drv_video.so
./usr/X11R6/lib/modules/dri/radeonsi_dri.so ./usr/X11R6/lib/modules/dri/radeonsi_dri.so
./usr/X11R6/lib/modules/dri/radeonsi_drv_video.so
./usr/X11R6/lib/modules/dri/swrast_dri.so ./usr/X11R6/lib/modules/dri/swrast_dri.so
./usr/X11R6/lib/modules/drivers/amdgpu_drv.la ./usr/X11R6/lib/modules/drivers/amdgpu_drv.la
./usr/X11R6/lib/modules/drivers/amdgpu_drv.so ./usr/X11R6/lib/modules/drivers/amdgpu_drv.so
@ -41,10 +43,8 @@
./usr/X11R6/lib/modules/drivers/openchrome_drv.so ./usr/X11R6/lib/modules/drivers/openchrome_drv.so
./usr/X11R6/lib/modules/drivers/r128_drv.la ./usr/X11R6/lib/modules/drivers/r128_drv.la
./usr/X11R6/lib/modules/drivers/r128_drv.so ./usr/X11R6/lib/modules/drivers/r128_drv.so
./usr/X11R6/lib/modules/drivers/r600_drv_video.so
./usr/X11R6/lib/modules/drivers/radeon_drv.la ./usr/X11R6/lib/modules/drivers/radeon_drv.la
./usr/X11R6/lib/modules/drivers/radeon_drv.so ./usr/X11R6/lib/modules/drivers/radeon_drv.so
./usr/X11R6/lib/modules/drivers/radeonsi_drv_video.so
./usr/X11R6/lib/modules/drivers/savage_drv.la ./usr/X11R6/lib/modules/drivers/savage_drv.la
./usr/X11R6/lib/modules/drivers/savage_drv.so ./usr/X11R6/lib/modules/drivers/savage_drv.so
./usr/X11R6/lib/modules/drivers/siliconmotion_drv.la ./usr/X11R6/lib/modules/drivers/siliconmotion_drv.la

View file

@ -6,7 +6,9 @@
./usr/X11R6/lib/modules/dri/kms_swrast_dri.so ./usr/X11R6/lib/modules/dri/kms_swrast_dri.so
./usr/X11R6/lib/modules/dri/r300_dri.so ./usr/X11R6/lib/modules/dri/r300_dri.so
./usr/X11R6/lib/modules/dri/r600_dri.so ./usr/X11R6/lib/modules/dri/r600_dri.so
./usr/X11R6/lib/modules/dri/r600_drv_video.so
./usr/X11R6/lib/modules/dri/radeonsi_dri.so ./usr/X11R6/lib/modules/dri/radeonsi_dri.so
./usr/X11R6/lib/modules/dri/radeonsi_drv_video.so
./usr/X11R6/lib/modules/dri/swrast_dri.so ./usr/X11R6/lib/modules/dri/swrast_dri.so
./usr/X11R6/lib/modules/drivers/amdgpu_drv.la ./usr/X11R6/lib/modules/drivers/amdgpu_drv.la
./usr/X11R6/lib/modules/drivers/amdgpu_drv.so ./usr/X11R6/lib/modules/drivers/amdgpu_drv.so
@ -14,10 +16,8 @@
./usr/X11R6/lib/modules/drivers/ati_drv.so ./usr/X11R6/lib/modules/drivers/ati_drv.so
./usr/X11R6/lib/modules/drivers/modesetting_drv.la ./usr/X11R6/lib/modules/drivers/modesetting_drv.la
./usr/X11R6/lib/modules/drivers/modesetting_drv.so ./usr/X11R6/lib/modules/drivers/modesetting_drv.so
./usr/X11R6/lib/modules/drivers/r600_drv_video.so
./usr/X11R6/lib/modules/drivers/radeon_drv.la ./usr/X11R6/lib/modules/drivers/radeon_drv.la
./usr/X11R6/lib/modules/drivers/radeon_drv.so ./usr/X11R6/lib/modules/drivers/radeon_drv.so
./usr/X11R6/lib/modules/drivers/radeonsi_drv_video.so
./usr/X11R6/lib/modules/drivers/wsfb_drv.la ./usr/X11R6/lib/modules/drivers/wsfb_drv.la
./usr/X11R6/lib/modules/drivers/wsfb_drv.so ./usr/X11R6/lib/modules/drivers/wsfb_drv.so
./usr/X11R6/lib/modules/drivers/wsudl_drv.la ./usr/X11R6/lib/modules/drivers/wsudl_drv.la

View file

@ -9,7 +9,9 @@
./usr/X11R6/lib/modules/dri/kms_swrast_dri.so ./usr/X11R6/lib/modules/dri/kms_swrast_dri.so
./usr/X11R6/lib/modules/dri/r300_dri.so ./usr/X11R6/lib/modules/dri/r300_dri.so
./usr/X11R6/lib/modules/dri/r600_dri.so ./usr/X11R6/lib/modules/dri/r600_dri.so
./usr/X11R6/lib/modules/dri/r600_drv_video.so
./usr/X11R6/lib/modules/dri/radeonsi_dri.so ./usr/X11R6/lib/modules/dri/radeonsi_dri.so
./usr/X11R6/lib/modules/dri/radeonsi_drv_video.so
./usr/X11R6/lib/modules/dri/swrast_dri.so ./usr/X11R6/lib/modules/dri/swrast_dri.so
./usr/X11R6/lib/modules/drivers/amdgpu_drv.la ./usr/X11R6/lib/modules/drivers/amdgpu_drv.la
./usr/X11R6/lib/modules/drivers/amdgpu_drv.so ./usr/X11R6/lib/modules/drivers/amdgpu_drv.so
@ -43,10 +45,8 @@
./usr/X11R6/lib/modules/drivers/openchrome_drv.so ./usr/X11R6/lib/modules/drivers/openchrome_drv.so
./usr/X11R6/lib/modules/drivers/r128_drv.la ./usr/X11R6/lib/modules/drivers/r128_drv.la
./usr/X11R6/lib/modules/drivers/r128_drv.so ./usr/X11R6/lib/modules/drivers/r128_drv.so
./usr/X11R6/lib/modules/drivers/r600_drv_video.so
./usr/X11R6/lib/modules/drivers/radeon_drv.la ./usr/X11R6/lib/modules/drivers/radeon_drv.la
./usr/X11R6/lib/modules/drivers/radeon_drv.so ./usr/X11R6/lib/modules/drivers/radeon_drv.so
./usr/X11R6/lib/modules/drivers/radeonsi_drv_video.so
./usr/X11R6/lib/modules/drivers/savage_drv.la ./usr/X11R6/lib/modules/drivers/savage_drv.la
./usr/X11R6/lib/modules/drivers/savage_drv.so ./usr/X11R6/lib/modules/drivers/savage_drv.so
./usr/X11R6/lib/modules/drivers/siliconmotion_drv.la ./usr/X11R6/lib/modules/drivers/siliconmotion_drv.la

View file

@ -1,12 +1,13 @@
# $OpenBSD: Makefile.bsd-wrapper,v 1.1 2024/07/19 14:35:16 rsadowski Exp $ # $OpenBSD: Makefile.bsd-wrapper,v 1.4 2024/07/25 19:40:55 matthieu Exp $
SHARED_LIBS += va-drm 2.22 SHARED_LIBS += va-drm 2.22
SHARED_LIBS += va-glx 2.22
SHARED_LIBS += va-x11 2.22 SHARED_LIBS += va-x11 2.22
SHARED_LIBS += va 2.22 SHARED_LIBS += va 2.22
CONFIGURE_ARGS= --disable-wayland LOCALBASE ?= /usr/local
CONFIGURE_ARGS= --disable-wayland --disable-glx
CONFIGURE_ARGS+= \ CONFIGURE_ARGS+= \
--with-drivers-path=${DESTDIR}${X11BASE}/lib/modules/drivers/ --with-drivers-path=${DESTDIR}${X11BASE}/lib/modules/dri:${LOCALBASE}/lib/dri
.include <bsd.xorg.mk> .include <bsd.xorg.mk>

View file

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.10 2024/07/21 13:30:50 jsg Exp $ # $OpenBSD: Makefile,v 1.12 2024/07/25 06:54:05 jsg Exp $
.include "config.mk" .include "config.mk"
@ -39,7 +39,6 @@ SUBDIR+= libisl_gfx${GFX}
.if ${WITH_GALLIUM_R300} == "yes" || ${WITH_GALLIUM_R600} == "yes" || \ .if ${WITH_GALLIUM_R300} == "yes" || ${WITH_GALLIUM_R600} == "yes" || \
${WITH_GALLIUM_RADEONSI} == "yes" || make(obj) ${WITH_GALLIUM_RADEONSI} == "yes" || make(obj)
SUBDIR+= libva_st
SUBDIR+= libradeonwinsys SUBDIR+= libradeonwinsys
.endif .endif
@ -102,8 +101,8 @@ SUBDIR+= libglapi libgbm libEGL libGL libGLESv1_CM libGLESv2 libOSMesa
SUBDIR+= libgallium_dri SUBDIR+= libgallium_dri
.if ${WITH_VAAPI} == "yes" || make(obj) .if ${WITH_GALLIUM_VA} == "yes" || make(obj)
SUBDIR+= libgallium_drv_video SUBDIR+= libva_st libgallium_drv_video
.endif .endif
.include <bsd.subdir.mk> .include <bsd.subdir.mk>

View file

@ -197,7 +197,7 @@ WITH_GALLIUM_IRIS=no
WITH_AMD_VK=no WITH_AMD_VK=no
WITH_INTEL_VK=no WITH_INTEL_VK=no
WITH_SSE41=no WITH_SSE41=no
WITH_VAAPI=no WITH_GALLIUM_VA=no
WITH_DRI=yes WITH_DRI=yes
WITH_GALLIUM_DRISW_KMS=yes WITH_GALLIUM_DRISW_KMS=yes
@ -225,14 +225,12 @@ WITH_SSE41=yes
${MACHINE} == "sparc64" ${MACHINE} == "sparc64"
WITH_GALLIUM_R300=yes WITH_GALLIUM_R300=yes
WITH_GALLIUM_R600=yes WITH_GALLIUM_R600=yes
WITH_VAAPI=yes
CPPFLAGS+= -DHAVE_R300 -DHAVE_R600 CPPFLAGS+= -DHAVE_R300 -DHAVE_R600
.endif .endif
.if ${MACHINE} == "amd64" || ${MACHINE} == "arm64" || ${MACHINE} == "i386" || \ .if ${MACHINE} == "amd64" || ${MACHINE} == "arm64" || ${MACHINE} == "i386" || \
${MACHINE} == "powerpc64" || ${MACHINE} == "riscv64" ${MACHINE} == "powerpc64" || ${MACHINE} == "riscv64"
WITH_GALLIUM_RADEONSI=yes WITH_GALLIUM_RADEONSI=yes
WITH_VAAPI=yes
WITH_AMD_VK=yes WITH_AMD_VK=yes
CPPFLAGS+= -DHAVE_RADEONSI CPPFLAGS+= -DHAVE_RADEONSI
.endif .endif
@ -245,3 +243,8 @@ WITH_INTEL_VK=yes
CPPFLAGS+= -DHAVE_I915 -DHAVE_CROCUS -DHAVE_IRIS \ CPPFLAGS+= -DHAVE_I915 -DHAVE_CROCUS -DHAVE_IRIS \
-DSUPPORT_INTEL_INTEGRATED_GPUS -DSUPPORT_INTEL_INTEGRATED_GPUS
.endif .endif
.if ${WITH_GALLIUM_R600} == "yes" || ${WITH_GALLIUM_RADEONSI} == "yes"
WITH_GALLIUM_VA=yes
CPPFLAGS+= -DHAVE_VA_SURFACE_ATTRIB_DRM_FORMAT_MODIFIERS
.endif

View file

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.2 2024/07/21 13:30:50 jsg Exp $ # $OpenBSD: Makefile,v 1.4 2024/07/25 00:18:21 jsg Exp $
LIB= gallium_drv_video LIB= gallium_drv_video
@ -22,11 +22,6 @@ CPPFLAGS+= -I${MESA_SRC}/src/gallium/include \
-I${MESA_SRC}/generated/src/gallium/drivers \ -I${MESA_SRC}/generated/src/gallium/drivers \
-DGALLIUM_SOFTPIPE -DGALLIUM_SOFTPIPE
obj: _xenocara_obj
.include <bsd.lib.mk>
.include <bsd.xorg.mk>
.if ${WITH_GALLIUM_R600} == "yes" .if ${WITH_GALLIUM_R600} == "yes"
GALLIUM_DRIVERS+= r600 GALLIUM_DRIVERS+= r600
CPPFLAGS+= -DGALLIUM_R600 CPPFLAGS+= -DGALLIUM_R600
@ -42,11 +37,19 @@ CPPFLAGS+= -DGALLIUM_LLVMPIPE
.endif .endif
install: install:
.for driver in ${GALLIUM_DRIVERS}
${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \ ${INSTALL} ${INSTALL_COPY} ${INSTALL_STRIP} \
-o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \
lib${LIB}.so ${DESTDIR}${X11BASE}/lib/modules/drivers/${driver}_drv_video.so lib${LIB}.so ${DESTDIR}${X11BASE}/lib/modules/dri
.for driver in ${GALLIUM_DRIVERS}
ln -f ${DESTDIR}${X11BASE}/lib/modules/dri/lib${LIB}.so \
${DESTDIR}${X11BASE}/lib/modules/dri/${driver}_drv_video.so
.endfor .endfor
rm ${DESTDIR}${X11BASE}/lib/modules/dri/lib${LIB}.so
obj: _xenocara_obj
.include <bsd.lib.mk>
.include <bsd.xorg.mk>
SLIBS+= libdri \ SLIBS+= libdri \
libmesa \ libmesa \

View file

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.1 2024/07/19 14:40:39 rsadowski Exp $ # $OpenBSD: Makefile,v 1.2 2024/07/23 08:22:36 jsg Exp $
.include <bsd.xconf.mk> .include <bsd.xconf.mk>
@ -32,9 +32,9 @@ SRCS= buffer.c \
CFLAGS+= ${C_VIS_ARGS} CFLAGS+= ${C_VIS_ARGS}
CXXFLAGS+= ${CXX_VIS_ARGS} CXXFLAGS+= ${CXX_VIS_ARGS}
# XXX keep in sync with libva VA_INIT!= pkg-config --modversion libva \
CFLAGS += -DVA_DRIVER_INIT_FUNC=__vaDriverInit_1_22 | awk -F. '{printf "__vaDriverInit_%d_%d\n", $$1, $$2}'
CPPFLAGS += -DVA_DRIVER_INIT_FUNC=__vaDriverInit_1_22 CPPFLAGS+= -DVA_DRIVER_INIT_FUNC=${VA_INIT}
CPPFLAGS+= -I${MESA_SRC}/src/gallium/frontends/va \ CPPFLAGS+= -I${MESA_SRC}/src/gallium/frontends/va \
-I${MESA_SRC}/src/gallium/include \ -I${MESA_SRC}/src/gallium/include \

View file

@ -299,17 +299,12 @@ LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_library_inf
*/ */
unwrap(passmgr)->add(createBarrierNoopPass()); unwrap(passmgr)->add(createBarrierNoopPass());
/* This pass eliminates all loads and stores on alloca'd pointers. */
unwrap(passmgr)->add(createPromoteMemoryToRegisterPass());
#if LLVM_VERSION_MAJOR >= 16 #if LLVM_VERSION_MAJOR >= 16
unwrap(passmgr)->add(createSROAPass(true)); unwrap(passmgr)->add(createSROAPass(true));
#else #else
unwrap(passmgr)->add(createSROAPass()); unwrap(passmgr)->add(createSROAPass());
#endif #endif
/* TODO: restore IPSCCP */ /* TODO: restore IPSCCP */
if (LLVM_VERSION_MAJOR >= 16)
unwrap(passmgr)->add(createLoopSinkPass());
/* TODO: restore IPSCCP */
unwrap(passmgr)->add(createLICMPass()); unwrap(passmgr)->add(createLICMPass());
unwrap(passmgr)->add(createCFGSimplificationPass()); unwrap(passmgr)->add(createCFGSimplificationPass());
/* This is recommended by the instruction combining pass. */ /* This is recommended by the instruction combining pass. */

View file

@ -613,7 +613,11 @@ gallivm_compile_module(struct gallivm_state *gallivm)
LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts); LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts);
if (!(gallivm_perf & GALLIVM_PERF_NO_OPT)) if (!(gallivm_perf & GALLIVM_PERF_NO_OPT))
#if LLVM_VERSION_MAJOR >= 18
strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine<no-verify-fixpoint>");
#else
strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine"); strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine");
#endif
else else
strcpy(passes, "mem2reg"); strcpy(passes, "mem2reg");