krb5 commit: Remove profile Tcl tests

Greg Hudson ghudson at mit.edu
Thu Jun 3 15:10:57 EDT 2021


https://github.com/krb5/krb5/commit/4e186b2789b3613362845b126bf386fa89c26709
commit 4e186b2789b3613362845b126bf386fa89c26709
Author: Greg Hudson <ghudson at mit.edu>
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;
-}


More information about the cvs-krb5 mailing list