libfaces, a faces library

Rob Kooper (
Mon, 20 Mar 95 21:35:44 GMT


This is to announce version 1.1 of libfaces. Libfaces is a library
that implements the idea of faces, and uses a database instead of
directory structure to store all the faces. It also knows about the
mailcap and MIME types, so the database can hold any kind of data.

You can find libfaces at

The source is in libfaces-1.1.tar.gz and there are also binaries for
both the SUN, compiled under 4.1.1, and the SGI's, compiled under 5.2.

The databases that are used are different from the databases that were
used in other programs and are distributed in the picons. You can
however easily convert from picons to libfaces, using the facesdb
program that comes with libfaces. To convert a directorystructure into
the libfaces format all you need to say is "facesdb -convert <dirname>"

If you want to compile it you need to have gdbm installed. I used
gdbm-1.73, I don't know if other version work as well. I know already
one reason why it might not compile, the program uses strchr, which is
not available on BSD platforms, I think. Let me know if there are
other problems.

Let me know what you think of this, even if you want to say that it is


Rob Kooper

README of libfaces-1.1 ------------------------------------------------------------------------------- This is the faces library version 1.1

Copyright (C) 1995 Rob Kooper (

libfaces is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

libfaces is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with libfaces; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

You may contact the author by: e-mail:

Thanks to Steven Kinzler for help deciding on the database format.

------------------------------------------------------------------------------- SHORT DESCRIPTION OF LIBFACES: ==============================

Currently the faces used in the different faces programs out on the web use a directory structure to keep the faces. Searching through directory structure takes time. Other disadvantage, at least to me, was the multitude of files lying around.

To solve these problems I started experimenting with dbm, ndbm and gdbm. These can hold all the faces in a databases. dbm and ndbm couldn't be used because they have a limit on the number of bytes that are associated with a key. gdbm doesn't have this limit.

When I started writing the code, I was planning to make a new faces program to monitor my mail, then I decided to create a library that could be easily used in other programs.

------------------------------------------------------------------------------- CONFIGURATION and INSTALLATION: ===============================

To compile libfaces you need to have the gdbm library, you can't use dbm or ndbm, see the previous section. I used gdbm-1.73 which can be found on any site carrying the gnu software.

Not necessary to compile, but it is nice to have it, is xpm. I used xpm-3.4e but any other version 3.4 should work. If you don't have xpm installed be sure to comment out #define USE_XPM in the faces.templ or comment out the line XPM_INCLUDES in the Makefile.noX

The easiest way to configure is to take a look at the the faces.templ and change it. Now run xmkmf -a. Now type make and after a while you should have an program called faces in the faces directory.

If you don't have xmkmf, or it doesn't work, look at the Makefile.noX and change what needs changing, and type make -f Makefile.noX. It should now compile all the programs and libraries.

When finished building make install, or make -f Makefile.noX install will install the program, and libraries in the appropriate places.

------------------------------------------------------------------------------- FACES DATABASE: ===============

The database used by the faces library is created using gdbm. Gdbm has the advantage of no limit on the data that is associated with a key. Both dbm and ndbm can only have 1Kb associated with a key. The database has the following structure: RECORD := LINK | ENTRY+ LINK := link:<email address> ENTRY := MIME:LENGTH:DATA MIME := major-type/minor-type LENGTH := 0 | <length of DATA> DATA := <path to filename> | <image file>

if the LENGTH is 0 then the DATA is a pointer to a filename. The filename is terminated with 0.

------------------------------------------------------------------------------- TODO LIST: ==========

1. Implement simple perl library.

(Send me email, if you think there is more that should be added.)