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