[comp.sources.x] v09i034: colxterm -- Color xterm, Part04/14

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.