[comp.sources.misc] v13i074: Faces v1.4.5: a visual list monitor for mail etc..

rburridge@Sun.COM (Rich Burridge) (07/03/90)

Posting-number: Volume 13, Issue 74
Submitted-by: rburridge@Sun.COM (Rich Burridge)
Archive-name: faces-1.4.5/part05

------CUT HERE------faces.part5------CUT HERE------
#! /bin/sh
# this is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh to create the files:
#	faces.1
#	face_update.1
#	faces_cps.cps
#	face_update
#	noface.icon
#	nomail.icon
#	noprint.icon
#	nopaper.icon
#	nousers.icon
# This archive created: Fri Jun 29 10:45:15 EST 1990
#
#
export PATH; PATH=/bin:$PATH
#
if [ -f faces.1 ]
then
echo shar: will not over-write existing file faces.1
else
echo shar: extracting 'faces.1',    11202 characters
cat > faces.1 <<'Funky_Stuff'
.\" @(#)faces.1 1.12 90/06/26
.\" tbl faces.1 | nroff -man
.TH FACES 1 "26 June 1990"
.SH NAME
faces \- visual mail, user and print face server.
.SH SYNOPSIS
.B "faces
[
.B \-H
.I hostname
]
[
.B \-MH
]
[
.B \-P
.I printer
]
[
.B \-U
]
[
.B \-a
]
[
.B \-b
.I background
]
[
.B \-c
.I columns
]
[
.B \-d
.I display
]
[
.B \-e
.I program
]
[
.B \-f
.I facedir
]
[
.B \-g
.I geometry
]
[
.B \-h
.I height
]
[
.B \-i
]
[
.B \-n
]
[
.B \-p
.I period
]
[
.B \-s
.I spoolfile
]
[
.B \-t
]
[
.B \-u
]
[
.B \-v
]
[
.B \-w
.I width
]
[
.B \-Wi
]
[
.B \-Wp
.I x y
]
[
.B \-WP
.I x y
]
.SH DESCRIPTION
.B faces
is a window based tool for visual monitoring lists. Typically it is used to
monitor mail, print queues or users on a system.. It contains graphical
interfaces for NeWS, SunView, XView and X11. It has five different modes of
operation:
.LP
The default (no
.BR -a ,
.BR -H ,
.BR -P
or
.B -e
arguments)
will monitor for new mail. By default, only the last ten
messages are displayed. Using the left mouse button it is possible to
toggle the text in the faces window. This will either be the username
or the time the mail message arrived. You can clear this area to the
background pattern by hitting the Delete key. The icon shows the image
of the last message to arrive.
.LP
The second choice
.RB ( -a )
is to monitor the whole of a mail file. The open window will
automatically adjust it's size to correctly show the face icons. The
open window options are the username or the timestamp and number of
message from that user. The icon will display the image of the last
message, and a count of the total number of messages in the spool
file or mail folder.
.LP
The third option
.RB ( -P )
allows this program to monitor a given print queue.
This will generate a single face icon showing the job at the top of the
print queue, and the text message will display the printer name plus the
number of jobs to be printed. Opening the window will show images of all
the jobs in the queue. The text on each image can be toggled, choices
being the owners' name and the size of the job in bytes.
.LP
With the fourth mode
.RB ( -H ),
you can monitor who is logged in a machine.
For each user, a face image is displayed. Text can be either the username
or the time they logged on. The iconic form displays the total number of users.
.LP
Finally
you can specify a program or shell script to run
.RB ( -e ).
The standard output
from this program will be read by the faces program, and the appropriate faces
displayed using the information provided. The format of this face information
is given in the faces manual page.
.LP
There are special displays for no mail, no faces found, no print jobs,
no paper in the printer, and no users logged into a machine.
.SH OPTIONS
.TP 12
.BI \-H " hostname"
Name of the machine to monitor. Faces will be displayed for each user
logged in.
.TP
.B \-MH
Used when the user is using MH to read mail. MH can shrink the mail
spoolfile and the default mail monitoring facility within
.I faces
adjusts accordingly.
.TP
.BI \-P " printer"
Printer name to monitor. If this and a mail spool file are given with the -s
option,
.B faces
will monitor the print queue.
.TP
.B \-U
Automatically send mail to a special mail alias, to update the
.I faces
database when a new X-Face: record is read. By default this special alias
is
.I facemaker.
This should be aliased (see
.IR aliases(7) )
to:
.br
facemaker:	"|/usr/local/bin/face_update"
.br
By default the
.I face_update
shell script will not overwriting existing ikons in the faces database.
Overwriting will take place if the -w option is specified.
You should also note that the installation of this mail alias is not done
automatically, as this might be considered a security risk on some systems.
.TP
.B \-a
Monitor the whole of the specified mail file. The icon and open window display
the appropriate faces, and dynamically change size as a new check is made and
if the mail file has altered size.
.TP
.BI \-b " background"
Sun icon file containing an alternate background pattern. The default is
root grey.
.TP
.BI \-c " columns"
Number of columns of face images in each row. By default this is 10.
.TP
.BI \-d " display"
Used with the X11 variant of faces to give a display type.
.TP
.BI \-e " program"
Name of the user program to run. This program or shell script will generate
lines which the faces program will read, and then display the appropriate
face images. The format of these input records is described in a previous
section.
.TP
.BI \-f " facedir"
If specified, then this directory is searched first for face images. If
they are not found, then the default face directory will be searched.
The default face directory is
.BR /usr/local/faces .
.TP
.BI \-g " geometry"
Used with the X11 variant of faces to give geometry information.
.TP
.BI \-h " height"
The height of each face image in pixels. Note that this is the height of
the area allocated to each image, and not necessarily the height of the
displayed image inside.
.TP
.B \-i
Invert the faces images before displaying them. For use by people who
started SunView with the
.B \-i
option.
.TP
.B \-n
Do not display the number of messages from this person. The default is to
display, and a count is shown at the bottom right corner of the face for
this person.
.TP
.BI \-p " period"
The period in seconds before the mail spool file or the print queue is
scanned again for new mail. The default is 60 seconds.
.TP
.BI \-s " spoolfile"
Use an alternate mail spool file to monitor. The default is
.BI /var/spool/mail/ username
where
.I username
is the name of the user currently logged in.
.TP
.B \-t
Do not display a timestamp of the last message from this person. The
default is to display, and a timestamp is shown at the bottom left
corner of the face for this person.
.TP
.B \-u
Do not display the username on the face icon. The default is to display,
and the username will appear over the face icon, when the window is
opened.
.TP
.B \-v
Print the version number of this release of the
.B faces
program.
.TP
.BI \-w " width"
The width of each face image in pixels. Note that this is the width of
the area allocated to each image, and not necessarily the width of the
displayed image inside.
.TP
.B \-Wi
Start the
.B faces
program up in iconic form. SunView automatically uses this flag, but the
NeWS version will also.
.TP
.BI \-Wp " x y"
Start the open window position at
.I x y
.TP
.BI \-WP " x y"
Start the icon position at
.I x y
.SH "FACE FORMATS"
There is a special faces directory containing a fixed three-level hierarchy,
which by default is
.IR /usr/local/faces .
The first level is a machine name, the second level a user name, and the
third level is the actual face image, which can be stored in four formats.
If the file is named
.I 48x48x1
then it is a Blit ikon, if it is called
.I sun.icon
then the image is stored in Sun icon format, if the file is named
.I face.xbm
then it is an X11 xbm formatted image, and if the file is called 
.I face.ps
then it contains executable NeWS code. Multiple formats can be stored
in the same username directory, and the one used will depend upon which
graphics interface is currently being used. If the
.I username
level is a plain file (not a directory) it is assumed to be a
Blit icon.
.LP
To access the face for the mail name
.I machine!uid
take the result of the first successful open from the following list of files:
.RS 6
/usr/local/faces/machine/uid/iconname
.br
/usr/local/faces/misc./uid/iconname
.br
/usr/local/faces/machine/unknown/iconname
.br
/usr/local/faces/misc./unknown/iconname
.RE
If the
.B -f
argument is specified the given directory is searched before
.IR /usr/local/faces .
The iconname above, consists of the following choices, in the given order:
.TS
r1 c1 l1 l1 l1 l1 .
NeWS	-	face.ps,	sun.icon,	48x48x1,	face.xbm
SunView	-	sun.icon,	48x48x1,	face.xbm
X11	-	face.xbm,	sun.icon,	48x48x1
.TE
Domain names are now fully supported. For example, if mail arrives from
.I foo@a.b.c
then
.I faces
will use the directories
.IR a.b.c ,
.I b.c
and
.I c
.RE for the machine name:
The directory
.I misc.
hold faces for generic users such as
.I root
and
.I uucp.
If the faces directory hierarchy is not found, then a blank face image
will be used.
.LP
Faces information is administered by a pair of ASCII files in the faces
directory that associate related machines and faces. The machine table
.I machine.tab
attaches machines to communities; the line
.RS 6
stard=sunaus
.RE
puts the machine
.I stard
in community
.I sunaus.
The people table associates a community/alias pair, with a real username.
.RS 6
sunaus/rburridge=richb
.RE
causes the alias
.I rburridge
to be translated into the real username
.I richb
for the community
.I sunaus
.LP
Note that you still need to use
.I mailtool
or some other mail reading utility to actually read the mail that this program
monitors;
.I faces
simply displays who the mail is from.
.LP
When new mail arrives,
.B faces
will beep and flash appropriately, depending upon the set parameters in
the users
.I .mailrc
file.
.LP
If you are using the NeWS version and creating face images of the
.I face.ps
form, then the following points should be noted:
All graphics operations should be performed on the unit square; and
the final image will be translated to a 64 x 64 square image at
the appropriate position in the faces display.
.LP
If you are using the
.B \-e
option, then the user program or shell script should firstly generate a
single record with the following fixed format, beginning at column 1:
.RS 6
Cols=mm Rows=nn
.RE
where mm is the size in columns for the faces window and icon, and
nn is the size in rows. A window will be generated with these dimensions.
.LP
This record is followed by the face information records, which are again
in fixed format. As well as providing the username and hostname, there are
four other fields which can be filled in, which denote what is displayed
on the left or the right sides of the bottom area of the window and icon
displays. The format for these records is:
.TS
center, box;
l c c
l n n .
Description	Start column	Number of columns.
_
username	1	20
hostname	21	20
window left	41	10
window right	51	10
icon left  	61	10
icon right	71	10
.TE
.LP
Any of these fields may be left blank. There are also four special usernames,
which will display the appropriate standard icons. These are
.B "NOMAIL, NOPAPER, NOPRINT "
and
.B "NOUSERS."
.SH "SEE ALSO"
mail(1), elm(1), mush(1), aliases(7).
.SH FILES
.TP 30
.B /var/spool/mail
directory for system mailboxes
.TP
.B /.face
the users compressed face image
.TP
.B /.mailrc
mail startup file
.TP
.B /usr/local/faces
main directory containing the face icons.
.TP
.B /usr/local/faces/people.tab
people/file equivalences
.TP
.B /usr/local/faces/machine.tab
machine/community equivalences
.SH HISTORY
.I faces
is based on the Bell Labs Edition 8 program
.IR vismon(9) .
This program is not derived from
.I vismon
source.
.SH BUGS
The machine and people table lookup is hopelessly inefficient and
will need to be improved as the faces database gets larger.
.SH AUTHOR
.TS
l r1 l .
Rich Burridge,	Internet:	richb@Aus.Sun.COM
PHONE: +61 2 413 2666	ACSnet:	richb@sunaus.sun.oz.au
.TE
Funky_Stuff
len=`wc -c < faces.1`
if [ $len !=    11202 ] ; then
echo error: faces.1 was $len bytes long, should have been    11202
fi
fi # end of overwriting check
if [ -f face_update.1 ]
then
echo shar: will not over-write existing file face_update.1
else
echo shar: extracting 'face_update.1',     1775 characters
cat > face_update.1 <<'Funky_Stuff'
.\" @(#)face_update.1 1.2 90/06/26
.TH FACE_UPDATE 1L "25 June 1990"
.SH NAME
faces \- automatic faces database update script.
.SH SYNOPSIS
.B "face_update
[
.B \-o
]
[
.B \-w
]
.SH DESCRIPTION
.B face_update
is a shell script for automatically updating the
.B faces
database with "on-the-fly" faces. When
.B faces
is run with the -U option, every time that a new "on-the-fly" face is found,
it is mailed to a special mail alias which by default is
.I facemaker.
There would be a special entry in the
.I /etc/aliases
file for
.I facemaker.
Something like:
.LP
	"|/usr/local/bin/face_update"
.LP
This mail message has a certain format. The Subject line contains the file
in the database to be updated. The body of the mail message is 48 lines in
Blit ikon (48x48x1) format. Depending upon command line options, this new
faces is included in the
.I faces
database.
.B face_update
will also perform various tests on the mail message to ensure it is a valid
update.
.LP
An entry will be written in the
.I /var/log/facelog
log file upon completion. This entry will consist of a timestamp, the name
of the user who sent the update, the ikon that was updated, and the status
of the update (whether it was successful or not).
.LP
Note that the log file (
.I /var/log/facelog)
needs to be created and owned by
.I daemon
with permissions of 0644.
.SH OPTIONS
.TP
.B \-o
This is to allow ikons to be stored in the "old" style format, where the
username was the ikon, and not a directory where the icons were kept.
.TP
.B \-w
If the given ikon is already present in the database, this option will allow
it to be overwritten. By default this doesn't happen.
.SH FILES
.TP
.B /var/log/facelog
log file for all ikon updates.
.SH SEE ALSO
faces(1)
.SH AUTHOR
Hal Stern	Sun Microsystems Inc.
Funky_Stuff
len=`wc -c < face_update.1`
if [ $len !=     1775 ] ; then
echo error: face_update.1 was $len bytes long, should have been     1775
fi
fi # end of overwriting check
if [ -f faces_cps.cps ]
then
echo shar: will not over-write existing file faces_cps.cps
else
echo shar: extracting 'faces_cps.cps',     5301 characters
cat > faces_cps.cps <<'Funky_Stuff'

%  These are NeWS dependent graphics routines used by faces.
%
%  @(#)faces_cps.cps 1.1 90/06/24
%
%  Copyright (c) Rich Burridge - Sun Microsystems Australia.
%                                All rights reserved.
%
%  Date	    Vers    Who	    	What
%  ===========================================================================
%  90Jun23  1.8.2   PMLashley	Converted to a cps file
%
%
%  Modifications to MakeFrame and ShowDisplay by Neil Crellin and
%  Mark Andrews {neilc,marka}@natmlab.dms.oz.au to fix the (0,0)
%  redraw bug.
%
%  Permission is given to distribute these sources, as long as the
%  copyright messages are not removed, and no monies are exchanged.
%
%  No responsibility is taken for any errors or inaccuracies inherent
%  either to the comments or the code of this program, but if reported
%  to me, then an attempt will be made to fix them.

   cdef ps_clearbox(int x, int y, int width, int height, postscript cv)
       cv setcanvas
       x y width height rectpath 0 setgray fill


   cdef ps_dopixrects(int width, int height, postscript cv)
       cv setcanvas
       0 0 width height rectpath
       cv reshapecanvas


   cdef ps_execfile(string psfile, int width, int height, int x, int y)
       /Iconic? Frame send {
	   /IconCanvas Frame send setcanvas
       } {
	   /ClientCanvas Frame send setcanvas
       } ifelse

       x y translate
       width height scale
       psfile (r) file cvx exec
       


   cdef ps_initfont()
       /Font /Courier findfont 7 scalefont def



   cdef ps_makeframe(int FrameX, int FrameY, int FrameWidth, int FrameHeight,
       int IconX, int IconY, int IsIcon)
       
       /DIED	    	100 	    	    def
       /PAINTED	    	101 	    	    def
       /LEFTDOWN    	102 	    	    def
       /ClientHeight	FrameHeight 10 sub  def
       /ClientWidth 	FrameWidth 10 sub   def
       /IconHeight  	FrameHeight 	    def
       /IconWidth   	FrameWidth  	    def
       
       /PR framebuffer /new ClassCanvas send def
       {
	   /Transparent false promote
	   /Mapped false promote
	   /Retained true promote
       } PR send
       
       /MPR framebuffer /new ClassCanvas send def
       {
	   /Transparent false promote
	   /Mapped false promote
	   /Retained true promote
       } MPR send
       
       /Frame framebuffer /new DefaultWindow send def
       {
	   /IconX   IconX   def
	   /IconY   IconY   def
	   /FrameX  FrameX  def
	   /FrameY  FrameY  def
	   /BorderTop 5 def
	   /BorderLeft 5 def
	   /BorderBottom 5 def
	   /BorderRight 5 def
	   /ControlSize 0 def
	   /ForkPaintClient? false def

	   /destroy {
	       DIED typedprint
	       DestroyFrame DestroyClient
	   } installmethod

	   /flipiconic {
	       PAINTED typedprint
	       /unmap self send
	       /Iconic? Iconic? not def
	       IconX null eq {
		   FrameX FrameY FrameHeight add IconHeight sub /move self send
	       } if
	       ZoomProc
	       /map self send
	   } installmethod

	   /PaintClient {
	       gsave
	       1 fillcanvas
	       ClientWidth ClientHeight scale
	       0 setgray
	       Invert PR imagemaskcanvas
	       grestore
	   } installmethod

	   /PaintIcon {
	       gsave
	       clippath pathbbox pop pop translate
	       1 fillcanvas
	       IconWidth IconHeight scale
	       0 setgray
	       Invert MPR imagemaskcanvas
	       grestore
	   } installmethod

	   /ShapeIconCanvas {
	       gsave
	       ParentCanvas setcanvas
	       IconX null eq IconY null eq or {
		   0 0
	       } {
		   IconX IconY
	       } ifelse
	       
	       IconWidth IconHeight IconPath IconCanvas reshapecanvas
	       grestore
	   } installmethod

	   /ForkFrameEventMgr {
	       ClientMenu null ne {
		   FrameInterests /ClientMenuEvent
		   MenuButton { /showat ClientMenu send }
		   /DownTransition ClientCanvas
		   eventmgrinterest put
	       } if

	       FrameInterests /CheckTheMailDrooper
	       PointButton { LEFTDOWN typedprint }
	       /DownTransition ClientCanvas
	       eventmgrinterest put
	       /FrameEventMgr FrameInterests forkeventmgr def
	   } installmethod

	   /ShowDisplay {   %  cw  ch  iw  ih  =>  -
	       /IconHeight  	exch	promote
	       /IconWidth   	exch	promote
	       /ClientHeight    exch	promote
	       /ClientWidth 	exch	promote

	       FrameX FrameY
	       ClientWidth 10 add  ClientWidth 10 add
	       reshape
	       
	       ShapeIconCanvas
	       painticon
	       
	       ShapeClientCanvas
	       paintclient
	       map
	   } installmethod
       } Frame send

       IsIcon 1 eq { /flipiconic Frame send } if


   cdef ps_maketext(string str, int x, int y, postscript cv)
       cv setcanvas
       Font setfont
       1 setgray
       x y moveto
       str show


   cdef ps_moveimage(postscript src, int width, int height, int x, int y, postscript dest)
       dest setcanvas
       gsave
           x y translate
           width height scale
           src imagecanvas
       grestore


   cdef ps_shiftimage(int dx, int width, int height, postscript cv)
       cv setcanvas
       0 0 width height rectpath
       dx 0 copyarea


   cdef ps_showdisplay(int cw, int ch, int iw, int ih)
       cw ch iw ih /ShowDisplay Frame send

   cdef ps_buildicon(string name, int width, int height, cstring data)
       name cvlit width height 1 {} { data } buildimage def
Funky_Stuff
len=`wc -c < faces_cps.cps`
if [ $len !=     5301 ] ; then
echo error: faces_cps.cps was $len bytes long, should have been     5301
fi
fi # end of overwriting check
if [ -f face_update ]
then
echo shar: will not over-write existing file face_update
else
echo shar: extracting 'face_update',     3905 characters
cat > face_update <<'Funky_Stuff'
#! /bin/sh
#
#  Script to automatically update the faces database with a new X-Face: image.
#
#  Usage: face_update [-o] [-w]
#
#  -o  -  use "old" updating method of saving the ikon as the username.
#
#  -w  -  will allow the face_update script to automaticaly overwrite
#         existing ikon files.
#
#  Copyright (c) Hal Stern - Sun Microsystems Inc - June 1990.
#
#  Permission is given to distribute these sources, as long as the
#  copyright messages are not removed, and no monies are exchanged.
#
#  No responsibility is taken for any errors inherent either
#  to the comments or the code of this program, but if reported
#  to me then an attempt will be made to fix them.
#
#-----------------------------------------------------------------------------
#
#	face_update	1.3	6/26/90 15:41:26
#
#	failure()
#	shell routine to handle various failures
#	and send a note back to the sender explaining
#	what happened

failure() {
	( 
	echo "" 
	echo "The Face Update server was not able to process"
	echo "your request because "
	echo $reason
	echo ""
	) | fmt | Mail -s "Face update failed" $sender 
	rm -f /tmp/facereply.$$ /tmp/face.$$ /tmp/facebits.$$
	if [ ! -z "$LOGFILE" ]
	then
		echo `date` $sender '	' update failed for $facefile >> $LOGFILE
	fi
	exit 0
}
#
#	name of the logfile, if you don't want to log
#	changes, make this an empty string, ie
#	LOGFILE=""
#
LOGFILE=/var/log/facelog

#	save the incoming message in a tmp file for
#	parsing later

cat - > /tmp/face.$$

#	parse command line arguments	

overwrite=""
oldstyle=""

while [ $# != 0 ]
do
	case $1 in
	-w)
		overwrite=yes
		;;
	-o)
		oldstyle=yes
		;;
	*)
		;;
	esac
	shift
done

#	find out who sent this request, and the file name
#	where the face is to be deposited

sender=`fgrep 'From ' /tmp/face.$$ | awk -F' ' '{print $2}'`
if [ -z "$sender" ]
then	
	sender=root
fi

facefile=`fgrep 'Subject:' /tmp/face.$$ | awk -F':' '{print $2}' | sed -e 's@ @@g'`
if [ -z "$facefile" ]
then
	reason="it is missing a Subject line"
	failure
fi

#	overwriting check
if [ -f $facefile ] && [ -z "$overwrite" ]
then
	reason="it cannot overwrite existing file $facefile"
	failure
fi

#	extract the "interesting" part of the file.
#	i'm assuming here that almost all RFC822 headers have
#	colons in them, so it will speed up the egrep by removing
#	obvious mail headers first

fgrep -v ':' /tmp/face.$$ |
	egrep '0x[0-9A-F]*,0x[0-9A-F]*,0x[0-9A-F]*' > /tmp/facebits.$$

#	count the number of lines that are in 48x48x1 format
linecnt=`wc -l /tmp/facebits.$$ | awk '{print $1}' | sed -e 's@ @@g'`

#	if this file doesn't contain a good image, complain

if [ "$linecnt" != "48" ]
then
	reason="the submitted icon did not contain a 48x48x1 file"
	failure
fi

#	get the various directory names for the user, machine and
#	top-level face archive

userdir=`dirname $facefile`
username=`basename $userdir`
hostdir=`dirname $userdir`
hostname=`basename $hostdir`
facedir=`dirname $hostdir`

if [ ! -d $facedir ]
then
	reason="the face directory $facedir does not exist"
	failure
fi

#	if any of these don't exist, create them if we can
#	this allows on-the-fly face addition for new hosers or
#	machines

for d in $hostdir $userdir
do
	if [ -f $d ]
	then
		break
	fi

	if [ ! -d $d ]
	then
		if [ $d = $userdir ] && [ ! -z "$oldstyle" ]
		then
			:
		else
			mkdir $d 2>/dev/null
			if [ $? != 0 ]
			then
				reason="the server could not create directory $d"
				failure
			fi
		fi
	fi
done

if [ -f "$userdir" ]
then
	facefile=$userdir
fi

#	if we're overwriting, at least save the old file

if [ -f $facefile ]
then
	mv $facefile ${facefile}-
fi

#	tuck the new file in place, clean up the mess, and 
#	send an acknowledgement

cp /tmp/facebits.$$ $facefile
rm -f /tmp/face.$$ /tmp/facebits.$$
#Mail -s "Face update succeeded" $sender
if [ ! -z "$LOGFILE" ]
then
	echo `date` $sender '	' face update succeeded for $facefile >> $LOGFILE
fi
exit 0
Funky_Stuff
len=`wc -c < face_update`
if [ $len !=     3905 ] ; then
echo error: face_update was $len bytes long, should have been     3905
fi
fi # end of overwriting check
if [ -f noface.icon ]
then
echo shar: will not over-write existing file noface.icon
else
echo shar: extracting 'noface.icon',     1933 characters
cat > noface.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */
	0x0000,0x1FA0,0x0000,0x0000,0x0000,0x7FFC,0x0000,0x0000,
	0x0000,0xFEFF,0x0000,0x0000,0x0001,0xBFBF,0xC000,0x0000,
	0x0001,0xEFFA,0xE000,0x0000,0x0002,0x00FF,0xF800,0x0000,
	0x0002,0x007F,0xFF80,0x0000,0x0000,0x001F,0x7E00,0x0000,
	0x000C,0x001F,0xFFC0,0x0000,0x0000,0x0015,0xFFC0,0x0000,
	0x0030,0x001F,0xFFF0,0x0000,0x0070,0x000F,0xFEB0,0x0000,
	0x00C0,0x0007,0xFFF8,0x0000,0x00E0,0x0007,0xFFE8,0x0000,
	0x01E0,0x0003,0xFFF8,0x0000,0x03C0,0x0001,0xFFF8,0x0000,
	0x03E0,0x0001,0xFFF8,0x0000,0x07C0,0x0000,0xFFF0,0x0000,
	0x0FF8,0x0000,0xBFF8,0x0000,0x0FE0,0x0000,0xFFF8,0x0000,
	0x1FF0,0x0000,0x7FF8,0x0000,0x1FF0,0x0000,0xFFF8,0x0000,
	0x1FF0,0x0000,0xFFF8,0x0000,0x1FD0,0x0000,0xFFF0,0x0000,
	0x0FE0,0x0001,0xFFF0,0x0000,0x1FA0,0x0000,0x3FF0,0x0000,
	0x0320,0x0000,0x1FE0,0x0000,0x0B80,0x0000,0x1F80,0x0000,
	0x0180,0x0000,0x1780,0x0000,0x0080,0x0000,0x1F00,0x0000,
	0x0000,0x0000,0x1F00,0x0000,0x0180,0x0000,0x0E00,0x0000,
	0x0380,0x0000,0x1E00,0x0000,0x0180,0x0000,0x0FC0,0x0000,
	0x0080,0x0000,0x1F80,0x0000,0x01C0,0x0000,0x0F80,0x0000,
	0x00C0,0x0000,0x7F80,0x0000,0x0040,0x0000,0x7F00,0x0000,
	0x0060,0x0000,0xCE00,0x0000,0x0004,0x0001,0x6000,0x0000,
	0x0000,0x0003,0xF800,0x0000,0x0002,0x0001,0xA000,0x0000,
	0x0000,0x0007,0xC000,0x0000,0x0002,0x000F,0x4000,0x0000,
	0x0000,0x804B,0xC000,0x0000,0x0002,0xBBFE,0x8000,0x0000,
	0x0000,0x8FFB,0xC000,0x0000,0x0001,0x7ABF,0xC000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
Funky_Stuff
len=`wc -c < noface.icon`
if [ $len !=     1933 ] ; then
echo error: noface.icon was $len bytes long, should have been     1933
fi
fi # end of overwriting check
if [ -f nomail.icon ]
then
echo shar: will not over-write existing file nomail.icon
else
echo shar: extracting 'nomail.icon',     1933 characters
cat > nomail.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */
	0x0001,0xFFFF,0xFFC0,0x0000,0x0002,0xB000,0x0030,0x0000,
	0x0003,0x5800,0x0008,0x0000,0x0006,0xADFF,0xFFC8,0x0000,
	0x0005,0x54FF,0xFFE4,0x0000,0x000A,0xAAFF,0xFFF2,0x0000,
	0x000D,0x567F,0xFFF2,0x0000,0x000A,0xAA7F,0xFFFA,0x0000,
	0x000D,0x557F,0xFFF9,0x0000,0x000A,0xAB7F,0xFFF9,0x0000,
	0x000D,0x557F,0xFFF9,0x0000,0x000A,0xAB3F,0xFFF1,0x0000,
	0x000D,0x5500,0x0001,0x0000,0x000A,0xAB00,0x0001,0x0000,
	0x000D,0x5500,0xFE01,0x0000,0x000A,0xAB03,0xFF81,0x0000,
	0x000D,0x5507,0xFFC1,0x0000,0x000A,0xAB0F,0xFFE1,0x0000,
	0x000D,0x551F,0xFFF1,0x0000,0x000A,0xAB1F,0xFFF1,0x0000,
	0x000D,0x553F,0xFFF9,0x0000,0x000A,0xAB3F,0xFFF9,0x0000,
	0x000D,0x553F,0xFFF9,0x0000,0x000A,0xAB3F,0xFFF9,0x0000,
	0x0FFD,0x553F,0xFFF9,0x0000,0x3FFA,0xAB3F,0xFFF9,0x0000,
	0x7FFD,0x553F,0xFFF9,0x0000,0xFFFA,0xAB3F,0xFFF9,0x0000,
	0xFFFD,0x551F,0xFFF1,0x0000,0xFFFA,0xAB1F,0xFFF1,0x0000,
	0xFFFD,0x550F,0xFFE1,0x0000,0xFFFA,0xAB07,0xFFC1,0x0000,
	0xFFFD,0xD503,0xFF81,0x0000,0xFFFB,0xEB00,0xFE01,0x0000,
	0x3FFD,0xF500,0x0001,0x0000,0x3FFB,0xFB00,0x0001,0x0000,
	0x0FFD,0xFD0F,0xFFE1,0x0000,0x0FFB,0xFB1F,0xFFD1,0x0000,
	0x03FD,0xFD3F,0xF7C9,0x0000,0x00FF,0xFF7F,0xF8C5,0x0000,
	0x003F,0xFD7F,0xFC45,0x0000,0x001F,0xFF7F,0xFE05,0x0000,
	0x0007,0xF560,0x3F85,0x0000,0x0003,0xF760,0x0FE5,0x0000,
	0x0000,0xFD40,0x01F5,0x0000,0x0000,0x3F40,0x00FD,0x0000,
	0x0000,0x0760,0x003D,0x0000,0x0000,0x03E0,0x000F,0x0000,
	0x0000,0x0000,0x0000,0x0000,0x00FF,0xFFFF,0xFFFF,0xFF80,
	0x00FF,0xFFFF,0xFFFF,0xFF80,0x00BB,0xFFFF,0xFFFD,0xF180,
	0x009B,0xFFFF,0xFFFF,0xFD80,0x009B,0x8FFC,0xBC71,0xFD80,
	0x00AB,0x77FD,0x5BBD,0xFD80,0x00AB,0x77FD,0x5FBD,0xFD80,
	0x00B3,0x77FD,0x5C3D,0xFD80,0x00B3,0x77FD,0x5BBD,0xFD80,
	0x00BB,0x77FD,0x5BBD,0xFD80,0x00BB,0x8FFD,0x5C3D,0xFD80,
	0x00FF,0xFFFF,0xFFFF,0xFF80,0x00FF,0xFFFF,0xFFFF,0xFF80,
	0x00FF,0xFFFF,0xFFFF,0xFF80,0x0000,0x0000,0x0000,0x0000
Funky_Stuff
len=`wc -c < nomail.icon`
if [ $len !=     1933 ] ; then
echo error: nomail.icon was $len bytes long, should have been     1933
fi
fi # end of overwriting check
if [ -f noprint.icon ]
then
echo shar: will not over-write existing file noprint.icon
else
echo shar: extracting 'noprint.icon',     1997 characters
cat > noprint.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */
	0x0000,0x0000,0x4008,0x0000,
	0x0000,0x0000,0x0008,0x0000,
	0x0058,0x7001,0xC38B,0x0E00,
	0x0064,0x8800,0x444C,0x9100,
	0x0044,0x8800,0x4448,0x9000,
	0x0044,0x8800,0x4448,0x8E00,
	0x0044,0x8800,0x4448,0x8100,
	0x0044,0x8800,0x444C,0x9100,
	0x0044,0x7000,0x438B,0x0E00,
	0x0000,0x0000,0x4000,0x0000,
	0x0000,0x0002,0x4000,0x0000,
	0x0000,0x0001,0x8000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x00FF,0xFFFF,0xFFFF,0xFFE0,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x0080,0x0000,0x0000,0x0010,
	0x00FF,0xFFFF,0xFFFF,0xFFF0,
	0x0090,0x0400,0x0000,0x8010,
	0x0091,0xE400,0x0000,0x8010,
	0x0092,0x1400,0x1FF8,0x8010,
	0x0092,0x1400,0x1008,0x8010,
	0x0092,0x1400,0x1008,0x8010,
	0x0093,0xF400,0x1FF8,0x8010,
	0x0092,0xD400,0x1008,0x8010,
	0x0092,0x1400,0x1FF8,0x8010,
	0x0091,0xE400,0x0000,0x8020,
	0x0090,0x0400,0x0000,0x8040,
	0x00FF,0xFFFF,0xFFFF,0xC080,
	0x3FFF,0xFFFF,0xFFFF,0xE100,
	0x3880,0x0000,0x0000,0x7E00,
	0x3880,0x0000,0x0000,0x1FFC,
	0x3880,0x0000,0x0000,0x1FFC,
	0x3F80,0x0FEF,0xEFCF,0xE100,
	0x0080,0x0000,0x0000,0x01FC,
	0x0080,0x0FEF,0xEFCF,0xE100,
	0x0F80,0x0000,0x0000,0x0100,
	0x0880,0x0FEF,0xEFCF,0xE100,
	0x0F80,0x0000,0x0000,0x0100,
	0x0080,0x0000,0x0000,0x0100,
	0x00FF,0xFFFF,0xFFFF,0xFF00,
	0x0040,0x0000,0x0000,0x0200,
	0x0040,0x0000,0x0000,0x0200,
	0x003F,0xFFFF,0xFFFF,0xFC00,
	0x001C,0x0000,0x0001,0xC000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000,
	0x0000,0x0000,0x0000,0x0000
Funky_Stuff
len=`wc -c < noprint.icon`
if [ $len !=     1997 ] ; then
echo error: noprint.icon was $len bytes long, should have been     1997
fi
fi # end of overwriting check
if [ -f nopaper.icon ]
then
echo shar: will not over-write existing file nopaper.icon
else
echo shar: extracting 'nopaper.icon',     1973 characters
cat > nopaper.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */                                        
	0xC000,0x0000,0x0000,0x0003,0xE000,0x0000,0x0000,0x0007,
	0x7000,0x0000,0x0000,0x000E,0x3800,0x0000,0x0000,0x001C,
	0x1C00,0x0000,0x0000,0x0038,0x0E00,0x0000,0x0000,0x0070,
	0x0700,0x0000,0x0000,0x00E0,0x0380,0x0000,0x0000,0x01C0,
	0x01C0,0x0000,0x0000,0x0380,0x00E0,0x0000,0x0000,0x0700,
	0x0070,0x0000,0x0000,0x0E00,0x0038,0x0000,0x0000,0x1C00,
	0x001C,0x0000,0x0000,0x3800,0x000E,0x0000,0x0000,0x7000,
	0x0007,0x0000,0x0000,0xE000,0x0003,0x8000,0x0001,0xC000,
	0x0001,0xC000,0x0003,0x8000,0x0000,0xE000,0x0007,0x0000,
	0x0000,0x7000,0x000E,0x0000,0x0000,0x7FFF,0xFFFF,0xC000,
	0x0000,0xBC00,0x0038,0x2000,0x0001,0x1E00,0x0070,0x1000,
	0x0002,0x0F00,0x00E0,0x0800,0x0004,0x0780,0x01C0,0x0400,
	0x0004,0x05C0,0x0380,0x0400,0x0008,0x42E0,0x0700,0x0200,
	0x0008,0xE270,0x0E00,0x0200,0x0009,0xF238,0x1C00,0x0200,
	0x0009,0xF21C,0x3800,0x0200,0x0009,0xF20E,0x7000,0x0200,
	0x0009,0xF207,0xE000,0x0200,0x0009,0xF203,0xC000,0x0200,
	0x0008,0xE203,0xC000,0x0200,0x0008,0x4207,0xE000,0x0200,
	0x0004,0x040E,0x7000,0x0400,0x0004,0x041C,0x3800,0x0400,
	0x0006,0x0838,0x1C00,0x0800,0x0007,0x1070,0x0E00,0x1000,
	0x0002,0xA0E0,0x0700,0x2000,0x0002,0x7FFF,0xFFFF,0xC000,
	0x0002,0x0380,0x01C2,0x0000,0x0002,0x0700,0x00E1,0x0000,
	0x0003,0x0E00,0x0071,0x0000,0x0001,0x1C00,0x0039,0x0000,
	0x0001,0x3800,0x001C,0x8000,0x0000,0xF000,0x000E,0x8000,
	0x0000,0xE000,0x0007,0x8000,0x0001,0xC000,0x0003,0x8000,
	0x0003,0x8000,0x0001,0xC000,0x0007,0x8000,0x0000,0xE000,
	0x000E,0x4030,0x0000,0x7000,0x001C,0x41FC,0x0000,0x7800,
	0x0038,0x4F02,0x003C,0x5C00,0x0070,0x5401,0xC1C2,0x2E00,
	0x00E0,0x6000,0x3F01,0xC700,0x01C0,0x0000,0x0000,0x0380,
	0x0380,0x0000,0x0000,0x01C0,0x0700,0x0000,0x0000,0x00E0,
	0x0E00,0x0000,0x0000,0x0070,0x1C00,0x0000,0x0000,0x0038,
	0x3800,0x0000,0x0000,0x001C,0x7000,0x0000,0x0000,0x000E,
	0xE000,0x0000,0x0000,0x0007,0xC000,0x0000,0x0000,0x0003
Funky_Stuff
len=`wc -c < nopaper.icon`
if [ $len !=     1973 ] ; then
echo error: nopaper.icon was $len bytes long, should have been     1973
fi
fi # end of overwriting check
if [ -f nousers.icon ]
then
echo shar: will not over-write existing file nousers.icon
else
echo shar: extracting 'nousers.icon',     1933 characters
cat > nousers.icon <<'Funky_Stuff'
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
 */
	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0xFC00,0x0000,
	0x0000,0x01FF,0xFFC0,0x0000,0x0000,0x0FFF,0xFFF8,0x0000,
	0x0000,0x3FFF,0xFFFE,0x0000,0x0000,0xFFFF,0xFFFF,0x8000,
	0x0001,0xFFFF,0xFFFF,0xC000,0x0007,0xFFFF,0xFFFF,0xF000,
	0x000F,0xFFFF,0xFFFF,0xF800,0x001F,0xFFF0,0x07FF,0xFC00,
	0x003F,0xFF00,0x007F,0xFE00,0x007F,0xFC00,0x001F,0xFF00,
	0x00FF,0xF000,0x0007,0xFF80,0x01FF,0xF800,0x0003,0xFFC0,
	0x01FF,0xFC00,0x0000,0xFFC0,0x03FF,0xFE00,0x0000,0x7FE0,
	0x07FE,0x3F00,0x0000,0x1FF0,0x07E0,0x9F80,0x0000,0x51F0,
	0x0FE8,0xC1C0,0x0000,0xC5F8,0x0F8F,0x54E0,0x000A,0xBC78,
	0x1F35,0xE6F0,0x0019,0xEB3C,0x1F56,0xBA78,0x0017,0x5ABC,
	0x1C66,0xDF3C,0x003E,0xD98C,0x3DBA,0xF998,0x0067,0xD76E,
	0x3CBB,0xAEC3,0xE05D,0x774E,0x38EF,0xF7EC,0x1AFB,0xFDC6,
	0x3B7F,0x7D70,0x06AF,0xBFB6,0x795D,0xDDE0,0x03EE,0xEEA7,
	0x7C6F,0x77C0,0x017B,0xBD8F,0x7DBF,0xBE80,0x00DF,0x7F6F,
	0x7CAE,0xEB1E,0x3C75,0xDD4F,0x7E3B,0xFD33,0x666F,0xF71F,
	0x7EDF,0x5F21,0x427E,0xBEDF,0x7E51,0xEE2D,0x5A35,0xE29F,
	0x7F06,0xAE2D,0xDA35,0x583F,0x7F82,0x8223,0xE220,0x50FF,
	0x7F80,0x023F,0xFE20,0x00FF,0x7F80,0x0207,0xF028,0x01FF,
	0x3FC0,0x0207,0xF02C,0x01FE,0x3FC0,0x0203,0xE02E,0x01FE,
	0x3FC0,0x0231,0xC62F,0x01FE,0x3FE0,0x0178,0x0F4F,0x83FE,
	0x1FE0,0x016C,0x1B5F,0xC3FC,0x1FF0,0x0133,0xE65F,0xE7FC,
	0x1FF0,0x0098,0x0C9F,0xF7FC,0x0FF8,0x004F,0xF93F,0xFFF8,
	0x0FFC,0x0060,0x037F,0xFFF8,0x07FC,0x0030,0x067F,0xFFF0,
	0x07FE,0x000C,0x18FF,0xFFF0,0x03FF,0x0003,0xE03F,0xFFE0,
	0x01FF,0x8000,0x001F,0xFFC0,0x01FF,0xE000,0x000F,0xFFC0,
	0x00FF,0xF000,0x0007,0xFF80,0x0FFF,0xFFFF,0xFFFF,0xFFF0,
	0x0FFF,0xFFFF,0xFFFF,0xFFF0,0x0A78,0xFFDD,0xC78E,0x9E30,
	0x09B7,0x7FDD,0xBB76,0x6DD0,0x0BB7,0x7FDD,0xBF76,0xFDF0,
	0x0BB7,0x7FDD,0xC706,0xFE30,0x0BB7,0x7FDD,0xFB7E,0xFFD0,
	0x0BB7,0x7FD9,0xBB76,0xFDD0,0x0BB8,0xFFE5,0xC78E,0xFE30,
	0x0FFF,0xFFFF,0xFFFF,0xFFF0,0x0FFF,0xFFFF,0xFFFF,0xFFF0
Funky_Stuff
len=`wc -c < nousers.icon`
if [ $len !=     1933 ] ; then
echo error: nousers.icon was $len bytes long, should have been     1933
fi
fi # end of overwriting check