[comp.sources.x] v09i033: colxterm -- Color xterm, Part03/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 33
Archive-name: colxterm/part03

#! /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 3 (of 14)."
# Contents:  xterm/main.c.ac xterm/xterm.man.aa
# Wrapped by argv@turnpike on Thu Sep 13 20:42:18 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'xterm/main.c.ac' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xterm/main.c.ac'\"
else
echo shar: Extracting \"'xterm/main.c.ac'\" \(15850 characters\)
sed "s/^X//" >'xterm/main.c.ac' <<'END_OF_FILE'
X				if (term->misc.login_shell &&
X				(i = open(etc_wtmp, O_WRONLY|O_APPEND)) >= 0) {
X				    write(i, (char *)&utmp,
X					sizeof(struct utmp));
X				close(i);
X				}
X#endif /* WTMP */
X#ifdef LASTLOG
X				if (term->misc.login_shell &&
X				(i = open(etc_lastlog, O_WRONLY)) >= 0) {
X				    bzero((char *)&lastlog,
X					sizeof (struct lastlog));
X				    (void) strncpy(lastlog.ll_line, ttydev +
X					sizeof("/dev"),
X					sizeof (lastlog.ll_line));
X				    (void) strncpy(lastlog.ll_host, 
X					  XDisplayString (screen->display),
X					  sizeof (lastlog.ll_host));
X				    time(&lastlog.ll_time);
X				    lseek(i, (long)(screen->uid *
X					sizeof (struct lastlog)), 0);
X				    write(i, (char *)&lastlog,
X					sizeof (struct lastlog));
X				    close(i);
X				}
X#endif /* LASTLOG */
X			} else
X				tslot = -tslot;
X		}
X
X		/* Let's pass our ttyslot to our parent so that it can
X		 * clean up after us.
X		 */
X#ifdef USE_HANDSHAKE
X		handshake.tty_slot = tslot;
X#endif /* USE_HANDSHAKE */
X#endif /* USE_SYSV_UTMP */
X
X#ifdef USE_HANDSHAKE
X		/* Let our parent know that we set up our utmp entry
X		 * so that it can clean up after us.
X		 */
X		handshake.status = UTMP_ADDED;
X		handshake.error = 0;
X		strcpy(handshake.buffer, ttydev);
X		(void) write(cp_pipe[1], &handshake, sizeof(handshake));
X#endif /* USE_HANDSHAKE */
X#endif/* UTMP */
X
X		(void) setgid (screen->gid);
X#ifdef HAS_BSD_GROUPS
X		if (geteuid() == 0 && pw)
X		  initgroups (pw->pw_name, pw->pw_gid);
X#endif
X		(void) setuid (screen->uid);
X
X#ifdef USE_HANDSHAKE
X		/* mark the pipes as close on exec */
X		fcntl(cp_pipe[1], F_SETFD, 1);
X		fcntl(pc_pipe[0], F_SETFD, 1);
X
X		/* We are at the point where we are going to
X		 * exec our shell (or whatever).  Let our parent
X		 * know we arrived safely.
X		 */
X		handshake.status = PTY_GOOD;
X		handshake.error = 0;
X		(void) strcpy(handshake.buffer, ttydev);
X		(void) write(cp_pipe[1], &handshake, sizeof(handshake));
X
X		if (waiting_for_initial_map) {
X		    i = read (pc_pipe[0], (char *) &handshake,
X			      sizeof(handshake));
X		    if (i != sizeof(handshake) ||
X			handshake.status != PTY_EXEC) {
X			/* some very bad problem occurred */
X			exit (ERROR_PTY_EXEC);
X		    }
X		    screen->max_row = handshake.rows;
X		    screen->max_col = handshake.cols;
X#ifdef sun
X#ifdef TIOCSSIZE
X		    ts.ts_lines = screen->max_row + 1;
X		    ts.ts_cols = screen->max_col + 1;
X#endif /* TIOCSSIZE */
X#else /* !sun */
X#ifdef TIOCSWINSZ
X		    ws.ws_row = screen->max_row + 1;
X		    ws.ws_col = screen->max_col + 1;
X		    ws.ws_xpixel = FullWidth(screen);
X		    ws.ws_ypixel = FullHeight(screen);
X#endif /* TIOCSWINSZ */
X#endif /* sun else !sun */
X		}
X#endif /* USE_HANDSHAKE */
X
X#ifdef USE_SYSV_ENVVARS
X		sprintf (numbuf, "%d", screen->max_col + 1);
X		Setenv("COLUMNS=", numbuf);
X		sprintf (numbuf, "%d", screen->max_row + 1);
X		Setenv("LINES=", numbuf);
X#else
X#ifdef USE_TERMCAP
X		if(!screen->TekEmu) {
X		    strcpy (termcap, newtc);
X		    resize (screen, TermName, termcap, newtc);
X		}
X		if (term->misc.titeInhibit) {
X		    remove_termcap_entry (newtc, ":ti=");
X		    remove_termcap_entry (newtc, ":te=");
X		}
X		/*
X		 * work around broken termcap entries */
X		if (resource.useInsertMode)	{
X		    remove_termcap_entry (newtc, ":ic=");
X		    /* don't get duplicates */
X		    remove_termcap_entry (newtc, ":im=");
X		    remove_termcap_entry (newtc, ":ei=");
X		    remove_termcap_entry (newtc, ":mi");
X		    strcat (newtc, ":im=\\E[4h:ei=\\E[4l:mi:");
X		}
X		Setenv ("TERMCAP=", newtc);
X#endif /* USE_TERMCAP */
X#endif /* USE_SYSV_ENVVAR */
X
X
X		/* need to reset after all the ioctl bashing we did above */
X#ifdef sun
X#ifdef TIOCSSIZE
X		ioctl  (0, TIOCSSIZE, &ts);
X#endif	/* TIOCSSIZE */
X#else	/* not sun */
X#ifdef TIOCSWINSZ
X		ioctl (0, TIOCSWINSZ, (char *)&ws);
X#endif	/* TIOCSWINSZ */
X#endif	/* sun */
X
X		signal(SIGHUP, SIG_DFL);
X		if (command_to_exec) {
X			execvp(*command_to_exec, command_to_exec);
X			/* print error message on screen */
X			fprintf(stderr, "%s: Can't execvp %s\n", xterm_name,
X			 *command_to_exec);
X		} 
X
X#ifdef att
X		/* fix pts sh hanging around */
X		signal (SIGHUP, SIG_DFL);
X#endif
X
X#ifdef UTMP
X		if(((ptr = getenv("SHELL")) == NULL || *ptr == 0) &&
X		 ((pw == NULL && (pw = getpwuid(screen->uid)) == NULL) ||
X		 *(ptr = pw->pw_shell) == 0))
X#else	/* UTMP */
X		if(((ptr = getenv("SHELL")) == NULL || *ptr == 0) &&
X		 ((pw = getpwuid(screen->uid)) == NULL ||
X		 *(ptr = pw->pw_shell) == 0))
X#endif	/* UTMP */
X			ptr = "/bin/sh";
X		if(shname = rindex(ptr, '/'))
X			shname++;
X		else
X			shname = ptr;
X		shname_minus = malloc(strlen(shname) + 2);
X		(void) strcpy(shname_minus, "-");
X		(void) strcat(shname_minus, shname);
X#ifdef TIOCSETD
X#ifdef NTTYDISC
X#ifdef USE_SYSV_TERMIO
X		/* If we're SYSV, the line discipline is probably already
X		 * correct for most shells, BUT if NTTYDISC exists it is
X		 * likely to be the best choice for a JOBCONTROL knowledgable
X		 * shell like "csh" or "ksh"
X		 */
X		if ( XStrCmp("csh", shname + strlen(shname) - 3) == 0
X		  || XStrCmp("ksh", shname + strlen(shname) - 3) == 0 ) {
X		    ldisc = NTTYDISC ;
X		    ioctl(0, TIOCSETD, (char *)&ldisc);
X		}
X#else
X		ldisc = XStrCmp("csh", shname + strlen(shname) - 3) == 0 ?
X		 NTTYDISC : 0;
X		ioctl(0, TIOCSETD, (char *)&ldisc);
X#endif	/* USE_SYSV_TERMIO */
X#endif	/* NTTYDISC */
X#endif	/*  TIOCSETD */
X
X#ifdef USE_LOGIN_DASH_P
X		if (term->misc.login_shell && pw && added_utmp_entry)
X		  execl (bin_login, "login", "-p", "-f", pw->pw_name, 0);
X#endif
X		execlp (ptr, (term->misc.login_shell ? shname_minus : shname),
X			0);
X
X		/* Exec failed. */
X		fprintf (stderr, "%s: Could not exec %s!\n", xterm_name, ptr);
X		sleep(5);
X		exit(ERROR_EXEC);
X	    }				/* end if in child after fork */
X
X#ifdef USE_HANDSHAKE
X	    /* Parent process.  Let's handle handshaked requests to our
X	     * child process.
X	     */
X
X	    /* close childs's sides of the pipes */
X	    close (cp_pipe[1]);
X	    close (pc_pipe[0]);
X
X	    for (done = 0; !done; ) {
X		if (read(cp_pipe[0], &handshake, sizeof(handshake)) <= 0) {
X			/* Our child is done talking to us.  If it terminated
X			 * due to an error, we will catch the death of child
X			 * and clean up.
X			 */
X			break;
X		}
X
X		switch(handshake.status) {
X		case PTY_GOOD:
X			/* Success!  Let's free up resources and
X			 * continue.
X			 */
X			done = 1;
X			break;
X
X		case PTY_BAD:
X			/* The open of the pty failed!  Let's get
X			 * another one.
X			 */
X			(void) close(screen->respond);
X			if (get_pty(&screen->respond)) {
X			    /* no more ptys! */
X			    (void) fprintf(stderr,
X				   "%s: no available ptys\n", xterm_name);
X			    handshake.status = PTY_NOMORE;
X			    write(pc_pipe[1], &handshake, sizeof(handshake));
X			    exit (ERROR_PTYS);
X			}
X			handshake.status = PTY_NEW;
X			(void) strcpy(handshake.buffer, ttydev);
X			write(pc_pipe[1], &handshake, sizeof(handshake));
X			break;
X
X		case PTY_FATALERROR:
X			errno = handshake.error;
X			close(cp_pipe[0]);
X			close(pc_pipe[1]);
X			SysError(handshake.fatal_error);
X
X		case UTMP_ADDED:
X			/* The utmp entry was set by our slave.  Remember
X			 * this so that we can reset it later.
X			 */
X			added_utmp_entry = True;
X#ifndef	USE_SYSV_UTMP
X			tslot = handshake.tty_slot;
X#endif	/* USE_SYSV_UTMP */
X			free(ttydev);
X			ttydev = malloc((unsigned) strlen(handshake.buffer) + 1);
X			strcpy(ttydev, handshake.buffer);
X			break;
X		}
X	    }
X	    /* close our sides of the pipes */
X	    if (!waiting_for_initial_map) {
X		close (cp_pipe[0]);
X		close (pc_pipe[1]);
X	    }
X#endif /* USE_HANDSHAKE */
X	}				/* end if no slave */
X
X	/*
X	 * still in parent (xterm process)
X	 */
X
X#ifdef att
X	/* hung sh problem? */
X	signal (SIGHUP, SIG_DFL);
X#else
X	signal (SIGHUP,SIG_IGN);
X#endif
X
X/*
X * Unfortunately, System V seems to have trouble divorcing the child process
X * from the process group of xterm.  This is a problem because hitting the 
X * INTR or QUIT characters on the keyboard will cause xterm to go away if we
X * don't ignore the signals.  This is annoying.
X */
X
X#if defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP)
X	signal (SIGINT, SIG_IGN);
X
X#ifndef att
X	/* hung shell problem */
X	signal (SIGQUIT, SIG_IGN);
X#endif
X	signal (SIGTERM, SIG_IGN);
X#else /* else is bsd or has job control */
X#ifdef SYSV
X	/* if we were spawned by a jobcontrol smart shell (like ksh or csh),
X	 * then our pgrp and pid will be the same.  If we were spawned by
X	 * a jobcontrol dump shell (like /bin/sh), then we will be in out
X	 * parents pgrp, and we must ignore keyboard signals, or will will
X	 * tank on everything.
X	 */
X	if (getpid() == getpgrp()) {
X	    (void) signal(SIGINT, Exit);
X	    (void) signal(SIGQUIT, Exit);
X	    (void) signal(SIGTERM, Exit);
X	} else {
X	    (void) signal(SIGINT, SIG_IGN);
X	    (void) signal(SIGQUIT, SIG_IGN);
X	    (void) signal(SIGTERM, SIG_IGN);
X	}
X	(void) signal(SIGPIPE, Exit);
X#else	/* SYSV */
X	signal (SIGINT, Exit);
X	signal (SIGQUIT, Exit);
X	signal (SIGTERM, Exit);
X        signal (SIGPIPE, Exit);
X#endif	/* SYSV */
X#endif /* USE_SYSV_SIGNALS and not SIGTSTP */
X
X	return;
X}							/* end spawn */
X
XSIGNAL_T Exit(n)
X	int n;
X{
X	register TScreen *screen = &term->screen;
X        int pty = term->screen.respond;  /* file descriptor of pty */
X#ifdef UTMP
X#ifdef USE_SYSV_UTMP
X	struct utmp utmp;
X	struct utmp *utptr;
X#ifdef WTMP
X	int fd;			/* for /etc/wtmp */
X#endif
X	/* cleanup the utmp entry we forged earlier */
X	if (!resource.utmpInhibit && added_utmp_entry) {
X#ifdef CRAY
X#define PTYCHARLEN 4
X#else
X#define PTYCHARLEN 2
X#endif
X	    utmp.ut_type = USER_PROCESS;
X	    (void) strncpy(utmp.ut_id, ttydev + strlen(ttydev) - PTYCHARLEN,
X		    sizeof(utmp.ut_id));
X	    (void) setutent();
X	    utptr = getutid(&utmp);
X	    /* write it out only if it exists, and the pid's match */
X	    if (utptr && (utptr->ut_pid = screen->pid)) {
X		    utptr->ut_type = DEAD_PROCESS;
X		    utptr->ut_time = time((long *) 0);
X		    (void) pututline(utptr);
X#ifdef WTMP
X		    /* set wtmp entry if wtmp file exists */
X		    if ((fd = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
X		      (void) write(fd, utptr, sizeof(utmp));
X		      (void) close(fd);
X		    }
X#endif
X
X	    }
X	    (void) endutent();
X	}
X#else	/* not USE_SYSV_UTMP */
X	register int i;
X	struct utmp utmp;
X
X	if (!resource.utmpInhibit && added_utmp_entry &&
X	    (!am_slave && tslot > 0 && (i = open(etc_utmp, O_WRONLY)) >= 0)) {
X		bzero((char *)&utmp, sizeof(struct utmp));
X		lseek(i, (long)(tslot * sizeof(struct utmp)), 0);
X		write(i, (char *)&utmp, sizeof(struct utmp));
X		close(i);
X#ifdef WTMP
X		if (term->misc.login_shell &&
X		    (i = open(etc_wtmp, O_WRONLY | O_APPEND)) >= 0) {
X			(void) strncpy(utmp.ut_line, ttydev +
X			    sizeof("/dev"), sizeof (utmp.ut_line));
X			time(&utmp.ut_time);
X			write(i, (char *)&utmp, sizeof(struct utmp));
X			close(i);
X		}
X#endif /* WTMP */
X	}
X#endif	/* USE_SYSV_UTMP */
X#endif	/* UTMP */
X        close(pty); /* close explicitly to avoid race with slave side */
X	if(screen->logging)
X		CloseLog(screen);
X
X	if (!am_slave) {
X		/* restore modes of tty and pty */
X		chmod (ttydev, 0666);
X#ifndef sgi
X		chmod (ptydev, 0666);
X#endif /* sgi */
X
X		/* restore ownership of tty and pty */
X		chown (ttydev, 0, 0);
X#ifndef sgi
X		chown (ptydev, 0, 0);
X#endif /* sgi */
X	}
X	exit(n);
X	SIGNAL_RETURN;
X}
X
X/* ARGSUSED */
Xresize(screen, TermName, oldtc, newtc)
XTScreen *screen;
Xchar *TermName;
Xregister char *oldtc, *newtc;
X{
X#if !defined USE_SYSV_ENVVARS && defined USE_TERMCAP
X	register char *ptr1, *ptr2;
X	register int i;
X	register int li_first = 0;
X	register char *temp;
X	char *index();
X
X	if ((ptr1 = strindex (oldtc, "co#")) == NULL){
X		strcat (oldtc, "co#80:");
X		ptr1 = strindex (oldtc, "co#");
X	}
X	if ((ptr2 = strindex (oldtc, "li#")) == NULL){
X		strcat (oldtc, "li#24:");
X		ptr2 = strindex (oldtc, "li#");
X	}
X	if(ptr1 > ptr2) {
X		li_first++;
X		temp = ptr1;
X		ptr1 = ptr2;
X		ptr2 = temp;
X	}
X	ptr1 += 3;
X	ptr2 += 3;
X	strncpy (newtc, oldtc, i = ptr1 - oldtc);
X	newtc += i;
X	sprintf (newtc, "%d", li_first ? screen->max_row + 1 :
X	 screen->max_col + 1);
X	newtc += strlen(newtc);
X	ptr1 = index (ptr1, ':');
X	strncpy (newtc, ptr1, i = ptr2 - ptr1);
X	newtc += i;
X	sprintf (newtc, "%d", li_first ? screen->max_col + 1 :
X	 screen->max_row + 1);
X	ptr2 = index (ptr2, ':');
X	strcat (newtc, ptr2);
X#endif /* !defined USE_SYSV_ENVVARS && defined USE_TERMCAP */
X}
X
Xstatic SIGNAL_T reapchild ()
X{
X#if defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP)
X	int status, pid;
X
X	pid = wait(&status);
X	if (pid == -1) {
X		(void) signal(SIGCHLD, reapchild);
X		SIGNAL_RETURN;
X	}
X#else	/* defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP) */
X	union wait status;
X	register int pid;
X	
X#ifdef DEBUG
X	if (debug) fputs ("Exiting\n", stderr);
X#endif	/* DEBUG */
X	pid  = wait3 (&status, WNOHANG, (struct rusage *)NULL);
X	if (!pid) {
X#ifdef USE_SYSV_SIGNALS
X		(void) signal(SIGCHLD, reapchild);
X#endif /* USE_SYSV_SIGNALS */
X		SIGNAL_RETURN;
X	}
X#endif	/* defined(USE_SYSV_SIGNALS) && !defined(SIGTSTP) */
X
X#ifdef PUCC_PTYD
X		closepty(ttydev, ptydev, (resource.utmpInhibit ?  OPTY_NOP : OPTY_LOGIN), Ptyfd);
X#endif /* PUCC_PTYD */
X
X	if (pid != term->screen.pid) {
X#ifdef USE_SYSV_SIGNALS
X		(void) signal(SIGCHLD, reapchild);
X#endif	/* USE_SYSV_SIGNALS */
X		SIGNAL_RETURN;
X	}
X	
X	/*
X	 * Use pid instead of process group (which would have to get before
X	 * the wait call above) so that we don't accidentally hose other
X	 * applications.  Otherwise, somebody could write a program which put
X	 * itself in somebody else's process group.  Also, we call Exit instead
X	 * of Cleanup so that we don't do a killpg on -1 by accident.  Some
X	 * operating systems seem to do very nasty things with that.
X	 */
X	if (pid > 1) {
X	    killpg (pid, SIGHUP);
X	}
X	Exit (0);
X	SIGNAL_RETURN;
X}
X
X/* VARARGS1 */
Xconsolepr(fmt,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)
Xchar *fmt;
X{
X	extern int errno;
X	extern char *SysErrorMsg();
X	int oerrno;
X	int f;
X 	char buf[ BUFSIZ ];
X
X	oerrno = errno;
X 	strcpy(buf, "xterm: ");
X 	sprintf(buf+strlen(buf), fmt, x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);
X 	strcat(buf, ": ");
X 	strcat(buf, SysErrorMsg (oerrno));
X 	strcat(buf, "\n");	
X	f = open("/dev/console",O_WRONLY);
X	write(f, buf, strlen(buf));
X	close(f);
X#ifdef TIOCNOTTY
X	if ((f = open("/dev/tty", 2)) >= 0) {
X		ioctl(f, TIOCNOTTY, (char *)NULL);
X#ifdef sgi
X#ifdef __KERNEL_BUSTED__TIOCNOTTY_MAKES_PROC_GROUP_LEADER__
X		BSDsetpgrp( 0, 0 ) ;
X#endif /* __KERNEL_BUSTED__TIOCNOTTY_MAKES_PROC_GROUP_LEADER__ */
X#endif /* sgi */
X		close(f);
X	}
X#endif	/* TIOCNOTTY */
X}
X
X
X#ifdef USE_TERMCAP
Xremove_termcap_entry (buf, str)
X    char *buf;
X    char *str;
X{
X    register char *strinbuf;
X
X    strinbuf = strindex (buf, str);
X    if (strinbuf) {
X        register char *colonPtr = index (strinbuf+1, ':');
X        if (colonPtr) {
X            while (*colonPtr) {
X                *strinbuf++ = *colonPtr++;      /* copy down */
X            }
X            *strinbuf = '\0';
X        } else {
X            strinbuf[1] = '\0';
X        }
X    }
X    return;
X}
X#endif /* USE_TERMCAP */
X
X/*
X * parse_tty_modes accepts lines of the following form:
X *
X *         [SETTING] ...
X *
X * where setting consists of the words in the modelist followed by a character
X * or ^char.
X */
Xstatic int parse_tty_modes (s, modelist)
X    char *s;
X    struct _xttymodes *modelist;
X{
X    struct _xttymodes *mp;
X    int c;
X    int count = 0;
X
X    while (1) {
X	while (*s && isascii(*s) && isspace(*s)) s++;
X	if (!*s) return count;
X
X	for (mp = modelist; mp->name; mp++) {
X	    if (strncmp (s, mp->name, mp->len) == 0) break;
X	}
X	if (!mp->name) return -1;
X
X	s += mp->len;
X	while (*s && isascii(*s) && isspace(*s)) s++;
X	if (!*s) return -1;
X
X	if (*s == '^') {
X	    s++;
X	    c = ((*s == '?') ? 0177 : *s & 31);	 /* keep control bits */
X	} else {
X	    c = *s;
X	}
X	mp->value = c;
X	mp->set = 1;
X	count++;
X	s++;
X    }
X}
X
X
Xint GetBytesAvailable (fd)
X    int fd;
X{
X#ifdef FIONREAD
X    static long arg;
X    ioctl (fd, FIONREAD, (char *) &arg);
X    return (int) arg;
X#else
X    struct pollfd pollfds[1];
X
X    pollfds[0].fd = fd;
X    pollfds[0].events = POLLIN;
X    return poll (pollfds, 1, 0);
X#endif
X}
END_OF_FILE
if test 15850 -ne `wc -c <'xterm/main.c.ac'`; then
    echo shar: \"'xterm/main.c.ac'\" unpacked with wrong size!
fi
# end of 'xterm/main.c.ac'
fi
if test -f 'xterm/xterm.man.aa' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xterm/xterm.man.aa'\"
else
echo shar: Extracting \"'xterm/xterm.man.aa'\" \(37062 characters\)
sed "s/^X//" >'xterm/xterm.man.aa' <<'END_OF_FILE'
X.TH XTERM 1 "Release 4" "X Version 11"
X.SH NAME
Xxterm \- terminal emulator for X
X.SH SYNOPSIS
X.B xterm
X[-\fItoolkitoption\fP ...] [-option ...]
X.SH DESCRIPTION
XThe \fIxterm\fP program is a terminal emulator for the X Window System.
XIt provides DEC VT102 and Tektronix 4014 
Xcompatible terminals for programs that can't
Xuse the window system directly.  If the underlying operating system supports 
Xterminal resizing capabilities (for example, the SIGWINCH signal in systems 
Xderived from 4.3bsd), \fIxterm\fP will use the facilities to notify programs 
Xrunning in the window whenever it is resized.
X.PP
XThe VT102 and Tektronix 4014 terminals each have their own window so that you
Xcan edit text in one and look at graphics in the other at the same time.
XTo maintain the correct aspect ratio (height/width), Tektronix graphics will
Xbe restricted to the largest box with a 4014's aspect ratio that will fit in 
Xthe window.  This box is located in the upper left area of the window.
X.PP
XAlthough both windows may be displayed at the same time, one of them is 
Xconsidered the ``active'' window for receiving keyboard input and terminal
Xoutput.  This is the window that contains the text cursor and whose border 
Xhighlights whenever the pointer is in either window.
XThe active window can be chosen through escape sequences,
Xthe ``Modes'' menu in the VT102 window, and the ``Tektronix''
Xmenu in the 4014 window.
X.SH OPTIONS
XThe \fIxterm\fP terminal emulator 
Xaccepts all of the standard X Toolkit command line options as well as
Xthe following (if the option begins with a
X.RB ` + '
Xinstead of a
X.RB ` \- ',
Xthe option is restored to its default value):
X.TP 8
X.B \-help
XThis causes \fIxterm\fP to print out a verbose message describing its options.
X.TP 8
X.B \-132
XNormally, the VT102 DECCOLM escape sequence that switches between 80 and
X132 column mode is ignored.
XThis option causes the DECCOLM escape sequence to be recognized, and the
X.I xterm
Xwindow will resize appropriately.
X.TP 8
X.B \-ah
XThis option indicates that 
X.I xterm
Xshould always highlight the text cursor and borders.  By default,
X.I xterm
Xwill display a hollow text cursor whenever the focus is lost or the 
Xpointer leaves the window.
X.TP 8
X.B \+ah
XThis option indicates that
X.I xterm
Xshould do text cursor highlighting.
X.TP 8
X.BI \-b " number"
XThis option specifies the size of the inner border (the distance between
Xthe outer edge of the characters and the window border) in pixels.  The
Xdefault is 2.
X.TP 8
X.B "\-cc \fIcharacterclassrange\fP:\fIvalue\fP[,...]"
XThis sets classes indicated by the given ranges for using in selecting by
Xwords.  See the section specifying character classes.
X.TP 8
X.B "\-cn"
XThis option indicates that newlines should not be cut in line-mode 
Xselections.
X.TP 8
X.B \+cn
XThis option indicates that newlines should be cut in line-mode selections.
X.TP 8
X.BI \-cr " color"
XThis option specifies the color to use for text cursor.  The default is to
Xuse the same foreground color that is used for text.
X.TP 8
X.B \-cu
XThis option indicates that \fIxterm\fP should work around a bug in the
X.IR curses (3x)
Xcursor motion package that causes the
X.IR more (1)
Xprogram to display lines that are exactly the width of the window and
Xare followed by a line beginning with a tab to be displayed incorrectly
X(the leading tabs are not displayed).
X.TP 8
X.B \+cu
XThis option indicates that that \fIxterm\fP should not work around the
X.IR curses (3x)
Xbug mentioned above.
X.TP 8
X.BI \-e " program \[arguments \.\.\.\]"
XThis option specifies the program (and its command line arguments) to be
Xrun in the \fIxterm\fP window.  It also sets the window title and icon
Xname to be the basename of the program being executed if neither \fI-T\fP
Xnor \fI-n\fP are given on the command line.  \fBThis must be the last 
Xoption on the command line.\fP
X.TP 8
X.BI \-fb " font"
XThis option specifies a font to be used when displaying bold text.  
XThis font must be the same height and width as the normal font.
XIf only one of the normal or bold fonts is specified, it will be used as the
Xnormal font and the bold font will be produced by overstriking this font.
XThe default is to do overstriking of the normal font.
X.TP 8
X.B \-j
XThis option indicates that \fIxterm\fP should do jump scrolling.  Normally,
Xtext is scrolled one line at a time; this option allows \fIxterm\fP to move
Xmultiple lines at a time so that it doesn't fall as far behind.  Its use is
Xstrongly recommended since it make \fIxterm\fP much faster when scanning
Xthrough large amounts of text.  The VT100 escape sequences for enabling and
Xdisabling smooth scroll as well as the ``Modes'' menu can be used to turn this
Xfeature on or off.
X.TP 8
X.B \+j
XThis option indicates that \fIxterm\fP should not do jump scrolling.
X.TP 8
X.B \-blt
XThis option indicates that \fIxterm\fP should scroll by copying the text
Xthat is to be scrolled from one part of the window to another and then
Xdrawing text that was not available to be copied into the remaining area
Xof the window.  This is the normal method for scrolling as copying is
Xusually faster than drawing text.  The ``Modes'' menu can be used to
Xturn this feature on or off.
X.TP 8
X.B \+blt
XThis option indicates that \fIxterm\fP should not do blt scrolling.
XInstead, the entire contents of the scrolled region are redrawn.  This
Xis faster on some machines.
X.TP 8
X.B \-l
XThis option indicates that \fIxterm\fP should send all terminal output to
Xa log file as well as to the screen.  This option can be enabled or disabled
Xusing the ``xterm X11'' menu.
X.TP 8
X.B \+l
XThis option indicates that \fIxterm\fP should not do logging.
X.TP 8
X.BI \-lf " filename"
XThis option specifies the name of the file to which the output log described
Xabove is written.  If \fIfile\fP begins with a pipe symbol (|), the rest of 
Xthe string is assumed to be a command to be used as the endpoint of a pipe.
XThe default filename is ``\fBXtermLog.\fIXXXXX\fR'' (where \fIXXXXX\fP
Xis the process id of \fIxterm\fP) and is created in the directory from which
X\fIxterm\fP was started (or the user's home directory in the case of a
Xlogin window).
X.TP 8
X.B \-ls
XThis option indicates that the shell that is started in the \fIxterm\fP window
Xbe a login shell (i.e. the first character of argv[0] will be a dash,
Xindicating to the shell that it should read the user's .login or .profile).
X.TP 8
X.B \+ls
XThis option indicates that the shell that is started should not be a login
Xshell (i.e. it will be a normal ``subshell'').
X.TP 8
X.B \-mb
XThis option indicates that \fIxterm\fP should ring a margin bell when
Xthe user types near the right end of a line.  This option can be turned on 
Xand off from the ``Modes'' menu.
X.TP 8
X.B \+mb
XThis option indicates that margin bell should not be rung.
X.TP 8
X.B "\-mc milliseconds"
XThis option specifies the maximum time between multi-click selections.
X.TP 8
X.BI \-ms " color"
XThis option specifies the color to be used for the pointer cursor.  The default
Xis to use the foreground color.
X.TP 8
X.BI \-nb " number"
XThis option specifies the number of characters from the right end of a line
Xat which the margin bell, if enabled, will ring.  The default is 10.
X.TP 8
X.B \-rw
XThis option indicates that reverse-wraparound should be allowed.  This allows
Xthe cursor to back up from the leftmost column of one line to the rightmost
Xcolumn of the previous line.  This is very useful for editing long shell
Xcommand lines and is encouraged.  This option can be turned on and off from
Xthe ``Modes'' menu.
X.TP 8
X.B \+rw
XThis option indicates that reverse-wraparound should not be allowed.
X.TP 8
X.B \-aw
XThis option indicates that auto-wraparound should be allowed.  This
Xallows the cursor to automatically wrap to the beginning of the next
Xline when when it is at the rightmost position of a line and text is
Xoutput.
X.TP 8
X.B \+aw
XThis option indicates that auto-wraparound should not be allowed.
X.TP 8
X.B \-s
XThis option indicates that \fIxterm\fP may scroll asynchronously, meaning that
Xthe screen does not have to be kept completely up to date while scrolling.
XThis allows \fIxterm\fP to run faster when network latencies are very high
Xand is typically useful when running across a very large internet or many
Xgateways.
X.TP 8
X.B \+s
XThis option indicates that \fIxterm\fP should scroll synchronously.
X.TP 8
X.B \-sb
XThis option indicates that some number of lines that are scrolled off the top 
Xof the window should be saved and that a scrollbar should be displayed so that
Xthose lines can be viewed.  This option may be turned on and off from the
X``Modes'' menu.
X.TP 8
X.B \+sb
XThis option indicates that a scrollbar should not be displayed.
X.TP 8
X.B \-sf
XThis option indicates that Sun Function Key escape codes should be generated
Xfor function keys.
X.TP 8
X.B \+sf
XThis option indicates that the standard escape codes should be generated for
Xfunction keys.
X.TP 8
X.B \-si
XThis option indicates that output to a window should not automatically
Xreposition the screen to the bottom of the scrolling region.  
XThis option can be turned on and off from the ``Modes'' menu.
X.TP 8
X.B \+si
XThis option indicates that output to a window should cause it to
Xscroll to the bottom.
X.TP 8
X.B \-sk
XThis option indicates that pressing a key while 
Xusing the scrollbar to review previous lines of text should
Xcause the window to be repositioned automatically in the normal position at the
Xbottom of the scroll region.
X.TP 8
X.B \+sk
XThis option indicates that pressing a key while using the scrollbar
Xshould not cause the window to be repositioned.
X.TP 8
X.BI \-sl " number"
XThis option specifies the number of lines to save that have been scrolled 
Xoff the top of the screen.  The default is 64.
X.TP 8
X.B \-t
XThis option indicates that \fIxterm\fP should start in Tektronix mode, rather
Xthan in VT102 mode.  Switching between the two windows is done using the
X``Modes'' menus.
X.TP 8
X.B \+t
XThis option indicates that \fIxterm\fP should start in VT102 mode.
X.TP 8
X.BI \-tm " string"
XThis option specifies a series of terminal setting keywords followed by the
Xcharacters that should be bound to those functions, similar to the \fIstty\fP
Xprogram.  Allowable keywords include: intr, quit, erase, kill, eof,
Xeol, swtch, start, stop, brk, susp, dsusp, rprnt, flush, weras, and lnext.
XControl characters may be specified as ^char (e.g. ^c or ^u) and ^? may be 
Xused to indicate delete.
X.TP 8
X.BI \-tn " name"
XThis option specifies the name of the terminal type to be set in the TERM
Xenvironment variable.  This terminal type must exist in the \fItermcap(5)\fP
Xdatabase and should have \fIli#\fP and \fIco#\fP entries.
X.TP 8
X.B \-ut
XThis option indicates that \fIxterm\fP shouldn't write a record into the 
Xthe system log file \fI/etc/utmp\fP.
X.TP 8
X.B \+ut
XThis option indicates that \fIxterm\fP should write a record into the system
Xlog file \fI/etc/utmp\fP.
X.TP 8
X.B \-vb
XThis option indicates that a visual bell is preferred over an audible one.
XInstead of ringing the terminal bell whenever a Control-G is received, the
Xwindow will be flashed.
X.TP 8
X.B \+vb
XThis option indicates that a visual bell should not be used.
X.TP 8
X.B \-wf
XThis option indicates that \fIxterm\fP should wait for the window to be mapped
Xthe first time before starting the subprocess so that the initial terminal
Xsize settings and environment variables are correct.  It is the application's
Xresponsibility to catch subsequent terminal size changes.
X.TP 8
X.B \+wf
XThis option indicates that \fIxterm\fP show not wait before starting the
Xsubprocess.
X.TP 8
X.B \-C
XThis option indicates that this window should receive console output.  This
Xis not supported on all systems.
X.TP 8
X.B \-S\fIccn\fP
XThis option specifies the last two letters of the name of a pseudoterminal
Xto use in slave mode, plus the number of the inherited file descriptor.
XThe option is parsed "%c%c%d".
XThis allows \fIxterm\fP to be used as an input and
Xoutput channel for an existing program and is sometimes used in specialized
Xapplications.
X.PP
XThe following command line arguments are provided for compatibility with
Xolder versions.  They may not be supported in the next release as the X 
XToolkit provides standard options that accomplish the same task.
X.TP 8
X.B "%\fIgeom\fP"
XThis option specifies the preferred size and position of the Tektronix window.
XIt is shorthand for specifying the "\fI*tekGeometry\fP" resource.
X.TP 8
X.B \#\fIgeom\fP
XThis option specifies the preferred position of the icon window.
XIt is shorthand for specifying the "\fI*iconGeometry\fP" resource.
X.TP 8
X.BI \-T " string"
XThis option specifies the title for \fIxterm\fP's windows.
XIt is equivalent to \fB-title\fP.
X.TP 8
X.BI \-n " string"
XThis option specifies the icon name for \fIxterm\fP's windows.
XIt is shorthand for specifying the "\fI*iconName\fP" resource.
XNote that this is not the same as the toolkit option \fB-name\fP (see below).
XThe default icon name is the application name.
X.TP 8
X.B \-r
XThis option indicates that reverse video should be simulated by swapping
Xthe foreground and background colors.  It is equivalent to
X\fB-reversevideo\fP or \fB-rv\fP.
X.TP 8
X.BI \-w " number"
XThis option specifies the width in pixels of the border surrounding the window.
XIt is equivalent to \fB-borderwidth\fP or \fB-bw\fP.
X.PP
XThe following standard X Toolkit command line arguments are commonly used 
Xwith \fIxterm\fP:
X.TP 8
X.B \-bg \fIcolor\fP
XThis option specifies the color to use for the background of the window.  
XThe default is ``white.''
X.TP 8
X.B \-bd \fIcolor\fP
XThis option specifies the color to use for the border of the window.
XThe default is ``black.''
X.TP 8
X.B \-bw \fInumber\fP
XThis option specifies the width in pixels of the border surrounding the window.
X.TP 8
X.B \-fg \fIcolor\fP
XThis option specifies the color to use for displaying text.  The default is 
X``black''.
X.TP 8
X.B \-fn \fIfont\fP
XThis option specifies the font to be used for displaying normal text.  The
Xdefault is \fIfixed\fP.
X.TP 8
X.B \-name \fIname\fP
XThis option specifies the application name under which resources are to be
Xobtained, rather than the default executable file name.
X\fIName\fP should not contain ``.'' or ``*'' characters.
X.TP 8
X.B \-title \fIstring\fP
XThis option specifies the window title string, which may be displayed by
Xwindow managers if the user so chooses.  The default title is the command
Xline specified after the \fB-e\fP option, if any, otherwise the application
Xname.
X.TP 8
X.B \-rv
XThis option indicates that reverse video should be simulated by swapping
Xthe foreground and background colors.
X.TP 8
X.B \-geometry \fIgeometry\fP
XThis option specifies the preferred size and position of the VT102 window;
Xsee \fIX(1)\fP.
X.TP 8
X.B \-display \fIdisplay\fP
XThis option specifies the X server to contact; see \fIX(1)\fP.
X.TP 8
X.B \-xrm \fIresourcestring\fP
XThis option specifies a resource string to be used.  This is especially
Xuseful for setting resources that do not have separate command line options.
X.TP 8
X.B \-iconic
XThis option indicates that \fIxterm\fP should ask the window manager to 
Xstart it as an icon rather than as the normal window.
X.B \-dc
XThis option disables the escape sequence to change the vt100 foreground
Xand background colors, the text cursor color, the mouse cursor foreground
Xand background colors and the Tektronix emulator foreground and background
Xcolors.
X.B \+dc
XThis option enables the escape sequence to change the vt100 foreground
Xand background colors, the text cursor color, the mouse cursor foreground
Xand background colors and the Tektronix emulator foreground and background
X.SH RESOURCES
XThe program understands all of the core X Toolkit resource names and
Xclasses as well as:
X.\".in +1in
X.TP 8
X.B "iconGeometry (\fPclass\fB IconGeometry)"
XSpecifies the preferred size and position of the application when iconified.
XIt is not necessarily obeyed by all window managers.
X.TP 8
X.B "termName (\fPclass\fB TermName)"
XSpecifies the terminal type name to be set in the TERM environment variable.
X.TP 8
X.B "title (\fPclass\fB Title)"
XSpecifies a string that may be used by the window manager when displaying
Xthis application.
X.TP 8
X.B "ttyModes (\fPclass\fB TtyModes)"
XSpecifies a string containing terminal setting keywords and the characters
Xto which they may be bound.  Allowable keywords include: intr, quit, 
Xerase, kill, eof, eol, swtch, start, stop, brk, susp, dsusp, rprnt, flush, 
Xweras, and lnext.  Control characters may be specified as ^char (e.g. ^c or ^u)
Xand ^? may be used to indicate delete.  This is very useful for overriding
Xthe default terminal settings without having to do an \fIstty\fP every time
Xan \fIxterm\fP is started.
X.TP 8
X.B "utmpInhibit (\fPclass\fB UtmpInhibit)"
XSpecifies whether or not \fIxterm\fP should try to record the user's terminal
Xin \fI/etc/utmp\fP.
X.TP 8
X.B "sunFunctionKeys (\fPclass\fB SunFunctionKeys)"
XSpecifies whether or not Sun Function Key escape codes should be generated for
Xfunction keys instead of standard escape sequences.
X.\".in -1in
X.sp
X.PP
XThe following resources are specified as part of the \fIvt100\fP widget (class
X\fIVT100\fP):
X.\".in +1in
X.TP 8
X.B "allowSendEvents (\fPclass\fB AllowSendEvents)"
XSpecifies whether or not synthetic key and button events (generated using
Xthe X protocol SendEvent request) should be interpreted or discarded.
XThe default is ``false'' meaning they are discarded.  Note that allowing
Xsuch events creates a very large security hole.
X.sp
X.TP 8
X.B "alwaysHighlight (\fPclass\fB AlwaysHighlight)"
XSpecifies whether or not \fIxterm\fP should always display a highlighted 
Xtext cursor.  By default, a hollow text cursor is displayed whenever the
Xpointer moves out of the window or the window loses the input focus.
X.TP 8
X.B "bltScroll (\fPclass\fB BltScroll)"
XSpecifies whether or not blt scroll should be used.  The default is ``true''.
X.TP 8
X.B "boldFont (\fPclass\fB Font)"
XSpecifies the name of the bold font to use instead of overstriking.
X.TP 8
X.B "c132 (\fPclass\fB C132)"
XSpecifies whether or not the VT102 DECCOLM escape sequence should be honored.
XThe default is ``false.''
X.TP 8
X.B "charClass (\fPclass\fB CharClass)"
XSpecifies comma-separated lists of character class bindings of the form
X\[\fIlow\fP-\]\fIhigh\fP:\fIvalue\fP.  These are used in determining which
Xsets of characters should be treated the same when doing cut and paste.
XSee the section on specifying character classes.
X.TP 8
Xcolor0 (\fPclass\fB Foreground)
X.TP 8
Xcolor1 (\fPclass\fB Foreground)
X.TP 8
Xcolor2 (\fPclass\fB Foreground)
X.TP 8
Xcolor3 (\fPclass\fB Foreground)
X.TP 8
Xcolor4 (\fPclass\fB Foreground)
X.TP 8
Xcolor5 (\fPclass\fB Foreground)
X.TP 8
Xcolor6 (\fPclass\fB Foreground)
X.TP 8
X.B "color7 (\fPclass\fB Foreground)"
XThese specify the colors for the ISO 6429 extension.  The defaults are,
Xrespectively, black, red, green, yellow, blue, magenta, cyan, and white.
X.TP 8
X.B "curses (\fPclass\fB Curses)"
XSpecifies whether or not the last column bug in
X.IR curses (3x)
Xshould be worked around.
XThe default is ``false.''
X.TP 8
X.B "background (\fPclass\fB Background)"
XSpecifies the color to use for the background of the window.  The default is 
X``white.''
X.TP 8
X.B "foreground (\fPclass\fB Foreground)"
XSpecifies the color to use for displaying text in the window.  Setting the
Xclass name instead of the instance name is an easy way to have everything
Xthat would normally appear in the "text" color change color.  The default
Xis ``black.''
X.TP 8
X.B "cursorColor (\fPclass\fB Foreground)"
XSpecifies the color to use for the text cursor.  The default is ``black.''
X.TP 8
X.B "eightBitInput (\fPclass\fB EightBitInput\fP)"
XSpecifies whether or not eight-bit characters input from the keyboard should
Xbe accepted as is or converted into a sequence of escape-7bit characters.
XThe default is ``true.''
X.TP 8
X.B "eightBitOutput (\fPclass\fB EightBitOutput\fP)"
XSpecifies whether or not eight-bit characters sent from the host should be
Xaccepted as is or stripped when printed.  The default is ``true.''
X.TP 8
X.B "font (\fPclass\fB Font)"
XSpecifies the name of the normal font.  The default is ``fixed.''
X.TP 8
X.B "font1 (\fPclass\fB Font1)"
XSpecifies the name of the first alternate font.
X.TP 8
X.B "font2 (\fPclass\fB Font2)"
XSpecifies the name of the second alternate font.
X.TP 8
X.B "font3 (\fPclass\fB Font3)"
XSpecifies the name of the third alternate font.
X.TP 8
X.B "font4 (\fPclass\fB Font4)"
XSpecifies the name of the fourth alternate font.
X.TP 8
X.B "geometry (\fPclass\fB Geometry)"
XSpecifies the preferred size and position of the VT102 window.
X.TP 8
X.B "internalBorder (\fPclass\fB BorderWidth)"
XSpecifies the number of pixels between the characters and the window border.
XThe default is 2.
X.TP 8
X.B "jumpScroll (\fPclass\fB JumpScroll)"
XSpecifies whether or not jump scroll should be used.  The default is ``true''.
X.TP 8
X.B "logFile (\fPclass\fB Logfile)"
XSpecifies the name of the file to which a terminal session is logged.  The
Xdefault is ``\fBXtermLog.\fIXXXXX\fR'' (where \fIXXXXX\fP
Xis the process id of \fIxterm\fP).
X.TP 8
X.B "logging (\fPclass\fB Logging)"
XSpecifies whether or not a terminal session should be logged.  The default is
X``false.''
X.TP 8
X.B "logInhibit (\fPclass\fB LogInhibit)"
XSpecifies whether or not terminal session logging should be inhibited.  The
Xdefault is ``false.''
X.TP 8
X.B "loginShell (\fPclass\fB LoginShell)"
XSpecifies whether or not the shell to be run in the window should be started
Xas a login shell.  The default is ``false.''
X.TP 8
X.B "marginBell (\fPclass\fB MarginBell)"
XSpecifies whether or not the bell should be run when the user types near the
Xright margin.  The default is ``false.''
X.TP 8
X.B "multiScroll (\fPclass\fB MultiScroll)"
XSpecifies whether or not asynchronous scrolling is allowed.  The default is
X``false.''
X.TP 8
X.B "multiClickTime (\fPclass\fB MultiClickTime)"
XSpecifies the maximum time in milliseconds between multi-clock select
Xevents.  The default is 250 milliseconds.
X.TP 8
X.B "multiScroll (\fPclass\fB MultiScroll)"
XSpecifies whether or not scrolling should be done asynchronously.  The default
Xis ``false.''
X.TP 8
X.B "nMarginBell (\fPclass\fB Column)"
XSpecifies the number of characters from the right margin at which the margin
Xbell should be run, when enabled.
X.TP 8
X.B "pointerColor (\fPclass\fB Foreground)"
XSpecifies the foreground color of the pointer.  The default is 
X``XtDefaultForeground.''
X.TP 8
X.B "pointerColorBackground (\fPclass\fB Background)"
XSpecifies the background color of the pointer.  The default is
X``XtDefaultBackground.''
X.TP 8
X.B "pointerShape (\fPclass\fB Cursor)"
XSpecifies the name of the shape of the pointer.  The default is ``xterm.''
X.TP 8
X.B "dynamicColors (\fPclass\fB DynamicColors)"
XSpecifies whether or not dynamic modification of colors using the escape
Xsequence is allowed.
X.TP 8
X.B "reverseVideo (\fPclass\fB ReverseVideo)"
XSpecifies whether or not reverse video should be simulated.  The default is
X``false.''
X.TP 8
X.B "reverseWrap (\fPclass\fB ReverseWrap)"
XSpecifies whether or not reverse-wraparound should be enabled.  The default is
X``false.''
X.TP 8
X.B "autoWrap (\fPclass\fB AutoWrap)"
XSpecifies whether or not auto-wraparound should be enabled.  The
Xdefault is ``true.''
X.TP 8
X.B "saveLines (\fPclass\fB SaveLines)"
XSpecifies the number of lines to save beyond the top of the screen when a
Xscrollbar is turned on.  The default is 64.
X.TP 8
X.B "scrollBar (\fPclass\fB ScrollBar)"
XSpecifies whether or not the scrollbar should be displayed.  The default is
X``false.''
X.TP 8
X.B "scrollTtyOutput (\fPclass\fB ScrollCond)"
XSpecifies whether or not output to the terminal should automatically cause
Xthe scrollbar to go to the bottom of the scrolling region.  The default is
X``true.''
X.TP 8
X.B "scrollKey (\fPclass\fB ScrollCond)"
XSpecifies whether or not pressing a key should automatically cause the
Xscrollbar to go to the bottom of the scrolling region.  The default is
X``false.''
X.TP 8
X.B "scrollLines (\fPclass\fB ScrollLines)"
XSpecifies the number of lines that the \fIscroll-back\fP and
X\fIscroll-forw\fP actions should use as a default.  The default value is 1.
X.TP 8
X.B "signalInhibit (\fPclass\fB SignalInhibit)"
XSpecifies whether or not the entries in the ``xterm X11'' menu for sending
Xsignals to \fIxterm\fP should be disallowed.  The default is ``false.''
X.TP 8
X.B "tekGeometry (\fPclass\fB Geometry)"
XSpecifies the preferred size and position of the Tektronix window.
X.TP 8
X.B "tekInhibit (\fPclass\fB TekInhibit)"
XSpecifies whether or not Tektronix mode should be disallowed.  The default is
X``false.''
X.TP 8
X.B "tekSmall (\fPclass\fB TekSmall)"
XSpecifies whether or not the Tektronix mode window should start in its smallest
Xsize if no explicit geometry is given.  This is useful when running \fIxterm\fP
Xon displays with small screens.  The default is ``false.''
X.TP 8
X.B "tekStartup (\fPclass\fB TekStartup)"
XSpecifies whether or not \fIxterm\fP should start up in Tektronix mode.
XThe default is ``false.''
X.TP 8
X.B "titeInhibit (\fPclass\fB TiteInhibit)"
XSpecifies whether or not \fIxterm\fP should remove remove \fIti\fP or \fIte\fP
Xtermcap entries (used to switch between alternate screens on startup of many
Xscreen-oriented programs) from the TERMCAP string.
X.TP 8
X.B "translations (\fPclass\fB Translations)"
XSpecifies the key and button bindings for menus, selections, ``programmed
Xstrings'', etc.  See \fBACTIONS\fP below.
X.TP 8
X.B "visualBell (\fPclass\fB VisualBell)"
XSpecifies whether or not a visible bell (i.e. flashing) should be used instead
Xof an audible bell when Control-G is received.  The default is ``false.''
X.TP 8
X.B "waitForMap (\fPclass\fB WaitForMap)"
XSpecifies whether or not \fIxterm\fP should wait for the initial window map
Xbefore starting the subprocess.  The default is ``false.''
X.\".in 11in
X.sp
X.PP
XThe following resources are specified as part of the \fItek4014\fP widget
X(class \fITek4014\fP):
X.\".in +1in
X.TP 8
X.B "width (\fPclass\fB Width)"
XSpecifies the width of the Tektronix window in pixels.
X.TP 8
X.B "height (\fPclass\fB Height)"
XSpecifies the height of the Tektronix window in pixels.
X.TP 8
X.B "fontLarge (\fPclass\fB Font)"
XSpecifies the large font to use in the Tektronix window.
X.TP 8
X.B "font2 (\fPclass\fB Font)"
XSpecifies font number 2 to use in the Tektronix window.
X.TP 8
X.B "font3 (\fPclass\fB Font)"
XSpecifies font number 2 font to use in the Tektronix window.
X.TP 8
X.B "fontSmall (\fPclass\fB Font)"
XSpecifies the small font to use in the Tektronix window.
X.\".in -1in
X.sp
X.PP
XThe resources that may be specified for the various menus are described in
Xthe documentation for the Athena \fBSimpleMenu\fP widget.  The name and classes
Xof the entries in each of the menus are listed below.
X.PP
XThe \fImainMenu\fP has the following entries:
X.\".in +1in
X.TP 8
X.B "securekbd (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsecure()\fP action.
X.TP 8
X.B "allowsends (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBallow-send-events(toggle)\fP action.
X.TP 8
X.B "logging (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-logging(toggle)\fP action.
X.TP 8
X.B "redraw (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBredraw()\fP action.
X.TP 8
X.B "line1 (\fPclass\fB SmeLine)"
XThis is a separator.
X.TP 8
X.B "suspend (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsend-signal(suspend)\fP action on systems that
Xsupport job control.
X.TP 8
X.B "continue (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsend-signal(cont)\fP action on systems that
Xsupport job control.
X.TP 8
X.B "interrupt (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsend-signal(int)\fP action.
X.TP 8
X.B "hangup (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsend-signal(hup)\fP action.
X.TP 8
X.B "terminate (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsend-signal(term)\fP action.
X.TP 8
X.B "kill (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsend-signal(kill)\fP action.
X.TP 8
X.B "line2 (\fPclass\fB SmeLine)"
XThis is a separator.
X.TP 8
X.B "quit (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBquit()\fP action.
X.\".in -1in
X.sp
X.PP
XThe \fIvtMenu\fP has the following entries:
X.\".in +1in
X.TP 8
X.B "scrollbar (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-scrollbar(toggle)\fP action.
X.TP 8
X.B "jumpscroll (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-jumpscroll(toggle)\fP action.
X.TP 8
X.B "bltscroll (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-bltscroll(toggle)\fP action.
X.TP 8
X.B "reversevideo (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-reverse-video(toggle)\fP action.
X.TP 8
X.B "autowrap (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-autowrap(toggle)\fP action.
X.TP 8
X.B "reversewrap (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-reversewrap(toggle)\fP action.
X.TP 8
X.B "autolinefeed (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-autolinefeed(toggle)\fP action.
X.TP 8
X.B "appcursor (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-appcursor(toggle)\fP action.
X.TP 8
X.B "appkeypad (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-appkeypad(toggle)\fP action.
X.TP 8
X.B "scrollkey (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-scroll-on-key(toggle)\fP action.
X.TP 8
X.B "scrollttyoutput (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-scroll-on-tty-output(toggle)\fP action.
X.TP 8
X.B "allow132 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-allow132(toggle)\fP action.
X.TP 8
X.B "cursesemul (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-cursesemul(toggle)\fP action.
X.TP 8
X.B "visualbell (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-visualbell(toggle)\fP action.
X.TP 8
X.B "marginbell (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-marginbell(toggle)\fP action.
X.TP 8
X.B "altscreen (\fPclass\fB SmeBSB)"
XThis entry is currently disabled.
X.TP 8
X.B "line1 (\fPclass\fB SmeLine)"
XThis is a separator.
X.TP 8
X.B "softreset (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBsoft-reset()\fP action.
X.TP 8
X.B "hardreset (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBhard-reset()\fP action.
X.TP 8
X.B "line2 (\fPclass\fB SmeLine)"
XThis is a separator.
X.TP 8
X.B "tekshow (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-visibility(tek,toggle)\fP action.
X.TP 8
X.B "tekmode (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-terminal-type(tek)\fP action.
X.TP 8
X.B "vthide (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-visibility(vt,off)\fP action.
X.\".in -1in
X.sp
X.PP
XThe \fIfontMenu\fP has the following entries:
X.\".in +1in
X.TP 8
X.B "fontdefault (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(d)\fP action.
X.TP 8
X.B "font1 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(1)\fP action.
X.TP 8
X.B "font2 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(2)\fP action.
X.TP 8
X.B "font3 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(3)\fP action.
X.TP 8
X.B "font4 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(4)\fP action.
X.TP 8
X.B "fontescape (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(e)\fP action.
X.TP 8
X.B "fontsel (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-vt-font(s)\fP action.
X.\".in -1in
X.sp
X.PP
XThe \fItekMenu\fP has the following entries:
X.\".in +1in
X.TP 8
X.B "tektextlarge (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-tek-text(l)\fP action.
X.TP 8
X.B "tektext2 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-tek-text(2)\fP action.
X.TP 8
X.B "tektext3 (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-tek-text(3)\fP action.
X.TP 8
X.B "tektextsmall (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-tek-text(s)\fP action.
X.TP 8
X.B "line1 (\fPclass\fB SmeLine)"
XThis is a separator.
X.TP 8
X.B "tekpage (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBtek-page()\fP action.
X.TP 8
X.B "tekreset (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBtek-reset()\fP action.
X.TP 8
X.B "tekcopy (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBtek-copy()\fP action.
X.TP 8
X.B "line2 (\fPclass\fB SmeLine)"
XThis is a separator.
X.TP 8
X.B "vtshow (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-visibility(vt,toggle)\fP action.
X.TP 8
X.B "vtmode (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-terminal-type(vt)\fP action.
X.TP 8
X.B "tekhide (\fPclass\fB SmeBSB)"
XThis entry invokes the \fBset-visibility(tek,toggle)\fP action.
X.\".in -1in
X.sp
X.PP
XThe following resources are useful when specified for the Athena Scrollbar
Xwidget:
X.\".in +1in
X.TP 8
X.B "thickness (\fPclass\fB Thickness)"
XSpecifies the width in pixels of the scrollbar.
X.TP 8
X.B "background (\fPclass\fB Background)"
XSpecifies the color to use for the background of the scrollbar.
X.TP 8
X.B "foreground (\fPclass\fB Foreground)"
XSpecifies the color to use for the foreground of the scrollbar.  The ``thumb''
Xof the scrollbar is a simple checkerboard pattern alternating pixels for
Xforeground and background color.
X.\".in -1in
X.SH EMULATIONS
XThe VT102 emulation is fairly complete, but does not support the blinking
Xcharacter attribute nor the double-wide and double-size character sets.
X.IR Termcap (5)
Xentries that work with
X.I xterm
Xinclude ``xterm'', ``vt102'', ``vt100'' and ``ansi'', and
X.I xterm
Xautomatically searches the termcap file in this order for these entries and then
Xsets the ``TERM'' and the ``TERMCAP'' environment variables.
X.PP
XMany of the special
X.I xterm
Xfeatures (like logging) may be modified under program control
Xthrough a set of escape sequences different from the standard VT102 escape
Xsequences.  
X(See the
X.I ``Xterm Control Sequences''
Xdocument.)
X.PP
XThe Tektronix 4014 emulation is also fairly good.
XFour different font sizes and five different lines types are supported.
XThe Tektronix text and graphics commands are recorded internally by
X.I xterm
Xand may be written to a file by sending the COPY escape sequence (or through
Xthe
X.B Tektronix
Xmenu; see below).
XThe name of the file will be
X``\fBCOPY\fIyy\fB\-\fIMM\fB\-\fIdd\fB.\fIhh\fB:\fImm\fB:\fIss\fR'', where
X.IR yy ,
X.IR MM ,
X.IR dd ,
X.IR hh ,
X.I mm
Xand
X.I ss
Xare the year, month, day, hour, minute and second when the COPY was performed
X(the file is created in the directory
X.I xterm
Xis started in, or the home directory for a login
X.IR xterm ).
X.SH "POINTER USAGE"
X.PP
XOnce the VT102 window is created,
X.I xterm
Xallows you to select text and copy it within the same or other windows.
X.PP
XThe selection functions are invoked when the pointer buttons are used with no
Xmodifiers, and when they are used with the ``shift'' key.
XThe assignment of the functions described below to keys and buttons may
Xbe changed through the resource database; see \fBACTIONS\fP below.
X.PP
XPointer button one (usually left) is used to save text into the cut buffer.
XMove the cursor to beginning of the text,
Xand then hold the button down while moving the cursor to the end of the region
Xand releasing the button.
XThe selected text is highlighted and is saved in the global cut buffer
Xand made the PRIMARY selection when
Xthe button is released.  Double-clicking selects by words.  Triple-clicking
Xselects by lines.  Quadruple-clicking goes back to characters, etc.
XMultiple-click is determined by the time from button up to
Xbutton down, so you can change the selection unit in the middle of a selection.
XIf the key/button bindings specify that an X selection is to be made,
X\fIxterm\fP will leave the selected text highlighted for as long as it
Xis the selection owner.
X.PP
XPointer button two (usually middle) `types' (pastes) the text from
Xthe PRIMARY selection, if any, otherwise from
Xthe cut buffer,
Xinserting it as keyboard input.
X.PP
XPointer button three (usually right) extends the current selection.
X(Without loss of generality,
Xthat is you can swap ``right'' and ``left'' everywhere in the rest of this
Xparagraph...)  If pressed while closer to
Xthe right edge of the selection than the left, it extends/contracts the
Xright edge of the selection.  If you contract the selection past
Xthe left edge of the selection,
X.I xterm
Xassumes you really meant the left edge, restores the original selection, then
Xextends/contracts the left edge of the selection.  Extension starts in the 
Xselection unit mode
Xthat the last selection or extension was performed in; you can multiple-click
Xto cycle through them.
X.PP
XBy cutting and pasting pieces of text without trailing new lines,
Xyou can take text from several places in different windows and form a command
Xto the shell, for example, or take output from a program and insert it into
Xyour favorite editor.
XSince the cut buffer is globally shared among different applications,
Xyou should regard it as a `file' whose contents you know.
XThe terminal emulator and other text programs should be treating it as if it
Xwere a text file, i.e. the text is delimited by new lines.
X.PP
XThe scroll region displays the position and amount of text currently showing
Xin the window (highlighted) relative to the amount of text actually saved.
XAs more text is saved (up to the maximum), the size of the highlighted area
Xdecreases.  
X.PP
XClicking button one with the pointer in the scroll region moves the
Xadjacent line to the top of the display window.
X.PP
XClicking button three moves the top line of the display window down to the
Xpointer position.
X.PP
XClicking button two moves the display to a position in the saved text
Xthat corresponds to the pointer's position in the scrollbar.
X.PP
X.PP
END_OF_FILE
if test 37062 -ne `wc -c <'xterm/xterm.man.aa'`; then
    echo shar: \"'xterm/xterm.man.aa'\" unpacked with wrong size!
fi
# end of 'xterm/xterm.man.aa'
fi
echo shar: End of archive 3 \(of 14\).
cp /dev/null ark3isdone
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.