Official patch #9 for faces v1.4 (Part 2 of 2).

Rich Burridge richb at sunaus.oz
Mon Oct 15 14:00:18 AEST 1990


This is the second part of patch #9 for faces v1.4.
See the installation details at the beginning of part1.

------CUT HERE------patch.9.part2------CUT HERE-----

------- Makefile -------
*** /tmp/da20255	Thu Oct 11 15:42:36 1990
--- Makefile	Thu Oct 11 15:31:25 1990
***************
*** 25,33 ****
  #  Faces displays a background pattern in its' window. When the window
  #  is not completely full, this gives the appearance of trying to blend
  #  in with the background. By default, this is a root gray color, but you
! #  can specify an alternate pattern to use here.
  #
! #BACKGROUND       = -DBACKGROUND=\"\"
  #------------------------------------------------------------------------
  #  Uncomment the following two lines to use the Domain Name Service to 
  #  attempt to convert unqualified hostnames, or hostnames with partial
--- 25,35 ----
  #  Faces displays a background pattern in its' window. When the window
  #  is not completely full, this gives the appearance of trying to blend
  #  in with the background. By default, this is a root gray color, but you
! #  can specify the name of a file containing an alternate pattern to use.
! #  Uncomment the next two lines and set appropriately.
  #
! #BACKNAME          = /usr/local/sample-background
! #BACKGROUND        = -DBACKGROUND=\"$(BACKNAME)\"
  #------------------------------------------------------------------------
  #  Uncomment the following two lines to use the Domain Name Service to 
  #  attempt to convert unqualified hostnames, or hostnames with partial
***************
*** 120,125 ****
--- 122,132 ----
  #
  #NOINDEX         = -DNOINDEX
  #--------------------------------------------------------------------------
+ #  Not every version of Unix (in particular System V derivitives) has the
+ #  select() system call. If your machine doesn't have this call, then you
+ #  need to uncomment the following definition.
+ #NOSELECT        = -DNOSELECT
+ #--------------------------------------------------------------------------
  #  By default, faces rechecks for new mail or print jobs every sixty
  #  seconds. If you would like to specify an alternate period, then uncomment
  #  the following line and set appropriately.
***************
*** 216,224 ****
  CDEFS		= $(BACKGROUND) $(DNSLOOKUP) $(DONTSHOWNO) $(DONTSHOWTIME) \
  		  $(DONTSHOWUSER) $(CFACEDIR) $(FMONTYPE) $(INVERT) \
  		  $(NAMEUNKNOWN) $(NEWSINCDIR) $(NISLOOKUP) $(NODOMAINS) \
! 		  $(NOINDEX) $(PERIOD) $(PLP) $(REVORDER) $(SELTYPE) \
! 		  $(SPOOLDIR) $(SPOOLFILE) $(SYSV) $(TTEXT) $(UPDATE) \
! 		  $(X11INCDIR) $(XVIEWINCDIR) $(DEBUG)
  CCOMP		= -g
  CFLAGS		= $(CCOMP) $(CDEFS)
  #
--- 223,231 ----
  CDEFS		= $(BACKGROUND) $(DNSLOOKUP) $(DONTSHOWNO) $(DONTSHOWTIME) \
  		  $(DONTSHOWUSER) $(CFACEDIR) $(FMONTYPE) $(INVERT) \
  		  $(NAMEUNKNOWN) $(NEWSINCDIR) $(NISLOOKUP) $(NODOMAINS) \
! 		  $(NOINDEX) $(NOSELECT) $(PERIOD) $(PLP) $(REVORDER) \
! 		  $(SELTYPE) $(SPOOLDIR) $(SPOOLFILE) $(SYSV) $(TTEXT) \
! 		  $(UPDATE) $(X11INCDIR) $(XVIEWINCDIR) $(DEBUG)
  CCOMP		= -g
  CFLAGS		= $(CCOMP) $(CDEFS)
  #
***************
*** 309,321 ****
  						$(STDLIBS) $(XVIEWLIBS)
  		-cp xvfaces faces
  
  install:
  		(cd compface; $(MAKE) $(MAKEOPTS) install)
  		(cd filters; $(MAKE) $(MAKEOPTS) install)
  		install -s -m 751 faces $(BINDIR)
  		install -c -m 755 face_update $(BINDIR)
- 		install -c -m 644 machine.tab $(FACEDIR)
- 		install -c -m 644 people.tab $(FACEDIR)
  		install -c -m 644 faces.1 \
  				$(MANDIR)/man$(MANSECT)/faces.$(MANSECT)
  		install -c -m 644 face_update.1 \
--- 316,331 ----
  						$(STDLIBS) $(XVIEWLIBS)
  		-cp xvfaces faces
  
+ tables:
+ 		-mkdir $(FACEDIR)
+ 		-install -c -m 644 machine.tab $(FACEDIR)
+ 		-install -c -m 644 people.tab $(FACEDIR)
+ 
  install:
  		(cd compface; $(MAKE) $(MAKEOPTS) install)
  		(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 \

------- x11.c -------
*** /tmp/da20258	Thu Oct 11 15:42:37 1990
--- x11.c	Thu Oct 11 14:17:00 1990
***************
*** 17,23 ****
--- 17,29 ----
   */
   
  #include <stdio.h>
+ #ifndef mips
+ #include <sys/types.h>
  #include <sys/time.h>
+ #else
+ #include <bsd/sys/types.h>
+ #include <bsd/sys/time.h>
+ #endif
  #include "faces.h"
  #include "extern.h"
  #include <X11/Xlib.h>
***************
*** 96,106 ****
    while (beeps > 0)
      {
        XBell(dpy, 56) ;
! #ifndef SYSV32
!       SELECT(0, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &btime) ;
! #else
        sleep(1) ;
! #endif /*SYSV32*/
        beeps-- ;
      }
    while (flashes > 0)
--- 102,116 ----
    while (beeps > 0)
      {
        XBell(dpy, 56) ;
! #ifdef NOSELECT
        sleep(1) ;
! #else
! #ifdef NO_43SELECT
!       SELECT(0, 0, 0, 0, &btime) ;
! #else
!       SELECT(0, (fd_set *) 0, (fd_set *) 0, (fd_set *) 0, &btime) ;
! #endif /*NO_43SELECT*/
! #endif /*NOSELECT*/
        beeps-- ;
      }
    while (flashes > 0)
***************
*** 252,258 ****
      }
   
    if (strlen(bgicon)) GET_SUN_ICON(bgicon, buf) ;
!   load_icon(BACKGROUND, buf) ;
  
    STRCPY(fname[0], "face.xbm") ;
    STRCPY(fname[1], "sun.icon") ;
--- 262,268 ----
      }
   
    if (strlen(bgicon)) GET_SUN_ICON(bgicon, buf) ;
!   load_icon(BACKIMAGE, buf) ;
  
    STRCPY(fname[0], "face.xbm") ;
    STRCPY(fname[1], "sun.icon") ;
***************
*** 308,313 ****
--- 318,325 ----
    int flags ;
    int x, y ;                         /* Window position. */
    XSetWindowAttributes winattrs ;
+   XTextProperty textprop ;
+   char hostname[MAXLINE] ;
  
    w = width = maxcols * imagewidth ;
    h = height = imageheight ;
***************
*** 387,392 ****
--- 399,411 ----
  
    XSetClassHint(dpy, frame[F_WINDOW], &class_hint) ;
  
+   GETHOSTNAME(hostname, MAXLINE) ;
+   textprop.value = (unsigned char *) hostname ;
+   textprop.encoding = XA_STRING ;
+   textprop.format = 8 ;
+   textprop.nitems = strlen(hostname) ;
+   XSetWMClientMachine(dpy, frame[F_WINDOW], &textprop) ;
+ 
  /* Equivalent of make_icon. */
  
    if (mtype == MONPRINTER) adjust_image(DISP_ICON, NOPRINT, 0, 0) ;
***************
*** 428,435 ****
  
    if (dest == CUROFF) dpm = pr[(int) dtype] ;
    else dpm = old_pr[(int) dtype] ;
!   if (depth == 1) XSetStipple(dpy, tilegc, images[(int) BACKGROUND]) ;
!   else XSetTile(dpy, tilegc, images[(int) BACKGROUND]) ;
    XFillRectangle(dpy, dpm, tilegc, 0, 0, width, height) ;
  }
  
--- 447,454 ----
  
    if (dest == CUROFF) dpm = pr[(int) dtype] ;
    else dpm = old_pr[(int) dtype] ;
!   if (depth == 1) XSetStipple(dpy, tilegc, images[(int) BACKIMAGE]) ;
!   else XSetTile(dpy, tilegc, images[(int) BACKIMAGE]) ;
    XFillRectangle(dpy, dpm, tilegc, 0, 0, width, height) ;
  }
  
***************
*** 439,444 ****
--- 458,469 ----
    XEvent ev ;
    static int first_time = 1 ;
  
+   if (raise != 0 && newmail)
+     {
+       XRaiseWindow(dpy, frame[F_WINDOW]) ;
+       XRaiseWindow(dpy, frame[F_ICON]) ;
+     }
+ 
    if (invert)     /* Invert the memory pixrects before displaying. */
      {
        XSetFunction(dpy, gc, GXcopyInverted) ;
***************
*** 481,487 ****
    for (;;)
      {
        readmask = fullmask ;
! #ifndef SYSV32
  #ifdef NO_43SELECT
        SELECT(32, &readmask, 0, 0, &tval) ;
        if (readmask && (1 << xfd))
--- 506,512 ----
    for (;;)
      {
        readmask = fullmask ;
! #ifndef NOSELECT
  #ifdef NO_43SELECT
        SELECT(32, &readmask, 0, 0, &tval) ;
        if (readmask && (1 << xfd))
***************
*** 496,507 ****
            sleep(1) ;
            while ((XPending(dpy) == 0) && (contr < period))
              {
!               sleep(5) ;
!               contr += 5 ;
              }
          }
        if (XPending(dpy))
! #endif /*SYSV32*/
          do
            {
              if (!XCheckMaskEvent(dpy, ExposureMask, &event))
--- 521,532 ----
            sleep(1) ;
            while ((XPending(dpy) == 0) && (contr < period))
              {
!               sleep(3) ;
!               contr += 3 ;
              }
          }
        if (XPending(dpy))
! #endif /*NOSELECT*/
          do
            {
              if (!XCheckMaskEvent(dpy, ExposureMask, &event))
***************
*** 523,533 ****
  
  /* ButtonPress. */
  
!             else if (event.type == ButtonPress        &&
!                      event.xbutton.button == Button1)
                {
!                 wdtype = (wdtype == DISP_NAME) ? DISP_OTHER : DISP_NAME ;
!                 draw_screen(wdtype) ;
                }
  
  /* KeyPress. */
--- 548,563 ----
  
  /* ButtonPress. */
  
!             else if (event.type == ButtonPress)
                {
!                 if (button1clear && event.xbutton.button == Button1)
!                   do_key(KEY_CLEAR) ;
!                 else if ((button1clear && event.xbutton.button == Button2) ||
!                         (!button1clear && event.xbutton.button == Button1))
!                   {
!                     wdtype = (wdtype == DISP_NAME) ? DISP_OTHER : DISP_NAME ;
!                     draw_screen(wdtype) ;
!                   }
                }
  
  /* KeyPress. */

------- TODO -------
*** /tmp/da20261	Thu Oct 11 15:42:37 1990
--- TODO	Thu Oct 11 15:25:04 1990
***************
*** 34,41 ****
      (a) There are two warnings on compiling news.c, due to FILE operations
          being performed on PSFILE variables.
  
!     (b) The new input functionality (click left mouse, 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.
--- 34,41 ----
      (a) There are two warnings on compiling news.c, due to FILE operations
          being performed on PSFILE variables.
  
!     (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.
***************
*** 93,99 ****
  17/ Provide a template of what each of the independent graphics routine do,
      to aid porting to new graphics environments.
  
! 18/ Add an option to disable flashing and beeping when new mail arrives.
  
  19/ From Pat Lashley <patl at Sun.COM>
      Change window header to show what is being monitored (mail, lp1, users,
--- 93,109 ----
  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 at 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
!     arrives or you delete the mail.  I don't care about this since I don't
!     use -a, but what I _would_ like to see (here comes the wishlist item) is
!     an option that you can use with monitor-new that keeps the window always
!     10 (or -c if specified) icon-widths wide, but adds extra rows of icons as
!     needed if more than 10/-c new mail items arrive between clearings of the
!     window, and shrinks the window back to one row/-c widths when it is
!     cleared.
  
  19/ From Pat Lashley <patl at Sun.COM>
      Change window header to show what is being monitored (mail, lp1, users,
***************
*** 122,125 ****
  24/ When the -w and/or -h options are used with the SunView version, the
      size of the icon created is incorrect.
  
! 25/ Optimise.
--- 132,210 ----
  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 at 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 at 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 at cs.su.oz.au>
!     The manual entry makes no mention of X-Face: lines.  
! 
! 28/ From John Mackin <john at 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
!     in addition to the system default faces, whereas now -f
!     _supersedes_ the system faces and you must include a trailing
!     colon to have them searched.
! 
! 29/ From John Mackin <john at cs.su.oz.au>
!     A comment on the domain lookup algorithm. According to the manual page:
!  
!            $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 
!   
!     This leads to a top-level directory with a _lot_ of subdirectories.
!     I think this is responsible for much of faces' CPU time; it's well
!     known that large directories are a UNIX performance no-no. What I
!     would like to see instead (or in addition, or as an option, perhaps
!     compile-time) is the following.
! 
!            $DIR/ain/dom/uid/iconname
!            $DIR/ain/uid/iconname 
!            $DIR/misc./uid/iconname
!            $DIR/ain/dom/machine/unknown/iconname
!            $DIR/ain/dom/unknown/iconname
!            $DIR/ain/unknown/iconname
!            $DIR/misc./unknown/iconname
! 
!     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 at 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 at 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
! 
!       (1) that headers should be recognised in either case (so "X-Face:"
!           and "X-FACE:" and "x-FaCe:" are all equivalent).
!       (2) that there may be linear white space (spaces or tabs) between
!           the field-name and the colon (so "FRoM  : Foo Bar <foo at bar>"
!           should work).  
!  
! 32/ From John Mackin <john at 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 at prl.dec.com>
!     If you are running faces with the -a option, and mail arrived from
!     x at y with an X-Face: line then another article arrives from x at 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.

------- xview.c -------
*** /tmp/da20264	Thu Oct 11 15:42:38 1990
--- xview.c	Thu Oct 11 14:17:20 1990
***************
*** 103,112 ****
    int nextc ;
  
    nextc = event_id(event) ;
!   if (event_is_down(event) && nextc == MS_LEFT)
      {
!       wdtype = (wdtype == DISP_NAME) ? DISP_OTHER : DISP_NAME ;
!       draw_screen(wdtype) ;
      }
    else if (event_is_ascii(event)) do_key(nextc) ;
  }
--- 103,117 ----
    int nextc ;
  
    nextc = event_id(event) ;
!   if (event_is_down(event))
      {
!       if (button1clear && nextc == MS_LEFT) do_key(KEY_CLEAR) ;
!       else if ((button1clear && nextc == MS_MIDDLE) ||
!               (!button1clear && nextc == MS_LEFT))
!         {
!           wdtype = (wdtype == DISP_NAME) ? DISP_OTHER : DISP_NAME ;
!           draw_screen(wdtype) ;
!         }
      }
    else if (event_is_ascii(event)) do_key(nextc) ;
  }
***************
*** 240,246 ****
      }
  
    if (strlen(bgicon)) GET_SUN_ICON(bgicon, buf) ;
!   load_icon(BACKGROUND, buf) ;
  
    STRCPY(fname[0], "sun.icon") ;
    STRCPY(fname[1], "48x48x1") ;
--- 245,251 ----
      }
  
    if (strlen(bgicon)) GET_SUN_ICON(bgicon, buf) ;
!   load_icon(BACKIMAGE, buf) ;
  
    STRCPY(fname[0], "sun.icon") ;
    STRCPY(fname[1], "48x48x1") ;
***************
*** 353,360 ****
  
    if (dest == CUROFF) dpm = pr[(int) dtype] ;
    else dpm = old_pr[(int) dtype] ;
!   if (depth == 1) XSetStipple(dpy, tilegc, images[(int) BACKGROUND]) ;
!   else XSetTile(dpy, tilegc, images[(int) BACKGROUND]) ;
    XFillRectangle(dpy, dpm, tilegc, 0, 0, width, height) ;
  }
  
--- 358,365 ----
  
    if (dest == CUROFF) dpm = pr[(int) dtype] ;
    else dpm = old_pr[(int) dtype] ;
!   if (depth == 1) XSetStipple(dpy, tilegc, images[(int) BACKIMAGE]) ;
!   else XSetTile(dpy, tilegc, images[(int) BACKIMAGE]) ;
    XFillRectangle(dpy, dpm, tilegc, 0, 0, width, height) ;
  }
  
***************
*** 362,367 ****
--- 367,374 ----
  show_display()    /* Show the latest set of mail icon faces. */
  {
    Rect *temprect ;
+ 
+   if (raise != 0 && newmail) wmgr_top(frame) ;
  
    if (invert)     /* Invert the memory pixrects before displaying. */
      {

------- CHANGES -------
*** /tmp/da20267	Thu Oct 11 15:42:39 1990
--- CHANGES	Thu Oct 11 15:20:41 1990
***************
*** 347,349 ****
--- 347,534 ----
         * From Lindsay F. Marshall <Lindsay.Marshall%newcastle.ac.uk at munnari.oz>
           faces works incorrectly when either the -h <height> or the -w <width>
           options are given. The image area is not being cleared first.
+ 
+ v1.4 - patchlevel 9 - 11th October 1990.
+ 
+        * From Robert Adams <adams at littlei.intel.com>
+          Speedups in directory searching in main.c:
+                 1) all of the lists are now terminated by a NULL (saves
+                         a 'strlen' call);
+                 2) the removal of the leading "." is done earlier and a
+                         check is made for removing a last trailing dot (this
+                         saves an extra bunch of stat's for the dir "misc.");
+                 3) if the 'stat' for the old style file name fails, that
+                         means that the directory containing the files also
+                         can't be there.  The loop is terminated if the 'stat'
+                         fails.  This reduces the number of 'stat's done
+                         when searching for a face by an order of magnitude.
+ 
+        * From Robert Adams <adams at littlei.intel.com>
+          The time delay for the SysV kludge 'select' replacement was reduced
+          from 5 to 3.
+ 
+        * From Johan Vromans <jv at mh.nl>
+          With GNU gcc, you cannot say "#ifdef XXX || YYY". It must be either 
+          "#if XXX || YYY" or "#if defined(XXX) || defined(YYY)".
+ 
+        * From Johan Vromans <jv at mh.nl>
+          Defined CC and $(CC) in the compface/Makefile, which can easily be
+          altered for other C compilers.
+ 
+        * From Bruno Pillard <bp at chorus.fr>
+          The installation of the machine.tab and the people.tab has been
+          removed from the standard "make install" rules in the Makefile.
+          Typically sites will have customised these files in their faces
+          directory, and do want them overwritten when you do a new
+          installation of the faces program.
+ 
+          Instead, an extra definition has been added to the Makefile. If you
+          now do a "make tables", then the default machine and people tables
+          will be installed. The README has been updated to reflect this
+          change.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          Some systems (that don't use Berkeley Mail) have a ~/.mailrc format
+          that is not compatible with the format of the commands that faces
+          wants to find there. So, look for .facesrc first, and if that is
+          found use it; otherwise examine .mailrc. This has been implemented,
+          and the manual pages have been updated to reflect these changes.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          The manual page did not actually document the format of the commands
+          faces looks for in .mailrc/.facesrc (that is, "set bell = <number>"
+          and "set flash = <number>"). These have been documented, and two
+          new options have also been added: "set raise" causes the window to
+          be raised when new mail arrives, and "set button1clear" causes
+          button 1 to clear the window, like it did in the previous version
+          of faces, and like hitting Delete does now, and moves button 1's
+          "toggling" function to button 2. This functionality is present in
+          the X11, XView and SunView drivers. The TODO file has been updated
+          to show that the NeWS driver still needs to be modified.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          Several functions (getenv, malloc, index and rindex) are all
+          standard V7 and are all always char *. There is no reason they
+          should be declared inside the SYSV32 conditional.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          The code has been made more robust for the case where uncompface
+          never gets called. It will core-dump otherwise if an X-Face: line
+          is the last thing in the mail file. In any case, the return value
+          of index should always be checked.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          Various #include file adjustments for a MIPS machine:
+ 
+          netdb.h      ==>  bsd/netdb.h
+          sys/types.h  ==>  bsd/sys/types.h
+          sys/time.h   ==>  bsd/sys/time.h
+ 
+          In general, you should not assume that sys/time.h will automatically
+          include sys/types.h for you.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          X-Face: lines are ignored if we've already seen one in this mail
+          item. (This is similar to the way From: lines are already treated.)
+          This will work correctly in all cases except when someone who puts
+          their X-Face: in their signature includes (and doesn't indent) mail
+          with an X-Face: in it. The TODO file entry has been modified to
+          reflect this change.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          An extra definition has been added to the Makefile. This is
+          NO_SELECT, and should be uncommented if your machine doesn't have
+          the select() system call. Before this patch, this option was
+          determined by the SYSV32 #ifdef. In these days of hybrid Unix
+          systems this is no longer appropriate.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          The X11 driver now sets the WM_CLIENT_MACHINE property.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          Fixed a bad, core-dump-causing bug in the compface/compress routine.
+          BigRead calls BigMul which assumes B is initialised. That's fine for
+          the compface and uncompface _programs_ -- in that case it is
+          initialised to zero, being statically allocated -- but a disaster
+          for programs that call the library routines repeatedly, as faces does.
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          Fixed a naming conflict between BACKGROUND in faces.h, and the
+          Makefile definition BACKGROUND (if uncommented).
+ 
+        * From John Mackin <john at cs.su.oz.au>
+          The following points have been added to the TODO file:
+ 
+          - 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 arrives or you delete the mail.
+            I don't care about this since I don't use -a, but what I _would_
+            like to see (here comes the wishlist item) is an option that you
+            can use with monitor-new that keeps the window always 10 (or -c
+            if specified) icon-widths wide, but adds extra rows of icons as
+            needed if more than 10/-c new mail items arrive between clearings
+            of the window, and shrinks the window back to one row/-c widths
+            when it is cleared.
+ 
+          - 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
+ 
+          - The "-b icon_file" option doesn't work. It still comes up with
+            the default background.
+ 
+          - The manual entry makes no mention of X-Face: lines.
+ 
+          - 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
+            in addition to the system default faces, whereas now -f
+            _supersedes_ the system faces and you must include a trailing
+            colon to have them searched.
+ 
+          - A comment on the domain lookup algorithm. According to the manual
+            page:
+  
+            $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
+  
+            This leads to a top-level directory with a _lot_ of subdirectories.
+            I think this is responsible for much of faces' CPU time; it's well
+            known that large directories are a UNIX performance no-no. What I
+            would like to see instead (or in addition, or as an option, perhaps
+            compile-time) is the following.
+ 
+            $DIR/ain/dom/uid/iconname
+            $DIR/ain/uid/iconname
+            $DIR/misc./uid/iconname
+            $DIR/ain/dom/machine/unknown/iconname
+            $DIR/ain/dom/unknown/iconname
+            $DIR/ain/unknown/iconname
+            $DIR/misc./unknown/iconname
+  
+            The idea is that at each level, if the next component exists and is
+            a directory, you descend into it and look there.
+ 
+          - 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.
+ 
+          - You test if the beginning of the line is identically equal to
+            "X-Face:" or "From:". This is contrary to RFC822, which specifies
+ 
+             (1) that headers should be recognised in either case (so "X-Face:"
+                 and "X-FACE:" and "x-FaCe:" are all equivalent).
+             (2) that there may be linear white space (spaces or tabs) between
+                 the field-name and the colon (so "FRoM  : Foo Bar <foo at bar>"
+                 should work).  
+ 
+          - 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.)

------- parsefrom.c -------
*** /tmp/da20270	Thu Oct 11 15:42:40 1990
--- parsefrom.c	Wed Oct 10 18:13:47 1990
***************
*** 15,21 ****
   */
  
  #include <stdio.h>
! #ifdef SYSV32 || hpux
  #include <string.h>
  #else
  #include <strings.h>
--- 15,21 ----
   */
  
  #include <stdio.h>
! #if SYSV32 || hpux
  #include <string.h>
  #else
  #include <strings.h>


------- compface/Makefile -------
*** /tmp/da20307	Thu Oct 11 15:55:23 1990
--- compface/Makefile	Wed Oct 10 18:17:25 1990
***************
*** 32,41 ****
  HDRS		= compface.h data.h
  OTHERS		= README $(NAME).1 $(NAME).3 Makefile
  
  CFLAGS		= -g
  
  $(NAME) :	main.o $(LIBNAME)
! 		cc $(CFLAGS) -o $(NAME) main.o $(LIBNAME)
  		rm -f $(UNNAME)
  		ln $(NAME) $(UNNAME)
  
--- 32,42 ----
  HDRS		= compface.h data.h
  OTHERS		= README $(NAME).1 $(NAME).3 Makefile
  
+ CC		= cc
  CFLAGS		= -g
  
  $(NAME) :	main.o $(LIBNAME)
! 		$(CC) $(CFLAGS) -o $(NAME) main.o $(LIBNAME)
  		rm -f $(UNNAME)
  		ln $(NAME) $(UNNAME)
  

------- compface/compress.c -------
*** /tmp/da20313	Thu Oct 11 15:55:24 1990
--- compface/compress.c	Thu Oct 11 12:31:30 1990
***************
*** 156,161 ****
--- 156,162 ----
  {
  	register char *p;
  
+ 	B.b_words = 0;
  	BigRead(fbuf);
  	p = F;
  	while (p < F + PIXELS)



More information about the Comp.sources.bugs mailing list