Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sun-barr!newstop!sunaus.oz!richb From: richb@sunaus.oz (Rich Burridge) Newsgroups: comp.sources.bugs Subject: Official patch #9 for faces v1.4 (Part 2 of 2). Message-ID: <1990Oct15.040018.16878@sunaus.oz> Date: 15 Oct 90 04:00:18 GMT Organization: Sun Microsystems - Australia Lines: 773 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 + #ifndef mips + #include #include + #else + #include + #include + #endif #include "faces.h" #include "extern.h" #include *************** *** 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 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 ! 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 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 ! 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 ! The "-b icon_file" option doesn't work. It still comes up with the ! default background. ! ! 27/ From John Mackin ! The manual entry makes no mention of X-Face: lines. ! ! 28/ From John Mackin ! 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 ! 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 ! 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 ! 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 " ! should work). ! ! 32/ From John Mackin ! 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 ! If you are running faces with the -a option, and mail arrived from ! x@y with an X-Face: line then another article arrives from x@y with ! a different X-Face: line, then the second face is not shown; just ! the count of the first face get's incremented. ! ! 34/ Optimise. ------- 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 faces works incorrectly when either the -h or the -w options are given. The image area is not being cleared first. + + v1.4 - patchlevel 9 - 11th October 1990. + + * From Robert Adams + 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 + The time delay for the SysV kludge 'select' replacement was reduced + from 5 to 3. + + * From Johan Vromans + 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 + Defined CC and $(CC) in the compface/Makefile, which can easily be + altered for other C compilers. + + * From Bruno Pillard + 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 + 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 + The manual page did not actually document the format of the commands + faces looks for in .mailrc/.facesrc (that is, "set bell = " + and "set flash = "). 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 + 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 + 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 + 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 + 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 + 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 + The X11 driver now sets the WM_CLIENT_MACHINE property. + + * From John Mackin + 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 + Fixed a naming conflict between BACKGROUND in faces.h, and the + Makefile definition BACKGROUND (if uncommented). + + * From John Mackin + 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 " + 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 ! #ifdef SYSV32 || hpux #include #else #include --- 15,21 ---- */ #include ! #if SYSV32 || hpux #include #else #include ------- 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)