This is the source code for babel
, the Treaty of Babel analysis tool. Babel
performs all the fundamental operations for dealing with the features offered by the treaty, and serves as a flexible multi-tool for analyzing and working with treaty-compliant files.
Namely, babel
:
- extracts metadata from story files
- extracts cover art from story files
- determines the format of a story file
- determines the IFID of a story file
- verifies the correctness of iFiction metadata
- bundles story files, metadata, and cover art together in the blorb format
Babel
is also a portable C API for accessing the functionality provided by the treaty.
Included with the babel
source is a suite of programs intended to extend babel
's functionality and help users start taking advantage of the benefits provided by the treaty.
The babel suite includes:
babel-get
: Fetches metadata and cover art from a variety of sourcesbabel-list
: Demo program to describe all story files in a directoryifiction-aggregate
: Combine multiple iFiction files into oneifiction-xtract
: Search metadata for a named valuebabel-cache.pl
: Build a cache of metadata and cover art for your story file collectionbabel-marry.pl
: Encapsulate your story collection with its metadatasimple-marry
: Simplified babel-marry for windows usersbabel-wed.pl
: Find and merge a story file with its metadata (also available as windows executable)
Parts of babel
are intended for use in other programs. When adapting
babel
's source, the files babel.c
, babel_story_functions.c
and
babel_ifiction_functions.c
will probably not prove useful. However, you
may wish to use babel_handler
, which provides a framework for loading a
story file, selecting the proper treaty modules, and seamlessly handling
blorb-wrapped files.
To build babel
:
- compile all the source files in this directory
- link them together
- the end
For folks who find makefiles more useful than generalizations, there is a
makefile provided for babel
. The makefile is currently configured for
Borland's 32-bit C compiler. Comment out those lines and uncomment the block
which follows for gcc.
To compile babel-get
, first compile babel
, then do the same thing in the
babel-get
directory.
To compile ifiction-aggregate
, ifiction-xtract
, babel-list
, and simple-marry
,
first compile babel
, then compile the relevant C file in the extras/
directory
(These may rely on #include
files from the babel
directory, so, for example,
to compile ifiction-aggregate, gcc -c -I.. ifiction-aggregate.c
), then link the
object file to the babel
and ifiction
libraries (babel.lib
and ifiction.lib
under Windows, babel.a
and ifiction.a
most everywhere else. eg.
gcc -o ifiction-aggregate ifiction-aggregate.o ../babel.a ../ifiction.a
)
Babel
is intended to accept contributions in the form of treaty modules
as defined by the Treaty of Babel Appendix.
These modules should use the declarations made in treaty.h
.
The file treaty_builder.h
generates a generic framework which simplifies
the task of writing treaty modules. Its use is not required for treaty
compliance, but it should prove useful.
Most of this code is (c) 2006-2010 by L. Ross Raszewski
The following files are public domain:
- zcode.c
- glulx.c
- executable.c
- level9.c
- magscrolls.c
- agt.c
- hugo.c
- advsys.c
- misc.c
- alan.c
- adrift.c
- html.c
- treaty.h
- treaty_builder.h
The following files are Copyright (C) 1999, 2000, 2002 Aladdin Enterprises:
- md5.c
- md5.h
And are used in accordance with their licenses.
The following files are Copyright 2006 by Emily Short:
- test/bronze/Bronze.zblorb
All other files are (c) 2006 by L. Ross Raszewski and are released under the Creative Commons Attribution 4.0 License.
To view a copy of this license, visit https://creativecommons.org/licenses/by/4.0/ or send a letter to
Creative Commons,
PO Box 1866,
Mountain View, CA 94042, USA.