[comp.sources.bugs] Official patch #10 for faces v1.4

richb@sunaus.oz (Rich Burridge) (01/07/91)

This is official patch #10 for faces v1.4.

CONTENTS:

1. What is faces?
2/ Changes made in this patch.
3/ How to install this patch.
4/ How to get previous patches.

---------------

1/ What is faces?

Faces is a program for monitoring a list visually. Typically this is a list
of incoming mail messages, jobs in the print queue or users on a system.
Faces has the ability to read compressed faces images embedded in your
mail headers, uncompressing them and displaying them on-the-fly. There are
graphical interfaces for X11, XView, SunView and NeWS.

----------------

2/ Changes made in this patch.

         - Faces now only looks for X-Face: lines in the mail header, now
           that there is a simple method for everybody to get their X-Face:
           lines into the mail header (see below). This fixes up the following
           problems (which have been removed from the TODO file):
 
           If an X-Face is found inside a piece of mail that has been
           forwarded inside another mail item, and the -U option is set, then
           it is possible to update the wrong face in the faces database. The
           only clean solution to this, is if faces only recognises X-Face
           lines in the mail header.
 
           From Pat Lashley <patl@Sun.COM>
           The problem with finding an X-Face: entry in an included message
           can be resolved by a flag which would restrict X-Face: recognition
           to the header or the first non-blank line of the body.
 
         - From John Mackin <john@cs.su.oz.au>
           The code in mon.c recognises From: lines in the body of the mail.
           This is an error. From: lines should only be recognised before
           the first blank line.
            
         - From John Mackin <john@cs.su.oz.au>
           A small shell script called faces.sendmail has been written, which
           will automatically add X-Face: compressed image lines to a mail
           header. This is used in conjunction with the set sendmail entry in
           a user's ~/.mailrc file. See the README file and the faces manual
           pages for more details. This method is known to work with Berkeley
           Mail, Open Windows mailtool and mush. It should work with other
           mailers too. The special patch to mush is no longer needed; in
           fact if it has been applied, it should be un-applyed otherwise you
           will get two sets of X-Face: lines in your mail headers. The
           mush.xface.patch file can be removed from the faces distribution.
           FILES, MANIFEST, Makefile, README and faces.1 have been updated.

         - From John Mackin <john@cs.su.oz.au>
           The manual entry makes no mention of X-Face: lines.

         - From Mike Khaw <khaw@parcplace.com>
           The "install" target for the Makefile is missing a "/" between
           $(MANSECT) and face_update; i.e., the last line should be

                $(MANDIR)/man$(MANSECT)/face_update.$(MANSECT)

         - From Chris Mackerell <chris@bcl.co.nz>
           Changes to faces to get it compile in the BSD4.3 environment of
           Mips RISCos 4.5 (beta).

         - From brew%qa@tplrd.tpl.oz.au
           There is a problem parsing the address from which mail comes
           if the address looks like

           From: person@machine

           ie: no "(comment)" after it.  You parse this so that the machine
           name has a trailing '\n'.

           Although I sometimes get mail like this, perhaps this is not correct
           RFC822 syntax.

         - From Chris Maltby <chris@softway.sw.oz.au>
           It the user had cleared the faces window by hitting the Del key,
           the icon wasn't being reset to the "no mail" icon.

         - From Howard Pelling <Howard.Pelling@UK.Sun.COM>
           Modifications to allow faces to recognise partial domains in the
           machine.tab file. Eg. mail from bristol.ac.uk and edinburgh.ac.uk
           will come from the same community.

         - From Graham Dumpleton <grahamd@otc.otca.oz>
           From Alan Skea <skea@vast.eecs.unsw.oz>
           If the From: line just had a username (no hostname), then the
           trailing newline was not being removed (in parsefrom.c).

         - A plain text version of the faces manual pages is now included with
           the faces distribution. It's called faces.man.text.

         - From Gregory Dudek  <dudek@daeron.McRCIM.McGill.EDU>
           In process_info() in mon.c, don't do anything if the mailbox hasn't
           changed since the last look.

         - From Gregory Dudek  <dudek@daeron.McRCIM.McGill.EDU>
           In process_from() in mon.c, I've added an UGLY hack so that mailing
           lists could be recognized as such, rather than causing zillions of
           different unknown's to appear. It expects an ugly ugly magic trick
           in people.tab. The mailing list must appear as
           listplace/list@listplace  eg.

           ics.UCI.EDU/fa.think-c-outbound-request@ics.UCI.EDU

----------------

3/ How to install this patch.

This patch comes in two parts. The first part contains this introductory
test, followed by a shar file. The shar file contains the two new files
introduced with this patch. These are faces.man.text and faces.sendmail.

The second part is the actual faces patch. You should apply these changes
using Larry Walls patch program, then recompile and reinstall. For example:

# Save the second part of this patch in a file called "patch10"
cd faces_src
patch <patch10
make x11                     # Or sunview, xview or news.
make install                 # You might have to be super-user.

----------------

4/ How to get previous patches.

If you need to get patches 5-9, then they can be obtained from the automatic
mail archive server, by sending a message to rb-archive-server@Aus.Sun.COM
containing the line:

send faces patchn

where n is the patch number you require.

If the mail is likely to go back through any sites that impose a size limit,
then I suggest you divide the above request up into two separate mail
messages.

You can also include a path line in these requests to indicate the mail
path that the archive server should use to send the files to you. Such a
path line could be:

path uunet.uu.net!hostname!user

Note that this is uunet.uu.net and not just uunet. Sun.COM doesn't recognise
just uunet.
 
[NOTE: When unpacking the shars generated by the automatic mail service,
       it is possible you will get error messages for incorrect length.
       Please ignore; hopefully the files should still unpack correctly].

Rich Burridge,          DOMAIN: richb@Aus.Sun.COM
Sun Microsystems.       ACSNET: richb@sunaus.sun.oz
PHONE: +61 2 413 2666   UUCP:   {uunet,mcvax,ukc}!munnari!sunaus.oz!richb

------CUT HERE------patch.10.part1------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.man.text
#	faces.sendmail
# This archive created: Mon Jan  7 18:54:41 EST 1991
#
#
export PATH; PATH=/bin:$PATH
#
if [ -f faces.man.text ]
then
echo shar: will not over-write existing file faces.man.text
else
echo shar: extracting 'faces.man.text',    18890 characters
cat > faces.man.text <<'Funky_Stuff'



FACES(1)                 USER COMMANDS                   FACES(1)



NAME
     faces - visual mail, user and print face server.

SYNOPSIS
     faces [ -H hostname ] [ -MH ] [ -P printer ] [ -S spooldir ]
     [  -U ] [ -a ] [ -b background ] [ -c columns ] [ -d display
     ] [ -e program ] [ -f facedir ] [ -g geometry ] [ -h  height
     ] [ -iconic ] [ -i ] [ -n ] [ -p period ] [ -s spoolfile ] [
     -t ] [ -u ] [ -v ] [ -w width ] [ -Wi ] [ -Wp x y ] [ -WP  x
     y ]

DESCRIPTION
     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, Sun-
     View,  XView  and X11. It has five different modes of opera-
     tion:

     The default (no -a, -H, -P or -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 (but see below, under set button1clear).  The icon shows
     the image of the last message to arrive.

     The second choice (-a) is to monitor the  whole  of  a  mail
     file.  The open window will automatically adjust its 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  mes-
     sage,  and  a  count  of the total number of messages in the
     spool file or mail folder.

     The third option (-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 owner's name and the size of the job in bytes.

     With the fourth mode (-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.

     Finally you can specify a program or  shell  script  to  run
     (-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



Sun Release 4.1    Last change: 4 January 1991                  1






FACES(1)                 USER COMMANDS                   FACES(1)



     information is given in the faces manual page.

     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.

OPTIONS
     -H hostname Name of the machine to monitor.  Faces  will  be
                 displayed for each user logged in.

     -MH         Used when the user is using MH to read mail.  MH
                 can  shrink  the  mail spoolfile and the default
                 mail monitoring facility  within  faces  adjusts
                 accordingly.

     -P printer  Printer name to monitor.  If  this  and  a  mail
                 spool  file  are given with the -s option, faces
                 will monitor the print queue.

     -S spooldir Specify an alternate mail spool  directory.  The
                 folder  that  will  be  monitored  will  then be
                 spooldir/username where username is the name  of
                 the user currently logged in.

     -U          Automatically send mail to a special mail alias,
                 to  update the faces database when a new X-Face:
                 record is read. By default this special alias is
                 facemaker.   This   should   be   aliased   (see
                 aliases(7)) to:
                 facemaker:     "|/usr/local/bin/face_update"
                 By default the face_update shell script will not
                 overwriting  existing  ikons  in the faces data-
                 base.  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.

     -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.

     -b background
                 Sun icon file containing an alternate background
                 pattern. The default is root grey.

     -c columns  Number of columns of face images in each row. By
                 default this is 10.

     -d display  Used with the X11 variant of faces to  give  the



Sun Release 4.1    Last change: 4 January 1991                  2






FACES(1)                 USER COMMANDS                   FACES(1)



                 display name.

     -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 later section.

     -f facepath If specified, this is a colon-separated list  of
                 paths  to  be  searched for face images.  A null
                 entry in the path will be replaced by  the  com-
                 piled  in default face directory.  If not speci-
                 fied, the directories specified by the  FACEPATH
                 environment  variable will be used.  If there is
                 no FACEPATH environment  variable,  the  default
                 face  directory  will  be searched.  The default
                 face directory is normally /usr/local/faces.

     -g geometry Used with the  X11  variant  of  faces  to  give
                 geometry information.

     -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.

     -iconic     Start the faces program up in iconic form.

     -i          Invert the faces images before displaying  them.
                 For  use  by people who started SunView with the
                 -i option.

     -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.

     -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.

     -s spoolfile
                 Use an alternate mail spool file to monitor. The
                 default  is /var/spool/mail/username where user-
                 name is the name of the  user  currently  logged
                 in.

     -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.




Sun Release 4.1    Last change: 4 January 1991                  3






FACES(1)                 USER COMMANDS                   FACES(1)



     -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.

     -v          Print the version number of this release of  the
                 faces program.

     -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.

     -Wi         Start the faces program up in iconic form.  Sun-
                 View  automatically uses this flag, but the NeWS
                 version will also.

     -Wp x y     Start the open window position at x y

     -WP x y     Start the icon position at x y

FACE FORMATS
     There is  a  special  faces  directory  containing  a  fixed
     three-level hierarchy, which by default is /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 48x48x1
     then  it  is  a Blit ikon, if it is called sun.icon then the
     image is stored in Sun icon format, if  the  file  is  named
     face.xbm  then  it is an X11 xbm formatted image, and if the
     file is called 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 username level is
     a plain file (not a directory) it is assumed to  be  a  Blit
     icon.

     To access the face for  the  mail  name  machine.dom.ain!uid
     take  the  result of the first successful open from the fol-
     lowing list of files (where $DIR represents  iteration  over
     the list of directories in FACEPATH):
           $DIR/machine.dom.ain/uid/iconname
           $DIR/dom.ain/uid/iconname
           $DIR/ain/uid/iconname
           $DIR/misc./uid/iconname
           $DIR/machine.dom.ain/unknown/iconname
           $DIR/dom.ain/unknown/iconname
           $DIR/ain/unknown/iconname
           $DIR/misc./unknown/iconname
     If the -f argument  is  specified  the  given  directory  is
     searched  instead  of /usr/local/faces.  The iconname above,
     consists of the following choices, in the given order:



Sun Release 4.1    Last change: 4 January 1991                  4






FACES(1)                 USER COMMANDS                   FACES(1)



        NeWS - face.ps,  sun.icon, 48x48x1, face.xbm
     SunView - sun.icon, 48x48x1,  face.xbm
         X11 - face.xbm, sun.icon, 48x48x1
     Domain names are now fully supported. For example,  if  mail
     arrives  from  foo@a.b.c then faces will use the directories
     a.b.c, b.c and c for the machine name.  The directory  misc.
     hold  faces  for generic users such as root and uucp. If the
     faces directory hierarchy is not found, then  a  blank  face
     image will be used.

     Faces information is administered by a pair of  ASCII  files
     in  the  faces directory that associate related machines and
     faces. The machine table machine.tab  attaches  machines  to
     communities; the line
           stard=sunaus
     puts the machine stard  in  community  sunaus.  The  machine
     table may be used to alias entire communities; the line
           wseng.sun.com=eng.sun.com
     will cause the wseng.sun.com domain  to  be  mapped  to  the
     eng.sun.com   community.   The  people  table  associates  a
     community/alias pair, with a real username.
           sunaus/rburridge=richb
     causes the alias rburridge to be translated  into  the  real
     username richb for the community sunaus

     Note that you still need to use mailtool or some other  mail
     reading  utility to actually read the mail that this program
     monitors; faces simply displays who the mail is from.

     When new mail arrives, faces will beep and  flash  appropri-
     ately, depending upon the set parameters in the user's faces
     startup file.  This is looked for in the user's home  direc-
     tory;  first the file .facesrc is tried, and if that file is
     not found, .mailrc is looked for.  The file, if found,  will
     be examined for lines in the following form:

     set bell = number
          Give the number of times faces will ring the bell  when
          new mail arrives.

     set flash = number
          Give the number of times faces will  flash  the  window
          when new mail arrives.

     set raise
          faces will raise the window when new mail arrives.

     set button1clear
          For those who liked the behaviour of previous  versions
          of  faces,  this  causes  button  1 to clear the window
          (like typing Delete).   The  ``toggling''  function  of
          button 1 is moved to button 2 if this option is set.



Sun Release 4.1    Last change: 4 January 1991                  5






FACES(1)                 USER COMMANDS                   FACES(1)



     If you are using the NeWS version and creating  face  images
     of  the  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.

     If you are using the -e option, then  the  user  program  or
     shell  script  should  firstly generate a single record with
     the following fixed format, beginning at column 1:
           Cols=mm Rows=nn
     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.

     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:
          __________________________________________________
         |_________________________________________________|
         | username             1                20        |
         | hostname            21                20        |
         | window left         41                10        |
         | window right        51                10        |
         | icon left           61                10        |
         | icon right          71                10        |
         |_________________________________________________|

     Any of these fields may be left blank. There are  also  four
     special  usernames, which will display the appropriate stan-
     dard icons. These are NOMAIL, NOPAPER, NOPRINT and NOUSERS.

XFACE SUPPORT
     Faces is capable of recognising a compressed face  image  in
     the  mail  message header.  It uses special X-Face: lines to
     do this. It is very simple to add your compressed face image
     to a mail header.

     The  following  method  works   for   Berkeley   Mail   (aka
     /usr/ucb/mail),  Open Windows mailtool and mush. It probably
     works for others too.

     It is suggested that each user store  the  compressed  image
     (generated  by  compface  )  in a file called .face in their
     home directory. See the compface manual page for more infor-
     mation  on  how  to  generate the compressed face image. The
     first line should have the  X-Face:  prepended;  second  and
     subsequent  lines  should  have  a  preceding tab, and there
     should be a trailing blank line. Here  is  a  typical  .face
     file:



Sun Release 4.1    Last change: 4 January 1991                  6





FACES(1)                 USER COMMANDS                   FACES(1)



     X-Face: *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
                  /VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
                  qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L


     Each user should add the line:

     set sendmail=/usr/local/bin/faces.sendmail

     to their ~/.mailrc file, where /usr/local/bin is the  direc-
     tory where your faces binaries were installed.

     A similar method exists with  the  Elm  mailer.  The  user's
     compressed face image should be setup in a ~/.face file, but
     without the initial "X-Face:", and  leading  spaces  removed
     from each line. There is also no trailing blank line. Here's
     an example:

     *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
     /VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
     qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L


     To automatically include this into a header into an Elm mail
     message, just add the following line to your .elm/elmheaders
     file:

     X-Face: `cat $HOME/.face`


SEE ALSO
     mail(1), elm(1), mush(1), aliases(7).

FILES
     /var/spool/mail               directory for system mailboxes

     $HOME/.facesrc                faces startup file

     $HOME/.mailrc                 mail startup file (examined if
                                   .facesrc doesn't exist)

     /usr/local/faces              main directory containing  the
                                   face icons.

     /usr/local/faces/people.tab   people/file equivalences

     /usr/local/faces/machine.tab  machine/community equivalences

ENVIRONMENT VARIABLES
     DISPLAY        The X11 server to be used by the XView or X11
                    faces program to display the face icons on.




Sun Release 4.1    Last change: 4 January 1991                  7






FACES(1)                 USER COMMANDS                   FACES(1)



     FACEPATH       A colon separated list of directory paths  to
                    search for machine/user face icons.

     HOME           The home directory of the current user.  Used
                    to locate the .facesrc or .mailrc file.

     MAIL           The complete pathname of the mail spool  file
                    to monitor.

     WINDOW_PARENT  Used to verify that the program is  executing
                    under a valid SunView environment.

HISTORY
     faces is based on the Bell Labs Edition 8 program vismon(9).
     This program is not derived from vismon source.

BUGS
     The machine and people table lookup  is  hopelessly  ineffi-
     cient  and  will  need  to be improved as the faces database
     gets larger.

AUTHOR
     Rich Burridge,          Internet: richb@Aus.Sun.COM
     PHONE: +61 2 413 2666     ACSnet: richb@sunaus.sun.oz.au































Sun Release 4.1    Last change: 4 January 1991                  8



Funky_Stuff
len=`wc -c < faces.man.text`
if [ $len !=    18890 ] ; then
echo error: faces.man.text was $len bytes long, should have been    18890
fi
fi # end of overwriting check
if [ -f faces.sendmail ]
then
echo shar: will not over-write existing file faces.sendmail
else
echo shar: extracting 'faces.sendmail',      873 characters
cat > faces.sendmail <<'Funky_Stuff'
#!/bin/sh
#
#  @(#)faces.sendmail 1.1 91/01/01
#
#  Small script to automatically add X-Face: compressed image lines to a
#  mail message header. This shell script should be run by adding a line
#  similar to:
#
#  set sendmail=/usr/local/bin/faces.sendmail
#
#  to your ~/.mailrc file. See the faces manual pages for more details, and
#  how to setup yout ~/.face file.
# 
#  Copyright (c) John Mackin - All rights reserved.
#
#  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.
#
sed -n  -e '/^$/!{p;d;}' \
	-e "r $HOME/.face" -e n \
	-e ': copy' -e p -e n -e 'b copy' | /usr/lib/sendmail "$@"
Funky_Stuff
len=`wc -c < faces.sendmail`
if [ $len !=      873 ] ; then
echo error: faces.sendmail was $len bytes long, should have been      873
fi
fi # end of overwriting check

richb@sunaus.oz (Rich Burridge) (01/07/91)

[See the instructions in part1, on how to apply this patch - Rich.]

------CUT HERE------patch.10.part2------CUT HERE------

------- main.c -------
*** /tmp/da09632	Mon Jan  7 18:56:08 1991
--- main.c	Fri Jan  4 09:22:39 1991
***************
*** 27,34 ****
--- 27,38 ----
  #ifndef mips
  #include <netdb.h>
  #else
+ #ifdef SYSTYPE_BSD43
+ #include <netdb.h>
+ #else
  #include <bsd/netdb.h>
  #endif
+ #endif
  #include <ctype.h>
  
  #ifdef DNSLOOKUP
***************
*** 402,408 ****
  /* Grovel through the machine/community association list. */
  
    for (temp = machines; temp != NULL; temp = temp->next)
!     if (strcmp(temp->machine, community) == 0)
        {
          STRCPY(community, temp->community) ;
          IF_DEBUG( FPRINTF(stderr,
--- 406,412 ----
  /* Grovel through the machine/community association list. */
  
    for (temp = machines; temp != NULL; temp = temp->next)
!     if (soft_match(temp->machine, community) == 0)
        {
          STRCPY(community, temp->community) ;
          IF_DEBUG( FPRINTF(stderr,
***************
*** 592,595 ****
--- 596,611 ----
            }
      }
    FCLOSE(fd) ;
+ }
+ 
+ 
+ soft_match(d_ptr, c_ptr)
+ register char *c_ptr, *d_ptr ;
+ {
+   if (*d_ptr == '*')
+     {
+       d_ptr++ ;
+       c_ptr = c_ptr + strlen(c_ptr) - strlen(d_ptr) ;
+     }
+   return(!EQUAL(c_ptr, d_ptr)) ;
  }

------- mon.c -------
*** /tmp/da09635	Mon Jan  7 18:56:09 1991
--- mon.c	Mon Jan  7 18:40:58 1991
***************
*** 25,32 ****
--- 25,36 ----
  #ifndef mips
  #include <sys/time.h>
  #else
+ #ifdef SYSTYPE_BSD43
+ #include <sys/time.h>
+ #else
  #include <bsd/sys/time.h>
  #endif
+ #endif
  #include <sys/file.h>
  #include "faces.h"
  #include "extern.h"
***************
*** 143,148 ****
--- 147,153 ----
                             {
                               repl_image(DISP_NAME,  CUROFF, width, height) ;
                               repl_image(DISP_OTHER, CUROFF, width, height) ;
+                              add_face(DISP_ICON, NOMAIL, "") ;
                               toclear = 1 ;
                               do_check() ;
                             }
***************
*** 157,165 ****
--- 162,173 ----
  do_mail(mtype)              /* Monitor a mail file for new or all mail. */
  enum mon_type mtype ;
  {        
+   int eoh ;                 /* Set true, if end of mail header detected. */
    FILE *fp ;                /* File descriptor for users mail spool file. */
    time_t ubuf[2] ;          /* For reseting the access time on spoolfile. */
  
+   static time_t lastmtime ; /* Only look at mailfile when it's changed. */
+ 
    column = row = 0 ;        /* Start in top left corner of pixrect. */
    newmail = 0 ;             /* Assume no new mail. */
    noicons = 0 ;
***************
*** 173,178 ****
--- 181,194 ----
        else make_display() ;     /* Output icons and tidyup chain of records. */
        return ;
      }
+ 
+ /*  See if there is any work to do. If the file hasn't changed, then no need
+  *  to do anythingf but exit.
+  */
+ 
+   if (buf.st_mtime == lastmtime) return ;
+   lastmtime = buf.st_mtime ;
+ 
    if (buf.st_size > lastsize ||
        mhflag && buf.st_size < lastsize && buf.st_size != 0)
      {
***************
*** 200,215 ****
      }
    if (mtype == MONNEW) FSEEK(fp, lastsize, 0) ;
    lastsize = buf.st_size ;
    while (fgets(line, MAXLINE, fp) != NULL)
      {
        if (EQUAL(line, "From "))
          {
            if (froms_found) process_info() ;  /* Process previous mail. */
            process_from() ;                   /* Save new from details. */
          }
!       else if (EQUAL(line, "From:"))   process_from() ;
!       else if (EQUAL(line, "X-Face:")) process_face() ;
!       else if (doing_xface)            process_face() ;
      }
    FCLOSE(fp) ;
  
--- 216,234 ----
      }
    if (mtype == MONNEW) FSEEK(fp, lastsize, 0) ;
    lastsize = buf.st_size ;
+   eoh = FALSE ;
    while (fgets(line, MAXLINE, fp) != NULL)
      {
        if (EQUAL(line, "From "))
          {
            if (froms_found) process_info() ;  /* Process previous mail. */
+           eoh = FALSE ;
            process_from() ;                   /* Save new from details. */
          }
!       else if (*line == '\n')                          eoh = TRUE ;
!       else if (EQUAL(line, "From:")   && eoh == FALSE) process_from() ;
!       else if (EQUAL(line, "X-Face:") && eoh == FALSE) process_face() ;
!       else if (doing_xface            && eoh == FALSE) process_face() ;
      }
    FCLOSE(fp) ;
  
***************
*** 596,601 ****
--- 615,621 ----
  {
    char *host, *user ;
    char temp[MAXLINE], ts[9] ;
+   char from_address[MAXLINE] ;
  
    if (EQUAL(line, "From "))
      {
***************
*** 604,613 ****
        STRCPY(face_ts, ts) ;
        froms_found = 1 ;
      }
!   else
      {
        if (fromc_found) return ;    /* Only process first From: line. */
        fromc_found = 1 ;
      }
  
    if (parsefrom(line, &user, &host))
--- 624,658 ----
        STRCPY(face_ts, ts) ;
        froms_found = 1 ;
      }
!   else if (EQUAL(line, "From:"))
      {
        if (fromc_found) return ;    /* Only process first From: line. */
        fromc_found = 1 ;
+ 
+ /*  An ugly hack: if an alias of a special form (comm/full-address) exists,
+  *  then skip the "From:" lookup. This allows stuff from mailing lists to be
+  *  recognized as such, instead of the individual senders. In people.tab,
+  *  include a line like:
+  *
+  *  someplace/foolist@someplace=mailinglist
+  */
+ 
+       STRCPY(from_address, face_user) ;
+       if (*face_host != '\0')
+         {
+           STRCAT(from_address, "@") ;
+           STRCAT(from_address, face_host) ;
+         }
+       h_to_c(face_host, community) ;
+       a_to_u(community, from_address, realcomm, temp) ;
+       if (strcmp(from_address, realname) != 0)
+         {
+ 
+ /*  Had an entry for the full name, that means don't try to do further
+  *  interpretation of the From:
+  */
+           return ;
+         }
      }
  
    if (parsefrom(line, &user, &host))

------- patchlevel.h -------
*** /tmp/da09638	Mon Jan  7 18:56:10 1991
--- patchlevel.h	Tue Jan  1 11:40:45 1991
***************
*** 14,17 ****
   *  reported to me then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  9
--- 14,17 ----
   *  reported to me then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  10

------- README -------
*** /tmp/da09641	Mon Jan  7 18:56:10 1991
--- README	Fri Jan  4 09:44:38 1991
***************
*** 201,237 ****
  5. How to include your compressed face image with mail.
  -------------------------------------------------------
  
! Faces is capable of recognising the compressed face image anywhere in the
! mail message (header or body), but the best place to put it is in the mail
! header (out of the way).
  
  It is suggested that each user store the compressed image (generated by
! compface) in a file called .face in their home directory. For example, my
  .face file contains:
  
  *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
  \/VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
  qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L
  
- Note that there is no initial "X-Face:" and leading spaces have been
- removed from each line.
- 
  To automatically include this into a header into an Elm mail message, just
  add the following line to your .elm/elmheaders file:
  
      X-Face: `cat $HOME/.face`
  
- Included with this faces distribution, is an unofficial patch to mush v7.1.2
- to allow for X-Face support. The Mush mail program will look for the
- existence of a .face file (in the above format) in the users home directory,
- and generate a similar header.
  
- For users of other mailers, it is suggested that the X-Face: line[s] be
- added to your .signature file. Note that in this case, the initial line
- should have "X-Face: " prepended, and second and subsequent lines should
- start with at least one whitespace character.
- 
- 
  6. Automatically updating the faces database.
  ---------------------------------------------
  
--- 201,255 ----
  5. How to include your compressed face image with mail.
  -------------------------------------------------------
  
! As of patch #10 to v1.4, faces is capable of recognising the compressed face
! image only in the mail message header. Previous to this, it was also
! recognised in the body of the message. The latter case causes problems when
! a mail message includes other messages with X-Face: lines.
  
+ The following method works for Berkeley Mail (aka /usr/ucb/mail), Open
+ Windows mailtool and mush. It probably works for others too. Note that the
+ special patch to the mush mail source is no longer needed. It fact, if you
+ are using a version of mush which has this patch applied, you should un-apply
+ it before making the changes listed below, otherwise you will have two sets
+ of X-Face lines in your mail headers. The file mush.xface.patch can be
+ removed from this faces distribution.
+ 
  It is suggested that each user store the compressed image (generated by
! compface) in a file called .face in their home directory. The first line
! should have the X-Face: prepended; second and subsequent lines should have
! a preceding tab, and there should be a trailing blank line. For example, my
  .face file contains:
  
+ ------CUT HERE------START------CUT HERE------
+ X-Face: *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
+ 	\/VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
+ 	qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L
+ 
+ ------CUT HERE-------END-------CUT HERE------
+ 
+ Each user should add the line:
+ 
+ set sendmail=/usr/local/bin/faces.sendmail
+ 
+ to their ~/.mailrc file, where /usr/local/bin is equivalent to the BINDIR
+ definition in the Makefile. This small shell script will be installed when
+ you do a "make install".
+ 
+ A similar method exists with the Elm mailer. The user's compressed face
+ image should be setup in a ~/.face file, but without the initial "X-Face:",
+ and leading spaces removed from each line. There is also no trailing blank
+ line. Here's an example:
+ 
  *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
  \/VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
  qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L
  
  To automatically include this into a header into an Elm mail message, just
  add the following line to your .elm/elmheaders file:
  
      X-Face: `cat $HOME/.face`
  
  
  6. Automatically updating the faces database.
  ---------------------------------------------
  
***************
*** 264,269 ****
--- 282,290 ----
  
  James Ashton for the mail header face compression / uncompression code.
  
+ John Mackin for the faces.sendmail shell script, which is used to automatically
+ put the compressed X-Face: image lines in your mail headers.
+ 
  Pat Lashley for fixing up the NeWS version; modifying it to use cps, and
  improving the quality of the NeWS code. Pat also added the ability to use
  the Sun NIS, to look for hosts not found in the machines.tab file.
***************
*** 276,282 ****
  Hal Stern for the face_update shell script.
  
  Dan Heller and Bart Schaefer for suggesting what should be in the unofficial
! patch to mush v7.1.2 to support X-Face lines.
  
  Guy Harris for the basis of the previous manual page.
  
--- 297,304 ----
  Hal Stern for the face_update shell script.
  
  Dan Heller and Bart Schaefer for suggesting what should be in the unofficial
! patch to mush v7.1.2 to support X-Face lines. Note that this is no longer
! needed.
  
  Guy Harris for the basis of the previous manual page.
  
***************
*** 311,318 ****
  Lashley, Dave Glowacki, Chris Steinbroner, Steven M. Miller, Bob Posert,
  Hugues Leroy, Graham Dumpleton, Michael Schmidt, Robert Adams, Rod Whitby,
  Greg Rose, Mike Khaw, Ian Darwin, Ken Wood, Lindsay F. Marshall, Bruno
! Pillard and Johan Vromans for various bug reports, fixes and suggestions
! for improvement.
  
  
  ----------------------------------------------------------------------------
--- 333,340 ----
  Lashley, Dave Glowacki, Chris Steinbroner, Steven M. Miller, Bob Posert,
  Hugues Leroy, Graham Dumpleton, Michael Schmidt, Robert Adams, Rod Whitby,
  Greg Rose, Mike Khaw, Ian Darwin, Ken Wood, Lindsay F. Marshall, Bruno
! Pillard, Johan Vromans, Chris Mackerell, Howard Pelling and Alan Skea for
! various bug reports, fixes and suggestions for improvement.
  
  
  ----------------------------------------------------------------------------
***************
*** 321,324 ****
  and comments.
  
  Rich Burridge,          DOMAIN: richb@Aus.Sun.COM
! PHONE: +61 2 413 2666   ACSnet: richb@sunaus.sun.oz.au
--- 343,346 ----
  and comments.
  
  Rich Burridge,          DOMAIN: richb@Aus.Sun.COM
! PHONE: +61 2 413 2666   ACSnet: richb@sunaus.sun.oz

------- faces.1 -------
*** /tmp/da09644	Mon Jan  7 18:56:11 1991
--- faces.1	Fri Jan  4 08:48:17 1991
***************
*** 1,6 ****
  .\" %Z%%M% %I% %E%
  .\" tbl faces.1 | nroff -man
! .TH FACES 1 "26 June 1990"
  .SH NAME
  faces \- visual mail, user and print face server.
  .SH SYNOPSIS
--- 1,6 ----
  .\" %Z%%M% %I% %E%
  .\" tbl faces.1 | nroff -man
! .TH FACES 1 "4 January 1991"
  .SH NAME
  faces \- visual mail, user and print face server.
  .SH SYNOPSIS
***************
*** 490,495 ****
--- 490,557 ----
  .B "NOMAIL, NOPAPER, NOPRINT "
  and
  .B "NOUSERS."
+ .SH XFACE SUPPORT
+ .I Faces
+ is capable of recognising a compressed face image in the mail message header.
+ It uses special X-Face: lines to do this. It is very simple to add your
+ compressed face image to a mail header.
+ .LP
+ The following method works for Berkeley Mail (aka /usr/ucb/mail), Open
+ Windows mailtool and mush. It probably works for others too.
+ .LP
+ It is suggested that each user store the compressed image (generated by
+ .I compface
+ ) in a file called
+ .I .face
+ in their home directory. See the compface manual page for more information
+ on how to generate the compressed face image. The first line should have the
+ X-Face: prepended; second and subsequent lines should have a preceding tab,
+ and there should be a trailing blank line. Here is a typical
+ .I .face file:
+ .LP
+ .sp 0.5
+ .nf
+ X-Face: *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
+ 	\/VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
+ 	qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L
+ .sp 1.5
+ .fi
+ Each user should add the line:
+ .LP
+ .sp 0.5 
+ .nf
+ set sendmail=/usr/local/bin/faces.sendmail
+ .sp 1.5
+ .fi 
+ to their
+ .I ~/.mailrc
+ file, where
+ .I /usr/local/bin
+ is the directory where your
+ .I faces
+ binaries were installed.
+ .LP 
+ A similar method exists with the Elm mailer. The user's compressed face
+ image should be setup in a
+ .I ~/.face
+ file, but without the initial "X-Face:", and leading spaces removed from
+ each line. There is also no trailing blank line. Here's an example:
+ .LP
+ .sp 0.5
+ .nf
+ *7O.<19S{MCsaxxe=iCc*y5!i:>e,K40m^btp"<`~gNx5>o?eJMzUng=j]%KybY
+ \/VaZ/3a4pD%#rGu7D<M$.TDpaDN8#8eJC&^^&Mr]@~}Pa,*F-ePrMg5.}e,,bu
+ qROdT{Vzn{!ouXy.&*#V#Q&Zf7a8lX2Kb}"$UT^VhnsJ?){wFU5r+,duO>4@L
+ .sp 1.5
+ .fi 
+ To automatically include this into a header into an Elm mail message, just
+ add the following line to your .elm/elmheaders file:
+ .LP
+ .sp 0.5
+ .nf 
+ X-Face: `cat $HOME/.face`
+ .sp 1.5
+ .fi
  .SH "SEE ALSO"
  mail(1), elm(1), mush(1), aliases(7).
  .SH FILES

------- Makefile -------
*** /tmp/da09647	Mon Jan  7 18:56:12 1991
--- Makefile	Fri Jan  4 09:45:43 1991
***************
*** 247,253 ****
  HDRS		= extern.h faces.h patchlevel.h
  IMAGES		= noface.icon nomail.icon noprint.icon nopaper.icon \
  		  nousers.icon
! OTHERS		= CHANGES README TODO MANIFEST FILES \
  		  faces.1 face_update.1 faces_cps.cps Makefile face_update
  
  SFILES1		= mon.c main.c rec.c
--- 247,253 ----
  HDRS		= extern.h faces.h patchlevel.h
  IMAGES		= noface.icon nomail.icon noprint.icon nopaper.icon \
  		  nousers.icon
! OTHERS		= CHANGES README TODO MANIFEST FILES faces.man.text \
  		  faces.1 face_update.1 faces_cps.cps Makefile face_update
  
  SFILES1		= mon.c main.c rec.c
***************
*** 255,262 ****
  SFILES3		= xview.c x11.c $(HDRS)
  SFILES4		= CHANGES README TODO MANIFEST FILES Makefile
  SFILES5		= faces.1 face_update.1 faces_cps.cps face_update \
! 		  mush.xface.patch $(IMAGES)
! SFILES6		= $(FACES) $(FILTERS)
  SFILES7		= $(COMPFACE)
  
  NEWSLIBS	= $(NEWSLIBDIR) -lcps
--- 255,262 ----
  SFILES3		= xview.c x11.c $(HDRS)
  SFILES4		= CHANGES README TODO MANIFEST FILES Makefile
  SFILES5		= faces.1 face_update.1 faces_cps.cps face_update \
! 		  faces.sendmail $(IMAGES)
! SFILES6		= faces.man.text $(FACES) $(FILTERS)
  SFILES7		= $(COMPFACE)
  
  NEWSLIBS	= $(NEWSLIBDIR) -lcps
***************
*** 326,335 ****
  		(cd filters; $(MAKE) $(MAKEOPTS) install)
  		install -s -m 751 faces $(BINDIR)
  		install -c -m 755 face_update $(BINDIR)
  		install -c -m 644 faces.1 \
  				$(MANDIR)/man$(MANSECT)/faces.$(MANSECT)
  		install -c -m 644 face_update.1 \
! 				$(MANDIR)/man$(MANSECT)face_update.$(MANSECT)
  
  clean:
  		(cd compface; $(MAKE) $(MAKEOPTS) clean)
--- 326,336 ----
  		(cd filters; $(MAKE) $(MAKEOPTS) install)
  		install -s -m 751 faces $(BINDIR)
  		install -c -m 755 face_update $(BINDIR)
+ 		install -c -m 755 faces.sendmail $(BINDIR)
  		install -c -m 644 faces.1 \
  				$(MANDIR)/man$(MANSECT)/faces.$(MANSECT)
  		install -c -m 644 face_update.1 \
! 				$(MANDIR)/man$(MANSECT)/face_update.$(MANSECT)
  
  clean:
  		(cd compface; $(MAKE) $(MAKEOPTS) clean)

------- MANIFEST -------
*** /tmp/da09650	Mon Jan  7 18:56:12 1991
--- MANIFEST	Fri Jan  4 09:47:28 1991
***************
*** 10,17 ****
  TODO                                   |    4
  Makefile                               |    4
  faces.1                                |    5
  face_update.1                          |    5
- mush.xface.patch                       |    5
  face_update                            |    4
  main.c                                 |    1
  get.c                                  |    2
--- 10,18 ----
  TODO                                   |    4
  Makefile                               |    4
  faces.1                                |    5
+ faces.man.text                         |    5
+ faces.sendmail                         |    5
  face_update.1                          |    5
  face_update                            |    4
  main.c                                 |    1
  get.c                                  |    2

------- x11.c -------
*** /tmp/da09653	Mon Jan  7 18:56:13 1991
--- x11.c	Fri Jan  4 09:03:04 1991
***************
*** 21,28 ****
--- 21,33 ----
  #include <sys/types.h>
  #include <sys/time.h>
  #else
+ #ifdef SYSTYPE_BSD43
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #else
  #include <bsd/sys/types.h>
  #include <bsd/sys/time.h>
+ #endif
  #endif
  #include "faces.h"
  #include "extern.h"

------- TODO -------
*** /tmp/da09656	Mon Jan  7 18:56:14 1991
--- TODO	Mon Jan  7 18:46:17 1991
***************
*** 1,14 ****
! 1/ From Lindsay F. Marshall <Lindsay.Marshall%newcastle.ac.uk@munnari.oz>
     The domain name munging (i..e a.b.c -> b.c -> c) doesnt
     seem to work at all, and of course its the wrong way round
     for the uk anyway.
  
! 2/ From Ian Donaldson <rcodi@melomys.co.rmit.oz>
     Is it possible to have the faces cleared automatically once the
     mail has been read?  I'm clearing by clicking on the window at
     the moment.
  
! 3/ From Pat Lashley <patl@Sun.COM>
     Have you given any thought to how to support multiple windowing systems at
     execution time?  I am currently using the sun386i version of architecture
     independant /vol trees to make locally installed programs available
--- 1,14 ----
! *  From Lindsay F. Marshall <Lindsay.Marshall%newcastle.ac.uk@munnari.oz>
     The domain name munging (i..e a.b.c -> b.c -> c) doesnt
     seem to work at all, and of course its the wrong way round
     for the uk anyway.
  
! *  From Ian Donaldson <rcodi@melomys.co.rmit.oz>
     Is it possible to have the faces cleared automatically once the
     mail has been read?  I'm clearing by clicking on the window at
     the moment.
  
! *  From Pat Lashley <patl@Sun.COM>
     Have you given any thought to how to support multiple windowing systems at
     execution time?  I am currently using the sun386i version of architecture
     independant /vol trees to make locally installed programs available
***************
*** 19,34 ****
     windowing system is in use, and envoke the appropriate binary. The difficulty
     is in how to determine which system is in use.
  
! 4/ From: Chris Orgill, cho%cs.aber.ac.uk@uunet.uu.net
     How about allowing the Sunview version to use arbitrary size Sun icons ?
  
! 5/ From Lindsay F. Marshall <Lindsay.Marshall%newcastle.ac.uk@munnari.oz>
     There is a byte-order assumption somewhere that screws up
     any X bitmaps read in from a file - why dont you use the
     procedure provided by the system rather than writing your
     own?? That copes with the problems correctly.
  
! 6/ The NeWS version needs to be finished.
     Remaining problems are:
  
      (a) There are two warnings on compiling news.c, due to FILE operations
--- 19,34 ----
     windowing system is in use, and envoke the appropriate binary. The difficulty
     is in how to determine which system is in use.
  
! *  From: Chris Orgill, cho%cs.aber.ac.uk@uunet.uu.net
     How about allowing the Sunview version to use arbitrary size Sun icons ?
  
! *  From Lindsay F. Marshall <Lindsay.Marshall%newcastle.ac.uk@munnari.oz>
     There is a byte-order assumption somewhere that screws up
     any X bitmaps read in from a file - why dont you use the
     procedure provided by the system rather than writing your
     own?? That copes with the problems correctly.
  
! *  The NeWS version needs to be finished.
     Remaining problems are:
  
      (a) There are two warnings on compiling news.c, due to FILE operations
***************
*** 37,64 ****
      (b) The new input functionality (click left/middle mouse, raise window,
          Del, ^L and q) has to be added in.
  
! 7/ With the XView version, add a Properties pinup window which would
     allow you to change the various monitoring options on the fly.
  
! 8/ Add in audio capabilities.
  
! 9/ From Pat Lashley <patl@Sun.COM>
     There is no reason that FaceSaver images couldn't be parsed by faces and
     sent to NeWS with the appropriate transformation matrix to squeeze it down
     to icon size.  Let the NeWS PostScript interpreter do the bit
     compression/dithering.
  
! 10/ If an X-Face is found inside a piece of mail that has been forwarded
!     inside another mail item, and the -U option is set, then it is possible
!     to update the wrong face in the faces database. The only clean solution
!     to this, is if faces only recognises X-Face lines in the mail header.
! 
!     From Pat Lashley <patl@Sun.COM>
!     The problem with finding an X-Face: entry in an included message can be
!     resolved by a flag which would restrict X-Face: recognition to the header
!     or the first non-blank line of the body.
! 
! 11/ From Pat Lashley <patl@Sun.COM>
      An entry of the form `+domainname=community' in the machines.tab file to
      indicate that if a hostname is found without domain specifier, and it
      doesn't match any other machines.tab entry, and YP (oops, NIS) access to
--- 37,54 ----
      (b) The new input functionality (click left/middle mouse, raise window,
          Del, ^L and q) has to be added in.
  
! *  With the XView version, add a Properties pinup window which would
     allow you to change the various monitoring options on the fly.
  
! *  Add in audio capabilities.
  
! *  From Pat Lashley <patl@Sun.COM>
     There is no reason that FaceSaver images couldn't be parsed by faces and
     sent to NeWS with the appropriate transformation matrix to squeeze it down
     to icon size.  Let the NeWS PostScript interpreter do the bit
     compression/dithering.
  
! *   From Pat Lashley <patl@Sun.COM>
      An entry of the form `+domainname=community' in the machines.tab file to
      indicate that if a hostname is found without domain specifier, and it
      doesn't match any other machines.tab entry, and YP (oops, NIS) access to
***************
*** 67,99 ****
      indicates that the current NIS domain should be used.  This should
      probably be enabled by a compile-time option for those who don't run NIS.
  
! 12/ From Pat Lashley <patl@Sun.COM>
      An option to display unknown users individually with the username,
      instead of clustered under a single `unknown' user.  Really hot would be
      some way to specify this on a per-community basis...
  
! 13/ From Pat Lashley <patl@Sun.COM>
      Multiple face directory hierarchies. I.e:
      `-f $HOME/facedir -f /import/group/facedir -f /import/global/facedir ...'
      The order of specification would indicate the search order.
  
! 14/ From Pat Lashley <patl@Sun.COM>
      Accept SIGHUP as an indication that various internal databases should be
      updated from the files (i.e. machines.tab), and that the display should be
      immediatly updated to reflect current state instead of waiting for the
      polling period to end.
  
! 15/ From Pat Lashley <patl@Sun.COM>
      Accept SIGALRM as an indication that the current polling period should be
      immediatly terminated, and the display updated.
  
! 16/ From Pat Lashley <patl@Sun.COM>
      More internal comments and a general design document.
  
! 17/ Provide a template of what each of the independent graphics routine do,
      to aid porting to new graphics environments.
  
! 18/ From John Mackin <john@cs.su.oz.au>
      If the mailbox is empty, or contains just one mail item, faces -a starts
      out 10 icon-widths long (with the right-hand part being white instead of
      background grey), then shrinks to one icon-width as soon as a mail item
--- 57,89 ----
      indicates that the current NIS domain should be used.  This should
      probably be enabled by a compile-time option for those who don't run NIS.
  
! *   From Pat Lashley <patl@Sun.COM>
      An option to display unknown users individually with the username,
      instead of clustered under a single `unknown' user.  Really hot would be
      some way to specify this on a per-community basis...
  
! *   From Pat Lashley <patl@Sun.COM>
      Multiple face directory hierarchies. I.e:
      `-f $HOME/facedir -f /import/group/facedir -f /import/global/facedir ...'
      The order of specification would indicate the search order.
  
! *   From Pat Lashley <patl@Sun.COM>
      Accept SIGHUP as an indication that various internal databases should be
      updated from the files (i.e. machines.tab), and that the display should be
      immediatly updated to reflect current state instead of waiting for the
      polling period to end.
  
! *   From Pat Lashley <patl@Sun.COM>
      Accept SIGALRM as an indication that the current polling period should be
      immediatly terminated, and the display updated.
  
! *   From Pat Lashley <patl@Sun.COM>
      More internal comments and a general design document.
  
! *   Provide a template of what each of the independent graphics routine do,
      to aid porting to new graphics environments.
  
! *   From John Mackin <john@cs.su.oz.au>
      If the mailbox is empty, or contains just one mail item, faces -a starts
      out 10 icon-widths long (with the right-hand part being white instead of
      background grey), then shrinks to one icon-width as soon as a mail item
***************
*** 105,115 ****
      window, and shrinks the window back to one row/-c widths when it is
      cleared.
  
! 19/ From Pat Lashley <patl@Sun.COM>
      Change window header to show what is being monitored (mail, lp1, users,
      etc.)
  
! 20/ From Pat Lashley <patl@Sun.COM>
      A mixed-mode version which would use xview for the basic windowing and
      property sheets; but use NeWS for the rendering. It is, of course,
      dependant upon having the X/NeWS server, but there may be some way to
--- 95,105 ----
      window, and shrinks the window back to one row/-c widths when it is
      cleared.
  
! *   From Pat Lashley <patl@Sun.COM>
      Change window header to show what is being monitored (mail, lp1, users,
      etc.)
  
! *   From Pat Lashley <patl@Sun.COM>
      A mixed-mode version which would use xview for the basic windowing and
      property sheets; but use NeWS for the rendering. It is, of course,
      dependant upon having the X/NeWS server, but there may be some way to
***************
*** 116,150 ****
      determine at run-time whether the NeWS operations are available, or
      whether to stick to XView/X11 mechanisms.
  
! 21/ From Kee Hinckley <nazgul@alphalpha.com>
      Any possibility of changing that header to an RFC1154 (I think that's
      the number) conformant form?  Namely an encoding field in the
      header (presumbably with a new name for the faces format, or using
      one of the existing ones (G3Fax uuencode would probably be good)).
  
! 22/ Get the SunView, XView and NeWS drivers to use the -bg and -fg color
      options.
  
! 23/ From Ken Wood <kwood@adl.austek.oz.au>
      Do you have any plans to get xfaces to read geometry etc from the
      database ?
  
! 24/ When the -w and/or -h options are used with the SunView version, the
      size of the icon created is incorrect.
  
! 25/ From John Mackin <john@cs.su.oz.au>
      The usage message claims you can use "-bg background_color". This isn't
      in the manual page, and it also doesn't work at all (under X11). The
      argument appears to be completely ignored
  
! 26/ From John Mackin <john@cs.su.oz.au>
      The "-b icon_file" option doesn't work. It still comes up with the
      default background.
  
! 27/ From John Mackin <john@cs.su.oz.au>
!     The manual entry makes no mention of X-Face: lines.  
! 
! 28/ From John Mackin <john@cs.su.oz.au>
      It should be made more explicit in the manual page that in the
      previous version of faces, a -f option _added_ the directory to
      the face search path, so that if you did -f you got those faces
--- 106,137 ----
      determine at run-time whether the NeWS operations are available, or
      whether to stick to XView/X11 mechanisms.
  
! *   From Kee Hinckley <nazgul@alphalpha.com>
      Any possibility of changing that header to an RFC1154 (I think that's
      the number) conformant form?  Namely an encoding field in the
      header (presumbably with a new name for the faces format, or using
      one of the existing ones (G3Fax uuencode would probably be good)).
  
! *   Get the SunView, XView and NeWS drivers to use the -bg and -fg color
      options.
  
! *   From Ken Wood <kwood@adl.austek.oz.au>
      Do you have any plans to get xfaces to read geometry etc from the
      database ?
  
! *   When the -w and/or -h options are used with the SunView version, the
      size of the icon created is incorrect.
  
! *   From John Mackin <john@cs.su.oz.au>
      The usage message claims you can use "-bg background_color". This isn't
      in the manual page, and it also doesn't work at all (under X11). The
      argument appears to be completely ignored
  
! *   From John Mackin <john@cs.su.oz.au>
      The "-b icon_file" option doesn't work. It still comes up with the
      default background.
  
! *   From John Mackin <john@cs.su.oz.au>
      It should be made more explicit in the manual page that in the
      previous version of faces, a -f option _added_ the directory to
      the face search path, so that if you did -f you got those faces
***************
*** 152,158 ****
      _supersedes_ the system faces and you must include a trailing
      colon to have them searched.
  
! 29/ From John Mackin <john@cs.su.oz.au>
      A comment on the domain lookup algorithm. According to the manual page:
   
             $DIR/machine.dom.ain/uid/iconname
--- 139,145 ----
      _supersedes_ the system faces and you must include a trailing
      colon to have them searched.
  
! *   From John Mackin <john@cs.su.oz.au>
      A comment on the domain lookup algorithm. According to the manual page:
   
             $DIR/machine.dom.ain/uid/iconname
***************
*** 181,192 ****
      The idea is that at each level, if the next component exists and is
      a directory, you descend into it and look there.
  
! 30/ From John Mackin <john@cs.su.oz.au>
!     The code in mon.c recognises From: lines in the body of the mail.
!     This is an error. From: lines should only be recognised before
!     the first blank line.  
!  
! 31/ From John Mackin <john@cs.su.oz.au>
      You test if the beginning of the line is identically equal to
      "X-Face:" or "From:". This is contrary to RFC822, which specifies
  
--- 168,174 ----
      The idea is that at each level, if the next component exists and is
      a directory, you descend into it and look there.
  
! *   From John Mackin <john@cs.su.oz.au>
      You test if the beginning of the line is identically equal to
      "X-Face:" or "From:". This is contrary to RFC822, which specifies
  
***************
*** 196,210 ****
            the field-name and the colon (so "FRoM  : Foo Bar <foo@bar>"
            should work).  
   
! 32/ From John Mackin <john@cs.su.oz.au>
      The RFC822 address parsing in parsefrom.c appears, on quick
      inspection, to be grossly inadequate.  (It certainly doesn't
      handle comments in addresses, for one thing.)
  
! 33/ From Alan Skea <skea@prl.dec.com>
      If you are running faces with the -a option, and mail arrived from
      x@y with an X-Face: line then another article arrives from x@y with
      a different X-Face: line, then the second face is not shown; just
      the count of the first face get's incremented.
  
! 34/ Optimise.
--- 178,196 ----
            the field-name and the colon (so "FRoM  : Foo Bar <foo@bar>"
            should work).  
   
! *   From John Mackin <john@cs.su.oz.au>
      The RFC822 address parsing in parsefrom.c appears, on quick
      inspection, to be grossly inadequate.  (It certainly doesn't
      handle comments in addresses, for one thing.)
  
!     Here's an example that fails:
! 
!     From: user@host.dom.ain (A (Nested) Comment)
! 
! *   From Alan Skea <skea@prl.dec.com>
      If you are running faces with the -a option, and mail arrived from
      x@y with an X-Face: line then another article arrives from x@y with
      a different X-Face: line, then the second face is not shown; just
      the count of the first face get's incremented.
  
! *   Optimise.

------- CHANGES -------
*** /tmp/da09659	Mon Jan  7 18:56:14 1991
--- CHANGES	Mon Jan  7 18:52:58 1991
***************
*** 532,534 ****
--- 532,625 ----
           - The RFC822 address parsing in parsefrom.c appears, on quick
             inspection, to be grossly inadequate.  (It certainly doesn't
             handle comments in addresses, for one thing.)
+ 
+ v1.4 - patchlevel 10 - 7th January 1991.
+ 
+          - Faces now only looks for X-Face: lines in the mail header, now
+            that there is a simple method for everybody to get their X-Face:
+            lines into the mail header (see below). This fixes up the following
+            problems (which have been removed from the TODO file):
+ 
+            If an X-Face is found inside a piece of mail that has been
+            forwarded inside another mail item, and the -U option is set, then
+            it is possible to update the wrong face in the faces database. The
+            only clean solution to this, is if faces only recognises X-Face
+            lines in the mail header.
+ 
+            From Pat Lashley <patl@Sun.COM>
+            The problem with finding an X-Face: entry in an included message
+            can be resolved by a flag which would restrict X-Face: recognition
+            to the header or the first non-blank line of the body.
+ 
+          - From John Mackin <john@cs.su.oz.au>
+            The code in mon.c recognises From: lines in the body of the mail.
+            This is an error. From: lines should only be recognised before
+            the first blank line.
+ 
+          - From John Mackin <john@cs.su.oz.au>
+            A small shell script called faces.sendmail has been written, which
+            will automatically add X-Face: compressed image lines to a mail
+            header. This is used in conjunction with the set sendmail entry in
+            a user's ~/.mailrc file. See the README file and the faces manual
+            pages for more details. This method is known to work with Berkeley
+            Mail, Open Windows mailtool and mush. It should work with other
+            mailers too. The special patch to mush is no longer needed; in
+            fact if it has been applied, it should be un-applyed otherwise you
+            will get two sets of X-Face: lines in your mail headers. The
+            mush.xface.patch file can be removed from the faces distribution.
+            FILES, MANIFEST, Makefile, README and faces.1 have been updated.
+ 
+          - From John Mackin <john@cs.su.oz.au>
+            The manual entry makes no mention of X-Face: lines.
+ 
+          - From Mike Khaw <khaw@parcplace.com>
+            The "install" target for the Makefile is missing a "/" between
+            $(MANSECT) and face_update; i.e., the last line should be
+ 
+                 $(MANDIR)/man$(MANSECT)/face_update.$(MANSECT)
+ 
+          - From Chris Mackerell <chris@bcl.co.nz>
+            Changes to faces to get it compile in the BSD4.3 environment of
+            Mips RISCos 4.5 (beta).
+ 
+          - From brew%qa@tplrd.tpl.oz.au
+            There is a problem parsing the address from which mail comes
+            if the address looks like
+ 
+ 	   From: person@machine
+ 
+            ie: no "(comment)" after it.  You parse this so that the machine
+            name has a trailing '\n'.
+ 
+            Although I sometimes get mail like this, perhaps this is not correct
+            RFC822 syntax.
+ 
+          - From Chris Maltby <chris@softway.sw.oz.au>
+            It the user had cleared the faces window by hitting the Del key,
+            the icon wasn't being reset to the "no mail" icon.
+ 
+          - From Howard Pelling <Howard.Pelling@UK.Sun.COM>
+            Modifications to allow faces to recognise partial domains in the
+            machine.tab file. Eg. mail from bristol.ac.uk and edinburgh.ac.uk
+            will come from the same community.
+ 
+          - From Graham Dumpleton <grahamd@otc.otca.oz>
+            From Alan Skea <skea@vast.eecs.unsw.oz>
+            If the From: line just had a username (no hostname), then the
+            trailing newline was not being removed (in parsefrom.c).
+ 
+          - A plain text version of the faces manual pages is now included with
+            the faces distribution. It's called faces.man.text.
+ 
+          - From Gregory Dudek  <dudek@daeron.McRCIM.McGill.EDU>
+            In process_info() in mon.c, don't do anything if the mailbox hasn't
+            changed since the last look.
+ 
+          - From Gregory Dudek  <dudek@daeron.McRCIM.McGill.EDU>
+            In process_from() in mon.c, I've added an UGLY hack so that mailing
+            lists could be recognized as such, rather than causing zillions of
+            different unknown's to appear. It expects an ugly ugly magic trick
+            in people.tab. The mailing list must appear as
+            listplace/list@listplace  eg.
+ 
+            ics.UCI.EDU/fa.think-c-outbound-request@ics.UCI.EDU

------- FILES -------
*** /tmp/da09662	Mon Jan  7 18:56:15 1991
--- FILES	Fri Jan  4 09:48:04 1991
***************
*** 10,18 ****
  TODO            - suggested enhancements. Volunteers anyone?
  Makefile        - used to build faces on Unix systems.
  faces.1         - the faces manual page (tbl + troff/nroff -man format).
  face_update     - shell script to automatically update the faces database.
  face_update.1   - the face_update manual page (troff/nroff -man format)
- mush.xface.patch - unofficial patch to mush v7.1.2 to support X-Face lines.
  
  main.c          - STANDARD SOURCE FILES: includes declarations and main().
  get.c           - routines to get information, objects, icons etc..
--- 10,19 ----
  TODO            - suggested enhancements. Volunteers anyone?
  Makefile        - used to build faces on Unix systems.
  faces.1         - the faces manual page (tbl + troff/nroff -man format).
+ faces.man.text  - plain text version of the faces manual pages.
+ faces.sendmail  - shell script to add X-Face: lines to a mail header.
  face_update     - shell script to automatically update the faces database.
  face_update.1   - the face_update manual page (troff/nroff -man format)
  
  main.c          - STANDARD SOURCE FILES: includes declarations and main().
  get.c           - routines to get information, objects, icons etc..

------- parsefrom.c -------
*** /tmp/da09665	Mon Jan  7 18:56:16 1991
--- parsefrom.c	Fri Jan  4 09:26:57 1991
***************
*** 44,50 ****
  			/* RFC822 - two formats
  			 * From: comment <address>
  			 * From: address (comment)
! 			 */
  			if ((p = index(user, '<')) != NULL) {
  				user = ++p;
  				if ((p = index(user, '>')) != NULL)
--- 44,53 ----
  			/* RFC822 - two formats
  			 * From: comment <address>
  			 * From: address (comment)
! 			 *
!                          * Will also handle:
!                          * From: address
!                          */
  			if ((p = index(user, '<')) != NULL) {
  				user = ++p;
  				if ((p = index(user, '>')) != NULL)
***************
*** 52,58 ****
  				else
  					return 0;
  			}
! 			else if ((p = rindex(user, '(')) != NULL) {
  				do
  					*p = '\0';
  				while (*--p == ' ' || *p == '\t');
--- 55,62 ----
  				else
  					return 0;
  			}
! 			else if ((p = rindex(user, '(' )) != NULL ||
! 				 (p = rindex(user, '\n')) != NULL) {
  				do
  					*p = '\0';
  				while (*--p == ' ' || *p == '\t');
***************
*** 100,105 ****
--- 104,111 ----
  	else if ((p = index(host, '.')) != NULL)
  		*p = '\0';
  #endif	/* NODOMAINS */
+ 	if ((p = index(user, '\n')) != NULL)
+ 		*p = '\0';
  	if ((p = index(host, '\n')) != NULL)
  		*p = '\0';
  	*hostp = host;