[comp.sources.bugs] Official patch #7 for faces v1.3; please apply it.

richb@sunchat.oz (Rich Burridge) (02/05/89)

It fixes the following problems:

From C.P. Lai, sun!daisy.sun.com!cplai

1/ Makefile has been updated to state that the ROADRUNNER switch is
   only needed if you are using a Sun386i in the SunView environment.

2/ The order in which the icon images are searched for, is now
   dependent upon which graphics environment faces is compiled for.
   The face.ps icon files are only looked at in the NeWS environment.
   The orders are:

   SunView - sun.icon, 48x48x1, face.xbm.
   NeWS - face.ps, sun.icon, 48x48x1, face.xbm.
   X11 - face.xbm, sun.icon, 48x48x1.

3/ The README and the man page have been altered to correctly include
   information on the X1[01] face.xbm icon format.

From Chris Orgill, cho%cs.aber.ac.uk@uunet.uu.net

4/ The -f option has been slightly changed. If the user specifies -f
   with a directory name, faces will look there first for each face.
   If not found then it will search the default face directory.
   If no -f option is given, then just the default directory is used.
   The manual page has been adjusted accordingly.

Feed this file to Larry Walls' patch program, then recompile.

    Rich.

------CUT HERE------CUT HERE------
*** original/Makefile	Sun Jan 29 23:19:15 1989
--- Makefile	Sun Feb  5 22:09:02 1989
***************
*** 1,7 ****
  #
  #  Makefile for faces, an icon face server, plus associated software.
  #
! #  @(#)Makefile 1.5 89/01/29
  #
  #  Copyright (c) Rich Burridge.
  #                Sun Microsystems, Australia - All rights reserved.
--- 1,7 ----
  #
  #  Makefile for faces, an icon face server, plus associated software.
  #
! #  @(#)Makefile 1.6 89/02/05
  #
  #  Copyright (c) Rich Burridge.
  #                Sun Microsystems, Australia - All rights reserved.
***************
*** 83,90 ****
  #
  #LDX11FLAGS     = -Bstatic
  #
! #  If you are using a Sun386i, then the following definition should
! #  be uncommented.
  #
  #ROADRUNNER     = -DSUN386i
  #-------------------------------------------------------------------
--- 83,90 ----
  #
  #LDX11FLAGS     = -Bstatic
  #
! #  If you are using a Sun386i and compiling for the SunView environment,
! #  then the following definition should be uncommented.
  #
  #ROADRUNNER     = -DSUN386i
  #-------------------------------------------------------------------
*** original/README	Sun Jan 29 12:48:19 1989
--- README	Sun Feb  5 22:09:01 1989
***************
*** 20,27 ****
  
  This should then be followed by a make install. You might need super-user
  permission to do this successfully. Create your face directory, hostname
! sub-directories username ikons/icons, machine and people tables, and you're
! set.
  
  The Makefile compilation details are setup to default to compiling faces
  on a Sun3 running SunOS v4.0. Note that there are a few small compilation
--- 20,27 ----
  
  This should then be followed by a make install. You might need super-user
  permission to do this successfully. Create your face directory, hostname
! and username sub-directories and appropriate ikons/icons, machine and
! people tables, and you're set.
  
  The Makefile compilation details are setup to default to compiling faces
  on a Sun3 running SunOS v4.0. Note that there are a few small compilation
***************
*** 58,68 ****
  
  There is a face directory, and under that are directories which are hostnames.
  Under that are username directories, and this is where the face images are
! placed. The face images are currently stored in one of three ways:
  
    1.   NeWS .ps format, called face.ps.
    2.   Sun icon format, called sun.icon.
    3.   Blit ikon format, called 48x48x1.
  
  The NeWS .ps allow for animation with the users' face. These files are
  drawn when the rest of the static faces have been displayed. They will be
--- 58,69 ----
  
  There is a face directory, and under that are directories which are hostnames.
  Under that are username directories, and this is where the face images are
! placed. The face images are currently stored in one of four ways:
  
    1.   NeWS .ps format, called face.ps.
    2.   Sun icon format, called sun.icon.
    3.   Blit ikon format, called 48x48x1.
+   4.   X11 xbm format, called face.xbm
  
  The NeWS .ps allow for animation with the users' face. These files are
  drawn when the rest of the static faces have been displayed. They will be
***************
*** 87,96 ****
  sending me a copy of the Pike/Presotto paper "Face the Nation", which I used
  to get vismon compatibility, to Jonathan Bowen for suggesting the rusers
  monitoring addition, and to everybody else who suggested enhancements, and
! fixed bugs in the previous version. Special thanks to Neil Crellin and Mark
! Andrews for a fix to the (0,0) redraw bug with the NeWS version, to Dave
! Cohrs for several fixes and enhancements, the addition of X11 bitmap support,
! and generally sorting out most of the problems with the X11 version.
  
      Rich.
  
--- 88,98 ----
  sending me a copy of the Pike/Presotto paper "Face the Nation", which I used
  to get vismon compatibility, to Jonathan Bowen for suggesting the rusers
  monitoring addition, and to everybody else who suggested enhancements, and
! fixed bugs in the previous version. Special thanks to C.P. Lai for the Sun386i
! icon code plus numerous bug reports, to Neil Crellin and Mark Andrews for a
! fix to the (0,0) redraw bug with the NeWS version, and to Dave Cohrs for
! several fixes and enhancements, the addition of X11 bitmap support, and
! generally sorting out most of the problems with the X11 version.
  
      Rich.
  
*** original/extern.h	Sun Jan 29 12:48:19 1989
--- extern.h	Sun Feb  5 22:09:00 1989
***************
*** 1,5 ****
  
! /*  @(#)extern.h 1.5 89/01/29
   *
   *  Contains the external variable definitions used by faces.
   *
--- 1,5 ----
  
! /*  @(#)extern.h 1.6 89/02/05
   *
   *  Contains the external variable definitions used by faces.
   *
***************
*** 34,41 ****
  
  extern char bgicon[] ;     /* Alternate background pattern. */
  extern char community[] ;  /* Community name ("real" host name). */
  extern char display[] ;    /* X11 display information. */
! extern char facedir[] ;    /* Directory containing face images. */
  extern char geometry[] ;   /* X11 geometry information. */
  extern char hostname[] ;   /* Machine name to monitor. */
  extern char iconname[] ;   /* Name of the icon file for this person. */
--- 34,43 ----
  
  extern char bgicon[] ;     /* Alternate background pattern. */
  extern char community[] ;  /* Community name ("real" host name). */
+ extern char defdir[] ;     /* The default face directory. */
  extern char display[] ;    /* X11 display information. */
! extern char facedir[] ;    /* Alternate face image directory. */
! extern char fname[MAXTYPES][MAXLINE] ;  /* Array of various face name types. */
  extern char geometry[] ;   /* X11 geometry information. */
  extern char hostname[] ;   /* Machine name to monitor. */
  extern char iconname[] ;   /* Name of the icon file for this person. */
***************
*** 55,65 ****
--- 57,69 ----
  extern int facetype ;      /* Type of face file found. */
  extern int firsttime ;     /* Zeroised after first mail/printer check. */
  extern int flashes ;       /* Number of flashes for arrival of new mail. */
+ extern int found ;         /* Set if iconname found under username directory. */
  extern int height ;        /* Height in pixels of faces display. */
  extern int iconic ;        /* Start as an icon if set. */
  extern int invert ;        /* Set if to use reverse video. */
  extern int ix ;            /* Initial X position of the icon. */
  extern int iy ;            /* Initial Y position of the icon. */
+ extern int maxtypes ;      /* Max. no. of icon types for graphics target. */
  extern int mhflag ;        /* Set if this user uses MH to read mail. */
  extern int newmail ;       /* Set if there is new mail this time around. */
  extern int noicons ;       /* Number of faces this time around. */
*** original/faces.1	Sun Jan 29 12:48:19 1989
--- faces.1	Sun Feb  5 22:09:02 1989
***************
*** 1,4 ****
! .\" @(#)faces.1 1.5 89/01/29
  .TH FACES 1L "2 December 1988"
  .SH NAME
  faces \- visual mail, user and print face server.
--- 1,4 ----
! .\" @(#)faces.1 1.6 89/02/05
  .TH FACES 1L "2 December 1988"
  .SH NAME
  faces \- visual mail, user and print face server.
***************
*** 110,159 ****
  which by default is
  .I /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 three formats.
  If the file is named
  .I 48x48x1
! then it is a Blit ikon, and if it is called
  .I sun.icon
! then the image is stored in Sun icon format, and if the file is named
  .I face.ps
! then it contains executable NeWS code.
  .LP
! To access the face for a mail name
  .I machine!uid
  take the result of the first successful open from the following list of files:
  .LP
! 	/usr/local/faces/machine/uid/face.ps
  .br
! 	/usr/local/faces/machine/uid/sun.icon
  .br
! 	/usr/local/faces/machine/uid/48x48x1
  .br
! 	/usr/local/faces/machine/uid/face.xbm
  .br
! 	/usr/local/faces/misc./uid/face.ps
  .br
! 	/usr/local/faces/misc./uid/sun.icon
! .br
! 	/usr/local/faces/misc./uid/48x48x1
! .br
! 	/usr/local/faces/misc./uid/face.xbm
! .br
! 	/usr/local/faces/machine/unknown/face.ps
! .br
! 	/usr/local/faces/machine/unknown/sun.icon
! .br
! 	/usr/local/faces/machine/unknown/48x48x1
! .br
! 	/usr/local/faces/machine/unknown/face.xbm
! .br
! 	/usr/local/faces/misc./unknown/face.ps
! .br
! 	/usr/local/faces/misc./unknown/sun.icon
! .br
! 	/usr/local/faces/misc./unknown/48x48x1
! .br
! 	/usr/local/faces/misc./unknown/face.xbm
  .LP
  Domain names are now fully supported. For example, if mail arrives from
  .br
--- 110,147 ----
  which by default is
  .I /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.
  .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:
  .LP
! 	/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
! .LP
! The iconname above, consists of the following choices, in the given order:
! .LP
! 	SunView - sun.icon, 48x48x1, face.xbm
  .br
! 	NeWS - face.ps, sun.icon, 48x48x1, face.xbm
  .br
! 	X11 - face.xbm, sun.icon, 48x48x1
  .LP
  Domain names are now fully supported. For example, if mail arrives from
  .br
***************
*** 252,258 ****
  Used with the X11 variant of faces to give a display type.
  .TP
  .BI \-f " facedir"
! Use an alternate name for the faces directory. The default is
  .BR /usr/local/faces .
  .TP
  .BI \-g " geometry"
--- 240,248 ----
  Used with the X11 variant of faces to give a display type.
  .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"
*** original/get.c	Sun Jan 29 23:19:15 1989
--- get.c	Sun Feb  5 22:08:54 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)get.c 1.7 89/01/29" ;
  #endif
  	
  /*  Extraction routines used by faces.
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)get.c 1.8 89/02/05" ;
  #endif
  	
  /*  Extraction routines used by faces.
***************
*** 202,209 ****
                         break ;
              case 'f' : INC ;                 /* New directory for face icons. */
                         getparam(facedir, argv, "-f needs face directory") ;
-                        SPRINTF(machfile, "%s/machine.tab", facedir) ;
-                        SPRINTF(peopfile, "%s/people.tab", facedir) ;
                         break ;
              case 'g' : INC ;                 /* X11 geometry information. */
                         getparam(geometry, argv, "-g needs geometry information") ;
--- 202,207 ----
*** original/main.c	Sun Jan 29 12:48:19 1989
--- main.c	Sun Feb  5 22:08:55 1989
***************
*** 1,5 ****
  #ifndef lint
! static char sccsid[] = "@(#)main.c 1.6 89/01/29" ;
  #endif
  
  /*  Icon face server for monitoring mail and print jobs.
--- 1,5 ----
  #ifndef lint
! static char sccsid[] = "@(#)main.c 1.7 89/02/05" ;
  #endif
  
  /*  Icon face server for monitoring mail and print jobs.
***************
*** 39,46 ****
  
  char bgicon[MAXLINE] ;           /* Alternate background pattern. */
  char community[MAXLINE] ;        /* Community name ("real" host name). */
  char display[MAXLINE] ;          /* X11 display information. */
! char facedir[MAXLINE] ;          /* Directory containing face images. */
  char fname[MAXTYPES][MAXLINE] ;  /* Array of various face name types. */
  char geometry[MAXLINE] ;    /* X11 geometry information. */
  char hostname[MAXLINE] ;    /* Machine name to monitor. */
--- 39,47 ----
  
  char bgicon[MAXLINE] ;           /* Alternate background pattern. */
  char community[MAXLINE] ;        /* Community name ("real" host name). */
+ char defdir[MAXLINE] ;           /* The default face directory. */
  char display[MAXLINE] ;          /* X11 display information. */
! char facedir[MAXLINE] ;          /* Alternate face image directory. */
  char fname[MAXTYPES][MAXLINE] ;  /* Array of various face name types. */
  char geometry[MAXLINE] ;    /* X11 geometry information. */
  char hostname[MAXLINE] ;    /* Machine name to monitor. */
***************
*** 61,71 ****
--- 62,74 ----
  int facetype ;      /* Type of face file found. */
  int firsttime ;     /* Zeroised after first mail/printer check. */
  int flashes ;       /* Number of flashes for arrival of new mail. */
+ int found ;         /* Set if iconname found under username directory. */
  int height ;        /* Height in pixels of faces display. */
  int iconic ;        /* Start as an icon if set. */
  int invert ;        /* Set if to use reverse video. */
  int ix ;            /* Initial X position of the icon. */
  int iy ;            /* Initial Y position of the icon. */
+ int maxtypes ;      /* Maximum number of icon types for graphics target. */
  int mhflag ;        /* Set if this user uses MH to read mail. */
  int newmail ;       /* Set if there is new mail this time around. */
  int noicons ;       /* Number of faces this time around. */
***************
*** 171,180 ****
    mhflag = 0 ;                /* Assume no MH mail by default. */
    posspec = 0 ;               /* Assume no -Wp or -g by default. */
    wx = wy = ix = iy = 0 ;
!   STRCPY(fname[BLITTYPE], "48x48x1") ;
!   STRCPY(fname[SUNTYPE], "sun.icon") ;
!   STRCPY(fname[NEWSTYPE], "face.ps") ;
!   STRCPY(fname[X11TYPE], "face.xbm") ;
    STRCPY(display, "") ;       /* X11 display type. */
    STRCPY(geometry, "") ;      /* X11 geometry information. */
  
--- 174,180 ----
    mhflag = 0 ;                /* Assume no MH mail by default. */
    posspec = 0 ;               /* Assume no -Wp or -g by default. */
    wx = wy = ix = iy = 0 ;
!   STRCPY(facedir, "") ;       /* No alternate face directory by default. */
    STRCPY(display, "") ;       /* X11 display type. */
    STRCPY(geometry, "") ;      /* X11 geometry information. */
  
***************
*** 191,203 ****
  #endif BACKGROUND
  
  #ifdef FACEDIR
!   STRCPY(facedir,FACEDIR) ;  /* Different directory for face icons. */
  #else
!   STRCPY(facedir,"/usr/local/faces") ;  /* Directory for face icons. */
  #endif FACEDIR
  
!   SPRINTF(machfile, "%s/machine.tab", facedir) ;
!   SPRINTF(peopfile, "%s/people.tab", facedir) ;
  
  #ifdef INVERT
    invert = INVERT ;          /* Set indicates reverse video. */
--- 191,203 ----
  #endif BACKGROUND
  
  #ifdef FACEDIR
!   STRCPY(defdir, FACEDIR) ;  /* Different directory for face icons. */
  #else
!   STRCPY(defdir,"/usr/local/faces") ;  /* Directory for face icons. */
  #endif FACEDIR
  
!   SPRINTF(machfile, "%s/machine.tab", defdir) ;
!   SPRINTF(peopfile, "%s/people.tab", defdir) ;
  
  #ifdef INVERT
    invert = INVERT ;          /* Set indicates reverse video. */
***************
*** 264,280 ****
  }
  
  
! make_iconname(community, user)    /* Construct the icon name. */
! char *community, *user ;
  {
  
  /*  Sets up community and user based on the first successful
   *  open from the following list of files:
   *
!  *  $(FACEDIR)/community/user/[face.ps, sun.icon, 48x48x1]
!  *  $(FACEDIR)/misc./user/[face.ps, sun.icon, 48x48x1]
!  *  $(FACEDIR)/community/unknown/[face.ps, sun.icon, 48x48x1]
!  *  $(FACEDIR)/misc./unknown/[face.ps, sun.icon, 48x48x1]
   *
   *  If none of these are found, the "blank face" is returned.
   */
--- 264,280 ----
  }
  
  
! make_iconname(facedir, community, user)    /* Construct the icon name. */
! char *facedir, *community, *user ;
  {
  
  /*  Sets up community and user based on the first successful
   *  open from the following list of files:
   *
!  *  $(FACEDIR)/community/user/[face.ps, sun.icon, 48x48x1, face.xbm]
!  *  $(FACEDIR)/misc./user/[face.ps, sun.icon, 48x48x1, face.xbm]
!  *  $(FACEDIR)/community/unknown/[face.ps, sun.icon, 48x48x1, face.xbm]
!  *  $(FACEDIR)/misc./unknown/[face.ps, sun.icon, 48x48x1, face.xbm]
   *
   *  If none of these are found, the "blank face" is returned.
   */
***************
*** 282,314 ****
    char *cptr ;
    int i ;
  
!   for (i = 0; i < MAXTYPES; i++)
      for (cptr = community; cptr != NULL; cptr = index(cptr, '.'))
        {
          if (*cptr == '.') cptr++ ;
          SPRINTF(iconname, "%s/%s/%s/%s", facedir, cptr, user, fname[i]) ;
!         if (stat(iconname, &buf) != -1)
!           {
!             if (EQUAL(fname[i],"face.ps") && gtype != NEWS) continue ;
!             else return ;
!           }
        }
   
!   for (i = 0; i < MAXTYPES; i++)
      {
        SPRINTF(iconname, "%s/misc./%s/%s", facedir, user, fname[i]) ;
        if (stat(iconname, &buf) != -1)
          {
!           if (EQUAL(fname[i], "face.ps") && gtype != NEWS) continue ;
!           else
!             {
!               STRCPY(community, "misc.") ;
!               return ;
!             }
          }
      }
   
!   for (i = 0; i < MAXTYPES; i++)
      for (cptr = community; cptr != NULL; cptr = index(cptr, '.'))
        {
          if (*cptr == '.') cptr++ ;
--- 282,306 ----
    char *cptr ;
    int i ;
  
!   for (i = 0; i < maxtypes; i++)
      for (cptr = community; cptr != NULL; cptr = index(cptr, '.'))
        {
          if (*cptr == '.') cptr++ ;
          SPRINTF(iconname, "%s/%s/%s/%s", facedir, cptr, user, fname[i]) ;
!         if (stat(iconname, &buf) != -1) return 1 ;
        }
   
!   for (i = 0; i < maxtypes; i++)
      {
        SPRINTF(iconname, "%s/misc./%s/%s", facedir, user, fname[i]) ;
        if (stat(iconname, &buf) != -1)
          {
!           STRCPY(community, "misc.") ;
!           return 1 ;
          }
      }
   
!   for (i = 0; i < maxtypes; i++)
      for (cptr = community; cptr != NULL; cptr = index(cptr, '.'))
        {
          if (*cptr == '.') cptr++ ;
***************
*** 315,341 ****
          SPRINTF(iconname, "%s/%s/unknown/%s", facedir, cptr, fname[i]) ;
          if (stat(iconname, &buf) != -1)
            {
!             if (EQUAL(fname[i], "face.ps") && gtype != NEWS) continue ;
!             else
!               {
!                 if (mtype == MONALL) STRCPY(user, "unknown") ;
!                 return ;
!               }
            }
        }
  
!   for (i = 0; i < MAXTYPES; i++)
      {
        SPRINTF(iconname, "%s/misc./unknown/%s", facedir, fname[i]) ;
        if (stat(iconname, &buf) != -1)
          {
!           if (EQUAL(fname[i], "face.ps") && gtype != NEWS) continue ;
!           else
!             {
!               STRCPY(community, "misc.") ;
!               if (mtype == MONALL) STRCPY(user, "unknown") ;
!               return ;
!             }
          }
      }
  
--- 307,325 ----
          SPRINTF(iconname, "%s/%s/unknown/%s", facedir, cptr, fname[i]) ;
          if (stat(iconname, &buf) != -1)
            {
!             if (mtype == MONALL) STRCPY(user, "unknown") ;
!             return 1 ;
            }
        }
  
!   for (i = 0; i < maxtypes; i++)
      {
        SPRINTF(iconname, "%s/misc./unknown/%s", facedir, fname[i]) ;
        if (stat(iconname, &buf) != -1)
          {
!           STRCPY(community, "misc.") ;
!           if (mtype == MONALL) STRCPY(user, "unknown") ;
!           return 1 ;
          }
      }
  
***************
*** 342,347 ****
--- 326,332 ----
  /* The "blank face" should be used, so community and user are nulled. */
  
    community[0] = user[0] = '\0' ;
+   return 0 ;
  }
  
  
*** original/mon.c	Sun Jan 29 12:48:19 1989
--- mon.c	Sun Feb  5 22:08:56 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)mon.c 1.6 89/01/29" ;
  #endif
  
  /*  Monitoring routines used by the faces program.
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)mon.c 1.7 89/02/05" ;
  #endif
  
  /*  Monitoring routines used by the faces program.
***************
*** 122,128 ****
  
          h_to_c(host, community) ;    /* Turn hostname into community name. */
          a_to_u(community, user, realname) ;
!         make_iconname(community, realname) ;
          if (mtype == MONNEW)
            {
              add_face(BOTH, ORDINARY, iconname) ;
--- 122,132 ----
  
          h_to_c(host, community) ;    /* Turn hostname into community name. */
          a_to_u(community, user, realname) ;
!         if (strlen(facedir))
!           found = make_iconname(facedir, community, realname) ;
!         else found = make_iconname(defdir, community, realname) ;
!         if (!found && strlen(facedir))
!           found = make_iconname(defdir, community, realname) ;
          if (mtype == MONNEW)
            {
              add_face(BOTH, ORDINARY, iconname) ;
***************
*** 183,189 ****
            SSCANF(&nextline[7], "%s", owner) ;
            SSCANF(&nextline[60], "%d", &size) ;
            h_to_c("", community) ;
!           make_iconname(community, owner) ;
            add_record("",owner,"",size) ;
          }
        make_pixrect(noicons) ;
--- 187,197 ----
            SSCANF(&nextline[7], "%s", owner) ;
            SSCANF(&nextline[60], "%d", &size) ;
            h_to_c("", community) ;
!           if (strlen(facedir))
!             found = make_iconname(facedir, community, owner) ;
!           else found = make_iconname(defdir, community, owner) ;
!           if (!found && strlen(facedir))
!             found = make_iconname(defdir, community, owner) ;
            add_record("",owner,"",size) ;
          }
        make_pixrect(noicons) ;
***************
*** 234,240 ****
        SSCANF(&nextline[0], "%s", username) ;
        SSCANF(&nextline[38], "%s", ts) ;
        h_to_c("", community) ;
!       make_iconname(community, username) ;
        add_record("", username, ts, 0) ;
      }
    if (!noicons)
--- 242,252 ----
        SSCANF(&nextline[0], "%s", username) ;
        SSCANF(&nextline[38], "%s", ts) ;
        h_to_c("", community) ;
!       if (strlen(facedir))
!         found = make_iconname(facedir, community, username) ;
!       else found = make_iconname(defdir, community, username) ;
!       if (!found && strlen(facedir))
!         found = make_iconname(defdir, community, username) ;
        add_record("", username, ts, 0) ;
      }
    if (!noicons)
*** original/news.c	Sun Jan 29 12:48:19 1989
--- news.c	Sun Feb  5 22:08:57 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)news.c 1.6 89/01/29" ;
  #endif
  
  /*  NeWS dependent graphics routines used by faces,
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)news.c 1.7 89/02/05" ;
  #endif
  
  /*  NeWS dependent graphics routines used by faces,
***************
*** 245,250 ****
--- 245,255 ----
      }
    if (invert) FPRINTF(PostScript, "/Invert false def\n") ;
    else FPRINTF(PostScript, "/Invert true def\n") ;
+   STRCPY(fname[0], "face.ps") ;
+   STRCPY(fname[1], "sun.icon") ;
+   STRCPY(fname[2], "48x48x1") ;
+   STRCPY(fname[3], "face.xbm") ;
+   maxtypes = 4 ;
    gtype = NEWS ;
    return(0) ;
  }
*** original/patchlevel.h	Sun Jan 29 23:19:15 1989
--- patchlevel.h	Sun Feb  5 22:09:00 1989
***************
*** 1,5 ****
   
! /*  @(#)patchlevel.h 1.7 89/01/29
   *
   *  This is the current patch level for this version of faces.
   *
--- 1,5 ----
   
! /*  @(#)patchlevel.h 1.8 89/02/05
   *
   *  This is the current patch level for this version of faces.
   *
***************
*** 14,17 ****
   *  reported to me then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  6
--- 14,17 ----
   *  reported to me then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  7
*** original/rec.c	Wed Jan  4 19:46:59 1989
--- rec.c	Sun Feb  5 22:08:58 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)rec.c 1.5 89/01/04" ;
  #endif
  
  /*  Record handling routines used by the faces program.
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)rec.c 1.6 89/02/05" ;
  #endif
  
  /*  Record handling routines used by the faces program.
***************
*** 167,176 ****
    char *ptr1, *ptr2 ;
    FILE *fd ;
  
    if ((fd = fopen(peopfile, "r")) == NULL)   /* Open people file. */
      {
!       FPRINTF(stderr,"%s: cannot open %s\n", progname, peopfile) ;
!       return ;
      }
    while (fgets(nextline, MAXLINE, fd) != NULL)
      {
--- 167,185 ----
    char *ptr1, *ptr2 ;
    FILE *fd ;
  
+   if (strlen(facedir)) SPRINTF(peopfile, "%s/machine.tab", facedir) ;
    if ((fd = fopen(peopfile, "r")) == NULL)   /* Open people file. */
      {
!       if (strlen(facedir))
!         {
!           SPRINTF(peopfile, "%s/machine.tab", defdir) ;
!           fd = fopen(peopfile, "r") ;
!         }
!       if (fd == NULL)
!         {
!           FPRINTF(stderr,"%s: cannot open %s\n", progname, peopfile) ;
!           return ;
!         }
      }
    while (fgets(nextline, MAXLINE, fd) != NULL)
      {
***************
*** 198,207 ****
    char *ptr ;
    FILE *fd ;
  
    if ((fd = fopen(machfile, "r")) == NULL)   /* Open machine file. */
      {
!       FPRINTF(stderr,"%s: cannot open %s\n", progname, machfile) ;
!       return ;
      }
    while (fgets(nextline, MAXLINE, fd) != NULL)
      {
--- 207,225 ----
    char *ptr ;
    FILE *fd ;
  
+   if (strlen(facedir)) SPRINTF(machfile, "%s/machine.tab", facedir) ;
    if ((fd = fopen(machfile, "r")) == NULL)   /* Open machine file. */
      {
!       if (strlen(facedir))
!         {
!           SPRINTF(machfile, "%s/machine.tab", defdir) ;
!           fd = fopen(machfile, "r") ;
!         }
!       if (fd == NULL)
!         {
!           FPRINTF(stderr,"%s: cannot open %s\n", progname, machfile) ;
!           return ;
!         }
      }
    while (fgets(nextline, MAXLINE, fd) != NULL)
      {
*** original/sunview.c	Sun Jan 29 12:48:19 1989
--- sunview.c	Sun Feb  5 22:08:58 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)sunview.c 1.4 89/01/29" ;
  #endif
  
  /*  SunView dependent graphics routines used by faces,
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)sunview.c 1.5 89/02/05" ;
  #endif
  
  /*  SunView dependent graphics routines used by faces,
***************
*** 224,229 ****
--- 224,233 ----
        FPRINTF(stderr,"%s: Not a native SunView window\n", progname) ;
        return -1 ;
      }
+   STRCPY(fname[0], "sun.icon") ;
+   STRCPY(fname[1], "48x48x1") ;
+   STRCPY(fname[2], "face.xbm") ;
+   maxtypes = 3 ;
    gtype = SVIEW ;
    return 0 ;
  }
*** original/x11.c	Sun Jan 29 23:19:15 1989
--- x11.c	Sun Feb  5 22:09:04 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)x11.c 1.4 89/01/29" ;
  #endif
  
  /*  X11 dependent graphics routines used by faces,
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)x11.c 1.5 89/02/05" ;
  #endif
  
  /*  X11 dependent graphics routines used by faces,
***************
*** 205,210 ****
--- 205,214 ----
  init_ws_type()
  {
    gtype = X11 ;
+   STRCPY(fname[0], "face.xbm") ;
+   STRCPY(fname[1], "sun.icon") ;
+   STRCPY(fname[2], "48x48x1") ;
+   maxtypes = 3 ;
    return(0) ;
  }