[comp.sources.sun] v01i035: Eyecon - Someone to watch over you

mcgrew@dartagnan.rutgers.edu (Charles Mcgrew) (06/22/89)

Submitted-by: chuck@trantor.harris-atd.com
Posting-number: Volume 1, Issue 35
Archive-name: eyecon

#! /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:  Makefile README eyecon.c eyecon.man eyes.icon matte.icon
#   pupil.icon
# Wrapped by chuck@melmac on Mon Oct 10 08:01:00 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(341 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
XWINDOW_LIB	= -lsuntool -lsunwindow -lpixrect
X
XBINDIR		= /usr/local/bin
X
XMANDIR		= /usr/man/manl
XMANEXT		= l
X
Xeyecon: eyecon.c
X	cc -O -o eyecon eyecon.c $(WINDOW_LIB)
X
Xinstall: eyecon
X	mv eyecon $(BINDIR)
X	cp eyecon.man $(MANDIR)/eyecon.$(MANEXT)
X
Xmakefile:
X	makedeps Makefile *.[ch]
X
X#dependencies
X
Xeyecon.o: matte.icon eyes.icon pupil.icon
END_OF_FILE
if test 341 -ne `wc -c <'Makefile'`; then
    echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'README' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(670 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
X     Eyecon is nifty hack that guarantees that someone is always watching
Xyour mouse.  Before making eyecon, just check the Makefile to verify that
XBINDIR, MANDIR, and MANEXT are set to the right things.
X
X     I originally saw eyecon running on a Silicon Graphics workstation
Xbeing used by Mark Callow (of SG) at SIGGRAPH '88 in Atlanta.  I wrote a 
Xversion from scratch for the Sun, and my office-mate, Ellery Chan, came 
Xup with the cute name.
X
X     Comments are always appreciated.  Send them to:
X
X	Chuck Musciano
X	Advanced Technology Department
X	Harris Corporation
X	PO Box 37, MS 3A/1912
X	Melbourne, FL 32902
X	(407) 727-6131
X	chuck@trantor.harris-atd.com
X
XHave fun!
END_OF_FILE
if test 670 -ne `wc -c <'README'`; then
    echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'eyecon.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'eyecon.c'\"
else
echo shar: Extracting \"'eyecon.c'\" \(9677 characters\)
sed "s/^X//" >'eyecon.c' <<'END_OF_FILE'
X/************************************************************************/
X/*	Copyright 1988 by Chuck Musciano and Harris Corporation		*/
X/*									*/
X/*	Permission to use, copy, modify, and distribute this software	*/
X/*	and its documentation for any purpose and without fee is	*/
X/*	hereby granted, provided that the above copyright notice	*/
X/*	appear in all copies and that both that copyright notice and	*/
X/*	this permission notice appear in supporting documentation, and	*/
X/*	that the name of Chuck Musciano and Harris Corporation not be	*/
X/*	used in advertising or publicity pertaining to distribution	*/
X/*	of the software without specific, written prior permission.	*/
X/*	Chuck Musciano and Harris Corporation make no representations	*/
X/*	about the suitability of this software for any purpose.  It is	*/
X/*	provided "as is" without express or implied warranty.		*/
X/************************************************************************/
X
X#include	<stdio.h>
X#include	<suntool/sunview.h>
X#include	<suntool/canvas.h>
X#include	<suntool/icon_load.h>
X#include	<sys/file.h>
X#include	<sys/time.h>
X
X#define		slope_of(x, y)		(((x) == 0)? MAX_SLOPE : (((y) * 1024) / (x)))
X
X#define		control_point(x, y)	{x, y, slope_of(x, y)}
X
X#define		distance(x, y)		((x)*(x) + (y)*(y))
X
X#define		EYE_WIDTH		45
X#define		EYE_HEIGHT		63
X#define		EYE_GAP			6
X#define		FULL_WIDTH		(2 * EYE_WIDTH + EYE_GAP)
X#define		FULL_HEIGHT		EYE_HEIGHT
X
X#define		PUPIL_RADIUS		8
X#define		PUPIL_DIAMETER		15
X
X#define		CENTER_X		23
X#define		CENTER_Y		32
X
X#define		CONTROL_POINTS		22
X
X#define		MAX_SLOPE		2000000
X
X#define		POLL_INTERVAL		50000 /* usec */
X
Xextern	char	*getenv();
Xextern	void	sprintf();
X
Xstatic	short	matte_bits[] = {
X#include	"matte.icon"
X			       };
Xmpr_static(matte, FULL_WIDTH, FULL_HEIGHT, 1, matte_bits);
X
Xstatic	short	eye_edge_bits[] = {
X#include	"eyes.icon"
X				  };
Xmpr_static(eye_edge, FULL_WIDTH, FULL_HEIGHT, 1, eye_edge_bits);
X
Xstatic	short	root_gray_bits[] = {0x8000,0x8000,0x2000,0x2000};
Xmpr_static(root_gray, 4, 4, 1, root_gray_bits);
X
Xstatic	short	pupil_bits[] = {
X#include	"pupil.icon"
X			       };
Xmpr_static(pupil, PUPIL_DIAMETER, PUPIL_DIAMETER, 1, pupil_bits);
X
Xstatic	struct	itimerval	pupil_timer = {{0, POLL_INTERVAL}, {0, POLL_INTERVAL}};
X
Xstruct	c_point	{int	x;
X		 int	y;
X		 int	slope;
X		};
X
Xstatic	struct	c_point	control[CONTROL_POINTS] = {control_point(10,  0),
X						   control_point(10,  1),
X						   control_point(10,  2),
X						   control_point(10,  3),
X						   control_point(10,  4),
X						   control_point(10,  5),
X						   control_point( 9,  6),
X						   control_point( 9,  7),
X						   control_point( 9,  8),
X						   control_point( 9,  9),
X						   control_point( 8, 10),
X						   control_point( 8, 11),
X						   control_point( 8, 12),
X						   control_point( 7, 13),
X						   control_point( 7, 14),
X						   control_point( 6, 15),
X						   control_point( 5, 16),
X						   control_point( 4, 17),
X						   control_point( 3, 18),
X						   control_point( 2, 18),
X						   control_point( 1, 19),
X						   {0, 19, MAX_SLOPE}};
X
Xstatic	Frame	bf;
Xstatic	Pixwin	*fpw, *cpw;
Xstatic	Pixfont	*font;
Xstatic	struct	pixrect	*eyes;
Xstatic	char	*program;
Xstatic	int	desktop_fd;
Xstatic	int	curr_lx, curr_ly, curr_rx, curr_ry;
Xstatic	int	old_x, old_y;
X
X/************************************************************************/
Xstatic	locate_pupil(mouse_x, mouse_y, pupil_x, pupil_y)
X
Xint	mouse_x;
Xint	mouse_y;
Xint	*pupil_x;
Xint	*pupil_y;
X
X{	int	i, s, x = 1, y = 1;
X
X	if (mouse_x < 0) {
X	   x = -1;
X	   mouse_x = - mouse_x;
X	   }
X	if (mouse_y < 0) {
X	   y = -1;
X	   mouse_y = - mouse_y;
X	   }
X	s = slope_of(mouse_x, mouse_y);
X	for (i = 0; i < CONTROL_POINTS; i++)
X	   if (s <= control[i].slope) {
X	      *pupil_x = x * control[i].x;
X	      *pupil_y = y * control[i].y;
X	      if (distance(mouse_x, mouse_y) < distance(*pupil_x, *pupil_y)) {
X	         *pupil_x = x * mouse_x;
X	         *pupil_y = y * mouse_y;
X	         }
X	      return;
X	      }
X	fprintf(stderr, "%s: slope (%d) not in range %d to %d\n", program, s, control[0].slope, control[CONTROL_POINTS - 1].slope);
X	*pupil_x = *pupil_y = 0;
X}
X
X/************************************************************************/
Xstatic	pupil_movement(x, y)
X
Xint	x;
Xint	y;
X
X{	int	win_x, win_y, lx, ly, rx, ry;
X	Rect	*rect;
X
X	rect = (Rect *) window_get(bf, FRAME_CLOSED_RECT);
X	win_x = rect->r_left;
X	win_y = rect->r_top;
X	locate_pupil(x - (win_x + CENTER_X), y - (win_y + CENTER_Y), &lx, &ly);
X	locate_pupil(x - (win_x + EYE_WIDTH + EYE_GAP + CENTER_X), y - (win_y + CENTER_Y), &rx, &ry);
X	if (lx != curr_lx || ly != curr_ly) {
X	   pw_rop(fpw, curr_lx + CENTER_X - PUPIL_RADIUS, curr_ly + CENTER_Y - PUPIL_RADIUS, PUPIL_DIAMETER, PUPIL_DIAMETER, PIX_SRC ^ PIX_DST, &pupil, 0, 0);
X	   pw_rop(fpw, lx + CENTER_X - PUPIL_RADIUS, ly + CENTER_Y - PUPIL_RADIUS, PUPIL_DIAMETER, PUPIL_DIAMETER, PIX_SRC ^ PIX_DST, &pupil, 0, 0);
X	   curr_lx = lx;
X	   curr_ly = ly;
X	   }
X	if (rx != curr_rx || ry != curr_ry) {
X	   pw_rop(fpw, curr_rx + EYE_WIDTH + EYE_GAP + CENTER_X - PUPIL_RADIUS, curr_ry + CENTER_Y - PUPIL_RADIUS, PUPIL_DIAMETER, PUPIL_DIAMETER, PIX_SRC ^ PIX_DST, &pupil, 0, 0);
X	   pw_rop(fpw, rx + EYE_WIDTH + EYE_GAP + CENTER_X - PUPIL_RADIUS, ry + CENTER_Y - PUPIL_RADIUS, PUPIL_DIAMETER, PUPIL_DIAMETER, PIX_SRC ^ PIX_DST, &pupil, 0, 0);
X	   curr_rx = rx;
X	   curr_ry = ry;
X	   }
X}
X
X/************************************************************************/
Xstatic	mouse_position(x, y)
X
Xint	x;
Xint	y;
X
X{	char	buf[30];
X
X	sprintf(buf, "Mouse is at [%4d, %4d]", x, y);
X	pw_text(cpw, 1, -font->pf_char[' '].pc_home.y, PIX_SRC, font, buf);
X}
X
X/************************************************************************/
Xstatic	Notify_value	pupil_proc(frame, which)
X
XNotify_client	frame;
Xint		which;
X
X{	int	x, y;
X
X	x = win_get_vuid_value(desktop_fd, LOC_X_ABSOLUTE);
X	y = win_get_vuid_value(desktop_fd, LOC_Y_ABSOLUTE);
X	if (x != old_x || y != old_y) {
X	   if (!window_get(bf, FRAME_CLOSED))
X	      mouse_position(x, y);
X	   else 
X	      pupil_movement(x, y);
X	   old_x = x;
X	   old_y = y;
X	   }
X	return(NOTIFY_DONE);
X}
X
X/************************************************************************/
Xstatic	frame_event_proc(frame, event, arg, type)
X
XFrame	frame;
XEvent	*event;
XNotify_arg	arg;
XNotify_event_type	type;
X
X{
X	if (event_id(event) == WIN_REPAINT && window_get(bf, FRAME_CLOSED)) {
X	   pw_rop(fpw, 0, 0, FULL_WIDTH, FULL_HEIGHT, PIX_SRC, eyes, 0, 0);
X	   pw_rop(fpw, curr_lx + CENTER_X - PUPIL_RADIUS, curr_ly + CENTER_Y - PUPIL_RADIUS, PUPIL_DIAMETER, PUPIL_DIAMETER, PIX_SRC ^ PIX_DST, &pupil, 0, 0);
X	   pw_rop(fpw, curr_rx + EYE_WIDTH + EYE_GAP + CENTER_X - PUPIL_RADIUS, curr_ry + CENTER_Y - PUPIL_RADIUS, PUPIL_DIAMETER, PUPIL_DIAMETER, PIX_SRC ^ PIX_DST, &pupil, 0, 0);
X	   }
X	else
X	   window_default_event_func(frame, event, arg, type);
X}
X
X/************************************************************************/
Xstatic	struct	pixrect	*load_icon(path)
X
Xchar	*path;
X
X{	char	msg[IL_ERRORMSG_SIZE];
X	struct	pixrect	*p;
X	FILE	*f;
X
X	if ((p = icon_load_mpr(path, msg)) == NULL) { /* not in icon format */
X	   if ((f = fopen(path, "r")) == NULL) {
X	      fprintf(stderr, "%s: could not open %s\n", program, path);
X	      exit(1);
X	      }
X	   if ((p = pr_load(f, NULL)) == NULL) {
X	      fprintf(stderr, "%s: %s must be in either icon or raster file format\n", program, path);
X	      exit(1);
X	      }
X	   fclose(f);
X	   }
X	return(p);
X}
X
X/************************************************************************/
Xstatic	create_basic_image(argc, argv)
X
Xint	argc;
Xchar	**argv;
X
X{	struct	pixrect	*background;
X
X	if (argc == 1) /* use root gray, the default */
X	   background = &root_gray;
X	else if (argc == 3 && strcmp(argv[1], "-b") == 0) /* pick up a different background */
X	   background = load_icon(argv[2]);
X	else {
X	   fprintf(stderr, "usage: %s [-b <file>]\n", program);
X	   exit(1);
X	   }
X	eyes = mem_create(FULL_WIDTH, FULL_HEIGHT, 1);
X	pr_replrop(eyes, 0, 0, FULL_WIDTH, FULL_HEIGHT, PIX_SRC, background, 0, 0);
X	pr_rop(eyes, 0, 0, FULL_WIDTH, FULL_HEIGHT, PIX_SRC & PIX_DST, &matte, 0, 0);
X	pr_rop(eyes, 0, 0, FULL_WIDTH, FULL_HEIGHT, PIX_SRC | PIX_DST, &eye_edge, 0, 0);
X	pr_destroy(background);
X}
X
X/************************************************************************/
Xmain(argc, argv)
X
Xint	argc;
Xchar	**argv;
X
X{	char	*parent;
X	Icon	icon;
X	Canvas	canvas;
X
X	strcpy(program = (char *) malloc(strlen(argv[0]) + 1), argv[0]);
X	if ((parent = (char *) getenv("WINDOW_PARENT")) == NULL) {
X	   fprintf(stderr, "%s must be run from within Suntools\n", argv[0]);
X	   exit(1);
X	   }
X	if ((desktop_fd = open(parent, O_RDWR)) == -1) {
X	   fprintf(stderr, "%s: could not access desktop window device: %s\n", program, parent);
X	   exit(1);
X	   }
X	if ((font = pf_default()) == NULL) {
X	   fprintf(stderr, "%s: could not default system font\n", program);
X	   exit(1);
X	   }
X	icon = icon_create(ICON_WIDTH, FULL_WIDTH, ICON_HEIGHT, FULL_HEIGHT, ICON_LABEL, "", 0);
X	bf = window_create(NULL, FRAME,
X			      FRAME_LABEL, "<< Eyecon >>",
X			      FRAME_NO_CONFIRM, TRUE,
X			      FRAME_ARGC_PTR_ARGV, &argc, argv,
X			      FRAME_ICON, icon,
X			      FRAME_CLOSED, TRUE,
X			      WIN_EVENT_PROC, frame_event_proc,
X			   0);
X	canvas = window_create(bf, CANVAS,
X				  WIN_FONT, font,
X				  WIN_ROWS, 1,
X				  WIN_COLUMNS, 24,
X			       0);
X	window_fit(bf);
X	fpw = (Pixwin *) window_get(bf, WIN_PIXWIN);
X	cpw = canvas_pixwin(canvas);
X
X	curr_lx = 4 * FULL_WIDTH;
X	curr_ly = 4 * FULL_HEIGHT;
X	curr_rx = 4 * FULL_WIDTH;
X	curr_ry = 4 * FULL_HEIGHT;
X	old_x = -1;
X	old_y = -1;
X
X	create_basic_image(argc, argv);
X	notify_set_itimer_func(bf, pupil_proc, ITIMER_REAL, &pupil_timer, 0);
X	window_main_loop(bf);
X	close(desktop_fd);
X	exit(0);
X}
END_OF_FILE
if test 9677 -ne `wc -c <'eyecon.c'`; then
    echo shar: \"'eyecon.c'\" unpacked with wrong size!
fi
# end of 'eyecon.c'
fi
if test -f 'eyecon.man' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'eyecon.man'\"
else
echo shar: Extracting \"'eyecon.man'\" \(455 characters\)
sed "s/^X//" >'eyecon.man' <<'END_OF_FILE'
X.TH EYECON 1 "12 August 1988"
X.SH NAME
Xeyecon \- watch the mouse
X.SH SYNOPSIS
X\fBeyecon\fP [ \fB\-b\fP \fIbackground\fP ]
X.SH DESCRIPTION
X\fIEyecon\fP makes sure that someone is keeping an eye on your mouse.
X\fIEyecon\fP normally uses root gray as its background, but alternate
Xbackground patterns (in the form of Sun raster or \fIiconedit\fP(1) images)
Xcan be specified with \fB-b\fP to match your personal desktop background.
X.SH AUTHOR
XChuck Musciano
X
END_OF_FILE
if test 455 -ne `wc -c <'eyecon.man'`; then
    echo shar: \"'eyecon.man'\" unpacked with wrong size!
fi
# end of 'eyecon.man'
fi
if test -f 'eyes.icon' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'eyes.icon'\"
else
echo shar: Extracting \"'eyes.icon'\" \(2819 characters\)
sed "s/^X//" >'eyes.icon' <<'END_OF_FILE'
X/* Format_version=1, Width=96, Height=63, Depth=1, Valid_bits_per_item=16
X */
X	0x0000,0x1FC0,0x0000,0x0000,0x03F8,0x0000,0x0000,0xFFF8,
X	0x0000,0x0000,0x1FFF,0x0000,0x0003,0xE03E,0x0000,0x0000,
X	0x7C07,0xC000,0x000F,0x0007,0x8000,0x0001,0xE000,0xF000,
X	0x001C,0x0001,0xC000,0x0003,0x8000,0x3800,0x0038,0x0000,
X	0xE000,0x0007,0x0000,0x1C00,0x0060,0x0000,0x3000,0x000C,
X	0x0000,0x0600,0x00C0,0x0000,0x1800,0x0018,0x0000,0x0300,
X	0x0180,0x0000,0x0C00,0x0030,0x0000,0x0180,0x0380,0x0000,
X	0x0E00,0x0070,0x0000,0x01C0,0x0300,0x0000,0x0600,0x0060,
X	0x0000,0x00C0,0x0600,0x0000,0x0300,0x00C0,0x0000,0x0060,
X	0x0600,0x0000,0x0300,0x00C0,0x0000,0x0060,0x0C00,0x0000,
X	0x0180,0x0180,0x0000,0x0030,0x0C00,0x0000,0x0180,0x0180,
X	0x0000,0x0030,0x1800,0x0000,0x00C0,0x0300,0x0000,0x0018,
X	0x1800,0x0000,0x00C0,0x0300,0x0000,0x0018,0x3000,0x0000,
X	0x0060,0x0600,0x0000,0x000C,0x3000,0x0000,0x0060,0x0600,
X	0x0000,0x000C,0x3000,0x0000,0x0060,0x0600,0x0000,0x000C,
X	0x6000,0x0000,0x0030,0x0C00,0x0000,0x0006,0x6000,0x0000,
X	0x0030,0x0C00,0x0000,0x0006,0x6000,0x0000,0x0030,0x0C00,
X	0x0000,0x0006,0x6000,0x0000,0x0030,0x0C00,0x0000,0x0006,
X	0x6000,0x0000,0x0030,0x0C00,0x0000,0x0006,0xC000,0x0000,
X	0x0018,0x1800,0x0000,0x0003,0xC000,0x0000,0x0018,0x1800,
X	0x0000,0x0003,0xC000,0x0000,0x0018,0x1800,0x0000,0x0003,
X	0xC000,0x0000,0x0018,0x1800,0x0000,0x0003,0xC000,0x0000,
X	0x0018,0x1800,0x0000,0x0003,0xC000,0x0000,0x0018,0x1800,
X	0x0000,0x0003,0xC000,0x0000,0x0018,0x1800,0x0000,0x0003,
X	0xC000,0x0000,0x0018,0x1800,0x0000,0x0003,0xC000,0x0000,
X	0x0018,0x1800,0x0000,0x0003,0xC000,0x0000,0x0018,0x1800,
X	0x0000,0x0003,0xC000,0x0000,0x0018,0x1800,0x0000,0x0003,
X	0xC000,0x0000,0x0018,0x1800,0x0000,0x0003,0xC000,0x0000,
X	0x0018,0x1800,0x0000,0x0003,0x6000,0x0000,0x0030,0x0C00,
X	0x0000,0x0006,0x6000,0x0000,0x0030,0x0C00,0x0000,0x0006,
X	0x6000,0x0000,0x0030,0x0C00,0x0000,0x0006,0x6000,0x0000,
X	0x0030,0x0C00,0x0000,0x0006,0x6000,0x0000,0x0030,0x0C00,
X	0x0000,0x0006,0x3000,0x0000,0x0060,0x0600,0x0000,0x000C,
X	0x3000,0x0000,0x0060,0x0600,0x0000,0x000C,0x3000,0x0000,
X	0x0060,0x0600,0x0000,0x000C,0x1800,0x0000,0x00C0,0x0300,
X	0x0000,0x0018,0x1800,0x0000,0x00C0,0x0300,0x0000,0x0018,
X	0x0C00,0x0000,0x0180,0x0180,0x0000,0x0030,0x0C00,0x0000,
X	0x0180,0x0180,0x0000,0x0030,0x0600,0x0000,0x0300,0x00C0,
X	0x0000,0x0060,0x0600,0x0000,0x0300,0x00C0,0x0000,0x0060,
X	0x0300,0x0000,0x0600,0x0060,0x0000,0x00C0,0x0380,0x0000,
X	0x0E00,0x0070,0x0000,0x01C0,0x0180,0x0000,0x0C00,0x0030,
X	0x0000,0x0180,0x00C0,0x0000,0x1800,0x0018,0x0000,0x0300,
X	0x0060,0x0000,0x3000,0x000C,0x0000,0x0600,0x0038,0x0000,
X	0xE000,0x0007,0x0000,0x1C00,0x001C,0x0001,0xC000,0x0003,
X	0x8000,0x3800,0x000F,0x0007,0x8000,0x0001,0xE000,0xF000,
X	0x0003,0xE03E,0x0000,0x0000,0x7C07,0xC000,0x0000,0xFFF8,
X	0x0000,0x0000,0x1FFF,0x0000,0x0000,0x1FC0,0x0000,0x0000,
X	0x03F8,0x0000
END_OF_FILE
if test 2819 -ne `wc -c <'eyes.icon'`; then
    echo shar: \"'eyes.icon'\" unpacked with wrong size!
fi
# end of 'eyes.icon'
fi
if test -f 'matte.icon' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'matte.icon'\"
else
echo shar: Extracting \"'matte.icon'\" \(2819 characters\)
sed "s/^X//" >'matte.icon' <<'END_OF_FILE'
X/* Format_version=1, Width=96, Height=63, Depth=1, Valid_bits_per_item=16
X */
X	0xFFFF,0xE03F,0xFFFF,0xFFFF,0xFC07,0xFFFF,0xFFFF,0x0007,
X	0xFFFF,0xFFFF,0xE000,0xFFFF,0xFFFC,0x0001,0xFFFF,0xFFFF,
X	0x8000,0x3FFF,0xFFF0,0x0000,0x7FFF,0xFFFE,0x0000,0x0FFF,
X	0xFFE0,0x0000,0x3FFF,0xFFFC,0x0000,0x07FF,0xFFC0,0x0000,
X	0x1FFF,0xFFF8,0x0000,0x03FF,0xFF80,0x0000,0x0FFF,0xFFF0,
X	0x0000,0x01FF,0xFF00,0x0000,0x07FF,0xFFE0,0x0000,0x00FF,
X	0xFE00,0x0000,0x03FF,0xFFC0,0x0000,0x007F,0xFC00,0x0000,
X	0x01FF,0xFF80,0x0000,0x003F,0xFC00,0x0000,0x01FF,0xFF80,
X	0x0000,0x003F,0xF800,0x0000,0x00FF,0xFF00,0x0000,0x001F,
X	0xF800,0x0000,0x00FF,0xFF00,0x0000,0x001F,0xF000,0x0000,
X	0x007F,0xFE00,0x0000,0x000F,0xF000,0x0000,0x007F,0xFE00,
X	0x0000,0x000F,0xE000,0x0000,0x003F,0xFC00,0x0000,0x0007,
X	0xE000,0x0000,0x003F,0xFC00,0x0000,0x0007,0xC000,0x0000,
X	0x001F,0xF800,0x0000,0x0003,0xC000,0x0000,0x001F,0xF800,
X	0x0000,0x0003,0xC000,0x0000,0x001F,0xF800,0x0000,0x0003,
X	0x8000,0x0000,0x000F,0xF000,0x0000,0x0001,0x8000,0x0000,
X	0x000F,0xF000,0x0000,0x0001,0x8000,0x0000,0x000F,0xF000,
X	0x0000,0x0001,0x8000,0x0000,0x000F,0xF000,0x0000,0x0001,
X	0x8000,0x0000,0x000F,0xF000,0x0000,0x0001,0x0000,0x0000,
X	0x0007,0xE000,0x0000,0x0000,0x0000,0x0000,0x0007,0xE000,
X	0x0000,0x0000,0x0000,0x0000,0x0007,0xE000,0x0000,0x0000,
X	0x0000,0x0000,0x0007,0xE000,0x0000,0x0000,0x0000,0x0000,
X	0x0007,0xE000,0x0000,0x0000,0x0000,0x0000,0x0007,0xE000,
X	0x0000,0x0000,0x0000,0x0000,0x0007,0xE000,0x0000,0x0000,
X	0x0000,0x0000,0x0007,0xE000,0x0000,0x0000,0x0000,0x0000,
X	0x0007,0xE000,0x0000,0x0000,0x0000,0x0000,0x0007,0xE000,
X	0x0000,0x0000,0x0000,0x0000,0x0007,0xE000,0x0000,0x0000,
X	0x0000,0x0000,0x0007,0xE000,0x0000,0x0000,0x0000,0x0000,
X	0x0007,0xE000,0x0000,0x0000,0x8000,0x0000,0x000F,0xF000,
X	0x0000,0x0001,0x8000,0x0000,0x000F,0xF000,0x0000,0x0001,
X	0x8000,0x0000,0x000F,0xF000,0x0000,0x0001,0x8000,0x0000,
X	0x000F,0xF000,0x0000,0x0001,0x8000,0x0000,0x000F,0xF000,
X	0x0000,0x0001,0xC000,0x0000,0x001F,0xF800,0x0000,0x0003,
X	0xC000,0x0000,0x001F,0xF800,0x0000,0x0003,0xC000,0x0000,
X	0x001F,0xF800,0x0000,0x0003,0xE000,0x0000,0x003F,0xFC00,
X	0x0000,0x0007,0xE000,0x0000,0x003F,0xFC00,0x0000,0x0007,
X	0xF000,0x0000,0x007F,0xFE00,0x0000,0x000F,0xF000,0x0000,
X	0x007F,0xFE00,0x0000,0x000F,0xF800,0x0000,0x00FF,0xFF00,
X	0x0000,0x001F,0xF800,0x0000,0x00FF,0xFF00,0x0000,0x001F,
X	0xFC00,0x0000,0x01FF,0xFF80,0x0000,0x003F,0xFC00,0x0000,
X	0x01FF,0xFF80,0x0000,0x003F,0xFE00,0x0000,0x03FF,0xFFC0,
X	0x0000,0x007F,0xFF00,0x0000,0x07FF,0xFFE0,0x0000,0x00FF,
X	0xFF80,0x0000,0x0FFF,0xFFF0,0x0000,0x01FF,0xFFC0,0x0000,
X	0x1FFF,0xFFF8,0x0000,0x03FF,0xFFE0,0x0000,0x3FFF,0xFFFC,
X	0x0000,0x07FF,0xFFF0,0x0000,0x7FFF,0xFFFE,0x0000,0x0FFF,
X	0xFFFC,0x0001,0xFFFF,0xFFFF,0x8000,0x3FFF,0xFFFF,0x0007,
X	0xFFFF,0xFFFF,0xE000,0xFFFF,0xFFFF,0xE03F,0xFFFF,0xFFFF,
X	0xFC07,0xFFFF
END_OF_FILE
if test 2819 -ne `wc -c <'matte.icon'`; then
    echo shar: \"'matte.icon'\" unpacked with wrong size!
fi
# end of 'matte.icon'
fi
if test -f 'pupil.icon' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'pupil.icon'\"
else
echo shar: Extracting \"'pupil.icon'\" \(186 characters\)
sed "s/^X//" >'pupil.icon' <<'END_OF_FILE'
X/* Format_version=1, Width=15, Height=15, Depth=1, Valid_bits_per_item=16
X */
X	0x07C0,0x1FF0,0x3FF8,0x7FFC,0x7FFC,0xFFFE,0xFFFE,0xFFFE,
X	0xFFFE,0xFFFE,0x7FFC,0x7FFC,0x3FF8,0x1FF0,0x07C0
END_OF_FILE
if test 186 -ne `wc -c <'pupil.icon'`; then
    echo shar: \"'pupil.icon'\" unpacked with wrong size!
fi
# end of 'pupil.icon'
fi
echo shar: End of shell archive.
exit 0

Chuck Musciano			ARPA  : chuck@trantor.harris-atd.com
Harris Corporation 		Usenet: ...!uunet!x102a!trantor!chuck
PO Box 37, MS 3A/1912		AT&T  : (407) 727-6131
Melbourne, FL 32902		FAX   : (407) 727-{5118,5227,4004}