Introduction to the Allegro CL Documentation

The index for the Allegro CL Documentation is in index.htm. The documentation is described in introduction.htm.

This document contains the following sections:

1.0 Documentation introduction
   1.1 Common Graphics and Integrated Development Environment Documentation
   1.2 ANSI Common Lisp and MetaObject Protocol Documentation
   1.3 Some notation
2.0 The Overview section
   2.1 Allegro CL documentation table of contents
   2.2 Allegro CL documentation: list of overview HTML documents
3.0 The Reference section
4.0 Assistance available on the internet and the World Wide Web
   4.1 The Allegro CL FAQ
   4.2 Patches
   4.3 Further patch information
   4.4 Should you get all patches?
   4.5 What to do with patches when you have downloaded them
5.0 Reporting bugs
   5.1 Where to report bugs and send questions
6.0 Contacting Franz Inc. for sales, licensing assistance, and information

The main page for the index for the Allegro CL documentation is index.htm. That file points to index pages for each letter (some letters are combined). There are pages with Common Graphics functionality and pages without Common Graphics functionality. The latter are more useful for UNIX users, because Common Graphics is not available on UNIX.

The contents of the overview documents is in contents.htm.

1.0 Documentation introduction

The documentation for Allegro CL 6.0 is online. PDF versions of the HTML files in the doc/ directory and in the cg/ subdirectory (but not for files in the pages/ subdirectory) are available in the doc/ subdirectory of the distribution CD. It is arranged into an overview section and a reference section.

Installation information can be found in installation.htm.

The release notes for 6.0 can be found in release-notes.htm.

The User Guide for the Emacs-Lisp interface is in eli.htm.

1.1 Common Graphics and Integrated Development Environment Documentation

The documentation for Common Graphics and the Integrated Development Environment is integrated with the general Allegro CL documentation. Start with cgide.htm. The section About Common Graphics and IDE documentation in that document provides a map of CG and IDE documentation.

1.2 ANSI Common Lisp and MetaObject Protocol Documentation

The ANSI specification is reproduced in ANSI Common Lisp (the link is to the initial page). See also Allegro CL and the ANSI CL standard and Compliance with the ANSI specification in implementation.htm.

1.3 Some notation

Allegro directoryUsed two ways: (1) the directory in which Allegro CL is installed, and (2) the translation of the sys: logical host, which is the directory where files needed while Allegro CL is running are located. We use the same term for both because these are normally the same directory. (sys: in fact translates to the directory containing the Allegro CL executable, usually mlisp or mlisp.exe, usually located in the directory into which Allegro CL was installed.)
Allegro executable or executableThe file which is invoked to run Allegro CL. This is a small file and is not usually created by users (but see main.htm). The executable can be copied and/or renamed as desired, however. In Allegro CL 6.0, there are a number of execuatbles provided, each with an associated image file: mlisp (modern, case-sensitive lower, supports international character sets), mlisp8 (modern, case-sensitive lower, does not support international character sets), alisp (ansi, case-insensitive upper, supports international character sets), alisp8 (ansi, case-insensitive upper, does not support international character sets). On Windows, the executables have type .exe.
Allegro image file or imageThis file contains the bulk of Lisp data. It is typically large and has the extension dxl. The executable can only be run with an image file. Image files can be created by users (with, e.g., build-lisp-image and dumplisp).

2.0 The Overview section

Html files in the doc subdirectory of the Allegro directory (the directory where Allegro CL and related products were installed from the CD) describe the various features of Allegro CL. There are links where necessary between these files and to relevant files in the reference section.

PDF versions of these files are available in the doc/ subdirectory of the CD.

2.1 Allegro CL documentation table of contents

The document contents.htm is an outline of the Allegro CL documentation in table of contents format. The outline is too large to reasonably be included in this document.

2.2 Allegro CL documentation: list of overview HTML documents

Here is a list of the HTML (and several PDF) files that make up the base Allegro CL documentation.

To view the PDF files (such as clim-ug.pdf and allegrostore.pdf), you must have an Adobe Acrobat (r) Reader. This is available free from Adobe. Go to this lcoation for further information: www.adobe.com/products/acrobat/readstep.html.

aodbc.htmThis file describes version 2 of Allegro ODBC.
allegrostore.pdfThis document is the AllegroStore User Guide, which was provided as a printed (hardcopy) document in earlier releases and, starting with release 6.0, is a PDF file. Assuming you have an Adobe Acrobat Reader, clicking on the link will display the AllegroStore User Guide in your browser. Note that the table of contents and the Index contain active links. Note that AllegroStore is an add-on product and you may not be licensed to use it. Also, it is not available on all Allegro CL platforms.

To view the PDF files (such as this one), you must have an Adobe Acrobat (r) Reader. This is available free from Adobe. Go to this lcoation for further information: www.adobe.com/products/acrobat/readstep.html.

aserve/aserve.htmlAllegroServe is a Web Server facility. See also aserve/tutorial.html and aserve/htmlgen.html. These documents are not listed in contents.htm.
basic-lisp-techniques.pdfThis document (in pdf format) is an introduction to Lisp and Lisp programming written by David Cooper.

To view the PDF files (such as this one), you must have an Adobe Acrobat (r) Reader. This is available free from Adobe. Go to this lcoation for further information: www.adobe.com/products/acrobat/readstep.html.

building-images.htmThe function build-lisp-image creates a new image from existing components, inheriting a few features but no functionality from the running image (the one in which build-lisp-image is called). This document describes the build-lisp-image functionality and describes how to make custom images configured for your purposes. Note that creating an image which contains the functionality of the running Lisp image is done with dumplisp (see dumplisp) while creating images for delivery is done with generate-application, described in delivery.htm.
case.htmAs an extension to standard Common Lisp, Allegro CL permits case sensitivity. This document discusses the issues with case sensitivity.
cgide.htm[Windows only] Starting in release 6.0, the Common Graphics, Integrated Development Environment documentation is integrated into the general Allegro CL documentation. This is the introductory document.
clim-ug.pdfThis document is the CLIM User Guide, which was provided as a printed (hardcopy) document in earlier releases and, starting with release 6.0, is a PDF file. Assuming you have an Adobe Acrobat Reader, clicking on the link will display the CLIM User Guide in your browser. Note that the table of contents and the Index contain active links. Note that CLIM is an add-on product and you may not be licensed to use it.

To view the PDF files (such as this one), you must have an Adobe Acrobat (r) Reader. This is available free from Adobe. Go to this lcoation for further information: www.adobe.com/products/acrobat/readstep.html.

compiling.htmThis document describes the compiler. It provides information on how code generated by the compiler is controlled by the safety, space, speed, and debug optimization qualities. Information is also provided on declarations that will speed up code and tools for determining the effectiveness of declarations.
composer.htmThis document describes the Allegro Composer utilty (available on UNIX platforms only). Allegro Composer provides windowized tools for development.
cross-reference.htmThis document describes the cross reference facility in Allegro CL. This facility can analyze Lisp code and determine what functions call what other functions and what functions are called by other functions.
debugging.htmThis document provides information about internals of the Allegro CL debugger to assist application writers who wish to provide customized debugging facilities in their applications. Note that this document does not contain information needed for ordinary use of Allegro CL. This document is not listed in contents.htm.
debugging.htmThis document describes the debugger in Allegro CL. The commands that provide debugging information and features of the debugger are discussed.
defsystem.htmDefsystem is a facility for managing files associated with an application. (It allows specifying the order in which files should be processed and the dependence of one file on another etc.) This document describes the defsystem facility in Allegro CL.
delivery.htmThis document describes how to deliver an application written in Allegro CL. There is also a description of how to establish a patch system for your application which complements the patch system for Allegro CL, and other delivery-related issues.
dns.htmThis document describes Allegro CL support for for Domain Naming Systems.
dumplisp.htmdumplisp creates a new Lisp image file. However, the file created by dumplisp contains most of the functionality present in the currently running images, so all defined functionality will still be defined, and the current values of variables will be retained -- for the most part, see the document for details. (Contrast this with build-lisp-image which produces a fresh image which inherits very little from the running Lisp image.) This document describes dumplisp functionality and discusses issues of importance when using dumplisp.
eli.htmThis document describes the Emacs-Lisp interface provided with Allegro CL. See also Running Lisp as a subprocess of Emacs for information on connecting Emacs to Allegro CL.
errata.htmThis file is intended to list errors found in the Allegro CL documentation. Initially, the file is present but no errors are listed. When the file is updated, reported errors will be listed.
errors.htmSome common errors which may be encountered while using Allegro CL are discussed, along with, where possible, suggestions for fixing them. The condition system type hierarchy in Allegro CL is also discussed.
flavors.htmFlavors is an object-oriented system for use in Lisp. It predates and has been effectively replaced by CLOS. We maintain flavors for backward-compatibility only. The Allegro CL flavors implementation is described in this document. Note that the reference portion (definitions of functions, macros, variables, etc.) is included with the text of this document. (Most functionality is described in the reference section of the documentation rather than being integrated into these html documents.) This document is unchanged for the 6.0 release.
foreign-functions.htmThe foreign function interface allows compiled foreign code to be loaded into a Lisp image and run from Lisp. (Foreign means C, C++, and Fortran, along with other C compatible object files.) Because of differing internal representations of data, it is not entirely straightforward to pass data from Lisp to C, to call foreign functions from Lisp, and to call back to Lisp from a foreign function. This document describes the tools provided for defining and calling foreign code.
ftype.htmThis document describes how foreign types (e.g. C longs and shorts, C strings, C structures, etc.) can be defined in Lisp and how Lisp can access and operate on instances of foreign types.
fwrappers-and-advice.htmThe new fwrapper facility and the old, deprecated advice facility, both allow adding code that is run around functions (in some ways similar to around methods).) This document describes how to use these facilities and has links to the relevant reference documentation.
gray-streams.htmThis file provides details of the implementation of Gray streams in Allegro CL. Gray streams are the older stream implementation. Release 6.0 implements simple-streams, which have advantages over Gray streams, but Gray streams are still supported. Simple-streams are described in streams.htm.
gc.htmLisp maintains a garbage collector which regularly frees up space in the Lisp heap which is no longer used. This process is called garbage collection. While garbage collection is fully automatic and so a user need not necessarily think about it, configuring the garbage collector to a specific application or to a pattern of Lisp use often results in significantly better performance.
iacl.htmThis document describes International character set support in Allegro CL. In earlier releases, such support was only available with a separate version but in 6.0, all Allegro CL versions can support international character sets (though non-international executables are also provided -- mlisp8 for example).
implementation.htmThis document provides specific information about the implementation of Allegro CL. Many details of the Common Lisp standard are implementation-dependent (such as the number of distinct floating-point types and their mapping to machine floats, the largest fixnum, the implementation of random, etc.) and this document says what Allegro CL does. Also discussed are extensions to Common Lisp functions (such as open, make-array, and others where an Allegro-specific enhancement is provided).
index.htmThis document provides links to other documents, including links to all Allegro CL functions, variables, etc.
inspector.htmThis document describes the non-windowized inspector. (Users on Windows with the Integrated Development Environment get all the functionality described in this document in inspector windows.)
installation.htmThis document describes how to install Allegro CL and related products.
introduction.htmThe document you are now reading.
jlinker.htmThis document describes a Java/Lisp interface available with Allegro CL.
loading.htmThis document describes details of the implementation of cl:load (such as where is a file with no path information looked for). cl:require is also discussed.
main.htmAllegro CL allows you to define your own C main(), as described in this document.
miscellaneous.htmThis document describes functionality too limited to need a separate document.
mop/contents.htmlThe files in the mop/ subdirectory are an HTML version of the description of the MetaObject Protocol in chapters 5 and 6 of The Art of MetaObject Protocol by G. Koczales, J. des Rivieres, and D. Brobrow. The HTML version was prepared by Howard Stearns and copyrighted by the Elwood Corporation, as described in mop/admin.html.

We thank Mr. Stearns and the Elwood Corporation for their kind permission in allowing Franz Inc. to use these files in our product. Much useful information about Lisp, including these files, can be found on the Association of Lisp Users (ALU) home page, maintained by the Elwood Corporation, at http://www.elwoodcorp.com/alu/.

multiprocessing.htmAllegro CL supports multiprocessing using lightweight processes (within the running Lisp process) on UNIX and multiprocessing using OS threads on Windows. The functionality is described in this document.
ole.htmA document describing interfacing to OLE. Allegro CL 6.0 for Windows only.
orblinkAllegro CL includes an Orblink implementation. Its is documented in its own directory. Start with readme.htm in the orblink directory.
os-interface.htmThis document describes how to run OS functionality from within Lisp and also how to find out the current directory, how to change the current directory, and other aspects of interfacing with the operating system.
packages.htmThis document provides details of the implementation of packages in Allegro CL and includes a description of package locking (which prevents accidental redefinition of Common Lisp and Allegro CL functionality).
pathnames.htmThis document provides information on the implementation of pathnames (including logical pathnames) in Allegro CL.
plugin.htmThis document links to an example which creates an Internat Browser plugin from an Allegro CL application. Only works on Windows.
profiling.htmAllegro CL provides a profiling utility as an add-on product. Both time and space usage can be profiled, though not at the same time. This document describes how the profiler works, how to use it, and how to interpret the results. Note that not all versions of Allegro CL include the profiler.
phtml.htm and pxml.htmThese files (which are quite preliminary) describe the Lisp-based HTML and XML parsers. Updates to these files will be provided over time. These documents are not listed in contents.htm.
regexp.htmThis document describes the regular expression API available in Allegro CL.
release-notes.htmThis document is the release notes for Allegro CL on all platforms. Please refer to this document if you see unexpected behavior.
runtime.htmRuntime is the technical solution to the restriction of runtime licenses. It has both legal and programming meanings. The legal meaning (determining, e.g., to whom a runtime image can be distributed and at what royalty) is defined in the Allegro CL Runtime License Agreement. In this document, the programming meaning is discussed. Information is provided on how to create runtime images (but also see delivery.htm and building-images.htm), what are the limitations of a runtime image, and so on.
socket.htmSockets are a way for different running programs to communicate with each other. This document describes the support for sockets within Allegro CL.
shared-library-and-dll.htmThis document points to examples of create Lisp-based shared libraries (for UNIX) and DLL's (for Windows). A Lisp-based shared library or DLL can be used by developers writing C, C++, and Java applications.
source-file-recording.htmAllegro CL provides a facility for remembering the file in which a Lisp function (or variable, parameter, macro, etc.) is defined. That facility is described in this document.
startup.htmThis document describes starting Allegro CL. Various methods of starting (from a shell, as a subprocess of emacs, on Windows with or without the Integrated Development Environment, etc.) are discussed. Command-line arguments and initializations files (both how to use them and how to suppress them) are described along with other things you should know about startup. Startup problems and suggested solutions are also discussed.
streams.htmThis file provides details of the implementation of simple-streams in Allegro CL. Simple-streams are the new standard stream type. Earlier releases of Allegro CL used Gray streams, which are still supported. See gray-streams.htm.
test-harness.htmThis document describes the test harness facility new in Allegro CL 6.0.
top-level.htmThe top level is the interface to a running development Lisp image. (We say `development' to distinguish from a Lisp application. Most applications provide their own top level.) This document provides information about the Allegro CL top level.
uri.htmThis document describes the URI facility new in Allegro CL 6.0.

In the old-compatibility directory, there are three documents describing the conversion from Allegro CL 4.3.1 (on UNIX) and Allegro CL 3.0.1 (on Windows) to release 5.0. The documents are

Except for updating links and adding an introductory paragraph, the files are unchanged from the 5.0.1 release.

3.0 The Reference section

For Allegro CL-specific functionality, virtually every operator (function, generic function, or macro), every constant and variable, and many classes defined in Allegro CL, other than standard Common Lisp functionality, are described in individual HTML files called description pages. These files are arranged as follows:

[Allegro directory]/doc/pages/[kind]/[package]/[symbol].htm

Where:

[Allegro directory] is the directory into which Allegro CL was installed. The document you are reading is [Allegro directory]/doc/introduction.htm.

[kind] is one of

[package] is the home package of the symbol being documented, and is one of

compiler, common-graphics, dbi, defsys, excl, ff, javatools.jlinker, mp, net.uri, prof, socket, system, top-level, util.test, xref

and [symbol] is the symbol naming the object (or the name of the top-level command). A * character in a symbol name is handled specially. * appears as s_ or _s depending on whether the * is leading or trailing.

Thus, the documentation for the variable excl:*enable-package-locked-errors* is in the file:

[Allegro directory]/doc/pages/variables/excl/s_enable-package-locked-errors_s.htm

And the documentation for the function system:command-line-arguments is in the file

[Allegro directory]/doc/pages/operators/system/command-line-arguments.htm

Note: Common-graphics operators are further organized by the first letter of the symbol naming them. This prevents a directory with over 1600 files.

Each page names the symbol, its home package, and the type of the object being described (function, macro, variable, class, etc.)

Descriptions of operators include the argument list. Generally the argument list is the same as returned by functions like arglist but not always. It will not be when (1) the stored argument list is abbreviated (e.g. &rest args or &key &allow-other-keys, where argument processing is done within the operator body) and thus unhelpful; or (2) the stored argument names are unhelpful (struct -- because the object is a struct -- rather than, say, process or pathname).

Some arguments are listed but described as not for programmer use (these arguments may be intended for later enhancements or may support internal actions only). A few pages describe internal functionality not intended for programmer use. Symbols naming such functionality are exported for unavoidable system reasons and because they are exported, they have description pages.

4.0 Assistance available on the internet and the World Wide Web

Franz Inc. maintains a publicly-accessible (login is "anonymous", password is your email address) FTP site (ftp://ftp.franz.com/pub/faq) and has a World Wide Web home page (http://www.franz.com/). You may use either location to access the Allegro CL FAQ and patches to Allegro CL and related products.

4.1 The Allegro CL FAQ

FAQ stands for Frequently Asked Questions. The Allegro CL FAQ is a document written in question and answer format containing answers to questions often asked by users of Allegro CL and related products. Franz Inc. updates the FAQ regularly.

The FAQ is available via FTP:

ftp://ftp.franz.com/pub/faq

It is also available on the Franz Inc. WWW home page (in the Support section):

http://www.franz.com/

4.2 Patches

A patch is a file (typically a fasl -- compiled Lisp -- file) which either corrects some error in the product or provides some enhancement or new feature. Patches are available from the Franz Inc. Web or FTP site. Patches are stored in both locations with a directory structure that mirrors the distribution directory structure, so that patch files can be downloaded into the correct directories off the distribution. The function update-allegro downloads patch files and places them in the correct locations.

There are various kinds of patch files.

Start with the README file in the ftp://ftp.franz.com/pub/patches directory if you are accessing patches via FTP. On the Web site, choose Support, then click on the link to patches and follow the instructions.

4.3 Further patch information

Note the following points.

4.4 Should you get all patches?

Whether or not you should get all available patches depends on your current tolerance for instability. Because patches are less well tested than releases, patches may occasionally introduce errors as well as fix problems.

However, even a correct patch may introduce instability: if a patch enables a feature which was previously ignored or signals an error (correctly) where none was previously signaled, your code may fail because the patch uncovered a problem which was previously unnoticed. Suppose, for example, a patch causes certain declarations to be used during compilation (without the patch they are ignored). Such a patch would not fix a bug (since ignoring declarations is permitted) but if your code happened to contain incorrect declarations, then the patch would be destabilizing. (Without the patch, the wrong declarations were ignored and so did not harm. With the patch, they are used.)

The potential impact of a patch is given in the LOG file in the patch directory. Here are two entries from the 5.0 patch LOG (the 6.0 patch LOG file will be organized similarly):

   Mon Sep 14 11:27:52 PDT 1998
   Patch: update/p0a001.001
   Fixes a bug where find-restarts, when given the optional condition 
   argument, would not consider restarts that are not associated with 
   any condition.
   Impact: Should be minor

   Tue Sep 1 14:33:29 PDT 1998
   Patch: update/p0b002.001
   Fixes self tail recursive call with intermixed args. 
   Problem resulted in errors in compiled code, 
   not in interpreted.
   Impact: Recommended.

Notice the Impact line (made bold for empasis). It provides an assessment of how destabilizing a patch may be. Note that in these cases, one is minor and the other patch (which fixes a problem where compiled code ran incorrectly) is recommended.

If you are in a development cycle, our advice is to get all available patches for their platform (machine type) and Allegro CL version. Patches for associated products (such as CLIM) should be included as well.

But if you are preparing a delivery, we advise you to be selective, perhaps getting only the patches that deal with problems you report.

Note that we have previously advised even users who are developing applications rather than preparing for delivery to only include patches when they experienced the problem fixed by the patch. There are pluses and minuses to each recommendation. While including all patches gives you all available fixes, as we said above, patches are not as well tested as releases and sometimes a patch introduces a new problem or bug. However, we have changed our advice for when you are developing because many patches are for performance, and therefore generally useful, and because problems introduced by patches, while they do happen, are uncommon and are usually fixed quite quickly (typically with an updated patch), and because it is relatively easy to back out a patch if it causes problems.

Note that the report created by dribble-bug lists all patches included in the image. It is very important that this information be included with a bug report.

4.5 What to do with patches when you have downloaded them

update-allegro downloads patches but does not create new images. To create new images, exit Lisp (if you are running it) and run update.sh on UNIX machines and update.bat on Windows machines. These scripts will update all Allegro-supplied image (dxl) files by starting Lisp with the dxl file and calling build-lisp-image. They also make backups of the the dxl files. You must recreate any image files you created yourself.

Note on backups of dxl files: the first time update.sh/bat is run, the dxl files are copied to files with `orig' added -- mlisp.dxl to mlisporig.dxl, e.g. The second time, they are copied with `old' added -- mlisp.dxl to mlispold.dxl, e.g. On subsequent runs, the backup may not be done correctly. Please move *old.dxl to *oldn.dxl (for some n) before updated to ensure that the backups are done correctly.

Backing out of patches: you may occasionally discover that a patched image does not work properly. (Perhaps the patch was faulty, or perhaps the fix, whatever it is, interacts incorrectly with your application.) The back out of patches, (1) rename the new dxl files, (2) copy the original dxl files (they will have "old" or "orig" appended to their filenames) to their original names, and (3) rename any new fasl files in the code/ subdirectory. If there is a backup of the fasl file, give it its original name. (If there is not, then prior to updating, the version in the bundle file is used). You are now back to where you were before running update.sh or update.bat.

5.0 Reporting bugs

Before reporting a bug, please study this document and the ANSI CL Standard document.

A report that such and such happened is generally of limited value in determining the cause of a problem. It is very important for us to know what happened before the error occurred: what you typed in, what Allegro CL typed out. A verbatim log may be needed. If you are able to localize the bug and reliably duplicate it with a minimal amount of code, it will greatly expedite repairs.

It is much easier to find a bug that is generated when a single isolated function is applied than a bug that is generated somewhere when an enormous application is loaded. Although we are intimately familiar with Allegro CL, you are familiar with your application and the context in which the bug was observed. Context is also important in determining whether the bug is really in Allegro CL or in something that it depends on, such as the operating system.

To this end, we request that your reports to us of bugs or of suspected bugs include the following information. If any of the information is missing, it is likely to delay or complicate our response.

Use dribble-bug as follows. Entering

(excl:dribble-bug filename)

causes implementation and version information to be written to the file specified by filename, and then records the Lisp session in the same file. Exiting Lisp or entering

(dribble)

will close the file after the bug has been exhibited. The following dialogue provides a rudimentary template for the kernel of a bug report.

USER(5) (dribble-bug "bug.dribble")
USER(6) ;; Now duplicate your bug . . .
USER(7) (dribble)

Send bug reports to either the electronic mail or postal address given in 5.1 Where to report bugs and send questions. We will investigate the report and inform you of its resolution in a timely manner.

Important note about dribble-bug: its log does not capture things printed by the operating system or by operating system utilities. These messages may be important. Please be sure you include them in the message.

5.1 Where to report bugs and send questions

Send problem reports and technical questions of any type by email to bugs@franz.com. Our mailing address is Franz Inc., Suite 275, 1995 University Ave., Berkeley CA 94704 USA; and our telephone number (in the USA) is +510-548-3600.

6.0 Contacting Franz Inc. for sales, licensing assistance, and information

Sales and licensing questions should be directed to your account manager. If you are not already a customer (and thus do not yet have an acocunt manager), send email to info@franz.com, or call Franz Inc. (in Berkeley, California, USA) at +1 510-548-3600, or send regular mail to Franz Inc., Suite 275, 1995 University Ave., Berkeley CA 94704 USA. Please give your email address, phone number, and mailing address. The appropriate Acocunt Manager will contact you.

If you are already a customer, you should have the name and email address of your account manager, but if they are not to hand, use the genral ones given just above.

General product information is available on the Franz Inc. web site, http://www.franz.com/. You can get additional information by contacting us. Again, send email to info@franz.com or call +1 510-548-3600 or write to Franz Inc., Suite 275, 1995 University Ave., Berkeley CA 94704 USA.

Copyright (c) 1998-2000, Franz Inc. Berkeley, CA., USA. All rights reserved. Created 2000.10.5.