tomw@orac.esd.sgi.com (Tom Weinstein) (09/14/90)
Submitted-by: Tom Weinstein <tomw@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@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@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@sun.com / argv@ora.com Opinions expressed reflect those of the author only.