This is the faces library version 1.2 Copyright (C) 1995 Rob Kooper (kooper@cc.gatech.edu) 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: kooper@cc.gatech.edu Thanks to Steven Kinzler for help deciding on the database format. ------------------------------------------------------------------------------- The gif file reader in libfaces/load_gif is based on a gif file reader written by David Koblas. Following is his copyright. /* +-------------------------------------------------------------------+ */ /* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ /* | Permission to use, copy, modify, and distribute this software | */ /* | and its documentation for any purpose and without fee is hereby | */ /* | granted, provided that the above copyright notice appear in all | */ /* | copies and that both that copyright notice and this permission | */ /* | notice appear in supporting documentation. This software is | */ /* | provided "as is" without express or implied warranty. | */ /* +-------------------------------------------------------------------+ */ ------------------------------------------------------------------------------- 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: ENTRY := MIME:LENGTH:DATA MIME := major-type/minor-type LENGTH := 0 | DATA := | 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.) -------------------------------------------------------------------------------