krb5 commit: Remove profile Tcl tests

Greg Hudson <[email protected]>
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/4e186b2789b3613362845b126bf386fa89c26709
commit 4e186b2789b3613362845b126bf386fa89c26709
Author: Greg Hudson <[email protected]>
Date:   Wed May 26 02:09:43 2021 -0400

    Remove profile Tcl tests

 .github/workflows/build.yml     |    2 +-
 .gitignore                      |    1 -
 doc/build/options2configure.rst |   11 -
 doc/notice.rst                  |   10 -
 src/Makefile.in                 |    1 -
 src/aclocal.m4                  |  230 ---
 src/config/pre.in               |    8 -
 src/configure.ac                |    8 -
 src/util/profile/Makefile.in    |   35 +-
 src/util/profile/deps           |    4 +-
 src/util/profile/prof_test1     |  377 -----
 src/util/profile/profile.swg    |  258 ---
 src/util/profile/profile_tcl.c  | 3369 ---------------------------------------
 13 files changed, 9 insertions(+), 4305 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 4408df8..b7f7d73 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -32,7 +32,7 @@ jobs:
               if: startsWith(matrix.os, 'ubuntu')
               run: |
                 sudo apt-get update -qq
-                sudo apt-get install -y bison gettext keyutils ldap-utils libcmocka-dev libldap2-dev libkeyutils-dev libresolv-wrapper libsasl2-dev libssl-dev python3-kdcproxy python3-pip slapd tcl-dev tcsh
+                sudo apt-get install -y bison gettext keyutils ldap-utils libcmocka-dev libldap2-dev libkeyutils-dev libresolv-wrapper libsasl2-dev libssl-dev python3-kdcproxy python3-pip slapd tcsh
                 pip3 install pyrad
             - name: Build
               env:
diff --git a/.gitignore b/.gitignore
index a316321..45c8bba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -518,7 +518,6 @@ local.properties
 /src/util/profile/modtest.conf
 /src/util/profile/prof_err.[ch]
 /src/util/profile/profile.h
-/src/util/profile/profile_tcl
 /src/util/profile/test?.ini
 /src/util/profile/test_include_dir/
 /src/util/profile/test_load
diff --git a/doc/build/options2configure.rst b/doc/build/options2configure.rst
index aeca87f..8606107 100644
--- a/doc/build/options2configure.rst
+++ b/doc/build/options2configure.rst
@@ -39,12 +39,6 @@ Most commonly used options
     library or fails to pass the tests in ``src/tests/resolv``, you
     will need to use this option.
 
-**-**\ **-with-tcl=**\ *TCLPATH*
-    Some of the unit-tests in the build tree rely upon using a program
-    in Tcl.  The directory specified by *TCLPATH* specifies where the
-    Tcl header file (TCLPATH/include/tcl.h) as well as where the Tcl
-    library (TCLPATH/lib) should be found.
-
 **-**\ **-enable-dns-for-realm**
     Enable the use of DNS to look up a host's Kerberos realm,
     if the information is not provided in
@@ -332,11 +326,6 @@ Optional packages
 **-**\ **-with-lmdb**
     Compile LMDB database backend module.
 
-**-**\ **-with-tcl=**\ *path*
-    Specifies that *path* is the location of a Tcl installation.
-    Tcl is needed for some of the tests run by 'make check'; such tests
-    will be skipped if this option is not set.
-
 **-**\ **-with-vague-errors**
     Do not send helpful errors to client.  For example, if the KDC
     should return only vague error codes to clients.
diff --git a/doc/notice.rst b/doc/notice.rst
index 783e858..1c96e11 100644
--- a/doc/notice.rst
+++ b/doc/notice.rst
@@ -950,16 +950,6 @@ The following notice applies to ``src/util/profile/argv_parse.c`` and
 
 -------------------
 
-The following notice applies to SWIG-generated code in
-``src/util/profile/profile_tcl.c``:
-
-    Copyright |copy| 1999-2000, The University of Chicago
-
-    This file may be freely redistributed without license or fee provided
-    this copyright message remains intact.
-
--------------------
-
 The following notice applies to portiions of ``src/lib/rpc`` and
 ``src/include/gssrpc``:
 
diff --git a/src/Makefile.in b/src/Makefile.in
index 7d2507e..8f14e9b 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -636,7 +636,6 @@ OTHEREXCLUDES = \
 	util/et/com_err.h \
 	util/profile/prof_int.h \
 	util/profile/profile.hin \
-	util/profile/profile_tcl.c \
 	util/support/fnmatch.c \
 	util/verto \
 	util/k5ev
diff --git a/src/aclocal.m4 b/src/aclocal.m4
index 4c30f98..0ea4d18 100644
--- a/src/aclocal.m4
+++ b/src/aclocal.m4
@@ -763,236 +763,6 @@ AC_CHECK_FUNCS(re_comp re_exec regexec)
 AC_REQUIRE([KRB5_AC_NEED_LIBGEN])dnl
 ])dnl
 dnl
-dnl AC_KRB5_TCL_FIND_CONFIG (uses tcl_dir)
-dnl
-AC_DEFUN(AC_KRB5_TCL_FIND_CONFIG,[
-AC_REQUIRE([KRB5_LIB_AUX])dnl
-AC_MSG_CHECKING(for tclConfig.sh)
-dnl On Debian, we might be given --with-tcl=/usr, or tclsh might
-dnl point us to /usr/lib/tcl8.4; either way, we need to find
-dnl /usr/lib/tcl8.4/tclConfig.sh.
-dnl On NetBSD, we might be given --with-tcl=/usr/pkg, or tclsh
-dnl might point us to /usr/pkg/lib/tcl8.4; we need to find
-dnl /usr/pkg/lib/tclConfig.sh.
-if test -r "$tcl_dir/lib/tclConfig.sh" ; then
-  tcl_conf="$tcl_dir/lib/tclConfig.sh"
-elif test -r "$tcl_dir/tclConfig.sh" ; then
-  tcl_conf="$tcl_dir/tclConfig.sh"
-elif test -r "$tcl_dir/../tclConfig.sh" ; then
-  tcl_conf="$tcl_dir/../tclConfig.sh"
-else
-  tcl_conf=
-  lib="$tcl_dir/lib"
-  changequote(<<,>>)dnl
-  for d in "$lib" "$lib"/tcl7.[0-9] "$lib"/tcl8.[0-9] ; do
-    if test -r "$d/tclConfig.sh" ; then
-      tcl_conf="$tcl_conf $d/tclConfig.sh"
-    fi
-  done
-  changequote([,])dnl
-fi
-if test -n "$tcl_conf" ; then
-  AC_MSG_RESULT($tcl_conf)
-else
-  AC_MSG_RESULT(not found)
-fi
-tcl_ok_conf=
-tcl_vers_maj=
-tcl_vers_min=
-old_CPPFLAGS=$CPPFLAGS
-old_LIBS=$LIBS
-old_LDFLAGS=$LDFLAGS
-if test -n "$tcl_conf" ; then
-  for file in $tcl_conf ; do
-    TCL_MAJOR_VERSION=x ; TCL_MINOR_VERSION=x
-    AC_MSG_CHECKING(Tcl info in $file)
-    . $file
-    v=$TCL_MAJOR_VERSION.$TCL_MINOR_VERSION
-    if test -z "$tcl_vers_maj" \
-	|| test "$tcl_vers_maj" -lt "$TCL_MAJOR_VERSION" \
-	|| test "$tcl_vers_maj" = "$TCL_MAJOR_VERSION" -a "$tcl_vers_min" -lt "$TCL_MINOR_VERSION" ; then
-      for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
-	if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
-	  CPPFLAGS="$old_CPPFLAGS -I$incdir"
-	  break
-	fi
-      done
-      LIBS="$old_LIBS `eval echo x $TCL_LIB_SPEC $TCL_LIBS | sed 's/^x//'`"
-      LDFLAGS="$old_LDFLAGS $TCL_LD_FLAGS"
-      AC_LINK_IFELSE(
-        [AC_LANG_PROGRAM(
-          [[#include <tcl.h>
-          ]],
-          [[Tcl_CreateInterp();]])],
-	tcl_ok_conf=$file
-	tcl_vers_maj=$TCL_MAJOR_VERSION
-	tcl_vers_min=$TCL_MINOR_VERSION
-	AC_MSG_RESULT($v - working),
-	AC_MSG_RESULT($v - compilation failed)
-      )
-    else
-      AC_MSG_RESULT(older version $v)
-    fi
-  done
-fi
-CPPFLAGS=$old_CPPFLAGS
-LIBS=$old_LIBS
-LDFLAGS=$old_LDFLAGS
-tcl_header=no
-tcl_lib=no
-if test -n "$tcl_ok_conf" ; then
-  . $tcl_ok_conf
-  TCL_INCLUDES=
-  for incdir in "$TCL_PREFIX/include/tcl$v" "$TCL_PREFIX/include" ; do
-    if test -r "$incdir/tcl.h" -o -r "$incdir/tcl/tcl.h" ; then
-      if test "$incdir" != "/usr/include" ; then
-        TCL_INCLUDES=-I$incdir
-      fi
-      break
-    fi
-  done
-  # Need eval because the first-level expansion could reference
-  # variables like ${TCL_DBGX}.
-  eval TCL_LIBS='"'$TCL_LIB_SPEC $TCL_LIBS $TCL_DL_LIBS'"'
-  TCL_LIBPATH="-L$TCL_EXEC_PREFIX/lib"
-  TCL_RPATH=":$TCL_EXEC_PREFIX/lib"
-  if test "$DEPLIBEXT" != "$SHLIBEXT" && test -n "$RPATH_FLAG"; then
-    TCL_MAYBE_RPATH='$(RPATH_FLAG)'"$TCL_EXEC_PREFIX/lib$RPATH_TAIL"
-  else
-    TCL_MAYBE_RPATH=
-  fi
-  CPPFLAGS="$old_CPPFLAGS $TCL_INCLUDES"
-  AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h is available]) tcl_header=yes)
-  if test $tcl_header=no; then
-     AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h is available]) tcl_header=yes)
-  fi
-  CPPFLAGS="$old_CPPFLAGS"
-  tcl_lib=yes
-else
-  # If we read a tclConfig.sh file, it probably set this.
-  TCL_LIBS=
-fi  
-AC_SUBST(TCL_INCLUDES)
-AC_SUBST(TCL_LIBS)
-AC_SUBST(TCL_LIBPATH)
-AC_SUBST(TCL_RPATH)
-AC_SUBST(TCL_MAYBE_RPATH)
-])dnl
-dnl
-dnl AC_KRB5_TCL_TRYOLD
-dnl attempt to use old search algorithm for locating tcl
-dnl
-AC_DEFUN(AC_KRB5_TCL_TRYOLD, [
-AC_REQUIRE([KRB5_AC_FIND_DLOPEN])
-AC_MSG_WARN([trying old tcl search code])
-if test "$with_tcl" != yes -a "$with_tcl" != no; then
-	TCL_INCLUDES=-I$with_tcl/include
-	TCL_LIBPATH=-L$with_tcl/lib
-	TCL_RPATH=:$with_tcl/lib
-fi
-if test "$with_tcl" != no ; then
-	krb5_save_CPPFLAGS="$CPPFLAGS"
-	krb5_save_LDFLAGS="$LDFLAGS"
-	CPPFLAGS="$CPPFLAGS $TCL_INCLUDES"
-	LDFLAGS="$LDFLAGS $TCL_LIBPATH"
-	tcl_header=no
-	AC_CHECK_HEADER(tcl.h,AC_DEFINE(HAVE_TCL_H,1,[Define if tcl.h found]) tcl_header=yes)
-	if test $tcl_header=no; then
-	   AC_CHECK_HEADER(tcl/tcl.h,AC_DEFINE(HAVE_TCL_TCL_H,1,[Define if tcl/tcl.h found]) tcl_header=yes)
-	fi
-
-	if test $tcl_header = yes ; then
-		tcl_lib=no
-
-		if test $tcl_lib = no; then
-			AC_CHECK_LIB(tcl8.0, Tcl_CreateCommand, 
-				TCL_LIBS="$TCL_LIBS -ltcl8.0 -lm $DL_LIB $LIBS"
-				tcl_lib=yes,,-lm $DL_LIB)
-		fi
-		if test $tcl_lib = no; then
-			AC_CHECK_LIB(tcl7.6, Tcl_CreateCommand, 
-				TCL_LIBS="$TCL_LIBS -ltcl7.6 -lm $DL_LIB $LIBS"
-				tcl_lib=yes,,-lm $DL_LIB)
-		fi
-		if test $tcl_lib = no; then
-			AC_CHECK_LIB(tcl7.5, Tcl_CreateCommand, 
-				TCL_LIBS="$TCL_LIBS -ltcl7.5 -lm $DL_LIB $LIBS"
-				tcl_lib=yes,,-lm $DL_LIB)
-
-		fi
-		if test $tcl_lib = no ; then
-			AC_CHECK_LIB(tcl, Tcl_CreateCommand, 
-				TCL_LIBS="$TCL_LIBS -ltcl -lm $DL_LIB $LIBS"
-				tcl_lib=yes,,-lm $DL_LIB)
-
-		fi
-		if test $tcl_lib = no ; then		
-			AC_MSG_WARN("tcl.h found but not library")
-		fi
-	else
-		AC_MSG_WARN(Could not find Tcl which is needed for the kadm5 tests)
-		TCL_LIBS=
-	fi
-	CPPFLAGS="$krb5_save_CPPFLAGS"
-	LDFLAGS="$krb5_save_LDFLAGS"
-	AC_SUBST(TCL_INCLUDES)
-	AC_SUBST(TCL_LIBS)
-	AC_SUBST(TCL_LIBPATH)
-	AC_SUBST(TCL_RPATH)
-else
-	AC_MSG_RESULT("Not looking for Tcl library")
-fi
-])dnl
-dnl
-dnl AC_KRB5_TCL - determine if the TCL library is present on system
-dnl
-AC_DEFUN(AC_KRB5_TCL,[
-TCL_INCLUDES=
-TCL_LIBPATH=
-TCL_RPATH=
-TCL_LIBS=
-TCL_WITH=
-tcl_dir=
-AC_ARG_WITH(tcl,
-[  --with-tcl=path         where Tcl resides], , with_tcl=try)
-if test "$with_tcl" = no ; then
-  true
-elif test "$with_tcl" = yes -o "$with_tcl" = try ; then
-  tcl_dir=/usr
-  if test ! -r /usr/lib/tclConfig.sh; then
-    cat >> conftest <<\EOF
-puts "tcl_dir=$tcl_library"
-EOF
-    if tclsh conftest >conftest.out 2>/dev/null; then
-      if grep tcl_dir= conftest.out >/dev/null 2>&1; then
-        t=`sed s/tcl_dir=// conftest.out`
-        tcl_dir=$t
-      fi
-    fi # tclsh ran script okay
-  rm -f conftest conftest.out
-  fi # no /usr/lib/tclConfig.sh
-else
-  tcl_dir=$with_tcl
-fi
-if test "$with_tcl" != no ; then
-  AC_KRB5_TCL_FIND_CONFIG
-  if test $tcl_lib = no ; then
-    if test "$with_tcl" != try ; then
-      AC_KRB5_TCL_TRYOLD
-    else
-      AC_MSG_WARN(Could not find Tcl which is needed for some tests)
-    fi
-  fi
-fi
-# If "yes" or pathname, error out if not found.
-if test "$with_tcl" != no -a "$with_tcl" != try ; then
-  if test "$tcl_header $tcl_lib" != "yes yes" ; then
-    AC_MSG_ERROR(Could not find Tcl)
-  fi
-fi
-])dnl
-
-dnl
 dnl WITH_HESIOD
 dnl
 AC_DEFUN(WITH_HESIOD,
diff --git a/src/config/pre.in b/src/config/pre.in
index 3adbc4c..5b648dd 100644
--- a/src/config/pre.in
+++ b/src/config/pre.in
@@ -403,14 +403,6 @@ RUN_VARS=@KRB5_RUN_VARS@
 RUN_TEST=$(RUN_SETUP) KRB5_CONFIG=$(top_srcdir)/config-files/krb5.conf \
     LC_ALL=C $(VALGRIND)
 
-#
-# variables for --with-tcl=
-TCL_LIBS	= @TCL_LIBS@
-TCL_LIBPATH	= @TCL_LIBPATH@
-TCL_RPATH	= @TCL_RPATH@
-TCL_MAYBE_RPATH = @TCL_MAYBE_RPATH@
-TCL_INCLUDES	= @TCL_INCLUDES@
-
 # Crypto and PRNG back-end selections
 CRYPTO_IMPL	= @CRYPTO_IMPL@
 PRNG_ALG	= @PRNG_ALG@
diff --git a/src/configure.ac b/src/configure.ac
index 58bc50b..d815634 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -98,7 +98,6 @@ fi
 # configuration options.
 
 KRB5_LIB_AUX
-AC_KRB5_TCL
 AC_ARG_ENABLE([athena],
 [  --enable-athena         build with MIT Project Athena configuration],,)
 
@@ -924,13 +923,6 @@ AC_CHECK_TYPES([struct rt_msghdr], , , [
 AC_CHECK_SIZEOF([size_t])
 AC_CHECK_TYPES([__int128_t, __uint128_t])
 
-# stuff for util/profile
-
-# AC_KRB5_TCL already done
-DO_TCL=
-test "$TCL_LIBS" != "" && DO_TCL=ok
-AC_SUBST(DO_TCL)
-
 # types libdb2 wants
 
 AC_CHECK_TYPES([ssize_t, u_char, u_int, u_long, u_int8_t, u_int16_t, u_int32_t, int8_t, int16_t, int32_t])
diff --git a/src/util/profile/Makefile.in b/src/util/profile/Makefile.in
index 30f1695..18c6d2d 100644
--- a/src/util/profile/Makefile.in
+++ b/src/util/profile/Makefile.in
@@ -1,14 +1,12 @@
 mydir=util$(S)profile
 BUILDTOP=$(REL)..$(S)..
 SUBDIRS=testmod
-PROG_LIBPATH=-L$(TOPLIBD) $(TCL_LIBPATH) -L.
-PROG_RPATH=$(KRB5_LIBDIR)$(TCL_RPATH)
+PROG_LIBPATH=-L$(TOPLIBD) -L.
 ##DOS##BUILDTOP = ..\..
 ##DOS##OBJFILE=$(OUTPRE)profile.lst
 ##DOS##LIBNAME=$(OUTPRE)profile.lib
 
-LOCALINCLUDES=-I. $(TCL_INCLUDES)
-# for tcl.h
+LOCALINCLUDES=-I.
 DEFINES=-DHAS_STDARG -DLIBDIR=\"$(KRB5_LIBDIR)\"
 
 STLIBOBJS = \
@@ -37,8 +35,7 @@ SRCS = $(srcdir)/prof_tree.c \
 	$(srcdir)/prof_init.c
 
 EXTRADEPSRCS=$(srcdir)/test_load.c $(srcdir)/test_parse.c \
-	$(srcdir)/test_profile.c $(srcdir)/test_vtable.c \
-	$(srcdir)/profile_tcl.c $(srcdir)/t_profile.c
+	$(srcdir)/test_profile.c $(srcdir)/test_vtable.c $(srcdir)/t_profile.c
 
 DEPLIBS = $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB)
 MLIBS = $(COM_ERR_LIB) $(SUPPORT_LIB) $(LIBS)
@@ -120,20 +117,10 @@ prof_err.c: $(srcdir)/prof_err.et
 
 prof_err.o: prof_err.c
 
-# not built by default, but may be useful for testing
-$(srcdir)/profile_tcl.c: profile.swg
-#	(cd $(srcdir) && swig -tcl8 -nosafe -o profile_tcl.c profile.swg)
-profile_tcl.o: $(srcdir)/profile_tcl.c profile.h
-profile_tcl: profile_tcl.o $(PROF_DEPLIB) $(COM_ERR_DEPLIB) $(SUPPORT_DEPLIB)
-	$(CC_LINK) -o profile_tcl profile_tcl.o \
-		$(TCL_MAYBE_RPATH) \
-		-L../et -L../.. -lprofile $(TCL_LIBS) $(MLIBS)
-
 clean-unix:: clean-libs clean-libobjs
 	$(RM) $(PROGS) *.o *~ core prof_err.h profile.h prof_err.c
-	$(RM) test_load test_parse test_profile test_vtable profile_tcl
-	$(RM) t_profile modtest.conf testinc.ini testinc2.ini final.out
-	$(RM) test2* test3*
+	$(RM) test_load test_parse test_profile test_vtable t_profile
+	$(RM) modtest.conf testinc.ini testinc2.ini final.out test2* test3*
 	$(RM) -r test_include_dir
 
 clean-windows::
@@ -146,8 +133,7 @@ check-unix: test_vtable test_load t_profile
 	cp $(srcdir)/test.ini test2.ini
 	$(RUN_TEST) ./t_profile
 
-DO_TCL=@DO_TCL@
-check-unix: check-unix-final check-unix-tcl-$(DO_TCL)
+check-unix: check-unix-final
 
 F1=$(srcdir)/final1.ini
 F2=$(srcdir)/final2.ini
@@ -165,15 +151,6 @@ check-unix-final: test_profile
 	cmp final.out $(srcdir)/final.expected
 	$(RM) final.out
 
-check-unix-tcl-:
-	@echo "+++"
-	@echo "+++ Tcl not available, some profile tests not run."
-	@echo "+++"
-
-check-unix-tcl-ok: profile_tcl
-	cp $(srcdir)/test.ini test2.ini
-	$(RUN_TEST) ./profile_tcl $(srcdir)/prof_test1
-
 check-windows: $(OUTPRE)test_profile.exe $(OUTPRE)test_parse.exe
 	$(RM) $(OUTPRE)*.obj
 	$(OUTPRE)test_parse test.ini
diff --git a/src/util/profile/deps b/src/util/profile/deps
index ce9d959..179f070 100644
--- a/src/util/profile/deps
+++ b/src/util/profile/deps
@@ -52,5 +52,5 @@ test_vtable.so test_vtable.po $(OUTPRE)test_vtable.$(OBJEXT): \
   $(BUILDTOP)/include/autoconf.h $(BUILDTOP)/include/profile.h \
   $(COM_ERR_DEPS) $(top_srcdir)/include/k5-platform.h \
   $(top_srcdir)/include/k5-thread.h test_vtable.c
-profile_tcl.so profile_tcl.po $(OUTPRE)profile_tcl.$(OBJEXT): \
-  $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) profile_tcl.c
+t_profile.so t_profile.po $(OUTPRE)t_profile.$(OBJEXT): \
+  $(BUILDTOP)/include/profile.h $(COM_ERR_DEPS) t_profile.c
diff --git a/src/util/profile/prof_test1 b/src/util/profile/prof_test1
deleted file mode 100644
index fc67571..0000000
--- a/src/util/profile/prof_test1
+++ /dev/null
@@ -1,377 +0,0 @@
-# To do: Should run all tests and return a useful exit status, not
-# punt on the first failure.
-
-set wd [pwd]
-set verbose 0
-
-proc test1 {} {
-    global wd verbose
-    set p [profile_init_path $wd/test2.ini]
-    set sect {{test section 1} child_section child}
-    set iter [profile_iterator_create $p $sect 0]
-    set done 0
-    if $verbose { puts "Iterating over {$sect} entries:" }
-    while {!$done} {
-	set pair [profile_iterator $iter]
-	if [string match $pair {{} {}}] {
-	    set done 1
-	} else {
-	    set val [lindex $pair 1]
-	    if $verbose { puts -nonewline "\t$val" }
-	}
-    }
-    if $verbose { puts "" }
-    profile_iterator_free $iter
-
-    set iter [profile_iterator_create $p $sect 0]
-    set done 0
-    if $verbose { puts "Iterating again, deleting:" }
-    while {!$done} {
-	set pair [profile_iterator $iter]
-	if [string match $pair {{} {}}] {
-	    set done 1
-	} else {
-	    set val [lindex $pair 1]
-	    if $verbose { puts -nonewline "\t$val" }
-	    profile_update_relation $p $sect $val
-	}
-    }
-    if $verbose { puts "" }
-    profile_iterator_free $iter
-    catch {file delete $wd/test3.ini}
-    profile_flush_to_file $p $wd/test3.ini
-    profile_abandon $p
-
-    if $verbose { puts "Reloading new profile" }
-    set p [profile_init_path $wd/test3.ini]
-    set iter [profile_iterator_create $p $sect 0]
-    set done 0
-    if $verbose { puts "Iterating again:" }
-    set found_some 0
-    while {!$done} {
-	set pair [profile_iterator $iter]
-	if [string match $pair {{} {}}] {
-	    set done 1
-	} else {
-	    set found_some 1
-	    set val [lindex $pair 1]
-	    if $verbose { puts -nonewline "\t$val" }
-	}
-    }
-    profile_iterator_free $iter
-    profile_abandon $p
-
-    if {$found_some} {
-	if $verbose { puts "" }
-	puts stderr "Error: Deleting in iterator didn't get them all."
-	exit 1
-    } else {
-	puts "OK: test1: Deleting in iteration got rid of all entries."
-    }
-}
-
-proc test2 {} {
-    global wd verbose
-
-    # lxs said: create A, read A, flush A, read A, create B, read B, crash
-    # (where "create" refers to the object, not the file)
-
-    if $verbose { puts "Running test2" }
-    set c [profile_init_path $wd/test2.ini]
-    # create A
-    set a [profile_init_path $wd/test2.ini]
-    if $verbose { puts "Opened profile $wd/test2.ini" }
-    # read A
-    set x [profile_get_values $a {{test section 1} foo}]
-    if $verbose { puts "Read $x from profile" }
-    if $verbose { puts "updating" }
-    exec sleep 2
-    profile_update_relation $a {{test section 1} foo} [lindex $x 0] [lindex $x 0]
-    set x [profile_get_values $a {{test section 1} foo}]
-    if $verbose { puts "Read $x from profile" }
-    # flush A
-    profile_flush $a
-    # read A again
-    set x [profile_get_values $a {{test section 1} foo}]
-    if $verbose { puts "Read $x from profile" }
-    profile_release $a
-    # create B
-    set b [profile_init_path $wd/test2.ini]
-    if $verbose { puts "Opened profile again" }
-    # read B
-    set x [profile_get_values $b {{test section 1} foo}]
-    if $verbose { puts "Read $x from profile" }
-    # read B
-    set x [profile_get_values $b {{test section 1} foo}]
-    if $verbose { puts "Read $x from profile" }
-    # If we got this far, now what?
-    profile_release $b
-    profile_release $c
-    puts "OK: test2: Modifications don't corrupt existing open handles"
-}
-
-proc test3 {} {
-    # lxs said: Start with a relation in the file.  Open, delete
-    # relation, add relation back, list relations.  In 1.4 release
-    # code, got two back.
-
-    global wd verbose
-
-    exec cp $wd/test2.ini $wd/test1c.ini
-    set p [profile_init_path $wd/test1c.ini]
-    set sect {{test section 1} quux}
-
-    set v [profile_get_values $p $sect]
-    set v1 [lindex $v 0]
-    if $verbose { puts "Old values: $v" }
-    profile_clear_relation $p $sect
-    if $verbose { puts "Cleared." }
-    # profile_get_values raises an exception if no data is there; so if
-    # it succeeds, the test fails.
-    catch {
-	set v [profile_get_values $p $sect]
-	if $verbose { puts "New values: $v" }
-	puts stderr "Error: test3: Clearing relation didn't get rid of all values."
-	exit 1
-    }
-    if $verbose { puts "Adding back $v1 ..." }
-    profile_add_relation $p $sect $v1
-    set v [profile_get_values $p $sect]
-    if $verbose { puts "New values: $v" }
-    if [llength $v]!=1 {
-	puts stderr "Error: test3: Adding one entry after clearing relation leaves [llength $v] entries."
-	exit 1
-    }
-    profile_abandon $p
-    file delete $wd/test1c.ini
-    puts "OK: test3: Clearing relation and adding one entry yields correct count."
-}
-
-# Exercise the include and includedir directives.
-proc test4 {} {
-    global wd verbose
-
-    # Test expected error message when including nonexistent file.
-    catch [file delete $wd/testinc.ini]
-    exec echo "include does-not-exist" >$wd/testinc.ini
-    catch { profile_init_path $wd/testinc.ini } err
-    if $verbose { puts "Got error message $err" }
-    if ![string equal $err "Included profile file could not be read"] {
-	puts stderr "Error: test4: Did not get expected error when including nonexistent file."
-	exit 1
-    }
-
-    # Test expected error message when including nonexistent directory.
-    catch [file delete $wd/testinc.ini]
-    exec echo "includedir does-not-exist" >$wd/testinc.ini
-    catch { profile_init_path $wd/testinc.ini } err
-    if $verbose { puts "Got error message $err" }
-    if ![string equal $err "Included profile directory could not be read"] {
-	puts stderr "Error: test4: Did not get expected error when including nonexistent directory."
-	exit 1
-    }
-
-    # Test including a file.
-    catch [file delete $wd/testinc.ini]
-    exec echo "include $wd/test2.ini" >$wd/testinc.ini
-    set p [profile_init_path $wd/testinc.ini]
-    set x [profile_get_values $p {{test section 1} bar}]
-    if $verbose { puts "Read $x from included profile" }
-    if ![string equal [lindex $x 0] "foo"] {
-	puts stderr "Error: test4: Did not get expected result from included profile."
-	exit 1
-    }
-    profile_release $p
-
-    # Test including a directory.  Put four copies of test2.ini inside
-    # the directory, two with invalid names.  Check that we get two
-    # values for one of the variables.
-    catch [file delete -force $wd/test_include_dir]
-    exec mkdir $wd/test_include_dir
-    exec cp $wd/test2.ini $wd/test_include_dir/a
-    exec cp $wd/test2.ini $wd/test_include_dir/a~
-    exec cp $wd/test2.ini $wd/test_include_dir/b.conf
-    exec cp $wd/test2.ini $wd/test_include_dir/b.conf.rpmsave
-    catch [file delete $wd/testinc.ini]
-    exec echo "includedir $wd/test_include_dir" >$wd/testinc.ini
-    set p [profile_init_path $wd/testinc.ini]
-    set x [profile_get_values $p {{test section 1} bar}]
-    if $verbose { puts "Read $x from included directory" }
-    if ![string equal $x "foo foo"] {
-	puts stderr, "Error: test4: Did not get expected result from included directory."
-	exit 1
-    }
-    profile_release $p
-
-    # Directly list the directory in the profile path and try again.
-    set p [profile_init_path $wd/test_include_dir]
-    set x [profile_get_values $p {{test section 1} bar}]
-    if $verbose { puts "Read $x from directory" }
-    if ![string equal $x "foo foo"] {
-	puts stderr, "Error: test4: Did not get expected result from directory."
-	exit 1
-    }
-    profile_release $p
-
-    puts "OK: test4: include and includedir directives"
-}
-
-proc test5 {} {
-    global wd verbose
-
-    # Test syntactic independence of included profile files.
-    catch [file delete $wd/testinc.ini]
-    set f [open "$wd/testinc.ini" w]
-    puts $f {[sec1]}
-    puts $f "var = {"
-    puts $f "a = 1"
-    puts $f "include testinc2.ini"
-    puts $f "c = 3"
-    puts $f "}"
-    close $f
-    catch [file delete $wd/testinc2.ini]
-    set f [open "$wd/testinc2.ini" w]
-    puts $f {[sec2]}
-    puts $f "b = 2"
-    close $f
-    set p [profile_init_path $wd/testinc.ini]
-    set a [profile_get_values $p {sec1 var a}]
-    set b [profile_get_values $p {sec2 b}]
-    set c [profile_get_values $p {sec1 var c}]
-    if $verbose { puts "Read values [concat $a $b $c] from profile" }
-    if { $a != 1 || $b != 2 || $c != 3 } {
-	puts stderr, "Error: test5: Wrong results from profile"
-	exit 1
-    }
-    profile_release $p
-
-    puts "OK: test5: syntax independence of included files"
-}
-
-proc test6 {} {
-    global wd verbose
-
-    # If a section is deleted and replaced, the new section should be
-    # used when retrieving values.
-    set p [profile_init_path $wd/test2.ini]
-    set sect {{test section 1}}
-    set newrel [concat $sect testkey]
-    set oldrel [concat $sect child]
-    if $verbose { puts "Removing and replacing {$sect}" }
-    profile_rename_section $p $sect
-    profile_add_relation $p $sect
-    if $verbose { puts "Adding {$newrel}" }
-    profile_add_relation $p $newrel 6
-    set x [profile_get_values $p $newrel]
-    if $verbose { puts "Read from new relation {$newrel}: $x" }
-    if { $x != 6 } {
-	puts stderr, "Error: test6: Could not get value from new section"
-	exit 1
-    }
-    if $verbose { puts "Reading old relation {$oldrel} which should be gone" }
-    catch {
-	profile_get_values $p $oldrel
-	puts stderr, "Error: test6: Got value from deleted section"
-	exit 1
-    }
-    profile_abandon $p
-
-    puts "OK: test6: section replacement"
-}
-
-proc test7 {} {
-    global wd verbose
-
-    # A deleted node at the end of a relation's value set should not cause
-    # profile_clear_relation to error, as long as some value is present.
-    set p [profile_init_path $wd/test2.ini]
-    set rel {{test section 1} testkey}
-    if $verbose { puts "Adding values 1 2 at {$rel}" }
-    profile_add_relation $p $rel 1
-    profile_add_relation $p $rel 2
-    if $verbose { puts "Removing value 2 at {$rel}" }
-    profile_update_relation $p $rel 2
-    if $verbose { puts "Clearing values at {$rel}" }
-    profile_clear_relation $p $rel
-    profile_abandon $p
-    puts "OK: test7: profile_clear_relation with deleted node at end"
-}
-
-proc test8 {} {
-    global wd verbose
-
-    # Order of relation operations should be reflected even if some of
-    # the relations were deleted.
-    set p [profile_init_path $wd/test2.ini]
-    set rel {{test section 1} testkey}
-    if $verbose { puts "Adding values 1 2 3 at {$rel}" }
-    profile_add_relation $p $rel 1
-    profile_add_relation $p $rel 2
-    profile_add_relation $p $rel 3
-    if $verbose { puts "Removing values 2 and adding 4 at {$rel}" }
-    profile_update_relation $p $rel 2
-    profile_add_relation $p $rel 4
-    set x [profile_get_values $p $rel]
-    if $verbose { puts "Read values from {$rel}: $x" }
-    if { $x != {1 3 4} } {
-	puts stderr, "Error: test8: Wrong order of values: $x"
-	exit 1
-    }
-    profile_abandon $p
-
-    puts "OK: test8: relation order in the presence of deletions"
-}
-
-proc test9 {} {
-    global wd verbose
-
-    # Regression test for #8431: profile_flush_to_file erroneously
-    # cleared the DIRTY and SHARED flags from the data object, which
-    # could lead to a dangling reference in g_shared_trees on release.
-    set p [profile_init_path $wd/test2.ini]
-    catch {file delete $wd/test3.ini}
-    profile_flush_to_file $p $wd/test3.ini
-    profile_release $p
-
-    # If a dangling reference was created in g_shared_trees, the next
-    # profile open will trigger an assertion failure.
-    set p [profile_init_path $wd/test2.ini]
-    profile_release $p
-
-    puts "OK: test9: profile_flush_to_file with no changes"
-}
-
-proc test10 {} {
-    global wd verbose
-
-    # Regression test for #7863: multiply-specified subsections should
-    # be merged.
-    set p [profile_init_path $wd/test2.ini]
-    set x [profile_get_values $p {{test section 2} child_section2 child}]
-    if $verbose { puts "Read $x from profile" }
-    if ![string equal $x "slick harry {john\tb } ron"] {
-	puts stderr "Error: test10: Did not get expected merged children."
-	exit 1
-    }
-
-    set x [profile_get_string $p {test section 2} child_section2 chores]
-    if $verbose { puts "Read $x from profile" }
-    if ![string equal $x "cleaning"] {
-	puts stderr "Error: test10: Did not find expected chores."
-	exit 1
-    }
-    profile_release $p
-}
-
-test1
-test2
-test3
-test4
-test5
-test6
-test7
-test8
-test9
-test10
-
-exit 0
diff --git a/src/util/profile/profile.swg b/src/util/profile/profile.swg
deleted file mode 100644
index 41c0ec5..0000000
--- a/src/util/profile/profile.swg
+++ /dev/null
@@ -1,258 +0,0 @@
-%{
-/*
- * Copyright 2004, 2008 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, 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, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  Furthermore if you modify this software you must label
- * your software as modified software and not distribute it in such a
- * fashion that it might be confused with the original M.I.T. software.
- * M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- *
- *
- * Input for wrapper generator program SWIG for profile routines.
- */
-#include <errno.h>
-#include "com_err.h"
-#include "profile.h"
-
-#ifdef SWIGTCL
-/* Reduce warnings about cast discarding const to just this one, from
-   every SWIG-generated call to Tcl_SetResult.  */
-static void my_tcl_setresult(Tcl_Interp *i, const char *str, Tcl_FreeProc *f)
-{
-    Tcl_SetResult(i, (char *) str, f);
-}
-#undef Tcl_SetResult
-#define Tcl_SetResult my_tcl_setresult
-#endif
-%}
-
-%include "typemaps.i"
-
-/* These should perhaps be part of the general SWIG package, maybe?  */
-%typemap(in,numinputs=0) SWIGTYPE *OUTPUT ($1_basetype tmp) {
-    /*generic swigtype hack*/ $1 = &tmp;
-}
-%typemap(tcl8,argout) SWIGTYPE *OUTPUT
-  "/*generic swigtype hack*/ Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) *$1, $*1_descriptor,0));";
-%typemap(python,argout) SWIGTYPE *OUTPUT
-  "/*generic swigtype hack*/ resultobj = SWIG_NewPointerObj((void *) *$1, $*1_descriptor,0);";
-
-%module profile
-
-typedef long errcode_t;
-%inline %{
-typedef void **iter_t; /* ick */
-%}
-
-/* As a hack, if we have too much trouble trying to manage output
-   arguments for functions returning error codes, this output argument
-   type will let us twist it around into a function returning the
-   interesting type, and incidentally possibly raising an error.  */
-%typemap(in,numinputs=0) errcode_t * (errcode_t tmp) {
-    /* in errcode_t * */
-    tmp = 0;
-    $1 = &tmp;
-}
-%typemap(tcl8,argout) errcode_t* {
-    /* argout errcode_t * */
-    if (*$1) {
-	/* There could be a memory leak here in the SWIG-Tcl layer,
-	   I'm not sure.  Not going to worry about it though.  */
-	Tcl_SetResult(interp, (char *) error_message(*$1), TCL_STATIC);
-	SWIG_fail;
-    }
-}
-/* returning errcode_t */
-%typemap(tcl8,out) errcode_t {
-    /* out errcode_t $1 */
-    if ($1) {
-	/* There could be a memory leak here in the SWIG-Tcl layer,
-	   I'm not sure.  Not going to worry about it though.  */
-	Tcl_SetResult(interp, (char *) error_message($1), TCL_STATIC);
-	SWIG_fail;
-    }
-}
-%typemap(python,argout) errcode_t* {
-    /* do something with *($1) */ abort();
-}
-%typemap(python,out) errcode_t {
-    /* do something with $1 */ abort();
-}
-
-/* "char **OUTPUT" : Supply a place for the function to stuff one
-   string pointer.  */
-%typemap(in,numinputs=0) char **OUTPUT (char * tmp) {
-    /* in char **OUTPUT */
-    tmp = NULL;
-    $1 = &tmp;
-}
-%typemap(tcl8,argout) char **OUTPUT {
-    /* argout char **OUTPUT */
-/*    Tcl_SetResult(interp, *$1, TCL_DYNAMIC); */
-    char *s = ($1 && *$1) ? *$1 : "";
-    Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp),
-			     Tcl_NewStringObj(s, strlen(s)));
-}
-%typemap(freearg) char **OUTPUT {
-    /* There may be a memory leak here.  Investigate later, if anyone
-       cares.  */
-/*    profile_release_string(*$1); */
-}
-
-/* "char **nullterm" : Null-terminated list of strings, from a single
-   input value which is a list.  */
-%typemap(tcl8,in) char **nullterm {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj($input,NULL), &n, (const char ***) &$1) == TCL_ERROR) SWIG_fail;
-}
-%typemap(tcl8,freearg) char **nullterm {
-    /* freearg char **nullterm */
-    if ($1) { Tcl_Free((char *)$1); $1 = (char **) NULL; }
-}
-
-/* "char ***OUTPUT" : Supply a place for the function to stuff a
-   pointer to a list of strings, which will be combined into a list to
-   return, and the data from the function itself freed before
-   returning.  */
-%typemap(in,numinputs=0) char ***OUTPUT (char ** tmp) {
-    /* in char ***OUTPUT */
-    tmp = NULL;
-    $1 = &tmp;
-}
-%typemap(tcl8,argout) char ***OUTPUT {
-    /* argout char ***OUTPUT */
-    int i;
-    for (i = 0; (*$1)[i]; i++)
-	Tcl_AppendElement(interp, (*$1)[i]);
-}
-%typemap(tcl8,freearg) char ***OUTPUT {
-    /* freearg char ***OUTPUT */
-    profile_free_list(*$1);
-}
-
-typedef struct _profile_t *profile_t;
-
-errcode_t profile_init_path(const char *path = NULL, profile_t *OUTPUT);
-errcode_t profile_init(const char **nullterm = NULL, profile_t *OUTPUT);
-errcode_t profile_flush(profile_t);
-errcode_t profile_flush_to_file(profile_t, const char *path);
-/* Nota bene: There is nothing at all in this code to prevent a script
-   from accessing a profile object after calling one of these routines
-   to destroy it!  */
-void profile_abandon(profile_t);
-void profile_release(profile_t);
-
-errcode_t profile_get_values(profile_t p, const char **nullterm,
-			     char ***OUTPUT);
-
-/* XXX Because of the way this is specified, the default can only be
-   given if you're actually using all three names (e.g., for realm
-   data).  SWIG currently doesn't support a non-optional argument (at
-   the scripting-language level -- the output-only argument doesn't
-   count) after an optional one.  */
-extern errcode_t profile_get_string(profile_t p,
-				    const char *name,
-				    const char *subname,
-				    const char *subsubname = NULL,
-				    const char *defval = NULL,
-				    char **OUTPUT);
-
-errcode_t profile_get_integer(profile_t p,
-			      const char *name,
-			      const char *subname,
-			      const char *subsubname = NULL,
-			      int defval = 0,
-			      int *OUTPUT);
-errcode_t profile_get_boolean(profile_t p,
-			      const char *name,
-			      const char *subname,
-			      const char *subsubname = NULL,
-			      int defval = 0,
-			      int *OUTPUT);
-errcode_t profile_get_relation_names(profile_t p,
-				     const char **nullterm,
-				     char ***OUTPUT);
-errcode_t profile_get_subsection_names(profile_t p,
-				       const char **nullterm,
-				       char ***OUTPUT);
-
-%rename("profile_iterator_create") iter_create;
-%rename("profile_iterator_free") iter_free;
-%inline %{
-static errcode_t iter_create(profile_t p, const char **nullterm,
-			     int flags, iter_t *OUTPUT)
-{
-    iter_t it;
-    errcode_t err;
-    const char **args;
-
-    it = malloc(sizeof(*it));
-    if (it == NULL)
-	return ENOMEM;
-    {
-	/* Memory leak!
-
-	   The profile code seems to assume that I'll keep the string
-	   array around for as long as the iterator is valid; I can't
-	   create the iterator and then throw them away.
-
-	   But right now, I can't be bothered to track the necessary
-	   information to do the cleanup later.  */
-	int count, j;
-	for (count = 0; nullterm[count]; count++) ;
-	args = calloc(count+1, sizeof(char *));
-	if (args == NULL)
-	    return ENOMEM;
-	for (j = 0; j < count; j++) {
-	    args[j] = strdup(nullterm[j]);
-	    if (args[j] == NULL)
-		return ENOMEM;
-	}
-	args[j] = NULL;
-    }
-    err = profile_iterator_create(p, args, flags, it);
-    if (err)
-	free(it);
-    else
-	*OUTPUT = it;
-    return err;
-}
-static void iter_free(iter_t i)
-{
-    profile_iterator_free(i);
-    free(i);
-}
-%}
-errcode_t profile_iterator(iter_t, char **OUTPUT, char **OUTPUT);
-
-
-errcode_t profile_update_relation(profile_t p, const char **nullterm,
-				  const char *oldval,
-				  const char *newval = NULL);
-errcode_t profile_clear_relation(profile_t p, const char **nullterm);
-errcode_t profile_rename_section(profile_t p, const char **nullterm,
-				 const char *new_name = NULL);
-errcode_t profile_add_relation(profile_t p, const char **nullterm,
-			       const char *new_val = NULL);
-/* XXX Should be using profile_free_buffer blah.  */
-errcode_t profile_flush_to_buffer(profile_t p, char **OUTPUT);
-
-#ifdef SWIGTCL
-%include "tclsh.i"
-#endif
diff --git a/src/util/profile/profile_tcl.c b/src/util/profile/profile_tcl.c
deleted file mode 100644
index de61bae..0000000
--- a/src/util/profile/profile_tcl.c
+++ /dev/null
@@ -1,3369 +0,0 @@
-/* ----------------------------------------------------------------------------
- * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 1.3.40
- *
- * This file is not intended to be easily readable and contains a number of
- * coding conventions designed to improve portability and efficiency. Do not make
- * changes to this file unless you know what you are doing--modify the SWIG
- * interface file instead.
- * ----------------------------------------------------------------------------- */
-
-#define SWIGTCL
-
-/* -----------------------------------------------------------------------------
- *  This section contains generic SWIG labels for method/variable
- *  declarations/attributes, and other compiler dependent labels.
- * ----------------------------------------------------------------------------- */
-
-/* template workaround for compilers that cannot correctly implement the C++ standard */
-#ifndef SWIGTEMPLATEDISAMBIGUATOR
-# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
-#  define SWIGTEMPLATEDISAMBIGUATOR template
-# elif defined(__HP_aCC)
-/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
-/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
-#  define SWIGTEMPLATEDISAMBIGUATOR template
-# else
-#  define SWIGTEMPLATEDISAMBIGUATOR
-# endif
-#endif
-
-/* inline attribute */
-#ifndef SWIGINLINE
-# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
-#   define SWIGINLINE inline
-# else
-#   define SWIGINLINE
-# endif
-#endif
-
-/* attribute recognised by some compilers to avoid 'unused' warnings */
-#ifndef SWIGUNUSED
-# if defined(__GNUC__)
-#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#     define SWIGUNUSED __attribute__ ((__unused__))
-#   else
-#     define SWIGUNUSED
-#   endif
-# elif defined(__ICC)
-#   define SWIGUNUSED __attribute__ ((__unused__))
-# else
-#   define SWIGUNUSED
-# endif
-#endif
-
-#ifndef SWIG_MSC_UNSUPPRESS_4505
-# if defined(_MSC_VER)
-#   pragma warning(disable : 4505) /* unreferenced local function has been removed */
-# endif
-#endif
-
-#ifndef SWIGUNUSEDPARM
-# ifdef __cplusplus
-#   define SWIGUNUSEDPARM(p)
-# else
-#   define SWIGUNUSEDPARM(p) p SWIGUNUSED
-# endif
-#endif
-
-/* internal SWIG method */
-#ifndef SWIGINTERN
-# define SWIGINTERN static SWIGUNUSED
-#endif
-
-/* internal inline SWIG method */
-#ifndef SWIGINTERNINLINE
-# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE
-#endif
-
-/* exporting methods */
-#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
-#  ifndef GCC_HASCLASSVISIBILITY
-#    define GCC_HASCLASSVISIBILITY
-#  endif
-#endif
-
-#ifndef SWIGEXPORT
-# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-#   if defined(STATIC_LINKED)
-#     define SWIGEXPORT
-#   else
-#     define SWIGEXPORT __declspec(dllexport)
-#   endif
-# else
-#   if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY)
-#     define SWIGEXPORT __attribute__ ((visibility("default")))
-#   else
-#     define SWIGEXPORT
-#   endif
-# endif
-#endif
-
-/* calling conventions for Windows */
-#ifndef SWIGSTDCALL
-# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
-#   define SWIGSTDCALL __stdcall
-# else
-#   define SWIGSTDCALL
-# endif
-#endif
-
-/* Deal with Microsoft's attempt at deprecating C standard runtime functions */
-#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
-# define _CRT_SECURE_NO_DEPRECATE
-#endif
-
-/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
-#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
-# define _SCL_SECURE_NO_DEPRECATE
-#endif
-
-
-
-#include <stdio.h>
-#include <tcl.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <ctype.h>
-
-/* -----------------------------------------------------------------------------
- * swigrun.swg
- *
- * This file contains generic C API SWIG runtime support for pointer
- * type checking.
- * ----------------------------------------------------------------------------- */
-
-/* This should only be incremented when either the layout of swig_type_info changes,
-   or for whatever reason, the runtime changes incompatibly */
-#define SWIG_RUNTIME_VERSION "4"
-
-/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
-#ifdef SWIG_TYPE_TABLE
-# define SWIG_QUOTE_STRING(x) #x
-# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x)
-# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE)
-#else
-# define SWIG_TYPE_TABLE_NAME
-#endif
-
-/*
-  You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for
-  creating a static or dynamic library from the SWIG runtime code.
-  In 99.9% of the cases, SWIG just needs to declare them as 'static'.
-
-  But only do this if strictly necessary, ie, if you have problems
-  with your compiler or suchlike.
-*/
-
-#ifndef SWIGRUNTIME
-# define SWIGRUNTIME SWIGINTERN
-#endif
-
-#ifndef SWIGRUNTIMEINLINE
-# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE
-#endif
-
-/*  Generic buffer size */
-#ifndef SWIG_BUFFER_SIZE
-# define SWIG_BUFFER_SIZE 1024
-#endif
-
-/* Flags for pointer conversions */
-#define SWIG_POINTER_DISOWN        0x1
-#define SWIG_CAST_NEW_MEMORY       0x2
-
-/* Flags for new pointer objects */
-#define SWIG_POINTER_OWN           0x1
-
-
-/*
-   Flags/methods for returning states.
-
-   The SWIG conversion methods, as ConvertPtr, return and integer
-   that tells if the conversion was successful or not. And if not,
-   an error code can be returned (see swigerrors.swg for the codes).
-
-   Use the following macros/flags to set or process the returning
-   states.
-
-   In old versions of SWIG, code such as the following was usually written:
-
-     if (SWIG_ConvertPtr(obj,vptr,ty.flags) != -1) {
-       // success code
-     } else {
-       //fail code
-     }
-
-   Now you can be more explicit:
-
-    int res = SWIG_ConvertPtr(obj,vptr,ty.flags);
-    if (SWIG_IsOK(res)) {
-      // success code
-    } else {
-      // fail code
-    }
-
-   which is the same really, but now you can also do
-
-    Type *ptr;
-    int res = SWIG_ConvertPtr(obj,(void **)(&ptr),ty.flags);
-    if (SWIG_IsOK(res)) {
-      // success code
-      if (SWIG_IsNewObj(res) {
-        ...
-	delete *ptr;
-      } else {
-        ...
-      }
-    } else {
-      // fail code
-    }
-
-   I.e., now SWIG_ConvertPtr can return new objects and you can
-   identify the case and take care of the deallocation. Of course that
-   also requires SWIG_ConvertPtr to return new result values, such as
-
-      int SWIG_ConvertPtr(obj, ptr,...) {
-        if (<obj is ok>) {
-          if (<need new object>) {
-            *ptr = <ptr to new allocated object>;
-            return SWIG_NEWOBJ;
-          } else {
-            *ptr = <ptr to old object>;
-            return SWIG_OLDOBJ;
-          }
-        } else {
-          return SWIG_BADOBJ;
-        }
-      }
-
-   Of course, returning the plain '0(success)/-1(fail)' still works, but you can be
-   more explicit by returning SWIG_BADOBJ, SWIG_ERROR or any of the
-   SWIG errors code.
-
-   Finally, if the SWIG_CASTRANK_MODE is enabled, the result code
-   allows to return the 'cast rank', for example, if you have this
-
-       int food(double)
-       int fooi(int);
-
-   and you call
-
-      food(1)   // cast rank '1'  (1 -> 1.0)
-      fooi(1)   // cast rank '0'
-
-   just use the SWIG_AddCast()/SWIG_CheckState()
-*/
-
-#define SWIG_OK                    (0)
-#define SWIG_ERROR                 (-1)
-#define SWIG_IsOK(r)               (r >= 0)
-#define SWIG_ArgError(r)           ((r != SWIG_ERROR) ? r : SWIG_TypeError)
-
-/* The CastRankLimit says how many bits are used for the cast rank */
-#define SWIG_CASTRANKLIMIT         (1 << 8)
-/* The NewMask denotes the object was created (using new/malloc) */
-#define SWIG_NEWOBJMASK            (SWIG_CASTRANKLIMIT  << 1)
-/* The TmpMask is for in/out typemaps that use temporal objects */
-#define SWIG_TMPOBJMASK            (SWIG_NEWOBJMASK << 1)
-/* Simple returning values */
-#define SWIG_BADOBJ                (SWIG_ERROR)
-#define SWIG_OLDOBJ                (SWIG_OK)
-#define SWIG_NEWOBJ                (SWIG_OK | SWIG_NEWOBJMASK)
-#define SWIG_TMPOBJ                (SWIG_OK | SWIG_TMPOBJMASK)
-/* Check, add and del mask methods */
-#define SWIG_AddNewMask(r)         (SWIG_IsOK(r) ? (r | SWIG_NEWOBJMASK) : r)
-#define SWIG_DelNewMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_NEWOBJMASK) : r)
-#define SWIG_IsNewObj(r)           (SWIG_IsOK(r) && (r & SWIG_NEWOBJMASK))
-#define SWIG_AddTmpMask(r)         (SWIG_IsOK(r) ? (r | SWIG_TMPOBJMASK) : r)
-#define SWIG_DelTmpMask(r)         (SWIG_IsOK(r) ? (r & ~SWIG_TMPOBJMASK) : r)
-#define SWIG_IsTmpObj(r)           (SWIG_IsOK(r) && (r & SWIG_TMPOBJMASK))
-
-/* Cast-Rank Mode */
-#if defined(SWIG_CASTRANK_MODE)
-#  ifndef SWIG_TypeRank
-#    define SWIG_TypeRank             unsigned long
-#  endif
-#  ifndef SWIG_MAXCASTRANK            /* Default cast allowed */
-#    define SWIG_MAXCASTRANK          (2)
-#  endif
-#  define SWIG_CASTRANKMASK          ((SWIG_CASTRANKLIMIT) -1)
-#  define SWIG_CastRank(r)           (r & SWIG_CASTRANKMASK)
-SWIGINTERNINLINE int SWIG_AddCast(int r) {
-  return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r;
-}
-SWIGINTERNINLINE int SWIG_CheckState(int r) {
-  return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0;
-}
-#else /* no cast-rank mode */
-#  define SWIG_AddCast
-#  define SWIG_CheckState(r) (SWIG_IsOK(r) ? 1 : 0)
-#endif
-
-
-#include <string.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void *(*swig_converter_func)(void *, int *);
-typedef struct swig_type_info *(*swig_dycast_func)(void **);
-
-/* Structure to store information on one type */
-typedef struct swig_type_info {
-  const char             *name;			/* mangled name of this type */
-  const char             *str;			/* human readable name of this type */
-  swig_dycast_func        dcast;		/* dynamic cast function down a hierarchy */
-  struct swig_cast_info  *cast;			/* linked list of types that can cast into this type */
-  void                   *clientdata;		/* language specific type data */
-  int                    owndata;		/* flag if the structure owns the clientdata */
-} swig_type_info;
-
-/* Structure to store a type and conversion function used for casting */
-typedef struct swig_cast_info {
-  swig_type_info         *type;			/* pointer to type that is equivalent to this type */
-  swig_converter_func     converter;		/* function to cast the void pointers */
-  struct swig_cast_info  *next;			/* pointer to next cast in linked list */
-  struct swig_cast_info  *prev;			/* pointer to the previous cast */
-} swig_cast_info;
-
-/* Structure used to store module information
- * Each module generates one structure like this, and the runtime collects
- * all of these structures and stores them in a circularly linked list.*/
-typedef struct swig_module_info {
-  swig_type_info         **types;		/* Array of pointers to swig_type_info structures that are in this module */
-  size_t                 size;		        /* Number of types in this module */
-  struct swig_module_info *next;		/* Pointer to next element in circularly linked list */
-  swig_type_info         **type_initial;	/* Array of initially generated type structures */
-  swig_cast_info         **cast_initial;	/* Array of initially generated casting structures */
-  void                    *clientdata;		/* Language specific module data */
-} swig_module_info;
-
-/*
-  Compare two type names skipping the space characters, therefore
-  "char*" == "char *" and "Class<int>" == "Class<int >", etc.
-
-  Return 0 when the two name types are equivalent, as in
-  strncmp, but skipping ' '.
-*/
-SWIGRUNTIME int
-SWIG_TypeNameComp(const char *f1, const char *l1,
-		  const char *f2, const char *l2) {
-  for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) {
-    while ((*f1 == ' ') && (f1 != l1)) ++f1;
-    while ((*f2 == ' ') && (f2 != l2)) ++f2;
-    if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
-  }
-  return (int)((l1 - f1) - (l2 - f2));
-}
-
-/*
-  Check type equivalence in a name list like <name1>|<name2>|...
-  Return 0 if not equal, 1 if equal
-*/
-SWIGRUNTIME int
-SWIG_TypeEquiv(const char *nb, const char *tb) {
-  int equiv = 0;
-  const char* te = tb + strlen(tb);
-  const char* ne = nb;
-  while (!equiv && *ne) {
-    for (nb = ne; *ne; ++ne) {
-      if (*ne == '|') break;
-    }
-    equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
-    if (*ne) ++ne;
-  }
-  return equiv;
-}
-
-/*
-  Check type equivalence in a name list like <name1>|<name2>|...
-  Return 0 if equal, -1 if nb < tb, 1 if nb > tb
-*/
-SWIGRUNTIME int
-SWIG_TypeCompare(const char *nb, const char *tb) {
-  int equiv = 0;
-  const char* te = tb + strlen(tb);
-  const char* ne = nb;
-  while (!equiv && *ne) {
-    for (nb = ne; *ne; ++ne) {
-      if (*ne == '|') break;
-    }
-    equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0;
-    if (*ne) ++ne;
-  }
-  return equiv;
-}
-
-
-/*
-  Check the typename
-*/
-SWIGRUNTIME swig_cast_info *
-SWIG_TypeCheck(const char *c, swig_type_info *ty) {
-  if (ty) {
-    swig_cast_info *iter = ty->cast;
-    while (iter) {
-      if (strcmp(iter->type->name, c) == 0) {
-        if (iter == ty->cast)
-          return iter;
-        /* Move iter to the top of the linked list */
-        iter->prev->next = iter->next;
-        if (iter->next)
-          iter->next->prev = iter->prev;
-        iter->next = ty->cast;
-        iter->prev = 0;
-        if (ty->cast) ty->cast->prev = iter;
-        ty->cast = iter;
-        return iter;
-      }
-      iter = iter->next;
-    }
-  }
-  return 0;
-}
-
-/*
-  Identical to SWIG_TypeCheck, except strcmp is replaced with a pointer comparison
-*/
-SWIGRUNTIME swig_cast_info *
-SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *ty) {
-  if (ty) {
-    swig_cast_info *iter = ty->cast;
-    while (iter) {
-      if (iter->type == from) {
-        if (iter == ty->cast)
-          return iter;
-        /* Move iter to the top of the linked list */
-        iter->prev->next = iter->next;
-        if (iter->next)
-          iter->next->prev = iter->prev;
-        iter->next = ty->cast;
-        iter->prev = 0;
-        if (ty->cast) ty->cast->prev = iter;
-        ty->cast = iter;
-        return iter;
-      }
-      iter = iter->next;
-    }
-  }
-  return 0;
-}
-
-/*
-  Cast a pointer up an inheritance hierarchy
-*/
-SWIGRUNTIMEINLINE void *
-SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
-  return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
-}
-
-/*
-   Dynamic pointer casting. Down an inheritance hierarchy
-*/
-SWIGRUNTIME swig_type_info *
-SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) {
-  swig_type_info *lastty = ty;
-  if (!ty || !ty->dcast) return ty;
-  while (ty && (ty->dcast)) {
-    ty = (*ty->dcast)(ptr);
-    if (ty) lastty = ty;
-  }
-  return lastty;
-}
-
-/*
-  Return the name associated with this type
-*/
-SWIGRUNTIMEINLINE const char *
-SWIG_TypeName(const swig_type_info *ty) {
-  return ty->name;
-}
-
-/*
-  Return the pretty name associated with this type,
-  that is an unmangled type name in a form presentable to the user.
-*/
-SWIGRUNTIME const char *
-SWIG_TypePrettyName(const swig_type_info *type) {
-  /* The "str" field contains the equivalent pretty names of the
-     type, separated by vertical-bar characters.  We choose
-     to print the last name, as it is often (?) the most
-     specific. */
-  if (!type) return NULL;
-  if (type->str != NULL) {
-    const char *last_name = type->str;
-    const char *s;
-    for (s = type->str; *s; s++)
-      if (*s == '|') last_name = s+1;
-    return last_name;
-  }
-  else
-    return type->name;
-}
-
-/*
-   Set the clientdata field for a type
-*/
-SWIGRUNTIME void
-SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
-  swig_cast_info *cast = ti->cast;
-  /* if (ti->clientdata == clientdata) return; */
-  ti->clientdata = clientdata;
-
-  while (cast) {
-    if (!cast->converter) {
-      swig_type_info *tc = cast->type;
-      if (!tc->clientdata) {
-	SWIG_TypeClientData(tc, clientdata);
-      }
-    }
-    cast = cast->next;
-  }
-}
-SWIGRUNTIME void
-SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) {
-  SWIG_TypeClientData(ti, clientdata);
-  ti->owndata = 1;
-}
-
-/*
-  Search for a swig_type_info structure only by mangled name
-  Search is a O(log #types)
-
-  We start searching at module start, and finish searching when start == end.
-  Note: if start == end at the beginning of the function, we go all the way around
-  the circular list.
-*/
-SWIGRUNTIME swig_type_info *
-SWIG_MangledTypeQueryModule(swig_module_info *start,
-                            swig_module_info *end,
-		            const char *name) {
-  swig_module_info *iter = start;
-  do {
-    if (iter->size) {
-      size_t l = 0;
-      size_t r = iter->size - 1;
-      do {
-	/* since l+r >= 0, we can (>> 1) instead (/ 2) */
-	size_t i = (l + r) >> 1;
-	const char *iname = iter->types[i]->name;
-	if (iname) {
-	  int compare = strcmp(name, iname);
-	  if (compare == 0) {
-	    return iter->types[i];
-	  } else if (compare < 0) {
-	    if (i) {
-	      r = i - 1;
-	    } else {
-	      break;
-	    }
-	  } else if (compare > 0) {
-	    l = i + 1;
-	  }
-	} else {
-	  break; /* should never happen */
-	}
-      } while (l <= r);
-    }
-    iter = iter->next;
-  } while (iter != end);
-  return 0;
-}
-
-/*
-  Search for a swig_type_info structure for either a mangled name or a human readable name.
-  It first searches the mangled names of the types, which is a O(log #types)
-  If a type is not found it then searches the human readable names, which is O(#types).
-
-  We start searching at module start, and finish searching when start == end.
-  Note: if start == end at the beginning of the function, we go all the way around
-  the circular list.
-*/
-SWIGRUNTIME swig_type_info *
-SWIG_TypeQueryModule(swig_module_info *start,
-                     swig_module_info *end,
-		     const char *name) {
-  /* STEP 1: Search the name field using binary search */
-  swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name);
-  if (ret) {
-    return ret;
-  } else {
-    /* STEP 2: If the type hasn't been found, do a complete search
-       of the str field (the human readable name) */
-    swig_module_info *iter = start;
-    do {
-      size_t i = 0;
-      for (; i < iter->size; ++i) {
-	if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name)))
-	  return iter->types[i];
-      }
-      iter = iter->next;
-    } while (iter != end);
-  }
-
-  /* neither found a match */
-  return 0;
-}
-
-/*
-   Pack binary data into a string
-*/
-SWIGRUNTIME char *
-SWIG_PackData(char *c, void *ptr, size_t sz) {
-  static const char hex[17] = "0123456789abcdef";
-  const unsigned char *u = (unsigned char *) ptr;
-  const unsigned char *eu =  u + sz;
-  for (; u != eu; ++u) {
-    unsigned char uu = *u;
-    *(c++) = hex[(uu & 0xf0) >> 4];
-    *(c++) = hex[uu & 0xf];
-  }
-  return c;
-}
-
-/*
-   Unpack binary data from a string
-*/
-SWIGRUNTIME const char *
-SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
-  unsigned char *u = (unsigned char *) ptr;
-  const unsigned char *eu = u + sz;
-  for (; u != eu; ++u) {
-    char d = *(c++);
-    unsigned char uu;
-    if ((d >= '0') && (d <= '9'))
-      uu = ((d - '0') << 4);
-    else if ((d >= 'a') && (d <= 'f'))
-      uu = ((d - ('a'-10)) << 4);
-    else
-      return (char *) 0;
-    d = *(c++);
-    if ((d >= '0') && (d <= '9'))
-      uu |= (d - '0');
-    else if ((d >= 'a') && (d <= 'f'))
-      uu |= (d - ('a'-10));
-    else
-      return (char *) 0;
-    *u = uu;
-  }
-  return c;
-}
-
-/*
-   Pack 'void *' into a string buffer.
-*/
-SWIGRUNTIME char *
-SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) {
-  char *r = buff;
-  if ((2*sizeof(void *) + 2) > bsz) return 0;
-  *(r++) = '_';
-  r = SWIG_PackData(r,&ptr,sizeof(void *));
-  if (strlen(name) + 1 > (bsz - (r - buff))) return 0;
-  strcpy(r,name);
-  return buff;
-}
-
-SWIGRUNTIME const char *
-SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) {
-  if (*c != '_') {
-    if (strcmp(c,"NULL") == 0) {
-      *ptr = (void *) 0;
-      return name;
-    } else {
-      return 0;
-    }
-  }
-  return SWIG_UnpackData(++c,ptr,sizeof(void *));
-}
-
-SWIGRUNTIME char *
-SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) {
-  char *r = buff;
-  size_t lname = (name ? strlen(name) : 0);
-  if ((2*sz + 2 + lname) > bsz) return 0;
-  *(r++) = '_';
-  r = SWIG_PackData(r,ptr,sz);
-  if (lname) {
-    strncpy(r,name,lname+1);
-  } else {
-    *r = 0;
-  }
-  return buff;
-}
-
-SWIGRUNTIME const char *
-SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) {
-  if (*c != '_') {
-    if (strcmp(c,"NULL") == 0) {
-      memset(ptr,0,sz);
-      return name;
-    } else {
-      return 0;
-    }
-  }
-  return SWIG_UnpackData(++c,ptr,sz);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-/*  Errors in SWIG */
-#define  SWIG_UnknownError    	   -1
-#define  SWIG_IOError        	   -2
-#define  SWIG_RuntimeError   	   -3
-#define  SWIG_IndexError     	   -4
-#define  SWIG_TypeError      	   -5
-#define  SWIG_DivisionByZero 	   -6
-#define  SWIG_OverflowError  	   -7
-#define  SWIG_SyntaxError    	   -8
-#define  SWIG_ValueError     	   -9
-#define  SWIG_SystemError    	   -10
-#define  SWIG_AttributeError 	   -11
-#define  SWIG_MemoryError    	   -12
-#define  SWIG_NullReferenceError   -13
-
-
-
-/* -----------------------------------------------------------------------------
- * error manipulation
- * ----------------------------------------------------------------------------- */
-
-SWIGINTERN const char*
-SWIG_Tcl_ErrorType(int code) {
-  const char* type = 0;
-  switch(code) {
-  case SWIG_MemoryError:
-    type = "MemoryError";
-    break;
-  case SWIG_IOError:
-    type = "IOError";
-    break;
-  case SWIG_RuntimeError:
-    type = "RuntimeError";
-    break;
-  case SWIG_IndexError:
-    type = "IndexError";
-    break;
-  case SWIG_TypeError:
-    type = "TypeError";
-    break;
-  case SWIG_DivisionByZero:
-    type = "ZeroDivisionError";
-    break;
-  case SWIG_OverflowError:
-    type = "OverflowError";
-    break;
-  case SWIG_SyntaxError:
-    type = "SyntaxError";
-    break;
-  case SWIG_ValueError:
-    type = "ValueError";
-    break;
-  case SWIG_SystemError:
-    type = "SystemError";
-    break;
-  case SWIG_AttributeError:
-    type = "AttributeError";
-    break;
-  default:
-    type = "RuntimeError";
-  }
-  return type;
-}
-
-
-SWIGINTERN void
-SWIG_Tcl_SetErrorObj(Tcl_Interp *interp, const char *ctype, Tcl_Obj *obj)
-{
-  Tcl_ResetResult(interp);
-  Tcl_SetObjResult(interp, obj);
-  Tcl_SetErrorCode(interp, "SWIG", ctype, NULL);
-}
-
-SWIGINTERN void
-SWIG_Tcl_SetErrorMsg(Tcl_Interp *interp, const char *ctype, const char *mesg)
-{
-  Tcl_ResetResult(interp);
-  Tcl_SetErrorCode(interp, "SWIG", ctype, NULL);
-  Tcl_AppendResult(interp, ctype, " ", mesg, NULL);
-  /*
-  Tcl_AddErrorInfo(interp, ctype);
-  Tcl_AddErrorInfo(interp, " ");
-  Tcl_AddErrorInfo(interp, mesg);
-  */
-}
-
-SWIGINTERNINLINE void
-SWIG_Tcl_AddErrorMsg(Tcl_Interp *interp, const char* mesg)
-{
-  Tcl_AddErrorInfo(interp, mesg);
-}
-
-
-
-/* -----------------------------------------------------------------------------
- * SWIG API. Portion that goes into the runtime
- * ----------------------------------------------------------------------------- */
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* -----------------------------------------------------------------------------
- * Constant declarations
- * ----------------------------------------------------------------------------- */
-
-/* Constant Types */
-#define SWIG_TCL_POINTER 4
-#define SWIG_TCL_BINARY  5
-
-/* Constant information structure */
-typedef struct swig_const_info {
-    int type;
-    char *name;
-    long lvalue;
-    double dvalue;
-    void   *pvalue;
-    swig_type_info **ptype;
-} swig_const_info;
-
-typedef int   (*swig_wrapper)(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST []);
-typedef int   (*swig_wrapper_func)(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST []);
-typedef char *(*swig_variable_func)(ClientData, Tcl_Interp *, char *, char *, int);
-typedef void  (*swig_delete_func)(ClientData);
-
-typedef struct swig_method {
-  const char     *name;
-  swig_wrapper   method;
-} swig_method;
-
-typedef struct swig_attribute {
-  const char     *name;
-  swig_wrapper   getmethod;
-  swig_wrapper   setmethod;
-} swig_attribute;
-
-typedef struct swig_class {
-  const char         *name;
-  swig_type_info   **type;
-  swig_wrapper       constructor;
-  void              (*destructor)(void *);
-  swig_method        *methods;
-  swig_attribute     *attributes;
-  struct swig_class **bases;
-  const char              **base_names;
-  swig_module_info   *module;
-} swig_class;
-
-typedef struct swig_instance {
-  Tcl_Obj       *thisptr;
-  void          *thisvalue;
-  swig_class   *classptr;
-  int            destroy;
-  Tcl_Command    cmdtok;
-} swig_instance;
-
-/* Structure for command table */
-typedef struct {
-  const char *name;
-  int       (*wrapper)(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST []);
-  ClientData  clientdata;
-} swig_command_info;
-
-/* Structure for variable linking table */
-typedef struct {
-  const char *name;
-  void *addr;
-  char * (*get)(ClientData, Tcl_Interp *, char *, char *, int);
-  char * (*set)(ClientData, Tcl_Interp *, char *, char *, int);
-} swig_var_info;
-
-
-/* -----------------------------------------------------------------------------*
- *  Install a constant object
- * -----------------------------------------------------------------------------*/
-
-static Tcl_HashTable   swigconstTable;
-static int             swigconstTableinit = 0;
-
-SWIGINTERN void
-SWIG_Tcl_SetConstantObj(Tcl_Interp *interp, const char* name, Tcl_Obj *obj) {
-  int newobj;
-  Tcl_ObjSetVar2(interp,Tcl_NewStringObj(name,-1), NULL, obj, TCL_GLOBAL_ONLY);
-  Tcl_SetHashValue(Tcl_CreateHashEntry(&swigconstTable, name, &newobj), (ClientData) obj);
-}
-
-SWIGINTERN Tcl_Obj *
-SWIG_Tcl_GetConstantObj(const char *key) {
-  Tcl_HashEntry *entryPtr;
-  if (!swigconstTableinit) return 0;
-  entryPtr = Tcl_FindHashEntry(&swigconstTable, key);
-  if (entryPtr) {
-    return (Tcl_Obj *) Tcl_GetHashValue(entryPtr);
-  }
-  return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
-/* -----------------------------------------------------------------------------
- * See the LICENSE file for information on copyright, usage and redistribution
- * of SWIG, and the README file for authors - http://www.swig.org/release.html.
- *
- * tclrun.swg
- *
- * This file contains the runtime support for Tcl modules and includes
- * code for managing global variables and pointer type checking.
- * ----------------------------------------------------------------------------- */
-
-/* Common SWIG API */
-
-/* for raw pointers */
-#define SWIG_ConvertPtr(oc, ptr, ty, flags)             SWIG_Tcl_ConvertPtr(interp, oc, ptr, ty, flags)
-#define SWIG_NewPointerObj(ptr, type, flags)            SWIG_Tcl_NewPointerObj(ptr, type, flags)
-
-/* for raw packed data */
-#define SWIG_ConvertPacked(obj, ptr, sz, ty)            SWIG_Tcl_ConvertPacked(interp, obj, ptr, sz, ty)
-#define SWIG_NewPackedObj(ptr, sz, type)                SWIG_Tcl_NewPackedObj(ptr, sz, type)
-
-/* for class or struct pointers */
-#define SWIG_ConvertInstance(obj, pptr, type, flags)    SWIG_Tcl_ConvertPtr(interp, obj, pptr, type, flags)
-#define SWIG_NewInstanceObj(thisvalue, type, flags)     SWIG_Tcl_NewInstanceObj(interp, thisvalue, type, flags)
-
-/* for C or C++ function pointers */
-#define SWIG_ConvertFunctionPtr(obj, pptr, type)        SWIG_Tcl_ConvertPtr(interp, obj, pptr, type, 0)
-#define SWIG_NewFunctionPtrObj(ptr, type)               SWIG_Tcl_NewPointerObj(ptr, type, 0)
-
-/* for C++ member pointers, ie, member methods */
-#define SWIG_ConvertMember(obj, ptr, sz, ty)            SWIG_Tcl_ConvertPacked(interp,obj, ptr, sz, ty)
-#define SWIG_NewMemberObj(ptr, sz, type)                SWIG_Tcl_NewPackedObj(ptr, sz, type)
-
-
-/* Runtime API */
-
-#define SWIG_GetModule(clientdata)                      SWIG_Tcl_GetModule((Tcl_Interp *) (clientdata))
-#define SWIG_SetModule(clientdata, pointer)          	SWIG_Tcl_SetModule((Tcl_Interp *) (clientdata), pointer)
-
-
-/* Error manipulation */
-
-#define SWIG_ErrorType(code)                            SWIG_Tcl_ErrorType(code)
-#define SWIG_Error(code, msg)            		SWIG_Tcl_SetErrorMsg(interp, SWIG_Tcl_ErrorType(code), msg)
-#define SWIG_fail                        		goto fail
-
-
-/* Tcl-specific SWIG API */
-
-#define SWIG_Acquire(ptr)                               SWIG_Tcl_Acquire(ptr)
-#define SWIG_MethodCommand                           	SWIG_Tcl_MethodCommand
-#define SWIG_Disown(ptr)                             	SWIG_Tcl_Disown(ptr)
-#define SWIG_ConvertPtrFromString(c, ptr, ty, flags) 	SWIG_Tcl_ConvertPtrFromString(interp, c, ptr, ty, flags)
-#define SWIG_MakePtr(c, ptr, ty, flags)              	SWIG_Tcl_MakePtr(c, ptr, ty, flags)
-#define SWIG_PointerTypeFromString(c)                	SWIG_Tcl_PointerTypeFromString(c)
-#define SWIG_GetArgs                                 	SWIG_Tcl_GetArgs
-#define SWIG_GetConstantObj(key)                     	SWIG_Tcl_GetConstantObj(key)
-#define SWIG_ObjectConstructor                       	SWIG_Tcl_ObjectConstructor
-#define SWIG_Thisown(ptr)                            	SWIG_Tcl_Thisown(ptr)
-#define SWIG_ObjectDelete                            	SWIG_Tcl_ObjectDelete
-
-
-#define SWIG_TCL_DECL_ARGS_2(arg1, arg2)                (Tcl_Interp *interp SWIGUNUSED, arg1, arg2)
-#define SWIG_TCL_CALL_ARGS_2(arg1, arg2)                (interp, arg1, arg2)
-/* -----------------------------------------------------------------------------
- * pointers/data manipulation
- * ----------------------------------------------------------------------------- */
-
-/* For backward compatibility only */
-#define SWIG_POINTER_EXCEPTION  0
-#define SWIG_GetConstant        SWIG_GetConstantObj
-#define SWIG_Tcl_GetConstant    SWIG_Tcl_GetConstantObj
-
-#include "assert.h"
-
-#ifdef __cplusplus
-extern "C" {
-#if 0
-} /* cc-mode */
-#endif
-#endif
-
-/* Object support */
-
-SWIGRUNTIME Tcl_HashTable*
-SWIG_Tcl_ObjectTable(void) {
-  static Tcl_HashTable  swigobjectTable;
-  static int            swigobjectTableinit = 0;
-  if (!swigobjectTableinit) {
-    Tcl_InitHashTable(&swigobjectTable, TCL_ONE_WORD_KEYS);
-    swigobjectTableinit = 1;
-  }
-  return &swigobjectTable;
-}
-
-/* Acquire ownership of a pointer */
-SWIGRUNTIME void
-SWIG_Tcl_Acquire(void *ptr) {
-  int newobj;
-  Tcl_CreateHashEntry(SWIG_Tcl_ObjectTable(), (char *) ptr, &newobj);
-}
-
-SWIGRUNTIME int
-SWIG_Tcl_Thisown(void *ptr) {
-  if (Tcl_FindHashEntry(SWIG_Tcl_ObjectTable(), (char *) ptr)) {
-    return 1;
-  }
-  return 0;
-}
-
-/* Disown a pointer.  Returns 1 if we owned it to begin with */
-SWIGRUNTIME int
-SWIG_Tcl_Disown(void *ptr) {
-  Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(SWIG_Tcl_ObjectTable(), (char *) ptr);
-  if (entryPtr) {
-    Tcl_DeleteHashEntry(entryPtr);
-    return 1;
-  }
-  return 0;
-}
-
-/* Convert a pointer value */
-SWIGRUNTIME int
-SWIG_Tcl_ConvertPtrFromString(Tcl_Interp *interp, const char *c, void **ptr, swig_type_info *ty, int flags) {
-  swig_cast_info *tc;
-  /* Pointer values must start with leading underscore */
-  while (*c != '_') {
-    *ptr = (void *) 0;
-    if (strcmp(c,"NULL") == 0) return SWIG_OK;
-
-    /* Empty string: not a pointer */
-    if (*c == 0) return SWIG_ERROR;
-
-    /* Hmmm. It could be an object name. */
-
-    /* Check if this is a command at all. Prevents <c> cget -this         */
-    /* from being called when c is not a command, firing the unknown proc */
-    if (Tcl_VarEval(interp,"info commands ", c, (char *) NULL) == TCL_OK) {
-      Tcl_Obj *result = Tcl_GetObjResult(interp);
-      if (*(Tcl_GetStringFromObj(result, NULL)) == 0) {
-        /* It's not a command, so it can't be a pointer */
-        Tcl_ResetResult(interp);
-        return SWIG_ERROR;
-      }
-    } else {
-      /* This will only fail if the argument is multiple words. */
-      /* Multiple words are also not commands.                  */
-      Tcl_ResetResult(interp);
-      return SWIG_ERROR;
-    }
-
-    /* Check if this is really a SWIG pointer */
-    if (Tcl_VarEval(interp,c," cget -this", (char *) NULL) != TCL_OK) {
-      Tcl_ResetResult(interp);
-      return SWIG_ERROR;
-    }
-
-    c = Tcl_GetStringFromObj(Tcl_GetObjResult(interp), NULL);
-  }
-
-  c++;
-  c = SWIG_UnpackData(c,ptr,sizeof(void *));
-  if (ty) {
-    tc = c ? SWIG_TypeCheck(c,ty) : 0;
-    if (!tc) {
-      return SWIG_ERROR;
-    }
-    if (flags & SWIG_POINTER_DISOWN) {
-      SWIG_Disown((void *) *ptr);
-    }
-    {
-      int newmemory = 0;
-      *ptr = SWIG_TypeCast(tc,(void *) *ptr,&newmemory);
-      assert(!newmemory); /* newmemory handling not yet implemented */
-    }
-  }
-  return SWIG_OK;
-}
-
-/* Convert a pointer value */
-SWIGRUNTIMEINLINE int
-SWIG_Tcl_ConvertPtr(Tcl_Interp *interp, Tcl_Obj *oc, void **ptr, swig_type_info *ty, int flags) {
-  return SWIG_Tcl_ConvertPtrFromString(interp, Tcl_GetStringFromObj(oc,NULL), ptr, ty, flags);
-}
-
-/* Convert a pointer value */
-SWIGRUNTIME char *
-SWIG_Tcl_PointerTypeFromString(char *c) {
-  char d;
-  /* Pointer values must start with leading underscore. NULL has no type */
-  if (*c != '_') {
-    return 0;
-  }
-  c++;
-  /* Extract hex value from pointer */
-  while ((d = *c)) {
-    if (!(((d >= '0') && (d <= '9')) || ((d >= 'a') && (d <= 'f')))) break;
-    c++;
-  }
-  return c;
-}
-
-/* Convert a packed value value */
-SWIGRUNTIME int
-SWIG_Tcl_ConvertPacked(Tcl_Interp *SWIGUNUSEDPARM(interp) , Tcl_Obj *obj, void *ptr, int sz, swig_type_info *ty) {
-  swig_cast_info *tc;
-  const char  *c;
-
-  if (!obj) goto type_error;
-  c = Tcl_GetStringFromObj(obj,NULL);
-  /* Pointer values must start with leading underscore */
-  if (*c != '_') goto type_error;
-  c++;
-  c = SWIG_UnpackData(c,ptr,sz);
-  if (ty) {
-    tc = SWIG_TypeCheck(c,ty);
-    if (!tc) goto type_error;
-  }
-  return SWIG_OK;
-
- type_error:
-
-  return SWIG_ERROR;
-}
-
-
-/* Take a pointer and convert it to a string */
-SWIGRUNTIME void
-SWIG_Tcl_MakePtr(char *c, void *ptr, swig_type_info *ty, int flags) {
-  if (ptr) {
-    *(c++) = '_';
-    c = SWIG_PackData(c,&ptr,sizeof(void *));
-    strcpy(c,ty->name);
-  } else {
-    strcpy(c,(char *)"NULL");
-  }
-  flags = 0;
-}
-
-/* Create a new pointer object */
-SWIGRUNTIMEINLINE Tcl_Obj *
-SWIG_Tcl_NewPointerObj(void *ptr, swig_type_info *type, int flags) {
-  Tcl_Obj *robj;
-  char result[SWIG_BUFFER_SIZE];
-  SWIG_MakePtr(result,ptr,type,flags);
-  robj = Tcl_NewStringObj(result,-1);
-  return robj;
-}
-
-SWIGRUNTIME Tcl_Obj *
-SWIG_Tcl_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
-  char result[1024];
-  char *r = result;
-  if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
-  *(r++) = '_';
-  r = SWIG_PackData(r,ptr,sz);
-  strcpy(r,type->name);
-  return Tcl_NewStringObj(result,-1);
-}
-
-/* -----------------------------------------------------------------------------*
- *  Get type list
- * -----------------------------------------------------------------------------*/
-
-SWIGRUNTIME swig_module_info *
-SWIG_Tcl_GetModule(Tcl_Interp *interp) {
-  const char *data;
-  swig_module_info *ret = 0;
-
-  /* first check if pointer already created */
-  data = Tcl_GetVar(interp, (char *)"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TCL_GLOBAL_ONLY);
-  if (data) {
-    SWIG_UnpackData(data, &ret, sizeof(swig_type_info **));
-  }
-
-  return ret;
-}
-
-SWIGRUNTIME void
-SWIG_Tcl_SetModule(Tcl_Interp *interp, swig_module_info *module) {
-  char buf[SWIG_BUFFER_SIZE];
-  char *data;
-
-  /* create a new pointer */
-  data = SWIG_PackData(buf, &module, sizeof(swig_type_info **));
-  *data = 0;
-  Tcl_SetVar(interp, (char *)"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, buf, 0);
-}
-
-/* -----------------------------------------------------------------------------*
- *  Object auxiliars
- * -----------------------------------------------------------------------------*/
-
-
-SWIGRUNTIME void
-SWIG_Tcl_ObjectDelete(ClientData clientData) {
-  swig_instance *si = (swig_instance *) clientData;
-  if ((si) && (si->destroy) && (SWIG_Disown(si->thisvalue))) {
-    if (si->classptr->destructor) {
-      (si->classptr->destructor)(si->thisvalue);
-    }
-  }
-  Tcl_DecrRefCount(si->thisptr);
-  free(si);
-}
-
-/* Function to invoke object methods given an instance */
-SWIGRUNTIME int
-SWIG_Tcl_MethodCommand(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST _objv[]) {
-  char *method,   *attrname;
-  swig_instance   *inst = (swig_instance *) clientData;
-  swig_method     *meth;
-  swig_attribute  *attr;
-  Tcl_Obj         *oldarg;
-  Tcl_Obj         **objv;
-  int              rcode;
-  swig_class      *cls;
-  swig_class      *cls_stack[64];
-  int              cls_stack_bi[64];
-  int              cls_stack_top = 0;
-  int              numconf = 2;
-  int              bi;
-
-  objv = (Tcl_Obj **) _objv;
-  if (objc < 2) {
-    Tcl_SetResult(interp, (char *) "wrong # args.", TCL_STATIC);
-    return TCL_ERROR;
-  }
-  method = Tcl_GetStringFromObj(objv[1],NULL);
-  if (strcmp(method,"-acquire") == 0) {
-    inst->destroy = 1;
-    SWIG_Acquire(inst->thisvalue);
-    return TCL_OK;
-  }
-  if (strcmp(method,"-disown") == 0) {
-    if (inst->destroy) {
-      SWIG_Disown(inst->thisvalue);
-    }
-    inst->destroy = 0;
-    return TCL_OK;
-  }
-  if (strcmp(method,"-delete") == 0) {
-    Tcl_DeleteCommandFromToken(interp,inst->cmdtok);
-    return TCL_OK;
-  }
-  cls_stack[cls_stack_top] = inst->classptr;
-  cls_stack_bi[cls_stack_top] = -1;
-  cls = inst->classptr;
-  while (1) {
-    bi = cls_stack_bi[cls_stack_top];
-    cls = cls_stack[cls_stack_top];
-    if (bi != -1) {
-      if (!cls->bases[bi] && cls->base_names[bi]) {
-        /* lookup and cache the base class */
-	swig_type_info *info = SWIG_TypeQueryModule(cls->module, cls->module, cls->base_names[bi]);
-	if (info) cls->bases[bi] = (swig_class *) info->clientdata;
-      }
-      cls = cls->bases[bi];
-      if (cls) {
-        cls_stack_bi[cls_stack_top]++;
-        cls_stack_top++;
-        cls_stack[cls_stack_top] = cls;
-        cls_stack_bi[cls_stack_top] = -1;
-        continue;
-      }
-    }
-    if (!cls) {
-      cls_stack_top--;
-      if (cls_stack_top < 0) break;
-      else continue;
-    }
-    cls_stack_bi[cls_stack_top]++;
-
-    meth = cls->methods;
-    /* Check for methods */
-    while (meth && meth->name) {
-      if (strcmp(meth->name,method) == 0) {
-        oldarg = objv[1];
-        objv[1] = inst->thisptr;
-        Tcl_IncrRefCount(inst->thisptr);
-        rcode = (*meth->method)(clientData,interp,objc,objv);
-        objv[1] = oldarg;
-        Tcl_DecrRefCount(inst->thisptr);
-        return rcode;
-      }
-      meth++;
-    }
-    /* Check class methods for a match */
-    if (strcmp(method,"cget") == 0) {
-      if (objc < 3) {
-        Tcl_SetResult(interp, (char *) "wrong # args.", TCL_STATIC);
-        return TCL_ERROR;
-      }
-      attrname = Tcl_GetStringFromObj(objv[2],NULL);
-      attr = cls->attributes;
-      while (attr && attr->name) {
-        if ((strcmp(attr->name, attrname) == 0) && (attr->getmethod)) {
-          oldarg = objv[1];
-          objv[1] = inst->thisptr;
-          Tcl_IncrRefCount(inst->thisptr);
-          rcode = (*attr->getmethod)(clientData,interp,2, objv);
-          objv[1] = oldarg;
-          Tcl_DecrRefCount(inst->thisptr);
-          return rcode;
-        }
-        attr++;
-      }
-      if (strcmp(attrname, "-this") == 0) {
-        Tcl_SetObjResult(interp, Tcl_DuplicateObj(inst->thisptr));
-        return TCL_OK;
-      }
-      if (strcmp(attrname, "-thisown") == 0) {
-        if (SWIG_Thisown(inst->thisvalue)) {
-          Tcl_SetResult(interp,(char*)"1",TCL_STATIC);
-        } else {
-          Tcl_SetResult(interp,(char*)"0",TCL_STATIC);
-        }
-        return TCL_OK;
-      }
-    } else if (strcmp(method, "configure") == 0) {
-      int i;
-      if (objc < 4) {
-        Tcl_SetResult(interp, (char *) "wrong # args.", TCL_STATIC);
-        return TCL_ERROR;
-      }
-      i = 2;
-      while (i < objc) {
-        attrname = Tcl_GetStringFromObj(objv[i],NULL);
-        attr = cls->attributes;
-        while (attr && attr->name) {
-          if ((strcmp(attr->name, attrname) == 0) && (attr->setmethod)) {
-            oldarg = objv[i];
-            objv[i] = inst->thisptr;
-            Tcl_IncrRefCount(inst->thisptr);
-            rcode = (*attr->setmethod)(clientData,interp,3, &objv[i-1]);
-            objv[i] = oldarg;
-            Tcl_DecrRefCount(inst->thisptr);
-            if (rcode != TCL_OK) return rcode;
-            numconf += 2;
-          }
-          attr++;
-        }
-        i+=2;
-      }
-    }
-  }
-  if (strcmp(method,"configure") == 0) {
-    if (numconf >= objc) {
-      return TCL_OK;
-    } else {
-      Tcl_SetResult(interp,(char *) "Invalid attribute name.", TCL_STATIC);
-      return TCL_ERROR;
-    }
-  }
-  if (strcmp(method,"cget") == 0) {
-    Tcl_SetResult(interp,(char *) "Invalid attribute name.", TCL_STATIC);
-    return TCL_ERROR;
-  }
-  Tcl_SetResult(interp, (char *) "Invalid method. Must be one of: configure cget -acquire -disown -delete", TCL_STATIC);
-  cls = inst->classptr;
-  bi = 0;
-  while (cls) {
-    meth = cls->methods;
-    while (meth && meth->name) {
-      char *cr = (char *) Tcl_GetStringResult(interp);
-      size_t meth_len = strlen(meth->name);
-      char* where = strchr(cr,':');
-      while(where) {
-        where = strstr(where, meth->name);
-        if(where) {
-          if(where[-1] == ' ' && (where[meth_len] == ' ' || where[meth_len]==0)) {
-            break;
-          } else {
-            where++;
-          }
-        }
-      }
-
-      if (!where)
-        Tcl_AppendElement(interp, (char *) meth->name);
-      meth++;
-    }
-    cls = inst->classptr->bases[bi++];
-  }
-  return TCL_ERROR;
-}
-
-/* This function takes the current result and turns it into an object command */
-SWIGRUNTIME Tcl_Obj *
-SWIG_Tcl_NewInstanceObj(Tcl_Interp *interp, void *thisvalue, swig_type_info *type, int flags) {
-  Tcl_Obj *robj = SWIG_NewPointerObj(thisvalue, type,0);
-  /* Check to see if this pointer belongs to a class or not */
-  if ((type->clientdata) && (interp)) {
-    Tcl_CmdInfo    ci;
-    char          *name;
-    name = Tcl_GetStringFromObj(robj,NULL);
-    if (!Tcl_GetCommandInfo(interp,name, &ci) || (flags)) {
-      swig_instance *newinst = (swig_instance *) malloc(sizeof(swig_instance));
-      newinst->thisptr = Tcl_DuplicateObj(robj);
-      Tcl_IncrRefCount(newinst->thisptr);
-      newinst->thisvalue = thisvalue;
-      newinst->classptr = (swig_class *) type->clientdata;
-      newinst->destroy = flags;
-      newinst->cmdtok = Tcl_CreateObjCommand(interp, Tcl_GetStringFromObj(robj,NULL), (swig_wrapper_func) SWIG_MethodCommand, (ClientData) newinst, (swig_delete_func) SWIG_ObjectDelete);
-      if (flags) {
-        SWIG_Acquire(thisvalue);
-      }
-    }
-  }
-  return robj;
-}
-
-/* Function to create objects */
-SWIGRUNTIME int
-SWIG_Tcl_ObjectConstructor(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  Tcl_Obj          *newObj = 0;
-  void             *thisvalue = 0;
-  swig_instance   *newinst = 0;
-  swig_class      *classptr = (swig_class *) clientData;
-  swig_wrapper     cons = 0;
-  char             *name = 0;
-  int               firstarg = 0;
-  int               thisarg = 0;
-  int               destroy = 1;
-
-  if (!classptr) {
-    Tcl_SetResult(interp, (char *) "swig: internal runtime error. No class object defined.", TCL_STATIC);
-    return TCL_ERROR;
-  }
-  cons = classptr->constructor;
-  if (objc > 1) {
-    char *s = Tcl_GetStringFromObj(objv[1],NULL);
-    if (strcmp(s,"-this") == 0) {
-      thisarg = 2;
-      cons = 0;
-    } else if (strcmp(s,"-args") == 0) {
-      firstarg = 1;
-    } else if (objc == 2) {
-      firstarg = 1;
-      name = s;
-    } else if (objc >= 3) {
-      char *s1;
-      name = s;
-      s1 = Tcl_GetStringFromObj(objv[2],NULL);
-      if (strcmp(s1,"-this") == 0) {
-	thisarg = 3;
-	cons = 0;
-      } else {
-	firstarg = 1;
-      }
-    }
-  }
-  if (cons) {
-    int result;
-    result = (*cons)(0, interp, objc-firstarg, &objv[firstarg]);
-    if (result != TCL_OK) {
-      return result;
-    }
-    newObj = Tcl_DuplicateObj(Tcl_GetObjResult(interp));
-    if (!name) name = Tcl_GetStringFromObj(newObj,NULL);
-  } else if (thisarg > 0) {
-    if (thisarg < objc) {
-      destroy = 0;
-      newObj = Tcl_DuplicateObj(objv[thisarg]);
-      if (!name) name = Tcl_GetStringFromObj(newObj,NULL);
-    } else {
-      Tcl_SetResult(interp, (char *) "wrong # args.", TCL_STATIC);
-      return TCL_ERROR;
-    }
-  } else {
-    Tcl_SetResult(interp, (char *) "No constructor available.", TCL_STATIC);
-    return TCL_ERROR;
-  }
-  if (SWIG_Tcl_ConvertPtr(interp,newObj, (void **) &thisvalue, *(classptr->type), 0) != SWIG_OK) {
-    Tcl_DecrRefCount(newObj);
-    return TCL_ERROR;
-  }
-  newinst = (swig_instance *) malloc(sizeof(swig_instance));
-  newinst->thisptr = newObj;
-  Tcl_IncrRefCount(newObj);
-  newinst->thisvalue = thisvalue;
-  newinst->classptr = classptr;
-  newinst->destroy = destroy;
-  if (destroy) {
-    SWIG_Acquire(thisvalue);
-  }
-  newinst->cmdtok = Tcl_CreateObjCommand(interp,name, (swig_wrapper) SWIG_MethodCommand, (ClientData) newinst, (swig_delete_func) SWIG_ObjectDelete);
-  return TCL_OK;
-}
-
-/* -----------------------------------------------------------------------------*
- *   Get arguments
- * -----------------------------------------------------------------------------*/
-SWIGRUNTIME int
-SWIG_Tcl_GetArgs(Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], const char *fmt, ...) {
-  int        argno = 0, opt = 0;
-  long       tempi;
-  double     tempd;
-  const char *c;
-  va_list    ap;
-  void      *vptr;
-  Tcl_Obj   *obj = 0;
-  swig_type_info *ty;
-
-  va_start(ap,fmt);
-  for (c = fmt; (*c && (*c != ':') && (*c != ';')); c++,argno++) {
-    if (*c == '|') {
-      opt = 1;
-      c++;
-    }
-    if (argno >= (objc-1)) {
-      if (!opt) {
-        Tcl_SetResult(interp, (char *) "Wrong number of arguments ", TCL_STATIC);
-        goto argerror;
-      } else {
-        va_end(ap);
-        return TCL_OK;
-      }
-    }
-
-    vptr = va_arg(ap,void *);
-    if (vptr) {
-      if (isupper(*c)) {
-        obj = SWIG_Tcl_GetConstantObj(Tcl_GetStringFromObj(objv[argno+1],0));
-        if (!obj) obj = objv[argno+1];
-      } else {
-        obj = objv[argno+1];
-      }
-      switch(*c) {
-      case 'i': case 'I':
-      case 'l': case 'L':
-      case 'h': case 'H':
-      case 'b': case 'B':
-        if (Tcl_GetLongFromObj(interp,obj,&tempi) != TCL_OK) goto argerror;
-        if ((*c == 'i') || (*c == 'I')) *((int *)vptr) = (int)tempi;
-        else if ((*c == 'l') || (*c == 'L')) *((long *)vptr) = (long)tempi;
-        else if ((*c == 'h') || (*c == 'H')) *((short*)vptr) = (short)tempi;
-        else if ((*c == 'b') || (*c == 'B')) *((unsigned char *)vptr) = (unsigned char)tempi;
-        break;
-      case 'f': case 'F':
-      case 'd': case 'D':
-        if (Tcl_GetDoubleFromObj(interp,obj,&tempd) != TCL_OK) goto argerror;
-        if ((*c == 'f') || (*c == 'F')) *((float *) vptr) = (float)tempd;
-        else if ((*c == 'd') || (*c == 'D')) *((double*) vptr) = tempd;
-        break;
-      case 's': case 'S':
-        if (*(c+1) == '#') {
-          int *vlptr = (int *) va_arg(ap, void *);
-          *((char **) vptr) = Tcl_GetStringFromObj(obj, vlptr);
-          c++;
-        } else {
-          *((char **)vptr) = Tcl_GetStringFromObj(obj,NULL);
-        }
-        break;
-      case 'c': case 'C':
-        *((char *)vptr) = *(Tcl_GetStringFromObj(obj,NULL));
-        break;
-      case 'p': case 'P':
-        ty = (swig_type_info *) va_arg(ap, void *);
-        if (SWIG_Tcl_ConvertPtr(interp, obj, (void **) vptr, ty, 0) != SWIG_OK) goto argerror;
-        break;
-      case 'o': case 'O':
-        *((Tcl_Obj **)vptr) = objv[argno+1];
-        break;
-      default:
-        break;
-      }
-    }
-  }
-
-  if ((*c != ';') && ((objc-1) > argno)) {
-    Tcl_SetResult(interp, (char *) "Wrong # args.", TCL_STATIC);
-    goto argerror;
-  }
-  va_end(ap);
-  return TCL_OK;
-
- argerror:
-  {
-    char temp[32];
-    sprintf(temp,"%d", argno+1);
-    c = strchr(fmt,':');
-    if (!c) c = strchr(fmt,';');
-    if (!c) c = (char *)"";
-    Tcl_AppendResult(interp,c," argument ", temp, NULL);
-    va_end(ap);
-    return TCL_ERROR;
-  }
-}
-
-#ifdef __cplusplus
-#if 0
-{ /* cc-mode */
-#endif
-}
-#endif
-
-
-
-#define SWIG_exception_fail(code, msg) do { SWIG_Error(code, msg); SWIG_fail; } while(0)
-
-#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(SWIG_RuntimeError, msg); SWIG_fail; } else
-
-
-
-/* -------- TYPES TABLE (BEGIN) -------- */
-
-#define SWIGTYPE_p__profile_t swig_types[0]
-#define SWIGTYPE_p_char swig_types[1]
-#define SWIGTYPE_p_int swig_types[2]
-#define SWIGTYPE_p_long swig_types[3]
-#define SWIGTYPE_p_p__profile_t swig_types[4]
-#define SWIGTYPE_p_p_char swig_types[5]
-#define SWIGTYPE_p_p_p_char swig_types[6]
-#define SWIGTYPE_p_p_p_void swig_types[7]
-#define SWIGTYPE_p_p_void swig_types[8]
-static swig_type_info *swig_types[10];
-static swig_module_info swig_module = {swig_types, 9, 0, 0, 0, 0};
-#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
-#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
-
-/* -------- TYPES TABLE (END) -------- */
-
-#define SWIG_init    Profile_Init
-#define SWIG_name    "profile"
-#define SWIG_prefix  ""
-#define SWIG_version "0.0"
-
-#define SWIGVERSION 0x010340
-#define SWIG_VERSION SWIGVERSION
-
-
-#define SWIG_as_voidptr(a) (void *)((const void *)(a))
-#define SWIG_as_voidptrptr(a) ((void)SWIG_as_voidptr(*a),(void**)(a))
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#ifdef MAC_TCL
-#pragma export on
-#endif
-SWIGEXPORT int SWIG_init(Tcl_Interp *);
-#ifdef MAC_TCL
-#pragma export off
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* Compatibility version for TCL stubs */
-#ifndef SWIG_TCL_STUBS_VERSION
-#define SWIG_TCL_STUBS_VERSION "8.1"
-#endif
-
-
-
-/*
- * Copyright 2004, 2008 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, 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, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  Furthermore if you modify this software you must label
- * your software as modified software and not distribute it in such a
- * fashion that it might be confused with the original M.I.T. software.
- * M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- *
- *
- * Input for wrapper generator program SWIG for profile routines.
- */
-#include <errno.h>
-#include "com_err.h"
-#include "profile.h"
-
-#ifdef SWIGTCL
-/* Reduce warnings about cast discarding const to just this one, from
-   every SWIG-generated call to Tcl_SetResult.  */
-static void my_tcl_setresult(Tcl_Interp *i, const char *str, Tcl_FreeProc *f)
-{
-    Tcl_SetResult(i, (char *) str, f);
-}
-#undef Tcl_SetResult
-#define Tcl_SetResult my_tcl_setresult
-#endif
-
-
-typedef struct {
-    void *handle;
-    char **args;
-} *iter_t;
-
-
-SWIGINTERN int
-SWIG_AsCharPtrAndSize(Tcl_Obj *obj, char** cptr, size_t* psize, int *alloc)
-{
-  int len = 0;
-  char *cstr = Tcl_GetStringFromObj(obj, &len);
-  if (cstr) {
-    if (cptr)  *cptr = cstr;
-    if (psize) *psize = len + 1;
-    if (alloc) *alloc = SWIG_OLDOBJ;
-    return SWIG_OK;
-  }
-  return SWIG_TypeError;
-}
-
-
-
-
-
-#include <limits.h>
-#if !defined(SWIG_NO_LLONG_MAX)
-# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
-#   define LLONG_MAX __LONG_LONG_MAX__
-#   define LLONG_MIN (-LLONG_MAX - 1LL)
-#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
-# endif
-#endif
-
-
-SWIGINTERN int
-SWIG_AsVal_long SWIG_TCL_DECL_ARGS_2(Tcl_Obj *obj, long* val)
-{
-  long v;
-  if (Tcl_GetLongFromObj(0,obj, &v) == TCL_OK) {
-    if (val) *val = (long) v;
-    return SWIG_OK;
-  }
-  return SWIG_TypeError;
-}
-
-
-SWIGINTERN int
-SWIG_AsVal_int SWIG_TCL_DECL_ARGS_2(Tcl_Obj * obj, int *val)
-{
-  long v;
-  int res = SWIG_AsVal_long SWIG_TCL_CALL_ARGS_2(obj, &v);
-  if (SWIG_IsOK(res)) {
-    if ((v < INT_MIN || v > INT_MAX)) {
-      return SWIG_OverflowError;
-    } else {
-      if (val) *val = (int)(v);
-    }
-  }
-  return res;
-}
-
-
-SWIGINTERNINLINE Tcl_Obj*
-SWIG_From_long  (long value)
-{
-  if (((long) INT_MIN <= value) && (value <= (long) INT_MAX)) {
-    return Tcl_NewIntObj((int)(value));
-  } else {
-    return Tcl_NewLongObj(value);
-  }
-}
-
-
-SWIGINTERNINLINE Tcl_Obj *
-SWIG_From_int  (int value)
-{
-  return SWIG_From_long  (value);
-}
-
-
-static void iter_free(iter_t it)
-{
-    int i;
-
-    for (i = 0; it->args != NULL && it->args[i] != NULL; i++)
-	free(it->args[i]);
-    free(it->args);
-    profile_iterator_free(&it->handle);
-    free(it);
-}
-
-static errcode_t iter_create(profile_t p, const char **nullterm,
-			     int flags, iter_t *OUTPUT)
-{
-    iter_t it;
-    errcode_t err;
-
-    it = malloc(sizeof(*it));
-    if (it == NULL)
-	return ENOMEM;
-    {
-	/* The current implementation requires that the names be kept around
-	 * for the lifetime of the iterator. */
-	int count, j;
-	for (count = 0; nullterm[count]; count++) ;
-	it->args = calloc(count + 1, sizeof(*it->args));
-	if (it->args == NULL)
-	    return ENOMEM;
-	for (j = 0; j < count; j++) {
-	    it->args[j] = strdup(nullterm[j]);
-	    if (it->args[j] == NULL)
-		return ENOMEM;
-	}
-	it->args[j] = NULL;
-    }
-    err = profile_iterator_create(p, (const char **)it->args, flags,
-				  &it->handle);
-    if (err)
-	iter_free(it);
-    else
-	*OUTPUT = it;
-    return err;
-}
-
-
-/* A TCL_AppInit() function that lets you build a new copy
- * of tclsh.
- *
- * The macro SWIG_init contains the name of the initialization
- * function in the wrapper file.
- */
-
-#ifndef SWIG_RcFileName
-char *SWIG_RcFileName = "~/.myapprc";
-#endif
-
-
-#ifdef MAC_TCL
-extern int		MacintoshInit _ANSI_ARGS_((void));
-#endif
-
-int Tcl_AppInit(Tcl_Interp *interp){
-
-  if (Tcl_Init(interp) == TCL_ERROR)
-    return TCL_ERROR;
-
-  /* Now initialize our functions */
-
-  if (SWIG_init(interp) == TCL_ERROR)
-    return TCL_ERROR;
-#if TCL_MAJOR_VERSION > 7 || TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION >= 5
-   Tcl_SetVar(interp, (char *) "tcl_rcFileName",SWIG_RcFileName,TCL_GLOBAL_ONLY);
-#else
-   tcl_RcFileName = SWIG_RcFileName;
-#endif
-#ifdef SWIG_RcRsrcName
-  Tcl_SetVar(interp, (char *) "tcl_rcRsrcName",SWIG_RcRsrcName,TCL_GLOBAL);
-#endif
-
-  return TCL_OK;
-}
-
-#if TCL_MAJOR_VERSION > 7 || TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION >= 4
-int main(int argc, char **argv) {
-#ifdef MAC_TCL
-    char *newArgv[2];
-
-    if (MacintoshInit()  != TCL_OK) {
-	Tcl_Exit(1);
-    }
-
-    argc = 1;
-    newArgv[0] = "tclsh";
-    newArgv[1] = NULL;
-    argv = newArgv;
-#endif
-
-  Tcl_Main(argc, argv, Tcl_AppInit);
-  return(0);
-
-}
-#else
-extern int main();
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SWIGINTERN int
-_wrap_profile_init_path(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  char *arg1 = (char *) NULL ;
-  profile_t *arg2 = (profile_t *) 0 ;
-  int res1 ;
-  char *buf1 = 0 ;
-  int alloc1 = 0 ;
-  profile_t tmp2 ;
-  errcode_t result;
-
-  {
-    /*generic swigtype hack*/ arg2 = &tmp2;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"|o:profile_init_path ?path? ",(void *)0) == TCL_ERROR) SWIG_fail;
-  if (objc > 1) {
-    res1 = SWIG_AsCharPtrAndSize(objv[1], &buf1, NULL, &alloc1);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_init_path" "', argument " "1"" of type '" "char const *""'");
-    }
-    arg1 = (char *)(buf1);
-  }
-  result = (errcode_t)profile_init_path((char const *)arg1,arg2);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  /*generic swigtype hack*/ Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) *arg2, SWIGTYPE_p__profile_t,0));
-  if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
-  return TCL_OK;
-fail:
-  if (alloc1 == SWIG_NEWOBJ) free((char*)buf1);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_init(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  char **arg1 = (char **) NULL ;
-  profile_t *arg2 = (profile_t *) 0 ;
-  profile_t tmp2 ;
-  errcode_t result;
-
-  {
-    /*generic swigtype hack*/ arg2 = &tmp2;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"|o:profile_init ?nullterm? ",(void *)0) == TCL_ERROR) SWIG_fail;
-  if (objc > 1) {
-    {
-      /* in char **nullterm */
-      int n;
-      if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[1],NULL), &n, (const char ***) &arg1) == TCL_ERROR) SWIG_fail;
-    }
-  }
-  result = (errcode_t)profile_init((char const **)arg1,arg2);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  /*generic swigtype hack*/ Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) *arg2, SWIGTYPE_p__profile_t,0));
-  {
-    /* freearg char **nullterm */
-    if (arg1) {
-      Tcl_Free((char *)arg1); arg1 = (char **) NULL;
-    }
-  }
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg1) {
-      Tcl_Free((char *)arg1); arg1 = (char **) NULL;
-    }
-  }
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_flush(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  errcode_t result;
-
-  if (SWIG_GetArgs(interp, objc, objv,"o:profile_flush profile_t ",(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_flush" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  result = (errcode_t)profile_flush(arg1);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  return TCL_OK;
-fail:
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_flush_to_file(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char *arg2 = (char *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 ;
-  char *buf2 = 0 ;
-  int alloc2 = 0 ;
-  errcode_t result;
-
-  if (SWIG_GetArgs(interp, objc, objv,"oo:profile_flush_to_file profile_t path ",(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_flush_to_file" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  res2 = SWIG_AsCharPtrAndSize(objv[2], &buf2, NULL, &alloc2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "profile_flush_to_file" "', argument " "2"" of type '" "char const *""'");
-  }
-  arg2 = (char *)(buf2);
-  result = (errcode_t)profile_flush_to_file(arg1,(char const *)arg2);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  return TCL_OK;
-fail:
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_abandon(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-
-  if (SWIG_GetArgs(interp, objc, objv,"o:profile_abandon profile_t ",(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_abandon" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  profile_abandon(arg1);
-
-  return TCL_OK;
-fail:
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_release(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-
-  if (SWIG_GetArgs(interp, objc, objv,"o:profile_release profile_t ",(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_release" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  profile_release(arg1);
-
-  return TCL_OK;
-fail:
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_get_values(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char ***arg3 = (char ***) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char **tmp3 ;
-  errcode_t result;
-
-  {
-    /* in char ***OUTPUT */
-    tmp3 = NULL;
-    arg3 = &tmp3;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"oo:profile_get_values p nullterm ",(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_get_values" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  result = (errcode_t)profile_get_values(arg1,(char const **)arg2,arg3);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* argout char ***OUTPUT */
-    int i;
-    for (i = 0; (*arg3)[i]; i++)
-    Tcl_AppendElement(interp, (*arg3)[i]);
-  }
-  profile_free_list(*arg3);
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_get_string(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char *arg2 = (char *) 0 ;
-  char *arg3 = (char *) 0 ;
-  char *arg4 = (char *) NULL ;
-  char *arg5 = (char *) NULL ;
-  char **arg6 = (char **) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 ;
-  char *buf2 = 0 ;
-  int alloc2 = 0 ;
-  int res3 ;
-  char *buf3 = 0 ;
-  int alloc3 = 0 ;
-  int res4 ;
-  char *buf4 = 0 ;
-  int alloc4 = 0 ;
-  int res5 ;
-  char *buf5 = 0 ;
-  int alloc5 = 0 ;
-  char *tmp6 ;
-  errcode_t result;
-
-  {
-    /* in char **OUTPUT */
-    tmp6 = NULL;
-    arg6 = &tmp6;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"ooo|oo:profile_get_string p name subname ?subsubname? ?defval? ",(void *)0,(void *)0,(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_get_string" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  res2 = SWIG_AsCharPtrAndSize(objv[2], &buf2, NULL, &alloc2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "profile_get_string" "', argument " "2"" of type '" "char const *""'");
-  }
-  arg2 = (char *)(buf2);
-  res3 = SWIG_AsCharPtrAndSize(objv[3], &buf3, NULL, &alloc3);
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "profile_get_string" "', argument " "3"" of type '" "char const *""'");
-  }
-  arg3 = (char *)(buf3);
-  if (objc > 4) {
-    res4 = SWIG_AsCharPtrAndSize(objv[4], &buf4, NULL, &alloc4);
-    if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "profile_get_string" "', argument " "4"" of type '" "char const *""'");
-    }
-    arg4 = (char *)(buf4);
-  }
-  if (objc > 5) {
-    res5 = SWIG_AsCharPtrAndSize(objv[5], &buf5, NULL, &alloc5);
-    if (!SWIG_IsOK(res5)) {
-      SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "profile_get_string" "', argument " "5"" of type '" "char const *""'");
-    }
-    arg5 = (char *)(buf5);
-  }
-  result = (errcode_t)profile_get_string(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,arg6);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* argout char **OUTPUT */
-    /*    Tcl_SetResult(interp, *arg6, TCL_DYNAMIC); */
-    char *s = (arg6 && *arg6) ? *arg6 : "";
-    Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp),
-      Tcl_NewStringObj(s, strlen(s)));
-    profile_release_string(s);
-  }
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
-  return TCL_OK;
-fail:
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  if (alloc5 == SWIG_NEWOBJ) free((char*)buf5);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_get_integer(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char *arg2 = (char *) 0 ;
-  char *arg3 = (char *) 0 ;
-  char *arg4 = (char *) NULL ;
-  int arg5 = (int) 0 ;
-  int *arg6 = (int *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 ;
-  char *buf2 = 0 ;
-  int alloc2 = 0 ;
-  int res3 ;
-  char *buf3 = 0 ;
-  int alloc3 = 0 ;
-  int res4 ;
-  char *buf4 = 0 ;
-  int alloc4 = 0 ;
-  int val5 ;
-  int ecode5 = 0 ;
-  int temp6 ;
-  int res6 = SWIG_TMPOBJ ;
-  errcode_t result;
-
-  arg6 = &temp6;
-  if (SWIG_GetArgs(interp, objc, objv,"ooo|oo:profile_get_integer p name subname ?subsubname? ?defval? ",(void *)0,(void *)0,(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_get_integer" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  res2 = SWIG_AsCharPtrAndSize(objv[2], &buf2, NULL, &alloc2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "profile_get_integer" "', argument " "2"" of type '" "char const *""'");
-  }
-  arg2 = (char *)(buf2);
-  res3 = SWIG_AsCharPtrAndSize(objv[3], &buf3, NULL, &alloc3);
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "profile_get_integer" "', argument " "3"" of type '" "char const *""'");
-  }
-  arg3 = (char *)(buf3);
-  if (objc > 4) {
-    res4 = SWIG_AsCharPtrAndSize(objv[4], &buf4, NULL, &alloc4);
-    if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "profile_get_integer" "', argument " "4"" of type '" "char const *""'");
-    }
-    arg4 = (char *)(buf4);
-  }
-  if (objc > 5) {
-    ecode5 = SWIG_AsVal_int SWIG_TCL_CALL_ARGS_2(objv[5], &val5);
-    if (!SWIG_IsOK(ecode5)) {
-      SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "profile_get_integer" "', argument " "5"" of type '" "int""'");
-    }
-    arg5 = (int)(val5);
-  }
-  result = (errcode_t)profile_get_integer(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  if (SWIG_IsTmpObj(res6)) {
-    Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),SWIG_From_int((*arg6)));
-  } else {
-    int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN |  0 ) :  0 ;
-    Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_int, new_flags));
-  }
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  return TCL_OK;
-fail:
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_get_boolean(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char *arg2 = (char *) 0 ;
-  char *arg3 = (char *) 0 ;
-  char *arg4 = (char *) NULL ;
-  int arg5 = (int) 0 ;
-  int *arg6 = (int *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 ;
-  char *buf2 = 0 ;
-  int alloc2 = 0 ;
-  int res3 ;
-  char *buf3 = 0 ;
-  int alloc3 = 0 ;
-  int res4 ;
-  char *buf4 = 0 ;
-  int alloc4 = 0 ;
-  int val5 ;
-  int ecode5 = 0 ;
-  int temp6 ;
-  int res6 = SWIG_TMPOBJ ;
-  errcode_t result;
-
-  arg6 = &temp6;
-  if (SWIG_GetArgs(interp, objc, objv,"ooo|oo:profile_get_boolean p name subname ?subsubname? ?defval? ",(void *)0,(void *)0,(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_get_boolean" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  res2 = SWIG_AsCharPtrAndSize(objv[2], &buf2, NULL, &alloc2);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "profile_get_boolean" "', argument " "2"" of type '" "char const *""'");
-  }
-  arg2 = (char *)(buf2);
-  res3 = SWIG_AsCharPtrAndSize(objv[3], &buf3, NULL, &alloc3);
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "profile_get_boolean" "', argument " "3"" of type '" "char const *""'");
-  }
-  arg3 = (char *)(buf3);
-  if (objc > 4) {
-    res4 = SWIG_AsCharPtrAndSize(objv[4], &buf4, NULL, &alloc4);
-    if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "profile_get_boolean" "', argument " "4"" of type '" "char const *""'");
-    }
-    arg4 = (char *)(buf4);
-  }
-  if (objc > 5) {
-    ecode5 = SWIG_AsVal_int SWIG_TCL_CALL_ARGS_2(objv[5], &val5);
-    if (!SWIG_IsOK(ecode5)) {
-      SWIG_exception_fail(SWIG_ArgError(ecode5), "in method '" "profile_get_boolean" "', argument " "5"" of type '" "int""'");
-    }
-    arg5 = (int)(val5);
-  }
-  result = (errcode_t)profile_get_boolean(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,arg5,arg6);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  if (SWIG_IsTmpObj(res6)) {
-    Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),SWIG_From_int((*arg6)));
-  } else {
-    int new_flags = SWIG_IsNewObj(res6) ? (SWIG_POINTER_OWN |  0 ) :  0 ;
-    Tcl_ListObjAppendElement(interp,Tcl_GetObjResult(interp),SWIG_NewPointerObj((void*)(arg6), SWIGTYPE_p_int, new_flags));
-  }
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  return TCL_OK;
-fail:
-  if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_get_relation_names(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char ***arg3 = (char ***) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char **tmp3 ;
-  errcode_t result;
-
-  {
-    /* in char ***OUTPUT */
-    tmp3 = NULL;
-    arg3 = &tmp3;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"oo:profile_get_relation_names p nullterm ",(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_get_relation_names" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  result = (errcode_t)profile_get_relation_names(arg1,(char const **)arg2,arg3);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* argout char ***OUTPUT */
-    int i;
-    for (i = 0; (*arg3)[i]; i++)
-    Tcl_AppendElement(interp, (*arg3)[i]);
-  }
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_get_subsection_names(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char ***arg3 = (char ***) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char **tmp3 ;
-  errcode_t result;
-
-  {
-    /* in char ***OUTPUT */
-    tmp3 = NULL;
-    arg3 = &tmp3;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"oo:profile_get_subsection_names p nullterm ",(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_get_subsection_names" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  result = (errcode_t)profile_get_subsection_names(arg1,(char const **)arg2,arg3);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* argout char ***OUTPUT */
-    int i;
-    for (i = 0; (*arg3)[i]; i++)
-    Tcl_AppendElement(interp, (*arg3)[i]);
-  }
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_iterator_create(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  int arg3 ;
-  iter_t *arg4 = (iter_t *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int val3 ;
-  int ecode3 = 0 ;
-  iter_t tmp4 ;
-  errcode_t result;
-
-  {
-    /*generic swigtype hack*/ arg4 = &tmp4;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"ooo:profile_iterator_create p nullterm flags ",(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_iterator_create" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  ecode3 = SWIG_AsVal_int SWIG_TCL_CALL_ARGS_2(objv[3], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "profile_iterator_create" "', argument " "3"" of type '" "int""'");
-  }
-  arg3 = (int)(val3);
-  result = (errcode_t)iter_create(arg1,(char const **)arg2,arg3,arg4);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  /*generic swigtype hack*/ Tcl_SetObjResult(interp,SWIG_NewInstanceObj((void *) *arg4, SWIGTYPE_p_p_void,0));
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_iterator_free(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  iter_t arg1 = (iter_t) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-
-  if (SWIG_GetArgs(interp, objc, objv,"o:profile_iterator_free i ",(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p_p_void, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_iterator_free" "', argument " "1"" of type '" "iter_t""'");
-  }
-  arg1 = (iter_t)(argp1);
-  iter_free(arg1);
-
-  return TCL_OK;
-fail:
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_iterator(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  iter_t arg1 = (iter_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char **arg3 = (char **) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char *tmp2 ;
-  char *tmp3 ;
-  errcode_t result;
-
-  {
-    /* in char **OUTPUT */
-    tmp2 = NULL;
-    arg2 = &tmp2;
-  }
-  {
-    /* in char **OUTPUT */
-    tmp3 = NULL;
-    arg3 = &tmp3;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"o:profile_iterator iter_t ",(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p_p_void, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_iterator" "', argument " "1"" of type '" "iter_t""'");
-  }
-  arg1 = (iter_t)(argp1);
-  result = (errcode_t)profile_iterator(&arg1->handle,arg2,arg3);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* argout char **OUTPUT */
-    /*    Tcl_SetResult(interp, *arg2, TCL_DYNAMIC); */
-    char *s = (arg2 && *arg2) ? *arg2 : "";
-    Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp),
-      Tcl_NewStringObj(s, strlen(s)));
-  }
-  profile_release_string(*arg2);
-  {
-    /* argout char **OUTPUT */
-    /*    Tcl_SetResult(interp, *arg3, TCL_DYNAMIC); */
-    char *s = (arg3 && *arg3) ? *arg3 : "";
-    Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp),
-      Tcl_NewStringObj(s, strlen(s)));
-  }
-  profile_release_string(*arg3);
-  return TCL_OK;
-fail:
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_update_relation(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char *arg3 = (char *) 0 ;
-  char *arg4 = (char *) NULL ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res3 ;
-  char *buf3 = 0 ;
-  int alloc3 = 0 ;
-  int res4 ;
-  char *buf4 = 0 ;
-  int alloc4 = 0 ;
-  errcode_t result;
-
-  if (SWIG_GetArgs(interp, objc, objv,"ooo|o:profile_update_relation p nullterm oldval ?newval? ",(void *)0,(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_update_relation" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  res3 = SWIG_AsCharPtrAndSize(objv[3], &buf3, NULL, &alloc3);
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "profile_update_relation" "', argument " "3"" of type '" "char const *""'");
-  }
-  arg3 = (char *)(buf3);
-  if (objc > 4) {
-    res4 = SWIG_AsCharPtrAndSize(objv[4], &buf4, NULL, &alloc4);
-    if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "profile_update_relation" "', argument " "4"" of type '" "char const *""'");
-    }
-    arg4 = (char *)(buf4);
-  }
-  result = (errcode_t)profile_update_relation(arg1,(char const **)arg2,(char const *)arg3,(char const *)arg4);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  if (alloc4 == SWIG_NEWOBJ) free((char*)buf4);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_clear_relation(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  errcode_t result;
-
-  if (SWIG_GetArgs(interp, objc, objv,"oo:profile_clear_relation p nullterm ",(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_clear_relation" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  result = (errcode_t)profile_clear_relation(arg1,(char const **)arg2);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_rename_section(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char *arg3 = (char *) NULL ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res3 ;
-  char *buf3 = 0 ;
-  int alloc3 = 0 ;
-  errcode_t result;
-
-  if (SWIG_GetArgs(interp, objc, objv,"oo|o:profile_rename_section p nullterm ?new_name? ",(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_rename_section" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  if (objc > 3) {
-    res3 = SWIG_AsCharPtrAndSize(objv[3], &buf3, NULL, &alloc3);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "profile_rename_section" "', argument " "3"" of type '" "char const *""'");
-    }
-    arg3 = (char *)(buf3);
-  }
-  result = (errcode_t)profile_rename_section(arg1,(char const **)arg2,(char const *)arg3);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_add_relation(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  char *arg3 = (char *) NULL ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res3 ;
-  char *buf3 = 0 ;
-  int alloc3 = 0 ;
-  errcode_t result;
-
-  if (SWIG_GetArgs(interp, objc, objv,"oo|o:profile_add_relation p nullterm ?new_val? ",(void *)0,(void *)0,(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_add_relation" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  {
-    /* in char **nullterm */
-    int n;
-    if (Tcl_SplitList(interp, Tcl_GetStringFromObj(objv[2],NULL), &n, (const char ***) &arg2) == TCL_ERROR) SWIG_fail;
-  }
-  if (objc > 3) {
-    res3 = SWIG_AsCharPtrAndSize(objv[3], &buf3, NULL, &alloc3);
-    if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "profile_add_relation" "', argument " "3"" of type '" "char const *""'");
-    }
-    arg3 = (char *)(buf3);
-  }
-  result = (errcode_t)profile_add_relation(arg1,(char const **)arg2,(char const *)arg3);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  return TCL_OK;
-fail:
-  {
-    /* freearg char **nullterm */
-    if (arg2) {
-      Tcl_Free((char *)arg2); arg2 = (char **) NULL;
-    }
-  }
-  if (alloc3 == SWIG_NEWOBJ) free((char*)buf3);
-  return TCL_ERROR;
-}
-
-
-SWIGINTERN int
-_wrap_profile_flush_to_buffer(ClientData clientData SWIGUNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
-  profile_t arg1 = (profile_t) 0 ;
-  char **arg2 = (char **) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  char *tmp2 ;
-  errcode_t result;
-
-  {
-    /* in char **OUTPUT */
-    tmp2 = NULL;
-    arg2 = &tmp2;
-  }
-  if (SWIG_GetArgs(interp, objc, objv,"o:profile_flush_to_buffer p ",(void *)0) == TCL_ERROR) SWIG_fail;
-  res1 = SWIG_ConvertPtr(objv[1], &argp1,SWIGTYPE_p__profile_t, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "profile_flush_to_buffer" "', argument " "1"" of type '" "profile_t""'");
-  }
-  arg1 = (profile_t)(argp1);
-  result = (errcode_t)profile_flush_to_buffer(arg1,arg2);
-  {
-    /* out errcode_t result */
-    if (result) {
-      /* There could be a memory leak here in the SWIG-Tcl layer,
-      	   I'm not sure.  Not going to worry about it though.  */
-      Tcl_SetResult(interp, (char *) error_message(result), TCL_STATIC);
-      SWIG_fail;
-    }
-  }
-  {
-    /* argout char **OUTPUT */
-    /*    Tcl_SetResult(interp, *arg2, TCL_DYNAMIC); */
-    char *s = (arg2 && *arg2) ? *arg2 : "";
-    Tcl_ListObjAppendElement(interp, Tcl_GetObjResult(interp),
-      Tcl_NewStringObj(s, strlen(s)));
-  }
-  return TCL_OK;
-fail:
-  return TCL_ERROR;
-}
-
-
-
-static swig_command_info swig_commands[] = {
-    { SWIG_prefix "profile_init_path", (swig_wrapper_func) _wrap_profile_init_path, NULL},
-    { SWIG_prefix "profile_init", (swig_wrapper_func) _wrap_profile_init, NULL},
-    { SWIG_prefix "profile_flush", (swig_wrapper_func) _wrap_profile_flush, NULL},
-    { SWIG_prefix "profile_flush_to_file", (swig_wrapper_func) _wrap_profile_flush_to_file, NULL},
-    { SWIG_prefix "profile_abandon", (swig_wrapper_func) _wrap_profile_abandon, NULL},
-    { SWIG_prefix "profile_release", (swig_wrapper_func) _wrap_profile_release, NULL},
-    { SWIG_prefix "profile_get_values", (swig_wrapper_func) _wrap_profile_get_values, NULL},
-    { SWIG_prefix "profile_get_string", (swig_wrapper_func) _wrap_profile_get_string, NULL},
-    { SWIG_prefix "profile_get_integer", (swig_wrapper_func) _wrap_profile_get_integer, NULL},
-    { SWIG_prefix "profile_get_boolean", (swig_wrapper_func) _wrap_profile_get_boolean, NULL},
-    { SWIG_prefix "profile_get_relation_names", (swig_wrapper_func) _wrap_profile_get_relation_names, NULL},
-    { SWIG_prefix "profile_get_subsection_names", (swig_wrapper_func) _wrap_profile_get_subsection_names, NULL},
-    { SWIG_prefix "profile_iterator_create", (swig_wrapper_func) _wrap_profile_iterator_create, NULL},
-    { SWIG_prefix "profile_iterator_free", (swig_wrapper_func) _wrap_profile_iterator_free, NULL},
-    { SWIG_prefix "profile_iterator", (swig_wrapper_func) _wrap_profile_iterator, NULL},
-    { SWIG_prefix "profile_update_relation", (swig_wrapper_func) _wrap_profile_update_relation, NULL},
-    { SWIG_prefix "profile_clear_relation", (swig_wrapper_func) _wrap_profile_clear_relation, NULL},
-    { SWIG_prefix "profile_rename_section", (swig_wrapper_func) _wrap_profile_rename_section, NULL},
-    { SWIG_prefix "profile_add_relation", (swig_wrapper_func) _wrap_profile_add_relation, NULL},
-    { SWIG_prefix "profile_flush_to_buffer", (swig_wrapper_func) _wrap_profile_flush_to_buffer, NULL},
-    {0, 0, 0}
-};
-
-static swig_var_info swig_variables[] = {
-    {0,0,0,0}
-};
-
-static swig_const_info swig_constants[] = {
-    {0,0,0,0,0,0}
-};
-
-/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
-
-static swig_type_info _swigt__p__profile_t = {"_p__profile_t", "struct _profile_t *|profile_t", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_long = {"_p_long", "long *|errcode_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p__profile_t = {"_p_p__profile_t", "profile_t *|struct _profile_t **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_char = {"_p_p_char", "char **", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_p_char = {"_p_p_p_char", "char ***", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_p_void = {"_p_p_p_void", "void ***|iter_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_p_void = {"_p_p_void", "void **|iter_t", 0, 0, (void*)0, 0};
-
-static swig_type_info *swig_type_initial[] = {
-  &_swigt__p__profile_t,
-  &_swigt__p_char,
-  &_swigt__p_int,
-  &_swigt__p_long,
-  &_swigt__p_p__profile_t,
-  &_swigt__p_p_char,
-  &_swigt__p_p_p_char,
-  &_swigt__p_p_p_void,
-  &_swigt__p_p_void,
-};
-
-static swig_cast_info _swigc__p__profile_t[] = {  {&_swigt__p__profile_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_long[] = {  {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p__profile_t[] = {  {&_swigt__p_p__profile_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p_char[] = {  {&_swigt__p_p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p_p_char[] = {  {&_swigt__p_p_p_char, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p_p_void[] = {  {&_swigt__p_p_p_void, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_p_void[] = {  {&_swigt__p_p_void, 0, 0, 0},{0, 0, 0, 0}};
-
-static swig_cast_info *swig_cast_initial[] = {
-  _swigc__p__profile_t,
-  _swigc__p_char,
-  _swigc__p_int,
-  _swigc__p_long,
-  _swigc__p_p__profile_t,
-  _swigc__p_p_char,
-  _swigc__p_p_p_char,
-  _swigc__p_p_p_void,
-  _swigc__p_p_void,
-};
-
-
-/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
-
-#ifdef __cplusplus
-}
-#endif
-/* -----------------------------------------------------------------------------
- * Type initialization:
- * This problem is tough by the requirement that no dynamic
- * memory is used. Also, since swig_type_info structures store pointers to
- * swig_cast_info structures and swig_cast_info structures store pointers back
- * to swig_type_info structures, we need some lookup code at initialization.
- * The idea is that swig generates all the structures that are needed.
- * The runtime then collects these partially filled structures.
- * The SWIG_InitializeModule function takes these initial arrays out of
- * swig_module, and does all the lookup, filling in the swig_module.types
- * array with the correct data and linking the correct swig_cast_info
- * structures together.
- *
- * The generated swig_type_info structures are assigned staticly to an initial
- * array. We just loop through that array, and handle each type individually.
- * First we lookup if this type has been already loaded, and if so, use the
- * loaded structure instead of the generated one. Then we have to fill in the
- * cast linked list. The cast data is initially stored in something like a
- * two-dimensional array. Each row corresponds to a type (there are the same
- * number of rows as there are in the swig_type_initial array). Each entry in
- * a column is one of the swig_cast_info structures for that type.
- * The cast_initial array is actually an array of arrays, because each row has
- * a variable number of columns. So to actually build the cast linked list,
- * we find the array of casts associated with the type, and loop through it
- * adding the casts to the list. The one last trick we need to do is making
- * sure the type pointer in the swig_cast_info struct is correct.
- *
- * First off, we lookup the cast->type name to see if it is already loaded.
- * There are three cases to handle:
- *  1) If the cast->type has already been loaded AND the type we are adding
- *     casting info to has not been loaded (it is in this module), THEN we
- *     replace the cast->type pointer with the type pointer that has already
- *     been loaded.
- *  2) If BOTH types (the one we are adding casting info to, and the
- *     cast->type) are loaded, THEN the cast info has already been loaded by
- *     the previous module so we just ignore it.
- *  3) Finally, if cast->type has not already been loaded, then we add that
- *     swig_cast_info to the linked list (because the cast->type) pointer will
- *     be correct.
- * ----------------------------------------------------------------------------- */
-
-#ifdef __cplusplus
-extern "C" {
-#if 0
-} /* c-mode */
-#endif
-#endif
-
-#if 0
-#define SWIGRUNTIME_DEBUG
-#endif
-
-
-SWIGRUNTIME void
-SWIG_InitializeModule(void *clientdata) {
-  size_t i;
-  swig_module_info *module_head, *iter;
-  int found, init;
-
-  /* check to see if the circular list has been setup, if not, set it up */
-  if (swig_module.next==0) {
-    /* Initialize the swig_module */
-    swig_module.type_initial = swig_type_initial;
-    swig_module.cast_initial = swig_cast_initial;
-    swig_module.next = &swig_module;
-    init = 1;
-  } else {
-    init = 0;
-  }
-
-  /* Try and load any already created modules */
-  module_head = SWIG_GetModule(clientdata);
-  if (!module_head) {
-    /* This is the first module loaded for this interpreter */
-    /* so set the swig module into the interpreter */
-    SWIG_SetModule(clientdata, &swig_module);
-    module_head = &swig_module;
-  } else {
-    /* the interpreter has loaded a SWIG module, but has it loaded this one? */
-    found=0;
-    iter=module_head;
-    do {
-      if (iter==&swig_module) {
-        found=1;
-        break;
-      }
-      iter=iter->next;
-    } while (iter!= module_head);
-
-    /* if the is found in the list, then all is done and we may leave */
-    if (found) return;
-    /* otherwise we must add out module into the list */
-    swig_module.next = module_head->next;
-    module_head->next = &swig_module;
-  }
-
-  /* When multiple interpeters are used, a module could have already been initialized in
-       a different interpreter, but not yet have a pointer in this interpreter.
-       In this case, we do not want to continue adding types... everything should be
-       set up already */
-  if (init == 0) return;
-
-  /* Now work on filling in swig_module.types */
-#ifdef SWIGRUNTIME_DEBUG
-  printf("SWIG_InitializeModule: size %d\n", swig_module.size);
-#endif
-  for (i = 0; i < swig_module.size; ++i) {
-    swig_type_info *type = 0;
-    swig_type_info *ret;
-    swig_cast_info *cast;
-
-#ifdef SWIGRUNTIME_DEBUG
-    printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
-#endif
-
-    /* if there is another module already loaded */
-    if (swig_module.next != &swig_module) {
-      type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name);
-    }
-    if (type) {
-      /* Overwrite clientdata field */
-#ifdef SWIGRUNTIME_DEBUG
-      printf("SWIG_InitializeModule: found type %s\n", type->name);
-#endif
-      if (swig_module.type_initial[i]->clientdata) {
-        type->clientdata = swig_module.type_initial[i]->clientdata;
-#ifdef SWIGRUNTIME_DEBUG
-        printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name);
-#endif
-      }
-    } else {
-      type = swig_module.type_initial[i];
-    }
-
-    /* Insert casting types */
-    cast = swig_module.cast_initial[i];
-    while (cast->type) {
-      /* Don't need to add information already in the list */
-      ret = 0;
-#ifdef SWIGRUNTIME_DEBUG
-      printf("SWIG_InitializeModule: look cast %s\n", cast->type->name);
-#endif
-      if (swig_module.next != &swig_module) {
-        ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name);
-#ifdef SWIGRUNTIME_DEBUG
-        if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name);
-#endif
-      }
-      if (ret) {
-        if (type == swig_module.type_initial[i]) {
-#ifdef SWIGRUNTIME_DEBUG
-          printf("SWIG_InitializeModule: skip old type %s\n", ret->name);
-#endif
-          cast->type = ret;
-          ret = 0;
-        } else {
-          /* Check for casting already in the list */
-          swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type);
-#ifdef SWIGRUNTIME_DEBUG
-          if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name);
-#endif
-          if (!ocast) ret = 0;
-        }
-      }
-
-      if (!ret) {
-#ifdef SWIGRUNTIME_DEBUG
-        printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name);
-#endif
-        if (type->cast) {
-          type->cast->prev = cast;
-          cast->next = type->cast;
-        }
-        type->cast = cast;
-      }
-      cast++;
-    }
-    /* Set entry in modules->types array equal to the type */
-    swig_module.types[i] = type;
-  }
-  swig_module.types[i] = 0;
-
-#ifdef SWIGRUNTIME_DEBUG
-  printf("**** SWIG_InitializeModule: Cast List ******\n");
-  for (i = 0; i < swig_module.size; ++i) {
-    int j = 0;
-    swig_cast_info *cast = swig_module.cast_initial[i];
-    printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name);
-    while (cast->type) {
-      printf("SWIG_InitializeModule: cast type %s\n", cast->type->name);
-      cast++;
-      ++j;
-    }
-    printf("---- Total casts: %d\n",j);
-  }
-  printf("**** SWIG_InitializeModule: Cast List ******\n");
-#endif
-}
-
-/* This function will propagate the clientdata field of type to
-* any new swig_type_info structures that have been added into the list
-* of equivalent types.  It is like calling
-* SWIG_TypeClientData(type, clientdata) a second time.
-*/
-SWIGRUNTIME void
-SWIG_PropagateClientData(void) {
-  size_t i;
-  swig_cast_info *equiv;
-  static int init_run = 0;
-
-  if (init_run) return;
-  init_run = 1;
-
-  for (i = 0; i < swig_module.size; i++) {
-    if (swig_module.types[i]->clientdata) {
-      equiv = swig_module.types[i]->cast;
-      while (equiv) {
-        if (!equiv->converter) {
-          if (equiv->type && !equiv->type->clientdata)
-          SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata);
-        }
-        equiv = equiv->next;
-      }
-    }
-  }
-}
-
-#ifdef __cplusplus
-#if 0
-{
-  /* c-mode */
-#endif
-}
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-  /* -----------------------------------------------------------------------------
-   * constants/methods manipulation
-   * ----------------------------------------------------------------------------- */
-
-  /* Install Constants */
-
-  SWIGINTERN void
-  SWIG_Tcl_InstallConstants(Tcl_Interp *interp, swig_const_info constants[]) {
-    int i;
-    Tcl_Obj *obj;
-
-    if (!swigconstTableinit) {
-      Tcl_InitHashTable(&swigconstTable, TCL_STRING_KEYS);
-      swigconstTableinit = 1;
-    }
-    for (i = 0; constants[i].type; i++) {
-      switch(constants[i].type) {
-      case SWIG_TCL_POINTER:
-        obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
-        break;
-      case SWIG_TCL_BINARY:
-        obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
-        break;
-      default:
-        obj = 0;
-        break;
-      }
-      if (obj) {
-        SWIG_Tcl_SetConstantObj(interp, constants[i].name, obj);
-      }
-    }
-  }
-
-#ifdef __cplusplus
-}
-#endif
-
-/* -----------------------------------------------------------------------------*
- *  Partial Init method
- * -----------------------------------------------------------------------------*/
-
-SWIGEXPORT int SWIG_init(Tcl_Interp *interp) {
-  int i;
-  if (interp == 0) return TCL_ERROR;
-#ifdef USE_TCL_STUBS
-  /* (char*) cast is required to avoid compiler warning/error for Tcl < 8.4. */
-  if (Tcl_InitStubs(interp, (char*)SWIG_TCL_STUBS_VERSION, 0) == NULL) {
-    return TCL_ERROR;
-  }
-#endif
-#ifdef USE_TK_STUBS
-  /* (char*) cast is required to avoid compiler warning/error. */
-  if (Tk_InitStubs(interp, (char*)SWIG_TCL_STUBS_VERSION, 0) == NULL) {
-    return TCL_ERROR;
-  }
-#endif
-
-  Tcl_PkgProvide(interp, (char*)SWIG_name, (char*)SWIG_version);
-
-#ifdef SWIG_namespace
-  Tcl_Eval(interp, "namespace eval " SWIG_namespace " { }");
-#endif
-
-  SWIG_InitializeModule((void *) interp);
-  SWIG_PropagateClientData();
-
-  for (i = 0; swig_commands[i].name; i++) {
-    Tcl_CreateObjCommand(interp, (char *) swig_commands[i].name, (swig_wrapper_func) swig_commands[i].wrapper,
-      swig_commands[i].clientdata, NULL);
-  }
-  for (i = 0; swig_variables[i].name; i++) {
-    Tcl_SetVar(interp, (char *) swig_variables[i].name, (char *) "", TCL_GLOBAL_ONLY);
-    Tcl_TraceVar(interp, (char *) swig_variables[i].name, TCL_TRACE_READS | TCL_GLOBAL_ONLY,
-      (Tcl_VarTraceProc *) swig_variables[i].get, (ClientData) swig_variables[i].addr);
-    Tcl_TraceVar(interp, (char *) swig_variables[i].name, TCL_TRACE_WRITES | TCL_GLOBAL_ONLY,
-      (Tcl_VarTraceProc *) swig_variables[i].set, (ClientData) swig_variables[i].addr);
-  }
-
-  SWIG_Tcl_InstallConstants(interp, swig_constants);
-
-
-  return TCL_OK;
-}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.