Official patch #3 for faces v1.3, please apply it.

Rich Burridge richb at sunchat.oz
Wed Jan 4 18:56:27 AEST 1989


It fixes the following problems:

1/ The do_printer routine has been changed to use popen/pclose to
   monitor printer jobs instead of a temporary file.

2/ Various string comparison routines were incorrectly matching strings.

3/ Faces acknowledgements have been added to the README file, with the
   correction of who was the original suggester of the animate NeWS files.


It adds the following enhancement:

1/ There is now a new option to faces. Faces -h hostname will use the
   rusers command to display who is logged into a particular machine.
   Thanks to Jonathan Bowen for suggesting this idea. See the man page
   for more details. Various files have been updated for this.

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

    Rich.

------CUT HERE------CUT HERE------
*** original/Makefile	Sun Dec 11 15:05:47 1988
--- Makefile	Wed Jan  4 19:43:14 1989
***************
*** 1,7 ****
  #
  #  Makefile for faces, an icon face server, plus associated software.
  #
! #  @(#)Makefile 1.1 88/12/04
  #
  #  Copyright (c) Rich Burridge.
  #                Sun Microsystems, Australia - All rights reserved.
--- 1,7 ----
  #
  #  Makefile for faces, an icon face server, plus associated software.
  #
! #  @(#)Makefile 1.2 89/01/04
  #
  #  Copyright (c) Rich Burridge.
  #                Sun Microsystems, Australia - All rights reserved.
***************
*** 79,85 ****
  
  CFLAGS          = -g $(NEWSFILE) $(OSTYPE) $(VARIABLES)
  HDRS            = extern.h faces.h patchlevel.h
! IMAGES          = noface.icon nomail.icon noprint.icon nopaper.icon
  
  PSLIBS          = $$NEWSHOME/lib/libcps.a
  PSOBJS          = get.o main.o mon.o news.o rec.o
--- 79,86 ----
  
  CFLAGS          = -g $(NEWSFILE) $(OSTYPE) $(VARIABLES)
  HDRS            = extern.h faces.h patchlevel.h
! IMAGES          = noface.icon nomail.icon noprint.icon \
! 		  nopaper.icon nousers.icon
  
  PSLIBS          = $$NEWSHOME/lib/libcps.a
  PSOBJS          = get.o main.o mon.o news.o rec.o
*** original/README	Sun Dec 11 15:05:47 1988
--- README	Wed Jan  4 19:43:13 1989
***************
*** 1,5 ****
  
! README for faces, the visual mail and print monitor.
  
  Version 1.3 December 1988.
  
--- 1,5 ----
  
! README for faces, the visual mail user and print monitor.
  
  Version 1.3 December 1988.
  
***************
*** 12,18 ****
  It contains graphical interfaces for SunView and NeWS. The X11 and
  blit versions are being worked on. Expect them in the near future.
  
! Faces has three different modes of operation:
  
  The default will monitor for new mail. Only the last ten messages are
  displayed. In its iconic form, it is also possible to display the timestamp
--- 12,18 ----
  It contains graphical interfaces for SunView and NeWS. The X11 and
  blit versions are being worked on. Expect them in the near future.
  
! Faces has four different modes of operation:
  
  The default will monitor for new mail. Only the last ten messages are
  displayed. In its iconic form, it is also possible to display the timestamp
***************
*** 24,35 ****
  timestamp of the last message plus the number of mail messages from this
  person are optional display parameters.
  
! The final option 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 a text message will display the number of messages to be printed.
  Opening the window will show all the jobs in the queue with the owners' name
  and the size of the job in bytes.
  
  Faces is based on the AT&T v8 face server called vismon, but is not derived
  from vismon sources. With this version comes vismon compatibility. Note
  that this has resulted in a few changes from the way faces v1.1 worked.
--- 24,39 ----
  timestamp of the last message plus the number of mail messages from this
  person are optional display parameters.
  
! The third option 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 a text message will display the number of messages to be printed.
  Opening the window will show all the jobs in the queue with the owners' name
  and the size of the job in bytes.
  
+ Finally you can monitor who is logged in a machine. For each user, a face image
+ is displayed. The iconic form displays login time, and the window format gives
+ the username.
+ 
  Faces is based on the AT&T v8 face server called vismon, but is not derived
  from vismon sources. With this version comes vismon compatibility. Note
  that this has resulted in a few changes from the way faces v1.1 worked.
***************
*** 54,59 ****
--- 58,76 ----
  chain of records for which it has face icons.
  
  I welcome bug reports and suggestions for improvements.
+ 
+ 
+ Acknowledgements.
+  
+ Thanks go to Guy Harris for the basis of the latest manual page, Dave
+ Lemke for many excellent suggestions, to Heather Rose for suggesting the
+ animated NeWS faces, to Andrew Nicholson for help with some of the trickier
+ NeWS code, to Dan Heller for writing the 'watch' program which was consulted
+ in the early days, to Rob Pike for 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.
  
      Rich.
  
*** original/extern.h	Sun Dec 11 15:05:47 1988
--- extern.h	Wed Jan  4 19:43:12 1989
***************
*** 1,5 ****
  
! /*  @(#)extern.h 1.2 88/12/11
   *
   *  Contains the external variable definitions used by faces.
   *
--- 1,5 ----
  
! /*  @(#)extern.h 1.3 89/01/04
   *
   *  Contains the external variable definitions used by faces.
   *
***************
*** 35,40 ****
--- 35,41 ----
  extern char bgicon[] ;     /* Alternate background pattern. */
  extern char community[] ;  /* Community name ("real" host name). */
  extern char facedir[] ;    /* Directory containing face images. */
+ extern char hostname[] ;   /* Machine name to monitor. */
  extern char iconname[] ;   /* Name of the icon file for this person. */
  extern char machfile[] ;   /* Name of the machine/community file. */
  extern char nextline[] ;   /* Next line from users mail spool file. */
*** original/faces.1	Sun Dec 11 15:05:47 1988
--- faces.1	Wed Jan  4 19:43:14 1989
***************
*** 1,7 ****
! .\" @(#)faces.1 1.2 88/12/11
  .TH FACES 1L "2 December 1988"
  .SH NAME
! faces \- visual mail and print face server for the Sun workstation
  .SH SYNOPSIS
  .B "faces
  [
--- 1,7 ----
! .\" @(#)faces.1 1.3 89/01/04
  .TH FACES 1L "2 December 1988"
  .SH NAME
! faces \- visual mail, user and print face server for the Sun workstation
  .SH SYNOPSIS
  .B "faces
  [
***************
*** 20,25 ****
--- 20,29 ----
  .I facedir
  ]
  [
+ .B \-h
+ .I hostname
+ ]
+ [
  .B \-i
  ]
  [
***************
*** 55,62 ****
  ]
  .SH DESCRIPTION
  .B faces
! is a window based tool for monitoring mail or print queues. It contains
! graphical interfaces for SunView and NeWS. It has three different modes
  of operation:
  .LP
  The default will monitor for new mail. Only the last ten messages are
--- 59,66 ----
  ]
  .SH DESCRIPTION
  .B faces
! is a window based tool for monitoring mail, users or print queues. It contains
! graphical interfaces for SunView and NeWS. It has four different modes
  of operation:
  .LP
  The default will monitor for new mail. Only the last ten messages are
***************
*** 69,83 ****
  timestamp of the last message plus the number of mail messages from this
  person are optional display parameters.
  .LP
! The final option 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 a text message will display the number of messages to be printed.
  Opening the window will show all the jobs in the queue with the owners' name
  and the size of the job in bytes.
  .LP
! There are special displays for no mail, no faces found, no print jobs, and
! no paper in the printer.
  .LP
  .B faces
  is based on the AT&T v8 program
  .B vismon.
--- 73,91 ----
  timestamp of the last message plus the number of mail messages from this
  person are optional display parameters.
  .LP
! The third option 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 a text message will display the number of messages to be printed.
  Opening the window will show all the jobs in the queue with the owners' name
  and the size of the job in bytes.
  .LP
! Finally you can monitor who is logged in a machine. For each user, a face image
! is displayed. The iconic form displays login time, and the window format gives
! the username.
  .LP
+ There are special displays for no mail, no faces found, no print jobs,
+ no paper in the printer, and no users logged into a machine.
+ .LP
  .B faces
  is based on the AT&T v8 program
  .B vismon.
***************
*** 209,214 ****
--- 217,226 ----
  .BI \-f " facedir"
  Use an alternate name for the faces directory. The default is
  .BR /usr/local/faces .
+ .TP
+ .BI \-h " hostname"
+ Name of the machine to monitor. Faces will be displayed for each user
+ logged in.
  .TP
  .B \-i
  Invert the faces images before displaying them. For use by people who
*** original/faces.h	Wed Dec 28 15:43:15 1988
--- faces.h	Wed Jan  4 19:43:12 1989
***************
*** 1,5 ****
  
! /*  @(#)faces.h 1.4 88/12/28
   *
   *  Contains all the global definitions used by faces.
   *
--- 1,5 ----
  
! /*  @(#)faces.h 1.5 89/01/04
   *
   *  Contains all the global definitions used by faces.
   *
***************
*** 31,36 ****
--- 31,37 ----
  #define  GETHOSTNAME   (void) gethostname
  #define  GET_SUN_ICON  (void) get_sun_icon
  #define  IOCTL         (void) ioctl
+ #define  PCLOSE        (void) pclose
  #define  PUTC          (void) putc
  #define  SELECT        (void) select
  #define  SSCANF        (void) sscanf
***************
*** 48,60 ****
  enum field_type { HOSTNAME, TIMESTAMP, USERNAME } ;
  
  /* Different types of possible face images. */
! enum icon_type { NOMAIL, NOPAPER, NOPRINT, ORDINARY } ;
  
  /* Text justification within face display. */
  enum just_type { LEFT, RIGHT } ;
  
  /* Different types of file monitoring performed by this program. */
! enum mon_type { MONALL, MONNEW, MONPRINTER } ;
  
  /* Different graphics systems appropriate one set in gtype. */
  enum gr_type { SVIEW, NEWS } ;
--- 49,61 ----
  enum field_type { HOSTNAME, TIMESTAMP, USERNAME } ;
  
  /* Different types of possible face images. */
! enum icon_type { NOMAIL, NOPAPER, NOPRINT, NOUSERS, ORDINARY } ;
  
  /* Text justification within face display. */
  enum just_type { LEFT, RIGHT } ;
  
  /* Different types of file monitoring performed by this program. */
! enum mon_type { MONALL, MONNEW, MONPRINTER, MONUSERS } ;
  
  /* Different graphics systems appropriate one set in gtype. */
  enum gr_type { SVIEW, NEWS } ;
*** original/get.c	Wed Jan  4 14:45:02 1989
--- get.c	Wed Jan  4 19:43:08 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)get.c 1.3 89/01/04" ;
  #endif
  	
  /*  Extraction routines used by faces.
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)get.c 1.4 89/01/04" ;
  #endif
  	
  /*  Extraction routines used by faces.
***************
*** 167,172 ****
--- 167,176 ----
                         getparam(facedir, argv, "-f needs face directory") ;
                         SPRINTF(machfile, "%s/machine.tab", facedir) ;
                         SPRINTF(peopfile, "%s/people.tab", facedir) ;
+                        break ;
+             case 'h' : mtype = MONUSERS ;    /* Monitor users on a machine. */
+                        INC ;
+                        getparam(hostname, argv, "-h needs hostname") ;
                         break ;
              case 'i' : invert = 1 ;          /* Reverse video. */
                         break ;
*** original/main.c	Wed Dec 28 15:43:15 1988
--- main.c	Wed Jan  4 19:43:08 1989
***************
*** 1,5 ****
  #ifndef lint
! static char sccsid[] = "@(#)main.c 1.3 88/12/28" ;
  #endif
  
  /*  Icon face server for monitoring mail and print jobs.
--- 1,5 ----
  #ifndef lint
! static char sccsid[] = "@(#)main.c 1.4 89/01/04" ;
  #endif
  
  /*  Icon face server for monitoring mail and print jobs.
***************
*** 41,46 ****
--- 41,47 ----
  char community[MAXLINE] ;        /* Community name ("real" host name). */
  char facedir[MAXLINE] ;          /* Directory containing face images. */
  char fname[MAXTYPES][MAXLINE] ;  /* Array of various face name types. */
+ char hostname[MAXLINE] ;    /* Machine name to monitor. */
  char iconname[MAXLINE] ;    /* Name of the icon file for this person. */
  char machfile[MAXLINE] ;    /* Name of the machine/community file. */
  char nextline[MAXLINE] ;    /* Next line from users mail spool file. */
***************
*** 103,113 ****
    STRCPY(realname, user) ;      /* In case alias not found. */
    ctemp = communities ;         /* Point to chain of communities. */
    while (ctemp != NULL)
!     if (EQUAL(ctemp->community, community))
        {
          ptemp = ctemp->people ;
          while (ptemp != NULL)
!           if (EQUAL(ptemp->alias, user))
              {
                STRCPY(realname, ptemp->username) ;
                return ;
--- 104,114 ----
    STRCPY(realname, user) ;      /* In case alias not found. */
    ctemp = communities ;         /* Point to chain of communities. */
    while (ctemp != NULL)
!     if (!strcmp(ctemp->community, community))
        {
          ptemp = ctemp->people ;
          while (ptemp != NULL)
!           if (!strcmp(ptemp->alias, user))
              {
                STRCPY(realname, ptemp->username) ;
                return ;
***************
*** 199,205 ****
    else STRCPY(community, host) ;   /* Copied in case machine name not found. */
    while (temp != NULL)
      {
!       if (EQUAL(temp->machine, community))
          {
            STRCPY(community, temp->community) ;
            return ;
--- 200,206 ----
    else STRCPY(community, host) ;   /* Copied in case machine name not found. */
    while (temp != NULL)
      {
!       if (!strcmp(temp->machine, community))
          {
            STRCPY(community, temp->community) ;
            return ;
*** original/mon.c	Sun Dec 11 15:06:15 1988
--- mon.c	Wed Jan  4 19:43:09 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)mon.c 1.4 88/12/11" ;
  #endif
  
  /*  Monitoring routines used by the faces program.
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)mon.c 1.5 89/01/04" ;
  #endif
  
  /*  Monitoring routines used by the faces program.
***************
*** 56,61 ****
--- 56,62 ----
                          break ;
        case MONPRINTER : do_printer() ;     /* Monitor the print queue. */
                          break ;
+       case MONUSERS   : do_users() ;       /* Monitor users on a machine. */
      }
    firsttime = 0 ;
  }
***************
*** 146,169 ****
    FILE *fp ;                 /* File descriptor for users mail spool file. */
    char command[MAXLINE] ;    /* Lpq system call for this printer. */
    char owner[MAXLINE] ;      /* Owner of job in the print queue. */
-   char tempname[MAXLINE] ;   /* Temporary unique filename. */
    int size ;                 /* Size of this print job in bytes. */
  
    noicons = 0 ;
!   SPRINTF(tempname,"/tmp/faces%04d",getpid()) ;
!   SPRINTF(command,"lpq -P %s > %s",printer,tempname) ;
!   if (system(command))
      {
!       FPRINTF(stderr,"%s: system call for printer %s stats failed.\n",
!               progname,printer) ;
        return ;
      }
-   if ((fp = fopen(tempname,"r")) == NULL)     /* Open spoolfile. */
-     {
-       FPRINTF(stderr,"%s: couldn't open printer stats in %s.\n",
-               progname,tempname) ;
-       return ;
-     }
    column = row = 0 ;          /* Start in top left corner of pixrect. */
    FGETS(nextline,MAXLINE,fp) ;
    if (EQUAL(nextline,"no entries"))
--- 147,161 ----
    FILE *fp ;                 /* File descriptor for users mail spool file. */
    char command[MAXLINE] ;    /* Lpq system call for this printer. */
    char owner[MAXLINE] ;      /* Owner of job in the print queue. */
    int size ;                 /* Size of this print job in bytes. */
  
    noicons = 0 ;
!   SPRINTF(command,"lpq -P %s", printer) ;
!   if ((fp = popen(command, "r")) == NULL)     /* Open spoolfile. */
      {
!       FPRINTF(stderr,"%s: couldn't get printer stats.\n", progname) ;
        return ;
      }
    column = row = 0 ;          /* Start in top left corner of pixrect. */
    FGETS(nextline,MAXLINE,fp) ;
    if (EQUAL(nextline,"no entries"))
***************
*** 210,217 ****
          }
        recs = last = NULL ;
      }
!   FCLOSE(fp) ;
!   UNLINK(tempname) ;
    show_display() ;
  }
  
--- 202,260 ----
          }
        recs = last = NULL ;
      }
!   PCLOSE(fp) ;
!   show_display() ;
! }
! 
! 
! do_users()                   /* Monitor users on a machine. */
! {
!   struct recinfo *this, *next ;
!   FILE *fp ;                 /* File descriptor for users mail spool file. */
!   char command[MAXLINE] ;    /* Rusers system call for this machine. */
!   char ts[MAXLINE] ;         /* Pointer to login time from rusers line. */
!   char username[MAXLINE] ;   /* Name of user logged in. */
!  
!   noicons = 0 ;
!   SPRINTF(command,"rusers -l %s", hostname) ;
!   if ((fp = popen(command, "r")) == NULL)    /* Connect to rusers command. */
!     {
!       FPRINTF(stderr,"%s: couldn't get user stats.\n", progname) ;
!       return ;
!     }
!   column = row = 0 ;          /* Start in top left corner of pixrect. */
!   while (fgets(nextline, MAXLINE, fp) != NULL)
!     {
!       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)
!     {
!       make_pixrect(1) ;               /* Just the "no users" icon. */
!       add_face(BOTH, NOUSERS, "") ;   /* Set to "no users" icon. */
!     }
!   else
!     {
!       make_pixrect(noicons) ;
!       this = recs ;
!       while (this != NULL)
!         {
!           next = this->next ;
!           add_face(BOTH, ORDINARY, this->iconname) ;
!           if (!dontshowtime)
!             text(ICON, LEFT, this->ts) ;            /* Timestamp. */
!           if (!dontshowuser)
!             text(WINDOW, LEFT, this->username) ;    /* Username. */
!           adjust() ;    /* Adjust column and row. */
!           remove_record(this) ;
!           this = next ;
!         }
!       recs = last = NULL ;
!     }
!   PCLOSE(fp) ;
    show_display() ;
  }
  
*** original/news.c	Sun Dec 11 15:06:15 1988
--- news.c	Wed Jan  4 19:43:10 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)news.c 1.3 88/12/11" ;
  #endif
  
  /*  NeWS dependent graphics routines used by faces,
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)news.c 1.4 89/01/04" ;
  #endif
  
  /*  NeWS dependent graphics routines used by faces,
***************
*** 53,58 ****
--- 53,60 ----
                        break ;
        case NOPRINT  : STRCPY(face, "NoprintIcon") ;
                        break ;
+       case NOUSERS  : STRCPY(face, "NousersIcon") ;
+                       break ;
        case ORDINARY : if ((facetype = get_icon(name, ibuf)) != -1) 
                          switch (facetype)
                            {
***************
*** 95,101 ****
                              return ;
                            }
        case MONALL     :
!       case MONPRINTER : FPRINTF(PostScript,"%s %d %d %d %d %s MoveImage\n",
                                  face, ICONWIDTH, ICONHEIGHT,
                                  column*ICONWIDTH, row*ICONHEIGHT, dest) ;
      }
--- 97,104 ----
                              return ;
                            }
        case MONALL     :
!       case MONPRINTER :
!       case MONUSERS   : FPRINTF(PostScript,"%s %d %d %d %d %s MoveImage\n",
                                  face, ICONWIDTH, ICONHEIGHT,
                                  column*ICONWIDTH, row*ICONHEIGHT, dest) ;
      }
***************
*** 102,107 ****
--- 105,111 ----
  }
  
  
+ /*ARGSUSED*/
  beep_flash(beeps, flashes)    /* Perform visual feedback. */
  int beeps, flashes ;
  {
***************
*** 245,250 ****
--- 249,255 ----
    if (get_sun_icon("nomail.icon", ibuf) == 0) load_icon("Nomail") ;
    if (get_sun_icon("nopaper.icon", ibuf) == 0) load_icon("Nopaper") ;
    if (get_sun_icon("noprint.icon", ibuf) == 0) load_icon("Noprint") ;
+   if (get_sun_icon("nousers.icon", ibuf) == 0) load_icon("Nousers") ;
  }
  
  
***************
*** 341,347 ****
                      text(WINDOW, just, str) ;
                      return ;
        case ICON   : tpr = 'M' ;       /* MPR canvas. */
!                     if (mtype != MONALL) c = r = 0 ;
                      break ;
        case WINDOW : tpr = ' ' ;       /*  PR canvas. */
      }
--- 346,353 ----
                      text(WINDOW, just, str) ;
                      return ;
        case ICON   : tpr = 'M' ;       /* MPR canvas. */
!                     if ((mtype == MONNEW) || (mtype == MONPRINTER))
!                       c = r = 0 ;
                      break ;
        case WINDOW : tpr = ' ' ;       /*  PR canvas. */
      }
*** original/nousers.icon	Wed Jan  4 17:00:55 1989
--- nousers.icon	Wed Jan  4 18:08:13 1989
***************
*** 0 ****
--- 1,34 ----
+ /* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
+  */
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x001F,0xFC00,0x0000,
+ 	0x0000,0x01FF,0xFFC0,0x0000,0x0000,0x0FFF,0xFFF8,0x0000,
+ 	0x0000,0x3FFF,0xFFFE,0x0000,0x0000,0xFFFF,0xFFFF,0x8000,
+ 	0x0001,0xFFFF,0xFFFF,0xC000,0x0007,0xFFFF,0xFFFF,0xF000,
+ 	0x000F,0xFFFF,0xFFFF,0xF800,0x001F,0xFFF0,0x07FF,0xFC00,
+ 	0x003F,0xFF00,0x007F,0xFE00,0x007F,0xFC00,0x001F,0xFF00,
+ 	0x00FF,0xF000,0x0007,0xFF80,0x01FF,0xF800,0x0003,0xFFC0,
+ 	0x01FF,0xFC00,0x0000,0xFFC0,0x03FF,0xFE00,0x0000,0x7FE0,
+ 	0x07FE,0x3F00,0x0000,0x1FF0,0x07E0,0x9F80,0x0000,0x51F0,
+ 	0x0FE8,0xC1C0,0x0000,0xC5F8,0x0F8F,0x54E0,0x000A,0xBC78,
+ 	0x1F35,0xE6F0,0x0019,0xEB3C,0x1F56,0xBA78,0x0017,0x5ABC,
+ 	0x1C66,0xDF3C,0x003E,0xD98C,0x3DBA,0xF998,0x0067,0xD76E,
+ 	0x3CBB,0xAEC3,0xE05D,0x774E,0x38EF,0xF7EC,0x1AFB,0xFDC6,
+ 	0x3B7F,0x7D70,0x06AF,0xBFB6,0x795D,0xDDE0,0x03EE,0xEEA7,
+ 	0x7C6F,0x77C0,0x017B,0xBD8F,0x7DBF,0xBE80,0x00DF,0x7F6F,
+ 	0x7CAE,0xEB1E,0x3C75,0xDD4F,0x7E3B,0xFD33,0x666F,0xF71F,
+ 	0x7EDF,0x5F21,0x427E,0xBEDF,0x7E51,0xEE2D,0x5A35,0xE29F,
+ 	0x7F06,0xAE2D,0xDA35,0x583F,0x7F82,0x8223,0xE220,0x50FF,
+ 	0x7F80,0x023F,0xFE20,0x00FF,0x7F80,0x0207,0xF028,0x01FF,
+ 	0x3FC0,0x0207,0xF02C,0x01FE,0x3FC0,0x0203,0xE02E,0x01FE,
+ 	0x3FC0,0x0231,0xC62F,0x01FE,0x3FE0,0x0178,0x0F4F,0x83FE,
+ 	0x1FE0,0x016C,0x1B5F,0xC3FC,0x1FF0,0x0133,0xE65F,0xE7FC,
+ 	0x1FF0,0x0098,0x0C9F,0xF7FC,0x0FF8,0x004F,0xF93F,0xFFF8,
+ 	0x0FFC,0x0060,0x037F,0xFFF8,0x07FC,0x0030,0x067F,0xFFF0,
+ 	0x07FE,0x000C,0x18FF,0xFFF0,0x03FF,0x0003,0xE03F,0xFFE0,
+ 	0x01FF,0x8000,0x001F,0xFFC0,0x01FF,0xE000,0x000F,0xFFC0,
+ 	0x00FF,0xF000,0x0007,0xFF80,0x0FFF,0xFFFF,0xFFFF,0xFFF0,
+ 	0x0FFF,0xFFFF,0xFFFF,0xFFF0,0x0A78,0xFFDD,0xC78E,0x9E30,
+ 	0x09B7,0x7FDD,0xBB76,0x6DD0,0x0BB7,0x7FDD,0xBF76,0xFDF0,
+ 	0x0BB7,0x7FDD,0xC706,0xFE30,0x0BB7,0x7FDD,0xFB7E,0xFFD0,
+ 	0x0BB7,0x7FD9,0xBB76,0xFDD0,0x0BB8,0xFFE5,0xC78E,0xFE30,
+ 	0x0FFF,0xFFFF,0xFFFF,0xFFF0,0x0FFF,0xFFFF,0xFFFF,0xFFF0
*** original/patchlevel.h	Wed Jan  4 14:45:03 1989
--- patchlevel.h	Wed Jan  4 19:43:13 1989
***************
*** 1,5 ****
   
! /*  @(#)patchlevel.h 1.3 89/01/04
   *
   *  This is the current patch level for this version of faces.
   *
--- 1,5 ----
   
! /*  @(#)patchlevel.h 1.4 89/01/04
   *
   *  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  2
--- 14,17 ----
   *  reported to me then an attempt will be made to fix them.
   */
  
! #define  PATCHLEVEL  3
*** original/rec.c	Wed Jan  4 14:45:02 1989
--- rec.c	Wed Jan  4 19:43:11 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)rec.c 1.4 89/01/04" ;
  #endif
  
  /*  Record handling routines used by the faces program.
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)rec.c 1.5 89/01/04" ;
  #endif
  
  /*  Record handling routines used by the faces program.
***************
*** 136,142 ****
   
    ctemp = communities ;      /* Try and find machine record for hostname. */
    while (ctemp != NULL)
!     if (EQUAL(ctemp->community, hostname))
        {  
          add_alias(ctemp, username, alias) ;
          return ;
--- 136,142 ----
   
    ctemp = communities ;      /* Try and find machine record for hostname. */
    while (ctemp != NULL)
!     if (!strcmp(ctemp->community, hostname))
        {  
          add_alias(ctemp, username, alias) ;
          return ;
***************
*** 227,234 ****
    temp = recs ;
    while (temp != NULL)
      {
!       if (EQUAL(temp->username, username) &&
!           EQUAL(temp->community, community))
          return(temp) ;       /* Record found. */
        temp = temp->next ;    /* Point to next record. */
      }
--- 227,234 ----
    temp = recs ;
    while (temp != NULL)
      {
!       if (!strcmp(temp->username, username) &&
!           !strcmp(temp->community, community))
          return(temp) ;       /* Record found. */
        temp = temp->next ;    /* Point to next record. */
      }
*** original/sunview.c	Wed Dec 28 15:43:16 1988
--- sunview.c	Wed Jan  4 19:43:12 1989
***************
*** 1,6 ****
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)sunview.c 1.2 88/12/28" ;
  #endif
  
  /*  SunView dependent graphics routines used by faces,
--- 1,6 ----
  /*LINTLIBRARY*/
  #ifndef lint
! static char sccsid[] = "@(#)sunview.c 1.3 89/01/04" ;
  #endif
  
  /*  SunView dependent graphics routines used by faces,
***************
*** 78,84 ****
--- 78,89 ----
  } ;
  mpr_static(noprint_pr, 64, 64, 1, noprint_image) ;
  
+ short nousers_image[] = {
+ #include "nousers.icon"
+ } ;
+ mpr_static(nousers_pr, 64, 64, 1, nousers_image) ;
  
+ 
  add_face(display, itype, name)
  enum disp_type display ;
  enum icon_type itype ;
***************
*** 99,104 ****
--- 104,111 ----
                        break ;
        case NOPRINT  : face_pr = &noprint_pr ;
                        break ;
+       case NOUSERS  : face_pr = &nousers_pr ;
+                       break ;
        case ORDINARY : if (get_icon(name, buf) == -1) face_pr = &noface_pr ;
                        else
                          {
***************
*** 131,137 ****
      {
        case MONNEW     : PR_ROP(fpr, 64, 0, 640-64, 64, PIX_SRC, fpr, 0, 0) ;
        case MONALL     :
!       case MONPRINTER : PR_ROP(fpr, column*ICONWIDTH, row*ICONHEIGHT,
                                 ICONWIDTH, ICONHEIGHT, PIX_SRC, face_pr, 0, 0) ;
      }
  }
--- 138,145 ----
      {
        case MONNEW     : PR_ROP(fpr, 64, 0, 640-64, 64, PIX_SRC, fpr, 0, 0) ;
        case MONALL     :
!       case MONPRINTER :
!       case MONUSERS   :  PR_ROP(fpr, column*ICONWIDTH, row*ICONHEIGHT,
                                 ICONWIDTH, ICONHEIGHT, PIX_SRC, face_pr, 0, 0) ;
      }
  }
***************
*** 325,331 ****
                      text(WINDOW, just, str) ;
                      return ;
        case ICON   : tpr = mpr ;
!                     if (mtype != MONALL) c = r = 0 ;
                      break ;
        case WINDOW : tpr = pr ;
      }
--- 333,340 ----
                      text(WINDOW, just, str) ;
                      return ;
        case ICON   : tpr = mpr ;
!                     if ((mtype == MONNEW) || (mtype == MONPRINTER))
!                       c = r = 0 ;
                      break ;
        case WINDOW : tpr = pr ;
      }



More information about the Comp.sources.bugs mailing list