v09i034: colxterm -- Color xterm, Part04/14
Tom Weinstein
tomw at orac.esd.sgi.com
Fri Sep 14 13:50:00 AEST 1990
Submitted-by: Tom Weinstein <tomw at orac.esd.sgi.com>
Posting-number: Volume 9, Issue 34
Archive-name: colxterm/part04
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix at uunet.uu.net if you want that tool.
# If this archive is complete, you will see the following message at the end:
# "End of archive 4 (of 14)."
# Contents: xterm/VTPrsTbl.c.ac xterm/util.c
# Wrapped by argv at turnpike on Thu Sep 13 20:42:19 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'xterm/VTPrsTbl.c.ac' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'xterm/VTPrsTbl.c.ac'\"
else
echo shar: Extracting \"'xterm/VTPrsTbl.c.ac'\" \(21319 characters\)
sed "s/^X//" >'xterm/VTPrsTbl.c.ac' <<'END_OF_FILE'
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* DLE DC1 DC2 DC3 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* DC4 NAK SYN ETB */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* CAN EM SUB ESC */
XCASE_GROUND_STATE,
XCASE_IGNORE,
XCASE_GROUND_STATE,
XCASE_IGNORE_ESC,
X/* FS GS RS US */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* SP ! " # */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* $ % & ' */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* ( ) * + */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* , - . / */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0 1 2 3 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 4 5 6 7 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 8 9 : ; */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* < = > ? */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* @ A B C */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* D E F G */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* H I J K */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* L M N O */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* P Q R S */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* T U V W */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* X Y Z [ */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* \ ] ^ _ */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* ` a b c */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* d e f g */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* h i j k */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* l m n o */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* p q r s */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* t u v w */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* x y z { */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* | } ~ DEL */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x80 0x81 0x82 0x83 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x84 0x85 0x86 0x87 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x88 0x89 0x8a 0x8b */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x8c 0x8d 0x8e 0x8f */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x90 0x91 0x92 0x93 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x94 0x95 0x96 0x97 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x99 0x99 0x9a 0x9b */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x9c 0x9d 0x9e 0x9f */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* nobreakspace exclamdown cent sterling */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* currency yen brokenbar section */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* diaeresis copyright ordfeminine guillemotleft */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* notsign hyphen registered macron */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* degree plusminus twosuperior threesuperior */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* acute mu paragraph periodcentered */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* cedilla onesuperior masculine guillemotright */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* onequarter onehalf threequarters questiondown */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Agrave Aacute Acircumflex Atilde */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Adiaeresis Aring AE Ccedilla */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Egrave Eacute Ecircumflex Ediaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Igrave Iacute Icircumflex Idiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Eth Ntilde Ograve Oacute */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Ocircumflex Otilde Odiaeresis multiply */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Ooblique Ugrave Uacute Ucircumflex */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Udiaeresis Yacute Thorn ssharp */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* agrave aacute acircumflex atilde */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* adiaeresis aring ae ccedilla */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* egrave eacute ecircumflex ediaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* igrave iacute icircumflex idiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* eth ntilde ograve oacute */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* ocircumflex otilde odiaeresis division */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* oslash ugrave uacute ucircumflex */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* udiaeresis yacute thorn ydiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X};
X
Xint scrtable[] = {
X/* NUL SOH STX ETX */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* EOT ENQ ACK BEL */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_BELL,
X/* BS HT NL VT */
XCASE_BS,
XCASE_TAB,
XCASE_VMOT,
XCASE_VMOT,
X/* NP CR SO SI */
XCASE_VMOT,
XCASE_CR,
XCASE_SO,
XCASE_SI,
X/* DLE DC1 DC2 DC3 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* DC4 NAK SYN ETB */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* CAN EM SUB ESC */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_ESC,
X/* FS GS RS US */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* SP ! " # */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* $ % & ' */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* ( ) * + */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* , - . / */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* 0 1 2 3 */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* 4 5 6 7 */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* 8 9 : ; */
XCASE_DECALN,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* < = > ? */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* @ A B C */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* D E F G */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* H I J K */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* L M N O */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* P Q R S */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* T U V W */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* X Y Z [ */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* \ ] ^ _ */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* ` a b c */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* d e f g */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* h i j k */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* l m n o */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* p q r s */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* t u v w */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* x y z { */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* | } ~ DEL */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* 0x80 0x81 0x82 0x83 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x84 0x85 0x86 0x87 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x88 0x89 0x8a 0x8b */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x8c 0x8d 0x8e 0x8f */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x90 0x91 0x92 0x93 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x94 0x95 0x96 0x97 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x99 0x99 0x9a 0x9b */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x9c 0x9d 0x9e 0x9f */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* nobreakspace exclamdown cent sterling */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* currency yen brokenbar section */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* diaeresis copyright ordfeminine guillemotleft */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* notsign hyphen registered macron */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* degree plusminus twosuperior threesuperior */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* acute mu paragraph periodcentered */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* cedilla onesuperior masculine guillemotright */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* onequarter onehalf threequarters questiondown */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Agrave Aacute Acircumflex Atilde */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Adiaeresis Aring AE Ccedilla */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Egrave Eacute Ecircumflex Ediaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Igrave Iacute Icircumflex Idiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Eth Ntilde Ograve Oacute */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Ocircumflex Otilde Odiaeresis multiply */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Ooblique Ugrave Uacute Ucircumflex */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Udiaeresis Yacute Thorn ssharp */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* agrave aacute acircumflex atilde */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* adiaeresis aring ae ccedilla */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* egrave eacute ecircumflex ediaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* igrave iacute icircumflex idiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* eth ntilde ograve oacute */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* ocircumflex otilde odiaeresis division */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* oslash ugrave uacute ucircumflex */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* udiaeresis yacute thorn ydiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X};
X
Xint scstable[] = {
X/* NUL SOH STX ETX */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* EOT ENQ ACK BEL */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_BELL,
X/* BS HT NL VT */
XCASE_BS,
XCASE_TAB,
XCASE_VMOT,
XCASE_VMOT,
X/* NP CR SO SI */
XCASE_VMOT,
XCASE_CR,
XCASE_SO,
XCASE_SI,
X/* DLE DC1 DC2 DC3 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* DC4 NAK SYN ETB */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* CAN EM SUB ESC */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_ESC,
X/* FS GS RS US */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* SP ! " # */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* $ % & ' */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* ( ) * + */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* , - . / */
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
XCASE_ESC_IGNORE,
X/* 0 1 2 3 */
XCASE_GSETS,
XCASE_GSETS,
XCASE_GSETS,
XCASE_GROUND_STATE,
X/* 4 5 6 7 */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* 8 9 : ; */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* < = > ? */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* @ A B C */
XCASE_GROUND_STATE,
XCASE_GSETS,
XCASE_GSETS,
XCASE_GROUND_STATE,
X/* D E F G */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* H I J K */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* L M N O */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* P Q R S */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* T U V W */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* X Y Z [ */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* \ ] ^ _ */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* ` a b c */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* d e f g */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* h i j k */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* l m n o */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* p q r s */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* t u v w */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* x y z { */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* | } ~ DEL */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* 0x80 0x81 0x82 0x83 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x84 0x85 0x86 0x87 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x88 0x89 0x8a 0x8b */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x8c 0x8d 0x8e 0x8f */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x90 0x91 0x92 0x93 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x94 0x95 0x96 0x97 */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x99 0x99 0x9a 0x9b */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* 0x9c 0x9d 0x9e 0x9f */
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
XCASE_IGNORE,
X/* nobreakspace exclamdown cent sterling */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* currency yen brokenbar section */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* diaeresis copyright ordfeminine guillemotleft */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* notsign hyphen registered macron */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* degree plusminus twosuperior threesuperior */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* acute mu paragraph periodcentered */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* cedilla onesuperior masculine guillemotright */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* onequarter onehalf threequarters questiondown */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Agrave Aacute Acircumflex Atilde */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Adiaeresis Aring AE Ccedilla */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Egrave Eacute Ecircumflex Ediaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Igrave Iacute Icircumflex Idiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Eth Ntilde Ograve Oacute */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Ocircumflex Otilde Odiaeresis multiply */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Ooblique Ugrave Uacute Ucircumflex */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* Udiaeresis Yacute Thorn ssharp */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* agrave aacute acircumflex atilde */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* adiaeresis aring ae ccedilla */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* egrave eacute ecircumflex ediaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* igrave iacute icircumflex idiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* eth ntilde ograve oacute */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* ocircumflex otilde odiaeresis division */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* oslash ugrave uacute ucircumflex */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X/* udiaeresis yacute thorn ydiaeresis */
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
XCASE_GROUND_STATE,
X};
END_OF_FILE
if test 21319 -ne `wc -c <'xterm/VTPrsTbl.c.ac'`; then
echo shar: \"'xterm/VTPrsTbl.c.ac'\" unpacked with wrong size!
fi
# end of 'xterm/VTPrsTbl.c.ac'
fi
if test -f 'xterm/util.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'xterm/util.c'\"
else
echo shar: Extracting \"'xterm/util.c'\" \(31028 characters\)
sed "s/^X//" >'xterm/util.c' <<'END_OF_FILE'
X/*
X * $XConsortium: util.c,v 1.20 90/03/14 17:04:59 jim Exp $
X */
X
X#include <X11/copyright.h>
X
X/*
X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
X *
X * All Rights Reserved
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted,
X * provided that the above copyright notice appear in all copies and that
X * both that copyright notice and this permission notice appear in
X * supporting documentation, and that the name of Digital Equipment
X * Corporation not be used in advertising or publicity pertaining to
X * distribution of the software without specific, written prior permission.
X *
X *
X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
X * SOFTWARE.
X */
X
X/* util.c */
X
X#ifndef lint
Xstatic char rcs_id[] = "$XConsortium: util.c,v 1.20 90/03/14 17:04:59 jim Exp $";
X#endif /* lint */
X
X#include <stdio.h>
X#include <X11/Intrinsic.h>
X#include <setjmp.h>
Xtypedef int *jmp_ptr;
X
X#include "ptyx.h"
X#include "data.h"
X#include "error.h"
X#include "menu.h"
X
X/*
X * These routines are used for the jump scroll feature
X */
XFlushScroll(screen)
Xregister TScreen *screen;
X{
X register int i;
X register int shift = -screen->topline;
X register int bot = screen->max_row - shift;
X register int refreshtop;
X register int refreshheight;
X register int scrolltop;
X register int scrollheight;
X
X if(screen->cursor_state)
X HideCursor();
X if(screen->scroll_amt > 0) {
X refreshheight = screen->refresh_amt;
X scrollheight = screen->bot_marg - screen->top_marg -
X refreshheight + 1;
X if((refreshtop = screen->bot_marg - refreshheight + 1 + shift) >
X (i = screen->max_row - screen->scroll_amt + 1))
X refreshtop = i;
X if(screen->scrollWidget && !screen->alternate
X && screen->top_marg == 0) {
X scrolltop = 0;
X if((scrollheight += shift) > i)
X scrollheight = i;
X if((i = screen->bot_marg - bot) > 0 &&
X (refreshheight -= i) < screen->scroll_amt)
X refreshheight = screen->scroll_amt;
X if((i = screen->savedlines) < screen->savelines) {
X if((i += screen->scroll_amt) >
X screen->savelines)
X i = screen->savelines;
X screen->savedlines = i;
X ScrollBarDrawThumb(screen->scrollWidget);
X }
X } else {
X scrolltop = screen->top_marg + shift;
X if((i = bot - (screen->bot_marg - screen->refresh_amt +
X screen->scroll_amt)) > 0) {
X if(bot < screen->bot_marg)
X refreshheight = screen->scroll_amt + i;
X } else {
X scrollheight += i;
X refreshheight = screen->scroll_amt;
X if((i = screen->top_marg + screen->scroll_amt -
X 1 - bot) > 0) {
X refreshtop += i;
X refreshheight -= i;
X }
X }
X }
X } else {
X refreshheight = -screen->refresh_amt;
X scrollheight = screen->bot_marg - screen->top_marg -
X refreshheight + 1;
X refreshtop = screen->top_marg + shift;
X scrolltop = refreshtop + refreshheight;
X if((i = screen->bot_marg - bot) > 0)
X scrollheight -= i;
X if((i = screen->top_marg + refreshheight - 1 - bot) > 0)
X refreshheight -= i;
X }
X if(scrollheight > 0) {
X if (screen->multiscroll && scrollheight == 1 &&
X screen->topline == 0 && screen->top_marg == 0 &&
X screen->bot_marg == screen->max_row) {
X if (screen->incopy < 0 && screen->scrolls == 0)
X CopyWait (screen);
X if (screen->bltscroll)
X screen->scrolls++;
X } else {
X if (screen->incopy)
X CopyWait (screen);
X if (screen->bltscroll)
X screen->incopy = -1;
X }
X
X if (screen->bltscroll)
X XCopyArea (
X screen->display,
X TextWindow(screen),
X TextWindow(screen),
X screen->normalGC,
X (int) screen->border + screen->scrollbar,
X (int) (scrolltop + screen->scroll_amt) * FontHeight(screen)
X + screen->border,
X (unsigned) Width(screen),
X (unsigned) scrollheight * FontHeight(screen),
X (int) screen->border + screen->scrollbar,
X (int) scrolltop*FontHeight(screen) + screen->border);
X }
X ScrollSelection(screen, -(screen->scroll_amt));
X screen->scroll_amt = 0;
X screen->refresh_amt = 0;
X if (screen->bltscroll) {
X if (refreshheight > 0) {
X XClearArea (
X screen->display,
X TextWindow(screen),
X (int) screen->border + screen->scrollbar,
X (int) refreshtop * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) refreshheight * FontHeight(screen),
X FALSE);
X ScrnRefresh(screen, refreshtop, 0, refreshheight,
X screen->max_col + 1, False);
X }
X } else {
X if (refreshheight + scrollheight > 0)
X ScrnRefresh(screen,
X refreshtop < scrolltop ? refreshtop : scrolltop,
X 0, scrollheight + refreshheight,
X screen->max_col + 1, True);
X }
X}
X
XAddToRefresh(screen)
Xregister TScreen *screen;
X{
X register int amount = screen->refresh_amt;
X register int row = screen->cur_row;
X
X if(amount == 0)
X return(0);
X if(amount > 0) {
X register int bottom;
X
X if(row == (bottom = screen->bot_marg) - amount) {
X screen->refresh_amt++;
X return(1);
X }
X return(row >= bottom - amount + 1 && row <= bottom);
X } else {
X register int top;
X
X amount = -amount;
X if(row == (top = screen->top_marg) + amount) {
X screen->refresh_amt--;
X return(1);
X }
X return(row <= top + amount - 1 && row >= top);
X }
X}
X
X/*
X * scrolls the screen by amount lines, erases bottom, doesn't alter
X * cursor position (i.e. cursor moves down amount relative to text).
X * All done within the scrolling region, of course.
X * requires: amount > 0
X */
XScroll(screen, amount)
Xregister TScreen *screen;
Xregister int amount;
X{
X register int i = screen->bot_marg - screen->top_marg + 1;
X register int shift;
X register int bot;
X register int refreshtop = 0;
X register int refreshheight;
X register int scrolltop;
X register int scrollheight;
X
X if(screen->cursor_state)
X HideCursor();
X if (amount > i)
X amount = i;
X if(screen->jumpscroll) {
X if(screen->scroll_amt > 0) {
X if(screen->refresh_amt + amount > i)
X FlushScroll(screen);
X screen->scroll_amt += amount;
X screen->refresh_amt += amount;
X } else {
X if(screen->scroll_amt < 0)
X FlushScroll(screen);
X screen->scroll_amt = amount;
X screen->refresh_amt = amount;
X }
X refreshheight = 0;
X scrollheight = 0;
X } else {
X ScrollSelection(screen, -(amount));
X if (amount == i) {
X ClearScreen(screen);
X return;
X }
X shift = -screen->topline;
X bot = screen->max_row - shift;
X scrollheight = i - amount;
X refreshheight = amount;
X if((refreshtop = screen->bot_marg - refreshheight + 1 + shift) >
X (i = screen->max_row - refreshheight + 1))
X refreshtop = i;
X if(screen->scrollWidget && !screen->alternate
X && screen->top_marg == 0) {
X scrolltop = 0;
X if((scrollheight += shift) > i)
X scrollheight = i;
X if((i = screen->savedlines) < screen->savelines) {
X if((i += amount) > screen->savelines)
X i = screen->savelines;
X screen->savedlines = i;
X ScrollBarDrawThumb(screen->scrollWidget);
X }
X } else {
X scrolltop = screen->top_marg + shift;
X if((i = screen->bot_marg - bot) > 0) {
X scrollheight -= i;
X if((i = screen->top_marg + amount - 1 - bot) >= 0) {
X refreshtop += i;
X refreshheight -= i;
X }
X }
X }
X if(scrollheight > 0) {
X if (screen->multiscroll
X && amount==1 && screen->topline == 0
X && screen->top_marg==0
X && screen->bot_marg==screen->max_row) {
X if (screen->incopy<0 && screen->scrolls==0)
X CopyWait(screen);
X if (screen->bltscroll)
X screen->scrolls++;
X } else {
X if (screen->incopy)
X CopyWait(screen);
X if (screen->bltscroll)
X screen->incopy = -1;
X }
X
X if (screen->bltscroll)
X XCopyArea(
X screen->display,
X TextWindow(screen),
X TextWindow(screen),
X screen->normalGC,
X (int) screen->border + screen->scrollbar,
X (int) (scrolltop+amount) * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) scrollheight * FontHeight(screen),
X (int) screen->border + screen->scrollbar,
X (int) scrolltop * FontHeight(screen) + screen->border);
X }
X if(refreshheight > 0 && screen->bltscroll) {
X XClearArea (
X screen->display,
X TextWindow(screen),
X (int) screen->border + screen->scrollbar,
X (int) refreshtop * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) refreshheight * FontHeight(screen),
X FALSE);
X if(refreshheight > shift)
X refreshheight = shift;
X }
X }
X if(screen->scrollWidget && !screen->alternate && screen->top_marg == 0)
X ScrnDeleteLine(screen->allbuf, screen->bot_marg +
X screen->savelines, 0, amount, screen->max_col + 1);
X else
X ScrnDeleteLine(screen->buf, screen->bot_marg, screen->top_marg,
X amount, screen->max_col + 1);
X if (screen->bltscroll) {
X if(refreshheight > 0)
X ScrnRefresh(screen, refreshtop, 0, refreshheight,
X screen->max_col + 1, False);
X } else {
X ScrnRefresh(screen,
X refreshtop < scrolltop ? refreshtop : scrolltop,
X 0, refreshheight + scrollheight,
X screen->max_col + 1, True);
X }
X}
X
X
X/*
X * Reverse scrolls the screen by amount lines, erases top, doesn't alter
X * cursor position (i.e. cursor moves up amount relative to text).
X * All done within the scrolling region, of course.
X * Requires: amount > 0
X */
XRevScroll(screen, amount)
Xregister TScreen *screen;
Xregister int amount;
X{
X register int i = screen->bot_marg - screen->top_marg + 1;
X register int shift;
X register int bot;
X register int refreshtop;
X register int refreshheight;
X register int scrolltop;
X register int scrollheight;
X
X if(screen->cursor_state)
X HideCursor();
X if (amount > i)
X amount = i;
X if(screen->jumpscroll) {
X if(screen->scroll_amt < 0) {
X if(-screen->refresh_amt + amount > i)
X FlushScroll(screen);
X screen->scroll_amt -= amount;
X screen->refresh_amt -= amount;
X } else {
X if(screen->scroll_amt > 0)
X FlushScroll(screen);
X screen->scroll_amt = -amount;
X screen->refresh_amt = -amount;
X }
X refreshheight = 0;
X } else {
X shift = -screen->topline;
X bot = screen->max_row - shift;
X refreshheight = amount;
X scrollheight = screen->bot_marg - screen->top_marg -
X refreshheight + 1;
X refreshtop = screen->top_marg + shift;
X scrolltop = refreshtop + refreshheight;
X if((i = screen->bot_marg - bot) > 0)
X scrollheight -= i;
X if((i = screen->top_marg + refreshheight - 1 - bot) > 0)
X refreshheight -= i;
X if(scrollheight > 0) {
X if (screen->multiscroll
X && amount==1 && screen->topline == 0
X && screen->top_marg==0
X && screen->bot_marg==screen->max_row) {
X if (screen->incopy<0 && screen->scrolls==0)
X CopyWait(screen);
X screen->scrolls++;
X } else {
X if (screen->incopy)
X CopyWait(screen);
X screen->incopy = -1;
X }
X
X XCopyArea (
X screen->display,
X TextWindow(screen),
X TextWindow(screen),
X screen->normalGC,
X (int) screen->border + screen->scrollbar,
X (int) (scrolltop-amount) * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) scrollheight * FontHeight(screen),
X (int) screen->border + screen->scrollbar,
X (int) scrolltop * FontHeight(screen) + screen->border);
X }
X if(refreshheight > 0)
X XClearArea (
X screen->display,
X TextWindow(screen),
X (int) screen->border + screen->scrollbar,
X (int) refreshtop * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) refreshheight * FontHeight(screen),
X FALSE);
X }
X ScrnInsertLine (screen->buf, screen->bot_marg, screen->top_marg,
X amount, screen->max_col + 1);
X}
X
X/*
X * If cursor not in scrolling region, returns. Else,
X * inserts n blank lines at the cursor's position. Lines above the
X * bottom margin are lost.
X */
XInsertLine (screen, n)
Xregister TScreen *screen;
Xregister int n;
X{
X register int i;
X register int shift;
X register int bot;
X register int refreshtop;
X register int refreshheight;
X register int scrolltop;
X register int scrollheight;
X
X if (screen->cur_row < screen->top_marg ||
X screen->cur_row > screen->bot_marg)
X return;
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if (n > (i = screen->bot_marg - screen->cur_row + 1))
X n = i;
X if(screen->jumpscroll) {
X if(screen->scroll_amt <= 0 &&
X screen->cur_row <= -screen->refresh_amt) {
X if(-screen->refresh_amt + n > screen->max_row + 1)
X FlushScroll(screen);
X screen->scroll_amt -= n;
X screen->refresh_amt -= n;
X } else if(screen->scroll_amt)
X FlushScroll(screen);
X }
X if(!screen->scroll_amt) {
X shift = -screen->topline;
X bot = screen->max_row - shift;
X refreshheight = n;
X scrollheight = screen->bot_marg - screen->cur_row - refreshheight + 1;
X refreshtop = screen->cur_row + shift;
X scrolltop = refreshtop + refreshheight;
X if((i = screen->bot_marg - bot) > 0)
X scrollheight -= i;
X if((i = screen->cur_row + refreshheight - 1 - bot) > 0)
X refreshheight -= i;
X if(scrollheight > 0) {
X if (screen->incopy)
X CopyWait (screen);
X screen->incopy = -1;
X XCopyArea (
X screen->display,
X TextWindow(screen),
X TextWindow(screen),
X screen->normalGC,
X (int) screen->border + screen->scrollbar,
X (int) (scrolltop - n) * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) scrollheight * FontHeight(screen),
X (int) screen->border + screen->scrollbar,
X (int) scrolltop * FontHeight(screen) + screen->border);
X }
X if(refreshheight > 0)
X XClearArea (
X screen->display,
X TextWindow(screen),
X (int) screen->border + screen->scrollbar,
X (int) refreshtop * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) refreshheight * FontHeight(screen),
X FALSE);
X }
X /* adjust screen->buf */
X ScrnInsertLine(screen->buf, screen->bot_marg, screen->cur_row, n,
X screen->max_col + 1);
X}
X
X/*
X * If cursor not in scrolling region, returns. Else, deletes n lines
X * at the cursor's position, lines added at bottom margin are blank.
X */
XDeleteLine(screen, n)
Xregister TScreen *screen;
Xregister int n;
X{
X register int i;
X register int shift;
X register int bot;
X register int refreshtop;
X register int refreshheight;
X register int scrolltop;
X register int scrollheight;
X
X if (screen->cur_row < screen->top_marg ||
X screen->cur_row > screen->bot_marg)
X return;
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if (n > (i = screen->bot_marg - screen->cur_row + 1))
X n = i;
X if(screen->jumpscroll) {
X if(screen->scroll_amt >= 0 && screen->cur_row == screen->top_marg) {
X if(screen->refresh_amt + n > screen->max_row + 1)
X FlushScroll(screen);
X screen->scroll_amt += n;
X screen->refresh_amt += n;
X } else if(screen->scroll_amt)
X FlushScroll(screen);
X }
X if(!screen->scroll_amt) {
X
X shift = -screen->topline;
X bot = screen->max_row - shift;
X scrollheight = i - n;
X refreshheight = n;
X if((refreshtop = screen->bot_marg - refreshheight + 1 + shift) >
X (i = screen->max_row - refreshheight + 1))
X refreshtop = i;
X if(screen->scrollWidget && !screen->alternate && screen->cur_row == 0) {
X scrolltop = 0;
X if((scrollheight += shift) > i)
X scrollheight = i;
X if((i = screen->savedlines) < screen->savelines) {
X if((i += n) > screen->savelines)
X i = screen->savelines;
X screen->savedlines = i;
X ScrollBarDrawThumb(screen->scrollWidget);
X }
X } else {
X scrolltop = screen->cur_row + shift;
X if((i = screen->bot_marg - bot) > 0) {
X scrollheight -= i;
X if((i = screen->cur_row + n - 1 - bot) >= 0) {
X refreshheight -= i;
X }
X }
X }
X if(scrollheight > 0) {
X if (screen->incopy)
X CopyWait(screen);
X screen->incopy = -1;
X
X XCopyArea (
X screen->display,
X TextWindow(screen),
X TextWindow(screen),
X screen->normalGC,
X (int) screen->border + screen->scrollbar,
X (int) (scrolltop + n) * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) scrollheight * FontHeight(screen),
X (int) screen->border + screen->scrollbar,
X (int) scrolltop * FontHeight(screen) + screen->border);
X }
X if(refreshheight > 0)
X XClearArea (
X screen->display,
X TextWindow(screen),
X (int) screen->border + screen->scrollbar,
X (int) refreshtop * FontHeight(screen) + screen->border,
X (unsigned) Width(screen),
X (unsigned) refreshheight * FontHeight(screen),
X FALSE);
X }
X /* adjust screen->buf */
X if(screen->scrollWidget && !screen->alternate && screen->cur_row == 0)
X ScrnDeleteLine(screen->allbuf, screen->bot_marg +
X screen->savelines, 0, n, screen->max_col + 1);
X else
X ScrnDeleteLine(screen->buf, screen->bot_marg, screen->cur_row,
X n, screen->max_col + 1);
X}
X
X/*
X * Insert n blanks at the cursor's position, no wraparound
X */
XInsertChar (screen, n)
Xregister TScreen *screen;
Xregister int n;
X{
X register int width = n * FontWidth(screen), cx, cy;
X
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if(screen->cur_row - screen->topline <= screen->max_row) {
X if(!AddToRefresh(screen)) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X
X if (screen->incopy)
X CopyWait (screen);
X screen->incopy = -1;
X
X cx = CursorX (screen, screen->cur_col);
X cy = CursorY (screen, screen->cur_row);
X
X /*
X * prevent InsertChar from shifting the end of a line over
X * if it is being appended to
X */
X if (non_blank_line (screen->buf, screen->cur_row,
X screen->cur_col, screen->max_col + 1)) {
X XCopyArea(
X screen->display,
X TextWindow(screen), TextWindow(screen),
X screen->normalGC,
X cx, cy,
X (unsigned) Width(screen)
X - (screen->cur_col + n) * FontWidth(screen),
X (unsigned) FontHeight(screen),
X cx + width, cy);
X } else
X screen->incopy = 0;
X
X XFillRectangle(
X screen->display,
X TextWindow(screen),
X screen->reverseGC,
X cx, cy,
X (unsigned) width, (unsigned) FontHeight(screen));
X }
X }
X /* adjust screen->buf */
X ScrnInsertChar(screen->buf, screen->cur_row, screen->cur_col, n,
X screen->max_col + 1);
X}
X
X/*
X * Deletes n chars at the cursor's position, no wraparound.
X */
XDeleteChar (screen, n)
Xregister TScreen *screen;
Xregister int n;
X{
X register int width, cx, cy;
X
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if (n > (width = screen->max_col + 1 - screen->cur_col))
X n = width;
X
X if(screen->cur_row - screen->topline <= screen->max_row) {
X if(!AddToRefresh(screen)) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X
X width = n * FontWidth(screen);
X
X if (screen->incopy)
X CopyWait (screen);
X screen->incopy = -1;
X
X cx = CursorX (screen, screen->cur_col);
X cy = CursorY (screen, screen->cur_row);
X XCopyArea(screen->display,
X TextWindow(screen), TextWindow(screen),
X screen->normalGC,
X cx + width, cy,
X Width(screen) - (screen->cur_col + n) * FontWidth(screen),
X FontHeight(screen),
X cx, cy);
X XFillRectangle (screen->display, TextWindow(screen),
X screen->reverseGC,
X screen->border + screen->scrollbar + Width(screen) - width,
X cy, width, FontHeight(screen));
X }
X }
X /* adjust screen->buf */
X ScrnDeleteChar (screen->buf, screen->cur_row, screen->cur_col, n,
X screen->max_col + 1);
X
X}
X
X/*
X * Clear from cursor position to beginning of display, inclusive.
X */
XClearAbove (screen)
Xregister TScreen *screen;
X{
X register top, height;
X
X if(screen->cursor_state)
X HideCursor();
X if((top = -screen->topline) <= screen->max_row) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X if((height = screen->cur_row + top) > screen->max_row)
X height = screen->max_row;
X if((height -= top) > 0)
X XClearArea(screen->display, TextWindow(screen),
X screen->border + screen->scrollbar, top *
X FontHeight(screen) + screen->border,
X Width(screen), height * FontHeight(screen), FALSE);
X
X if(screen->cur_row - screen->topline <= screen->max_row)
X ClearLeft(screen);
X }
X ClearBufRows(screen, 0, screen->cur_row - 1);
X}
X
X/*
X * Clear from cursor position to end of display, inclusive.
X */
XClearBelow (screen)
Xregister TScreen *screen;
X{
X register top;
X
X ClearRight(screen);
X if((top = screen->cur_row - screen->topline) <= screen->max_row) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X if(++top <= screen->max_row)
X XClearArea(screen->display, TextWindow(screen),
X screen->border + screen->scrollbar, top *
X FontHeight(screen) + screen->border,
X Width(screen), (screen->max_row - top + 1) *
X FontHeight(screen), FALSE);
X }
X ClearBufRows(screen, screen->cur_row + 1, screen->max_row);
X}
X
X/*
X * Clear last part of cursor's line, inclusive.
X */
XClearRight (screen)
Xregister TScreen *screen;
X{
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if(screen->cur_row - screen->topline <= screen->max_row) {
X if(!AddToRefresh(screen)) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X XFillRectangle(screen->display, TextWindow(screen),
X screen->reverseGC,
X CursorX(screen, screen->cur_col),
X CursorY(screen, screen->cur_row),
X Width(screen) - screen->cur_col * FontWidth(screen),
X FontHeight(screen));
X }
X }
X bzero(screen->buf [4 * screen->cur_row] + screen->cur_col,
X (screen->max_col - screen->cur_col + 1));
X bzero(screen->buf [4 * screen->cur_row + 1] + screen->cur_col,
X (screen->max_col - screen->cur_col + 1));
X bzero(screen->buf [4 * screen->cur_row + 2] + screen->cur_col,
X (screen->max_col - screen->cur_col + 1));
X bzero(screen->buf [4 * screen->cur_row + 3] + screen->cur_col,
X (screen->max_col - screen->cur_col + 1));
X}
X
X/*
X * Clear first part of cursor's line, inclusive.
X */
XClearLeft (screen)
Xregister TScreen *screen;
X{
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if(screen->cur_row - screen->topline <= screen->max_row) {
X if(!AddToRefresh(screen)) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X XFillRectangle (screen->display, TextWindow(screen),
X screen->reverseGC,
X screen->border + screen->scrollbar,
X CursorY (screen, screen->cur_row),
X (screen->cur_col + 1) * FontWidth(screen),
X FontHeight(screen));
X }
X }
X bzero (screen->buf [4 * screen->cur_row], (screen->cur_col + 1));
X bzero (screen->buf [4 * screen->cur_row + 1], (screen->cur_col + 1));
X bzero (screen->buf [4 * screen->cur_row + 2], (screen->cur_col + 1));
X bzero (screen->buf [4 * screen->cur_row + 3], (screen->cur_col + 1));
X}
X
X/*
X * Erase the cursor's line.
X */
XClearLine(screen)
Xregister TScreen *screen;
X{
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if(screen->cur_row - screen->topline <= screen->max_row) {
X if(!AddToRefresh(screen)) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X XFillRectangle (screen->display, TextWindow(screen),
X screen->reverseGC,
X screen->border + screen->scrollbar,
X CursorY (screen, screen->cur_row),
X Width(screen), FontHeight(screen));
X }
X }
X bzero (screen->buf [4 * screen->cur_row], (screen->max_col + 1));
X bzero (screen->buf [4 * screen->cur_row + 1], (screen->max_col + 1));
X bzero (screen->buf [4 * screen->cur_row + 2], (screen->max_col + 1));
X bzero (screen->buf [4 * screen->cur_row + 3], (screen->max_col + 1));
X}
X
XClearScreen(screen)
Xregister TScreen *screen;
X{
X register int top;
X
X if(screen->cursor_state)
X HideCursor();
X screen->do_wrap = 0;
X if((top = -screen->topline) <= screen->max_row) {
X if(screen->scroll_amt)
X FlushScroll(screen);
X if(top == 0)
X XClearWindow(screen->display, TextWindow(screen));
X else
X XClearArea(screen->display, TextWindow(screen),
X screen->border + screen->scrollbar,
X top * FontHeight(screen) + screen->border,
X Width(screen), (screen->max_row - top + 1) *
X FontHeight(screen), FALSE);
X }
X ClearBufRows (screen, 0, screen->max_row);
X}
X
XCopyWait(screen)
Xregister TScreen *screen;
X{
X XEvent reply;
X XEvent *rep = &reply;
X
X while (1) {
X XWindowEvent (screen->display, VWindow(screen),
X ExposureMask, &reply);
X switch (reply.type) {
X case Expose:
X HandleExposure (screen, (XExposeEvent *) &reply);
X break;
X case NoExpose:
X case GraphicsExpose:
X if (screen->incopy <= 0) {
X screen->incopy = 1;
X if (screen->scrolls > 0)
X screen->scrolls--;
X }
X if (reply.type == GraphicsExpose)
X HandleExposure (screen, (XExposeEvent *) &reply);
X
X if ((reply.type == NoExpose) ||
X ((XExposeEvent *)rep)->count == 0) {
X if (screen->incopy <= 0 && screen->scrolls > 0)
X screen->scrolls--;
X if (screen->scrolls == 0) {
X screen->incopy = 0;
X return;
X }
X screen->incopy = -1;
X }
X break;
X }
X }
X}
X/*
X * This routine handles exposure events
X */
XHandleExposure (screen, reply)
Xregister TScreen *screen;
Xregister XExposeEvent *reply;
X{
X register int toprow, leftcol, nrows, ncols;
X extern Bool waiting_for_initial_map;
X
X if((toprow = (reply->y - screen->border) /
X FontHeight(screen)) < 0)
X toprow = 0;
X if((leftcol = (reply->x - screen->border - screen->scrollbar)
X / FontWidth(screen)) < 0)
X leftcol = 0;
X nrows = (reply->y + reply->height - 1 - screen->border) /
X FontHeight(screen) - toprow + 1;
X ncols =
X (reply->x + reply->width - 1 - screen->border - screen->scrollbar) /
X FontWidth(screen) - leftcol + 1;
X toprow -= screen->scrolls;
X if (toprow < 0) {
X nrows += toprow;
X toprow = 0;
X }
X if (toprow + nrows - 1 > screen->max_row)
X nrows = screen->max_row - toprow + 1;
X if (leftcol + ncols - 1 > screen->max_col)
X ncols = screen->max_col - leftcol + 1;
X
X if (nrows > 0 && ncols > 0) {
X ScrnRefresh (screen, toprow, leftcol, nrows, ncols, False);
X if (waiting_for_initial_map) {
X first_map_occurred ();
X }
X if (screen->cur_row >= toprow &&
X screen->cur_row < toprow + nrows &&
X screen->cur_col >= leftcol &&
X screen->cur_col < leftcol + ncols)
X return (1);
X
X }
X return (0);
X}
X
X/***====================================================================***/
X
Xvoid
XGetColors(term,pColors)
X XtermWidget term;
X ScrnColors *pColors;
X{
X register TScreen *screen = &term->screen;
X GC tmpGC;
X Window tek = TWindow(screen);
X unsigned long tmp;
X
X
X pColors->which= 0;
X SET_COLOR_VALUE(pColors,TEXT_FG, screen->foreground);
X SET_COLOR_VALUE(pColors,TEXT_BG, term->core.background_pixel);
X SET_COLOR_VALUE(pColors,TEXT_CURSOR, screen->cursorcolor);
X SET_COLOR_VALUE(pColors,MOUSE_FG, screen->mousecolor);
X SET_COLOR_VALUE(pColors,MOUSE_BG, screen->mousecolorback);
X
X
X SET_COLOR_VALUE(pColors,TEK_FG, screen->Tforeground);
X SET_COLOR_VALUE(pColors,TEK_BG, screen->Tbackground);
X}
X
X
XChangeColors(term,pNew)
X XtermWidget term;
X ScrnColors *pNew;
X{
X register TScreen *screen = &term->screen;
X GC tmpGC;
X Window tek = TWindow(screen);
X unsigned long tmp;
X Bool newCursor= TRUE;
X
X
X if (COLOR_DEFINED(pNew,TEXT_BG)) {
X term->core.background_pixel= COLOR_VALUE(pNew,TEXT_BG);
X }
X
X if (COLOR_DEFINED(pNew,TEXT_CURSOR)) {
X screen->cursorcolor= COLOR_VALUE(pNew,TEXT_CURSOR);
X }
X else if ((screen->cursorcolor == screen->foreground)&&
X (COLOR_DEFINED(pNew,TEXT_FG))) {
X screen->cursorcolor= COLOR_VALUE(pNew,TEXT_FG);
X }
X else newCursor= FALSE;
X
X if (COLOR_DEFINED(pNew,TEXT_FG)) {
X Pixel fg= COLOR_VALUE(pNew,TEXT_FG);
X screen->foreground= fg;
X XSetForeground(screen->display,screen->normalGC,fg);
X XSetBackground(screen->display,screen->reverseGC,fg);
X XSetForeground(screen->display,screen->normalboldGC,fg);
X XSetBackground(screen->display,screen->reverseboldGC,fg);
X }
X
X if (COLOR_DEFINED(pNew,TEXT_BG)) {
X Pixel bg= COLOR_VALUE(pNew,TEXT_BG);
X term->core.background_pixel= bg;
X XSetBackground(screen->display,screen->normalGC,bg);
X XSetForeground(screen->display,screen->reverseGC,bg);
X XSetBackground(screen->display,screen->normalboldGC,bg);
X XSetForeground(screen->display,screen->reverseboldGC,bg);
X XSetWindowBackground(screen->display, TextWindow(screen),
X term->core.background_pixel);
X }
X
X if (COLOR_DEFINED(pNew,MOUSE_FG)||(COLOR_DEFINED(pNew,MOUSE_BG))) {
X if (COLOR_DEFINED(pNew,MOUSE_FG))
X screen->mousecolor= COLOR_VALUE(pNew,MOUSE_FG);
X if (COLOR_DEFINED(pNew,MOUSE_BG))
X screen->mousecolorback= COLOR_VALUE(pNew,MOUSE_BG);
X
X recolor_cursor (screen->pointer_cursor,
X screen->mousecolor, screen->mousecolorback);
X recolor_cursor (screen->arrow,
X screen->mousecolor, screen->mousecolorback);
X XDefineCursor(screen->display, TextWindow(screen),
X screen->pointer_cursor);
X if(tek)
X XDefineCursor(screen->display, tek, screen->arrow);
X }
X
X if ((tek)&&(COLOR_DEFINED(pNew,TEK_FG)||COLOR_DEFINED(pNew,TEK_BG))) {
X ChangeTekColors(screen,pNew);
X }
X set_cursor_gcs(screen);
X XClearWindow(screen->display, TextWindow(screen));
X ScrnRefresh (screen, 0, 0, screen->max_row + 1,
X screen->max_col + 1, False);
X if(screen->Tshow) {
X XClearWindow(screen->display, tek);
X TekExpose((XExposeEvent *) NULL);
X }
X}
X
X/***====================================================================***/
X
XReverseVideo (term)
X XtermWidget term;
X{
X register TScreen *screen = &term->screen;
X GC tmpGC;
X Window tek = TWindow(screen);
X unsigned long tmp;
X
X tmp = term->core.background_pixel;
X if(screen->cursorcolor == screen->foreground)
X screen->cursorcolor = tmp;
X term->core.background_pixel = screen->foreground;
X screen->foreground = tmp;
X
X tmp = screen->mousecolorback;
X screen->mousecolorback = screen->mousecolor;
X screen->mousecolor = tmp;
X
X tmpGC = screen->normalGC;
X screen->normalGC = screen->reverseGC;
X screen->reverseGC = tmpGC;
X
X tmpGC = screen->normalboldGC;
X screen->normalboldGC = screen->reverseboldGC;
X screen->reverseboldGC = tmpGC;
X
X recolor_cursor (screen->pointer_cursor,
X screen->mousecolor, screen->mousecolorback);
X recolor_cursor (screen->arrow,
X screen->mousecolor, screen->mousecolorback);
X
X term->misc.re_verse = !term->misc.re_verse;
X
X XDefineCursor(screen->display, TextWindow(screen), screen->pointer_cursor);
X if(tek)
X XDefineCursor(screen->display, tek, screen->arrow);
X
X
X if(screen->scrollWidget)
X ScrollBarReverseVideo(screen->scrollWidget);
X
X XSetWindowBackground(screen->display, TextWindow(screen), term->core.background_pixel);
X if(tek) {
X TekReverseVideo(screen);
X }
X XClearWindow(screen->display, TextWindow(screen));
X ScrnRefresh (screen, 0, 0, screen->max_row + 1,
X screen->max_col + 1, False);
X if(screen->Tshow) {
X XClearWindow(screen->display, tek);
X TekExpose((XExposeEvent *) NULL);
X }
X ReverseOldColors();
X update_reversevideo();
X}
X
X
Xrecolor_cursor (cursor, fg, bg)
X Cursor cursor; /* X cursor ID to set */
X unsigned long fg, bg; /* pixel indexes to look up */
X{
X register TScreen *screen = &term->screen;
X register Display *dpy = screen->display;
X XColor colordefs[2]; /* 0 is foreground, 1 is background */
X
X colordefs[0].pixel = fg;
X colordefs[1].pixel = bg;
X XQueryColors (dpy, DefaultColormap (dpy, DefaultScreen (dpy)),
X colordefs, 2);
X XRecolorCursor (dpy, cursor, colordefs, colordefs+1);
X return;
X}
X
END_OF_FILE
if test 31028 -ne `wc -c <'xterm/util.c'`; then
echo shar: \"'xterm/util.c'\" unpacked with wrong size!
fi
# end of 'xterm/util.c'
fi
echo shar: End of archive 4 \(of 14\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 14 archives.
rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0
dan
----------------------------------------------------
O'Reilly && Associates argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.
More information about the Comp.sources.x
mailing list