v12i091: kterm - kanji xterm, Part10/18

mleisher at NMSU.Edu mleisher at NMSU.Edu
Sat May 11 10:50:27 AEST 1991


Submitted-by: mleisher at NMSU.Edu
Posting-number: Volume 12, Issue 91
Archive-name: kterm/part10

#!/bin/sh
# this is kt412.10 (part 10 of kterm-4.1.2)
# do not concatenate these parts, unpack them in order with /bin/sh
# file kterm-4.1.2/convlib.c continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 10; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping kterm-4.1.2/convlib.c'
else
echo 'x - continuing file kterm-4.1.2/convlib.c'
sed 's/^X//' << 'SHAR_EOF' >> 'kterm-4.1.2/convlib.c' &&
X	}
X
X	cap->display = disp;
X
X	/* create atoms */
X	cap->reqAtom = XInternAtom(disp, "CONVERSION_REQUEST", False);
X	cap->notifyAtom = XInternAtom(disp, "CONVERSION_NOTIFY", False);
X	cap->endAtom = XInternAtom(disp, "CONVERSION_END", False);
X	cap->endReqAtom = XInternAtom(disp, "CONVERSION_END_REQUEST", False);
X
X	ndisp++;
X
X	return cap;
}
X
static ConversionContext *
getConversionContext(w)
Widget	w;
/* gets the context from widget window
X * returns NULL if there is no such context
X */
{
X	ConversionContext	*context;
X
X	if (XFindContext(XtDisplay(w), XtWindow(w),
X			 convertPrivContext, (caddr_t *)&context)) {
X		/* error -- maybe the context is not found */
X		return NULL;
X	} else {
X		return context;
X	}
}
X
static void
recvConvAck(w, closure, ev)
Widget	w;
caddr_t	closure;
XXEvent	*ev;
{
X	XClientMessageEvent	*cev = &(ev->xclient);
X	ConversionAtoms		*cap;
X	ConversionContext	*context;
X
X	if (ev->type != ClientMessage)
X		return;
X
X	cap = getAtoms(w);
X	context = getConversionContext(w);
X
X	/* check if the event is correct */
X	if (cev->window != XtWindow(w) ||
X	    cev->message_type != cap->notifyAtom ||
X	    cev->data.l[0] != context->convatom)
X		return;
X
X	/* this event handler is no longer needed. so, remove it */
X	XtRemoveEventHandler(w, NoEventMask, True, recvConvAck, closure);
X
X	if (cev->data.l[2] == None) {
X		XtWarning("selection request failed");
X		XDeleteContext(XtDisplay(w), XtWindow(w), convertPrivContext);
X		XtFree((char *)context);
X		return;
X	}
X
X	/*
X	 * add an event handler for PropertyNotify and CONVERSION_END
X	 */
X	XtAddEventHandler(w, PropertyChangeMask, True, getConv, closure);
X
X	context->property = cev->data.l[2];
}
X
static void
getConv(w, closure, ev)
Widget	w;
caddr_t	closure;
XXEvent	*ev;
/* event handler that deals with PropertyNotify and ClientMessage events */
{
X	ConversionAtoms		*cap;
X	ConversionContext	*context;
X
X	/* check event type */
X	if (ev->type != PropertyNotify &&
X	    ev->type != ClientMessage)
X		return;
X
X	cap = getAtoms(w);
X	context = getConversionContext(w);
X
X	if (ev->type == ClientMessage) {
X		XClientMessageEvent	*cev = &(ev->xclient);
X
X		/* is it really CONVERSION_END event? */
X		if (cev->message_type == cap->endAtom &&
X		    cev->format == 32 &&
X		    cev->data.l[0] == context->convatom) {
X			/* delete window context */
X			XDeleteContext(XtDisplay(w), XtWindow(w),
X				       convertPrivContext);
X			/* remove this event handler */
X			XtRemoveEventHandler(w, PropertyChangeMask, True,
X					     getConv, closure);
X			XtFree((char *)context);
X		}
X	} else {	/* PropertyNotify */
X		XPropertyEvent	*pev = &(ev->xproperty);
X		Atom		proptype;
X		int		propformat;
X		unsigned long	propsize, rest;
X		unsigned char	*propvalue;
X
X		if (context->property == None)
X			return;
X
X		/* check if the event is what I need */
X		if (pev->window != XtWindow(w) ||
X		    pev->atom != context->property ||
X		    pev->state != PropertyNewValue) {
X			return;
X		}
X
X		/* if there is no callback function, we simply
X		 * delete property and return
X		 */
X		if (context->inputproc == NULL) {
X			XDeleteProperty(XtDisplay(w), XtWindow(w),
X					context->property);
X			return;
X		}
X
X		/* get conveted string from property */
X		XGetWindowProperty(XtDisplay(w), XtWindow(w),
X				   context->property,
X				   0, 100000, True, AnyPropertyType,
X				   &proptype, &propformat, &propsize, &rest,
X				   &propvalue);
X
X		if (proptype == None) {
X			/* property not exist -- but it's not an error */
X			return;
X		}
X
X		/* call callback */
X		(*context->inputproc)(w, context->convatom,
X				      proptype, propformat,
X				      propsize, propvalue,
X				      context->closure);
X	}
}
X
X
/*
X *	public functions
X */
X
void
_beginConversion(w, catom, tatom, inputproc, client_data)
Widget	w;
Atom	catom;			/* Selection Atom e.g. JAPANESE_CONVERSION */
Atom	tatom;			/* Property Type Atom e.g. COMPOUND_TEXT */
void	(*inputproc)();		/* conversion text callback function */
caddr_t	client_data;		/* client_data passed to callback function */
/* request conversion-service to conversion-server.
X * language is specified by catom.
X */
{
X	Window			owner;
X	XEvent			event;
X	ConversionAtoms		*cap;
X	ConversionContext	*context;
X
X	cap = getAtoms(w);
X
X	/* find conversion server */
X	if ((owner = XGetSelectionOwner(XtDisplay(w), catom)) == None) {
X		/*
X		 * No owner
X		 * if I'm in conversion mode, stop it.
X		 */
X		XtWarning("Conversion Server not found");
X		if ((context = getConversionContext(w)) != NULL) {
X			XtRemoveEventHandler(w, NoEventMask, True,
X					     recvConvAck, NULL);
X			XtRemoveEventHandler(w, PropertyChangeMask, True,
X					     getConv, NULL);
X			XDeleteContext(XtDisplay(w), XtWindow(w),
X				       convertPrivContext);
X			XtFree((char *)context);
X		}
X		return;
X	}
X
X	/*
X	 * Check if I am in conversion mode.
X	 * If so, return immediately... No, things are not so easy.
X	 * Because, if the conversion server was killed for some reason,
X	 * sometimes the application didn't get CONVERSION_END.
X	 * So, even if in conversion mode, get selection owner and
X	 * compare with the one saved.
X	 * Also I wanna check the time when it becomes the owner,
X	 * but I can't get it by GetSelectionOwber() as ICCCM says.
X	 */
X	if ((context = getConversionContext(w)) != NULL) {
X		Window	curOwner;
X		curOwner = (catom == context->convatom) ? owner :
X		    XGetSelectionOwner(XtDisplay(w), context->convatom);
X		if (curOwner == context->convowner) {
X			/* do nothing */
X			return;
X		}
X		/*
X		 * SelectionOwner has changed. The conversion server
X		 * was crushed. So, stop conversion.
X		 */
X		XtRemoveEventHandler(w, NoEventMask, True, recvConvAck, NULL);
X		XtRemoveEventHandler(w, PropertyChangeMask, True, getConv, NULL);
X		XDeleteContext(XtDisplay(w), XtWindow(w), convertPrivContext);
X		XtFree((char *)context);
X	}
X
X	/*
X	 * register a handler for CONVERSION_NOTIFY
X	 * from the conversion server.
X	 */
X	XtAddEventHandler(w, NoEventMask, True, recvConvAck, NULL);
X
X	/* make a new context and save data */
X	context = XtNew(ConversionContext);
X	context->convatom = catom;
X	context->convowner = owner;
X	context->property = None;
X	context->inputproc = inputproc;
X	context->closure = client_data;
X	XSaveContext(XtDisplay(w), XtWindow(w),
X		     convertPrivContext, (caddr_t)context);
X
X	/* request conversion by sending ClientMessage event */
X	event.xclient.type = ClientMessage;
X	event.xclient.window = owner;
X	event.xclient.message_type = cap->reqAtom;
X	event.xclient.format = 32;
X	event.xclient.data.l[0] = catom;
X	event.xclient.data.l[1] = XtWindow(w);
X	event.xclient.data.l[2] = tatom;
X	event.xclient.data.l[3] = catom;
X	event.xclient.data.l[4] = None;
X	XSendEvent(XtDisplay(w), owner, False, NoEventMask, &event);
}
X
void
_endConversion(w, catom, throwaway)
Widget	w;
Atom	catom;		/* Selection Atom */
Boolean	throwaway;
/* force to terminate conversion.
X * catom is a selection atom that is to be terminated.
X * by specifying None to catom, you can terminate current conversion.
X * if throwaway is true, all converted text sent after this call are
X * discarded.
X */
{
X	XEvent			event;
X	ConversionAtoms		*cap;
X	ConversionContext	*context;
X
X	cap = getAtoms(w);
X	context = getConversionContext(w);
X
X	if (context == NULL ||
X	    (catom != None && catom != context->convatom))
X		return;
X
X	if (XGetSelectionOwner(XtDisplay(w), context->convatom) !=
X	    context->convowner) {
X		/* conversion server is different, or does not exist */
X		XtRemoveEventHandler(w, NoEventMask, True, recvConvAck, NULL);
X		XtRemoveEventHandler(w, PropertyChangeMask, True, getConv, NULL);
X		/* delete window context */
X		XDeleteContext(XtDisplay(w), XtWindow(w), convertPrivContext);
X		XtFree((char *)context);
X		return;
X	}
X
X	if (throwaway)
X		context->inputproc = NULL;
X
X	event.xclient.type = ClientMessage;
X	event.xclient.window = context->convowner;
X	event.xclient.message_type = cap->endReqAtom;
X	event.xclient.format = 32;
X	event.xclient.data.l[0] = context->convatom;
X	event.xclient.data.l[1] = XtWindow(w);
X	XSendEvent(XtDisplay(w), context->convowner, False, NoEventMask, &event);
}
SHAR_EOF
echo 'File kterm-4.1.2/convlib.c is complete' &&
chmod 0664 kterm-4.1.2/convlib.c ||
echo 'restore of kterm-4.1.2/convlib.c failed'
Wc_c="`wc -c < 'kterm-4.1.2/convlib.c'`"
test 14017 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/convlib.c: original size 14017, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/ctlseqs.ms ==============
if test -f 'kterm-4.1.2/ctlseqs.ms' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/ctlseqs.ms (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/ctlseqs.ms (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/ctlseqs.ms' &&
.\"#! troff -Q -ms $1
.\" This is the "Xterm Control Sequences" document, originally written by
.\" Edward Moy, University of California, Berkeley, for the X.V10R4 xterm.
.\" Some minor edits have been made to begin to reconcile this document with
.\" the current sources, but it still has a long way to go:
.\"
.\"	1) I don't guarantee that this is 100% correct.  I tried most of
.\"	   the things that seemed to be different, and this document
.\"	   reflects what I saw.  Stuff that appears to be in the X10R4
.\"	   document and missing from this document is so because it
.\"	   appears not to be present in the X11 version of "xterm" (e.g.,
.\"	   the "Alternate Character ROM" character sets and the Sun TTY
.\"	   emulation).
.\"
.\"	2) It is definitely not 100% complete; some escape sequences
.\"	   that do something that's either unobservable - at least in
.\"	   the current state of the code - or not useful aren't
.\"	   documented.  An example of the former are the Locking Shift
.\"	   sequences that modify the interpretation of the GR
.\"	   characters; at present, it sets a state variable that's
.\"	   unused, but perhaps some future version will use it (perhaps
.\"	   for displaying characters in the range 0200-0377?).  An
.\"	   example of the latter is the sequence to set DECANM mode
.\"	   (ANSI/VT52 mode): it doesn't do what it does on a VT100,
.\"	   namely get the terminal to emulate a VT100, it only seems to
.\"	   fiddle the current character set a bit.
.\"
.\"	3) It doesn't document any of the mouse-related stuff, such as
.\"	   what the "Track Mouse" escape sequence does, or what the
.\"	   different mouse modes (MIT, VT220, "VT220 Hilite") do; I
.\"	   leave that to somebody familiar with that part of the code....
.\"
.\" Run this file through troff and use the -ms macro package.
.ND
.de St
.sp
.nr PD 0
.nr PI 1.5i
.nr VS 16
.
.de Ed
.nr PD .3v
.nr VS 12
.
.rm CH
.ds LH Xterm Control Sequences
.nr s 6*\n(PS/10
.ds L \s\nsBEL\s0
.ds E \s\nsESC\s0
.ds T \s\nsTAB\s0
.ds X \s\nsETX\s0
.ds N \s\nsENQ\s0
.ds e \s\nsETB\s0
.ds C \s\nsCAN\s0
.ds S \s\nsSUB\s0
.nr [W \w'\*L'u
.nr w \w'\*E'u
.if \nw>\n([W .nr [W \nw
.nr w \w'\*T'u
.if \nw>\n([W .nr [W \nw
.nr w \w'\*X'u
.if \nw>\n([W .nr [W \nw
.nr w \w'\*N'u
.if \nw>\n([W .nr [W \nw
.nr w \w'\*e'u
.if \nw>\n([W .nr [W \nw
.nr w \w'\*C'u
.if \nw>\n([W .nr [W \nw
.nr w \w'\*S'u
.if \nw>\n([W .nr [W \nw
.nr [W +\w'\|\|'u
.de []
.nr w \w'\\$2'
.nr H \\n([Wu-\\nwu
.nr h \\nHu/2u
.ds \\$1 \(br\v'-1p'\(br\v'1p'\h'\\nhu'\\$2\h'\\nHu-\\nhu'\(br\l'-\\n([Wu\(ul'\v'-1p'\(br\l'-\\n([Wu\(rn'\v'1p'\|
.
.[] Et \v'-1p'\*X\v'1p'
.[] En \v'-1p'\*N\v'1p'
.[] Be \v'-1p'\*L\v'1p'
.[] Bs \v'-1p'\s\nsBS\s0\v'1p'
.[] Ta \v'-1p'\*T\v'1p'
.[] Lf \v'-1p'\s\nsLF\s0\v'1p'
.[] Vt \v'-1p'\s\nsVT\s0\v'1p'
.[] Ff \v'-1p'\s\nsFF\s0\v'1p'
.[] Cr \v'-1p'\s\nsCR\s0\v'1p'
.[] So \v'-1p'\s\nsSO\s0\v'1p'
.[] Si \v'-1p'\s\nsSI\s0\v'1p'
.[] Eb \v'-1p'\*e\v'1p'
.[] Ca \v'-1p'\*C\v'1p'
.[] Su \v'-1p'\*S\v'1p'
.[] Es \v'-1p'\*E\v'1p'
.[] Fs \v'-1p'\s\nsFS\s0\v'1p'
.[] Gs \v'-1p'\s\nsGS\s0\v'1p'
.[] Rs \v'-1p'\s\nsRS\s0\v'1p'
.[] Us \v'-1p'\s\nsUS\s0\v'1p'
.[] # #
.[] (( (
.[] ) )
.[] * *
.[] + +
.[] 0 0
.[] 1 1
.[] 2 2
.[] 3 3
.[] 4 4
.[] 5 5
.[] 6 6
.[] 7 7
.[] 8 8
.[] 9 9
.[] : :
.[] ; ;
.[] = =
.[] > >
.[] ? ?
.[] @ @
.[] A A
.[] cB B
.[] C C
.[] D D
.[] E E
.[] F F
.[] H H
.[] J J
.[] K K
.[] L L
.[] M M
.[] N N
.[] O O
.[] P P
.[] R R
.[] S S
.[] T T
.[] Z Z
.[] [[ [
.[] ] ]
.[] ` \`
.[] a a
.[] b b
.[] c c
.[] d d
.[] f f
.[] g g
.[] h h
.[] i i
.[] j j
.[] k k
.[] l l
.[] m m
.[] n n
.[] o o
.[] p p
.[] q q
.[] r r
.[] s s
.[] t t
.[] x x
.[] | |
.[] } }
.[] c~ ~
.ds Cc \fIC\fP
.ds Ps \fIP\v'.3m'\h'-.2m'\s-2s\s0\v'-.3m'\fP
.ds Pm \fIP\v'.3m'\h'-.2m'\s-2m\s0\v'-.3m'\fP
.ds Pt \fIP\v'.3m'\h'-.2m'\s-2t\s0\v'-.3m'\fP
.ds Ix \fIx\fP
.ds Iy \fIy\fP
.ds Iw \fIw\fP
.ds Ih \fIh\fP
.ds Ir \fIr\fP
.ds Ic \fIc\fP
.nr LL 6.5i
.TL
XXterm Control Sequences
.am NP
.ds CF %
.
.SH
Definitions
.IP \*(Cc
A single (required) character.
.IP \*(Ps
A single (usually optional) numeric parameter, composed of one of more digits.
.IP \*(Pm
A multiple numeric parameter composed of any number of single numeric
parameters, separated by \*; character(s).
.IP \*(Pt
A text parameter composed of printable characters.
.SH
VT102 Mode
.ds RH VT102 Mode
.LP
Most of these control sequences are standard VT102 control sequences.
There are, however, additional ones to provide control of
.I xterm
dependent functions, like the scrollbar or window size.
.St
.IP \\*(Be
Bell (Ctrl-G)
.IP \\*(Bs
Backspace (Ctrl-H)
.IP \\*(Ta
Horizontal Tab (Ctrl-I)
.IP \\*(Lf
Line Feed or New Line (Ctrl-J)
.IP \\*(Vt
Vertical Tab (Ctrl-K)
.IP \\*(Ff
Form Feed or New Page (Ctrl-L)
.IP \\*(Cr
Carriage Return (Ctrl-M)
.IP \\*(So
Shift Out (Ctrl-N) \(-> Switch to Alternate Character Set
.IP \\*(Si
Shift In (Ctrl-O) \(-> Switch to Standard Character Set
.IP \\*(Es\\*#\\*8
DEC Screen Alignment Test (DECALN)
.IP \\*(Es\\*(((\\*(Cc
Select G0 Character Set (SCS)
X  \*(Cc = \*0 \(-> Special Character and Line Drawing Set
X  \*(Cc = \*A \(-> United Kingdom (UK)
X  \*(Cc = \*(cB \(-> United States (USASCII)
.IP \\*(Es\\*)\\*(Cc
Select G1 Character Set (SCS)
X  \*(Cc = \*0 \(-> Special Character and Line Drawing Set
X  \*(Cc = \*A \(-> United Kingdom (UK)
X  \*(Cc = \*(cB \(-> United States (USASCII)
.IP \\*(Es\\**\\*(Cc
Select G2 Character Set (SCS)
X  \*(Cc = \*0 \(-> Special Character and Line Drawing Set
X  \*(Cc = \*A \(-> United Kingdom (UK)
X  \*(Cc = \*(cB \(-> United States (USASCII)
.IP \\*(Es\\*+\\*(Cc
Select G3 Character Set (SCS)
X  \*(Cc = \*0 \(-> Special Character and Line Drawing Set
X  \*(Cc = \*A \(-> United Kingdom (UK)
X  \*(Cc = \*(cB \(-> United States (USASCII)
.IP \\*(Es\\*7
Save Cursor (DECSC)
.IP \\*(Es\\*8
Restore Cursor (DECRC)
.IP \\*(Es\\*=
Application Keypad (DECPAM)
.IP \\*(Es\\*>
Normal Keypad (DECPNM)
.IP \\*(Es\\*D
Index (IND)
.IP \\*(Es\\*E
Next Line (NEL)
.IP \\*(Es\\*H
Tab Set (HTS)
.IP \\*(Es\\*M
Reverse Index (RI)
.IP \\*(Es\\*N
Single Shift Select of G2 Character Set (SS2)
.IP \\*(Es\\*O
Single Shift Select of G3 Character Set (SS3)
.IP \\*(Es\\*Z
Return Terminal ID (DECID)
.IP \\*(Es\\*([[\\*(Ps\|\\*@
Insert \*(Ps (Blank) Character(s) (default = 1) (ICH)
.IP \\*(Es\\*([[\\*(Ps\|\\*A
Cursor Up \*(Ps Times (default = 1) (CUU)
.IP \\*(Es\\*([[\\*(Ps\|\\*(cB
Cursor Down \*(Ps Times (default = 1) (CUD)
.IP \\*(Es\\*([[\\*(Ps\|\\*C
Cursor Forward \*(Ps Times (default = 1) (CUF)
.IP \\*(Es\\*([[\\*(Ps\|\\*D
Cursor Backward \*(Ps Times (default = 1) (CUB)
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*H
Cursor Position [row;column] (default = [1,1]) (CUP)
.IP \\*(Es\\*([[\\*(Ps\|\\*J
Erase in Display (ED)
X  \*(Ps = \*0 \(-> Clear Below (default)
X  \*(Ps = \*1 \(-> Clear Above
X  \*(Ps = \*2 \(-> Clear All
.IP \\*(Es\\*([[\\*(Ps\|\\*K
Erase in Line (EL)
X  \*(Ps = \*0 \(-> Clear to Right (default)
X  \*(Ps = \*1 \(-> Clear to Left
X  \*(Ps = \*2 \(-> Clear All
.IP \\*(Es\\*([[\\*(Ps\|\\*L
Insert \*(Ps Line(s) (default = 1) (IL)
.IP \\*(Es\\*([[\\*(Ps\|\\*M
Delete \*(Ps Line(s) (default = 1) (DL)
.IP \\*(Es\\*([[\\*(Ps\|\\*P
Delete \*(Ps Character(s) (default = 1) (DCH)
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*;\\*(Ps\|\\*;\\*(Ps\|\\*;\\*(Ps\|\\*T
Track Mouse [func;startcol;startrow;firstrow;lastrow] XXX - describe
.IP \\*(Es\\*([[\\*(Ps\|\\*c
Device Attributes (default 0) (DA)
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*f
Horizontal and Vertical Position [row;column] (default = [1,1]) (HVP)
.IP \\*(Es\\*([[\\*(Ps\|\\*g
Tab Clear
X  \*(Ps = \*0 \(-> Clear Current Column (default)
X  \*(Ps = \*3 \(-> Clear All
.IP \\*(Es\\*([[\\*(Ps\|\\*h
Mode Set (SET)
X  \*(Ps = \*4 \(-> Insert Mode (IRM)
X  \*(Ps = \*2\*0 \(-> Automatic Linefeed (LNM)
.IP \\*(Es\\*([[\\*(Ps\|\\*l
Mode Reset (RST)
X  \*(Ps = \*4 \(-> Insert Mode (IRM)
X  \*(Ps = \*2\*0 \(-> Automatic Linefeed (LNM)
.IP \\*(Es\\*([[\\*(Ps\|\\*m
Character Attributes (SGR)
X  \*(Ps = \*0 \(-> Normal (default)
X  \*(Ps = \*1 \(-> Blink (appears as Bold)
X  \*(Ps = \*4 \(-> Underscore
X  \*(Ps = \*5 \(-> Bold
X  \*(Ps = \*7 \(-> Inverse
X  \*(Ps = \*30 \(-> Black Foreground
X  \*(Ps = \*31 \(-> Red Foreground
X  \*(Ps = \*32 \(-> Green Foreground
X  \*(Ps = \*33 \(-> Yellow Foreground
X  \*(Ps = \*34 \(-> Blue Foreground
X  \*(Ps = \*35 \(-> Magenta Foreground
X  \*(Ps = \*36 \(-> Cyan Foreground
X  \*(Ps = \*37 \(-> White Foreground
X  \*(Ps = \*40 \(-> Black Background
X  \*(Ps = \*41 \(-> Red Background
X  \*(Ps = \*42 \(-> Green Background
X  \*(Ps = \*43 \(-> Yellow Background
X  \*(Ps = \*44 \(-> Blue Background
X  \*(Ps = \*45 \(-> Magenta Background
X  \*(Ps = \*46 \(-> Cyan Background
X  \*(Ps = \*47 \(-> White Background
.IP \\*(Es\\*([[\\*(Ps\|\\*n
Device Status Report (DSR)
X  \*(Ps = 5 \(-> Status Report \*(Es\*([[\*0\*n \(-> OK
X  \*(Ps = 6 \(-> Report Cursor Position (CPR) [row;column] as
\*(Es\*([[\*(Ir\|\*;\*(Ic\|\*R
.IP \\*(Es\\*([[\\*(Ps\|\\*;\\*(Ps\|\\*r
Set Scrolling Region [top;bottom] (default = full size of window) (DECSTBM)
.IP \\*(Es\\*([[\\*(Ps\|\\*x
Request Terminal Parameters (DECREQTPARM)
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*h
DEC Private Mode Set (DECSET)
X  \*(Ps = \*1 \(-> Application Cursor Keys (DECCKM)
X  \*(Ps = \*3 \(-> 132 Column Mode (DECCOLM)
X  \*(Ps = \*4 \(-> Smooth (Slow) Scroll (DECSCLM)
X  \*(Ps = \*5 \(-> Reverse Video (DECSCNM)
X  \*(Ps = \*6 \(-> Origin Mode (DECOM)
X  \*(Ps = \*7 \(-> Wraparound Mode (DECAWM)
X  \*(Ps = \*8 \(-> Auto-repeat Keys (DECARM)
X  \*(Ps = \*9 \(-> Send MIT Mouse Row & Column on Button Press
X  \*(Ps = \*3\*8 \(-> Enter Tektronix Mode (DECTEK)
X  \*(Ps = \*4\*0 \(-> Allow 80 \z\(<-\(-> 132 Mode
X  \*(Ps = \*4\*1 \(-> \fIcurses\fP(5) fix
X  \*(Ps = \*4\*4 \(-> Turn On Margin Bell
X  \*(Ps = \*4\*5 \(-> Reverse-wraparound Mode
X  \*(Ps = \*4\*6 \(-> Start Logging
X  \*(Ps = \*4\*7 \(-> Use Alternate Screen Buffer
X  \*(Ps = \*1\*0\*0\*0 \(-> Send VT200 Mouse Row & Column on Button Press
X  \*(Ps = \*1\*0\*0\*3 \(-> Send VT200 Hilite Mouse Row & Column on Button Press
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*l
DEC Private Mode Reset (DECRST)
X  \*(Ps = \*1 \(-> Normal Cursor Keys (DECCKM)
X  \*(Ps = \*3 \(-> 80 Column Mode (DECCOLM)
X  \*(Ps = \*4 \(-> Jump (Fast) Scroll (DECSCLM)
X  \*(Ps = \*5 \(-> Normal Video (DECSCNM)
X  \*(Ps = \*6 \(-> Normal Cursor Mode (DECOM)
X  \*(Ps = \*7 \(-> No Wraparound Mode (DECAWM)
X  \*(Ps = \*8 \(-> No Auto-repeat Keys (DECARM)
X  \*(Ps = \*9 \(-> Don't Send Mouse Row & Column on Button Press
X  \*(Ps = \*4\*0 \(-> Disallow 80 \z\(<-\(-> 132 Mode
X  \*(Ps = \*4\*1 \(-> No \fIcurses\fP(5) fix
X  \*(Ps = \*4\*4 \(-> Turn Off Margin Bell
X  \*(Ps = \*4\*5 \(-> No Reverse-wraparound Mode
X  \*(Ps = \*4\*6 \(-> Stop Logging
X  \*(Ps = \*4\*7 \(-> Use Normal Screen Buffer
X  \*(Ps = \*1\*0\*0\*0 \(-> Don't Send Mouse Row & Column on Button Press
X  \*(Ps = \*1\*0\*0\*3 \(-> Don't Send Mouse Row & Column on Button Press
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*r
Restore DEC Private Mode
X  \*(Ps = \*1 \(-> Normal/Application Cursor Keys (DECCKM)
X  \*(Ps = \*3 \(-> 80/132 Column Mode (DECCOLM)
X  \*(Ps = \*4 \(-> Jump (Fast)/Smooth (Slow) Scroll (DECSCLM)
X  \*(Ps = \*5 \(-> Normal/Reverse Video (DECSCNM)
X  \*(Ps = \*6 \(-> Normal/Origin Cursor Mode (DECOM)
X  \*(Ps = \*7 \(-> No Wraparound/Wraparound Mode (DECAWM)
X  \*(Ps = \*8 \(-> Auto-repeat/No Auto-repeat Keys (DECARM)
X  \*(Ps = \*9 \(-> Don't Send/Send MIT Mouse Row & Column on Button Press
X  \*(Ps = \*4\*0 \(-> Disallow/Allow 80 \z\(<-\(-> 132 Mode
X  \*(Ps = \*4\*1 \(-> Off/On \fIcurses\fP(5) fix
X  \*(Ps = \*4\*4 \(-> Turn Off/On Margin Bell
X  \*(Ps = \*4\*5 \(-> No Reverse-wraparound/Reverse-wraparound Mode
X  \*(Ps = \*4\*6 \(-> Stop/Start Logging
X  \*(Ps = \*4\*7 \(-> Use Normal/Alternate Screen Buffer
X  \*(Ps = \*1\*0\*0\*0 \(-> Don't Send/Send VT220 Mouse Row & Column on Button Press
X  \*(Ps = \*1\*0\*0\*3 \(-> Don't Send/Send VT220 Hilite Mouse Row & Column on Button Press
.IP \\*(Es\\*([[\\*?\\*(Ps\|\\*s
Save DEC Private Mode
X  \*(Ps = \*1 \(-> Normal/Application Cursor Keys (DECCKM)
X  \*(Ps = \*3 \(-> 80/132 Column Mode (DECCOLM)
X  \*(Ps = \*4 \(-> Jump (Fast)/Smooth (Slow) Scroll (DECSCLM)
X  \*(Ps = \*5 \(-> Normal/Reverse Video (DECSCNM)
X  \*(Ps = \*6 \(-> Normal/Origin Cursor Mode (DECOM)
X  \*(Ps = \*7 \(-> No Wraparound/Wraparound Mode (DECAWM)
X  \*(Ps = \*8 \(-> Auto-repeat/No Auto-repeat Keys (DECARM)
X  \*(Ps = \*9 \(-> Don't Send/Send MIT Mouse Row & Column on Button Press
X  \*(Ps = \*4\*0 \(-> Disallow/Allow 80 \z\(<-\(-> 132 Mode
X  \*(Ps = \*4\*1 \(-> Off/On \fIcurses\fP(5) fix
X  \*(Ps = \*4\*4 \(-> Turn Off/On Margin Bell
X  \*(Ps = \*4\*5 \(-> No Reverse-wraparound/Reverse-wraparound Mode
X  \*(Ps = \*4\*6 \(-> Stop/Start Logging
X  \*(Ps = \*4\*7 \(-> Use Normal/Alternate Screen Buffer
X  \*(Ps = \*1\*0\*0\*0 \(-> Don't Send/Send VT220 Mouse Row & Column on Button Press
X  \*(Ps = \*1\*0\*0\*3 \(-> Don't Send/Send VT220 Hilite Mouse Row & Column on Button Press
.IP \\*(Es\\*]\\*(Ps\|\\*;\\*(Pt\|\\*(Be
Set Text Parameters
X  \*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
X  \*(Ps = \*1 \(-> Change Icon Name to \*(Pt
X  \*(Ps = \*2 \(-> Change Window Title to \*(Pt
X  \*(Ps = \*1\*0 \(-> Change VT102 Foreground color to \*(Pt
X  \*(Ps = \*1\*1 \(-> Change VT102 Background color to \*(Pt
X  \*(Ps = \*1\*2 \(-> Change VT102 Text Cursor color to \*(Pt
X  \*(Ps = \*1\*3 \(-> Change VT102 Mouse Foreground color to \*(Pt
X  \*(Ps = \*1\*4 \(-> Change VT102 Mouse Background color to \*(Pt
X  \*(Ps = \*1\*5 \(-> Change Tektronix Foreground color to \*(Pt
X  \*(Ps = \*1\*6 \(-> Change Tektronix Background color to \*(Pt
X  \*(Ps = \*4\*6 \(-> Change Log File to \*(Pt
.LP
The string arguments to the Change color sequences may be
any legal X color specification -- either name or numeric 
specification.  The index value for the Change Color sequences 
is the starting index of the colors to change.   You may change any
number of sequential colors in a single sequence.  For example:
.br
\\*(Es\\*]10;White\!\\*;Firebrick\!\\*;#ffff00\\*(Be
.br
Sets the VT102 primary rendition foreground color to White, the
the primary rendition backtround color to Firebrick and the
Text Cursor color to a bright yellow color.
.IP \\*(Es\\*c
Full Reset (RIS)
.IP \\*(Es\\*n
Locking Shift Select of G2 Character Set (LS2)
.IP \\*(Es\\*o
Locking Shift Select of G3 Character Set (LS3)
.Ed
.SH
Tektronix 4015 Mode
.ds RH Tektronix 4015 Mode
.LP
Most of these sequences are standard Tektronix 4015 control sequences.
The major features missing are the alternate (APL) character set and
the write-thru and defocused modes.
.St
.IP \\*(Be
Bell (Ctrl-G)
.IP \\*(Bs
Backspace (Ctrl-H)
.IP \\*(Ta
Horizontal Tab (Ctrl-I)
.IP \\*(Lf
Line Feed or New Line (Ctrl-J)
.IP \\*(Vt
Vertical Tab (Ctrl-K)
.IP \\*(Ff
Form Feed or New Page (Ctrl-L)
.IP \\*(Cr
Carriage Return (Ctrl-M)
.IP \\*(Es\\*(Et
Switch to VT102 Mode
.IP \\*(Es\\*(En
Return Terminal Status
.IP \\*(Es\\*(Lf
PAGE (Clear Screen)
.IP \\*(Es\\*(Eb
COPY (Save Tektronix Codes to File)
.IP \\*(Es\\*(Ca
Bypass Condition
.IP \\*(Es\\*(Su
GIN mode
.IP \\*(Es\\*(Fs
Special Point Plot Mode
.IP \\*(Es\\*(Gs
Graph Mode (same as \*(Gs)
.IP \\*(Es\\*(Rs
Incremental Plot Mode (same as \*(Rs)
.IP \\*(Es\\*(Us
Alpha Mode (same as \*(Us)
.IP \\*(Es\\*8
Select Large Character Set
.IP \\*(Es\\*9
Select #2 Character Set
.IP \\*(Es\\*:
Select #3 Character Set
.IP \\*(Es\\*;
Select Small Character Set
.IP \\*(Es\\*]\\*(Ps\|\\*;\\*(Pt\|\\*(Be
Set Text Parameters
X  \*(Ps = \*0 \(-> Change Icon Name and Window Title to \*(Pt
X  \*(Ps = \*1 \(-> Change Icon Name to \*(Pt
X  \*(Ps = \*2 \(-> Change Window Title to \*(Pt
X  \*(Ps = \*4\*6 \(-> Change Log File to \*(Pt
.IP \\*(Es\\*`
Normal Z Axis and Normal (solid) Vectors
.IP \\*(Es\\*a
Normal Z Axis and Dotted Line Vectors
.IP \\*(Es\\*b
Normal Z Axis and Dot-Dashed Vectors
.IP \\*(Es\\*c
Normal Z Axis and Short-Dashed Vectors
.IP \\*(Es\\*d
Normal Z Axis and Long-Dashed Vectors
.IP \\*(Es\\*h
Defocused Z Axis and Normal (solid) Vectors
.IP \\*(Es\\*i
Defocused Z Axis and Dotted Line Vectors
.IP \\*(Es\\*j
Defocused Z Axis and Dot-Dashed Vectors
.IP \\*(Es\\*k
Defocused Z Axis and Short-Dashed Vectors
.IP \\*(Es\\*l
Defocused Z Axis and Long-Dashed Vectors
.IP \\*(Es\\*p
Write-Thru Mode and Normal (solid) Vectors
.IP \\*(Es\\*q
Write-Thru Mode and Dotted Line Vectors
.IP \\*(Es\\*r
Write-Thru Mode and Dot-Dashed Vectors
.IP \\*(Es\\*s
Write-Thru Mode and Short-Dashed Vectors
.IP \\*(Es\\*t
Write-Thru Mode and Long-Dashed Vectors
.IP \\*(Fs
Point Plot Mode
.IP \\*(Gs
Graph Mode
.IP \\*(Rs
Incremental Plot Mode
.IP \\*(Us
Alpha Mode
.Ed
SHAR_EOF
chmod 0664 kterm-4.1.2/ctlseqs.ms ||
echo 'restore of kterm-4.1.2/ctlseqs.ms failed'
Wc_c="`wc -c < 'kterm-4.1.2/ctlseqs.ms'`"
test 16552 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/ctlseqs.ms: original size 16552, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/cursor.c ==============
if test -f 'kterm-4.1.2/cursor.c' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/cursor.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/cursor.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/cursor.c' &&
/*
X *	$XConsortium: cursor.c,v 1.7 89/05/26 11:38:54 jim Exp $
X *	$Header: /usr/src.yoshi/X/KTerm/4.1.0/RCS/cursor.c,v 1.1 90/06/27 09:39:02 kagotani Rel $
X */
X
#ifndef lint
static char *rcsid_cursor_c = "$XConsortium: cursor.c,v 1.7 89/05/26 11:38:54 jim Exp $";
#endif	/* lint */
X
#include <X11/copyright.h>
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
/* cursor.c */
X
X
#ifndef lint
static char rcs_id[] = "$XConsortium: cursor.c,v 1.7 89/05/26 11:38:54 jim Exp $";
#endif	/* lint */
X
#include <X11/Xlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include "ptyx.h"
X
extern void bcopy();
X
static void _CheckSelection(screen)
register TScreen *screen;
{
#ifdef ENBUG /* kagotani */
X    extern XtermWidget term;	/* %%% gross */
X
#endif
X    if (screen->cur_row > screen->endHRow ||
X	(screen->cur_row == screen->endHRow &&
X	 screen->cur_col >= screen->endHCol)) {}
X    else
#ifdef ENBUG /* kagotani */
X	DisownSelection(term);
#else
X	TrackText(0, 0, 0, 0);
#endif
}
X
X
X
/*
X * Moves the cursor to the specified position, checking for bounds.
X * (this includes scrolling regions)
X * The origin is considered to be 0, 0 for this procedure.
X */
CursorSet(screen, row, col, flags)
register TScreen	*screen;
register int	row, col;
unsigned	flags;
{
X	register int maxr;
X
X	col = (col < 0 ? 0 : col);
X	screen->cur_col = (col <= screen->max_col ? col : screen->max_col);
X	maxr = screen->max_row;
X	if (flags & ORIGIN) {
X		row += screen->top_marg;
X		maxr = screen->bot_marg;
X	}
X	row = (row < 0 ? 0 : row);
X	screen->cur_row = (row <= maxr ? row : maxr);
X	screen->do_wrap = 0;
X	_CheckSelection(screen);
}
X
/*
X * moves the cursor left n, no wrap around
X */
CursorBack(screen, n)
register TScreen	*screen;
int		n;
{
X	register int i, j, k, rev;
X	extern XtermWidget term;
X
X	if((rev = (term->flags & (REVERSEWRAP | WRAPAROUND)) ==
X	 (REVERSEWRAP | WRAPAROUND)) && screen->do_wrap)
X		n--;
X	if ((screen->cur_col -= n) < 0) {
X		if(rev) {
X			if((i = (j = screen->max_col + 1) * screen->cur_row +
X			 screen->cur_col) < 0) {
X				k = j * (screen->max_row + 1);
X				i += ((-i) / k + 1) * k;
X			}
X			screen->cur_row = i / j;
X			screen->cur_col = i % j;
X		} else
X			screen->cur_col = 0;
X	}
X	screen->do_wrap = 0;
X	_CheckSelection(screen);
}
X
/*
X * moves the cursor forward n, no wraparound
X */
CursorForward(screen, n)
register TScreen	*screen;
int		n;
{
X	screen->cur_col += n;
X	if (screen->cur_col > screen->max_col)
X		screen->cur_col = screen->max_col;
X	screen->do_wrap = 0;
X	_CheckSelection(screen);
}
X
/* 
X * moves the cursor down n, no scrolling.
X * Won't pass bottom margin or bottom of screen.
X */
CursorDown(screen, n)
register TScreen	*screen;
int		n;
{
X	register int max;
X
X	max = (screen->cur_row > screen->bot_marg ?
X		screen->max_row : screen->bot_marg);
X
X	screen->cur_row += n;
X	if (screen->cur_row > max)
X		screen->cur_row = max;
X	screen->do_wrap = 0;
X	_CheckSelection(screen);
}
X
/* 
X * moves the cursor up n, no linestarving.
X * Won't pass top margin or top of screen.
X */
CursorUp(screen, n)
register TScreen	*screen;
int		n;
{
X	register int min;
X
X	min = (screen->cur_row < screen->top_marg ?
X		0 : screen->top_marg);
X
X	screen->cur_row -= n;
X	if (screen->cur_row < min)
X		screen->cur_row = min;
X	screen->do_wrap = 0;
X	_CheckSelection(screen);
}
X
/* 
X * Moves cursor down amount lines, scrolls if necessary.
X * Won't leave scrolling region. No carriage return.
X */
Index(screen, amount)
register TScreen	*screen;
register int	amount;
{
X	register int j;
X
X	/* 
X	 * indexing when below scrolling region is cursor down.
X	 * if cursor high enough, no scrolling necessary.
X	 */
X	if (screen->cur_row > screen->bot_marg
X	 || screen->cur_row + amount <= screen->bot_marg) {
X		CursorDown(screen, amount);
X		return;
X	}
X
X	CursorDown(screen, j = screen->bot_marg - screen->cur_row);
X	Scroll(screen, amount - j);
}
X
/*
X * Moves cursor up amount lines, reverse scrolls if necessary.
X * Won't leave scrolling region. No carriage return.
X */
RevIndex(screen, amount)
register TScreen	*screen;
register int	amount;
{
X	/*
X	 * reverse indexing when above scrolling region is cursor up.
X	 * if cursor low enough, no reverse indexing needed
X	 */
X	if (screen->cur_row < screen->top_marg
X	 || screen->cur_row-amount >= screen->top_marg) {
X		CursorUp(screen, amount);
X		return;
X	}
X
X	RevScroll(screen, amount - (screen->cur_row - screen->top_marg));
X	CursorUp(screen, screen->cur_row - screen->top_marg);
}
X
/*
X * Moves Cursor To First Column In Line
X */
CarriageReturn(screen)
register TScreen *screen;
{
X	screen->cur_col = 0;
X	screen->do_wrap = 0;
X	_CheckSelection(screen);
}
X
/*
X * Save Cursor and Attributes
X */
CursorSave(term, sc)
register XtermWidget term;
register SavedCursor *sc;
{
X	register TScreen *screen = &term->screen;
X
X	sc->row = screen->cur_row;
X	sc->col = screen->cur_col;
X	sc->flags = term->flags;
X	sc->curgl = screen->curgl;
X	sc->curgr = screen->curgr;
X	bcopy(screen->gsets, sc->gsets, sizeof(screen->gsets));
}
X
/*
X * Restore Cursor and Attributes
X */
CursorRestore(term, sc)
register XtermWidget term;
register SavedCursor *sc;
{
X	register TScreen *screen = &term->screen;
X
X	bcopy(sc->gsets, screen->gsets, sizeof(screen->gsets));
X	screen->curgl = sc->curgl;
X	screen->curgr = sc->curgr;
X	term->flags &= ~(BOLD|INVERSE|UNDERLINE|ORIGIN);
X	term->flags |= sc->flags & (BOLD|INVERSE|UNDERLINE|ORIGIN);
X	CursorSet (screen, (term->flags & ORIGIN) ? sc->row - screen->top_marg
X			   : sc->row, sc->col, term->flags);
}
SHAR_EOF
chmod 0664 kterm-4.1.2/cursor.c ||
echo 'restore of kterm-4.1.2/cursor.c failed'
Wc_c="`wc -c < 'kterm-4.1.2/cursor.c'`"
test 6443 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/cursor.c: original size 6443, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/data.c ==============
if test -f 'kterm-4.1.2/data.c' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/data.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/data.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/data.c' &&
/*
X *	$XConsortium: data.c,v 1.8 89/05/26 18:10:43 jim Exp $
X *	$Header: /usr/src.yoshi/X/KTerm/4.1.0/RCS/data.c,v 1.1 90/06/27 09:39:03 kagotani Rel $
X */
X
#include <X11/copyright.h>
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
#include <setjmp.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include "ptyx.h"
#include "data.h"
X
#ifndef lint
static char rcs_id[] = "$XConsortium: data.c,v 1.8 89/05/26 18:10:43 jim Exp $";
#endif	/* lint */
X
XXPoint T_boxlarge[NBOX] = {
X	{0, 0},
X	{8, 0},
X	{0, 14},
X	{-8, 0},
X	{0, -14},
};
XXPoint T_box2[NBOX] = {
X	{0, 0},
X	{7, 0},
X	{0, 12},
X	{-7, 0},
X	{0, -12},
};
XXPoint T_box3[NBOX] = {
X	{0, 0},
X	{5, 0},
X	{0, 12},
X	{-5, 0},
X	{0, -12},
};
XXPoint T_boxsmall[NBOX] = {
X	{0, 0},
X	{5, 0},
X	{0, 9},
X	{-5, 0},
X	{0, -9},
};
jmp_buf Tekend;
int Tbcnt = 0;
Char *Tbuffer;
Char *Tbptr;
TekLink *TekRefresh;
Char *Tpushb;
Char *Tpushback;
int Ttoggled = 0;
int bcnt = 0;
#ifdef KTERM_KANJI
X /*
X  * buffer[-1] is reserved for pending_byte in two-byte character.
X  */
static Char Vbuffer[BUF_SIZE + 1];
Char *buffer = Vbuffer + 1;
Char *bptr;
#else /* !KTERM_KANJI */
Char buffer[BUF_SIZE];
Char *bptr = buffer;
#endif /* !KTERM_KANJI */
jmp_buf VTend;
XXPoint VTbox[NBOX] = {
X	{0, 0},
X	{0, 0},
X	{0, 0},
X	{0, 0},
X	{0, 0},
};
#ifdef KTERM_KANJI
XXPoint VTwbox[NBOX] = {
X	{0, 0},
X	{0, 0},
X	{0, 0},
X	{0, 0},
X	{0, 0},
};
#endif /* KTERM_KANJI */
#ifdef STATUSLINE
XXPoint status_box[NBOX] = {
X	{0, 0},
X	{0, 0},
X	{0, 0},
X	{0, 0},
X	{0, 0},
};
#endif /* STATUSLINE */
X
#ifdef DEBUG
int debug = 0; 		/* true causes error messages to be displayed */
#endif	/* DEBUG */
XXtermWidget term;		/* master data structure for client */
char *xterm_name;	/* argv[0] */
int am_slave = 0;	/* set to 1 if running as a slave process */
int max_plus1;
int pty_mask;
int Select_mask;
int X_mask;
char *ptydev;
char *ttydev;
#ifdef KTERM
char log_def_name[] = "KtermLog.XXXXX";
#else /* !KTERM */
char log_def_name[] = "XtermLog.XXXXX";
#endif /* !KTERM */
int T_lastx = -1;
int T_lasty = -1;
X
int waitingForTrackInfo = 0;
EventMode eventMode = NORMAL;
X
GC visualBellGC;
X
int VTgcFontMask = GCFont;
int TEKgcFontMask = GCFont;
X
TekWidget tekWidget;
SHAR_EOF
chmod 0664 kterm-4.1.2/data.c ||
echo 'restore of kterm-4.1.2/data.c failed'
Wc_c="`wc -c < 'kterm-4.1.2/data.c'`"
test 3198 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/data.c: original size 3198, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/data.h ==============
if test -f 'kterm-4.1.2/data.h' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/data.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/data.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/data.h' &&
/*
X *	$XConsortium: data.h,v 1.7 89/05/26 18:10:45 jim Exp $
X *	$Header: /usr/src.yoshi/X/KTerm/4.1.0/RCS/data.h,v 1.1 90/06/27 09:39:04 kagotani Rel $
X */
X
X
#include <X11/copyright.h>
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
/* @(#)data.h\tX10/6.6\t11/10/86 */
X
#include <X11/Intrinsic.h>
X
extern TekLink *TekRefresh;
extern XPoint T_box2[];
extern XPoint T_box3[];
extern XPoint T_boxlarge[];
extern XPoint T_boxsmall[];
extern XPoint VTbox[];
#ifdef KTERM_KANJI
extern XPoint VTwbox[];
#endif /* KTERM_KANJI */
#ifdef STATUSLINE
extern XPoint status_box[];
#endif /* STATUSLINE */
extern Char *Tbptr;
extern Char *Tbuffer;
extern Char *Tpushb;
extern Char *Tpushback;
extern Char *bptr;
extern char log_def_name[];
extern char *ptydev;
extern char *ttydev;
extern char *xterm_name;
#ifdef KTERM_KANJI
extern Char *buffer;
#else /* !KTERM_KANJI */
extern Char buffer[];
#endif /* !KTERM_KANJI */
extern int Select_mask;
extern int T_lastx;
extern int T_lasty;
extern int Tbcnt;
extern int Ttoggled;
extern int X_mask;
extern int am_slave;
extern int bcnt;
#ifdef DEBUG
extern int debug;
#endif	/* DEBUG */
extern int errno;
extern int max_plus1;
extern int pty_mask;
extern int switchfb[];
extern jmp_buf Tekend;
extern jmp_buf VTend;
X
extern int waitingForTrackInfo;
X
extern EventMode eventMode;
X
extern GC visualBellGC;
X
extern int VTgcFontMask;
extern int TEKgcFontMask;
X
extern XtermWidget term;
extern TekWidget tekWidget;
SHAR_EOF
chmod 0664 kterm-4.1.2/data.h ||
echo 'restore of kterm-4.1.2/data.h failed'
Wc_c="`wc -c < 'kterm-4.1.2/data.h'`"
test 2484 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/data.h: original size 2484, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/error.h ==============
if test -f 'kterm-4.1.2/error.h' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/error.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/error.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/error.h' &&
/*
X *	$XConsortium: error.h,v 1.6 89/05/26 13:34:16 jim Exp $
X */
X
X
#include <X11/copyright.h>
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
/* @(#)error.h	X10/6.6	11/6/86 */
/* main.c */
#define	ERROR_KMALLOC	10	/* main: malloc() failed for keyboardtype */
#define	ERROR_FIONBIO	11	/* main: ioctl() failed on FIONBIO */
X
X
#define	ERROR_OPDEVTTY	14	/* spawn: open() failed on /dev/tty */
#define	ERROR_TIOCGETP	15	/* spawn: ioctl() failed on TIOCGETP */
#define	ERROR_TIOCGETC	16	/* spawn: ioctl() failed on TIOCGETC */
#define	ERROR_TIOCGETD	17	/* spawn: ioctl() failed on TIOCGETD */
#define	ERROR_TIOCGLTC	18	/* spawn: ioctl() failed on TIOCGLTC */
#define	ERROR_TIOCLGET	19	/* spawn: ioctl() failed on TIOCLGET */
#define	ERROR_TIOCCONS	20	/* spawn: ioctl() failed on TIOCCONS */
#define	ERROR_OPDEVTTY2	21	/* spawn: second open() failed on /dev/tty */
#define	ERROR_NOTTY	22	/* spawn: ioctl() failed on TIOCNOTTY */
#define	ERROR_TIOCSETP	23	/* spawn: ioctl() failed on TIOCSETP */
#define	ERROR_TIOCSETC	24	/* spawn: ioctl() failed on TIOCSETC */
#define	ERROR_TIOCSETD	25	/* spawn: ioctl() failed on TIOCSETD */
#define	ERROR_TIOCSLTC	26	/* spawn: ioctl() failed on TIOCSLTC */
#define	ERROR_TIOCLSET	27	/* spawn: ioctl() failed on TIOCLSET */
X
#define	ERROR_FORK	29	/* spawn: fork() failed */
#define	ERROR_EXEC	30	/* spawn: exec() failed */
#define	ERROR_OPDEVTTY3	31	/* spawn: third open() failed on /dev/tty */
#define	ERROR_PTYS	32	/* get_pty: not enough ptys */
#define	ERROR_NOX	33	/* get_terminal: can't connect to server */
#define ERROR_PTY_EXEC	34	/* waiting for initial map */
X
#define	ERROR_INIT	36	/* spawn: can't initialize window */
#define	ERROR_NOCO	37	/* resize: no `co' in termcap */
#define	ERROR_NOLI	38	/* resize: no `li' in termcap */
#define	ERROR_BORDER	39	/* get_terminal: can't make border tile */
#define	ERROR_BACK	40	/* get_terminal: can't make background tile */
#define ERROR_NOX3      43      /* get_terminal: bad pty from display server */
/* charproc.c */
#define	ERROR_SELECT	50	/* in_put: select() failed */
#define	ERROR_VINIT	54	/* VTInit: can't initialize window */
#define	ERROR_CNMALLOC1	55	/* Changename: malloc failed */
#define	ERROR_CNMALLOC2	56	/* Changename: malloc failed */
/* Tekproc.c */
#define	ERROR_TSELECT	60	/* Tinput: select() failed */
#define	ERROR_TINIT	64	/* TekInit: can't initialize window */
#define	ERROR_TBACK	65	/* TekBackground: can't make background */
/* button.c */
#define	ERROR_BMALLOC2	71	/* SaltTextAway: malloc() failed */
X
/* misc.c */
#define	ERROR_LOGEXEC	80	/* StartLog: exec() failed */
#define	ERROR_XERROR	83	/* xerror: XError event */
#define	ERROR_XIOERROR	84	/* xioerror: X I/O error */
#define ERROR_WINNAME   85      /* get_terminal: malloc failed */
/* screen.c */
#define	ERROR_SCALLOC	90	/* Alloc: calloc() failed on base */
#define	ERROR_SCALLOC2	91	/* Alloc: calloc() failed on rows */
#define	ERROR_SREALLOC	92	/* ScreenResize: realloc() failed on alt base */
#define	ERROR_SREALLOC2	93	/* ScreenResize: realloc() failed on alt rows */
#define	ERROR_SREALLOC3	94	/* ScreenResize: realloc() failed on rows */
#define	ERROR_SREALLOC4	95	/* ScreenResize: realloc() failed on rows */
#define	ERROR_RESIZE	96	/* ScreenResize: malloc() or realloc() failed */
#define	ERROR_RESIZE2	97	/* ScreenResize: malloc() or realloc() failed */
#define	ERROR_RESIZROW	98	/* ScreenResize: realloc() failed on alt char */
#define	ERROR_RESIZROW2	99	/* ScreenResize: realloc() failed on alt attr */
#define	ERROR_RESIZROW3	100	/* ScreenResize: realloc() failed on attr */
#define	ERROR_RESIZROW4	101	/* ScreenResize: realloc() failed on attr */
/* scrollbar.c */
#define	ERROR_SBRALLOC	110	/* ScrollBarOn: realloc() failed on base */
#define	ERROR_SBRALLOC2	111	/* ScrollBarOn: realloc() failed on rows */
/* util.c */
#define	ERROR_UBACK	120	/* ReverseVideo: can't make background */
SHAR_EOF
chmod 0664 kterm-4.1.2/error.h ||
echo 'restore of kterm-4.1.2/error.h failed'
Wc_c="`wc -c < 'kterm-4.1.2/error.h'`"
test 4916 -eq "$Wc_c" ||
	echo 'kterm-4.1.2/error.h: original size 4916, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= kterm-4.1.2/g2b ==============
if test -f 'kterm-4.1.2/g2b' -a X"$1" != X"-c"; then
	echo 'x - skipping kterm-4.1.2/g2b (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting kterm-4.1.2/g2b (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'kterm-4.1.2/g2b' &&
xbtoa Begin
,75Y<#t&WMH#dV3BQP@^+>Gl93%QdE3&rNE3B8c9 at X0(cF`(h77P5fWARuu2+Auo`CO%%*AT_m'+:9
>#$7/2//NuKm7g]Sh0gRN:5qtht$DB_Y:8(%K]V339]V/#mZD"q*GG4&jr1QcWV4janTr4T_Tk0p0T
lHcHTl$K at Tlm&PTm<>XTtI)3TkU38$DGqBd at o!^8#&hQ]VAK%;k`<HjIs5[]V3iK]V3!3k6doqU%=u
EU$\Q0TtI)STtI)3U"Z3QTtI)OU"Q-oU$`8]n"K9Fn=j$YXJ)Yg8to"Q]V7li8"mShZ(\h(\=pG?Ts
LH"Tsp`,Tt@#2TtR/-TsgZ!U%b8SU%G&OU8/,'5r(_\+ at .bP71,a$TtI)3TtI)3TtI)3TtI)3TtI)3
TtI)3TtI)3$DG,+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]F(@FTtI)3TtI)3TtI)3TtI)3TtI
)3TtI)3TtI)3TtC`+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V2tFTtI)3TtI)3TtI)3TtI)3T
tI)3TtI)3TtI)3TtI)3$DG,,\Y?[0]:us4]qW68^S8N<_4nf?]V3!3]V2tF$:-I60d&b<7R[ZX<2$=
cXeJ4X8>32[XJ'4!AtdMDc_4(,d%O7/rX,C'U9LAsU9^N"U9pZ&U:-f*U:?mpTi%M'U">uYTi2;m8Y
XXP*d%\p^d\>3be=tKfetUcjfV7&ng7m>rgnNU3U>DX%U>Vd)U>hp-U?&'1U?835U?J;`U-PEbTlZpG
$DFMpl([I;l_<a?m at s$Cn"T<GnY5TKo:klOoqM/SpBmYiUA:P[UAL\_UA^hcUHkS?UI(_CTja[?Tjj
_4$49'U5qsKJ1e'n at TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtC`+]V3!3]V3!3]V3!3]V3!3]
V3!3]V3!3]V3!3]V2tFTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3$DG,+]V3!3]V3!3]V3!
3]V3!3]V3!3]V3!3]V3!3]F(@FTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtC`+]V3!3]V3!3]V
3!3]V3!3]V3!3]V3!3]V3!3]F#!32*ir>5rD,#$DG,+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V2tF
TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3$DG,+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3
!3]F(@FTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtC`+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]
V3!3]V2tFTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtC^>5rM"`+ at .nT71,eXUICqIUIV(MUIh4
QUJ%@UUJ7LYUJIX]UJ[da$DUOp<23Hg<hi`k=JK#o>,,;q]V3!3]V3!3]V3!3]F(@FUKjR"UL'^&UL
9j*ULL!.UL^-2ULp96UM-E:UM:.2CSP^@D52!DDkh9HEMIQLF.p7?]V3!3]V3!3]V2tFTtI)3TtI)3
TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3$DG,+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V2tF$:-U:0d&
b at 7R[ZX]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]F(@FTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3T
tI)3TtC`+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V2tFTtI)3TtI)3TtI)3TtI)3TtI)3TtI)
3TtI)3TtI)3$DG,+]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]F(@FTtI)3TtI)3TtI)3TtI)3Tt
I)3TtI)3TtI)3$49'Y5qsKJ3(?=DTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtC`+]V3!3]V3!3
]V3!3]V3!3]V3!3]V3!3]V3!3]V2tFTtI)3TtI)3TtI.BUNN>TUN`JXUNrV\UO/b`UOAnd$DX;iU8+
KYUnac]VPC&aW2$>eWhZViXJ;nmY+r1qYR7/1UU$Z$UU6f(UUHr,UU[)0UUm/3TtI)3TtI)3TtC`+]
V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]V3!3]F#!33C,AB5rhD'$DG,+]V3!4GG2[DGbMdD]V3!3]V3!
3]V3!3]V2tFU3`NGTtI)3U3iTHTtI)3U3rZITtI)3U4&`JTtI)3$DM[:]V3!3]V3!3]V3!3]V9MA]V
3!3]V3!3]V3!3]F(BSTtI)3TtI)3TtI)3TtI+?TtI)3TtI)3TtI)3TtC`,EM:%=]V3!3]V3!3]V3!3
]V3!3]V3!3]V3!3]V2tFTtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtI)3TtC^>681\[+ at 7bO71-9QWr0
"lY/./]Xo,5@]h6*9`2C+8VW5Ro[o0bN$GKuPntpW5c)^QIFK)(bBs-("lDaT_F/;sCcFihbX9uki[
`5cN^='baWnjhqV7*4HVdZd>Ue at f6UtVg)[Ta*LG,O?'d`(dr;8%CXW28%GAu<_f>c?2XdAuorqm<[
:Y?JDKVrk2K\U1>PWi;o]WR[m9_ka,<^[/8MW4B^J$F098?+WY;C:):";m8a.l*J=E]rbeH9r2./a0
"S5$:6I50d&e;7R[[#Tt,3E:UBl-Tu:<;lEg8uafo$cC;Y at t9t4!+A.#:.V-gq4X\#Ij^0%MPY?&!L
^<X,WZVd]2X_+EAZGHsR=i"FGa/l/TgTYS+8%\Agn[lTEVl@>?dGr?^Wj8K/^r=W5\b)f@\+I#.Z-B
iUV6[Ws^;.R-_:Pob_a)-#$GCMh;lfMj9?#\^bJ3A^8&Tec9t\iZ6bTFumDZg$GRC?E_l'bUfm1J[^
t?9"m-(?@VF%@lV#IC3]B63"$49*T5qsKK1.F\>Y at aY[XMM<o]Y1teZJ)<mZdl*l[qWB\]&]bUWN?N
5mBYfb9=45hH+W=D\"lp(pUJ>Ln>)hUXJeJ'YHso0WQ)`gZ>m;EVt[!9Y[+b*^%/2sZ#-o2]s>FYYg
LGd$FJX#7_2+*l+:B=[B85nahks0hSE:+dBVc9o<_]/V@'Q?V,ao!]P-n4[%X:,e$H7RXCU>X[qE8>
Vo,ZZ\C(_`m]PTS>Jt*a<Pm##@E&5an\aXtUVt*i\>f5.Es`7 at 1I3`<68M)"$FBE9_6ICJpqV'_HG"
@,YI[oAgTAo4=/Xf]EjW[j]Loj$Z!XDHWhZMqVs(]d[!0(Z\uXHKVV7uQ\^7V?$E)FQ8[GV/=N.5O[
CY%lYeKM%W2F4/]X<+(B>!35gBsq/ZZs=cYHOg+\+ZluYg'&\^[S+p\YH=%^8 at j\Ut?$QWis[D\A(\
5;Q*KjjKVV#A?"S!;o>HN6b$:.<5`tfUpIZ,ioHo/YN2_MV-(WR]PtdD^/MoFhGLMP\"O-968Ut_+@
7nS71-o/^j*imh0R#FZU2$nUi`^,h;#HZZL5'TVWtic$FQS?Co>CloWuoBC9"):W57\uX/ntMcb<#S
6F'%`_@"6V_H4>;ZE(2-]$J"C_rJ4%ZD"](VR`Yk^#u9&_/B[o[AS5F?EnLe:UKDmb.^Qc9WM"c:VV
1lX1D36>.2Q\YM?VW]'6M4]0W at iVK8PO]i)MU[plVQY/%gJ[q<0?$FQnI7&@8dC8YO:n(:[V\ZoSEE
2?=<<O5]+h6pl%$:6U90d&e?7R[Zbjfd1JiM<?Wk3,q/\A<Ed\[:=mrOf/98A3?^FUGHI\*^o]`6uE
3^r`BH[r9+0Ximke_lLMnW9h3)Z)%f<7(%*KGHl(d]#3C>:UP)JV83#>\\:V at p8:9hGHH9#]Yq+nW+
NWF]0j-cWT^=fVI@!3ZG`flVp)cc]kkVQ$Irk"^UQqR8Z:ad;7Y2eEMiT2CoO\EIC&perO92E9a[_9
^e1`iUe\2-VGX[u^"'PtY>VsY]t1>>^XC)K$49*X5qsKK2F^+BUdD"tV/<G[Zb*cI^\+RMX`:2rW^`
gc\?iuXYf[<[aihE!n?(ZNIB^Sdh5'2;I]00NEj]\hUUU6(El3;4^K8CSYk5Fj^#Z*e_;V>>X4O`AV
SHAR_EOF
true || echo 'restore of kterm-4.1.2/g2b failed'
fi
echo 'End of kterm-4.1.2 part 10'
echo 'File kterm-4.1.2/g2b is continued in part 11'
echo 11 > _shar_seq_.tmp
exit 0


-----------------------------------------------------------------------------
mleisher at nmsu.edu                      "I laughed.
Mark Leisher                                I cried.
Computing Research Lab                          I fell down.
New Mexico State University                        It changed my life."
Las Cruces, NM                     - Rich [Cowboy Feng's Space Bar and Grille]

--
Dan Heller
O'Reilly && Associates       Z-Code Software    Comp-sources-x:
Senior Writer                President          comp-sources.x at uunet.uu.net
argv at ora.com                 argv at zipcode.com



More information about the Comp.sources.x mailing list