aboutsummaryrefslogtreecommitdiffstats
path: root/bindings
diff options
context:
space:
mode:
Diffstat (limited to 'bindings')
-rw-r--r--bindings/clx/Sword.pas211
-rw-r--r--bindings/flatapi.cpp259
-rw-r--r--bindings/gsoap/gsoapsword.cpp142
-rw-r--r--bindings/swig/Makefile21
-rw-r--r--bindings/swig/Makefile.swig578
-rw-r--r--bindings/swig/listkey.i91
-rw-r--r--bindings/swig/swconfig.i42
-rw-r--r--bindings/swig/swmgr.i41
-rw-r--r--bindings/swig/swmodule.i99
-rw-r--r--bindings/swig/sword.i50
-rw-r--r--bindings/swig/sword.pl101
11 files changed, 1635 insertions, 0 deletions
diff --git a/bindings/clx/Sword.pas b/bindings/clx/Sword.pas
new file mode 100644
index 0000000..239f932
--- /dev/null
+++ b/bindings/clx/Sword.pas
@@ -0,0 +1,211 @@
+unit Sword;
+
+interface
+ function SWMgr_getPrefixPath(h: integer): PChar; cdecl; external 'libsword.so';
+ function SWMgr_new: integer; cdecl; external 'libsword.so';
+ procedure SWMgr_delete(h: integer); cdecl; external 'libsword.so';
+ function SWMgr_getModulesIterator(h: integer) : integer; cdecl; external 'libsword.so';
+ function SWMgr_getModuleByName(h: integer; name: PChar) : integer; cdecl; external 'libsword.so';
+
+ procedure ModList_iterator_next(h: integer); cdecl; external 'libsword.so';
+ function ModList_iterator_val(h: integer) : integer; cdecl; external 'libsword.so';
+
+ function SWModule_getType(h: integer) : PChar; cdecl; external 'libsword.so';
+ function SWModule_getName(h: integer) : PChar; cdecl; external 'libsword.so';
+ function SWModule_getDescription(h: integer) : PChar; cdecl; external 'libsword.so';
+ function SWModule_getStripText(h: integer) : PChar; cdecl; external 'libsword.so';
+ function SWModule_getRenderText(h: integer) : PChar; cdecl; external 'libsword.so';
+ function SWModule_getKeyText(h: integer) : PChar; cdecl; external 'libsword.so';
+ procedure SWModule_setKeyText(h: integer; key: PChar); cdecl; external 'libsword.so';
+ procedure SWModule_begin(h: integer); cdecl; external 'libsword.so';
+ procedure SWModule_next(h: integer); cdecl; external 'libsword.so';
+ procedure SWModule_previous(h: integer); cdecl; external 'libsword.so';
+type
+
+ SWModule = class(TObject)
+ private
+ handle : integer;
+ public
+ constructor Create(handle : integer);
+ function getType : String;
+ function getName : String;
+ function getDescription : String;
+ function getStripText : String;
+ function getRenderText : WideString;
+ function getKeyText : String;
+ procedure setKeyText(keyText : String);
+ procedure modBegin;
+ procedure modNext;
+ procedure modPrevious;
+ end;
+
+
+ ModIterator = class(TObject)
+ private
+ handle : integer;
+ public
+ constructor Create(handle : integer);
+ procedure next;
+ function getValue : SWModule;
+ end;
+
+
+ SWMgr = class(TObject)
+ private
+ handle : integer;
+ public
+ constructor Create;
+ destructor Destroy; override;
+ function getPrefixPath : String;
+ function getModulesIterator : ModIterator;
+ function getModuleByName(name: String) : SWModule;
+ end;
+
+implementation
+
+constructor SWMgr.Create;
+var
+ yohan : integer;
+begin
+ yohan := SWMgr_new;
+ handle := yohan;
+end;
+
+
+destructor SWMgr.Destroy;
+begin
+ SWMgr_delete(handle);
+end;
+
+
+function SWMgr.getPrefixPath() : String;
+var
+ stuff : String;
+ pstuff : PChar;
+begin
+ pstuff := SWMgr_getPrefixPath(handle);
+ stuff := String(pstuff);
+ Result := stuff;
+end;
+
+
+function SWMgr.getModulesIterator : ModIterator;
+begin
+ Result := ModIterator.Create(SWMgr_getModulesIterator(handle));
+end;
+
+function SWMgr.getModuleByName(name: String) : SWModule;
+var
+ modHandle : Integer;
+
+begin
+ modHandle := SWMgr_getModuleByName(handle, PChar(name));
+ if (modHandle <> 0) then
+ Result := SWModule.Create(modHandle)
+ else Result := nil;
+end;
+
+
+
+
+{ ModIterator methods --------------------------------------------- }
+
+
+constructor ModIterator.Create(handle : integer);
+begin
+ Self.handle := handle;
+end;
+
+
+procedure ModIterator.next;
+begin
+ ModList_iterator_next(handle);
+end;
+
+
+function ModIterator.getValue : SWModule;
+var
+ modHandle : Integer;
+
+begin
+ modHandle := ModList_iterator_val(handle);
+ if (modHandle <> 0) then
+ Result := SWModule.Create(modHandle)
+ else Result := nil;
+end;
+
+
+
+
+
+{ SWModule methods --------------------------------------------- }
+
+
+constructor SWModule.Create(handle : integer);
+begin
+ Self.handle := handle;
+end;
+
+
+function SWModule.getType : String;
+begin
+ Result := String(SWModule_getType(handle));
+end;
+
+
+function SWModule.getName : String;
+begin
+ Result := String(SWModule_getName(handle));
+end;
+
+
+function SWModule.getDescription : String;
+begin
+ Result := String(SWModule_getDescription(handle));
+end;
+
+
+function SWModule.getStripText : String;
+begin
+ Result := String(SWModule_getStripText(handle));
+end;
+
+
+function SWModule.getRenderText : WideString;
+begin
+ Result := WideString(SWModule_getRenderText(handle));
+end;
+
+
+function SWModule.getKeyText : String;
+begin
+ Result := String(SWModule_getKeyText(handle));
+end;
+
+
+procedure SWModule.setKeyText(keyText: String);
+begin
+ SWModule_setKeyText(handle, PChar(keyText));
+end;
+
+
+procedure SWModule.modBegin;
+begin
+ SWModule_begin(handle);
+end;
+
+
+procedure SWModule.modNext;
+begin
+ SWModule_next(handle);
+end;
+
+
+procedure SWModule.modPrevious;
+begin
+ SWModule_previous(handle);
+end;
+
+end.
+
+
diff --git a/bindings/flatapi.cpp b/bindings/flatapi.cpp
new file mode 100644
index 0000000..9208c13
--- /dev/null
+++ b/bindings/flatapi.cpp
@@ -0,0 +1,259 @@
+/******************************************************************************
+ * swordapi.cpp - This file contains an api usable by non-C++ windows
+ * environments
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+#include <rawtext.h>
+#include <rawcom.h>
+#include <rawld.h>
+#include <strkey.h>
+#include <listkey.h>
+#include <versekey.h>
+#include <swmgr.h>
+#include <markupfiltmgr.h>
+
+#include "flatapi.h"
+
+
+//-----------------------------------------------------------------
+// SWMgr methods
+//
+extern "C" SWHANDLE SWMgr_new() {
+ return (SWHANDLE) new SWMgr(new MarkupFilterMgr());
+}
+
+
+// SWConfig *, SWConfig *, bool, SWFilterMgr *
+SWHANDLE SWMgr_newEx(SWHANDLE hiconfig, SWHANDLE hisysconfig, char autoload, SWHANDLE hfilterMgr) {
+ SWConfig *iconfig = (SWConfig *)hiconfig;
+ SWConfig *isysconfig = (SWConfig *)hisysconfig;
+ SWFilterMgr *filterMgr = (SWFilterMgr *)hfilterMgr;
+
+ return (SWHANDLE) new SWMgr(iconfig, isysconfig, autoload, filterMgr);
+}
+
+
+void SWMgr_delete(SWHANDLE hmgr) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ if (mgr)
+ delete mgr;
+}
+
+
+SWHANDLE SWMgr_getConfig(SWHANDLE hmgr) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ return (mgr) ? (SWHANDLE)mgr->config : 0;
+}
+
+
+SWHANDLE SWMgr_getModulesIterator(SWHANDLE hmgr) {
+ static ModItType it;
+
+ SWMgr *mgr = (SWMgr *)hmgr;
+ if (mgr) {
+ it.it = mgr->Modules.begin();
+ it.end = mgr->Modules.end();
+ }
+ return (SWHANDLE)&it;
+}
+
+
+SWHANDLE SWMgr_getModuleByName(SWHANDLE hmgr, const char *name) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ return (mgr) ? (SWHANDLE) mgr->Modules[name] : 0;
+}
+
+
+const char *SWMgr_getPrefixPath(SWHANDLE hmgr) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ return (mgr) ? mgr->prefixPath : 0;
+}
+
+
+const char *SWMgr_getConfigPath(SWHANDLE hmgr) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ return (mgr) ? mgr->configPath : 0;
+}
+
+
+void SWMgr_setGlobalOption(SWHANDLE hmgr, const char *option, const char *value) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ if (mgr)
+ mgr->setGlobalOption(option, value);
+}
+
+
+const char *SWMgr_getGlobalOption(SWHANDLE hmgr, const char *option) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ return (mgr) ? (const char *)mgr->getGlobalOption(option) : 0;
+}
+
+
+const char *SWMgr_getGlobalOptionTip(SWHANDLE hmgr, const char *option) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ return (mgr) ? (const char *)mgr->getGlobalOptionTip(option) : 0;
+}
+
+
+// ret: forward_iterator
+SWHANDLE SWMgr_getGlobalOptionsIterator(SWHANDLE hmgr) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ static OptionsList::iterator it;
+
+ if (mgr)
+ it = mgr->getGlobalOptions().begin();
+ return (SWHANDLE)&it;
+}
+
+
+// ret: forward_iterator
+SWHANDLE SWMgr_getGlobalOptionValuesIterator(SWHANDLE hmgr, const char *option) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ static OptionsList::iterator it;
+
+ if (mgr)
+ it = mgr->getGlobalOptionValues(option).begin();
+ return (SWHANDLE)&it;
+}
+
+
+void SWMgr_setCipherKey(SWHANDLE hmgr, const char *modName, const char *key) {
+ SWMgr *mgr = (SWMgr *)hmgr;
+ if (mgr)
+ mgr->setCipherKey(modName, key);
+}
+
+
+//-----------------------------------------------------------------
+// SWModule methods
+
+// static void nullPercent (char percent, void *userData);
+void SWModule_terminateSearch(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ if (module)
+ module->terminateSearch = true;
+}
+
+// SWModule (const const char *imodname = 0, const const char *imoddesc = 0, SWDisplay * idisp = 0, const char *imodtype = 0, SWTextEncoding encoding = ENC_UNKNOWN, SWTextDirection dir = DIRECTION_LTR, SWTextMarkup markup = FMT_UNKNOWN, const char* modlang = 0);
+// virtual ~ SWModule ();
+
+ /** Gets and clears error status
+ *
+ * @return error status
+ */
+char SWModule_error(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (module) ? module->Error() : 0;
+}
+
+
+int SWModule_getEntrySize(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (module) ? module->getEntrySize() : 0;
+}
+
+
+void SWModule_setKeyText(SWHANDLE hmodule, const char *key) {
+ SWModule *module = (SWModule *)hmodule;
+ if (module)
+ module->Key(key);
+}
+
+// virtual char SetKey (const SWKey &ikey);
+// virtual SWKey & Key () const {
+
+const char *SWModule_getKeyText(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (const char *)((module) ? module->KeyText() : 0);
+}
+
+
+// virtual char Display ();
+// virtual SWDisplay *Disp (SWDisplay * idisp = 0);
+
+const char *SWModule_getName(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (const char *)((module) ? module->Name() : 0);
+}
+
+
+const char *SWModule_getDescription(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (const char *)((module) ? module->Description() : 0);
+}
+
+
+const char *SWModule_getType(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (const char *)((module) ? module->Type() : 0);
+}
+
+
+void SWModule_previous(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ if (module)
+ (*module)--;
+}
+
+
+void SWModule_next(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ if (module)
+ (*module)++;
+}
+
+
+void SWModule_begin(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ if (module)
+ (*module) = TOP;
+}
+
+
+const char *SWModule_getStripText(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (const char *)((module) ? module->StripText() : 0);
+}
+
+
+const char *SWModule_getRenderText(SWHANDLE hmodule) {
+ SWModule *module = (SWModule *)hmodule;
+ return (const char *)((module) ? module->RenderText() : 0);
+}
+
+
+
+//-----------------------------------------------------------------
+// stringlist_iterator methods
+
+void stringlist_iterator_next(SWHANDLE hsli) {
+ OptionsList::iterator *sli = (OptionsList::iterator *)hsli;
+ (*sli)++;
+}
+
+
+const char *stringlist_iterator_val(SWHANDLE hsli) {
+ OptionsList::iterator *sli = (OptionsList::iterator *)hsli;
+ return (const char *)(*sli)->c_str();
+}
+
+
+
+//-----------------------------------------------------------------
+// modmap methods
+
+void ModList_iterator_next(SWHANDLE hmmi) {
+ ModItType *it = (ModItType *)hmmi;
+ if (it->it != it->end)
+ it->it++;
+}
+
+
+SWHANDLE ModList_iterator_val(SWHANDLE hmmi) {
+ ModItType *it = (ModItType *)hmmi;
+ return (it->it != it->end) ? (SWHANDLE)it->it->second : 0;
+}
+
diff --git a/bindings/gsoap/gsoapsword.cpp b/bindings/gsoap/gsoapsword.cpp
new file mode 100644
index 0000000..57eff23
--- /dev/null
+++ b/bindings/gsoap/gsoapsword.cpp
@@ -0,0 +1,142 @@
+#include "soapH.h"
+#include <flatapi.h>
+#include <swmgr.h>
+#include <markupfiltmgr.h>
+
+
+SWMgr *mgr;
+
+int sword__ModList_iterator_next(xsd__int hmmi, xsd__int &noop) {
+ ModList_iterator_next(hmmi);
+ return SOAP_OK;
+}
+
+int sword__ModList_iterator_val(xsd__int hmmi, xsd__int &hmodule) {
+ hmodule = ModList_iterator_val(hmmi);
+ return SOAP_OK;
+}
+
+int sword__SWMgr_new(xsd__int &retVal) {
+ retVal = SWMgr_new();
+ return SOAP_OK;
+}
+
+int sword__SWMgr_delete(xsd__int hmgr, xsd__int &noop) {
+ SWMgr_delete(hmgr);
+ return SOAP_OK;
+}
+
+int sword__SWMgr_getModulesIterator(xsd__int hmgr, xsd__int &hmodIterator) {
+ hmodIterator = SWMgr_getModulesIterator(hmgr);
+ return SOAP_OK;
+}
+
+int sword__SWMgr_getModuleByName(xsd__int hmgr, xsd__string name, xsd__int &hmodule) {
+ hmodule = SWMgr_getModuleByName(hmodule, name);
+ return SOAP_OK;
+}
+
+
+
+int sword__SWModule_getName(xsd__int hmodule, xsd__string &name) {
+ name = (char *)SWModule_getName(hmodule);
+ return SOAP_OK;
+}
+
+int sword__SWModule_getDescription(xsd__int hmodule, xsd__string &description) {
+ description = (char *)SWModule_getDescription(hmodule);
+ return SOAP_OK;
+}
+
+
+int sword__Quick_getModuleRawEntry(xsd__string modName, xsd__string modKey, xsd__string &modText) {
+ SWModule *mod = mgr->Modules[modName];
+ if (mod) {
+ mod->SetKey(modKey);
+ modText = mod->getRawEntry();
+ }
+ return SOAP_OK;
+}
+
+
+int sword__Quick_setModuleRawEntry(xsd__string modName, xsd__string modKey, xsd__string modText, xsd__int &noop) {
+ SWModule *mod = mgr->Modules[modName];
+ if (mod) {
+ mod->SetKey(modKey);
+ (*mod) << modText;
+ }
+ return SOAP_OK;
+}
+
+
+int sword__Quick_getModuleRenderText(xsd__string modName, xsd__string modKey, xsd__string &modText) {
+ SWModule *mod = mgr->Modules[modName];
+ if (mod) {
+ mod->SetKey(modKey);
+ modText = (char *)mod->RenderText();
+ }
+ return SOAP_OK;
+}
+
+
+int sword__Quick_getJScriptAttribArray(xsd__string modName, xsd__string modKey, xsd__string &arrayText) {
+ SWModule *mod = mgr->Modules[modName];
+ if (mod) {
+ mod->SetKey(modKey);
+ AttributeTypeList::iterator i1;
+ AttributeList::iterator i2;
+ AttributeValue::iterator i3;
+ int l1, l2, l3;
+ char lbuf1[20], lbuf2[20], lbuf3[20];
+ static string retVal = "";
+ retVal = "var entryAttribs = new Array();\n";
+ string l1keys = "entryAttribs[0] = new Array(";
+ for (l1=0,i1 = target->getEntryAttributes().begin(); i1 != target->getEntryAttributes().end(); i1++,l1++) {
+ sprintf(lbuf1, "%d", l1+1);
+ retVal += "entryAttribs["+lbuf1+"] = new Array();\n";
+ string l2keys = "entryAttribs["+lbuf1+"][0] = new Array(";
+ cout << "[ " << i1->first << " ]\n";
+ for (l2=0,i2 = i1->second.begin(); i2 != i1->second.end(); i2++,l2++) {
+ sprintf(lbuf2, "%d", l2+1);
+ retVal += "entryAttribs["+lbuf1+"]["+lbuf2+"][0] = new Array();\n";
+ string l3keys = "entryAttribs["+lbuf1+"]["+lbuf2+"][0] = new Array(";
+ cout << "\t[ " << i2->first << " ]\n";
+ for (l3=0,i3 = i2->second.begin(); i3 != i2->second.end(); i3++,l3++) {
+ cout << "\t\t" << i3->first << " = " << i3->second << "\n";
+ }
+ }
+ }
+ }
+ return SOAP_OK;
+}
+
+
+
+
+main() {
+
+
+ int m, s;
+ mgr = new SWMgr(new MarkupFilterMgr());
+ m = soap_bind("localhost", 18083, 100);
+ if (m < 0) {
+ soap_print_fault(stderr);
+ exit(-1);
+ }
+ fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
+ for (int i = 1; ; i++) {
+ s = soap_accept();
+ if (s < 0) {
+ soap_print_fault(stderr);
+ exit(-1);
+ }
+ fprintf(stderr, "%d: accepted connection from IP = %d.%d.%d.%d socket = %d", i, (soap_ip<<24)&0xFF, (soap_ip<<16)&0xFF, (soap_ip<<8)&0xFF, soap_ip&0xFF, s);
+ soap_serve(); // process RPC skeletons
+ fprintf(stderr, "request served\n");
+ soap_end(); // clean up everything and close socket
+ }
+ delete mgr;
+}
+
+#include "sword.nsmap"
+
diff --git a/bindings/swig/Makefile b/bindings/swig/Makefile
new file mode 100644
index 0000000..a1dca13
--- /dev/null
+++ b/bindings/swig/Makefile
@@ -0,0 +1,21 @@
+TOP = $(PWD)
+SWIG = swig
+SWIGOPT = -Wall -proxy
+CXXSRCS =
+TARGET = sword
+INTERFACE = sword.i
+LIBS = -lm -lz -lsword
+INCLUDE = -I$(TOP)/../../include/
+
+all::
+ $(MAKE) -f $(TOP)/Makefile.swig CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
+ TARGET='$(TARGET)' SWIGOPT='$(SWIGOPT)' INTERFACE='$(INTERFACE)' LIBS='$(LIBS)' INCLUDE='$(INCLUDE)' perl5_cpp
+
+static::
+ $(MAKE) -f $(TOP)/Makefile.swig CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
+ TARGET='myperl' INTERFACE='$(INTERFACE)' INCLUDE='$INCLUDE' perl5_cpp_static
+
+clean::
+ rm -f *_wrap* *.o *~ *.so myperl *.pyc .~* core
+
+check: all
diff --git a/bindings/swig/Makefile.swig b/bindings/swig/Makefile.swig
new file mode 100644
index 0000000..736488c
--- /dev/null
+++ b/bindings/swig/Makefile.swig
@@ -0,0 +1,578 @@
+# Generated automatically from Makefile.in by configure.
+# ------------------------------------------------------------
+# SWIG Examples Makefile
+#
+# This file is used by the examples to build modules. Assuming
+# you ran configure, this file will probably work. However,
+# it's not perfect so you might need to do some hand tweaking.
+#
+# Other notes:
+#
+# 1. Take a look at the prefixes below. Since SWIG works with
+# multiple target languages, you may need to find out where
+# certain packages have been installed. Set the prefixes
+# accordingly.
+#
+# 2. To use this makefile, simply set SRCS, INTERFACE, INCLUDE, LIBS,
+# TARGET, and do a
+# $(MAKE) -f Makefile.template.in SRCS='$(SRCS)' \
+# INCLUDE='$(INCLUDE) LIBS='$(LIBS)' INTERFACE='$(INTERFACE)' \
+# TARGET='$(TARGET)' method
+#
+# 'method' describes what is being built.
+#---------------------------------------------------------------
+
+TARGET =
+CC = gcc
+CXX = c++
+CFLAGS =
+prefix = /usr/local
+exec_prefix= ${prefix}
+SRCS =
+INCLUDE =
+LIBS =
+INTERFACE =
+SWIGOPT =
+SWIG = swig
+RUNTIMEDIR = $(exec_prefix)/lib
+
+LIBM = -lieee -lm
+LIBC =
+LIBCRYPT = -lcrypt
+SYSLIBS = $(LIBM) $(LIBC) $(LIBCRYPT)
+
+libtool_comp = $(TOP)/../Tools/libtool --mode compile
+libtool_link = $(TOP)/../Tools/libtool --mode link
+
+# X11 options
+
+XLIB = -L/usr/X11R6/lib -lX11
+XINCLUDE = -I/usr/X11R6/include
+
+IWRAP = $(INTERFACE:.i=_wrap.i)
+ISRCS = $(IWRAP:.i=.c)
+ICXXSRCS = $(IWRAP:.i=.cxx)
+IOBJS = $(IWRAP:.i=.o)
+
+##################################################################
+# Dynamic loading for C++
+# If you are going to be building dynamic loadable modules in C++,
+# you may need to edit this line appropriately.
+#
+# This line works for g++, but I'm not sure what it might be
+# for other C++ compilers
+##################################################################
+
+CPP_DLLIBS = #-L/usr/local/lib/gcc-lib/sparc-sun-solaris2.5.1/2.7.2 \
+ -L/usr/local/lib -lg++ -lstdc++ -lgcc
+
+# Solaris workshop 5.0
+# CPP_DLLIBS = -L/opt/SUNWspro/lib -lCrun
+
+# Symbols used for using shared libraries
+SO= .so
+LDSHARED= gcc -shared
+CCSHARED= -fpic
+CXXSHARED= gcc -shared
+
+# This is used for building shared libraries with a number of C++
+# compilers. If it doesn't work, comment it out.
+CXXSHARED= c++ -shared
+
+OBJS = $(SRCS:.c=.o) $(CXXSRCS:.cxx=.o)
+
+##################################################################
+##### Tcl/Tk ######
+##################################################################
+
+# Set these to your local copy of Tcl/Tk.
+
+TCL_INCLUDE =
+TCL_LIB =
+TCL_OPTS = -ldl
+TK_OPTS = -ltk -ltcl -ldl
+
+# Extra Tcl specific dynamic linking options
+TCL_DLNK =
+
+# -----------------------------------------------------------
+# Build a new version of the tclsh shell
+# -----------------------------------------------------------
+
+
+tclsh: $(SRCS)
+ $(SWIG) -tcl8 $(SWIGOPT) $(TCL_SWIGOPTS) -ltclsh.i $(INTERFACE)
+ $(CC) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(TCL_INCLUDE) \
+ $(TCL_LIB) $(TCL_OPTS) $(LIBS) $(SYSLIBS) -o $(TARGET)
+
+tclsh_cpp: $(SRCS)
+ $(SWIG) -tcl8 -c++ $(SWIGOPT) $(TCL_SWIGOPTS) -ltclsh.i $(INTERFACE)
+ $(CXX) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(TCL_INCLUDE) \
+ $(TCL_LIB) $(TCL_OPTS) $(LIBS) $(SYSLIBS) -o $(TARGET)
+
+# -----------------------------------------------------------
+# Build a new copy of wish
+# -----------------------------------------------------------
+
+wish: $(SRCS)
+ $(SWIG) -tcl8 $(SWIGOPT) $(TCL_SWIGOPTS) -lwish.i $(INTERFACE)
+ $(CC) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(TCL_INCLUDE) \
+ $(XINCLUDE) $(TCL_LIB) $(TK_OPTS) $(XLIB) $(LIBS) $(SYSLIBS) -o $(TARGET)
+
+
+wish_cpp: $(SRCS)
+ $(SWIG) -tcl8 -c++ $(SWIGOPT) $(TCL_SWIGOPTS) -lwish.i $(INTERFACE)
+ $(CXX) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(TCL_INCLUDE) \
+ $(XINCLUDE) $(TCL_LIB) $(TK_OPTS) $(XLIB) $(LIBS) $(SYSLIBS) -o $(TARGET)
+
+# -----------------------------------------------------------
+# Build a Tcl dynamic loadable module (you might need to tweak this)
+# -----------------------------------------------------------
+
+tcl: $(SRCS)
+ $(SWIG) -tcl8 $(SWIGOPT) $(TCL_SWIGOPTS) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(TCL_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(TCL_DLNK) $(LIBS) -o $(TARGET)$(SO)
+
+# -----------------------------------------------------------
+# Build a Tcl7.5 dynamic loadable module for C++
+# -----------------------------------------------------------
+
+tcl_cpp: $(SRCS)
+ $(SWIG) -tcl8 -c++ $(SWIGOPT) $(TCL_SWIGOPTS) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(TCL_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(TCL_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+# -----------------------------------------------------------
+# Build a Tcl7.5 dynamic loadable module, linked against SWIG runtime lib
+# -----------------------------------------------------------
+
+TCL_RUNTIME=-L$(RUNTIMEDIR) -lswigtcl8
+
+tcl_multi: $(SRCS)
+ $(SWIG) -c -tcl8 $(SWIGOPT) $(TCL_SWIGOPTS) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(TCL_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(TCL_RUNTIME) $(TCL_DLNK) $(LIBS) -o $(TARGET)$(SO)
+
+tcl_multi_cpp: $(SRCS)
+ $(SWIG) -c -tcl8 -c++ $(SWIGOPT) $(TCL_SWIGOPTS) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(TCL_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(TCL_RUNTIME) $(TCL_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+##################################################################
+##### PERL 5 ######
+##################################################################
+
+# You need to set this variable to the Perl5 directory containing the
+# files "perl.h", "EXTERN.h" and "XSUB.h". With Perl5.003, it's
+# usually something like /usr/local/lib/perl5/arch-osname/5.003/CORE.
+
+PERL5_INCLUDE= /usr/lib/perl5/5.6.1/i586-linux/CORE
+
+# Extra Perl specific dynamic linking options
+PERL5_DLNK =
+
+# ----------------------------------------------------------------
+# Build a Perl5 dynamically loadable module (C)
+# ----------------------------------------------------------------
+
+perl5: $(SRCS)
+ $(SWIG) -perl5 $(SWIGOPT) $(INTERFACE)
+ $(CC) -c -Dbool=char $(CCSHARED) $(CFLAGS) -DSWIG $(SRCS) $(ISRCS) $(INCLUDE) -I$(PERL5_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(PERL5_DLNK) $(LIBS) -o $(TARGET)$(SO)
+
+# ----------------------------------------------------------------
+# Build a Perl5 dynamically loadable module (C++)
+# ----------------------------------------------------------------
+
+perl5_cpp: $(SRCS)
+ $(SWIG) -perl5 -c++ $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) -DSWIG -Dexplicit= $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) -I$(PERL5_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(PERL5_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+# ----------------------------------------------------------------
+# Build a Perl5 dynamically loadable module, linked against SWIG runtime lib
+# ----------------------------------------------------------------
+
+PERL5_RUNTIME=-L$(RUNTIMEDIR) -lswigpl
+
+perl5_multi: $(SRCS)
+ $(SWIG) -c -perl5 $(SWIGOPT) $(INTERFACE)
+ $(CC) -c -DSWIG -Dbool=char $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) -I$(PERL5_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(PERL5_RUNTIME) $(PERL5_DLNK) $(LIBS) -o $(TARGET)$(SO)
+
+perl5_multi_cpp: $(SRCS)
+ $(SWIG) -c -perl5 -c++ $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) -DSWIG -Dexplicit= $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) -I$(PERL5_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(PERL5_RUNTIME) $(PERL5_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+# ----------------------------------------------------------------
+# Build a module from existing XS C source code. (ie. from xsubpp).
+# ----------------------------------------------------------------
+perl5_xs: $(SRCS)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(INCLUDE) -I$(PERL5_INCLUDE)
+ $(LDSHARED) $(OBJS) $(LIBS) -o $(TARGET)$(SO)
+
+# ----------------------------------------------------------------
+# Build a statically linked Perl5 executable
+# ----------------------------------------------------------------
+
+PERL5_LIB = -L$(PERL5_INCLUDE) -lperl.so -ldl $(SYSLIBS)
+
+perl5_static: $(SRCS)
+ $(SWIG) -perl5 -static -lperlmain.i $(SWIGOPT) $(INTERFACE)
+ $(CC) $(CFLAGS) -Dbool=char $(SRCS) $(ISRCS) $(INCLUDE) -I$(PERL5_INCLUDE) $(PERL5_LIB) $(LIBS) -o $(TARGET)
+
+perl5_static_cpp: $(SRCS)
+ $(SWIG) -perl5 -c++ -static -lperlmain.i $(SWIGOPT) $(INTERFACE)
+ $(CXX) $(CFLAGS) -Dexplicit= $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) -I$(PERL5_INCLUDE) $(PERL5_LIB) $(LIBS) -o $(TARGET)
+
+
+##################################################################
+##### PYTHON ######
+##################################################################
+
+# Make sure these locate your Python installation
+PYTHON_INCLUDE= -DHAVE_CONFIG_H
+PYTHON_LIB =
+
+# Extra Python specific dynamic linking options
+PYTHON_DLNK =
+
+# ----------------------------------------------------------------
+# Build a C dynamically loadable module
+# ----------------------------------------------------------------
+
+python: $(SRCS)
+ $(SWIG) -python $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) $(PYTHON_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(PYTHON_DLNK) $(LIBS) -o $(TARGET)module$(SO)
+
+# -----------------------------------------------------------------
+# Build a C++ dynamically loadable module
+# -----------------------------------------------------------------
+
+python_cpp: $(SRCS)
+ $(SWIG) -c++ -python $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) $(PYTHON_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(PYTHON_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)module$(SO)
+
+# -----------------------------------------------------------------
+# Build a dynamically loadable module, linked against SWIG Runtime lib
+# -----------------------------------------------------------------
+
+PYTHON_RUNTIME=-L$(RUNTIMEDIR) -lswigpy
+
+python_multi: $(SRCS)
+ $(SWIG) -c -python $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) $(PYTHON_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(PYTHON_RUNTIME) $(PYTHON_DLNK) $(LIBS) -o $(TARGET)module$(SO)
+
+python_multi_cpp: $(SRCS)
+ $(SWIG) -c -c++ -python $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) $(PYTHON_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(PYTHON_RUNTIME) $(PYTHON_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)module$(SO)
+
+
+# -----------------------------------------------------------------
+# Build statically linked Python interpreter
+#
+# These should only be used in conjunction with the %include embed.i
+# library file
+# -----------------------------------------------------------------
+
+#TKINTER = -L/usr/X11R6.3/lib -L/usr/local/compat/lib -ltk4.0 -ltcl7.4 -lX11
+TKINTER =
+PYTHON_LIBOPTS = -lpython2.2 -ldl $(TKINTER) $(SYSLIBS)
+
+python_static: $(SRCS)
+ $(SWIG) -python -lembed.i $(SWIGOPT) $(INTERFACE)
+ $(CC) $(CFLAGS) -Xlinker -export-dynamic $(ISRCS) $(SRCS) $(INCLUDE) \
+ $(PYTHON_INCLUDE) $(LIBS) -L$(PYTHON_LIB) $(PYTHON_LIBOPTS) -o $(TARGET)
+
+python_static_cpp: $(SRCS)
+ $(SWIG) -c++ -python -lembed.i $(SWIGOPT) $(INTERFACE)
+ $(CXX) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) \
+ $(PYTHON_INCLUDE) $(LIBS) -L$(PYTHON_LIB) $(PYTHON_LIBOPTS) -o $(TARGET)
+
+# -----------------------------------------------------------------
+# Cleaning the python examples
+# -----------------------------------------------------------------
+
+python_clean:
+ rm -f *_wrap* *.o *~ *$(SO) mypython *.pyc .~* core
+
+##################################################################
+##### GUILE ######
+##################################################################
+
+# Make sure these locate your Guile installation
+GUILE_INCLUDE =
+GUILE_LIB =
+
+# ----------------------------------------------------------------
+# Build a C dynamically loadable module
+# ----------------------------------------------------------------
+
+guile: $(SRCS)
+ $(SWIG) -guile -Linkage ltdlmod $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(INCLUDE) $(GUILE_INCLUDE) $(ISRCS) $(SRCS)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(LIBS) -o lib$(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build a C++ dynamically loadable module
+# -----------------------------------------------------------------
+
+guile_cpp: $(SRCS)
+ $(SWIG) -c++ -guile -Linkage ltdlmod $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(INCLUDE) $(GUILE_INCLUDE) $(ICXXSRCS) $(SRCS) $(CXXSRCS)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o lib$(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build a dynamically loadable module with passive linkage
+# -----------------------------------------------------------------
+
+guile_passive: $(SRCS)
+ $(SWIG) -guile -Linkage passive $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(INCLUDE) $(GUILE_INCLUDE) $(ISRCS) $(SRCS)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(LIBS) -o lib$(TARGET)$(SO)
+
+guile_passive_cpp: $(SRCS)
+ $(SWIG) -c++ -guile -Linkage passive $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(INCLUDE) $(GUILE_INCLUDE) $(ICXXSRCS) $(SRCS) $(CXXSRCS)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o lib$(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build a dynamically loadable module with passive linkage,
+# linked against SWIG runtime lib
+# -----------------------------------------------------------------
+
+GUILE_RUNTIME=-L$(RUNTIMEDIR) -lswigguile
+
+guile_passive_multi: $(SRCS)
+ $(SWIG) -c -guile -Linkage passive $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(INCLUDE) $(GUILE_INCLUDE) $(ISRCS) $(SRCS)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(GUILE_RUNTIME) $(LIBS) -o lib$(TARGET)$(SO)
+
+guile_passive_multi_cpp: $(SRCS)
+ $(SWIG) -c -c++ -guile -Linkage passive $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(INCLUDE) $(GUILE_INCLUDE) $(ICXXSRCS) $(SRCS) $(CXXSRCS)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(GUILE_RUNTIME) $(LIBS) $(CPP_DLLIBS) -o lib$(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build statically linked Guile interpreter
+# -----------------------------------------------------------------
+
+GUILE_LIBOPTS = -ldl $(SYSLIBS)
+
+guile_static: $(SRCS)
+ $(SWIG) -guile -lguilemain.i -Linkage ltdlmod $(SWIGOPT) $(INTERFACE)
+ $(CC) $(CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) \
+ -DSWIGINIT="SCM scm_init_$(TARGET)_module(void); scm_init_$(TARGET)_module();" \
+ $(GUILE_INCLUDE) $(LIBS) -L$(GUILE_LIB) $(GUILE_LIBOPTS) -o $(TARGET)-guile
+
+guile_static_cpp: $(SRCS)
+ $(SWIG) -c++ -guile -lguilemain.i -Linkage ltdlmod $(SWIGOPT) $(INTERFACE)
+ $(CXX) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) \
+ -DSWIGINIT="SCM scm_init_$(TARGET)_module(void); scm_init_$(TARGET)_module();" \
+ $(GUILE_INCLUDE) $(LIBS) -L$(GUILE_LIB) $(GUILE_LIBOPTS) -o $(TARGET)-guile
+
+guile_simple: $(SRCS)
+ $(SWIG) -guile -lguilemain.i -Linkage simple $(SWIGOPT) $(INTERFACE)
+ $(CC) $(CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) \
+ $(GUILE_INCLUDE) $(LIBS) -L$(GUILE_LIB) $(GUILE_LIBOPTS) -o $(TARGET)-guile
+
+guile_simple_cpp: $(SRCS)
+ $(SWIG) -c++ -guile -lguilemain.i -Linkage simple $(SWIGOPT) $(INTERFACE)
+ $(CXX) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) \
+ $(GUILE_INCLUDE) $(LIBS) -L$(GUILE_LIB) $(GUILE_LIBOPTS) -o $(TARGET)-guile
+
+##################################################################
+##### JAVA ######
+##################################################################
+
+# You need to set this variable to the java directories containing the
+# files "jni.h" and "md.h"
+# usually something like /usr/java/include and /usr/java/include/<arch-osname>.
+JAVA_INCLUDE=
+
+# Extra Java specific dynamic linking options
+JAVA_DLNK =
+JAVALIBPREFIX = lib
+
+# ----------------------------------------------------------------
+# Build a java dynamically loadable module (C)
+# ----------------------------------------------------------------
+
+java: $(SRCS)
+ $(SWIG) -java $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(JAVA_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(JAVA_DLNK) $(LIBS) -o $(JAVALIBPREFIX)$(TARGET)$(SO)
+
+# ----------------------------------------------------------------
+# Build a java dynamically loadable module (C++)
+# ----------------------------------------------------------------
+
+java_cpp: $(SRCS)
+ $(SWIG) -java -c++ $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(JAVA_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(JAVA_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(JAVALIBPREFIX)$(TARGET)$(SO)
+
+# ----------------------------------------------------------------
+# Build a java dynamically loadable module
+# ----------------------------------------------------------------
+
+java_multi: $(SRCS)
+ $(SWIG) -java $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(JAVA_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(JAVA_DLNK) $(LIBS) -o $(JAVALIBPREFIX)$(TARGET)$(SO)
+
+java_multi_cpp: $(SRCS)
+ $(SWIG) -java -c++ $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(JAVA_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(JAVA_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(JAVALIBPREFIX)$(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Cleaning the java examples
+# -----------------------------------------------------------------
+
+java_clean:
+ mv main.java main.java.tmp
+ rm -f *_wrap* *.o core *~ *$(SO) *.class *.java
+ mv main.java.tmp main.java
+
+##################################################################
+##### MZSCHEME ######
+##################################################################
+
+MZC = test -n "" &&
+
+# ----------------------------------------------------------------
+# Build a C/C++ dynamically loadable module
+# ----------------------------------------------------------------
+
+mzscheme: $(SRCS)
+ $(SWIG) -mzscheme $(SWIGOPT) $(INTERFACE)
+ $(MZC) ++ccf "$(INCLUDE)" --cc $(ISRCS) $(SRCS)
+ $(MZC) --ld $(TARGET)$(SO) $(OBJS) $(IOBJS)
+
+mzscheme_cpp: $(SRCS)
+ $(SWIG) -mzscheme -c++ $(SWIGOPT) $(INTERFACE)
+ $(MZC) ++ccf "$(INCLUDE)" --cc $(ICXXSRCS) $(SRCS) $(CXXSRCS)
+ $(MZC) --ld $(TARGET)$(SO) $(OBJS) $(IOBJS) $(CPP_DLLIBS)
+
+# ----------------------------------------------------------------
+# Build a dynamically loadable module, linked against SWIG runtime
+# ----------------------------------------------------------------
+
+MZSCHEME_RUNTIME=-L$(RUNTIMEDIR) -lswigmz
+
+mzscheme_multi: $(SRCS)
+ $(SWIG) -c -mzscheme $(SWIGOPT) $(INTERFACE)
+ $(MZC) ++ccf "$(INCLUDE)" --cc $(ISRCS) $(SRCS)
+ $(MZC) --ld $(TARGET)$(SO) $(OBJS) $(IOBJS) $(MZSCHEME_RUNTIME)
+
+mzscheme_multi_cpp: $(SRCS)
+ $(SWIG) -c -mzscheme -c++ $(SWIGOPT) $(INTERFACE)
+ $(MZC) ++ccf "$(INCLUDE)" --cc $(ICXXSRCS) $(SRCS) $(CXXSRCS)
+ $(MZC) --ld $(TARGET)$(SO) $(OBJS) $(IOBJS) $(MZSCHEME_RUNTIME) $(CPP_DLLIBS)
+
+##################################################################
+##### RUBY ######
+##################################################################
+
+# Make sure these locate your Ruby installation
+RUBY_CFLAGS= -DHAVE_CONFIG_H
+RUBY_INCLUDE= -I/usr/local/lib/ruby/1.4/arch
+RUBY_LIB = /usr/local/lib/ruby/1.4/arch
+RUBY_DLNK =
+
+# ----------------------------------------------------------------
+# Build a C dynamically loadable module
+# ----------------------------------------------------------------
+
+ruby: $(SRCS)
+ $(SWIG) -ruby $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(RUBY_CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) $(RUBY_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(RUBY_DLNK) $(LIBS) -o $(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build a C++ dynamically loadable module
+# -----------------------------------------------------------------
+
+ruby_cpp: $(SRCS)
+ $(SWIG) -c++ -ruby $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(RUBY_CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) $(RUBY_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(RUBY_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build a dynamically loadable module, linked against SWIG runtime lib
+# -----------------------------------------------------------------
+
+RUBY_RUNTIME=-L$(RUNTIMEDIR) -lswigrb
+
+ruby_multi: $(SRCS)
+ $(SWIG) -c -ruby $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(RUBY_CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) $(RUBY_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(RUBY_RUNTIME) $(RUBY_DLNK) $(LIBS) -o $(TARGET)$(SO)
+
+ruby_multi_cpp: $(SRCS)
+ $(SWIG) -c -c++ -ruby $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(RUBY_CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) $(RUBY_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(RUBY_RUNTIME) $(RUBY_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+# -----------------------------------------------------------------
+# Build statically linked Ruby interpreter
+#
+# These should only be used in conjunction with the %include embed.i
+# library file
+# -----------------------------------------------------------------
+
+RUBY_LIBOPTS = -lruby -lm -ldl $(SYSLIBS)
+
+ruby_static: $(SRCS)
+ $(SWIG) -ruby -lembed.i $(SWIGOPT) $(INTERFACE)
+ $(CC) $(CFLAGS) $(RUBY_CFLAGS) -Xlinker -export-dynamic $(ISRCS) $(SRCS) $(INCLUDE) \
+ $(RUBY_INCLUDE) $(LIBS) -L$(RUBY_LIB) $(RUBY_LIBOPTS) -o $(TARGET)
+
+ruby_cpp_static: $(SRCS)
+ $(SWIG) -c++ -ruby -lembed.i $(SWIGOPT) $(INTERFACE)
+ $(CXX) $(CFLAGS) $(RUBY_CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) \
+ $(RUBY_INCLUDE) $(LIBS) -L$(RUBY_LIB) $(RUBY_LIBOPTS) -o $(TARGET)
+
+
+# -------------------------------------------------------------------
+# Build a PHP4 dynamically loadable module (C)
+# -------------------------------------------------------------------
+
+PHP4_INCLUDE =
+
+php4: $(SRCS)
+ $(SWIG) -php4 $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(ISRCS) $(INCLUDE) $(PHP4_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(LIBS) -o $(TARGET)$(SO)
+
+# --------------------------------------------------------------------
+# Build a PHP4 dynamically loadable module (C++)
+# --------------------------------------------------------------------
+
+php4_cpp: $(SRCS)
+ $(SWIG) -php4 -c++ $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(SRCS) $(CXXSRCS) $(ICXXSRCS) $(INCLUDE) $(PHP4_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)$(SO)
+
+# ---------------------------------------------------------------------
+# Build a dynamically loadable module, linked against SWIG Runtime lib
+# ---------------------------------------------------------------------
+
+PHP4_RUNTIME=-L$(RUNTIMEDIR) -lswigphp4
+
+php4_multi: $(SRCS)
+ $(SWIG) -c -php4 $(SWIGOPT) $(INTERFACE)
+ $(CC) -c $(CCSHARED) $(CFLAGS) $(ISRCS) $(SRCS) $(INCLUDE) $(PHP4_INCLUDE)
+ $(LDSHARED) $(OBJS) $(IOBJS) $(PHP4_RUNTIME) $(PHP4_DLNK) $(LIBS) -o $(TARGET)module$(SO)
+
+php4_multi_cpp: $(SRCS)
+ $(SWIG) -c -c++ -php4 $(SWIGOPT) $(INTERFACE)
+ $(CXX) -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(SRCS) $(CXXSRCS) $(INCLUDE) $(PHP4_INCLUDE)
+ $(CXXSHARED) $(OBJS) $(IOBJS) $(PHP4_RUNTIME) $(PHP4_DLNK) $(LIBS) $(CPP_DLLIBS) -o $(TARGET)module$(SO)
diff --git a/bindings/swig/listkey.i b/bindings/swig/listkey.i
new file mode 100644
index 0000000..945621f
--- /dev/null
+++ b/bindings/swig/listkey.i
@@ -0,0 +1,91 @@
+%{
+#include "listkey.h"
+%}
+
+class ListKey : public SWKey {
+public:
+ /** initializes instance of ListKey
+ *
+ * @param ikey text key
+ */
+ ListKey (const char *ikey = 0);
+ ListKey (ListKey const &k);
+
+ /** Cleans up instance of ListKey
+ */
+ virtual ~ ListKey ();
+
+ virtual SWKey *clone () const;
+
+ /** Clears out elements of list
+ */
+ virtual void ClearList ();
+
+ /** Returns number of elements in list
+ * @return number of elements in list
+ */
+ virtual int Count ();
+
+ /** Removes current element from list
+ */
+ virtual void Remove ();
+
+ /** Sets key to element number
+ *
+ * @param ielement element number to set to
+ * @return error status
+ */
+ //virtual char SetToElement (int ielement, SW_POSITION = TOP);
+%extend {
+ virtual char SetToElement(int element) {
+ self->SetToElement(element, TOP);
+ };
+}
+
+ /** Gets a key element number
+ *
+ * @param pos element number to get (or default current)
+ * @return Key or null on error
+ */
+ virtual SWKey* GetElement (int pos = -1);
+
+ /** Adds an element to the list
+ * @param ikey the element to add
+ */
+ //ListKey & operator << (const SWKey &ikey);
+ virtual void add(const SWKey &ikey);
+
+ /** Equates this ListKey to another ListKey object
+ *
+ * @param ikey other ListKey object
+ */
+ virtual void copyFrom(const ListKey & ikey);
+ //virtual void copyFrom(const SWKey & ikey) { SWKey::copyFrom(ikey); }
+
+ /** Positions this key
+ *
+ * @param p position
+ * @return *this
+ */
+ virtual void setPosition(SW_POSITION);
+
+ /** Decrements a number of elements
+ */
+ virtual void decrement(int step);
+
+ /** Increments a number of elements
+ */
+ virtual void increment(int step);
+
+ virtual char Traversable ();
+ virtual long Index () const;
+
+ /**
+ * Returns the index for the new one given as as parameter.
+ * The first parameter is the new index.
+ */
+ virtual long Index (long index);
+
+ //SWKEY_OPERATORS
+ //ListKey & operator =(const ListKey &key) { copyFrom(key); return *this; }
+};
diff --git a/bindings/swig/swconfig.i b/bindings/swig/swconfig.i
new file mode 100644
index 0000000..a934ffc
--- /dev/null
+++ b/bindings/swig/swconfig.i
@@ -0,0 +1,42 @@
+%{
+ #include <stdio.h>
+ #include <string>
+ #include <map>
+ #include <defs.h>
+ #include <multimapwdef.h>
+
+ #include "swconfig.h"
+%}
+
+%include "stl.i"
+%include "std_vector.i"
+%include "std_string.i"
+%include "typemaps.i"
+
+
+typedef multimapwithdefault < string, string, less < string > > ConfigEntMap;
+typedef map < string, ConfigEntMap, less < string > > SectionMap;
+
+class SWConfig {
+public:
+ //member data
+ string filename;
+ SectionMap Sections;
+
+ //member functions
+ SWConfig(const char *ifilename);
+ virtual ~ SWConfig();
+
+ virtual void Load();
+ virtual void Save();
+
+%extend {
+ void set(const char* group, const char* entry, const char* value) {
+ self->Sections[group][entry] = value;
+ };
+ const char* get(const char* group, const char* entry) {
+ return self->Sections[group][entry].c_str();
+ };
+}
+
+};
diff --git a/bindings/swig/swmgr.i b/bindings/swig/swmgr.i
new file mode 100644
index 0000000..a50c8fe
--- /dev/null
+++ b/bindings/swig/swmgr.i
@@ -0,0 +1,41 @@
+%{
+#include <swmgr.h>
+%}
+
+typedef map < string, SWModule *, less < string > > ModMap;
+typedef list < string > OptionsList;
+typedef map < string, SWFilter * > FilterMap;
+
+class SWMgr {
+public:
+//member data
+ static bool debug;
+ static const char *globalConfPath;
+ static void findConfig (char *configType, char **prefixPath, char **configPath);
+
+ SWConfig *config;
+ SWConfig *sysconfig;
+ ModMap Modules;
+ char *prefixPath;
+ char *configPath;
+
+//member functions
+ SWMgr (SWConfig* iconfig = 0, SWConfig* isysconfig = 0, bool autoload = true, SWFilterMgr* filterMgr = 0);
+// SWMgr (SWFilterMgr *filterMgr);
+// SWMgr (const char *iConfigPath, bool autoload = true, SWFilterMgr *filterMgr = 0);
+ virtual ~SWMgr();
+
+ virtual signed char Load ();
+ virtual void setGlobalOption (const char *option, const char *value);
+ virtual const char *getGlobalOption (const char *option);
+ virtual const char *getGlobalOptionTip (const char *option);
+ virtual OptionsList getGlobalOptions ();
+ virtual OptionsList getGlobalOptionValues (const char *option);
+ virtual signed char setCipherKey (const char *modName, const char *key);
+
+%extend {
+ SWModule* module(const char* modulename) {
+ return self->Modules[modulename];
+ };
+}
+};
diff --git a/bindings/swig/swmodule.i b/bindings/swig/swmodule.i
new file mode 100644
index 0000000..f65fd1b
--- /dev/null
+++ b/bindings/swig/swmodule.i
@@ -0,0 +1,99 @@
+%{
+ #include "swmodule.h"
+%}
+
+class SWModule {
+public:
+ bool terminateSearch;
+
+ SWModule (const char *imodname = 0, const char *imoddesc = 0, SWDisplay * idisp = 0, char *imodtype = 0, SWTextEncoding encoding = ENC_UNKNOWN, SWTextDirection dir = DIRECTION_LTR, SWTextMarkup markup = FMT_UNKNOWN, const char* modlang = 0);
+ virtual char Error();
+ virtual const bool isUnicode() const;
+ virtual const ConfigEntMap& getConfig() const;
+ virtual const char *getConfigEntry(const char *key) const;
+
+ virtual char SetKey (const SWKey *ikey);
+ virtual SWKey& Key() const;
+ virtual SWKey *CreateKey ();
+ virtual const char* KeyText(const char *imodtype = 0);
+ virtual char Display();
+
+//Search functions
+ static void nullPercent (char percent, void *userData);
+ virtual ListKey & Search (const char *istr, int searchType = 0, int flags = 0, SWKey * scope = 0, bool * justCheckIfSupported = 0, void (*percent) (char, void *) = &nullPercent, void *percentUserData = 0);
+ virtual signed char createSearchFramework();
+ virtual bool hasSearchFramework();
+ virtual bool isSearchOptimallySupported (const char *istr, int searchType, int flags, SWKey * scope);
+
+//navigation functions
+%extend {
+ const bool next() {
+ (*self)++;
+ return !self->Error();
+ };
+ const bool prev() {
+ (*self)--;
+ return !self->Error();
+ };
+ const bool inc(const int howFar) {
+ (*self)+=howFar;
+ return !self->Error();
+ };
+ const bool dec(const int howFar) {
+ (*self)-=howFar;
+ return !self->Error();
+ };
+ void setPosition(SW_POSITION pos) {
+ (*self) = pos;
+ };
+ void top() {
+ (*self) = TOP;
+ };
+ void bottom() {
+ (*self) = BOTTOM;
+ };
+}
+
+//data functions
+%extend {
+ const char* text() {
+ return (const char*)*self;
+ };
+ const char* StripText() {
+ return self->StripText();
+ };
+}
+
+ virtual char *getRawEntry();
+
+ virtual void setSkipConsecutiveLinks(bool val);
+ virtual bool getSkipConsecutiveLinks();
+ virtual AttributeTypeList &getEntryAttributes() const;
+ virtual void processEntryAttributes(bool val) const;
+ virtual bool isProcessEntryAttributes() const;
+
+//module info functions
+ virtual char* Name (const char *imodname = 0);
+ virtual char* Description (const char *imoddesc = 0);
+ virtual char* Type (const char *imodtype = 0);
+ virtual char Direction(signed char newdir = -1);
+ virtual char Encoding(signed char enc = -1);
+ virtual char Markup(signed char enc = -1);
+ virtual char* Lang (const char *imodlang = 0);
+
+//write interface
+ virtual bool isWritable ();
+ static signed char createModule (const char *);
+ virtual SWModule& setentry (const char *inbuf, long len);
+ virtual void deleteEntry ();
+
+%extend {
+ void write(const char* text) {
+ (*self)<<text;
+ };
+
+ void writeLink(const SWKey* key) {
+ (*self)<<key;
+ };
+}
+};
diff --git a/bindings/swig/sword.i b/bindings/swig/sword.i
new file mode 100644
index 0000000..1ae1f8a
--- /dev/null
+++ b/bindings/swig/sword.i
@@ -0,0 +1,50 @@
+/** @mainpage
+* This is the API documentation of the SWIG interface to Sword!<BR>
+* The interface contains the most useful classes of Sword to read, navigate and create/write modules. The SWIG intreface is interesting
+* for all who want to write Perl/PHP/Phyton/Ruby/TCL/Java code using the Sword library.<BR>
+* My aim is to support all who do so much work for the Sword project (Troy, Chris and all the others) and to make their work more easy with the SWIG interface.
+* The interface tries to use the function names of the Sword C++ API, but since operators are not (yet) supported in SWIG there are some additions to the functions, the operators can't be used.<BR>
+* Here are the basic classes you should know of:
+* @ref SWMgr, SWModule, SWKey, VerseKey and SWConfig.
+*/
+
+%module sword
+%{
+#undef bool
+#undef assert
+#undef LOCAL
+#undef list
+%}
+
+%include "swconfig.i"
+%include "swmgr.i"
+%include "swmodule.i"
+
+%include "swkey.i"
+%include "versekey.i"
+%include "listkey.i"
+%include "treekey.i"
+%include "treekeyidx.i"
+
+%include "localemgr.i"
+%include "swfiltermgr.i"
+
+%include "swtext.i"
+%include "rawtext.i"
+%include "ztext.i"
+
+%include "swcom.i"
+%include "rawcom.i"
+%include "zcom.i"
+
+%include "swgenbook.i"
+%include "rawgenbook.i"
+
+%include "swld.i"
+%include "rawld.i"
+%include "rawld4.i"
+%include "zld.i"
+
+%include "swcompress.i"
+%include "lzsscompress.i"
+%include "zipcompress.i"
diff --git a/bindings/swig/sword.pl b/bindings/swig/sword.pl
new file mode 100644
index 0000000..969424d
--- /dev/null
+++ b/bindings/swig/sword.pl
@@ -0,0 +1,101 @@
+#!/usr/bin/perl
+
+use sword;
+
+print "Version (should be 1.0): " , $sword::VERSION , "\n";
+
+print "Create SWConfig object!\n";
+$config = new sword::SWConfig("test.conf");
+
+print "Load\n";
+$config->Load();
+
+print "Set value ... ";
+print $config->set("Group", "Entry", "Value");
+print " finished \n";
+
+print "Get value ... ";
+print $config->get("Group", "Entry");
+print " finished \n";
+
+$config->Save();
+
+#testing SWMgr
+$localemgr = sword::LocaleMgr::systemLocaleMgr();
+$localemgr->setDefaultLocaleName("de");
+
+$mgr = new sword::SWMgr();
+$module = $mgr->module("GerLut1545-temp");
+print "Printing WEB Module information: \n";
+print "Name:\t", $module->Name(),"\nDescription:\t", $module->Description(), "\nLang:\t", $module->Lang(), "\n";
+
+$key = new sword::VerseKey("Matthew 3:16");
+$key->setPersist(1);
+$module->SetKey($key);
+
+for ($i = 0; $i < 15; $i++) {
+ print "(", $module->KeyText() ,")\t", $module->StripText(), "\n";
+ $key->next();
+}
+$key->increment(103);
+print "(", $module->KeyText() ,")\t", $module->StripText(), "\n";
+
+#testing write interface
+$key->setText("John 3:16");
+#$module->SetKey($key);
+$module->write("This is a test entry! This tests the write abilities of the Sword Perl classes");
+print "(", $module->KeyText() ,")\t", $module->StripText(), "\n";
+
+print "Seraching for God: ";
+$list = $module->Search("Gott");
+print $list->Count(), " entries found!\n";
+#for ( $i = 0; $i < $list->Count(); $i++) {
+# print "(", $i, ")\t", $list->GetElement()->getText(), "\n";
+# $list->next();
+#}
+
+print "Creating new module! Writing search result...";
+#sword::RawText::createModule("/usr/share/sword/modules/texts/ztext/testmodule/");
+#$newmod = new sword::RawText("/usr/share/sword/modules/texts/ztext/testmodule/");
+
+#$key->setText("Genesis 1:1");
+$newkey = $key->clone();
+#$newmod->SetKey($newkey);
+#
+#for ($i = 0; $i < $list->Count(); $i++, $list->next()) {
+# $key->setText($list->GetElement()->getText());
+# $newkey->setText($list->GetElement()->getText());
+#
+# $newmod->write( $module->StripText() );
+#}
+
+print "Now create the LD module\n";
+
+ mkdir("ldmod");
+sword::zText::createModule("ldmod/",4);
+
+print "first step}\n";
+
+$newmod = new sword::zText("ldmod/");
+
+print "Created module;\n";
+
+$newkey = $newmod->CreateKey();
+$newkey->setPersist(1);
+$newkey->setText(" ");
+$module->SetKey($newkey);
+
+print "Loop! \n";
+
+for ($i = 0; $i < $list->Count(); $i++) {
+ print $list->GetElement()->getText() . "\n";
+
+ $key->setText($list->GetElement()->getText());
+ $newkey->setText($list->GetElement()->getText());
+
+ $newmod->SetKey($newkey);
+
+ $newmod->write( $module->StripText() );
+ $list->next();
+}
+