v07i087: xdm, Patch1, Part02/02

Chris Keane keane at ultima.cs.uts.oz.au
Sat Jun 9 03:41:15 AEST 1990


Submitted-by: keane at ultima.cs.uts.oz.au (Chris Keane)
Posting-number: Volume 7, Issue 87
Archive-name: xdm/patch1.02
Patch-To: xdm: Volume XXX, Issue XXX

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  ptyx.h xroutines.c
# Wrapped by keane at zeus on Fri Jun  8 16:34:39 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'ptyx.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'ptyx.h'\"
else
echo shar: Extracting \"'ptyx.h'\" \(15008 characters\)
sed "s/^X//" >'ptyx.h' <<'END_OF_FILE'
X/*
X *	$XConsortium: ptyx.h,v 1.18 88/10/07 14:12:29 swick Exp $
X */
X
X#include <X11/copyright.h>
X
X/*
X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
X *
X *                         All Rights Reserved
X *
X * Permission to use, copy, modify, and distribute this software and its
X * documentation for any purpose and without fee is hereby granted,
X * provided that the above copyright notice appear in all copies and that
X * both that copyright notice and this permission notice appear in
X * supporting documentation, and that the name of Digital Equipment
X * Corporation not be used in advertising or publicity pertaining to
X * distribution of the software without specific, written prior permission.
X *
X *
X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
X * SOFTWARE.
X */
X
X/* ptyx.h */
X/* @(#)ptyx.h	X10/6.6	11/10/86 */
X
X#include <X11/Xos.h>
X#include <X11/Xlib.h>
X#include <X11/IntrinsicP.h>
X
X/* Extra Xlib definitions */
X#define AllButtonsUp(detail, ignore)  (\
X		((ignore) == Button1) ? \
X				(((detail)&(Button2Mask|Button3Mask)) == 0) \
X				: \
X		 (((ignore) == Button2) ? \
X		  		(((detail)&(Button1Mask|Button3Mask)) == 0) \
X				: \
X		  		(((detail)&(Button1Mask|Button2Mask)) == 0)) \
X		)
X
X
X#define Max(i, j)       ((i) > (j) ? (i) : (j))
X#define Min(i, j)       ((i) < (j) ? (i) : (j))
X
X#define MAX_COLS	200
X#define MAX_ROWS	128
X
X/*
X** System V definitions
X*/
X
X#ifdef SYSV
X
X#ifdef JOBCONTROL
X#define	getpgrp		getpgrp2
X#else	/* !JOBCONTROL */
X#define	getpgrp(x)	(x)
X#endif	/* !JOBCONTROL */
X
X#define	killpg(x,sig)	kill(-x,sig)
X
X#define	dup2(fd1,fd2)	((fd1 == fd2) ? fd1 : \
X				(close(fd2), fcntl(fd1, F_DUPFD, fd2)))
X
X#endif	/* !SYSV */
X
X/*
X** allow for mobility of the pty master/slave directories
X*/
X#ifndef PTYDEV
X#ifdef hpux
X#define	PTYDEV		"/dev/ptym/ptyxx"
X#else	/* !hpux */
X#define	PTYDEV		"/dev/ptyxx"
X#endif	/* !hpux */
X#endif	/* !PTYDEV */
X
X#ifndef TTYDEV
X#ifdef hpux
X#define TTYDEV		"/dev/pty/ttyxx"
X#else	/* !hpux */
X#define	TTYDEV		"/dev/ttyxx"
X#endif	/* !hpux */
X#endif	/* !TTYDEV */
X
X#ifndef PTYCHAR1
X#ifdef hpux
X#define PTYCHAR1	"zyxwvutsrqp"
X#else	/* !hpux */
X#define	PTYCHAR1	"pqrstuvwxyz"
X#endif	/* !hpux */
X#endif	/* !PTYCHAR1 */
X
X#ifndef PTYCHAR2
X#ifdef hpux
X#define	PTYCHAR2	"fedcba9876543210"
X#else	/* !hpux */
X#define	PTYCHAR2	"0123456789abcdef"
X#endif	/* !hpux */
X#endif	/* !PTYCHAR2 */
X
X/* Until the translation manager comes along, I have to do my own translation of
X * mouse events into the proper routines. */
X
Xtypedef enum {NORMAL, LEFTEXTENSION, RIGHTEXTENSION} EventMode;
X
X/*
X * The origin of a screen is 0, 0.  Therefore, the number of rows
X * on a screen is screen->max_row + 1, and similarly for columns.
X */
X
Xtypedef char **ScrnBuf;
X
X/*
X * ANSI emulation.
X */
X#define INQ	0x05
X#define	FF	0x0C			/* C0, C1 control names		*/
X#define	LS1	0x0E
X#define	LS0	0x0F
X#define	CAN	0x18
X#define	SUB	0x1A
X#define	ESC	0x1B
X#define US	0x1F
X#define	DEL	0x7F
X#define HTS     ('H'+0x40)
X#define	SS2	0x8E
X#define	SS3	0x8F
X#define	DCS	0x90
X#define	OLDID	0x9A			/* ESC Z			*/
X#define	CSI	0x9B
X#define	ST	0x9C
X#define	OSC	0x9D
X#define	PM	0x9E
X#define	APC	0x9F
X#define	RDEL	0xFF
X
X#define	NBOX	5			/* Number of Points in box	*/
X#define	NPARAM	10			/* Max. parameters		*/
X
X#define	MINHILITE	32
X
Xtypedef struct {
X	unsigned char	a_type;
X	unsigned char	a_pintro;
X	unsigned char	a_final;
X	unsigned char	a_inters;
X	char	a_nparam;		/* # of parameters		*/
X	char	a_dflt[NPARAM];		/* Default value flags		*/
X	short	a_param[NPARAM];	/* Parameters			*/
X	char	a_nastyf;		/* Error flag			*/
X} ANSI;
X
Xtypedef struct {
X	int		row;
X	int		col;
X	unsigned	flags;	/* Vt100 saves graphics rendition. Ugh! */
X	char		curgl;
X	char		curgr;
X	char		gsets[4];
X} SavedCursor;
X
X#define	TEKNUMFONTS	4
X/* Actually there are 5 types of lines, but four are non-solid lines */
X#define	TEKNUMLINES	4
X
Xtypedef struct {
X	int	x;
X	int	y;
X	int	fontsize;
X	int	linetype;
X} Tmodes;
X
Xtypedef struct {
X	int Twidth;
X	int Theight;
X} T_fontsize;
X
Xtypedef struct {
X	short *bits;
X	int x;
X	int y;
X	int width;
X	int height;
X} BitmapBits;
X
X#define	SAVELINES		64      /* default # lines to save      */
X
Xtypedef struct {
X/* These parameters apply to both windows */
X	Display		*display;	/* X display for screen		*/
X	int		respond;	/* socket for responses
X					   (position report, etc.)	*/
X	long		pid;		/* pid of process on far side   */
X	int		uid;		/* user id of actual person	*/
X	int		gid;		/* group id of actual person	*/
X	GC		normalGC;	/* normal painting		*/
X	GC		reverseGC;	/* reverse painting		*/
X	GC		normalboldGC;	/* normal painting, bold font	*/
X	GC		reverseboldGC;	/* reverse painting, bold font	*/
X	GC		cursorGC;	/* normal cursor painting	*/
X	GC		reversecursorGC;/* reverse cursor painting	*/
X	GC		cursoroutlineGC;/* for painting lines around    */
X	Pixel		foreground;	/* foreground color		*/
X	Pixel		cursorcolor;	/* Cursor color			*/
X	Pixel		mousecolor;	/* Mouse color			*/
X	int		border;		/* inner border			*/
X	Pixmap		graybordertile;	/* tile pixmap for border when
X						window is unselected	*/
X	Cursor		arrow;		/* arrow cursor			*/
X	unsigned short	send_mouse_pos;	/* user wants mouse transition  */
X					/* and position information	*/
X	int		select;		/* xterm selected		*/
X	Boolean		visualbell;	/* visual bell mode		*/
X	int		logging;	/* logging mode			*/
X	int		logfd;		/* file descriptor of log	*/
X	char		*logfile;	/* log file name		*/
X	char		*logstart;	/* current start of log buffer	*/
X	int		inhibit;	/* flags for inhibiting changes	*/
X
X/* VT window parameters */
X	struct {
X		Window	window;		/* X window id			*/
X		int	width;		/* width of columns		*/
X		int	height;		/* height of rows		*/
X		int	fullwidth;	/* full width of window		*/
X		int	fullheight;	/* full height of window	*/
X		int	f_width;	/* width of fonts in pixels	*/
X		int	f_height;	/* height of fonts in pixels	*/
X	} fullVwin;
X	Cursor pointer_cursor;		/* pointer cursor in window	*/
X
X	/* Terminal fonts must be of the same size and of fixed width */
X	XFontStruct	*fnt_norm;	/* normal font of terminal	*/
X	XFontStruct	*fnt_bold;	/* bold font of terminal	*/
X	int		enbolden;	/* overstrike for bold font	*/
X	XPoint		*box;		/* draw unselected cursor	*/
X
X	int		cursor_state;	/* ON or OFF			*/
X	int		cursor_set;	/* requested state		*/
X	int		cursor_col;	/* previous cursor column	*/
X	int		cursor_row;	/* previous cursor row		*/
X	int		cur_col;	/* current cursor column	*/
X	int		cur_row;	/* current cursor row		*/
X	int		max_col;	/* rightmost column		*/
X	int		max_row;	/* bottom row			*/
X	int		top_marg;	/* top line of scrolling region */
X	int		bot_marg;	/* bottom line of  "	    "	*/
X	Widget		scrollWidget;	/* pointer to scrollbar struct	*/
X	int		scrollbar;	/* if > 0, width of scrollbar, and
X						scrollbar is showing	*/
X	int		topline;	/* line number of top, <= 0	*/
X	int		savedlines;     /* number of lines that've been saved */
X	int		savelines;	/* number of lines off top to save */
X	Boolean		scrollinput;	/* scroll to bottom on input	*/
X	Boolean		scrollkey;	/* scroll to bottom on key	*/
X	
X	ScrnBuf		buf;		/* screen buffer (main)		*/
X	ScrnBuf		allbuf;		/* screen buffer (may include
X					   lines scrolled off top	*/
X	ScrnBuf		altbuf;		/* alternate screen buffer	*/
X	Boolean		alternate;	/* true if using alternate buf	*/
X	unsigned short	do_wrap;	/* true if cursor in last column
X					   and character just output    */
X	int		incopy;		/* 0 if no RasterCopy exposure
X					   event processed since last
X					   RasterCopy			*/
X	Boolean		c132;		/* allow change to 132 columns	*/
X	Boolean		curses;		/* cludge-ups for more and vi	*/
X	Boolean		marginbell;	/* true if margin bell on	*/
X	int		nmarginbell;	/* columns from right margin	*/
X	int		bellarmed;	/* cursor below bell margin	*/
X	Boolean 	multiscroll;	/* true if multi-scroll		*/
X	int		scrolls;	/* outstanding scroll count	*/
X	SavedCursor	sc;		/* data for restore cursor	*/
X	int		save_modes[19];	/* save dec private modes	*/
X
X	/* Improved VT100 emulation stuff.				*/
X	char		gsets[4];	/* G0 through G3.		*/
X	char		curgl;		/* Current GL setting.		*/
X	char		curgr;		/* Current GR setting.		*/
X	char		curss;		/* Current single shift.	*/
X	int		scroll_amt;	/* amount to scroll		*/
X	int		refresh_amt;	/* amount to refresh		*/
X	Boolean		jumpscroll;	/* whether we should jumpscroll */
X	Boolean         always_highlight; /* whether to highlight cursor */
X
X/* Tektronix window parameters */
X	GC		TnormalGC;	/* normal painting		*/
X	GC		TcursorGC;	/* normal cursor painting	*/
X	Pixel		Tforeground;	/* foreground color		*/
X	Pixel		Tbackground;	/* Background color		*/
X	Pixel		Tcursorcolor;	/* Cursor color			*/
X	Pixmap		Tbgndtile;	/* background tile pixmap	*/
X	int		Tcolor;		/* colors used			*/
X	Boolean		planeused;	/* is xorplane being used	*/
X	Boolean		cellsused;	/* are color cells being used	*/
X	XColor		colorcells[3];	/* color cells for Tek		*/
X	Boolean		Vshow;		/* VT window showing		*/
X	Boolean		Tshow;		/* Tek window showing		*/
X	Boolean		waitrefresh;	/* postpone refresh		*/
X	struct {
X		Window	window;		/* X window id			*/
X		int	width;		/* width of columns		*/
X		int	height;		/* height of rows		*/
X		int	fullwidth;	/* full width of window		*/
X		int	fullheight;	/* full height of window	*/
X		double	tekscale;	/* scale factor Tek -> vs100	*/
X	} fullTwin;
X	XPoint		**Tbox;		/* draw unselected cursor	*/
X	int		xorplane;	/* z plane for inverts		*/
X	GC		linepat[TEKNUMLINES]; /* line patterns		*/
X	XFontStruct 	*Tfont[TEKNUMFONTS]; /* Tek fonts		*/
X	int		tobaseline[TEKNUMFONTS]; /* top to baseline for
X							each font	*/
X	Boolean		TekEmu;		/* true if Tektronix emulation	*/
X	int		cur_X;		/* current x			*/
X	int		cur_Y;		/* current y			*/
X	Tmodes		cur;		/* current tek modes		*/
X	Tmodes		page;		/* starting tek modes on page	*/
X	int		margin;		/* 0 -> margin 1, 1 -> margin 2	*/
X	int		pen;		/* current Tektronix pen 0=up, 1=dn */
X	char		*TekGIN;	/* nonzero if Tektronix GIN mode*/
X	int		multiClickTime;	 /* time between multiclick selects */
X	char		*charClass;	/* for overriding word selection */
X	Boolean		cutNewline;	/* whether or not line cut has \n */
X	Boolean		cutToBeginningOfLine;  /* line cuts to BOL? */
X	char		*selection;	/* the current selection */
X	int		selection_size; /* size of allocated buffer */
X	int		selection_length; /* number of significant bytes */
X	int		selection_time;	/* latest event timestamp */
X	int		startHRow, startHCol, /* highlighted text */
X			endHRow, endHCol,
X			startHCoord, endHCoord;
X	Atom*		selection_atoms; /* which selections we own */
X	Cardinal	sel_atoms_size;	/*  how many atoms allocated */
X	Cardinal	selection_count; /* how many atoms in use */
X} TScreen;
X
X/* meaning of bits in screen.select flag */
X#define	INWINDOW	01	/* the mouse is in one of the windows */
X#define	FOCUS		02	/* one of the windows is the focus window */
X
X#define MULTICLICKTIME 250	/* milliseconds */
X
Xtypedef struct
X{
X	unsigned	flags;
X} TKeyboard;
X
Xtypedef struct _Misc {
X    char *geo_metry;
X    char *T_geometry;
X    char *f_n;
X    char *f_b;
X    Boolean log_on;
X    Boolean login_shell;
X    Boolean re_verse;
X    Boolean reverseWrap;
X    Boolean logInhibit;
X    Boolean signalInhibit;
X    Boolean tekInhibit;
X    Boolean scrollbar;
X    Boolean titeInhibit;
X} Misc;
X
Xtypedef struct {int foo;} XtermClassPart, TekClassPart;
X
Xtypedef struct _XtermClassRec {
X    CoreClassPart  core_class;
X    XtermClassPart xterm_class;
X} XtermClassRec;
X
Xtypedef struct _TekClassRec {
X    CoreClassPart core_class;
X    TekClassPart tek_class;
X} TekClassRec;
X
X/* define masks for flags */
X#define CAPS_LOCK	0x01
X#define KYPD_APL	0x02
X#define CURSOR_APL	0x04
X
X
X#define N_MARGINBELL	10
X#define MAX_TABS	320
X#define TAB_ARRAY_SIZE	10	/* number of ints to provide MAX_TABS bits */
X
Xtypedef unsigned Tabs [TAB_ARRAY_SIZE];
X
Xtypedef struct _XtermWidgetRec {
X    CorePart	core;
X    TKeyboard	keyboard;	/* terminal keyboard		*/
X    TScreen	screen;		/* terminal screen		*/
X    unsigned	flags;		/* mode flags			*/
X    unsigned	initflags;	/* initial mode flags		*/
X    Tabs	tabs;		/* tabstops of the terminal	*/
X    Misc	misc;		/* miscelaneous parameters	*/
X} XtermWidgetRec, *XtermWidget;
X
Xtypedef struct _TekWidgetRec {
X    CorePart core;
X} TekWidgetRec, *TekWidget;
X
X#define BUF_SIZE 4096
X
X/* masks for terminal flags */
X
X#define INVERSE		0x01	/* invert the characters to be output */
X#define UNDERLINE	0x02	/* true if underlining */
X#define BOLD		0x04
X#define WRAPAROUND	0x08
X#define REVERSE_VIDEO	0x10	/* true if screen white on black */
X#define ORIGIN		0x20	/* true if in origin mode */
X#define INSERT		0x40	/* true if in insert mode */
X#define SMOOTHSCROLL	0x80	/* true if in smooth scroll mode */
X#ifdef DO_AUTOREPEAT
X#define AUTOREPEAT	0x100	/* true if in autorepeat mode */
X#endif /* DO_AUTOREPEAT */
X#define IN132COLUMNS	0x200	/* true if in 132 column mode */
X#define LINEFEED	0x400
X#define	REVERSEWRAP	0x800	/* true if reverse wraparound mode */
X
X#define	ATTRIBUTES	0x07	/* attributes mask */
X#define CHAR		0177
X
X#define VWindow(screen)		(screen->fullVwin.window)
X#define VShellWindow		term->core.parent->core.window
X#define TextWindow(screen)      (screen->fullVwin.window)
X#define TWindow(screen)		(screen->fullTwin.window)
X#define TShellWindow		tekWidget->core.parent->core.window
X#define Width(screen)		(screen->fullVwin.width)
X#define Height(screen)		(screen->fullVwin.height)
X#define FullWidth(screen)	(screen->fullVwin.fullwidth)
X#define FullHeight(screen)	(screen->fullVwin.fullheight)
X#define FontWidth(screen)	(screen->fullVwin.f_width)
X#define FontHeight(screen)	(screen->fullVwin.f_height)
X#define TWidth(screen)		(screen->fullTwin.width)
X#define THeight(screen)		(screen->fullTwin.height)
X#define TFullWidth(screen)	(screen->fullTwin.fullwidth)
X#define TFullHeight(screen)	(screen->fullTwin.fullheight)
X#define TekScale(screen)	(screen->fullTwin.tekscale)
X
X#define CursorX(screen,col) ((col) * FontWidth(screen) + screen->border \
X			+ screen->scrollbar)
X#define CursorY(screen,row) ((((row) - screen->topline) * FontHeight(screen)) \
X			+ screen->border)
X
X#define	TWINDOWEVENTS	(KeyPressMask | ExposureMask | ButtonPressMask |\
X			 ButtonReleaseMask | StructureNotifyMask |\
X			 EnterWindowMask | LeaveWindowMask | FocusChangeMask)
X
X#define	WINDOWEVENTS	(TWINDOWEVENTS | PointerMotionMask)
X
X
X#define TEK_LINK_BLOCK_SIZE 1024
X
Xtypedef struct Tek_Link
X{
X	struct Tek_Link	*next;	/* pointer to next TekLink in list
X				   NULL <=> this is last TekLink */
X	short count;
X	char *ptr;
X	char data [TEK_LINK_BLOCK_SIZE];
X} TekLink;
X
X/* flags for cursors */
X#define	OFF		0
X#define	ON		1
X#define	CLEAR		0
X#define	TOGGLE		1
X
X/* flags for inhibit */
X#define	I_LOG		0x01
X#define	I_SIGNAL	0x02
X#define	I_TEK		0x04
X
Xextern Cursor make_tcross();
Xextern Cursor make_xterm();
Xextern Cursor make_wait();
Xextern Cursor make_arrow();
END_OF_FILE
if test 15008 -ne `wc -c <'ptyx.h'`; then
    echo shar: \"'ptyx.h'\" unpacked with wrong size!
fi
# end of 'ptyx.h'
fi
if test -f 'xroutines.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xroutines.c'\"
else
echo shar: Extracting \"'xroutines.c'\" \(2773 characters\)
sed "s/^X//" >'xroutines.c' <<'END_OF_FILE'
X#include "xdmconsole.h"
X
XDisplay   *disp;
XWindow     win;
XGC         wingc;
XXFontStruct        *font;
XXEvent     thebigevent;
XXSizeHints hinthint;
XCursor     wincurs, opwincurs;
Xint        screen;
Xlong       foreg, backg;
Xint	   winw, winh;
X
X
Xint initwin(width, height, x, y, border, trans, name)
Xint width, height, x, y, border, trans;
Xchar *name;
X{
X
X	if (win > 0) return(-1);
X
X	if ((disp = XOpenDisplay("unix:0.0")) == NULL) exit(0);
X	screen=DefaultScreen(disp);
X
X	if (x < 0) x = (int) ((DisplayWidth(disp, screen) - width) /2);
X	if (y < 0) y = (int) (DisplayHeight(disp, screen) - (height + 30));
X
X        backg=WhitePixel(disp, screen);
X        foreg=BlackPixel(disp, screen);
X
X	win=XCreateSimpleWindow(disp, DefaultRootWindow(disp),
X				x, y, width, height, 
X				border, foreg, backg);
X
X        wingc=XCreateGC(disp, win, 0, 0);
X        XSetBackground(disp, wingc, backg);
X        XSetForeground(disp, wingc, foreg);
X
X        XStoreName(disp, win, name);
X
X	if (trans) XSetTransientForHint(disp, win, win);
X	winh=height;
X	winw=width;
X}
X
Xint winfont(fontname)
Xchar *fontname;
X{
X	int ndirs;
X	char **dir;
X
X	dir = XGetFontPath(disp, &ndirs);
X	dir[ndirs] = (char *) malloc(sizeof("/usr/lib/X11/fonts/75dpi")+2);
X	strcpy(dir[ndirs++], "/usr/lib/X11/fonts/75dpi");
X	XSetFontPath(disp, dir, ndirs);
X	font=XLoadQueryFont(disp, fontname);
X        XSetFont(disp, wingc, font->fid);
X	XFreeFontPath(dir);
X}
X
Xint wincursor(cursor)
Xchar *cursor;
X{
X        wincurs=XCreateFontCursor(disp, XC_gumby);
X        XDefineCursor(disp, win, wincurs);
X}
X
Xint winevents(event) 
Xlong event;
X{
X	XSelectInput(disp, win, event);
X}
X
X
Xint winprint(x, y, string)
Xint x, y;
Xchar *string;
X{
X	XDrawString(disp, win, wingc, x, y, string, strlen(string));
X	XFlush(disp);
X}
X
Xint winwrapprint(x, y, string, inc)
Xint x, y;
Xchar *string;
Xint inc;
X{
X	int count=0;
X	if (XTextWidth(font, string, strlen(string)) > winw)
X	{
X		for (count=strlen(string); XTextWidth(font, string, count) > winw; count--);
X		XDrawString(disp, win, wingc, x, y, string, count);
X		scrollup(inc);
X		XDrawString(disp, win, wingc, x, y, &string[count+1], strlen(&string[count+1]));
X		XFlush(disp);
X		return(1);
X	}
X	XDrawString(disp, win, wingc, x, y, string, strlen(string));
X	XFlush(disp);
X	return(0);
X}
X
Xint showwin()
X{
X	XMapRaised(disp, win);
X	XFlush(disp);
X	XNextEvent(disp, &thebigevent);
X}
X
Xint clearwin()
X{
X	XClearWindow(disp, win);
X}
X
Xint scrollup(lineheight)
Xint lineheight;
X{
X	int	 x, y, height, width;
X
X	x=0;
X	y=lineheight;
X	width=winw;
X	height=winh-lineheight;
X	XCopyArea(disp, win, win, wingc, x, y, width, height, 0, 0);
X	XClearArea(disp, win, 0, height, width, lineheight, False);
X	XFlush(disp);
X}
X
Xint windeath()
X{
X	XFreeFont(disp, font);
X	XFreeGC(disp, wingc);
X	XDestroyWindow(disp, win);
X	win = 0;
X	XCloseDisplay(disp);
X}
END_OF_FILE
if test 2773 -ne `wc -c <'xroutines.c'`; then
    echo shar: \"'xroutines.c'\" unpacked with wrong size!
fi
# end of 'xroutines.c'
fi
echo shar: End of shell archive.
exit 0

dan
----------------------------------------------------
O'Reilly && Associates   argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.



More information about the Comp.sources.x mailing list