[gts] 04/25: Import Upstream version 0.7.3

Andreas Tille tille at debian.org
Tue Jan 31 12:40:33 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository gts.

commit 654c19b339fc1fcd610569fb2a66784797a2a226
Author: Andreas Tille <tille at debian.org>
Date:   Tue Jan 31 11:38:44 2017 +0100

    Import Upstream version 0.7.3
---
 AUTHORS                                            |     9 +-
 ChangeLog                                          |  3091 ++-
 INSTALL                                            |   131 +-
 Makefile.am                                        |    10 +
 Makefile.in                                        |   634 +-
 NEWS                                               |   100 +
 README                                             |    25 +-
 THANKS                                             |     9 +-
 TODO                                               |    10 +-
 acconfig.h                                         |    59 -
 aclocal.m4                                         |  7426 +++++-
 config.guess                                       |  1136 +-
 config.h.in                                        |    84 +-
 config.sub                                         |   593 +-
 configure                                          | 24025 +++++++++++++++++--
 configure.in                                       |   208 +-
 depcomp                                            |   479 +
 doc/Makefile.in                                    |   303 +-
 doc/html/book1.html                                |   337 -
 doc/html/c11561.html                               |   238 -
 doc/html/c12040.html                               |   238 -
 doc/html/c13060.html                               |   238 -
 doc/html/c13676.html                               |   238 -
 doc/html/c1865.html                                |   300 -
 doc/html/c1908.html                                |   300 -
 doc/html/c4.html                                   |   248 -
 doc/html/c8089.html                                |   228 -
 doc/html/c8393.html                                |   228 -
 doc/html/c9511.html                                |   243 -
 doc/html/c9853.html                                |   243 -
 doc/html/dummy.html                                |     1 -
 doc/html/gts-binary-heaps.html                     |  1198 -
 doc/html/gts-boolean-operations.html               |  1300 -
 doc/html/gts-bounding-boxes-trees.html             |  5787 -----
 doc/html/gts-containee-classes.html                |  1231 -
 doc/html/gts-container-classes.html                |  1786 --
 ...ay-and-constrained-delaunay-triangulations.html |  2257 --
 doc/html/gts-edges.html                            |  2595 --
 doc/html/gts-extended-binary-heaps.html            |  2319 --
 doc/html/gts-faces.html                            |  1649 --
 doc/html/gts-first-in-first-out-heaps.html         |  1264 -
 doc/html/gts-graph-class.html                      |  5119 ----
 doc/html/gts-graph-partitioning.html               |  2509 --
 doc/html/gts-hierarchical-surfaces.html            |  1606 --
 doc/html/gts-hierarchical-vertex-split.html        |  1230 -
 doc/html/gts-isosurfaces-from-3d-functions.html    |  2032 --
 doc/html/gts-kd-trees.html                         |   625 -
 .../gts-miscellaneous-macros-and-functions.html    |   573 -
 doc/html/gts-object-class.html                     |  3149 ---
 doc/html/gts-out-of-core-simplification.html       |  2251 --
 doc/html/gts-points.html                           |  3867 ---
 doc/html/gts-progressive-graph.html                |  2750 ---
 doc/html/gts-progressive-surfaces.html             |  2686 ---
 doc/html/gts-segments.html                         |  1848 --
 doc/html/gts-simple-statistics.html                |   899 -
 .../gts-surface-simplification-and-refinement.html |  2164 --
 doc/html/gts-surfaces.html                         |  4981 ----
 doc/html/gts-triangles.html                        |  4744 ----
 doc/html/gts-vectors-and-matrices.html             |  2699 ---
 doc/html/gts-vertex-split.html                     |  1972 --
 doc/html/gts-vertices.html                         |  2659 --
 doc/html/gts-weighted-graph.html                   |  1696 --
 doc/html/index.sgml                                |   606 -
 examples/Makefile.am                               |    18 +-
 examples/Makefile.in                               |   827 +-
 examples/cleanup.c                                 |   119 +-
 examples/coarsen.c                                 |    86 +-
 examples/delaunay.c                                |    21 +-
 examples/gtstoc.c                                  |     9 +-
 examples/happrox.c                                 |   601 +
 examples/iso.c                                     |    25 +-
 examples/{volume.c => merge.c}                     |    71 +-
 examples/optimize.c                                |   291 +
 examples/partition.c                               |    43 +-
 examples/refine.c                                  |   253 +
 examples/set.c                                     |   223 +-
 examples/smooth.c                                  |   199 +
 examples/{volume.c => sphere.c}                    |    60 +-
 examples/{volume.c => split.c}                     |    66 +-
 examples/stripe.c                                  |   158 +
 examples/transform.c                               |    92 +-
 examples/traverse.c                                |     8 +-
 examples/volume.c                                  |    26 +-
 gts.pc.in                                          |    11 +
 install-sh                                         |   169 +-
 ltconfig                                           |  3078 ---
 ltmain.sh                                          |  4909 +++-
 missing                                            |   168 +-
 mkinstalldirs                                      |   111 +-
 src/Makefile.am                                    |    22 +-
 src/Makefile.in                                    |   800 +-
 src/bbtree.c                                       |    46 +-
 src/boolean.c                                      |  2212 +-
 src/cdt.c                                          |   390 +-
 src/config.h.win32                                 |     9 +-
 src/container.c                                    |    50 +-
 src/curvature.c                                    |   621 +
 src/edge.c                                         |    97 +
 src/fifo.c                                         |    14 +
 src/graph.c                                        |   623 +-
 src/gts-config.in                                  |    73 +-
 src/gts.def                                        |    60 +-
 src/gts.h                                          |   389 +-
 src/gtsconfig.h                                    |     7 +-
 src/iso.c                                          |     2 +-
 src/isotetra.c                                     |   848 +
 src/makefile.msc                                   |    10 +-
 src/matrix.c                                       |   398 +-
 src/misc.c                                         |   550 +-
 src/named.c                                        |    57 +-
 src/object.c                                       |    35 +-
 src/partition.c                                    |    85 +-
 src/point.c                                        |   350 +-
 src/psurface.c                                     |    10 +-
 src/refine.c                                       |     6 +-
 src/rounding.h                                     |    48 +-
 src/split.c                                        |   523 +-
 src/stripe.c                                       |   801 +-
 src/surface.c                                      |  1177 +-
 src/triangle.c                                     |     8 +-
 src/vertex.c                                       |   142 +-
 src/vopt.c                                         |    38 +-
 stamp-h.in                                         |     1 -
 test/Makefile.in                                   |   429 +-
 test/boolean/Makefile.am                           |    67 +-
 test/boolean/Makefile.in                           |   610 +-
 test/boolean/boole.c                               |   170 +-
 test/boolean/boole.sh                              |    19 -
 test/boolean/boole_cube_cube1                      |    52 -
 test/boolean/boole_cube_cube1.sh                   |     5 -
 test/boolean/boole_cube_cube5                      |    52 -
 test/boolean/boole_cube_cube5.sh                   |     5 -
 test/boolean/cube                                  |    39 -
 test/boolean/cubes.c                               |   229 +
 test/boolean/set.c                                 |   124 +-
 test/boolean/set.sh                                |    35 -
 test/boolean/set_1_2.sh                            |     5 -
 test/boolean/set_cube6_cube7.sh                    |     5 -
 test/boolean/set_cube_cube1                        |    13 -
 test/boolean/set_cube_cube1.sh                     |     5 -
 test/boolean/set_cube_cube2                        |    13 -
 test/boolean/set_cube_cube2.sh                     |     5 -
 test/boolean/set_cube_cube4.sh                     |     5 -
 test/boolean/set_loc1_loc2.sh                      |     5 -
 test/boolean/set_p1_p2.sh                          |     5 -
 test/boolean/set_sponge_cutter.sh                  |     5 -
 test/boolean/set_t11_t16                           |    13 -
 test/boolean/set_t11_t16.sh                        |     5 -
 test/boolean/set_t14_t15                           |    13 -
 test/boolean/set_t14_t15.sh                        |     5 -
 test/boolean/set_t17_t18                           |    13 -
 test/boolean/set_t17_t18.sh                        |     5 -
 test/boolean/set_t19_t20                           |    13 -
 test/boolean/set_t19_t20.sh                        |     5 -
 test/boolean/set_t19_t21                           |    13 -
 test/boolean/set_t19_t21.sh                        |     5 -
 test/boolean/set_t1_t10                            |    13 -
 test/boolean/set_t1_t10.sh                         |     5 -
 test/boolean/set_t1_t11                            |    13 -
 test/boolean/set_t1_t11.sh                         |     5 -
 test/boolean/set_t1_t12                            |    13 -
 test/boolean/set_t1_t12.sh                         |     5 -
 test/boolean/set_t1_t13                            |    13 -
 test/boolean/set_t1_t13.sh                         |     5 -
 test/boolean/set_t1_t2                             |    13 -
 test/boolean/set_t1_t2.sh                          |     5 -
 test/boolean/set_t1_t22                            |    13 -
 test/boolean/set_t1_t22.sh                         |     5 -
 test/boolean/set_t1_t23                            |    13 -
 test/boolean/set_t1_t23.sh                         |     5 -
 test/boolean/set_t1_t24                            |    13 -
 test/boolean/set_t1_t24.sh                         |     5 -
 test/boolean/set_t1_t3                             |    13 -
 test/boolean/set_t1_t3.sh                          |     5 -
 test/boolean/set_t1_t4                             |    13 -
 test/boolean/set_t1_t4.sh                          |     5 -
 test/boolean/set_t1_t5                             |    13 -
 test/boolean/set_t1_t5.sh                          |     5 -
 test/boolean/set_t1_t6                             |    13 -
 test/boolean/set_t1_t6.sh                          |     5 -
 test/boolean/set_t1_t7                             |    13 -
 test/boolean/set_t1_t7.sh                          |     5 -
 test/boolean/set_t1_t9                             |    13 -
 test/boolean/set_t1_t9.sh                          |     5 -
 test/boolean/set_t25_t26.sh                        |     5 -
 test/boolean/set_t27_t28                           |    13 -
 test/boolean/set_t27_t28.sh                        |     5 -
 test/boolean/surfaces/.arch-ids/.cvsignore.id      |     1 +
 test/boolean/surfaces/.arch-ids/1.gts.id           |     1 +
 test/boolean/surfaces/.arch-ids/2.gts.id           |     1 +
 test/boolean/surfaces/.arch-ids/=id                |     1 +
 test/boolean/surfaces/.arch-ids/a10.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/a23.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/a24.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/a25.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/a8.gts.id          |     1 +
 test/boolean/surfaces/.arch-ids/a9.gts.id          |     1 +
 test/boolean/surfaces/.arch-ids/b10.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/b23.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/b24.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/b25.gts.id         |     1 +
 test/boolean/surfaces/.arch-ids/b8.gts.id          |     1 +
 test/boolean/surfaces/.arch-ids/b9.gts.id          |     1 +
 test/boolean/surfaces/.arch-ids/cube.id            |     1 +
 test/boolean/surfaces/.arch-ids/cube1.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube10.id          |     1 +
 test/boolean/surfaces/.arch-ids/cube2.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube4.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube5.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube6.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube7.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube8.id           |     1 +
 test/boolean/surfaces/.arch-ids/cube9.id           |     1 +
 test/boolean/surfaces/.arch-ids/cutter.id          |     1 +
 test/boolean/surfaces/.arch-ids/gts-crash.gts.id   |     1 +
 test/boolean/surfaces/.arch-ids/gts-crash1.gts.id  |     1 +
 test/boolean/surfaces/.arch-ids/horse4.gts.id      |     1 +
 test/boolean/surfaces/.arch-ids/horse5.gts.id      |     1 +
 test/boolean/surfaces/.arch-ids/horse6.gts.id      |     1 +
 test/boolean/surfaces/.arch-ids/loc1.id            |     1 +
 test/boolean/surfaces/.arch-ids/loc2.id            |     1 +
 test/boolean/surfaces/.arch-ids/p1.id              |     1 +
 test/boolean/surfaces/.arch-ids/p2.id              |     1 +
 test/boolean/surfaces/.arch-ids/sphere.gts.id      |     1 +
 test/boolean/surfaces/.arch-ids/sponge.id          |     1 +
 test/boolean/surfaces/.arch-ids/t1.id              |     1 +
 test/boolean/surfaces/.arch-ids/t10.id             |     1 +
 test/boolean/surfaces/.arch-ids/t11.id             |     1 +
 test/boolean/surfaces/.arch-ids/t12.id             |     1 +
 test/boolean/surfaces/.arch-ids/t13.id             |     1 +
 test/boolean/surfaces/.arch-ids/t14.id             |     1 +
 test/boolean/surfaces/.arch-ids/t15.id             |     1 +
 test/boolean/surfaces/.arch-ids/t16.id             |     1 +
 test/boolean/surfaces/.arch-ids/t17.id             |     1 +
 test/boolean/surfaces/.arch-ids/t18.id             |     1 +
 test/boolean/surfaces/.arch-ids/t19.id             |     1 +
 test/boolean/surfaces/.arch-ids/t2.id              |     1 +
 test/boolean/surfaces/.arch-ids/t20.id             |     1 +
 test/boolean/surfaces/.arch-ids/t21.id             |     1 +
 test/boolean/surfaces/.arch-ids/t22.id             |     1 +
 test/boolean/surfaces/.arch-ids/t23.id             |     1 +
 test/boolean/surfaces/.arch-ids/t24.id             |     1 +
 test/boolean/surfaces/.arch-ids/t25.id             |     1 +
 test/boolean/surfaces/.arch-ids/t26.id             |     1 +
 test/boolean/surfaces/.arch-ids/t27.id             |     1 +
 test/boolean/surfaces/.arch-ids/t28.id             |     1 +
 test/boolean/surfaces/.arch-ids/t29.id             |     1 +
 test/boolean/surfaces/.arch-ids/t3.id              |     1 +
 test/boolean/surfaces/.arch-ids/t30.id             |     1 +
 test/boolean/surfaces/.arch-ids/t31.id             |     1 +
 test/boolean/surfaces/.arch-ids/t32.id             |     1 +
 test/boolean/surfaces/.arch-ids/t4.id              |     1 +
 test/boolean/surfaces/.arch-ids/t5.id              |     1 +
 test/boolean/surfaces/.arch-ids/t6.id              |     1 +
 test/boolean/surfaces/.arch-ids/t7.id              |     1 +
 test/boolean/surfaces/.arch-ids/t9.id              |     1 +
 test/boolean/{ => surfaces}/1.gts                  |     0
 test/boolean/{ => surfaces}/2.gts                  |     0
 test/boolean/surfaces/a10.gts                      |    15 +
 test/boolean/surfaces/a23.gts                      |    15 +
 test/boolean/surfaces/a24.gts                      |    15 +
 test/boolean/surfaces/a25.gts                      |    15 +
 test/boolean/surfaces/a8.gts                       |    15 +
 test/boolean/surfaces/a9.gts                       |    15 +
 test/boolean/surfaces/b10.gts                      |    15 +
 test/boolean/surfaces/b23.gts                      |    15 +
 test/boolean/surfaces/b24.gts                      |    15 +
 test/boolean/surfaces/b25.gts                      |    15 +
 test/boolean/surfaces/b8.gts                       |    15 +
 test/boolean/surfaces/b9.gts                       |    15 +
 test/boolean/surfaces/cube                         |    39 +
 test/boolean/{ => surfaces}/cube1                  |     0
 test/boolean/surfaces/cube10                       |    39 +
 test/boolean/{ => surfaces}/cube2                  |     0
 test/boolean/{ => surfaces}/cube4                  |     0
 test/boolean/{ => surfaces}/cube5                  |     0
 test/boolean/{ => surfaces}/cube6                  |     0
 test/boolean/{ => surfaces}/cube7                  |     0
 test/boolean/surfaces/cube8                        |    39 +
 test/boolean/surfaces/cube9                        |    39 +
 test/boolean/{ => surfaces}/cutter                 |     0
 test/boolean/surfaces/gts-crash.gts                |   248 +
 test/boolean/surfaces/gts-crash1.gts               |   248 +
 test/boolean/surfaces/horse4.gts                   |  2007 ++
 test/boolean/surfaces/horse5.gts                   |  4005 ++++
 test/boolean/surfaces/horse6.gts                   |  4005 ++++
 test/boolean/{ => surfaces}/loc1                   |     0
 test/boolean/{ => surfaces}/loc2                   |     0
 test/boolean/{ => surfaces}/p1                     |     0
 test/boolean/{ => surfaces}/p2                     |     0
 test/boolean/surfaces/sphere.gts                   |   867 +
 test/boolean/{ => surfaces}/sponge                 |     0
 test/boolean/{ => surfaces}/t1                     |     0
 test/boolean/{ => surfaces}/t10                    |     0
 test/boolean/{ => surfaces}/t11                    |     0
 test/boolean/{t9 => surfaces/t12}                  |    10 +-
 test/boolean/{t9 => surfaces/t13}                  |     8 +-
 test/boolean/{ => surfaces}/t14                    |     0
 test/boolean/{ => surfaces}/t15                    |     0
 test/boolean/{ => surfaces}/t16                    |     0
 test/boolean/{ => surfaces}/t17                    |     0
 test/boolean/{ => surfaces}/t18                    |     0
 test/boolean/{ => surfaces}/t19                    |     0
 test/boolean/surfaces/t2                           |     8 +
 test/boolean/{ => surfaces}/t20                    |     0
 test/boolean/{ => surfaces}/t21                    |     0
 test/boolean/{ => surfaces}/t22                    |     0
 test/boolean/{ => surfaces}/t23                    |     0
 test/boolean/{ => surfaces}/t24                    |     0
 test/boolean/{ => surfaces}/t25                    |     0
 test/boolean/{ => surfaces}/t26                    |     0
 test/boolean/{ => surfaces}/t27                    |     0
 test/boolean/{ => surfaces}/t28                    |     0
 test/boolean/surfaces/t29                          |    12 +
 test/boolean/{ => surfaces}/t3                     |     0
 test/boolean/surfaces/t30                          |    12 +
 test/boolean/surfaces/t31                          |    12 +
 test/boolean/surfaces/t32                          |     8 +
 test/boolean/{t9 => surfaces/t4}                   |     4 +-
 test/boolean/{ => surfaces}/t5                     |     0
 test/boolean/{t7 => surfaces/t6}                   |     4 +-
 test/boolean/{ => surfaces}/t7                     |     0
 test/boolean/{ => surfaces}/t9                     |     0
 test/boolean/t12                                   |    12 -
 test/boolean/t13                                   |    12 -
 test/boolean/t2                                    |     8 -
 test/boolean/t4                                    |    12 -
 test/boolean/t6                                    |     8 -
 test/boolean/test.sh                               |   100 +
 test/boolean/tests                                 |   112 +
 test/coarsen/Makefile.in                           |   637 +-
 test/delaunay/Makefile.in                          |   592 +-
 tools/Makefile.am                                  |     5 +-
 tools/Makefile.in                                  |   580 +-
 tools/gts2dxf.c                                    |    81 +
 tools/gts2oogl.c                                   |   449 +-
 examples/volume.c => tools/gts2stl.c               |    90 +-
 examples/volume.c => tools/gtscheck.c              |    70 +-
 tools/gtscompare.c                                 |    24 +-
 tools/gtstemplate                                  |   322 +
 tools/stl2gts.c                                    |   312 +
 341 files changed, 65561 insertions(+), 89602 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 0d46f1b..efb7ced 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,7 +1,14 @@
 Original Authors
 ----------------
-St�phane Popinet   <popinet at lmm.jussieu.fr>
+St�phane Popinet   <popinet at users.sourceforge.net>
 
 Contributors
 ------------
 Jonathan R. Shewchuk: robust geometric predicates.
+Ray Jones: discrete differential operators.
+Gert Wollny: marching tetrahedra.
+Jerome Benoit: surface tesselation.
+Wagner Toledo Correa: triangle strips.
+Marcelo E. Magallon: Debian packages.
+Wayne C Gramlich, Michael Loehr: 4x4 GtsMatrix implementation.
+Tim F.: "dual" marching tetrahedra.
diff --git a/ChangeLog b/ChangeLog
index c9ffe30..6c060f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,517 +1,2988 @@
-2001-11-12 Stephane Popinet <s.popinet at niwa.cri.nz> 
+2004-10-18 13:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/isocube.fig: Added vertex indices.
+
+2004-10-14 11:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Simpler and more efficient gts_file_read function.
+
+2004-10-11 13:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/rounding.h, .cvsignore, Makefile.am, configure.in, gts.pc.in:
+	Glib-2.0 and mingwin support.  Based on patches by Tim Fenn and
+	others.
+
+2004-10-11 11:34  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/.cvsignore, test/boolean/surfaces/.cvsignore:
+	Interoperability with arch.
+
+2004-10-11 11:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/coarsen/.cvsignore, test/delaunay/.cvsignore,
+	tools/.cvsignore, examples/.cvsignore, src/.cvsignore,
+	test/.cvsignore, test/boolean/.cvsignore, test/clipping/.cvsignore,
+	.cvsignore, doc/.cvsignore: Interoperability with arch.
+
+2004-10-11 11:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/vertices.sgml: Updated.
+
+2004-10-11 10:59  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Updated version.
+
+2004-10-10 13:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/iso.c: Linked to doc/isocube.fig
+
+2004-10-10 13:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/isocube.fig: Initial revision.
+
+2004-08-18 17:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Fixed typos in code for glib 2.4 (hmm, should I have
+	merged a patch with typos in the first place?).
+
+2004-07-23 13:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/valgrind.supp: Updated for new version of valgrind.
+
+2004-07-23 13:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: graph.c, gts.h: The interface to gts_graph_read() has
+	changed.  The read method now takes into account the GtsGraphClass
+	specified in the file (i.e. the object returned is converted to the
+	given class).
+
+2004-06-10 12:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added changes by Gert Wollny for compilation with Glib
+	2.4.
+
+2004-06-03 12:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/happrox.c: Cost function is passed as an argument. 
+	Relative height cost has been added.
+
+2004-05-28 15:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/happrox.c: Added option for flat list input (rather than
+	PGM).
+
+2004-05-26 17:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* RELEASE: Updated.
+
+2004-05-26 17:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Guess selection uses "2D" distance (as it should)
+	rather than "3D" distance.
+
+2004-05-26 17:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/cvs2dist: Modified for new sourceforge CVS server name.
+
+2004-05-17 10:34  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Fixed doc.
+
+2004-05-17 10:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: tests, surfaces/gts-crash.gts,
+	surfaces/gts-crash1.gts: Added failed boolean case by Romain Behar.
+
+2004-05-17 10:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* .cvsignore: Updated.
+
+2004-05-17 10:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/.cvsignore, src/cdt.c: Removed check for 1.3.0 for
+	GHashTable hack (1.3.0 is not part of the "official" releases
+	anyway). Windows folks should use a 1.2.8 version for windows not
+	1.3.0.
+
+2004-05-17 10:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Now uses SOS for segment/triangle intersections.
+
+2004-05-17 10:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, vertex.c: gts_vertices_merge takes an extra check
+	function argument.
+
+2004-05-17 10:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Set file type to ascii if not binary.
+
+2004-05-17 10:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/split.c: Set file type to ascii for progressive surfaces.
+
+2004-05-17 10:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/point.c: Changed stabbing ray from z-aligned to x-aligned.
+
+2004-05-17 10:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: Changed stabbing ray from z-aligned to x-aligned.
+
+2004-05-17 10:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c: Added 2D boundary merging.
+
+2004-05-17 10:12  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added merge.
+
+2004-05-17 10:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* gts.spec, examples/merge.c, examples/revolution.c: Initial
+	revision.
+
+2004-05-17 10:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO: Updated.
+
+2004-05-15 15:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, NEWS: Updated.
+
+2004-05-15 15:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.def: Updated.
+
+2004-05-15 15:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Fixed export of gts.def.
+
+2004-05-15 15:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h, src/boolean.c, src/edge.c, doc/gts-sections.txt,
+	doc/tmpl/bb-trees.sgml, doc/tmpl/boolean.sgml,
+	doc/tmpl/containee.sgml, doc/tmpl/container.sgml,
+	doc/tmpl/curvature.sgml, doc/tmpl/edges.sgml, doc/tmpl/faces.sgml,
+	doc/tmpl/graph.sgml, doc/tmpl/hsplit.sgml, doc/tmpl/hsurface.sgml,
+	doc/tmpl/iso.sgml, doc/tmpl/matrices.sgml, doc/tmpl/misc.sgml,
+	doc/tmpl/object.sgml, doc/tmpl/oocs.sgml, doc/tmpl/pgraph.sgml,
+	doc/tmpl/points.sgml, doc/tmpl/psurface.sgml,
+	doc/tmpl/segments.sgml, doc/tmpl/simplify.sgml,
+	doc/tmpl/split.sgml, doc/tmpl/surfaces.sgml,
+	doc/tmpl/triangles.sgml, doc/tmpl/vertices.sgml,
+	doc/tmpl/wgraph.sgml: Updated doc.
+
+2004-02-22 21:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Minor change in assertion.
+
+2004-02-12 08:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* THANKS: Added Kai.
+
+2004-02-12 08:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/stripe.c: Fixed memory leak (thanks to Kai Huettemann).
+
+2003-11-11 12:57  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/: .cvsignore, Makefile.am: Added gts2stl.
+
+2003-11-11 12:57  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/: gts2dxf.c, gts2stl.c: Initial revision.
+
+2003-11-11 12:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/cvs2dist: Cleans properly after itself.
+
+2003-11-06 14:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/rounding.h: Added check for _FPU_EXTENDED. Necessary for
+	machines having fpu_control.h but not using extended precision (SGI
+	ALTIX (64 bit itanium) apparently).
+
+2003-11-03 18:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/: .cvsignore, Makefile.am: Added gts2dxf.
+
+2003-11-03 18:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Added option to write gnuplot representation of
+	isolines.
+
+2003-10-29 12:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/cvs2dist: Initial revision.
+
+2003-10-15 03:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Changed micro version.
+
+2003-10-08 06:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Updated??
+
+2003-10-08 06:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/transform.c: Updated help.
+
+2003-10-08 06:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Now writes binary files.
+
+2003-10-08 06:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/happrox.c: Cost is always positive.
+
+2003-10-08 06:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added new function declarations.
+
+2003-10-08 06:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: point.c, split.c, surface.c: Added support for binary
+	vertex coordinates in GTS files.
+
+2003-10-08 06:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vertex.c: Added new class GtsColorVertex.
+
+2003-10-08 06:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: New function gts_file_read.
+
+2003-10-08 06:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/edge.c: New function gts_edge_manifold_faces.
+
+2003-09-15 18:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/boole.c: Added checks on surface areas (detects
+	folds).
+
+2003-09-15 18:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS, examples/iso.c, src/isotetra.c: Added "dual" isosurface
+	calculation by Tim F.
+
+2003-09-04 14:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: New options to output duplicate edges or
+	individual faces.
+
+2003-09-04 14:19  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Major bugfixing session for inner loops. The
+	orientation test in connect_interior_loop worked only for simple
+	cases, and loop inversion was triggering a bug.
+
+2003-09-03 17:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Change the way the validity of ear cutting is
+	calculated. This fixes the orientation problems for Wayne's tests
+	in test/boolean.  Added new debuggin info stuff.
+
+2003-09-02 22:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added debugging message for badly oriented faces
+	of loop triangulation.
+
+2003-08-27 16:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/happrox.c: Cosmetic changes to cost display.
+
+2003-08-27 15:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added conditional compilation of happrox.
+
+2003-08-27 15:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added support for "GtsListFace" when doing Delaunay
+	triangulation. A GtsListFace contains a list of GtsPoint which are
+	automatically reallocated ("binned") when new faces are created.
+	This data structure is used in the happrox.c example.
+
+2003-08-27 15:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: gts.def script generation should now include
+	external variables. This should fix the problem with
+	gts_allow_floating... under MSVC.
+
+2003-08-27 15:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Added check for netpbm library (necessary for
+	happrox).
+
+2003-08-27 15:14  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Added option to output colored surface
+	components.
+
+2003-08-27 15:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/clipping/clipping.c: Updated for new library class (pretty
+	useless though).
+
+2003-08-27 15:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: "New" gts_surface_split function.
+
+2003-08-27 15:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h, src/gts.def, test/clipping/.cvsignore: Updated.
+
+2003-08-27 15:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: New function
+	gts_surface_foreach_intersecting_face.
+
+2003-08-27 15:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/.cvsignore: Updated.
+
+2003-08-27 15:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/: happrox.c, optimize.c: Initial revision.
+
+2003-08-27 15:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/split.c: Uses new library function.
+
+2003-08-27 15:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/smooth.c: Does not smooth boundaries anymore.
+
+2003-08-24 15:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, point.c: Added SOS 2D orientation test.
+
+2003-07-21 14:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vertex.c: Added GtsVertexNormal class.
+
+2003-07-03 17:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added Wayne Gramlich and Michael Loehr.
+
+2003-07-03 17:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/transform.c, src/gts.h, src/matrix.c, src/point.c,
+	src/vopt.c: New GtsMatrix implementation (quaternions) by Wayne
+	Gramlich and Michael Loehr.
+
+2003-07-03 17:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: New vertices created by intersects() now always
+	are of the class defined by surface s1.
+
+2003-07-02 15:44  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added attributes inheritance when computing
+	intersections.
+
+2003-06-13 10:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: New option to output specific isolines.
+
+2003-06-13 10:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/surfaces/: a8.gts, a9.gts, b10.gts, b23.gts,
+	b24.gts, b25.gts, b8.gts, b9.gts, a10.gts, a23.gts, a24.gts,
+	a25.gts: Tests by Wayne Gramlich.
+
+2003-06-13 10:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/tests: Added tests by Wayne Gramlich.
+
+2003-06-13 10:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added new functions.
+
+2003-06-13 10:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Added gts_surface_write_vtk() and
+	gts_surface_center_of_area().
+
+2003-06-13 10:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Made getc functions external.
+
+2003-06-13 10:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/gts-sections.txt: Updated.
+
+2003-06-13 10:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Changed glib-1.2.0 check to 1.2.8.
+
+2003-06-13 10:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* THANKS: Added Curt.
+
+2003-04-02 10:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Fixed serious orientation bug in triangle_next_edge()
+	(thanks to Curt Olson).
+
+2003-03-31 10:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Fixed useless warning for point location of a point
+	outside the surface (thanks to Fred Bouvier).
+
+2003-02-13 15:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.def: Added gts_surface_intersection.
+
+2003-02-12 17:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Uses new gts_surface_intersection() function.
+
+2003-02-12 17:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added Marcelo to contributors.
+
+2003-02-12 17:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: boolean.c, gts.h: Added gts_surface_intersection() function
+	returning the intersection curve between two surfaces (and only
+	that).
+
+2003-02-10 16:42  Ray Jones <rjones at pobox.com>;
+
+	* README: Added build-from-CVS instructions
+
+2003-02-10 11:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Fixed (should) stupid bug in attribute inheritance
+	stuff (thanks to Fred Bouvier).
+
+2003-01-30 11:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: Fixed bug due to change in GtsRange.
+
+2003-01-30 11:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/set.c: Fixed error message.
+
+2003-01-30 11:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* README: Updated for Cygwin users.
+
+2003-01-28 09:44  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/stl2gts.c: Added option to revert normal direction.
+
+2003-01-23 13:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts-config.in: Fixed library order for --libs option.
+
+2003-01-23 11:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/rounding.h: Added Cygwin support.
+
+2003-01-23 11:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Changed the way predicates_init is compiled. The
+	previous stuff did not work under Cygwin.
+
+2003-01-23 11:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.def: Updated.
+
+2003-01-22 09:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/stripe.c: Removed unused functions and commented out
+	debugging messages.
+
+2003-01-21 13:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/stripe.c: New implementation of Wagner Toledo Correa.
+
+2003-01-21 13:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/.cvsignore: Added stripe.
+
+2003-01-21 13:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added stripe.c.
+
+2003-01-21 13:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/stripe.c: Initial revision.
+
+2003-01-21 13:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added Wagner Toledo Correa.
+
+2003-01-16 08:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/volume.c: Added option to display coordinates of center
+	of mass.
+
+2003-01-16 08:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, surface.c: Added new function
+	gts_surface_center_of_mass().
+
+2003-01-16 08:47  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* RELEASE: Initial revision.
+
+2003-01-08 13:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, NEWS, src/gts.def: Updated.
+
+2003-01-08 13:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/makefile.msc: Initial revision.
+
+2002-11-27 15:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: gts_surface_tessellate() uses pointer array
+	instead of heap (Jerome Benoit).
+
+2002-11-19 09:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/.cvsignore: Added sphere.
+
+2002-11-19 09:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/stl2gts.c: Added missing header.
+
+2002-11-19 09:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/isotetra.c: Added missing header for memcpy()
+
+2002-11-19 09:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, surface.c: Added geodesic sphere and surface
+	tesselation (Jerome Benoit).
+
+2002-11-19 09:14  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added geodesic sphere (Jerome Benoit).
+
+2002-11-19 09:14  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/sphere.c: Geodesic sphere (Jerome Benoit).
+
+2002-11-19 09:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Changed micro version.
+
+2002-11-19 09:12  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added Jerome Benoit to contributors.
+
+2002-11-12 18:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* THANKS: Added Jerome Benoit.
+
+2002-11-12 18:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/refine.c, src/gts.h, src/surface.c: Applied patch by
+	Jerome Benoit for more generic gts_surface_refine() function.
+
+2002-11-11 10:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Updated version.
+
+2002-11-08 15:45  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog: Updated.
+
+2002-11-08 15:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/curvature.sgml: Initial revision.
+
+2002-11-08 15:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* NEWS, doc/gts-docs.sgml, doc/gts-sections.txt,
+	doc/tmpl/boolean.sgml, doc/tmpl/containee.sgml,
+	doc/tmpl/edges.sgml, doc/tmpl/graph.sgml, doc/tmpl/gts-unused.sgml,
+	doc/tmpl/iso.sgml, doc/tmpl/matrices.sgml, doc/tmpl/misc.sgml,
+	doc/tmpl/object.sgml, doc/tmpl/points.sgml, doc/tmpl/surfaces.sgml,
+	.cvsignore: Updated.
+
+2002-11-08 15:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* Makefile.am: Added cleanup of CVS directories in distribution.
+
+2002-11-07 12:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added attributes inheritance for newly created faces.
+
+2002-10-16 13:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/refine.c: Fixed missing ALREADY_ENCROACHED call.
+
+2002-10-16 09:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c: Fixed spelling.
+
+2002-10-16 09:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, isotetra.c, makefile.msc: Updated win32 build (patch
+	by Mike Loehr).
+
+2002-10-15 10:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/isotetra.c: Applied patch from Gert: Change to column-major
+	storing of data.  Fixed bug for special cases where isosurface
+	crosses a cell exactly on a vertex.
+
+2002-09-30 09:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/isotetra.c: Fixed bug (thanks Gert).
+
+2002-09-17 09:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.def: Updated.
+
+2002-09-17 09:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: boole.c, cubes.c, set.c: Uses gts_file_destroy()
+	call.
+
+2002-09-16 13:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added Gert Wollny.
+
+2002-09-16 13:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO, .cvsignore: Updated.
+
+2002-09-16 13:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Uses recent autotools suite (automake 1.6.3).
+
+2002-09-16 13:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, Makefile.am: Added marching tetrahedra by Gert
+	Wollny.
+
+2002-09-16 13:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/isotetra.c: Initial revision.
+
+2002-09-16 13:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/iso.c: Added new option for Gert Wollny implementation
+	of marching tetrahedra.
+
+2002-09-16 12:52  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* acconfig.h: Obsolete with new version of autotools.
+
+2002-09-13 11:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Changed glib from 1.2 to 1.3 (thanks to Mike
+	Loehr).
+
+2002-09-13 11:04  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Changed gts_file_close() to gts_file_destroy()
+	and used new interface for gts_surface_inter_new().
+
+2002-09-13 11:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c, tools/gts2oogl.c, tools/gtscompare.c,
+	tools/stl2gts.c: Changed gts_file_close() to gts_file_destroy().
+
+2002-09-13 11:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, misc.c: Changed gts_file_close() to
+	gts_file_destroy() which does not close the file anymore (thanks to
+	Ray Jones).
+
+2002-09-13 11:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added static to declaration of static function.
+
+2002-09-12 15:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/.cvsignore: Added cubes.
+
+2002-09-12 15:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/tests: Updated.
+
+2002-09-12 15:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/cubes.c: Initial revision.
+
+2002-09-12 15:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/Makefile.am: Added "cubes" test program.
+
+2002-09-12 15:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: boole.c, set.c: Uses new gts_surface_inter_new()
+	interface.
+
+2002-09-12 14:58  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/point.c: gts_point_is_inside_surface() now uses SoS for
+	crossing tests.
+
+2002-09-12 14:57  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: gts_surface_inter_new() now needs is_open arguments.
+
+2002-09-12 14:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: New version (again) using oriented boundary loops
+	(but without the complicated "bridge" technique of 1.18). Works
+	well for all practical tests but fails for horse4/horse5 boole
+	test. This is due to interior loops orientation ambiguities. Quite
+	robust though.
+
+2002-09-10 11:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added interior loops connection to boundary loops.
+
+2002-09-03 18:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/surfaces/t6: Added vertex names.
+
+2002-09-03 18:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/set.c: Added "options" for graph outputs etc...
+
+2002-09-03 18:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/boole.c: Returns info about empty surfaces (to be
+	consistent with checking script).
+
+2002-09-03 18:07  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/leak.sh: Checks for leaks in trace file generated using
+	DEBUG_LEAKS compilation flag.
+
+2002-09-03 18:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vertex.c: Cleanup.
+
+2002-09-03 18:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: gts_surface_write() uses hash tables instead of
+	reserved pointer (useful for debugging and minor performance
+	penalty).
+
+2002-09-03 18:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: Added gts_finalize().
+
+2002-09-03 18:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added gts_finalize() declaration.
+
+2002-09-03 18:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Cleanup.
+
+2002-09-03 18:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* .usermap: Added thouis.
+
+2002-09-03 16:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Preliminary version using "oriented boundary
+	curve" triangulation technique. This does not work (yet) for
+	intersection containing loops.
+
+2002-08-28 11:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Continued (but not finished).
+
+2002-08-27 12:44  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Non-working trial version (using edge splitting to
+	ensure continuity of triangulation).
+
+2002-08-23 06:16  Ray Jones <rjones at pobox.com>;
+
+	* src/: curvature.c, gts.h: Fixed up
+	gts_vertex_principal_directions ().  Renamed parameters for clarity
+	in a couple other functions.  TODO: review code for possible
+	divide-by-zero, NULL pointers, etc.
+
+2002-08-20 10:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added warnings and status flag.
+	gts_surface_inter_new() returns NULL if a problem occured.
+
+2002-08-19 15:47  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/valgrind.supp: Initial revision (adds crappy array indexing
+	of predicates.c).
+
+2002-08-19 15:46  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Added option to use binary trees instead of hash
+	table for surface face storage.
+
+2002-08-19 15:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/named.c: Reads any string as name (including numbers).
+
+2002-08-19 15:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Hexadecimal encoding of integers and floats is now
+	recognised properly.
+
+2002-08-19 15:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added option to use binary tree storage of faces
+	(instead of hash tables).
+
+2002-08-19 15:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/edge.c: Initialisation for picky compilers.
+
+2002-08-19 15:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added option to use surface binary tree storage of
+	faces.
+
+2002-08-15 16:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Reverted to version 1.11 and added checks when
+	fixing hidden boundary vertices. This stuff can be improved and is
+	not robust in all cases.
+
+2002-08-15 15:44  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added trial implementation for simplification of
+	short edges. It sort of works but is complicated.
+
+2002-08-15 09:05  Ray Jones <rjones at pobox.com>;
+
+	* src/curvature.c: fixed a bug in gts_vertex_principal_curvatures()
+
+2002-08-14 15:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/surfaces/: 1.gts, 2.gts, cube, cube1, cube10, cube2,
+	cube4, cube5, cube6, cube7, cube8, cube9, cutter, horse4.gts,
+	horse5.gts, horse6.gts, loc1, loc2, p1, p2, sphere.gts, sponge, t1,
+	t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t2, t20, t21,
+	t22, t23, t24, t25, t26, t27, t28, t29, t3, t30, t31, t32, t4, t5,
+	t6, t7, t9: Initial revision.
+
+2002-08-14 15:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Added options to color surface according to
+	Mean or Gaussian curvature.
+
+2002-08-14 15:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/config.h.win32: Added definition of M_PI.
+
+2002-08-14 15:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Added test for closed intersection curve.
+
+2002-08-14 15:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/delaunay.c: Added option to remove duplicate vertices.
+
+2002-08-14 15:34  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/.cvsignore: Added stl2gts.
+
+2002-08-14 15:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added Ray Jones.
+
+2002-08-14 15:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: test.sh, tests: Initial revision.
+
+2002-08-14 15:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/set.c: Added various outputs for the intersection
+	curve (in particular graph in dot format).
+
+2002-08-14 15:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/boole.c: Applies stricter consistency checking for
+	new boolean operations implementation.
+
+2002-08-14 15:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/Makefile.am: The tests have been reorganised.
+
+2002-08-14 15:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: 1.gts, 2.gts, a1.gts, a2.gts, boole.sh,
+	boole_cube_cube1, boole_cube_cube1.sh, boole_cube_cube5,
+	boole_cube_cube5.sh, cube, cube1, cube2, cube4, cube5, cube6,
+	cube7, cutter, loc1, loc2, p1, p2, set.sh, set_1_2.sh,
+	set_cube6_cube7.sh, set_cube_cube1, set_cube_cube1.sh,
+	set_cube_cube2, set_cube_cube2.sh, set_cube_cube4.sh,
+	set_loc1_loc2.sh, set_p1_p2.sh, set_sponge_cutter.sh, set_t11_t16,
+	set_t11_t16.sh, set_t14_t15, set_t14_t15.sh, set_t17_t18,
+	set_t17_t18.sh, set_t19_t20, set_t19_t20.sh, set_t19_t21,
+	set_t19_t21.sh, set_t1_t10, set_t1_t10.sh, set_t1_t11,
+	set_t1_t11.sh, set_t1_t12, set_t1_t12.sh, set_t1_t13,
+	set_t1_t13.sh, set_t1_t2, set_t1_t2.sh, set_t1_t22, set_t1_t22.sh,
+	set_t1_t23, set_t1_t23.sh, set_t1_t24, set_t1_t24.sh, set_t1_t3,
+	set_t1_t3.sh, set_t1_t4, set_t1_t4.sh, set_t1_t5, set_t1_t5.sh,
+	set_t1_t6, set_t1_t6.sh, set_t1_t7, set_t1_t7.sh, set_t1_t9,
+	set_t1_t9.sh, set_t25_t26.sh, set_t27_t28, set_t27_t28.sh, sponge,
+	sponge1, t1, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t2,
+	t20, t21, t22, t23, t24, t25, t26, t27, t28, t3, t4, t5, t6, t7,
+	t9: The tests have been reorganised (all the test files are now
+	contained in surface/).
+
+2002-08-14 14:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Fix for case of SoS intersection between a
+	triangle and a coplanar edge.  Saves and restores arbitrary edge
+	classes.
+
+2002-08-14 14:28  Ray Jones <rjones at pobox.com>;
+
+	* src/curvature.c: Fixed bug in gts_vertex_principal_curvatures(). 
+	Check for and handle divides by zero in several cases.
+
+2002-08-14 12:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Added fix for endpoints not belonging to
+	triangulation boundary. Changed intersection check for
+	self-intersecting surfaces.
+
+2002-08-14 11:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Complete overhaul now using Simulation of
+	Simplicity to deal with degenerate cases. Should be much more
+	robust but needs further testing.
+
+2002-08-14 11:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Functions do not destroy faces systematically anymore,
+	but just remove them from the triangulation considered. If
+	"floating faces" are not allowed the faces will be destroyed if
+	they are not used by any other surface.
+
+2002-08-14 11:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added new function declarations (differential
+	operators, new graph functions, etc...).
+
+2002-08-14 11:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/config.h.win32: Updated version.
+
+2002-08-14 11:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Removed header (Mike Loehr).
+
+2002-08-14 11:34  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/triangle.c: Uses M_PI instead of PI.
+
+2002-08-14 11:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: Set object->klass to NULL after destruction
+	(provides limited checking of double frees).
+
+2002-08-14 11:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/graph.c: Added DOT graph format write function, graph
+	constructor for list of segments, and generic graph nodes with
+	pointer data.
+
+2002-08-14 11:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/edge.c: Added gts_edge_swap() function.
+
+2002-08-14 11:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/container.c: Added gts_containee_replace() and foreach()
+	method for containees.
+
+2002-08-14 11:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Added curvature.c
+
+2002-08-14 09:52  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/curvature.c: Added principal curvature directions (Ray
+	Jones).
+
+2002-08-13 11:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/curvature.c: Initial revision (thanks to Ray Jones).
+
+2002-08-05 14:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Color according to height relative to average.
+
+2002-08-05 13:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gtstemplate: Fixed new namespace for GFS.
+
+2002-08-05 13:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/Makefile.am: Added stl2gts.
+
+2002-08-05 13:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/stl2gts.c: Initial revision.
+
+2002-08-01 21:57  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: t12, t13, t4: Added names.
+
+2002-08-01 21:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: set_t17_t18, set_t19_t20, set_t19_t21, set_t1_t10,
+	set_t1_t11, set_t1_t12, set_t1_t22, set_t1_t23, set_t1_t24,
+	set_t1_t7, set_t27_t28: Updated.
+
+2002-08-01 21:55  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/set.c: Check surfaces before trying operations and
+	check for duplicate edges.
+
+2002-08-01 21:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/boole.c: Check surfaces before trying operations.
+
+2002-08-01 21:46  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: point.c, gts.h: Added 3D Simulation Of Simplicity
+	orientation test.
+
+2002-08-01 21:45  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: First temporary version using SoS.
+
+2002-06-18 14:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/.cvsignore: Removed gts.def.
+
+2002-06-18 14:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.def: Initial revision.
+
+2002-06-17 17:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Updated for 0.6.0.
+
+2002-06-17 16:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: Changed comments formatting (to avoid bug in
+	gtk-doc).
+
+2002-06-17 16:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/: gts-sections.txt, tmpl/boolean.sgml, tmpl/fifo.sgml,
+	tmpl/graph.sgml, tmpl/gts-unused.sgml, tmpl/matrices.sgml,
+	tmpl/misc.sgml, tmpl/partition.sgml, tmpl/psurface.sgml,
+	tmpl/simplify.sgml, tmpl/stats.sgml, tmpl/surfaces.sgml,
+	.cvsignore: Updated.
+
+2002-06-17 16:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO, ChangeLog: Updated.
+
+2002-06-17 16:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added new GtsFile functions prototypes.
+
+2002-06-17 16:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Release 0.6.0.
+
+2002-06-17 15:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: gts_file_next_token() classification is better (i.e.
+	"e", "E", "." etc... are considered as GTS_STRING not GTS_INT or
+	GTS_FLOAT as before).
+
+2002-06-17 15:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/refine.c: Changed to new gts_surface_refine() syntax.
+
+2002-06-17 15:14  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/split.c: Added missing header (thanks to John (Ebo)
+	David).
+
+2002-06-17 15:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/coarsen.c: Added option for angle-based criterium
+	(experimental).
+
+2002-06-06 18:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* README: Added info about glib.
+
+2002-06-06 18:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/.cvsignore: Added gtscheck executable.
+
+2002-06-06 18:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/split.c: Added missing header.
+
+2002-05-16 13:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: It is now possible to "flatten" a surface in
+	any direction.	Added a simple "feature edges" detection (based on
+	angle).
+
+2002-05-16 13:19  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/Makefile.am: Added gtscheck.
+
+2002-05-16 13:19  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gtscheck.c: Initial revision.
+
+2002-05-16 13:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Added check for self-intersection of the
+	resulting surface.
+
+2002-05-16 13:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog: Initial automatically generated ChangeLog.
+
+2002-05-16 13:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* Makefile.am: ChangeLog is now generated automatically using
+	cvs2cl.pl.
+
+2002-05-16 13:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* .usermap: Initial revision.
+
+2002-05-16 13:14  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added gts_vector_norm and gts_vector_normalize macros.
+	gts_surface_refine() prototype has changed.
+
+2002-05-16 13:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Remove ',' and ';' from list of delimiters.
+
+2002-05-16 12:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Fixed bug in gts_range_update() when range is
+	empty.
+
+2002-04-10 10:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h, THANKS, examples/.cvsignore: Updated.
+
+2002-04-10 10:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/graph.c: Added cast for picky C compilers (CRAY).
+
+2002-04-10 10:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/fifo.c: New function gts_fifo_reverse().
+
+2002-04-10 10:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: New function gts_surface_is_self_intersecting().
+
+2002-04-10 10:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added surface refining example and
+	preliminary smoothing example.
+
+2002-04-10 10:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/smooth.c: Initial revision (not to be trusted).
+
+2002-04-10 10:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Added option to check for self-intersecting
+	surfaces.
+
+2002-04-10 10:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/refine.c: Initial revision.
+
+2002-04-10 10:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/partition.c: Added option giving some control over
+	imbalance.
+
+2002-04-02 17:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, partition.c: Bisection algorithms now takes an extra
+	"imbalance" argument which allows some crontrol over the weight
+	balancing of the partition.
+
+2002-03-27 12:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Added flags for module support.
+
+2002-03-27 12:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: a1.gts, a2.gts: a1.gts and a2.gts (Olivier
+	Parisy).
+
+2002-03-27 12:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Fixed strcmp() declaration (thanks to John (EBo)
+	David).
+
+2002-03-27 12:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/graph.c: New nodes in gts_graph_read() are added to graph as
+	they are read.
+
+2002-03-27 12:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/transform.c: Added "normalize" option.
+
+2002-03-27 12:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* THANKS: Updated.
+
+2002-03-05 10:59  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added checks for face orientation of initial guess.
+
+2002-03-04 14:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Checks for degenerate triangles when looking for root
+	of the search (thanks to Mashuda Glencross for reporting this
+	problem).
+
+2002-03-04 14:55  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Initializes type.
+
+2002-03-04 09:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Fixed memory leak in the case of three vertices
+	only (thanks to Olivier Parisy).
+
+2002-02-26 15:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/graph.c: Fixed serious memory bug for deallocation of
+	GtsEdges linking a GtsGNode with itself.
+
+2002-02-25 18:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gtstemplate: Rewritten as a proper script. New options for
+	method overloading etc...
+
+2002-02-25 18:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, misc.c: "Generalized" GTS_STRING type. There should
+	be a better implementation for type specification in
+	gts_file_assign_variables().
+
+2002-02-25 18:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: refine.c, surface.c: Added function pointers cast for picky
+	compilers (Cray).
+
+2002-02-18 15:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, misc.c, surface.c: GtsRange can now be used with
+	"intermediary" readings (i.e. updates).
+
+2002-02-15 18:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: graph.c, gts.h, misc.c, named.c, point.c, psurface.c,
+	split.c, surface.c: Complete overhaul of the gts_file_next_token()
+	etc... functions (again!).
+
+2002-02-14 14:51  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: New check on class imbrication sizes when creating
+	new objects.
+
+2002-02-14 14:49  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, misc.c: New function to deal with errors when using
+	gts_file_assign_variables().
+
+2002-02-14 14:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/container.c: Elements can now be removed from a
+	GtsSListContainer while using gts_container_foreach().
+
+2002-02-13 18:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, misc.c: New function to read lists of variables.
+
+2002-02-13 18:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Does not destruct input surface in parsing fails.
+
+2002-02-13 13:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/: boolean/.cvsignore, coarsen/.cvsignore,
+	delaunay/.cvsignore: Updated.
+
+2002-02-13 13:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c, examples/coarsen.c, examples/gtstoc.c,
+	examples/partition.c, examples/set.c, examples/split.c,
+	examples/transform.c, examples/traverse.c, examples/volume.c,
+	src/graph.c, src/gts.h, src/misc.c, src/named.c, src/point.c,
+	src/split.c, src/surface.c, test/boolean/boole.c,
+	test/boolean/set.c, tools/gts2oogl.c, tools/gtscompare.c: Now uses
+	new input functions + error reporting.
+
+2002-02-12 16:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts-config.in: Added options for gmodule and gthread flags
+	and libs.
+
+2002-02-08 18:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Generates CRAY inlining directives.
+
+2002-02-08 13:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/split.c: Changed non ansi assignments of arrays.
+
+2002-02-08 13:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/Makefile.am: Distributes gtstemplate.
+
+2002-02-08 13:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Picky C compilers would complain about missing
+	statement in default: case.
+
+2002-02-08 13:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vopt.c: Changed non-ansi GtsVector initializations.
+
+2002-02-08 13:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog: Updated.
+
+2002-02-08 13:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/graph.c: Updated graph reading functions.
+
+2002-02-08 13:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: New assertions for walk_faces traversal.
+
+2002-02-08 13:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/.cvsignore, src/gts.h, tools/.cvsignore: Updated.
+
+2002-02-08 13:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Added "normal" getopt options processing + new
+	options.
+
+2002-02-08 13:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/partition.c: Updated to reflect changes in graph input
+	function.
+
+2002-02-08 13:19  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c: Added "merge" option.
+
+2002-02-08 13:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* acconfig.h, configure.in, src/rounding.h: Now checks for working
+	#warning directive in C preprocessor.
+
+2002-02-04 12:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* .cvsignore, examples/.cvsignore: Updated.
+
+2002-02-01 15:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* THANKS: Added Ray Jones.
+
+2002-02-01 15:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/container.c: Cleanup.
+
+2002-02-01 15:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/Makefile.am: Added gtstemplate.
+
+2002-02-01 15:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gtstemplate, examples/split.c: Initial revision.
+
+2002-02-01 15:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/coarsen.c: New option for logging cost. The cost
+	stopping option did not worked before => fixed.
+
+2002-02-01 14:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Displays number of folds if verbose on.
+
+2002-01-30 10:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gts2oogl.c: Added non-manifold edges display.
+
+2001-12-13 09:51  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c: Fixed "sever" ordering bug (thanks to Ray
+	Jones).
+
+2001-11-27 10:49  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: Replaced g_malloc() with g_malloc0() everywhere.
+
+2001-11-23 10:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog: Updated.
+
+2001-11-23 10:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added check for glib version (for _GHashTable hack).
+
+2001-11-12 10:46  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, ChangeLog, configure.in: Updated.
+
+2001-11-12 10:43  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* gts: release of version 0.5.1.
-	
 	* tools/gts2oogl.c: Chaining of isolines segments. New default
- 	"jet" colormap.
+	"jet" colormap.
+
+2001-11-12 10:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/cartesian.c: Uncommented checking bit.
+
+2001-11-12 10:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Added missing objects to object list.
+
+2001-11-12 10:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Added missing string.h header file.
+
+2001-11-12 10:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Removed default optimization from defauls gcc
+	CFLAGS.
+
+2001-10-08 14:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* NEWS, README: Updated.
+
+2001-10-08 14:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts-config.in: Added "--check" option.
+
+2001-10-08 13:58  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Fixup of BUILT_SOURCES.
+
+2001-10-08 13:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Updated.
+
+2001-10-08 13:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am, test/boolean/Makefile.am,
+	test/clipping/Makefile.am, test/coarsen/Makefile.am,
+	test/delaunay/Makefile.am, tools/Makefile.am: Cleaned up
+	dependencies for linking (thanks to Volodymyr).
+
+2001-10-08 12:19  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Removed clipping/Makefile target.
+
+2001-10-08 12:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, THANKS, TODO: Updated.
+
+2001-10-08 12:15  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Includes glib libraries and header files by
+	default. Generates gts-config script.
+
+2001-10-08 12:12  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Now builds shared libraries (thanks to Volodymyr
+	Babin), rebuilds gts.def before making a distribution, includes a
+	gts-config script (a la glib) and gts.m4 autoconf macros.
+
+2001-10-08 12:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: .cvsignore, gts-private.h, gts.h: Updated.
+
+2001-10-08 12:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/triangle.c: New gts_triangle_is_stabbed() function. Updated
+	docs.
+
+2001-10-08 12:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Cosmetics.
+
+2001-10-08 12:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/point.c: New function gts_point_is_inside_surface().
+
+2001-10-08 12:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: New attributes() method.
+
+2001-10-08 12:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/misc.c: Cosmetics.
+
+2001-10-08 11:59  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.m4: Initial revision for m4 autoconf macros for GTS.
+
+2001-10-08 11:58  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/graph.c: Updated docs.
+
+2001-10-08 11:58  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/face.c: Clone() method now resets the surfaces list pointer
+	of the cloned face.
+
+2001-10-08 11:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: New faces created when computing GtsSurfaceInter
+	now inherit (via their attributes()) method, the attributes of
+	their parent faces.
+
+2001-10-08 11:55  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: New functions to check for "stabbed" bounding
+	boxed.
+
+2001-10-08 11:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts-config.in: Initial revision.
+
+2001-10-08 11:52  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/: boolean/.cvsignore, coarsen/.cvsignore: Updated.
+
+2001-10-08 11:51  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/Makefile.am: Removed clipping/ from test suite.
+
+2001-10-08 11:51  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/clipping/Makefile.am: Glib flags are not needed anymore.
+
+2001-10-08 11:50  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/coarsen/Makefile.am: Glib flags now implicitely included.
+
+2001-10-08 11:49  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/coarsen/cartesian.c: Updated library function calls.
+
+2001-10-08 11:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/: .cvsignore, Makefile.am: Updated.
+
+2001-10-08 11:47  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: 1.gts, 2.gts, Makefile.am, set_1_2.sh: Added new
+	test case by Darie Aron.
+
+2001-10-08 11:45  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/Makefile.am: Renamed srf2oogl to gts2oogl. Glib flags are
+	now included implicitely.
+
+2001-10-08 11:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/: gts2oogl.c, srf2oogl.c: Renamed srf2oogl.c to gts2oogl.c
+
+2001-10-08 11:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/gtscompare.c: New color handling.
+
+2001-10-08 11:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/srf2oogl.c: New options to compute isolines of the surface.
+
+2001-10-08 11:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Glib flags are now included by default.
+
+2001-10-08 11:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/traverse.c: New color functions.
+
+2001-10-08 11:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/transform.c: New options to translate and turn surface
+	inside-out.
+
+2001-10-08 11:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/delaunay.c: Buggy function to remove holes...
+
+2001-10-08 11:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/coarsen.c: Updated verbosity.
+
+2001-10-08 11:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cartesian.c: Updated library calls.
+
+2001-10-08 11:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/: tmpl/bb-trees.sgml, tmpl/boolean.sgml, tmpl/containee.sgml,
+	tmpl/container.sgml, tmpl/edges.sgml, tmpl/extended_heaps.sgml,
+	tmpl/faces.sgml, tmpl/graph.sgml, tmpl/gts-unused.sgml,
+	tmpl/hsplit.sgml, tmpl/hsurface.sgml, tmpl/iso.sgml,
+	tmpl/object.sgml, tmpl/oocs.sgml, tmpl/partition.sgml,
+	tmpl/pgraph.sgml, tmpl/points.sgml, tmpl/psurface.sgml,
+	tmpl/segments.sgml, tmpl/simplify.sgml, tmpl/split.sgml,
+	tmpl/stats.sgml, tmpl/surfaces.sgml, tmpl/triangles.sgml,
+	tmpl/vertices.sgml, tmpl/wgraph.sgml, .cvsignore, Makefile.am,
+	gts-sections.txt: Updated.
+
+2001-10-08 11:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/predicates.c: Cosmetics: removed unused static functions.
+
+2001-10-08 11:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/predicates.c: Cosmetics: ANSI function declarations.
+
+2001-10-08 10:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/.cvsignore: Added gtsconfig.h
+
+2001-10-05 11:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Uses new gts_bb_tree_surface() function. Checks
+	for orientable manifold input surfaces.
+
+2001-08-29 19:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, TODO, configure.in, src/gts.h, src/predicates_init.h:
+	Updated.
+
+2001-08-29 19:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/srf2oogl.c: New "height" option to create z valued color
+	maps.
+
+2001-08-29 19:34  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/Makefile.am: Added speed tests and new tests.
+
+2001-08-29 19:32  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/cartesian.c: Added speed profiling.
+
+2001-08-29 19:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/clipping/clipping.c: Splits encroached constraints.
+
+2001-08-29 19:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vertex.c: New function gts_vertex_has_parent_surface(). 
+	Updated destroyed objects handling.
+
+2001-08-29 19:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/template.c: Cosmetic changes.
+
+2001-08-29 19:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: New methods add_face(), remove_face().  Support
+	for color using the color() method of objects.	New function
+	gts_surface_foreach_face_remove().  New GtsSurfaceTraverse
+	structure and associated functions.
+
+2001-08-29 19:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/split.c: Changed destroyed objects handling and handling of
+	input methods.
+
+2001-08-29 19:12  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/segment.c: Changed destroyed vertices handling (flags changed
+	in object.c).
+
+2001-08-29 19:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/psurface.c: Removed superfluous test.
+
+2001-08-29 19:07  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/point.c: Updated read() method.
+
+2001-08-29 19:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: Added object name registration and updated flags
+	handling.
+
+2001-08-29 19:04  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/named.c: Updated read and write methods.
+
+2001-08-12 22:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/matrix.c: New function gts_matrix_assign() + cosmetic
+	changes.
+
+2001-08-12 22:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/heap.c: New function gts_heap_top().
+
+2001-08-12 22:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/face.c: New iteration function gts_face_foreach_neighbor().
+
+2001-08-12 22:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/eheap.c: New randomized insertion.
+
+2001-08-12 22:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/edge.c: Cleanup.
+
+2001-08-12 22:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/container.c: Entirely rewritten.
+
+2001-08-12 22:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: gts_delaunay_add_vertex() now takes an extra guess
+	argument. New function gts_delaunay_add_vertex_to_face().
+
+2001-08-12 22:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Fixed bug in the case of an open surface (with
+	boundary edges).
+
+2001-08-12 22:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Added new sources files for graphs, graph
+	partitioning, triangulation refinement and fifos.
+
+2001-08-12 22:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/transform.c: Added independent scaling of x, y and z
+	axis.
+
+2001-08-12 22:07  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Added gts_surface_inter_check().
+
+2001-08-12 22:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/delaunay.c: Initial version for hole removal (buggy).
+	Mesh refinement (Ruppert and Shewchuk), conforming Delaunay
+	triangulation, randomization of input vertices.
+
+2001-08-12 22:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: New examples partition, traverse,
+	cartesian.
+
+2001-08-12 21:59  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/cartesian_speed.sh: Initial revision.
+
+2001-08-12 21:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/: gts-docs.sgml, gts-sections.txt, tmpl/delaunay.sgml,
+	tmpl/edges.sgml, tmpl/extended_heaps.sgml, tmpl/faces.sgml,
+	tmpl/gts-unused.sgml, tmpl/heaps.sgml, tmpl/matrices.sgml,
+	tmpl/object.sgml, tmpl/oocs.sgml, tmpl/surfaces.sgml,
+	tmpl/triangles.sgml, tmpl/vertices.sgml: Updated.
+
+2001-08-12 21:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/containee.sgml, doc/tmpl/container.sgml,
+	doc/tmpl/fifo.sgml, doc/tmpl/graph.sgml, doc/tmpl/partition.sgml,
+	doc/tmpl/pgraph.sgml, doc/tmpl/wgraph.sgml, test/clipping/c10:
+	Initial revision.
+
+2001-08-12 21:50  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/cartesian.sh, test/delaunay/random.c,
+	test/delaunay/random_speed.sh, test/delaunay/squarehole.gts,
+	test/delaunay/too_close.gts, test/delaunay/too_close.sh,
+	test/delaunay/two_segments.gts, test/delaunay/two_segments.sh,
+	src/fifo.c, src/graph.c, src/partition.c, src/pgraph.c,
+	src/refine.c, examples/cartesian.c, examples/partition.c,
+	examples/traverse.c: Initial revision.
+
+2001-02-23 03:43  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/clipping/clipping.c: New test for 2D boolean operations.
+
+2001-02-23 03:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/clipping/: Makefile.am, c1, c2, c3, c4, c5, c6, c7, c8, c9,
+	clipping.sh, clipping_c1_c2.sh, clipping_c1_c3.sh,
+	clipping_c1_c4.sh, clipping_c1_c5.sh, clipping_c1_c6.sh,
+	clipping_c1_c7.sh, clipping_c1_c8.sh, clipping_c1_c9.sh,
+	clipping_l1_l2.sh, clipping_l1_l3.sh, clipping_l1_l4.sh,
+	clipping_l1_l5.sh, l1, l2, l3, l4, l5: New tests for 2D boolean
+	operations.
+
+2001-02-23 03:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/Makefile.am: New clipping directory.
+
+2001-02-23 03:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/clipping/.cvsignore: Initial revision.
+
+2001-02-23 03:40  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/sponge1: New test.
+
+2001-02-23 03:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: Makefile.am, gts.h: New container class definition.
+
+2001-02-23 03:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/: Makefile.am, c1.c: New test c1.
+
+2001-02-23 03:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Added test/clipping.
+
+2001-02-23 03:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO: Updated.
+
+2001-02-23 03:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/container.c: Initial class definition.
+
+2001-02-23 02:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/: bb-trees.sgml, boolean.sgml, delaunay.sgml,
+	edges.sgml, extended_heaps.sgml, faces.sgml, gts-unused.sgml,
+	heaps.sgml, hsplit.sgml, hsurface.sgml, iso.sgml, kd-Trees.sgml,
+	matrices.sgml, misc.sgml, object.sgml, oocs.sgml, points.sgml,
+	psurface.sgml, segments.sgml, simplify.sgml, split.sgml,
+	stats.sgml, surfaces.sgml, triangles.sgml, vertices.sgml: Updated.
+
+2001-02-22 04:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Cleanup.
+
+2001-02-22 04:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/psurface.c: Fixed bug in gts_psurface_set_vertex_number().
+
+2001-02-22 04:25  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-10-08  Stephane Popinet  <s.popinet at niwa.cri.nz>
-	
-	* gts: Release of version 0.5.0.
+	* src/: gts.h, vertex.c: New function
+	gts_vertex_has_parent_surface().
 
-	* src/Makefile.am: Now builds shared libraries (thanks to
- 	Volodymyr Babin), rebuilds gts.def before making a distribution,
- 	includes a gts-config script (a la glib) and gts.m4 autoconf
- 	macros.
+2001-02-22 04:23  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* tools/srf2oogl.c: Renamed to gts2oogl.c.
+	* src/cdt.c: Fixed problem when walking through degenerate
+	triangles.  More robust edge removal in the case of degenerate
+	constrained triangulations.
 
-2001-09-17  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-19 06:37  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/point.c (gts_point_is_inside_surface): New function.
+	* test/boolean/Makefile.am: New test by B. Petit.
 
-	* src/triangle.c (gts_triangle_is_stabbed): New function.
+2001-02-19 06:37  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/bbtree.c (gts_bb_tree_stabbed, gts_bbox_is_stabbed): New
- 	functions.
+	* src/split.c: Fixed precondition problem in
+	gts_psurface_read_vertex.
 
-2001-09-03  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-19 06:35  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* tools/srf2oogl.c (write_isolines): Function to draw isolines
- 	(option -i or --isolines).
+	* src/psurface.c: Fixed infinite loop problem in
+	gts_psurface_set_vertex_number.
 
-2001-08-31  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-19 06:33  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/transform.c: New "revert" option to turn surface inside out.
+	* examples/set.c: Fixed problem with orientation for the difference
+	operation.
 
-2001-08-30  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-19 06:31  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/face.c (gts_face_link): New link() method.
+	* test/boolean/: cutter, set_sponge_cutter.sh, sponge: New test by
+	B. Petit.
 
-	* src/boolean.c (gts_surface_inter_new): Links back new faces to
- 	original faces using the link() method of GtsFaceClass.
+2001-02-19 06:28  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/set.c (main): Use new gts_bb_tree_surface function.
+	* src/makefile.msc: Revised by Mike Loehr.
 
-	* src/bbtree.c (gts_bb_tree_is_overlapping): New function.
-	(gts_bb_tree_surface): New function.
-        (gts_bb_tree_point_distance): Now takes the absolute value of the
- 	distance function, which allows for signed distances.
-	
-2001-08-03  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-15 04:16  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* tools/srf2oogl.c: New option for coloring vertices according to
- 	z coordinate.
+	* src/split.c: Fixed bug for precondition check.
 
-2001-08-02  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-15 04:02  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/transform.c: scaling operations for x, y, z axis.
+	* src/makefile.msc: Added dependencies and commands for automatic
+	generation of predicates_init.h.
 
-2001-07-03  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-15 04:01  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/delaunay.c (shuffle_array): Randomizes the order in
- 	which vertices are inserted. Greatly increase speed in
- 	pathological cases (i.e. cartesian meshes).
+	* examples/iso.c: Added example surfaces by Johannes Beigel.
 
-2001-06-20  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-15 03:58  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* test/delaunay/Makefile.am: Added "two segments" test.
+	* THANKS, TODO, doc/gts-sections.txt, doc/tmpl/bb-trees.sgml,
+	doc/tmpl/boolean.sgml, doc/tmpl/delaunay.sgml, doc/tmpl/edges.sgml,
+	doc/tmpl/extended_heaps.sgml, doc/tmpl/faces.sgml,
+	doc/tmpl/gts-unused.sgml, doc/tmpl/heaps.sgml,
+	doc/tmpl/hsplit.sgml, doc/tmpl/hsurface.sgml, doc/tmpl/iso.sgml,
+	doc/tmpl/kd-Trees.sgml, doc/tmpl/matrices.sgml, doc/tmpl/misc.sgml,
+	doc/tmpl/object.sgml, doc/tmpl/oocs.sgml, doc/tmpl/points.sgml,
+	doc/tmpl/psurface.sgml, doc/tmpl/segments.sgml,
+	doc/tmpl/simplify.sgml, doc/tmpl/split.sgml, doc/tmpl/stats.sgml,
+	doc/tmpl/surfaces.sgml, doc/tmpl/triangles.sgml,
+	doc/tmpl/vertices.sgml: Updated.
 
-2001-06-19  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-14 06:35  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/Makefile.am: added graph.c, pgraph.c, partition.c source files.
+	* acconfig.h: Added getopt.h.
 
-2001-06-07  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-14 04:09  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/eheap.c: Can now be initialized with a NULL GtsKeyFunc.
-	(gts_eheap_randomized): New function.
+	* configure.in: Support for non getopt architectures.
 
-2001-06-06  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-14 04:08  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/fifo.c (gts_fifo_top): New function.
+	* examples/cleanup.c, examples/coarsen.c, examples/delaunay.c,
+	examples/transform.c, examples/volume.c, tools/gtscompare.c,
+	tools/srf2oogl.c: Support for getopt (and no getopt_long).
 
-	* src/heap.c (gts_heap_top): New function.
+2001-02-14 03:25  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-05-31  Stephane Popinet  <s.popinet at niwa.cri.nz>
+	* examples/Makefile.am: Changed order of libraries for IRIX
+	compatibility.
 
-	* src/eheap.c (gts_eheap_remove): Now returns the removed element.
+2001-02-14 03:24  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-05-30  Stephane Popinet  <s.popinet at niwa.cri.nz>
+	* tools/Makefile.am: Changed order of libraries for IRIX
+	compatiblity.
 
-	* src/face.c (gts_face_foreach_neighbor): New function.
+2001-02-10 06:35  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/traverse.c: New example.
+	* src/predicates_init.c: cleanup.
 
-	* src/surface.c (gts_surface_traverse_new): New functions.
+2001-02-07 04:13  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-05-29  Stephane Popinet  <s.popinet at niwa.cri.nz>
+	* test/boolean/Makefile.am: Added new test by T. Binder.
 
-	* src/surface.c (gts_surface_write_oogl_boundary): New function.
+2001-02-07 04:13  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-05-24  Stephane Popinet  <s.popinet at niwa.cri.nz>
+	* test/boolean/: p1, p2, set_p1_p2.sh: New test by T. Binder.
 
-	* examples/delaunay.c (delaunay_remove_holes): New option to
- 	remove holes in the triangulation.
+2001-02-07 02:04  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_foreach_face_remove): New function.
+	* TODO: Updated.
 
-	* src/boolean.c (next_compatible_face): Fixed bug in the case of
- 	an open surface (with boundary edges).
+2001-02-06 05:05  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-05-22  Stephane Popinet  <s.popinet at niwa.cri.nz>
+	* THANKS: Added Helmut Cantzler (SUN compilation stuff).
 
-	* src/surface.c (gts_surface_write_oogl): Now output colors as
- 	specified by the color() method of objects.
+2001-02-06 05:04  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/object.c (object_class_init): Added color() virtual method.
+	* src/rounding.h: Changed HAVE_FLOATING_POINT_H to __FreeBSD__.
+	Apparently SunOS does have floating_point.h but the functions in
+	there are different from those in BSD.
 
-	* tools/srf2oogl.c: <unistd.h> is included only if it's there.
+2001-02-06 04:51  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/matrix.c (gts_matrix_assign): New function.
+	* doc/tmpl/oocs.sgml: Changed Group to Grid.
 
-2001-05-21  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-06 04:50  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/delaunay.c: Checks for duplicate vertices.
+	* doc/gts-sections.txt: Changed Group to Grid and (re)added
+	gts_surface_strip.
 
-2001-05-18  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-06 04:38  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/cdt.c (gts_delaunay_add_constraint): Now checks that a real
- 	GtsConstraint is passed as argument.
+	* examples/oocs.c: Changed GtsClusterGroup to GtsClusterGrid.
 
-2001-05-15  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-05 13:10  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/gts.h: Change read() method of GtsObject.
+	* ChangeLog: Updated.
 
-	* src/object.c (gts_object_class_from_name): New function.
+2001-02-05 13:09  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-05-14  Stephane Popinet  <s.popinet at niwa.cri.nz>
+	* src/surface.c: Replaced __PRETTY_FUNCTION__ with
+	G_GNUC_PRETTY_FUNCTION (win32 compilation).
 
-	* src/surface.c (gts_range_update): corrected bug in case of a nul
- 	variance.
+2001-02-05 13:07  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/gts.h: Added flags field to GtkObject and modified
- 	GTS_OBJECT_DESTROYABLE etc...
+	* src/predicates.c: Removed <sys/time.h> and function using
+	random() (win32 compilation).
 
-2001-05-11  Stephane Popinet  <s.popinet at niwa.cri.nz>
+2001-02-05 13:05  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/triangle.c (gts_triangle_circumcircle_center): now takes the
- 	point class as an extra argument.
+	* src/object.c: Removed code for gts_object_is_from_class and
+	gts_class_is_from_class in case of inlining.
 
-	* src/eheap.c (gts_eheap_key): new function.
+2001-02-05 13:03  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (surface_class_init): add_face and remove_face are
- 	now methods.
+	* src/makefile.msc: Changed .o to .obj.
 
-	* src/fifo.c: FIFO queue implementation.
+2001-02-05 13:01  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-02-04  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/gts.h: More consistent defines for inline functions (for
+	win32 compilation).
 
-	* src/oocs.c (cluster_index): Now uses triplet of integers.
+2001-02-05 13:00  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2001-02-03  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/config.h.win32: Removed _MSC_VER as suggested by Mike Loehr.
+
+2001-02-05 12:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/hsurface.c: Added <string.h> needed by memcpy.
+
+2001-02-05 12:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: ClusterGroup changed to ClusterGrid and
+	gts_surface_strip (re)added.
+
+2001-02-05 12:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/oocs.c: ClusterGroup change to ClusterGrid.
+
+2001-02-05 12:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO: Updated.
+
+2001-02-05 12:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, oocs.c: GtsClusterId now uses triplet of integers
+	(no need for long long int anymore).
+
+2001-02-04 11:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: New Cluster id interface.
+
+2001-02-04 11:20  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/oocs.c: Changed cluster keys to 64 bit integers if possible.
+
+2001-02-04 08:37  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/: bb-trees.sgml, gts-unused.sgml: Updated.
+
+2001-02-04 08:35  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: (gts_bbox_surface): New function.
+
+2001-02-04 08:33  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: gts.h, template.c: Updated.
+
+2001-02-04 08:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Added oocs.c.
+
+2001-02-04 08:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added oocs example.
+
+2001-02-04 08:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/: gts-docs.sgml, gts-sections.txt: Added out-of-core
+	simplication doc.
+
+2001-02-04 08:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Removed extra config.h definition.
+
+2001-02-04 08:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, TODO: Updated.
+
+2001-02-04 08:27  St�phane Popinet <popinet at users.sourceforge.net>;
 
 	* examples/oocs.c: New example for out-of-core simplification via
- 	vertex clustering.
+	vertex clustering.  Initial revision.
 
-2001-02-02  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-04 08:25  St�phane Popinet <popinet at users.sourceforge.net>;
 
 	* src/oocs.c: Implementation of the out-of-core simplification
- 	algorithm of Lindstrom and Turk.
+	algorithm of Lindstrom and Turk. Initial revision.
+
+2001-02-04 08:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/oocs.sgml: Doc for out-of-core simplification. Initial
+	revision.
+
+2001-02-02 07:12  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/Makefile.am: Added extra test by T. Binder.
+
+2001-02-02 07:11  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/predicates_init.h: Dummy file to trick automake.
+
+2001-02-02 07:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/.cvsignore: Remove predicates_init.h.
+
+2001-02-02 07:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/errors: Removed.
+
+2001-02-02 07:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/kdtree.c: (gts_kdtree_new): updated doc.
+
+2001-02-02 07:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, THANKS, src/gts.h: Updated.
+
+2001-02-02 06:59  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/: loc1, loc2, set_loc1_loc2.sh: New test by T.
+	Binder.
+
+2001-02-02 06:58  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: (gts_bbox_set): New function.  (gts_bbox_new):
+	Added check for class.
+
+2001-02-02 06:57  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/segment.c: (gts_segment_is_ok): Fixed bug in testing for
+	duplicate.
+
+2001-02-02 06:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/boolean/set.c: Added test for correctness of vertices, edges
+	and faces of surfaces after operation.
+
+2001-02-02 06:55  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: (gts_surface_inter_new): Fixed bug for reset of
+	reserved pointer in edges.
+
+2001-02-01 10:14  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/.cvsignore: Added .deps directory.
+
+2001-02-01 10:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/: boolean/.cvsignore, coarsen/.cvsignore,
+	delaunay/.cvsignore: Initial revision.
+
+2001-02-01 10:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/delaunay/: Makefile.am, cartesian.c, cartesian.sh: Delaunay
+	triangulation test. Initial revision.
+
+2001-02-01 10:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* test/: .cvsignore, Makefile.am: Initial revision.
+
+2001-02-01 09:55  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/bbtree.c (gts_bbox_surface): New function.
+	* test/coarsen/: Makefile.am, c1.c, c2.c, c3.c, cartesian.c,
+	double_prism.c, flat.sh, flat1.sh: Coarsening test. Initial
+	revision.
 
-2001-02-01  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:53  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/boolean.c (gts_surface_inter_new): Fixed bug for reset of
- 	reserved pointer in edges.
+	* test/boolean/: Makefile.am, boole.c, boole.sh, boole_cube_cube1,
+	boole_cube_cube1.sh, boole_cube_cube5, boole_cube_cube5.sh, cube,
+	cube1, cube2, cube4, cube5, cube6, cube7, errors, set.c, set.sh,
+	set_cube6_cube7.sh, set_cube_cube1, set_cube_cube1.sh,
+	set_cube_cube2, set_cube_cube2.sh, set_cube_cube4.sh, set_t11_t16,
+	set_t11_t16.sh, set_t14_t15, set_t14_t15.sh, set_t17_t18,
+	set_t17_t18.sh, set_t19_t20, set_t19_t20.sh, set_t19_t21,
+	set_t19_t21.sh, set_t1_t10, set_t1_t10.sh, set_t1_t11,
+	set_t1_t11.sh, set_t1_t12, set_t1_t12.sh, set_t1_t13,
+	set_t1_t13.sh, set_t1_t2, set_t1_t2.sh, set_t1_t22, set_t1_t22.sh,
+	set_t1_t23, set_t1_t23.sh, set_t1_t24, set_t1_t24.sh, set_t1_t3,
+	set_t1_t3.sh, set_t1_t4, set_t1_t4.sh, set_t1_t5, set_t1_t5.sh,
+	set_t1_t6, set_t1_t6.sh, set_t1_t7, set_t1_t7.sh, set_t1_t9,
+	set_t1_t9.sh, set_t25_t26.sh, set_t27_t28, set_t27_t28.sh, t1, t10,
+	t11, t12, t13, t14, t15, t16, t17, t18, t19, t2, t20, t21, t22,
+	t23, t24, t25, t26, t27, t28, t3, t4, t5, t6, t7, t9: Boolean
+	operation test. Initial revision.
 
-	* test/boolean/set.c (main): Added test for correctness of
- 	vertices, edges and faces of surfaces after operation.
+2001-02-01 09:43  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/segment.c (gts_segment_is_ok): Fixed bug in testing for
- 	duplicate.
+	* THANKS: For contributors not in AUTHORS. Initial revision.
 
-	* src/bbtree.c 
-	(gts_bbox_set): New function.
-	(gts_bbox_new): Added check for class.
+2001-02-01 09:40  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* test/boolean: Added extra test by T. Binder.
+	* tools/srf2oogl.c: Uses new object hierarchy.
 
-2001-01-31  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:38  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* gts: Release of version 0.4.0.
+	* tools/Makefile.am: Added new tool gtscompare.c.
 
-2001-01-04  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:34  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/template.c: Template for the creation of new object classes.
+	* examples/delaunay.c, examples/gtstoc.c, examples/transform.c,
+	tools/gtscompare.c: New example. Initial release.
 
-2001-01-03  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:32  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/rounding.h: Added untested support for Win32 and non-intel 
-	systems.
+	* examples/coarsen.c: Uses new interface for coarsening and volume
+	optimization.  Options for progressive surface generation and fold
+	control.
 
-2000-12-22  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:30  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/eheap.c (gts_eheap_insert_with_key): New function.
+	* examples/: cleanup.c, iso.c, set.c, volume.c: Uses new object
+	hierarchy.
 
-2000-11-22  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:27  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/transform.c: New example.
+	* examples/Makefile.am: New examples: delaunay, transform and
+	gtstoc.
 
-	* src/matrix.c (gts_matrix_product): New function.
+2001-02-01 09:25  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-11-09  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* ChangeLog, Makefile.am, NEWS, README, TODO, acconfig.h,
+	configure.in, doc/Makefile.am, doc/gts-docs.sgml,
+	doc/gts-sections.txt, doc/tmpl/bb-trees.sgml,
+	doc/tmpl/delaunay.sgml, doc/tmpl/extended_heaps.sgml,
+	doc/tmpl/gts-unused.sgml, doc/tmpl/iso.sgml,
+	doc/tmpl/kd-Trees.sgml, doc/tmpl/matrices.sgml,
+	doc/tmpl/points.sgml, doc/tmpl/segments.sgml,
+	doc/tmpl/simplify.sgml, doc/tmpl/surfaces.sgml,
+	doc/tmpl/triangles.sgml: Updated for new object hierarchy.
 
-	* src/named.c: Named vertex, edge, face classes.
+2001-02-01 09:23  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-11-07  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* doc/tmpl/: boolean.sgml, edges.sgml, faces.sgml, hsplit.sgml,
+	hsurface.sgml, misc.sgml, object.sgml, psurface.sgml, split.sgml,
+	stats.sgml, vertices.sgml: Doc for new object. Initial revision.
 
-	* src/point.c (gts_segment_triangle_intersection): New parameter to 
-	take into account the boundary of the triangle.
+2001-02-01 09:18  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-11-03  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/vopt.c: Uses new object framework. The collapse topological
+	and folding constraints are now dealt with by the generic
+	coarsening routine.
 
-	* src/surface.c 
-	(gts_surface_foreach_vertex)
-	(gts_surface_foreach_edge)
-	(gts_surface_foreach_face):
-	Removal of faces during one of these will now cause an assertion
-	failure.
-	
-2000-11-02  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:15  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/boolean.c: New file containing functions for boolean operations 
-	between surfaces.
+	* src/surface.c: Uses new object framework.  I/O operations are now
+	also object-oriented.  Boolean operations have been moved to
+	boolean.c.
 
-2000-11-01  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 09:09  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* examples/delaunay.c: New example.
+	* src/triangle.c: New object framework. Face specific part has been
+	moved to face.c.
 
-	* src/cdt.c: New implementation.
+2001-02-01 09:08  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-09-11  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/stripe.c: Uses new object framework.
 
-	* tools/gtscompare.c: New utility program.
+2001-02-01 09:07  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_distance): New function.
+	* src/segment.c: New object framework. Edge specific part has been
+	moved to edge.c.
 
-	* src/bbtree.c (gts_bb_tree_point_closest_bboxes, 
-	gts_bb_tree_point_distance, 
-	gts_bb_tree_point_closest, 
-	gts_bb_tree_triangle_distance, 
-	gts_bb_tree_segment_distance, 
-	gts_bb_tree_surface_distance, 
-	gts_bb_tree_surface_boundary_distance): New functions.
+2001-02-01 09:06  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-31  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/: predicates.c, predicates_init.c: Now uses rounding.h for
+	floating point control.
 
-	* src/progress.c (gts_psurface_new, gts_psurface_add_edge, 
-	gts_psurface_remove_edge): New functions for progressive surfaces.
+2001-02-01 09:04  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-27  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/point.c: New object framework. Vertex specific part has been
+	moved to vertex.c.
 
-	* src/surface.c (gts_surface_resize): New function.
+2001-02-01 09:01  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/ (gts_point_resize, gts_segment_resize): Now checks if the newly
- 	allocated space is located at the same place as the old one.
+	* src/misc.c: Added Versioning.  gts_get_newline: new function.
 
-2000-07-26  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 08:58  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_read): Added a line argument returning 
-	the line number in case of error.
+	* src/matrix.c: Using new macros for scalar and vector products.
 
-2000-07-25  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 08:13  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/gts.h (gts_triangle_points): Added (t) everywhere.
+	* src/kdtree.c: Uses new GtsBBox object.
 
-2000-07-24  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2001-02-01 08:11  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* gts: Release of version 0.3.0
-	
-	* tools/srf2oogl.c: "boundary" option now outputs boundary edges 
+	* src/iso.c: Uses new object hierarchy.
+
+2001-02-01 08:08  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Updated interface.
+
+2001-02-01 08:07  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts-private.h: Cleaned up.
+
+2001-02-01 08:06  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/eheap.c: gts_eheap_insert_with_key: new function. 
+	gts_eheap_remove_top: now returns last key correctly. 
+	gts_eheap_top: new function.  gts_eheap_update: new function.
+
+2001-02-01 08:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/boolean.c: Boolean operations. Initial revision.
+
+2001-02-01 08:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/NOTES: Initial revision.
+
+2001-02-01 07:58  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vertex.c: Vertex object. Initial revision.
+
+2001-02-01 07:57  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/template.c: Template file for new objects. Initial revision.
+
+2001-02-01 07:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/split.c: Vertex split. Initial revision.
+
+2001-02-01 07:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/rounding.h: Floating point control. Initial revision.
+
+2001-02-01 07:55  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/psurface.c: Progressive surfaces. Initial revision.
+
+2001-02-01 07:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/object.c: GTS base object. Initial revision.
+
+2001-02-01 07:54  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/named.c: Named vector, edge, face objects. Initial revision.
+
+2001-02-01 07:52  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/makefile.msc: Microsoft C makefile. Initial revision.
+
+2001-02-01 07:52  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/hsurface.c: Hierarchical surface. Initial revision.
+
+2001-02-01 07:51  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/face.c: Face object. Initial revision.
+
+2001-02-01 07:50  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/edge.c: Edge object. Initial revision.
+
+2001-02-01 07:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/config.h.win32: Win32 config file. Initial revision.
+
+2001-02-01 07:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Completely new implementation using "jump and walk".
+
+2001-02-01 07:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: Added support for GtsBBox objects and for distance
+	computation between tree and objects.
+
+2001-02-01 07:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Updated source file listing. Added extra
+	distribution for win32 files.
+
+2000-07-24 23:45  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* Makefile.am: Added examples and doc targets.
+
+2000-07-24 23:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Changed version to 0.3.0.
+
+2000-07-24 23:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, TODO: Updated.
+
+2000-07-24 23:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Changed .._reset_data to .._reset_private.
+
+2000-07-24 23:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/iso.c: Changed example function.
+
+2000-07-24 23:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vopt.c: Changed relative weighting of boundary and volume
+	costs.
+
+2000-07-24 23:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: point.c, segment.c, surface.c: Changed .._reset_data to
+	.._reset_private.
+
+2000-07-24 23:19  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/iso.c: Updated doc.
+
+2000-07-24 23:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: predicates.c, predicates_init.c: Floating point rounding
+	and precision behaviour control now uses symbolic constants.
+
+2000-07-24 23:16  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/srf2oogl.c: "boundary" option now outputs boundary edges
 	instead of coloring boundary triangles.
 
-	* src/vopt.c: Changed relative weighting of boundary and volume costs.
+2000-07-24 23:14  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-22  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* doc/gts-docs.sgml: Updated.
 
-	* src/predicates.c, src/predicates_init.c: Floating point rounding and
- 	precision behaviour control now uses symbolic constants.
+2000-07-24 23:10  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-20  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* doc/: tmpl/extended_heaps.sgml, tmpl/gts-unused.sgml,
+	tmpl/heaps.sgml, tmpl/iso.sgml, tmpl/matrices.sgml,
+	tmpl/points.sgml, tmpl/segments.sgml, tmpl/simplify.sgml,
+	tmpl/surfaces.sgml, tmpl/triangles.sgml, gts-sections.txt: Updated
+	docs.
 
-	* src/iso.c: Implementation of isosurfaces of a function f(x, y, z).
+2000-07-22 03:33  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-18  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* ChangeLog, TODO: Updated.
 
-	* src/surface.c (gts_surface_coarsen, gts_surface_refine): 
-	New stopping interface.
+2000-07-22 03:32  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-17  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* tools/srf2oogl.c: Updated calls to new library interface.  New
+	oundary' option to color triangles which have a boundary edge.
 
-	* examples/coarsen.c: New options for using memoryless simplification.
+2000-07-22 03:30  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/vopt.c: Implementation of Lindstrom and Turk memoryless 
+	* examples/iso.c: Example of isosurface computation.
+
+2000-07-22 03:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/vopt.c: Implementation of Lindstrom and Turk memoryless
 	simplification functions.
 
-	* src/surface.c (gts_surface_read): Error checking in case indices are
- 	equal to zero.
+2000-07-22 03:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/iso.c: Implementation of isosurfaces of a function f(x, y,
+	z).
+
+2000-07-22 03:28  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-07-05  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/matrix.c: Matrix operations have been moved to this new file.
+	 (gts_matrix_new): The order of the arguments has been transposed. 
+	(gts_vector_print): New function.
+
+2000-07-22 03:25  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/matrix.c (gts_vector_print): New function.
+	* src/surface.c: (gts_surface_coarsen, gts_surface_refine): New
+	(consistent) stopping interface.  (gts_surface_read): Error
+	checking in case indices are equal to zero.
 
-2000-07-04  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2000-07-22 03:20  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/point.c 
-	(gts_point_is_boundary): New function.
-	(gts_point_neighbors): New function.
+	* src/triangle.c: Changed ->data to ->private and GList to GSList. 
+	(gts_triangle_use_segments): New function.
 
-2000-07-02  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2000-07-22 03:17  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/eheap.c (gts_eheap_remove_top): Now takes an extra @key argument.
+	* src/stripe.c: Changed ->data to ->private and GList to GSList.
 
-	* src/surface.c 
-	(gts_segment_collapse_is_valid): New function.
-	(gts_surface_coarsen): Now stops if the key of the segment to be 
-	collapsed is equal to G_MAXDOUBLE.
+2000-07-22 03:15  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/triangle.c (gts_triangle_use_segments): New function.
+	* src/segment.c: Changed ->data to ->private and GList to GSList. 
+	(gts_segment_is_boundary): Now works with a NULL argument for
+	surface.  (gts_segments_are_intersecting): Now returns GTS_IN,
+	GTS_ON, GTS_OUT.
 
-2000-06-04  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2000-07-22 03:12  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/segment.c (gts_segment_is_boundary): Now works with a NULL 
-	argument for surface.
+	* src/point.c: Changed ->data to ->private and GList to GSList. New
+	functions gts_point_is_boundary(), gts_point_neighbors(). 
+	(gts_point_triangles): Now takes a list as an extra argument. 
+	(gts_segment_triangle_intersection): Removed the part which was
+	specific to the surface intersection stuff. This function can now
+	be used on its own as it should.  (gts_point_is_in_triangle): Now
+	returns GTS_IN, GTS_ON, GTS_OUT.
 
-	* tools/srf2oogl.c: New `boundary' option to color triangles which 
-	have a boundary edge.
+2000-07-22 03:06  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-06-02  Stephane Popinet  <popinet at lmm.jussieu.fr>
+	* src/misc.c: GList changed to GSList. Debugging functions
+	gts_write_segment() and gts_write_triangle() now take an origin
+	point as extra argument.
 
-	* src/matrix.c: Matrix operations have been moved to this new file.
-	(gts_matrix_new): The order of the arguments has been transposed.
+2000-07-22 03:04  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/kdtree.c: GList changed to GSList.
+
+2000-07-22 03:02  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/heap.c: GtsHeap is now an opaque data structure.
+
+2000-07-22 03:00  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/: All the source files have been modified to use only GSList 
-	and not GList. The memory saving is about 20% for a triangulated 
-	surface.
+	* src/gts.h: Updated interface. Major changes are move from GList
+	to GSList and new functions for matrix computations, memoryless
+	simplification algorithm and isosurface computations.
 
-2000-06-01  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2000-07-22 02:58  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/point.c (gts_point_triangles): Now takes a list as an extra
+	* src/gts-private.h: GList changed to GSList. GtsSurface is now an
+	opaque structure.
+
+2000-07-22 02:56  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/eheap.c: gts_eheap_remove_top() Now takes an extra @key
 	argument.
 
-2000-03-07  Stephane Popinet  <popinet at lmm.jussieu.fr>
+2000-07-22 02:53  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/point.c (gts_segment_triangle_intersection): Removed the
-	part which was specific to the surface intersection stuff. This
-	function can now be used on its own as it should.
+	* src/cdt.c: Changed GList to GSList and ->data to ->private.
 
-	* src/: Changed data identifier to private in _GtsPoint,
-	_GtsSegment, _GtsTriangle.
+2000-07-22 02:50  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_foreach_triangle): Now takes a
-	GtsFunc as a callback function as it should have from the start.
+	* src/bbtree.c: Changed GList to GSList and ->data to ->private.
 
-2000-03-03  Stephane Popinet <popinet at lmm.jussieu.fr>
+2000-07-22 02:48  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_triangle_number): New function.
+	* src/Makefile.am: Added new object files.
 
-	* src/point.c (gts_point_is_in_triangle): Now returns GTS_IN,
-	GTS_ON, GTS_OUT.
+2000-07-22 02:47  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/volume.c: Changed error message.
+
+2000-07-22 02:46  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/set.c: Updated function calls to new library interface.
+
+2000-07-22 02:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/coarsen.c: New options for using memoryless
+	simplification.
+
+2000-07-22 02:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/cleanup.c: Updated calls to new library interface.
+
+2000-07-22 02:34  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* examples/Makefile.am: Added iso example program.
+
+2000-07-04 06:39  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: (gts_segment_collapse_is_valid): New function. 
+	(gts_surface_coarsen): Now stops if the key of the segment to be
+	collapsed is equal to G_MAXDOUBLE.  (gts_surface_foreach_triangle):
+	Now takes a GtsFunc as a callback function as it should have from
+	the start.  (gts_surface_triangle_number): New function.
+
+2000-02-29 23:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* README: Added copyright information.
+
+2000-02-29 01:18  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* AUTHORS: Added J.R. Shewchuk to contributors.
+
+2000-02-21 09:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, NEWS, README, TODO: Updated.
+
+2000-02-21 09:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Added examples target directory.
+
+2000-02-21 09:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* tools/srf2oogl.c: Added --incomp option to color incompatible
+	triangles.
 
-	* src/segment.c (gts_segments_are_intersecting): Now returns
-	GTS_IN, GTS_ON, GTS_OUT.
+2000-02-21 09:18  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-02-18  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/surface.c: (gts_surface_coarsen): Fixed a bug when the
+	collapse went down to two similar triangles (back to back). 
+	(gts_surface_read): Don't stupidly use hash tables anymore use
+	simple arrays instead (simpler, faster, better). 
+	(gts_surface_coarsen): Bug fix in the case of input surface with
+	degenerate or duplicate edges.	(gts_surface_write): Does not use
+	hash tables anymore. Simpler, more memory efficient and slightly
+	faster.  (gts_surface_coarsen): New type GtsStopFunc is now used as
+	a stopping criterium. Two functions gts_coarsen_number_stop() and
+	gts_coarsen_length_stop() are provided.  (gts_surface_refine): New
+	type GtsStopFunc is now used as a stopping criterium. Two functions
+	gts_refine_number_stop() and gts_refine_length_stop() are provided.
+	 (gts_surface_volume): New function.  (gts_surface_stats): New
+	fields n_boundary_segments, n_non_manifold_segments.  New functions
+	for topological properties: manifold, orientable, closed. 
+	(gts_surface_remove_triangle): New function.  (gts_surface_copy):
+	New function.
 
-	* examples/coarsen.c: New example.
+2000-02-21 09:14  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* tools/srf2oogl.c: Now takes an --incomp option for coloring
-	incompatible triangles.
+	* src/triangle.c: New function gts_triangle_is_duplicate(). Test
+	for degenerate triangle in the gts_triangle_quality() function.
 
-	* src/surface.c (gts_surface_coarsen): Fixed a bug when the
-	collapse went down to two similar triangles (back to back).
+2000-02-21 09:12  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_read): Don't stupidly use hash tables
-	anymore use simple arrays instead (simpler, faster, better).
+	* src/segment.c: gts_segment_is_duplicate(): Bug fix for the case
+	when the input segment is degenerate. New functions
+	gts_segment_triangles(). New reallocation function
+	gts_segment_resize (class inheritance).
 
-2000-02-17  Stephane Popinet <popinet at lmm.jussieu.fr>
+2000-02-21 09:09  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/point.c (gts_points_merge): Rewritten. Now destroys merged
-	points and returns the updated list of points. Much faster.
+	* src/point.c: gts_point_merge() has been rewritten. Now destroys
+	merge points and returns the updated list of points. Much faster.
+	gts_segment_triangle_intersection() now uses robust orientation
+	tests. Obviously a great improvement for the robustness of the set
+	operations on surfaces. Added first functions for reallocation of
+	memory (class inheritance).
 
-	* src/surface.c (gts_surface_coarsen): Bug fix in the case of
-	input surface with degenerate or duplicate edges.
+2000-02-21 09:06  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/segment.c (gts_segment_is_duplicate): Bug fix for the case
-	when the input segment is degenerate.
+	* src/misc.c: Replaced g_return_if_fail by g_assert in memory
+	debugging functions.
 
-	* examples/cleanup.c: New example.
+2000-02-21 09:05  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/triangle.c (gts_triangle_is_duplicate): New function.
+	* src/kdtree.c: Changed documentation.
 
-2000-02-14  Stephane Popinet <popinet at lmm.jussieu.fr>
+2000-02-21 09:03  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_write): Does not use hash tables
-	anymore. Simpler, more memory efficient and slightly faster.
+	* src/gts.h: Updated function calls.
 
-	* src/surface.c (gts_surface_coarsen): New type GtsStopFunc is now 
-	used as a stopping criterium. Two functions
-	gts_coarsen_number_stop() and gts_coarsen_length_stop() are
-	provided.
+2000-02-21 09:02  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_refine): New type GtsStopFunc is now 
-	used as a stopping criterium. Two functions
-	gts_refine_number_stop() and gts_refine_length_stop() are
-	provided.
+	* src/gts-private.h: Debugging functions added.
 
-2000-02-12  Stephane Popinet <popinet at lmm.jussieu.fr>
+2000-02-21 09:01  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_volume): New function.
+	* src/cdt.c: Changed debugging parts.
 
-	* examples/volume.c: New example.
+2000-02-21 08:58  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/surface.c (gts_surface_stats): New fields
-	n_boundary_segments, n_non_manifold_segments.
+	* examples/: cleanup.c, Makefile.am, coarsen.c, set.c, volume.c,
+	.cvsignore: Initial revision.
 
-	* src/surface.c: New functions for topological properties:
-	manifold, orientable, closed.
+2000-02-09 07:37  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-02-10  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/surface.c: gts_surface_copy() has been added.
 
-	* src/surface.c (gts_surface_remove_triangle): New function.
+2000-02-09 07:32  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-02-09  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/point.c: Complete rewrite of
+	gts_segment_triangle_intersection(). Now uses only robust
+	orientation tests.
 
-	* examples/: A new examples directory has been created.
+2000-02-03 01:35  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-02-03  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/triangle.c: New function gts_triangles_common_edge().
 
-	* src/point.c (gts_segment_triangle_intersection): Now uses robust 
-	orientation tests. Obviously a great improvement for the
-	robustness of the set operations on surfaces.
+2000-02-03 01:34  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-02-02  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/surface.c: More generic interface for gts_surface_refine().
+	Now uses binary heaps => speed up of at least a factor two.
 
-	* gts: Release of version 0.2.0.
+2000-02-03 01:32  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/stripe.c (gts_surface_strip): implementation of a simple
-	but efficient triangle strips generation algorithm.
+	* src/stripe.c: Simplified look ahead for neighbors. Only one level
+	ahead now as the multilevel look ahead of the previous version did
+	not seem to improve things.
 
-2000-01-28  Stephane Popinet <popinet at lmm.jussieu.fr>
+2000-02-03 01:30  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/triangle.c: New functions gts_triangle_neighbor_number() and 
+	* src/gts.h: New gts_triangles_common_edge() function. Changes in
+	the interfaces for gts_surface_strip() and gts_surface_refine().
+
+2000-02-03 01:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/eheap.c: Cosmetic changes.
+
+2000-02-03 01:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/: gts-unused.sgml, segments.sgml, surfaces.sgml,
+	triangles.sgml: Interfaces changes.
+
+2000-02-03 01:26  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/: gts-docs.sgml, gts-sections.txt: Sections about binary
+	heaps have been added.
+
+2000-02-03 01:24  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Version changed.
+
+2000-02-03 01:23  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog, NEWS, TODO: Updated.
+
+2000-02-03 01:22  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/extended_heaps.sgml: Initial doc for extended binary
+	heaps.
+
+2000-02-03 01:21  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/tmpl/heaps.sgml: Initial doc for binary heaps.
+
+2000-02-02 23:17  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/stripe.c: Multi-level neighbor detection.
+
+2000-02-01 05:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/stripe.c: An implementation of a triangle stripe algorithm.
+
+2000-02-01 05:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Added interface for gts_surface_stripe().
+
+2000-02-01 05:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Added entry for stripe.c
+
+2000-01-31 22:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog: Updated.
+
+2000-01-31 22:28  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: Added eheap.c source target.
+
+2000-01-31 22:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Improved gts_surface_coarsen() function. Now uses
+	GtsEHeap and more generic user interface. Speedup is a least a
+	factor 2.
+
+2000-01-31 22:25  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/triangle.c: New functions gts_triangle_neighbor_number() and
 	gts_triangle_neighbors().
 
-	* src/surface.c (gts_surface_coarsen): Now uses extended binary
-	heaps (speedup is at least a factor of two). The interface is more 
-	generic and allows for user-defined cost, stopping criterium and
-	midpoint functions.	
+2000-01-31 22:24  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/eheap.c: An implementation of extended binary heaps. Allows
-	0(log n) removal of elements.
+	* src/segment.c: gts_segment_midpoint is now a function (instead of
+	a macro).
 
-	* src/segment.c (gts_segment_midpoint): is now a function.
+2000-01-31 22:22  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-01-20  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/heap.c: Improved sift_up and sift_down functions.
 
-	* src/surface.c (gts_surface_refine): User-defined sorting and
-	stopping functions can now be specified.
+2000-01-31 22:21  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-01-19  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/gts.h: New interfaces for extended heaps.
 
-	* src/surface.c (gts_surface_refine): Now uses binary heaps. Speed
-	up of at least 2 compared with the version using binary trees plus 
-	simpler and more robust.
+2000-01-31 22:19  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/heap.c: Implementation of binary heaps.
+	* src/eheap.c: Keys are now stored in GtsEHeapPair structure and a
+	decrease_key() function has been defined.
 
-2000-01-17  Stephane Popinet <popinet at lmm.jussieu.fr>
+2000-01-29 03:09  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/eheap.c: An implementation of extended binary heaps.
+
+2000-01-27 12:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/heap.c: Implementation of a binary heap.
+
+2000-01-18 02:55  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* gts: Release of version 0.1.0.
-	
-	* src/surface.c: The gts_surfaces_intersection and union no longer 
-	assume that the data field of the triangles is NULL but still
-	assume that the data field of the edges of the triangles is
-	NULL. The methods have been checked against memory leaks.
-	
-	* src/triangle.c: The destroy method now takes one extra argument
-	giving the possibility to "descend" the hierarchy and destroy any
-	unused segment or endpoints recursively.
-	
-	* src/segment.c: The destroy method now takes one extra argument
-	giving the possibility to "descend" the hierarchy and destroy any
-	unused endpoint.
-	
 	* src/cdt.c: The data field of the constraints is not supposed to
 	contain NULL initially anymore. Some cosmetic changes.
 
+2000-01-18 02:53  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* ChangeLog: Updated.
+
+2000-01-18 02:52  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: The gts_surfaces_intersection and union no longer
+	assume that the data field of the triangles is NULL but still
+	assume that the data field of the edges of the triangles is NULL.
+	The methods have been checked against memory leaks.
+
+2000-01-18 02:48  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/triangle.c: The destroy method now takes an extra argument to
+	allow for recursively destroying the hierarchy.
+
+2000-01-18 02:46  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/segment.c: The destroy method now takes an extra argument to
+	allow for destroying recursively the hierarchy.
+
+2000-01-18 02:42  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/point.c: Added leak debugging information.
+
+2000-01-18 02:41  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: Some interface changes.
+
+2000-01-18 02:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts-private.h: Changed debug level.
+
+2000-01-18 02:36  St�phane Popinet <popinet at users.sourceforge.net>;
+
 	* src/bbtree.c: The leaves of the bounding box tree can now be
-	freed as well. The methods have been checked against memory leaks.
+	freed as well.
+
+2000-01-18 02:31  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* doc/: gts-sections.txt, tmpl/bb-trees.sgml, tmpl/gts-unused.sgml,
+	tmpl/segments.sgml, tmpl/surfaces.sgml, tmpl/triangles.sgml:
+	Updated docs.
+
+2000-01-18 02:30  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Changed versions.
+
+2000-01-18 02:29  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* README: Changed web site.
+
+2000-01-18 02:27  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* NEWS, TODO: Updated.
+
+2000-01-14 01:16  steph
+
+	* src/gts-private.h: Changed Epsilon values
+
+2000-01-14 01:16  steph
+
+	* src/gts.h: Removed obsolete prototypes
+
+2000-01-11 23:55  steph
+
+	* Makefile.am: Removed doc from SUBDIRS
+
+2000-01-11 23:48  steph
+
+	* Makefile.am: Added doc to list of SUBDIRS
+
+2000-01-11 23:29  steph
+
+	* ChangeLog: Updated documentation
+
+2000-01-11 23:28  steph
+
+	* src/gts.h: Cosmetic changes
+
+2000-01-11 23:26  steph
+
+	* doc/gts-sections.txt, doc/tmpl/bb-trees.sgml,
+	doc/tmpl/delaunay.sgml, doc/tmpl/gts-unused.sgml,
+	doc/tmpl/kd-Trees.sgml, doc/tmpl/matrices.sgml,
+	doc/tmpl/points.sgml, doc/tmpl/segments.sgml,
+	doc/tmpl/surfaces.sgml, doc/tmpl/triangles.sgml, src/kdtree.c,
+	src/segment.c: Updated documentation
+
+2000-01-08 04:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* configure.in: Micro version changed.
+
+2000-01-08 04:13  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO: Updated.
+
+2000-01-08 03:10  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/surface.c: Changed call to gts_surface_free to
+	gts_surface_destroy.
+
+2000-01-08 03:05  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/: point.c, segment.c, surface.c, triangle.c: Added docs.
+
+2000-01-08 03:04  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/kdtree.c: New docs. Fixed a bug in gts_kdtree_range (was
+	partly 2D partly 3D before!).
+
+2000-01-08 03:03  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/gts.h: New docs for macros. Replaced some elementary
+	functions with macros.
+
+2000-01-08 03:01  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/cdt.c: Added doc and test for t->data.
+
+2000-01-08 03:00  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/bbtree.c: Added doc and new function destroy().
+
+1999-12-11 01:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* TODO: Initial revision.
+
+1999-12-11 01:38  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* src/Makefile.am: removed trailing slash.
+
+1999-12-09 06:46  St�phane Popinet <popinet at users.sourceforge.net>;
+
+	* README: Updated information. The file was originally for GLib.
+
+1999-12-07 03:46  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-01-11  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/Makefile.am: Fixed (I hope) dependency problem with
+	predicates_init.h.
 
-	* doc/: Updated documentation.
+1999-12-07 03:30  St�phane Popinet <popinet at users.sourceforge.net>;
 
-2000-01-06  Stephane Popinet <popinet at lmm.jussieu.fr>
+	* src/Makefile.am: Fixed predicates_init.h dependencies.
 
-	* src/kdtree.c (gts_kdtree_range): Fixed a
-	bug. gts_point_is_in_rectangle was 2D not 3D.
+1999-12-07 02:56  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	* src/bbtree.c (gts_bb_tree_destroy): Creation of this function
-	which was obviously missing. Needs testing.	
+	* .cvsignore, AUTHORS, COPYING, ChangeLog, Makefile.am, NEWS,
+	README, acconfig.h, acinclude.m4, configure.in, doc/.cvsignore,
+	doc/Makefile.am, doc/gts-docs.sgml, doc/gts-sections.txt,
+	doc/tmpl/bb-trees.sgml, doc/tmpl/delaunay.sgml,
+	doc/tmpl/gts-unused.sgml, doc/tmpl/kd-Trees.sgml,
+	doc/tmpl/matrices.sgml, doc/tmpl/points.sgml,
+	doc/tmpl/segments.sgml, doc/tmpl/surfaces.sgml,
+	doc/tmpl/triangles.sgml, src/.cvsignore, src/Makefile.am,
+	src/bbtree.c, src/cdt.c, src/gts-private.h, src/gts.h, src/heap.c,
+	src/kdtree.c, src/misc.c, src/point.c, src/predicates.c,
+	src/predicates.h, src/predicates_init.c, src/segment.c,
+	src/surface.c, src/triangle.c, tools/.cvsignore, tools/Makefile.am,
+	tools/srf2oogl.c: Initial revision
 
-1999-12-06  Stephane Popinet <popinet at lmm.jussieu.fr>
+1999-12-07 02:56  St�phane Popinet <popinet at users.sourceforge.net>;
 
-	*  Creation of the initial CVS repository.
+	* .cvsignore, AUTHORS, COPYING, ChangeLog, Makefile.am, NEWS,
+	README, acconfig.h, acinclude.m4, configure.in, doc/.cvsignore,
+	doc/Makefile.am, doc/gts-docs.sgml, doc/gts-sections.txt,
+	doc/tmpl/bb-trees.sgml, doc/tmpl/delaunay.sgml,
+	doc/tmpl/gts-unused.sgml, doc/tmpl/kd-Trees.sgml,
+	doc/tmpl/matrices.sgml, doc/tmpl/points.sgml,
+	doc/tmpl/segments.sgml, doc/tmpl/surfaces.sgml,
+	doc/tmpl/triangles.sgml, src/.cvsignore, src/Makefile.am,
+	src/bbtree.c, src/cdt.c, src/gts-private.h, src/gts.h, src/heap.c,
+	src/kdtree.c, src/misc.c, src/point.c, src/predicates.c,
+	src/predicates.h, src/predicates_init.c, src/segment.c,
+	src/surface.c, src/triangle.c, tools/.cvsignore, tools/Makefile.am,
+	tools/srf2oogl.c: Imported sources
 
diff --git a/INSTALL b/INSTALL
index b42a17a..54caf7c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,3 +1,9 @@
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
+Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
 Basic Installation
 ==================
 
@@ -8,20 +14,27 @@ various system-dependent variables used during compilation.  It uses
 those values to create a `Makefile' in each directory of the package.
 It may also create one or more `.h' files containing system-dependent
 definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
 
    If you need to do unusual things to compile the package, please try
 to figure out how `configure' could check whether to do them, and mail
 diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
 
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
 
 The simplest way to compile this package is:
 
@@ -55,14 +68,16 @@ Compilers and Options
 =====================
 
    Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
 
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
 
 Compiling For Multiple Architectures
 ====================================
@@ -75,11 +90,11 @@ directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
 source code in the directory that `configure' is in and in `..'.
 
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
 
 Installation Names
 ==================
@@ -122,22 +137,32 @@ you can use the `configure' options `--x-includes=DIR' and
 Specifying the System Type
 ==========================
 
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
      CPU-COMPANY-SYSTEM
 
-See the file `config.sub' for the possible values of each field.  If
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
 `config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
+need to know the machine type.
 
-   If you are building compiler tools for cross-compiling, you can also
+   If you are _building_ compiler tools for cross-compiling, you should
 use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
 
 Sharing Defaults
 ================
@@ -150,20 +175,44 @@ default values for variables like `CC', `cache_file', and `prefix'.
 `CONFIG_SITE' environment variable to the location of the site script.
 A warning: not all `configure' scripts look for a site script.
 
-Operation Controls
+Defining Variables
 ==================
 
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
    `configure' recognizes the following options to control how it
 operates.
 
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
 `--help'
+`-h'
      Print a summary of the options to `configure', and exit.
 
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
 `--quiet'
 `--silent'
 `-q'
@@ -175,8 +224,6 @@ operates.
      Look for the package's source code in directory DIR.  Usually
      `configure' can determine that directory automatically.
 
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
 
-`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
index 9596350..4e93daf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,13 @@
 ## Process this file with automake to produce Makefile.in
 
 SUBDIRS = src tools examples doc test
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = gts.pc
+
+dist-hook:
+	$(RM) -r `find $(distdir) -name CVS -type d -print`
+	$(RM) `find $(distdir) -name ".cvsignore" -type f -print`
+
+changelog:
+	cvs2cl.pl --usermap .usermap --prune
diff --git a/Makefile.in b/Makefile.in
index 96a4f35..d2b44eb 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = .
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,83 +73,177 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
 SUBDIRS = src tools examples doc test
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = gts.pc
+subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = 
-DIST_COMMON =  README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
-Makefile.am Makefile.in NEWS THANKS TODO acconfig.h acinclude.m4 \
-aclocal.m4 config.guess config.h.in config.sub configure configure.in \
-install-sh ltconfig ltmain.sh missing mkinstalldirs
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+CONFIG_CLEAN_FILES = gts.pc
+DIST_SOURCES =
+DATA = $(pkgconfig_DATA)
+
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
+	ps-recursive install-info-recursive uninstall-info-recursive \
+	all-recursive install-data-recursive install-exec-recursive \
+	installdirs-recursive install-recursive uninstall-recursive \
+	check-recursive installcheck-recursive
+DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \
+	COPYING ChangeLog INSTALL Makefile.am NEWS THANKS TODO \
+	acinclude.m4 aclocal.m4 config.guess config.h.in config.sub \
+	configure configure.in depcomp gts.pc.in install-sh ltmain.sh \
+	missing mkinstalldirs
+DIST_SUBDIRS = $(SUBDIRS)
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
 
-TAR = gtar
-GZIP_ENV = --best
-all: all-redirect
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
 
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
 
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in  acinclude.m4
-	cd $(srcdir) && $(ACLOCAL)
-
-config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
-$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
 	cd $(srcdir) && $(AUTOCONF)
 
-config.h: stamp-h
-	@if test ! -f $@; then \
-		rm -f stamp-h; \
-		$(MAKE) stamp-h; \
-	else :; fi
-stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES= CONFIG_HEADERS=config.h \
-	     $(SHELL) ./config.status
-	@echo timestamp > stamp-h 2> /dev/null
-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
 	@if test ! -f $@; then \
-		rm -f $(srcdir)/stamp-h.in; \
-		$(MAKE) $(srcdir)/stamp-h.in; \
+	  rm -f stamp-h1; \
+	  $(MAKE) stamp-h1; \
 	else :; fi
-$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
-	cd $(top_srcdir) && $(AUTOHEADER)
-	@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
 
-mostlyclean-hdr:
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
 
-clean-hdr:
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	touch $(srcdir)/config.h.in
 
 distclean-hdr:
-	-rm -f config.h
+	-rm -f config.h stamp-h1
+gts.pc: $(top_builddir)/config.status gts.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
+pkgconfigDATA_INSTALL = $(INSTALL_DATA)
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
+	@list='$(pkgconfig_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f"; \
+	  $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f; \
+	done
 
-maintainer-clean-hdr:
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f $(DESTDIR)$(pkgconfigdir)/$$f"; \
+	  rm -f $(DESTDIR)$(pkgconfigdir)/$$f; \
+	done
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -157,13 +251,8 @@ maintainer-clean-hdr:
 # (1) if the variable is set in `config.status', edit `config.status'
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
-
- at SET_MAKE@
-
-all-recursive install-data-recursive install-exec-recursive \
-installdirs-recursive install-recursive uninstall-recursive  \
-check-recursive installcheck-recursive info-recursive dvi-recursive:
-	@set fnord $(MAKEFLAGS); amf=$$2; \
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -183,13 +272,18 @@ check-recursive installcheck-recursive info-recursive dvi-recursive:
 
 mostlyclean-recursive clean-recursive distclean-recursive \
 maintainer-clean-recursive:
-	@set fnord $(MAKEFLAGS); amf=$$2; \
+	@set fnord $$MAKEFLAGS; amf=$$2; \
 	dot_seen=no; \
-	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
-	  rev="$$subdir $$rev"; \
-	  test "$$subdir" = "." && dot_seen=yes; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
 	done; \
-	test "$$dot_seen" = "no" && rev=". $$rev"; \
+	rev="$$rev ."; \
 	target=`echo $@ | sed s/-recursive//`; \
 	for subdir in $$rev; do \
 	  echo "Making $$target in $$subdir"; \
@@ -205,174 +299,312 @@ tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
 	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
+	if (etags --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	else \
+	  include_option=--include; \
+	fi; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-   if test "$$subdir" = .; then :; else \
-	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
-   fi; \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
-
-maintainer-clean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
+top_distdir = .
 distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
 
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-	-rm -rf $(distdir)
-	GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
-	mkdir $(distdir)/=build
-	mkdir $(distdir)/=inst
-	dc_install_base=`cd $(distdir)/=inst && pwd`; \
-	cd $(distdir)/=build \
-	  && ../configure --srcdir=.. --prefix=$$dc_install_base \
-	  && $(MAKE) $(AM_MAKEFLAGS) \
-	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
-	  && $(MAKE) $(AM_MAKEFLAGS) check \
-	  && $(MAKE) $(AM_MAKEFLAGS) install \
-	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-	  && $(MAKE) $(AM_MAKEFLAGS) dist
-	-rm -rf $(distdir)
-	@banner="$(distdir).tar.gz is ready for distribution"; \
-	dashes=`echo "$$banner" | sed s/./=/g`; \
-	echo "$$dashes"; \
-	echo "$$banner"; \
-	echo "$$dashes"
-dist: distdir
-	-chmod -R a+r $(distdir)
-	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-	-rm -rf $(distdir)
-dist-all: distdir
-	-chmod -R a+r $(distdir)
-	GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
-	-rm -rf $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+
 distdir: $(DISTFILES)
-	-rm -rf $(distdir)
+	$(am__remove_distdir)
 	mkdir $(distdir)
-	-chmod 777 $(distdir)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	$(mkinstalldirs) $(distdir)/. $(distdir)/src
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-	for subdir in $(SUBDIRS); do \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test -d $(distdir)/$$subdir \
 	    || mkdir $(distdir)/$$subdir \
 	    || exit 1; \
-	    chmod 777 $(distdir)/$$subdir; \
-	    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$(top_distdir)" \
+	        distdir=../$(distdir)/$$subdir \
+	        distdir) \
 	      || exit 1; \
 	  fi; \
 	done
-info-am:
-info: info-recursive
-dvi-am:
-dvi: dvi-recursive
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	$(am__remove_distdir)
+	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
+	  && rm -f $(distdir).tar.gz \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@echo "$(distdir).tar.gz is ready for distribution" | \
+	  sed 'h;s/./=/g;p;x;p;x'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
 check-am: all-am
 check: check-recursive
-installcheck-am:
-installcheck: installcheck-recursive
-all-recursive-am: config.h
-	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+	$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
 
-install-exec-am:
+install: install-recursive
 install-exec: install-exec-recursive
-
-install-data-am:
 install-data: install-data-recursive
+uninstall: uninstall-recursive
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-recursive
-uninstall-am:
-uninstall: uninstall-recursive
-all-am: Makefile config.h
-all-redirect: all-recursive-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs: installdirs-recursive
-installdirs-am:
-
 
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-hdr mostlyclean-tags mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
 
-mostlyclean: mostlyclean-recursive
+clean-am: clean-generic clean-libtool mostlyclean-am
 
-clean-am:  clean-hdr clean-tags clean-generic mostlyclean-am
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags
 
-clean: clean-recursive
+dvi: dvi-recursive
 
-distclean-am:  distclean-hdr distclean-tags distclean-generic clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-recursive
-	-rm -f config.status
+info: info-recursive
 
-maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-tags \
-		maintainer-clean-generic distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
-	-rm -f config.status
-
-.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
-install-data-recursive uninstall-data-recursive install-exec-recursive \
-uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
-all-recursive check-recursive installcheck-recursive info-recursive \
-dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
-install-exec-am install-exec install-data-am install-data install-am \
-install uninstall-am uninstall all-redirect all-am all installdirs-am \
-installdirs mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
+	clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive dist dist-all dist-gzip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-recursive distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am dvi-recursive info info-am \
+	info-recursive install install-am install-data install-data-am \
+	install-data-recursive install-exec install-exec-am \
+	install-exec-recursive install-info install-info-am \
+	install-info-recursive install-man install-pkgconfigDATA \
+	install-recursive install-strip installcheck installcheck-am \
+	installdirs installdirs-am installdirs-recursive \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-recursive pdf pdf-am \
+	pdf-recursive ps ps-am ps-recursive tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am \
+	uninstall-info-recursive uninstall-pkgconfigDATA \
+	uninstall-recursive
+
 
+dist-hook:
+	$(RM) -r `find $(distdir) -name CVS -type d -print`
+	$(RM) `find $(distdir) -name ".cvsignore" -type f -print`
 
+changelog:
+	cvs2cl.pl --usermap .usermap --prune
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/NEWS b/NEWS
index 64956c2..f01fa15 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,103 @@
+18/10/2004:
+
+Release of version 0.7.3
+
+New features/important changes include:
+
+- Autodetection and support for glib >= 2.4 (but glib >= 1.2.8 is
+  still supported): glib >= 2.0 and < 2.4 is not supported (send me
+  patches!).
+- pkgconfig preliminary support
+- Mingwin support.
+- Changes to the interface of gts_graph_read().
+
+Bug Fixes:
+
+- Constrained Delaunay Triangulation guess selection
+- Boolean operations: Now uses SOS for segment/triangle intersections.
+
+15/05/2004:
+
+Release of version 0.7.2
+
+New features includes:
+
+- gts2dxf and gts2stl filters.
+- New GtsColorVertex class.
+- "Dual" isosurface calculation by Tim F.
+- New "happrox" algorithm to approximate terrain models.
+- New GtsMatrix implementation (quaternions) by Wayne Gramlich and
+  Michael Loehr.
+- Attributes inheritance when computing intersections.
+
+Bug fixes:
+
+- Major changes to inner loops triangulation for boolean operations.
+- compilation on SGI Altix
+- Fixed gts.def generation for Windows support.
+- Cygwin support.
+
+08/01/2003:
+
+Release of version 0.7.1
+
+New features includes:
+
+- Sphere tessellation by Jerome Benoit.
+
+As well as a number of bug and compilation fixes.
+
+The interface to the gts_surface_refine() function has been made more
+generic.
+
+08/11/2002:
+
+Release of version 0.7.0
+
+Boolean operations have been almost entirely rewritten and now use a
+Simulation of Simplicity (SoS) technique to deal with degenerate
+cases. This should fix most of the problems encountered when dealing
+with "simple" geometric objects (i.e. cube/cube intersections with
+coplanar faces etc...) Almost all the test cases in the test suite
+(including significant tests submitted by users) now pass. Difficult
+test cases like an object intersecting with a simplified version of
+itself (created using coarsen for example) work fine despite the huge
+number of degenerate cases (coincident and nearly coincident edges,
+faces, vertices).
+
+There is still a caveat however for intersections which creates
+multiple closed loops contained within one another (note that this
+wasn't a problem in the previous version). This needs to be fixed at
+some point.
+
+Another problem is that the surfaces resulting from a boolean
+operation while guaranteed to be topologically consistent may contain
+degenerate edges/faces which will prevent them from being used in a
+subsequent boolean operation. The degenerate entities need first to be
+eliminated (through edge/face collapse).
+
+The gts_point_is_inside_surface() function has been rewritten using SoS.
+
+A new stl2gts tool provides conversion between STL (stereolithography)
+format and GTS format.
+
+Ray Jones has added new functions to compute gaussian curvature,
+principal curvature directions etc...
+
+The gts_file_close() function call has been replaced by a
+gts_file_destroy() function which does not close the file. This is
+better left to the caller. Your application might need a slight
+modification there.
+
+The whole automake/autoconf stuff has been upgraded to use version
+1.6.3 of automake.
+
+Gert Wollny has added a marching tetrahedra isosurface construction
+technique which should avoid topological defects in isosurfaces
+(created by inconsistencies inherent to the marching cube technique).
+
+A number of bugs have been fixed (thanks to bug reporters).
+
 08/10/2001:
 
 Release of version 0.5.0.
diff --git a/README b/README
index 5e7707f..c3817b8 100644
--- a/README
+++ b/README
@@ -28,7 +28,27 @@ http://www.cs.cmu.edu/~quake/robust.html
 Installation
 ============
 
-Unix users:
+GTS uses the glib library which is part of gtk (http://www.gtk.org). If you
+use linux there is a good chance that this library is already on your
+system, otherwise, you'll need to install it.
+
+A WIN32 glib port is available at
+http://www.gimp.org/~tml/gimp/win32/downloads.html, however it is
+recommended to use GTS within the Cygwin environment under windows.
+
+Unix users (including cygwin users):
+
+If you checked out GTS from sourceforge.net, you will need to have the
+gnu autoconf tools installed.  Generate the "configure" script with
+the following commands:
+
+aclocal
+autoheader
+automake -a
+autoconf
+
+After this, or if you are installing from source where the configure
+script is already built:
 
 ./configure
 make
@@ -36,12 +56,15 @@ make install
 
 See the file 'INSTALL' for generic configure instructions.
 
+
 Windows users:
 If you have Microsoft C try:
 
 cd src
 nmake -f makefile.msc install
 
+or use Cygwin (http://www.cygwin.com)
+
 Using GTS
 =========
 
diff --git a/THANKS b/THANKS
index a4f2c11..7fe4337 100644
--- a/THANKS
+++ b/THANKS
@@ -14,4 +14,11 @@ Thomas Binder
 Helmut Cantzler
 Johannes Beigel
 Darie Aron
-Gary R. Van Sickle
+Gary Van Sickle
+Ray Jones
+Olivier Parisy
+Mashhuda Glencross
+John (EBo) David
+Jerome Benoit
+Curtis Olson
+Kai Huettemann
diff --git a/TODO b/TODO
index 56a4bc0..86a35f4 100644
--- a/TODO
+++ b/TODO
@@ -1,10 +1,14 @@
 This is a non-exhaustive list of things to do.
 
+- cleanup dual isosurface stuff by "Tim F"
+
+- paper doc
+
 - cleanup of GHashTable hack in cdt.c.
 
 - Specialized hash tables for surface->triangles?
 
-- Error status when reading GTS file.
+- Error status when reading GTS file. (done)
 
 - Homogeneous coordinates?
 
@@ -19,7 +23,7 @@ This is a non-exhaustive list of things to do.
 - More generic interface for isosurface computation (user-control of
   vertex generation).
 
-- GtsContainer class?
+- GtsContainer class? (half-done)
 
 - Graph partitioning
 	* optimisation BKL -> BKL(1,*) (Karypis & Kumar)
@@ -33,3 +37,5 @@ This is a non-exhaustive list of things to do.
 - Apply Norman Vine cygwin patch
 
 - Apply Patch for gts_triangles_angle
+
+- change gts_file_close() to gts_file_destroy() (patch Ray Jones).
diff --git a/acconfig.h b/acconfig.h
deleted file mode 100644
index 0d22ab9..0000000
--- a/acconfig.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* GTS - Library for the manipulation of triangulated surfaces
- * Copyright (C) 1999 St�phane Popinet
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-/* acconfig.h
-   This file is in the public domain.
-
-   Descriptive text for the C preprocessor macros that
-   the distributed Autoconf macros can define.
-   No software package will use all of them; autoheader copies the ones
-   your configure.in uses into your configuration header file templates.
-
-   The entries are in sort -df order: alphabetical, case insensitive,
-   ignoring punctuation (such as underscores).  Although this order
-   can split up related entries, it makes it easier to check whether
-   a given entry is in the file.
-
-   Leave the following blank line there!!  Autoheader needs it.  */
-

-
-/* Other stuff */
-
-/* #undef HAVE_FPU_CONTROL_H */
-/* #undef HAVE_FLOATINGPOINT_H */
-/* #undef HAVE_GETOPT_H */
-
-#undef GTS_MAJOR_VERSION
-#undef GTS_MINOR_VERSION
-#undef GTS_MICRO_VERSION
-#undef GTS_INTERFACE_AGE
-#undef GTS_BINARY_AGE
-
-#undef WIN32
-#undef NATIVE_WIN32
-
-/* #undef PACKAGE */
-/* #undef VERSION */
-
-
-
-

-/* Leave that blank line there!!  Autoheader needs it.
-   If you're adding to this file, keep in mind:
-   The entries are in sort -df order: alphabetical, case insensitive,
-   ignoring punctuation (such as underscores).  */
diff --git a/aclocal.m4 b/aclocal.m4
index b60b687..9fa6753 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,14 +1,15 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4
+# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
 
-dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-dnl This program is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-dnl PARTICULAR PURPOSE.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
 
 # Configure paths for GLIB
 # Owen Taylor     97-11-3
@@ -208,61 +209,248 @@ main ()
 ])
 
 
-# Do all the work for Automake.  This macro actually does too much --
-# some checks are only needed if your package does certain things.
-# But this isn't really a big deal.
+# Do all the work for Automake.                            -*- Autoconf -*-
 
-# serial 1
+# This macro actually does too much some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 10
+
+AC_PREREQ([2.54])
+
+# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
+# the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
 
-dnl Usage:
-dnl AM_INIT_AUTOMAKE(package,version, [no-define])
-
-AC_DEFUN(AM_INIT_AUTOMAKE,
-[AC_REQUIRE([AC_PROG_INSTALL])
-PACKAGE=[$1]
-AC_SUBST(PACKAGE)
-VERSION=[$2]
-AC_SUBST(VERSION)
-dnl test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
   AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
 fi
-ifelse([$3],,
-AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
-AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
-AC_REQUIRE([AM_SANITY_CHECK])
-AC_REQUIRE([AC_ARG_PROGRAM])
-dnl FIXME This is truly gross.
-missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
-AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
-AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
-AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
-AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright 2002  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+	 [AM_AUTOMAKE_VERSION([1.7.9])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+
+# Copyright 2001, 2002  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
 #
 # Check to make sure that the build environment is sane.
 #
 
-AC_DEFUN(AM_SANITY_CHECK,
+# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
 # Just in case
 sleep 1
-echo timestamp > conftestfile
+echo timestamp > conftest.file
 # Do `set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
-   if test "[$]*" = "X"; then
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
       # -L didn't work.
-      set X `ls -t $srcdir/configure conftestfile`
+      set X `ls -t $srcdir/configure conftest.file`
    fi
-   if test "[$]*" != "X $srcdir/configure conftestfile" \
-      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
 
       # If neither matched, then we have a broken ls.  This can happen
       # if, for instance, CONFIG_SHELL is bash and it inherits a
@@ -272,7 +460,7 @@ if (
 alias in your environment])
    fi
 
-   test "[$]2" = conftestfile
+   test "$[2]" = conftest.file
    )
 then
    # Ok.
@@ -281,492 +469,6774 @@ else
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-rm -f conftest*
 AC_MSG_RESULT(yes)])
 
-dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
-dnl The program must properly implement --version.
-AC_DEFUN(AM_MISSING_PROG,
-[AC_MSG_CHECKING(for working $2)
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if ($2 --version) < /dev/null > /dev/null 2>&1; then
-   $1=$2
-   AC_MSG_RESULT(found)
-else
-   $1="$3/missing $2"
-   AC_MSG_RESULT(missing)
-fi
-AC_SUBST($1)])
+#  -*- Autoconf -*-
 
-# Like AC_CONFIG_HEADER, but automatically create stamp file.
-
-AC_DEFUN(AM_CONFIG_HEADER,
-[AC_PREREQ([2.12])
-AC_CONFIG_HEADER([$1])
-dnl When config.status generates a header, we must update the stamp-h file.
-dnl This file resides in the same directory as the config header
-dnl that is generated.  We must strip everything past the first ":",
-dnl and everything past the last "/".
-AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
-ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
-<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
-<<am_indx=1
-for am_file in <<$1>>; do
-  case " <<$>>CONFIG_HEADERS " in
-  *" <<$>>am_file "*<<)>>
-    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
-    ;;
-  esac
-  am_indx=`expr "<<$>>am_indx" + 1`
-done<<>>dnl>>)
-changequote([,]))])
 
+# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
 
-# serial 40 AC_PROG_LIBTOOL
-AC_DEFUN(AC_PROG_LIBTOOL,
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# Save cache, so that ltconfig can load it
-AC_CACHE_SAVE
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 
-# Actually configure libtool.  ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
-LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
-DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
-|| AC_MSG_ERROR([libtool configure failed])
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
 
-# Reload cache, that may have been modified by ltconfig
-AC_CACHE_LOAD
+# serial 3
 
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
 
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
 
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
 ])
 
-AC_DEFUN(AC_LIBTOOL_SETUP,
-[AC_PREREQ(2.13)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_RANLIB])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-AC_REQUIRE([AC_PROG_LN_S])dnl
-dnl
+# AM_AUX_DIR_EXPAND
 
-case "$target" in
-NONE) lt_target="$host" ;;
-*) lt_target="$target" ;;
-esac
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# Check for any special flags to pass to ltconfig.
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
 #
-# the following will cause an existing older ltconfig to fail, so
-# we ignore this at the expense of the cache file... Checking this 
-# will just take longer ... bummer!
-#libtool_flags="--cache-file=$cache_file"
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
 #
-test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
-test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
-test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
-[libtool_flags="$libtool_flags --enable-dlopen"])
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[libtool_flags="$libtool_flags --enable-win32-dll"])
-AC_ARG_ENABLE(libtool-lock,
-  [  --disable-libtool-lock  avoid locking (might break parallel builds)])
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
-
-# Some flags need to be propagated to the compiler or linker for good
-# libtool support.
-case "$lt_target" in
-*-*-irix6*)
-  # Find out which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-    case "`/usr/bin/file conftest.o`" in
-    *32-bit*)
-      LD="${LD-ld} -32"
-      ;;
-    *N32*)
-      LD="${LD-ld} -n32"
-      ;;
-    *64-bit*)
-      LD="${LD-ld} -64"
-      ;;
-    esac
-  fi
-  rm -rf conftest*
-  ;;
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
 
-*-*-sco3.2v5*)
-  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -belf"
-  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
-    [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
+# Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])
 
-ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw*)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-])
-esac
+AC_DEFUN([AM_AUX_DIR_EXPAND], [
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
 ])
 
-# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
-AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
-
-# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
-AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
-
-# AC_ENABLE_SHARED - implement the --enable-shared flag
-# Usage: AC_ENABLE_SHARED[(DEFAULT)]
-#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
-#   `yes'.
-AC_DEFUN(AC_ENABLE_SHARED, [dnl
-define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(shared,
-changequote(<<, >>)dnl
-<<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
-  enable_shared=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_shared=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac],
-enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
-])
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
 
-# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
-AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)])
-
-# AC_ENABLE_STATIC - implement the --enable-static flag
-# Usage: AC_ENABLE_STATIC[(DEFAULT)]
-#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
-#   `yes'.
-AC_DEFUN(AC_ENABLE_STATIC, [dnl
-define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(static,
-changequote(<<, >>)dnl
-<<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
-  enable_static=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_static=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac],
-enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
-])
+# Copyright 2001 Free Software Foundation, Inc.
 
-# AC_DISABLE_STATIC - set the default static flag to --disable-static
-AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)])
-
-
-# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
-# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
-#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
-#   `yes'.
-AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
-define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE(fast-install,
-changequote(<<, >>)dnl
-<<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
-changequote([, ])dnl
-[p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_fast_install=yes ;;
-no) enable_fast_install=no ;;
-*)
-  enable_fast_install=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_fast_install=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac],
-enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
-])
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
-AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)])
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 
-# AC_PROG_LD - find the path to the GNU or non-GNU linker
-AC_DEFUN(AC_PROG_LD,
-[AC_ARG_WITH(gnu-ld,
-[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  AC_MSG_CHECKING([for ld used by GCC])
-  ac_prog=`($CC -print-prog-name=ld) 2>&5`
-  case "$ac_prog" in
-    # Accept absolute paths.
-changequote(,)dnl
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-changequote([,])dnl
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
-  *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  AC_MSG_CHECKING([for GNU ld])
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+#                                                          -*- Autoconf -*-
+# Copyright (C) 2003  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
 else
-  AC_MSG_CHECKING([for non-GNU ld])
+  am__leading_dot=_
 fi
-AC_CACHE_VAL(ac_cv_path_LD,
-[if test -z "$LD"; then
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      ac_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-	test "$with_gnu_ld" != no && break
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# serial 5						-*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      : > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
       else
-	test "$with_gnu_ld" != yes && break
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
       fi
     fi
   done
-  IFS="$ac_save_ifs"
-else
-  ac_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$ac_cv_path_LD"
-if test -n "$LD"; then
-  AC_MSG_RESULT($LD)
+
+  cd ..
+  rm -rf conftest.dir
 else
-  AC_MSG_RESULT(no)
+  am_cv_$1_dependencies_compiler_type=none
 fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_PROG_LD_GNU
 ])
-
-AC_DEFUN(AC_PROG_LD_GNU,
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  ac_cv_prog_gnu_ld=yes
-else
-  ac_cv_prog_gnu_ld=no
-fi])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
 ])
 
-# AC_PROG_NM - find the path to a BSD-compatible name lister
-AC_DEFUN(AC_PROG_NM,
-[AC_MSG_CHECKING([for BSD-compatible nm])
-AC_CACHE_VAL(ac_cv_path_NM,
-[if test -n "$NM"; then
-  # Let the user override the test.
-  ac_cv_path_NM="$NM"
-else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
-      # Check to see if the nm accepts a BSD-compat flag.
-      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-      #   nm: unknown option "B" ignored
-      if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	ac_cv_path_NM="$ac_dir/nm -B"
-	break
-      elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	ac_cv_path_NM="$ac_dir/nm -p"
-	break
-      else
-	ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
-	continue # so that we can try to find one that supports BSD flags
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
-fi])
-NM="$ac_cv_path_NM"
-AC_MSG_RESULT([$NM])
-])
 
-# AC_CHECK_LIBM - check for math library
-AC_DEFUN(AC_CHECK_LIBM,
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case "$lt_target" in
-*-*-beos* | *-*-cygwin*)
-  # These system don't have libm
-  ;;
-*-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
-  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
-  ;;
-*)
-  AC_CHECK_LIB(m, main, LIBM="-lm")
-  ;;
-esac
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 ])
 
-# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl convenience library, adds --enable-ltdl-convenience to
-# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
-# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
-# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
-# '${top_builddir}/' (note the single quotes!) if your package is not
-# flat, and, if you're not using automake, define top_builddir as
-# appropriate in the Makefiles.
-AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  case "$enable_ltdl_convenience" in
-  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-  "") enable_ltdl_convenience=yes
-      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-  esac
-  LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
-  INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
-])
 
-# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl installable library, and adds --enable-ltdl-install to
-# the configure arguments.  Note that LIBLTDL is not AC_SUBSTed, nor
-# is AC_CONFIG_SUBDIRS called.  If DIR is not provided, it is assumed
-# to be `${top_builddir}/libltdl'.  Make sure you start DIR with
-# '${top_builddir}/' (note the single quotes!) if your package is not
-# flat, and, if you're not using automake, define top_builddir as
-# appropriate in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  AC_CHECK_LIB(ltdl, main,
-  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-  [if test x"$enable_ltdl_install" = xno; then
-     AC_MSG_WARN([libltdl not installed, but installation disabled])
-   else
-     enable_ltdl_install=yes
-   fi
-  ])
-  if test x"$enable_ltdl_install" = x"yes"; then
-    ac_configure_args="$ac_configure_args --enable-ltdl-install"
-    LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
-    INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
-  else
-    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-    LIBLTDL="-lltdl"
-    INCLTDL=
-  fi
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
 ])
 
-dnl old names
-AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
-AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
-AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
-AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
-AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
-AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
-AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
 
-dnl This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])dnl
+# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
 
-# Add --enable-maintainer-mode option to configure.
-# From Jim Meyering
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
 
-# serial 1
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
 
-AC_DEFUN(AM_MAINTAINER_MODE,
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-  dnl maintainer-mode is disabled by default
-  AC_ARG_ENABLE(maintainer-mode,
-[  --enable-maintainer-mode enable make rules and dependencies not useful
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Check to see how 'make' treats includes.	-*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# AM_CONDITIONAL                                              -*- Autoconf -*-
+
+# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 5
+
+AC_PREREQ(2.52)
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+        [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_PREREQ([2.52])
+
+# serial 6
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 47 AC_PROG_LIBTOOL
+# Debian $Rev: 203 $
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+         [],
+         [m4_define([AC_PROVIDE_IFELSE],
+	         [m4_ifdef([AC_PROVIDE_$1],
+		           [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+  AC_PROVIDE_IFELSE([AC_PROG_CXX],
+    [AC_LIBTOOL_CXX],
+    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+  ])])
+dnl And a similar setup for Fortran 77 support
+  AC_PROVIDE_IFELSE([AC_PROG_F77],
+    [AC_LIBTOOL_F77],
+    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+    [AC_LIBTOOL_GCJ],
+    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+      [AC_LIBTOOL_GCJ],
+      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+	[AC_LIBTOOL_GCJ],
+      [ifdef([AC_PROG_GCJ],
+	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([A][M_PROG_GCJ],
+	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([LT_AC_PROG_GCJ],
+	     [define([LT_AC_PROG_GCJ],
+		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+    [AC_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+[$]*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+  ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$5], , :, [$5])
+else
+    ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                          [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+     else
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$4], , :, [$4])
+else
+    ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+   test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_AC_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         AC_MSG_RESULT([yes])
+       else
+  AC_MSG_RESULT([no])
+fi
+       ;;
+   *)
+  AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+        [include additional configurations @<:@automatic@:>@])],
+    [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    AC_MSG_WARN([output file `$ofile' does not exist])
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+    else
+      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+    "") ;;
+    *)  AC_MSG_ERROR([invalid tag name: $tagname])
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      AC_MSG_ERROR([tag name \"$tagname\" already exists])
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  AC_LIBTOOL_LANG_CXX_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+	  AC_LIBTOOL_LANG_F77_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+	  AC_LIBTOOL_LANG_GCJ_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+	AC_LIBTOOL_LANG_RC_CONFIG
+	;;
+
+      *)
+	AC_MSG_ERROR([Unsupported tag name: $tagname])
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    AC_MSG_ERROR([unable to update list of available tagged configurations.])
+  fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+    [AC_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | knetbsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments.  Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'.  LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!).  If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, lt_dlinit,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    LTDLINCL=
+  fi
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+    ;;
+  esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+  AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | grep "[[ 	]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ 	]]" >/dev/null; then :
+  else
+    AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+    _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+  $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+  [],
+  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    output_verbose_link_cmd='echo'
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+  else
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+  fi
+    ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+  AC_PROG_LD
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    _LT_AC_TAGVAR(archive_cmds, $1)=''
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	else
+	  # We have old collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      _LT_AC_SYS_LIBPATH_AIX
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	_LT_AC_SYS_LIBPATH_AIX
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	_LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	# Exported symbols can be pulled into shared objects from archives
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+    # as there is no search path for DLLs.
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+    _LT_AC_TAGVAR(always_export_symbols, $1)=no
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    lt_int_apple_cc_single_mod=no
+    output_verbose_link_cmd='echo'
+    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+      lt_int_apple_cc_single_mod=yes
+    fi
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    else
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    fi
+    _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+  else
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+  fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  freebsd[12]*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  freebsd-elf*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  freebsd* | kfreebsd*-gnu)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    aCC)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+        ;;
+      ia64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        ;;
+      *)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+    ia64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+	;;
+    esac
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  netbsd* | knetbsd*-gnu)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	 _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  sco*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	case $host_os in
+	  solaris2.[0-5] | solaris2.[0-5].*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars.  Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    _LT_AC_TAGVAR(compiler, $1) \
+    _LT_AC_TAGVAR(CC, $1) \
+    _LT_AC_TAGVAR(LD, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+    _LT_AC_TAGVAR(old_archive_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+    _LT_AC_TAGVAR(predep_objects, $1) \
+    _LT_AC_TAGVAR(postdep_objects, $1) \
+    _LT_AC_TAGVAR(predeps, $1) \
+    _LT_AC_TAGVAR(postdeps, $1) \
+    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+    _LT_AC_TAGVAR(archive_cmds, $1) \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(postinstall_cmds, $1) \
+    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+    _LT_AC_TAGVAR(no_undefined_flag, $1) \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+    _LT_AC_TAGVAR(hardcode_automatic, $1) \
+    _LT_AC_TAGVAR(module_cmds, $1) \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+    _LT_AC_TAGVAR(exclude_expsyms, $1) \
+    _LT_AC_TAGVAR(include_expsyms, $1); do
+
+    case $var in
+    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(module_cmds, $1) | \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\[$]0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+    ;;
+  esac
+
+ifelse([$1], [],
+  [cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  AC_MSG_NOTICE([creating $ofile])],
+  [cfgfile="$ofile"])
+
+  cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+])
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDRT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd* | knetbsd*-gnu)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      ccc*)
+        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux*)
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+  ;;
+  *)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+],[
+  runpath_var=
+  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_AC_TAGVAR(archive_cmds, $1)=
+  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+  _LT_AC_TAGVAR(module_cmds, $1)=
+  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(always_export_symbols, $1)=no
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_AC_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=no
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds"
+      fi
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=no
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+      runpath_var=LD_RUN_PATH
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_AC_TAGVAR(archive_cmds, $1)=''
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  else
+  	  # We have old collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       _LT_AC_SYS_LIBPATH_AIX
+       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 _LT_AC_SYS_LIBPATH_AIX
+	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      # see comment about different semantics on the GNU ld section
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    bsdi4*)
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      case "$host_os" in
+      rhapsody* | darwin1.[[012]])
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[[012]])
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+      ;;
+
+    dgux*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    openbsd*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	   ;;
+	 *)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    sco3.2v5*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+      esac
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[[78]]* | unixware7*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv5*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_AC_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+  AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+])
+AC_MSG_RESULT([$SED])
+])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# Copyright 1996, 1998, 2000, 2001, 2002  Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode enable make rules and dependencies not useful
                           (and sometimes confusing) to the casual installer],
       USE_MAINTAINER_MODE=$enableval,
       USE_MAINTAINER_MODE=no)
-  AC_MSG_RESULT($USE_MAINTAINER_MODE)
-  AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
   MAINT=$MAINTAINER_MODE_TRUE
   AC_SUBST(MAINT)dnl
 ]
 )
 
-# Define a conditional.
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
-AC_DEFUN(AM_CONDITIONAL,
-[AC_SUBST($1_TRUE)
-AC_SUBST($1_FALSE)
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi])
+# isc-posix.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.
+
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+  [
+    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+  ]
+)
+
+# Configure paths for GLIB
+# Owen Taylor     1997-2001
+
+dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
+dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or 
+dnl gthread is specified in MODULES, pass to pkg-config
+dnl
+AC_DEFUN([AM_PATH_GLIB_2_0],
+[dnl 
+dnl Get the cflags and libraries from pkg-config
+dnl
+AC_ARG_ENABLE(glibtest, [  --disable-glibtest      do not try to compile and run a test GLIB program],
+		    , enable_glibtest=yes)
+
+  pkg_config_args=glib-2.0
+  for module in . $4
+  do
+      case "$module" in
+         gmodule) 
+             pkg_config_args="$pkg_config_args gmodule-2.0"
+         ;;
+         gobject) 
+             pkg_config_args="$pkg_config_args gobject-2.0"
+         ;;
+         gthread) 
+             pkg_config_args="$pkg_config_args gthread-2.0"
+         ;;
+      esac
+  done
+
+  AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+  no_glib=""
+
+  if test x$PKG_CONFIG != xno ; then
+    if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
+      :
+    else
+      echo *** pkg-config too old; version 0.7 or better required.
+      no_glib=yes
+      PKG_CONFIG=no
+    fi
+  else
+    no_glib=yes
+  fi
+
+  min_glib_version=ifelse([$1], ,2.0.0,$1)
+  AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
+
+  if test x$PKG_CONFIG != xno ; then
+    ## don't try to run the test against uninstalled libtool libs
+    if $PKG_CONFIG --uninstalled $pkg_config_args; then
+	  echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
+	  enable_glibtest=no
+    fi
+
+    if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
+	  :
+    else
+	  no_glib=yes
+    fi
+  fi
+
+  if test x"$no_glib" = x ; then
+    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+    GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
+    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+
+    GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
+    GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
+    glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test "x$enable_glibtest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $GLIB_CFLAGS"
+      LIBS="$GLIB_LIBS $LIBS"
+dnl
+dnl Now check if the installed GLIB is sufficiently new. (Also sanity
+dnl checks the results of pkg-config to some extent)
+dnl
+      rm -f conf.glibtest
+      AC_TRY_RUN([
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int 
+main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.glibtest");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = g_strdup("$min_glib_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_glib_version");
+     exit(1);
+   }
+
+  if ((glib_major_version != $glib_config_major_version) ||
+      (glib_minor_version != $glib_config_minor_version) ||
+      (glib_micro_version != $glib_config_micro_version))
+    {
+      printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
+             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
+             glib_major_version, glib_minor_version, glib_micro_version);
+      printf ("*** was found! If pkg-config was correct, then it is best\n");
+      printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
+      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+      printf("*** required on your system.\n");
+      printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
+      printf("*** to point to the correct configuration files\n");
+    } 
+  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
+	   (glib_minor_version != GLIB_MINOR_VERSION) ||
+           (glib_micro_version != GLIB_MICRO_VERSION))
+    {
+      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
+	     GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+      printf("*** library (version %d.%d.%d)\n",
+	     glib_major_version, glib_minor_version, glib_micro_version);
+    }
+  else
+    {
+      if ((glib_major_version > major) ||
+        ((glib_major_version == major) && (glib_minor_version > minor)) ||
+        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
+      {
+        return 0;
+       }
+     else
+      {
+        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
+               glib_major_version, glib_minor_version, glib_micro_version);
+        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
+	       major, minor, micro);
+        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
+        printf("***\n");
+        printf("*** If you have already installed a sufficiently new version, this error\n");
+        printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
+        printf("*** being found. The easiest way to fix this is to remove the old version\n");
+        printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
+        printf("*** correct copy of pkg-config. (In this case, you will have to\n");
+        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+        printf("*** so that the correct libraries are found at run-time))\n");
+      }
+    }
+  return 1;
+}
+],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_glib" = x ; then
+     AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
+     ifelse([$2], , :, [$2])     
+  else
+     AC_MSG_RESULT(no)
+     if test "$PKG_CONFIG" = "no" ; then
+       echo "*** A new enough version of pkg-config was not found."
+       echo "*** See http://www.freedesktop.org/software/pkgconfig/"
+     else
+       if test -f conf.glibtest ; then
+        :
+       else
+          echo "*** Could not run GLIB test program, checking why..."
+          ac_save_CFLAGS="$CFLAGS"
+          ac_save_LIBS="$LIBS"
+          CFLAGS="$CFLAGS $GLIB_CFLAGS"
+          LIBS="$LIBS $GLIB_LIBS"
+          AC_TRY_LINK([
+#include <glib.h>
+#include <stdio.h>
+],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
+        [ echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
+          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+	  echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
+        [ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     GLIB_CFLAGS=""
+     GLIB_LIBS=""
+     GLIB_GENMARSHAL=""
+     GOBJECT_QUERY=""
+     GLIB_MKENUMS=""
+     ifelse([$3], , :, [$3])
+  fi
+  AC_SUBST(GLIB_CFLAGS)
+  AC_SUBST(GLIB_LIBS)
+  AC_SUBST(GLIB_GENMARSHAL)
+  AC_SUBST(GOBJECT_QUERY)
+  AC_SUBST(GLIB_MKENUMS)
+  rm -f conf.glibtest
+])
 
diff --git a/config.guess b/config.guess
index e1b5871..51fab47 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,10 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
-#   Free Software Foundation, Inc.
-#
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
@@ -22,100 +24,291 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
-# Written by Per Bothner <bothner at cygnus.com>.
-# The master version of this file is at the FSF in /home/gd/gnu/lib.
-# Please send patches to <autoconf-patches at gnu.org>.
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
 #
 # This script attempts to guess a canonical system name similar to
 # config.sub.  If it succeeds, it prints the system name on stdout, and
 # exits with 0.  Otherwise, it exits with 1.
 #
 # The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
+# don't specify an explicit build system type.
 
-# Use $HOST_CC if defined. $CC may point to a cross-compiler
-if test x"$CC_FOR_BUILD" = x; then
-  if test x"$HOST_CC" != x; then
-    CC_FOR_BUILD="$HOST_CC"
-  else
-    if test x"$CC" != x; then
-      CC_FOR_BUILD="$CC"
-    else
-      CC_FOR_BUILD=cc
-    fi
-  fi
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
 fi
 
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi at noc.rutgers.edu 8/24/94.)
+# (ghazi at noc.rutgers.edu 1994-08-24)
 if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
 	PATH=$PATH:/.attbin ; export PATH
 fi
 
 UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
 UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
-
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pegasos:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
     alpha:OSF1:*:*)
-	if test $UNAME_RELEASE = "V4.0"; then
+	case $UNAME_RELEASE in
+	*4.0)
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-	fi
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	cat <<EOF >$dummy.s
-	.globl main
-	.ent main
-main:
-	.frame \$30,0,\$26,0
-	.prologue 0
-	.long 0x47e03d80 # implver $0
-	lda \$2,259
-	.long 0x47e20c21 # amask $2,$1
-	srl \$1,8,\$2
-	sll \$2,2,\$2
-	sll \$0,3,\$0
-	addl \$1,\$0,\$0
-	addl \$2,\$0,\$0
-	ret \$31,(\$26),1
-	.end main
-EOF
-	$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-	if test "$?" = 0 ; then
-		./$dummy
-		case "$?" in
-			7)
-				UNAME_MACHINE="alpha"
-				;;
-			15)
-				UNAME_MACHINE="alphaev5"
-				;;
-			14)
-				UNAME_MACHINE="alphaev56"
-				;;
-			10)
-				UNAME_MACHINE="alphapca56"
-				;;
-			16)
-				UNAME_MACHINE="alphaev6"
-				;;
-		esac
-	fi
-	rm -f $dummy.s $dummy
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
 	exit 0 ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
@@ -127,45 +320,24 @@ EOF
 	echo alpha-dec-winnt3.5
 	exit 0 ;;
     Amiga*:UNIX_System_V:4.0:*)
-	echo m68k-cbm-sysv4
+	echo m68k-unknown-sysv4
 	exit 0;;
-    amiga:NetBSD:*:*)
-      echo m68k-cbm-netbsd${UNAME_RELEASE}
-      exit 0 ;;
-    amiga:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
 	exit 0 ;;
-    arc64:OpenBSD:*:*)
-	echo mips64el-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    arc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hkmips:OpenBSD:*:*)
-	echo mips-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    pmax:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sgi:OpenBSD:*:*)
-	echo mips-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    wgrisc:OpenBSD:*:*)
-	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
 	exit 0 ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
 	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit 0;;
-    arm32:NetBSD:*:*)
-	echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-	exit 0 ;;
-    SR2?01:HI-UX/MPP:*:*)
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
 	exit 0;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
@@ -179,6 +351,13 @@ EOF
     NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
 	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit 0 ;;
@@ -207,7 +386,7 @@ EOF
 	echo m68k-sun-sunos${UNAME_RELEASE}
 	exit 0 ;;
     sun*:*:4.2BSD:*)
-	UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
@@ -221,15 +400,9 @@ EOF
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
 	exit 0 ;;
-    atari*:NetBSD:*:*)
-	echo m68k-atari-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    atari*:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor 
+    # "atarist" or "atariste" at least should have a processor
     # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
     # to the lowercase version "mint" (or "freemint").  Finally
     # the system name "TOS" denotes a system which is actually not
@@ -253,30 +426,12 @@ EOF
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
         exit 0 ;;
-    sun3*:NetBSD:*:*)
-	echo m68k-sun-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    sun3*:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:NetBSD:*:*)
-	echo m68k-apple-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mac68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme68k:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
-    mvme88k:OpenBSD:*:*)
-	echo m88k-unknown-openbsd${UNAME_RELEASE}
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
 	exit 0 ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
 	exit 0 ;;
-    macppc:NetBSD:*:*)
-        echo powerpc-apple-netbsd${UNAME_RELEASE}
-        exit 0 ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
 	exit 0 ;;
@@ -290,8 +445,10 @@ EOF
 	echo clipper-intergraph-clix${UNAME_RELEASE}
 	exit 0 ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 #ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
 	int main (int argc, char *argv[]) {
 #else
 	int main (argc, argv) int argc; char *argv[]; {
@@ -310,12 +467,20 @@ EOF
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD $dummy.c -o $dummy \
-	  && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && rm $dummy.c $dummy && exit 0
-	rm -f $dummy.c $dummy
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
 	echo mips-mips-riscos${UNAME_RELEASE}
 	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
 	exit 0 ;;
@@ -331,7 +496,7 @@ EOF
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
         UNAME_PROCESSOR=`/usr/bin/uname -p`
-	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110]
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
 	then
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
 	       [ ${TARGET_BINARY_INTERFACE}x = x ]
@@ -363,11 +528,20 @@ EOF
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
 	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
 	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
-    i?86:AIX:*:*)
+    i*86:AIX:*:*)
 	echo i386-ibm-aix
 	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
 		sed 's/^		//' << EOF >$dummy.c
 		#include <sys/systemcfg.h>
 
@@ -379,8 +553,7 @@ EOF
 			exit(0);
 			}
 EOF
-		$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
-		rm -f $dummy.c $dummy
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
 		echo rs6000-ibm-aix3.2.5
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 		echo rs6000-ibm-aix3.2.4
@@ -388,9 +561,9 @@ EOF
 		echo rs6000-ibm-aix3.2
 	fi
 	exit 0 ;;
-    *:AIX:*:4)
-	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
-	if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
 		IBM_ARCH=rs6000
 	else
 		IBM_ARCH=powerpc
@@ -398,7 +571,7 @@ EOF
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
 	else
-		IBM_REV=4.${UNAME_RELEASE}
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
 	exit 0 ;;
@@ -408,7 +581,7 @@ EOF
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
 	exit 0 ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
 	exit 0 ;;                           # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
@@ -424,11 +597,30 @@ EOF
 	echo m68k-hp-bsd4.4
 	exit 0 ;;
     9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	case "${UNAME_MACHINE}" in
 	    9000/31? )            HP_ARCH=m68000 ;;
 	    9000/[34]?? )         HP_ARCH=m68k ;;
 	    9000/[678][0-9][0-9])
-              sed 's/^              //' << EOF >$dummy.c
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
               #include <stdlib.h>
               #include <unistd.h>
 
@@ -459,13 +651,29 @@ EOF
                   exit (0);
               }
 EOF
-	(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
-	rm -f $dummy.c $dummy
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
 	esac
-	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
 	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
     3050*:HI-UX:*:*)
+	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
 	#include <unistd.h>
 	int
@@ -491,8 +699,7 @@ EOF
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
-	rm -f $dummy.c $dummy
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
 	echo unknown-hitachi-hiuxwe2
 	exit 0 ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
@@ -501,7 +708,7 @@ EOF
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
 	exit 0 ;;
-    *9??*:MPE/iX:*:*)
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
 	exit 0 ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
@@ -510,7 +717,7 @@ EOF
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
 	exit 0 ;;
-    i?86:OSF1:*:*)
+    i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
 	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
@@ -520,9 +727,6 @@ EOF
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
 	exit 0 ;;
-    hppa*:OpenBSD:*:*)
-	echo hppa-unknown-openbsd
-	exit 0 ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
         exit 0 ;;
@@ -541,41 +745,39 @@ EOF
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
         exit 0 ;;
-    CRAY*X-MP:*:*:*)
-	echo xmp-cray-unicos
-        exit 0 ;;
     CRAY*Y-MP:*:*:*)
-	echo ymp-cray-unicos${UNAME_RELEASE}
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     CRAY*TS:*:*:*)
-	echo t90-cray-unicos${UNAME_RELEASE}
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
     CRAY*T3E:*:*:*)
-	echo alpha-cray-unicosmk${UNAME_RELEASE}
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit 0 ;;
-    CRAY-2:*:*:*)
-	echo cray2-cray-unicos
-        exit 0 ;;
-    F300:UNIX_System_V:*:*)
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
         FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
         FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
         exit 0 ;;
-    F301:UNIX_System_V:*:*)
-       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
-       exit 0 ;;
-    hp3[0-9][05]:NetBSD:*:*)
-	echo m68k-hp-netbsd${UNAME_RELEASE}
-	exit 0 ;;
-    hp300:OpenBSD:*:*)
-	echo m68k-unknown-openbsd${UNAME_RELEASE}
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit 0 ;;
-    i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
 	exit 0 ;;
     sparc*:BSD/OS:*:*)
@@ -585,19 +787,21 @@ EOF
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
 	exit 0 ;;
     *:FreeBSD:*:*)
-	if test -x /usr/bin/objformat; then
-	    if test "elf" = "`/usr/bin/objformat`"; then
-		echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
-		exit 0
-	    fi
-	fi
-	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
-    *:NetBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
-	exit 0 ;;
-    *:OpenBSD:*:*)
-	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
 	exit 0 ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
@@ -605,11 +809,20 @@ EOF
     i*:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
 	# UNAME_MACHINE based on the output of uname instead of i386?
-	echo i386-pc-interix
+	echo i586-pc-interix
 	exit 0 ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
@@ -621,203 +834,178 @@ EOF
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit 0 ;;
     *:GNU:*:*)
+	# the GNU system
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit 0 ;;
-    *:Linux:*:*)
-
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
 	# first see if it will tell us. cd to the root directory to prevent
 	# problems with other programs or directories called `ld' in the path.
-	ld_help_string=`cd /; ld --help 2>&1`
-	ld_supported_emulations=`echo $ld_help_string \
-			 | sed -ne '/supported emulations:/!d
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
 				    s/[ 	][ 	]*/ /g
-				    s/.*supported emulations: *//
+				    s/.*supported targets: *//
 				    s/ .*//
 				    p'`
-        case "$ld_supported_emulations" in
-	  *ia64)
-		echo "${UNAME_MACHINE}-unknown-linux"
-		exit 0
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
 		;;
-	  i?86linux)
+	  a.out-i386-linux)
 		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit 0
-		;;
-	  i?86coff)
+		exit 0 ;;
+	  coff-i386)
 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit 0
-		;;
-	  sparclinux)
-		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
-		exit 0
-		;;
-	  armlinux)
-		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
-		exit 0
-		;;
-	  elf32arm*)
-		echo "${UNAME_MACHINE}-unknown-linux-gnu"
-		exit 0
-		;;
-	  armelf_linux*)
-		echo "${UNAME_MACHINE}-unknown-linux-gnu"
-		exit 0
-		;;
-	  m68klinux)
-		echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
-		exit 0
-		;;
-	  elf32ppc)
-		# Determine Lib Version
-		cat >$dummy.c <<EOF
-#include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
-main(argc, argv)
-     int argc;
-     char *argv[];
-{
-#if defined(__GLIBC__)
-  printf("%s %s\n", __libc_version, __libc_release);
-#else
-  printf("unkown\n");
-#endif
-  return 0;
-}
-EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy | grep 1\.99 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi	
-		rm -f $dummy.c $dummy
-		echo powerpc-unknown-linux-gnu${LIBC}
-		exit 0
-		;;
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
 	esac
-
-	if test "${UNAME_MACHINE}" = "alpha" ; then
-		sed 's/^	//'  <<EOF >$dummy.s
-		.globl main
-		.ent main
-	main:
-		.frame \$30,0,\$26,0
-		.prologue 0
-		.long 0x47e03d80 # implver $0
-		lda \$2,259
-		.long 0x47e20c21 # amask $2,$1
-		srl \$1,8,\$2
-		sll \$2,2,\$2
-		sll \$0,3,\$0
-		addl \$1,\$0,\$0
-		addl \$2,\$0,\$0
-		ret \$31,(\$26),1
-		.end main
-EOF
-		LIBC=""
-		$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
-		if test "$?" = 0 ; then
-			./$dummy
-			case "$?" in
-			7)
-				UNAME_MACHINE="alpha"
-				;;
-			15)
-				UNAME_MACHINE="alphaev5"
-				;;
-			14)
-				UNAME_MACHINE="alphaev56"
-				;;
-			10)
-				UNAME_MACHINE="alphapca56"
-				;;
-			16)
-				UNAME_MACHINE="alphaev6"
-				;;
-			esac
-
-			objdump --private-headers $dummy | \
-			  grep ld.so.1 > /dev/null
-			if test "$?" = 0 ; then
-				LIBC="libc1"
-			fi
-		fi
-		rm -f $dummy.s $dummy
-		echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
-	elif test "${UNAME_MACHINE}" = "mips" ; then
-	  cat >$dummy.c <<EOF
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
-  printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
-  printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
-  return 0;
-}
-EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	else
-	  # Either a pre-BFD a.out linker (linux-gnuoldld)
-	  # or one that does not give us useful --help.
-	  # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
-	  # If ld does not provide *any* "supported emulations:"
-	  # that means it is gnuoldld.
-	  echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
-	  test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
-
-	  case "${UNAME_MACHINE}" in
-	  i?86)
-	    VENDOR=pc;
-	    ;;
-	  *)
-	    VENDOR=unknown;
-	    ;;
-	  esac
-	  # Determine whether the default compiler is a.out or elf
-	  cat >$dummy.c <<EOF
-#include <features.h>
-#ifdef __cplusplus
-	int main (int argc, char *argv[]) {
-#else
-	int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __ELF__
-# ifdef __GLIBC__
-#  if __GLIBC__ >= 2
-    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
-#  else
-    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-#  endif
-# else
-   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
-# endif
-#else
-  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
-#endif
-  return 0;
-}
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
 EOF
-	  $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
-	  rm -f $dummy.c $dummy
-	fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
-# are messed up and put the nodename in both sysname and nodename.
-    i?86:DYNIX/ptx:4*:*)
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
 	echo i386-sequent-sysv4
 	exit 0 ;;
-    i?86:UNIX_SV:4.2MP:2.*)
+    i*86:UNIX_SV:4.2MP:2.*)
         # Unixware is an offshoot of SVR4, but it has its own version
         # number series starting with 2...
         # I am not positive that other SVR4 systems won't match this,
@@ -825,7 +1013,27 @@ EOF
         # Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
 	exit 0 ;;
-    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
 		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
@@ -833,27 +1041,26 @@ EOF
 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
 	exit 0 ;;
-    i?86:*:5:7*)
-        # Fixed at (any) Pentium or better
-        UNAME_MACHINE=i586
-        if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
-	    echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
-	else
-	    echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
-	fi
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
 	exit 0 ;;
-    i?86:*:3.2:*)
+    i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
 		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
 	elif /bin/uname -X 2>/dev/null >/dev/null ; then
-		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
-		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
-		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
 			&& UNAME_MACHINE=i586
-		(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
 			&& UNAME_MACHINE=i686
-		(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
 			&& UNAME_MACHINE=i686
 		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
 	else
@@ -861,6 +1068,7 @@ EOF
 	fi
 	exit 0 ;;
     pc:*:*:*)
+	# Left here for compatibility:
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
         # the processor, so we play safe by assuming i386.
 	echo i386-pc-msdosdjgpp
@@ -882,9 +1090,15 @@ EOF
 	# "miniframe"
 	echo m68010-convergent-sysv
 	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
     M68*:*:R3V[567]*:*)
 	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
-    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -895,21 +1109,21 @@ EOF
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
           && echo i486-ncr-sysv4 && exit 0 ;;
-    m68*:LynxOS:2.*:*)
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
 	exit 0 ;;
-    i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
-	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
-    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+    rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
 	exit 0 ;;
@@ -927,8 +1141,8 @@ EOF
 		echo ns32k-sni-sysv
 	fi
 	exit 0 ;;
-    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                           # says <Richard.M.Bartel at ccMail.Census.GOV>
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
         echo i586-unisys-sysv4
         exit 0 ;;
     *:UNIX_System_V:4*:FTX*)
@@ -940,10 +1154,14 @@ EOF
 	# From seanf at swdc.stratus.com.
 	echo i860-stratus-sysv4
 	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
 	exit 0 ;;
-    news*:NEWS-OS:*:6*)
+    news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
 	exit 0 ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
@@ -968,20 +1186,86 @@ EOF
     SX-5:SUPER-UX:*:*)
 	echo sx5-nec-superux${UNAME_RELEASE}
 	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit 0 ;;
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
 	exit 0 ;;
+    *:Darwin:*:*)
+	case `uname -p` in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
     *:QNX:*:4*)
-	echo i386-qnx-qnx${UNAME_VERSION}
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit 0 ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
 
+eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
 # include <sys/types.h>
@@ -1068,11 +1352,24 @@ main ()
 #endif
 
 #if defined (vax)
-#if !defined (ultrix)
-  printf ("vax-dec-bsd\n"); exit (0);
-#else
-  printf ("vax-dec-ultrix\n"); exit (0);
-#endif
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
 #endif
 
 #if defined (alliant) && defined (i860)
@@ -1083,8 +1380,7 @@ main ()
 }
 EOF
 
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
-rm -f $dummy.c $dummy
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
 
 # Apollos put the system type in the environment.
 
@@ -1116,6 +1412,48 @@ then
     esac
 fi
 
-#echo '(Unable to guess system type)' 1>&2
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
 
 exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
index 091675f..a837a9e 100644
--- a/config.h.in
+++ b/config.h.in
@@ -1,35 +1,79 @@
-/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+/* config.h.in.  Generated from configure.in by autoheader.  */
 
-/* Define if you have <unistd.h>.  */
-#undef HAVE_UNISTD_H
-
-/* Define if you need to in order for stat and other things to work.  */
-#undef _POSIX_SOURCE
+/* Define if C preprocessor supports warning directive. */
+#undef CPP_HAS_WARNING
 
-/* Define if you have the ANSI C header files.  */
-#undef STDC_HEADERS
+/* Binary age */
+#undef GTS_BINARY_AGE
 
-/* #undef HAVE_FPU_CONTROL_H */
-/* #undef HAVE_FLOATINGPOINT_H */
-/* #undef HAVE_GETOPT_H */
+/* Interface age */
+#undef GTS_INTERFACE_AGE
 
+/* Major version */
 #undef GTS_MAJOR_VERSION
-#undef GTS_MINOR_VERSION
+
+/* Micro version */
 #undef GTS_MICRO_VERSION
-#undef GTS_INTERFACE_AGE
-#undef GTS_BINARY_AGE
 
-/* Define if you have the getopt_long function.  */
-#undef HAVE_GETOPT_LONG
+/* Minor version */
+#undef GTS_MINOR_VERSION
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
 
-/* Define if you have the <floatingpoint.h> header file.  */
+/* Define to 1 if you have the <floatingpoint.h> header file. */
 #undef HAVE_FLOATINGPOINT_H
 
-/* Define if you have the <fpu_control.h> header file.  */
+/* Define to 1 if you have the <fpu_control.h> header file. */
 #undef HAVE_FPU_CONTROL_H
 
-/* Define if you have the <getopt.h> header file.  */
+/* Define to 1 if you have the <getopt.h> header file. */
 #undef HAVE_GETOPT_H
 
-/* Define if you have the <unistd.h> header file.  */
+/* Define to 1 if you have the `getopt_long' function. */
+#undef HAVE_GETOPT_LONG
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
diff --git a/config.sub b/config.sub
index 28426bb..ba33103 100755
--- a/config.sub
+++ b/config.sub
@@ -1,6 +1,10 @@
 #! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-#   Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-12'
+
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
 # can handle that machine.  It does not imply ALL GNU software can.
@@ -25,6 +29,9 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
 # If it is invalid, we print an error message on stderr and exit with code 1.
@@ -45,30 +52,74 @@
 #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
-if [ x$1 = x ]
-then
-	echo Configuration name missing. 1>&2
-	echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
-	echo "or     $0 ALIAS" 1>&2
-	echo where ALIAS is a recognized configuration type. 1>&2
-	exit 1
-fi
+me=`echo "$0" | sed -e 's,.*/,,'`
 
-# First pass through any local machine types.
-case $1 in
-	*local*)
-		echo $1
-		exit 0
-		;;
-	*)
-	;;
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
 esac
 
 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  linux-gnu*)
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
@@ -94,7 +145,7 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple)
+	-apple | -axis)
 		os=
 		basic_machine=$1
 		;;
@@ -108,6 +159,14 @@ case $os in
 		os=-vxworks
 		basic_machine=$1
 		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
 	-hiux*)
 		os=-hiuxwe2
 		;;
@@ -166,27 +225,64 @@ esac
 case $basic_machine in
 	# Recognize the basic CPU types without company name.
 	# Some are omitted here because they have special meanings below.
-	tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
-		| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
-		| 580 | i960 | h8300 \
-		| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
-		| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
-		| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
-		| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
-		| mips64orion | mips64orionel | mipstx39 | mipstx39el \
-		| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
-		| mips64vr5000 | miprs64vr5000el | mcore \
-		| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
-		| thumb | d10v | fr30)
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
 		basic_machine=$basic_machine-unknown
 		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
 		;;
 
 	# We use `pc' rather than `unknown'
 	# because (1) that's what they normally are, and
 	# (2) the word "unknown" tends to confuse beginning users.
-	i[34567]86)
+	i*86 | x86_64)
 	  basic_machine=$basic_machine-pc
 	  ;;
 	# Object if more than one company name word.
@@ -195,24 +291,61 @@ case $basic_machine in
 		exit 1
 		;;
 	# Recognize the basic CPU types with company name.
-	# FIXME: clean up the formatting here.
-	vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
-	      | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
-	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
-	      | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
-	      | xmp-* | ymp-* \
-	      | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
-	      | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
-	      | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
-	      | clipper-* | orion-* \
-	      | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
-	      | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
-	      | mips64el-* | mips64orion-* | mips64orionel-* \
-	      | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
-	      | mipstx39-* | mipstx39el-* | mcore-* \
-	      | f301-* | armv*-* | t3e-* \
-	      | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
-	      | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* )
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| msp430-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
 		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
@@ -230,6 +363,9 @@ case $basic_machine in
 		basic_machine=a29k-amd
 		os=-udi
 		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
 	adobe68k)
 		basic_machine=m68010-adobe
 		os=-scout
@@ -244,19 +380,25 @@ case $basic_machine in
 		basic_machine=a29k-none
 		os=-bsd
 		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	amdahl)
 		basic_machine=580-amdahl
 		os=-sysv
 		;;
 	amiga | amiga-*)
-		basic_machine=m68k-cbm
+		basic_machine=m68k-unknown
 		;;
 	amigaos | amigados)
-		basic_machine=m68k-cbm
+		basic_machine=m68k-unknown
 		os=-amigaos
 		;;
 	amigaunix | amix)
-		basic_machine=m68k-cbm
+		basic_machine=m68k-unknown
 		os=-sysv4
 		;;
 	apollo68)
@@ -275,6 +417,10 @@ case $basic_machine in
 		basic_machine=ns32k-sequent
 		os=-dynix
 		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
 	convex-c1)
 		basic_machine=c1-convex
 		os=-bsd
@@ -295,27 +441,38 @@ case $basic_machine in
 		basic_machine=c38-convex
 		os=-bsd
 		;;
-	cray | ymp)
-		basic_machine=ymp-cray
-		os=-unicos
-		;;
-	cray2)
-		basic_machine=cray2-cray
+	cray | j90)
+		basic_machine=j90-cray
 		os=-unicos
 		;;
-	[ctj]90-cray)
-		basic_machine=c90-cray
-		os=-unicos
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
 		;;
 	crds | unos)
 		basic_machine=m68k-crds
 		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
 	da30 | da30-*)
 		basic_machine=m68k-da30
 		;;
 	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
 		basic_machine=mips-dec
 		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
 	delta | 3300 | motorola-3300 | motorola-delta \
 	      | 3300-motorola | delta-motorola)
 		basic_machine=m68k-motorola
@@ -357,6 +514,10 @@ case $basic_machine in
 		basic_machine=tron-gmicro
 		os=-sysv
 		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
 	h3050r* | hiux*)
 		basic_machine=hppa1.1-hitachi
 		os=-hiuxwe2
@@ -432,19 +593,19 @@ case $basic_machine in
 		basic_machine=i370-ibm
 		;;
 # I'm not sure what "Sysv32" means.  Should this be sysv3.2?
-	i[34567]86v32)
+	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
 		;;
-	i[34567]86v4*)
+	i*86v4*)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv4
 		;;
-	i[34567]86v)
+	i*86v)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv
 		;;
-	i[34567]86sol2)
+	i*86sol2)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-solaris2
 		;;
@@ -456,17 +617,6 @@ case $basic_machine in
 		basic_machine=i386-unknown
 		os=-vsta
 		;;
-	i386-go32 | go32)
-		basic_machine=i386-unknown
-		os=-go32
-		;;
-	i386-mingw32 | mingw32)
-		basic_machine=i386-unknown
-		os=-mingw32
-		;;
-	i386-qnx | qnx)
-		basic_machine=i386-qnx
-		;;
 	iris | iris4d)
 		basic_machine=mips-sgi
 		case $os in
@@ -492,6 +642,10 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
 	miniframe)
 		basic_machine=m68000-convergent
 		;;
@@ -499,26 +653,26 @@ case $basic_machine in
 		basic_machine=m68k-atari
 		os=-mint
 		;;
-	mipsel*-linux*)
-		basic_machine=mipsel-unknown
-		os=-linux-gnu
-		;;
-	mips*-linux*)
-		basic_machine=mips-unknown
-		os=-linux-gnu
-		;;
 	mips3*-*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
 		;;
 	mips3*)
 		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
 		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
 	monitor)
 		basic_machine=m68k-rom68k
 		os=-coff
 		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
 	msdos)
-		basic_machine=i386-unknown
+		basic_machine=i386-pc
 		os=-msdos
 		;;
 	mvs)
@@ -582,13 +736,32 @@ case $basic_machine in
 		basic_machine=i960-intel
 		os=-mon960
 		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
 	np1)
 		basic_machine=np1-gould
 		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
 		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
 	OSE68000 | ose68000)
 		basic_machine=m68000-ericsson
 		os=-ose
@@ -611,45 +784,65 @@ case $basic_machine in
 	pbb)
 		basic_machine=m68k-tti
 		;;
-        pc532 | pc532-*)
+	pc532 | pc532-*)
 		basic_machine=ns32k-pc532
 		;;
-	pentium | p5 | k5 | k6 | nexen)
+	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
 		;;
-	pentiumpro | p6 | 6x86)
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
 		basic_machine=i686-pc
 		;;
-	pentiumii | pentium2)
+	pentium4)
 		basic_machine=i786-pc
 		;;
-	pentium-* | p5-* | k5-* | k6-* | nexen-*)
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	pentiumpro-* | p6-* | 6x86-*)
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
 		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	pentiumii-* | pentium2-*)
+	pentium4-*)
 		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	pn)
 		basic_machine=pn-gould
 		;;
-	power)	basic_machine=rs6000-ibm
+	power)	basic_machine=power-ibm
 		;;
 	ppc)	basic_machine=powerpc-unknown
-	        ;;
+		;;
 	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
 	ppcle | powerpclittle | ppc-le | powerpc-little)
 		basic_machine=powerpcle-unknown
-	        ;;
+		;;
 	ppcle-* | powerpclittle-*)
 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
 	ps2)
 		basic_machine=i386-ibm
 		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
 	rom68k)
 		basic_machine=m68k-rom68k
 		os=-coff
@@ -660,10 +853,26 @@ case $basic_machine in
 	rtpc | rtpc-*)
 		basic_machine=romp-ibm
 		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
 	sa29200)
 		basic_machine=a29k-amd
 		os=-udi
 		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
 	sequent)
 		basic_machine=i386-sequent
 		;;
@@ -671,7 +880,10 @@ case $basic_machine in
 		basic_machine=sh-hitachi
 		os=-hms
 		;;
-	sparclite-wrs)
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
 		basic_machine=sparclite-wrs
 		os=-vxworks
 		;;
@@ -729,23 +941,51 @@ case $basic_machine in
 	sun386 | sun386i | roadrunner)
 		basic_machine=i386-sun
 		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
 	symmetry)
 		basic_machine=i386-sequent
 		os=-dynix
 		;;
 	t3e)
-		basic_machine=t3e-cray
+		basic_machine=alphaev5-cray
 		os=-unicos
 		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
 	tx39)
 		basic_machine=mipstx39-unknown
 		;;
 	tx39el)
 		basic_machine=mipstx39el-unknown
 		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
 	tower | tower-32)
 		basic_machine=m68k-ncr
 		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
 	udi29k)
 		basic_machine=a29k-amd
 		os=-udi
@@ -767,8 +1007,8 @@ case $basic_machine in
 		os=-vms
 		;;
 	vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
+		basic_machine=f301-fujitsu
+		;;
 	vxworks960)
 		basic_machine=i960-wrs
 		os=-vxworks
@@ -789,13 +1029,13 @@ case $basic_machine in
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		;;
-	xmp)
-		basic_machine=xmp-cray
-		os=-unicos
-		;;
-        xps | xps100)
+	xps | xps100)
 		basic_machine=xps100-honeywell
 		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
 	z8k-*-coff)
 		basic_machine=z8k-unknown
 		os=-sim
@@ -816,13 +1056,6 @@ case $basic_machine in
 	op60c)
 		basic_machine=hppa1.1-oki
 		;;
-	mips)
-		if [ x$os = x-linux-gnu ]; then
-			basic_machine=mips-unknown
-		else
-			basic_machine=mips-mips
-		fi
-		;;
 	romp)
 		basic_machine=romp-ibm
 		;;
@@ -832,16 +1065,26 @@ case $basic_machine in
 	vax)
 		basic_machine=vax-dec
 		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
 	pdp11)
 		basic_machine=pdp11-dec
 		;;
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sparc | sparcv9)
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
 		basic_machine=sparc-sun
 		;;
-        cydra)
+	cydra)
 		basic_machine=cydra-cydrome
 		;;
 	orion)
@@ -856,9 +1099,8 @@ case $basic_machine in
 	pmac | pmac-mpw)
 		basic_machine=powerpc-apple
 		;;
-	c4x*)
-		basic_machine=c4x-none
-		os=-coff
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
 		;;
 	*)
 		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
@@ -912,22 +1154,46 @@ case $os in
 	      | -aos* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
-	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
 	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
-	      | -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*)
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
 	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
-	      | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 		;;
 	-mac*)
 		os=`echo $os | sed -e 's|mac|macos|'`
 		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
 	-linux*)
 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 		;;
@@ -940,6 +1206,12 @@ case $os in
 	-opened*)
 		os=-openedition
 		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
 	-osfrose*)
 		os=-osfrose
 		;;
@@ -955,14 +1227,26 @@ case $os in
 	-acis*)
 		os=-aos
 		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
 	-386bsd)
 		os=-bsd
 		;;
 	-ctix* | -uts*)
 		os=-sysv
 		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
 	-ns2 )
-	        os=-nextstep2
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
 		;;
 	# Preserve the version number of sinix5.
 	-sinix5.*)
@@ -971,15 +1255,15 @@ case $os in
 	-sinix*)
 		os=-sysv4
 		;;
+        -tpf*)
+		os=-tpf
+		;;
 	-triton*)
 		os=-sysv3
 		;;
 	-oss*)
 		os=-sysv3
 		;;
-        -qnx)
-		os=-qnx4
-		;;
 	-svr4)
 		os=-sysv4
 		;;
@@ -1001,8 +1285,14 @@ case $os in
 	-xenix)
 		os=-xenix
 		;;
-        -*mint | -*MiNT)
-	        os=-mint
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
 		;;
 	-none)
 		;;
@@ -1035,7 +1325,14 @@ case $basic_machine in
 	arm*-semi)
 		os=-aout
 		;;
-        pdp11-*)
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
 		os=-none
 		;;
 	*-dec | vax-*)
@@ -1062,6 +1359,9 @@ case $basic_machine in
 	mips*-*)
 		os=-elf
 		;;
+	or32-*)
+		os=-coff
+		;;
 	*-tti)	# must be before sparc entry or we get the wrong os.
 		os=-sysv3
 		;;
@@ -1125,25 +1425,25 @@ case $basic_machine in
 	*-next)
 		os=-nextstep3
 		;;
-        *-gould)
+	*-gould)
 		os=-sysv
 		;;
-        *-highlevel)
+	*-highlevel)
 		os=-bsd
 		;;
 	*-encore)
 		os=-bsd
 		;;
-        *-sgi)
+	*-sgi)
 		os=-irix
 		;;
-        *-siemens)
+	*-siemens)
 		os=-sysv4
 		;;
 	*-masscomp)
 		os=-rtu
 		;;
-	f301-fujitsu)
+	f30[01]-fujitsu | f700-fujitsu)
 		os=-uxpv
 		;;
 	*-rom68k)
@@ -1206,10 +1506,16 @@ case $basic_machine in
 			-mvs* | -opened*)
 				vendor=ibm
 				;;
+			-os400*)
+				vendor=ibm
+				;;
 			-ptx*)
 				vendor=sequent
 				;;
-			-vxsim* | -vxworks*)
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
 				vendor=wrs
 				;;
 			-aux*)
@@ -1221,12 +1527,23 @@ case $basic_machine in
 			-mpw* | -macos*)
 				vendor=apple
 				;;
-			-*mint | -*MiNT)
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 				vendor=atari
 				;;
+			-vos*)
+				vendor=stratus
+				;;
 		esac
 		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
 		;;
 esac
 
 echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
index 9231b0e..5f6816e 100755
--- a/configure
+++ b/configure
@@ -1,59 +1,479 @@
 #! /bin/sh
-
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13 
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+# Generated by GNU Autoconf 2.59.
 #
+# Copyright (C) 2003 Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=${tagnames+${tagnames},}CXX
+
+tagnames=${tagnames+${tagnames},}F77
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
 
-# Defaults:
-ac_help=
-ac_default_prefix=/usr/local
-# Any additions from configure.in:
-# Making releases:
-#   GTS_MICRO_VERSION += 1;
-#   GTS_INTERFACE_AGE += 1;
-#   GTS_BINARY_AGE += 1;
-# if any functions have been added, set GTS_INTERFACE_AGE to 0.
-# if backwards compatibility has been broken,
-# set GTS_BINARY_AGE and GTS_INTERFACE_AGE to 0.
 #
-GTS_MAJOR_VERSION=0
-GTS_MINOR_VERSION=5
-GTS_MICRO_VERSION=1
-GTS_INTERFACE_AGE=1
-GTS_BINARY_AGE=1
-GTS_VERSION=$GTS_MAJOR_VERSION.$GTS_MINOR_VERSION.$GTS_MICRO_VERSION
-ac_help="$ac_help
-  --enable-shared[=PKGS]  build shared libraries [default=yes]"
-ac_help="$ac_help
-  --enable-static[=PKGS]  build static libraries [default=yes]"
-ac_help="$ac_help
-  --enable-fast-install[=PKGS]  optimize for fast installation [default=yes]"
-ac_help="$ac_help
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]"
-ac_help="$ac_help
-  --disable-libtool-lock  avoid locking (might break parallel builds)"
-ac_help="$ac_help
-  --enable-maintainer-mode enable make rules and dependencies not useful
-                          (and sometimes confusing) to the casual installer"
-ac_help="$ac_help
-  --with-glib-prefix=PFX   Prefix where GLIB is installed (optional)"
-ac_help="$ac_help
-  --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)"
-ac_help="$ac_help
-  --disable-glibtest       Do not try to compile and run a test GLIB program"
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="src/gts.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS GTS_MAJOR_VERSION GTS_MINOR_VERSION GTS_MICRO_VERSION GTS_VERSION LT_RELEASE LT_CURRENT LT_REVISION LT_AGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DA [...]
+ac_subst_files=''
 
 # Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
 # The variables have the same names as the options, with
 # dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
 exec_prefix=NONE
-host=NONE
 no_create=
-nonopt=NONE
 no_recursion=
 prefix=NONE
 program_prefix=NONE
@@ -62,10 +482,15 @@ program_transform_name=s,x,x,
 silent=
 site=
 srcdir=
-target=NONE
 verbose=
 x_includes=NONE
 x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
 bindir='${exec_prefix}/bin'
 sbindir='${exec_prefix}/sbin'
 libexecdir='${exec_prefix}/libexec'
@@ -79,17 +504,9 @@ oldincludedir='/usr/include'
 infodir='${prefix}/info'
 mandir='${prefix}/man'
 
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
-
 ac_prev=
 for ac_option
 do
-
   # If the previous option needs an argument, assign it.
   if test -n "$ac_prev"; then
     eval "$ac_prev=\$ac_option"
@@ -97,59 +514,59 @@ do
     continue
   fi
 
-  case "$ac_option" in
-  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) ac_optarg= ;;
-  esac
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
 
-  case "$ac_option" in
+  case $ac_option in
 
   -bindir | --bindir | --bindi | --bind | --bin | --bi)
     ac_prev=bindir ;;
   -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir="$ac_optarg" ;;
+    bindir=$ac_optarg ;;
 
   -build | --build | --buil | --bui | --bu)
-    ac_prev=build ;;
+    ac_prev=build_alias ;;
   -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build="$ac_optarg" ;;
+    build_alias=$ac_optarg ;;
 
   -cache-file | --cache-file | --cache-fil | --cache-fi \
   | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
     ac_prev=cache_file ;;
   -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
   | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file="$ac_optarg" ;;
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
 
   -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
     ac_prev=datadir ;;
   -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
   | --da=*)
-    datadir="$ac_optarg" ;;
+    datadir=$ac_optarg ;;
 
   -disable-* | --disable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    eval "enable_${ac_feature}=no" ;;
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
 
   -enable-* | --enable-*)
-    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
-    fi
-    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
       *) ac_optarg=yes ;;
     esac
-    eval "enable_${ac_feature}='$ac_optarg'" ;;
+    eval "enable_$ac_feature='$ac_optarg'" ;;
 
   -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
   | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -158,95 +575,47 @@ do
   -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
   | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
   | --exec=* | --exe=* | --ex=*)
-    exec_prefix="$ac_optarg" ;;
+    exec_prefix=$ac_optarg ;;
 
   -gas | --gas | --ga | --g)
     # Obsolete; use --with-gas.
     with_gas=yes ;;
 
-  -help | --help | --hel | --he)
-    # Omit some internal or obsolete options to make the list less imposing.
-    # This message is too long to be a string in the A/UX 3.1 sh.
-    cat << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
-  --cache-file=FILE       cache test results in FILE
-  --help                  print this message
-  --no-create             do not create output files
-  --quiet, --silent       do not print \`checking...' messages
-  --version               print the version of autoconf that created configure
-Directory and file names:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [same as prefix]
-  --bindir=DIR            user executables in DIR [EPREFIX/bin]
-  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
-  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
-  --datadir=DIR           read-only architecture-independent data in DIR
-                          [PREFIX/share]
-  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
-                          [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
-  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
-  --includedir=DIR        C header files in DIR [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
-  --infodir=DIR           info documentation in DIR [PREFIX/info]
-  --mandir=DIR            man documentation in DIR [PREFIX/man]
-  --srcdir=DIR            find the sources in DIR [configure dir or ..]
-  --program-prefix=PREFIX prepend PREFIX to installed program names
-  --program-suffix=SUFFIX append SUFFIX to installed program names
-  --program-transform-name=PROGRAM
-                          run sed PROGRAM on installed program names
-EOF
-    cat << EOF
-Host type:
-  --build=BUILD           configure for building on BUILD [BUILD=HOST]
-  --host=HOST             configure for HOST [guessed]
-  --target=TARGET         configure for TARGET [TARGET=HOST]
-Features and packages:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --x-includes=DIR        X include files are in DIR
-  --x-libraries=DIR       X library files are in DIR
-EOF
-    if test -n "$ac_help"; then
-      echo "--enable and --with options recognized:$ac_help"
-    fi
-    exit 0 ;;
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
 
   -host | --host | --hos | --ho)
-    ac_prev=host ;;
+    ac_prev=host_alias ;;
   -host=* | --host=* | --hos=* | --ho=*)
-    host="$ac_optarg" ;;
+    host_alias=$ac_optarg ;;
 
   -includedir | --includedir | --includedi | --included | --include \
   | --includ | --inclu | --incl | --inc)
     ac_prev=includedir ;;
   -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
   | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir="$ac_optarg" ;;
+    includedir=$ac_optarg ;;
 
   -infodir | --infodir | --infodi | --infod | --info | --inf)
     ac_prev=infodir ;;
   -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir="$ac_optarg" ;;
+    infodir=$ac_optarg ;;
 
   -libdir | --libdir | --libdi | --libd)
     ac_prev=libdir ;;
   -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir="$ac_optarg" ;;
+    libdir=$ac_optarg ;;
 
   -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
   | --libexe | --libex | --libe)
     ac_prev=libexecdir ;;
   -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
   | --libexe=* | --libex=* | --libe=*)
-    libexecdir="$ac_optarg" ;;
+    libexecdir=$ac_optarg ;;
 
   -localstatedir | --localstatedir | --localstatedi | --localstated \
   | --localstate | --localstat | --localsta | --localst \
@@ -255,19 +624,19 @@ EOF
   -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
   | --localstate=* | --localstat=* | --localsta=* | --localst=* \
   | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
-    localstatedir="$ac_optarg" ;;
+    localstatedir=$ac_optarg ;;
 
   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
     ac_prev=mandir ;;
   -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir="$ac_optarg" ;;
+    mandir=$ac_optarg ;;
 
   -nfp | --nfp | --nf)
     # Obsolete; use --without-fp.
     with_fp=no ;;
 
   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c)
+  | --no-cr | --no-c | -n)
     no_create=yes ;;
 
   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -281,26 +650,26 @@ EOF
   -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
   | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
   | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir="$ac_optarg" ;;
+    oldincludedir=$ac_optarg ;;
 
   -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
     ac_prev=prefix ;;
   -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix="$ac_optarg" ;;
+    prefix=$ac_optarg ;;
 
   -program-prefix | --program-prefix | --program-prefi | --program-pref \
   | --program-pre | --program-pr | --program-p)
     ac_prev=program_prefix ;;
   -program-prefix=* | --program-prefix=* | --program-prefi=* \
   | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix="$ac_optarg" ;;
+    program_prefix=$ac_optarg ;;
 
   -program-suffix | --program-suffix | --program-suffi | --program-suff \
   | --program-suf | --program-su | --program-s)
     ac_prev=program_suffix ;;
   -program-suffix=* | --program-suffix=* | --program-suffi=* \
   | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix="$ac_optarg" ;;
+    program_suffix=$ac_optarg ;;
 
   -program-transform-name | --program-transform-name \
   | --program-transform-nam | --program-transform-na \
@@ -317,7 +686,7 @@ EOF
   | --program-transfo=* | --program-transf=* \
   | --program-trans=* | --program-tran=* \
   | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name="$ac_optarg" ;;
+    program_transform_name=$ac_optarg ;;
 
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil)
@@ -327,7 +696,7 @@ EOF
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
   | --sbi=* | --sb=*)
-    sbindir="$ac_optarg" ;;
+    sbindir=$ac_optarg ;;
 
   -sharedstatedir | --sharedstatedir | --sharedstatedi \
   | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -338,58 +707,57 @@ EOF
   | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
   | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
   | --sha=* | --sh=*)
-    sharedstatedir="$ac_optarg" ;;
+    sharedstatedir=$ac_optarg ;;
 
   -site | --site | --sit)
     ac_prev=site ;;
   -site=* | --site=* | --sit=*)
-    site="$ac_optarg" ;;
+    site=$ac_optarg ;;
 
   -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
     ac_prev=srcdir ;;
   -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir="$ac_optarg" ;;
+    srcdir=$ac_optarg ;;
 
   -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
   | --syscon | --sysco | --sysc | --sys | --sy)
     ac_prev=sysconfdir ;;
   -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
   | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir="$ac_optarg" ;;
+    sysconfdir=$ac_optarg ;;
 
   -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target ;;
+    ac_prev=target_alias ;;
   -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target="$ac_optarg" ;;
+    target_alias=$ac_optarg ;;
 
   -v | -verbose | --verbose | --verbos | --verbo | --verb)
     verbose=yes ;;
 
-  -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.13"
-    exit 0 ;;
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
 
   -with-* | --with-*)
-    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
     ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case "$ac_option" in
-      *=*) ;;
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
       *) ac_optarg=yes ;;
     esac
-    eval "with_${ac_package}='$ac_optarg'" ;;
+    eval "with_$ac_package='$ac_optarg'" ;;
 
   -without-* | --without-*)
-    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
-    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
-      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
-    fi
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    eval "with_${ac_package}=no" ;;
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
 
   --x)
     # Obsolete; use --with-x.
@@ -400,99 +768,110 @@ EOF
     ac_prev=x_includes ;;
   -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
   | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes="$ac_optarg" ;;
+    x_includes=$ac_optarg ;;
 
   -x-libraries | --x-libraries | --x-librarie | --x-librari \
   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
     ac_prev=x_libraries ;;
   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries="$ac_optarg" ;;
+    x_libraries=$ac_optarg ;;
 
-  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
     ;;
 
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
   *)
-    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
-      echo "configure: warning: $ac_option: invalid host type" 1>&2
-    fi
-    if test "x$nonopt" != xNONE; then
-      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
-    fi
-    nonopt="$ac_option"
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
     ;;
 
   esac
 done
 
 if test -n "$ac_prev"; then
-  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
-fi
-
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
 fi
-exec 5>./config.log
 
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
 
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
 do
-  case "$ac_arg" in
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c) ;;
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
-  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
   esac
 done
 
-# NLS nuisances.
-# Only set these to C if already set.  These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
 
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
 
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=src/gts.h
 
 # Find the source files, if location was not specified.
 if test -z "$srcdir"; then
   ac_srcdir_defaulted=yes
   # Try the directory containing this script, then its parent.
-  ac_prog=$0
-  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
-  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
   srcdir=$ac_confdir
   if test ! -r $srcdir/$ac_unique_file; then
     srcdir=..
@@ -502,97 +881,688 @@ else
 fi
 if test ! -r $srcdir/$ac_unique_file; then
   if test "$ac_srcdir_defaulted" = yes; then
-    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
   else
-    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
   fi
 fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_F77_set=${F77+set}
+ac_env_F77_value=$F77
+ac_cv_env_F77_set=${F77+set}
+ac_cv_env_F77_value=$F77
+ac_env_FFLAGS_set=${FFLAGS+set}
+ac_env_FFLAGS_value=$FFLAGS
+ac_cv_env_FFLAGS_set=${FFLAGS+set}
+ac_cv_env_FFLAGS_value=$FFLAGS
 
-# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
-  if test "x$prefix" != xNONE; then
-    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
-  else
-    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
-  fi
-fi
-for ac_site_file in $CONFIG_SITE; do
-  if test -r "$ac_site_file"; then
-    echo "loading site script $ac_site_file"
-    . "$ac_site_file"
-  fi
-done
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
 
-if test -r "$cache_file"; then
-  echo "loading cache $cache_file"
-  . $cache_file
-else
-  echo "creating cache $cache_file"
-  > $cache_file
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
 fi
 
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+if test -n "$ac_init_help"; then
 
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says ghazi at caip.rutgers.edu.
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='	'
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared[=PKGS]
+                          build shared libraries [default=yes]
+  --enable-static[=PKGS]
+                          build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-maintainer-mode enable make rules and dependencies not useful
+                          (and sometimes confusing) to the casual installer
+  --disable-glibtest      do not try to compile and run a test GLIB program
+  --disable-glibtest       Do not try to compile and run a test GLIB program
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-tags[=TAGS]
+                          include additional configurations [automatic]
+  --with-glib-prefix=PFX   Prefix where GLIB is installed (optional)
+  --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
 else
-  ac_n= ac_c='\c' ac_t=
+  ac_dir_suffix= ac_top_builddir=
 fi
 
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
 
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
 
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd "$ac_popdir"
+  done
+fi
 
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
 
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
 
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
 
+  $ $0 $@
 
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
 
-# libtool versioning
-LT_RELEASE=$GTS_MAJOR_VERSION.$GTS_MINOR_VERSION
-LT_CURRENT=`expr $GTS_MICRO_VERSION - $GTS_INTERFACE_AGE`
-LT_REVISION=$GTS_INTERFACE_AGE
-LT_AGE=`expr $GTS_BINARY_AGE - $GTS_INTERFACE_AGE`
+} >&5
 
+cat >&5 <<_ACEOF
 
 
+## ----------- ##
+## Core tests. ##
+## ----------- ##
 
+_ACEOF
 
-# For automake.
-VERSION=$GTS_VERSION
-PACKAGE=gts
 
-ac_aux_dir=
-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f $ac_dir/install.sh; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  fi
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
+# Making releases:
+#   GTS_MICRO_VERSION += 1;
+#   GTS_INTERFACE_AGE += 1;
+#   GTS_BINARY_AGE += 1;
+# if any functions have been added, set GTS_INTERFACE_AGE to 0.
+# if backwards compatibility has been broken,
+# set GTS_BINARY_AGE and GTS_INTERFACE_AGE to 0.
+#
+GTS_MAJOR_VERSION=0
+GTS_MINOR_VERSION=7
+GTS_MICRO_VERSION=3
+GTS_INTERFACE_AGE=0
+GTS_BINARY_AGE=0
+GTS_VERSION=$GTS_MAJOR_VERSION.$GTS_MINOR_VERSION.$GTS_MICRO_VERSION
+#AC_DIVERT_POP()dnl
+
+
+
+
+
+
+# libtool versioning
+LT_RELEASE=$GTS_MAJOR_VERSION.$GTS_MINOR_VERSION
+LT_CURRENT=`expr $GTS_MICRO_VERSION - $GTS_INTERFACE_AGE`
+LT_REVISION=$GTS_INTERFACE_AGE
+LT_AGE=`expr $GTS_BINARY_AGE - $GTS_INTERFACE_AGE`
+
+
+
+
+
+# For automake.
+VERSION=$GTS_VERSION
+PACKAGE=gts
+
+am__api_version="1.7"
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
 fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -601,604 +1571,1238 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 # SunOS /usr/etc/install
 # IRIX /sbin/install
 # AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
 # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:610: checking for a BSD compatible install" >&5
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
 if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
-  for ac_dir in $PATH; do
-    # Account for people who put trailing slashes in PATH elements.
-    case "$ac_dir/" in
-    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
-    *)
-      # OSF1 and SCO ODT 3.0 have their own names for install.
-      # Don't use installbsd from OSF since it installs stuff as root
-      # by default.
-      for ac_prog in ginstall scoinst install; do
-        if test -f $ac_dir/$ac_prog; then
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 	  if test $ac_prog = install &&
-            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
 	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
 	  else
-	    ac_cv_path_install="$ac_dir/$ac_prog -c"
-	    break 2
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
 	  fi
 	fi
       done
-      ;;
-    esac
-  done
-  IFS="$ac_save_IFS"
+    done
+    ;;
+esac
+done
+
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
-    INSTALL="$ac_cv_path_install"
+    INSTALL=$ac_cv_path_install
   else
     # As a last resort, use the slow shell script.  We don't cache a
     # path for INSTALL within a source directory, because that will
     # break other packages using the cache if that directory is
     # removed, or if the path is relative.
-    INSTALL="$ac_install_sh"
+    INSTALL=$ac_install_sh
   fi
 fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
 test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:663: checking whether build environment is sane" >&5
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
 # Just in case
 sleep 1
-echo timestamp > conftestfile
+echo timestamp > conftest.file
 # Do `set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
    if test "$*" = "X"; then
       # -L didn't work.
-      set X `ls -t $srcdir/configure conftestfile`
+      set X `ls -t $srcdir/configure conftest.file`
    fi
-   if test "$*" != "X $srcdir/configure conftestfile" \
-      && test "$*" != "X conftestfile $srcdir/configure"; then
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
 
       # If neither matched, then we have a broken ls.  This can happen
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      { echo "configure: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" 1>&2; exit 1; }
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
    fi
 
-   test "$2" = conftestfile
+   test "$2" = conftest.file
    )
 then
    # Ok.
    :
 else
-   { echo "configure: error: newly created file is older than distributed files!
-Check your system clock" 1>&2; exit 1; }
-fi
-rm -f conftest*
-echo "$ac_t""yes" 1>&6
-if test "$program_transform_name" = s,x,x,; then
-  program_transform_name=
-else
-  # Double any \ or $.  echo might interpret backslashes.
-  cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
-  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
-  rm -f conftestsed
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
 fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
 test "$program_prefix" != NONE &&
-  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+  program_transform_name="s,^,$program_prefix,;$program_transform_name"
 # Use a double $ so make ignores it.
 test "$program_suffix" != NONE &&
-  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
 
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+  test -n "$AWK" && break
+done
 
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:720: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftestmake <<\EOF
+  cat >conftest.make <<\_ACEOF
 all:
-	@echo 'ac_maketemp="${MAKE}"'
-EOF
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
 # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
 if test -n "$ac_maketemp"; then
   eval ac_cv_prog_make_${ac_make}_set=yes
 else
   eval ac_cv_prog_make_${ac_make}_set=no
 fi
-rm -f conftestmake
+rm -f conftest.make
 fi
 if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
   SET_MAKE=
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+ # test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
 
-PACKAGE=$PACKAGE
+# Define the identity of the package.
+ PACKAGE=$PACKAGE
+ VERSION=$VERSION
 
-VERSION=$VERSION
 
-if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
-  { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
-fi
+# Some tools Automake needs.
 
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
 
 
-missing_dir=`cd $ac_aux_dir && pwd`
-echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:759: checking for working aclocal" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if (aclocal --version) < /dev/null > /dev/null 2>&1; then
-   ACLOCAL=aclocal
-   echo "$ac_t""found" 1>&6
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-   ACLOCAL="$missing_dir/missing aclocal"
-   echo "$ac_t""missing" 1>&6
-fi
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
 
-echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:772: checking for working autoconf" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if (autoconf --version) < /dev/null > /dev/null 2>&1; then
-   AUTOCONF=autoconf
-   echo "$ac_t""found" 1>&6
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
 else
-   AUTOCONF="$missing_dir/missing autoconf"
-   echo "$ac_t""missing" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:785: checking for working automake" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if (automake --version) < /dev/null > /dev/null 2>&1; then
-   AUTOMAKE=automake
-   echo "$ac_t""found" 1>&6
-else
-   AUTOMAKE="$missing_dir/missing automake"
-   echo "$ac_t""missing" 1>&6
 fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
 
-echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:798: checking for working autoheader" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if (autoheader --version) < /dev/null > /dev/null 2>&1; then
-   AUTOHEADER=autoheader
-   echo "$ac_t""found" 1>&6
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
 else
-   AUTOHEADER="$missing_dir/missing autoheader"
-   echo "$ac_t""missing" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:811: checking for working makeinfo" >&5
-# Run test in a subshell; some versions of sh will print an error if
-# an executable is not found, even if stderr is redirected.
-# Redirect stdin to placate older versions of autoconf.  Sigh.
-if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
-   MAKEINFO=makeinfo
-   echo "$ac_t""found" 1>&6
+  STRIP=$ac_ct_STRIP
 else
-   MAKEINFO="$missing_dir/missing makeinfo"
-   echo "$ac_t""missing" 1>&6
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
 fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
 
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
 
 
-# Specify a configuration file
 
 
+# Specify a configuration file
+          ac_config_headers="$ac_config_headers config.h"
+
 
 
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
 #define GTS_MAJOR_VERSION $GTS_MAJOR_VERSION
-EOF
+_ACEOF
+
 
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
 #define GTS_MINOR_VERSION $GTS_MINOR_VERSION
-EOF
+_ACEOF
+
 
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
 #define GTS_MICRO_VERSION $GTS_MICRO_VERSION
-EOF
+_ACEOF
+
 
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
 #define GTS_INTERFACE_AGE $GTS_INTERFACE_AGE
-EOF
+_ACEOF
+
 
-cat >> confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
 #define GTS_BINARY_AGE $GTS_BINARY_AGE
-EOF
+_ACEOF
 
 
 # Check whether --enable-shared or --disable-shared was given.
 if test "${enable_shared+set}" = set; then
   enableval="$enable_shared"
   p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_shared=yes ;;
-no) enable_shared=no ;;
-*)
-  enable_shared=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_shared=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   enable_shared=yes
-fi
+fi;
 
 # Check whether --enable-static or --disable-static was given.
 if test "${enable_static+set}" = set; then
   enableval="$enable_static"
   p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_static=yes ;;
-no) enable_static=no ;;
-*)
-  enable_static=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_static=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   enable_static=yes
-fi
+fi;
 
 # Check whether --enable-fast-install or --disable-fast-install was given.
 if test "${enable_fast_install+set}" = set; then
   enableval="$enable_fast_install"
   p=${PACKAGE-default}
-case "$enableval" in
-yes) enable_fast_install=yes ;;
-no) enable_fast_install=no ;;
-*)
-  enable_fast_install=no
-  # Look at the argument we got.  We use all the common list separators.
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
-  for pkg in $enableval; do
-    if test "X$pkg" = "X$p"; then
-      enable_fast_install=yes
-    fi
-  done
-  IFS="$ac_save_ifs"
-  ;;
-esac
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   enable_fast_install=yes
-fi
-
+fi;
 
 # Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
 
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:927: checking host system type" >&5
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
 
-host_alias=$host
-case "$host_alias" in
-NONE)
-  case $nonopt in
-  NONE)
-    if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
-    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
-    fi ;;
-  *) host_alias=$nonopt ;;
-  esac ;;
-esac
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+DEPDIR="${am__leading_dot}deps"
+
+          ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
 
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
-echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:948: checking build system type" >&5
-
-build_alias=$build
-case "$build_alias" in
-NONE)
-  case $nonopt in
-  NONE) build_alias=$host_alias ;;
-  *) build_alias=$nonopt ;;
-  esac ;;
-esac
 
-build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
-build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$build" 1>&6
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
 
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:968: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
 else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_RANLIB="ranlib"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 fi
 fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
-  echo "$ac_t""$RANLIB" 1>&6
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-# Extract the first word of "gcc", so it can be a program name with args.
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:998: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="gcc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
 else
-  echo "$ac_t""no" 1>&6
+  CC="$ac_cv_prog_CC"
 fi
 
+fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1028: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
   ac_prog_rejected=no
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-	continue
-      fi
-      ac_cv_prog_CC="cc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
   set dummy $ac_cv_prog_CC
   shift
-  if test $# -gt 0; then
+  if test $# != 0; then
     # We chose a different compiler from the bogus one.
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    set dummy "$ac_dir/$ac_word" "$@"
-    shift
-    ac_cv_prog_CC="$@"
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
   fi
 fi
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-  if test -z "$CC"; then
-    case "`uname -s`" in
-    *win32* | *WIN32*)
-      # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1079: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="cl"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
- ;;
-    esac
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
   fi
-  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1111: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+  test -n "$ac_ct_CC" && break
+done
 
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+  CC=$ac_ct_CC
+fi
 
-cat > conftest.$ac_ext << EOF
+fi
 
-#line 1122 "configure"
-#include "confdefs.h"
 
-main(){return(0);}
-EOF
-if { (eval echo configure:1127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  ac_cv_prog_cc_works=yes
-  # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
-    ac_cv_prog_cc_cross=no
-  else
-    ac_cv_prog_cc_cross=yes
-  fi
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_prog_cc_works=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
 fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
 
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
-  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1153: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
 
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1158: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1167: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-  ac_cv_prog_gcc=yes
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
 else
-  ac_cv_prog_gcc=no
-fi
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
 fi
 
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
 
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
 else
-  GCC=
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
 fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1186: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_prog_cc_g=yes
 else
-  ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+ac_cv_prog_cc_g=no
 fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
 if test "$ac_test_CFLAGS" = set; then
-  CFLAGS="$ac_save_CFLAGS"
+  CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
     CFLAGS="-g -O2"
@@ -1212,190 +2816,861 @@ else
     CFLAGS=
   fi
 fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
 
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
-  withval="$with_gnu_ld"
-  test "$withval" = no || with_gnu_ld=yes
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
 else
-  with_gnu_ld=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
 fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
 
-ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1229: checking for ld used by GCC" >&5
-  ac_prog=`($CC -print-prog-name=ld) 2>&5`
-  case "$ac_prog" in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-  "")
-    # If it fails, then pretend we aren't using GCC.
-    ac_prog=ld
-    ;;
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
   *)
-    # If it is relative, then search for the first ld in PATH.
-    with_gnu_ld=unknown
-    ;;
-  esac
-elif test "$with_gnu_ld" = yes; then
-  echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1253: checking for GNU ld" >&5
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
 else
-  echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1256: checking for non-GNU ld" >&5
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
 fi
-if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test -z "$LD"; then
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-      ac_cv_path_LD="$ac_dir/$ac_prog"
-      # Check to see if the program is GNU ld.  I'd rather use --version,
-      # but apparently some GNU ld's only accept -v.
-      # Break only if it was the GNU/non-GNU ld that we prefer.
-      if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-	test "$with_gnu_ld" != no && break
-      else
-	test "$with_gnu_ld" != yes && break
-      fi
-    fi
-  done
-  IFS="$ac_save_ifs"
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
 else
-  ac_cv_path_LD="$LD" # Let the user override the test with a path.
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
 fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
 fi
 
-LD="$ac_cv_path_LD"
-if test -n "$LD"; then
-  echo "$ac_t""$LD" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
-echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1291: checking if the linker ($LD) is GNU ld" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  ac_cv_prog_gnu_ld=yes
 else
-  ac_cv_prog_gnu_ld=no
-fi
-fi
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+depcc="$CC"   am_compiler_list=
 
-echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1307: checking for BSD-compatible nm" >&5
-if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test -n "$NM"; then
-  # Let the user override the test.
-  ac_cv_path_NM="$NM"
-else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
-      # Check to see if the nm accepts a BSD-compat flag.
-      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
-      #   nm: unknown option "B" ignored
-      if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	ac_cv_path_NM="$ac_dir/nm -B"
-	break
-      elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	ac_cv_path_NM="$ac_dir/nm -p"
-	break
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      : > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
       else
-	ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
-	continue # so that we can try to find one that supports BSD flags
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
       fi
     fi
   done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
 fi
+
 fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
 
-NM="$ac_cv_path_NM"
-echo "$ac_t""$NM" 1>&6
 
-echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1343: checking whether ln -s works" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
 else
-  rm -f conftestdata
-if ln -s X conftestdata 2>/dev/null
-then
-  rm -f conftestdata
-  ac_cv_prog_LN_S="ln -s"
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
+if test "${lt_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && break
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+SED=$lt_cv_path_SED
+
+fi
+
+echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
 else
-  ac_cv_prog_LN_S=ln
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
 fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
-LN_S="$ac_cv_prog_LN_S"
-if test "$ac_cv_prog_LN_S" = "ln -s"; then
-  echo "$ac_t""yes" 1>&6
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo "$ac_t""no" 1>&6
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
 fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
-case "$target" in
-NONE) lt_target="$host" ;;
-*) lt_target="$target" ;;
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
 esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
 
-# Check for any special flags to pass to ltconfig.
-#
-# the following will cause an existing older ltconfig to fail, so
-# we ignore this at the expense of the cache file... Checking this 
-# will just take longer ... bummer!
-#libtool_flags="--cache-file=$cache_file"
-#
-test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
-test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
-test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+    if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+      */dev/null* | *'Invalid file or object type'*)
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+        ;;
+      *)
+	case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	*/dev/null*)
+	  lt_cv_path_NM="$tmp_nm -p"
+	  break
+	  ;;
+	*)
+	  lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	  continue # so that we can try to find one that supports BSD flags
+	  ;;
+	esac
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6
+NM="$lt_cv_path_NM"
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case "$host_cpu" in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | knetbsd*-gnu)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
 
 
 # Check whether --enable-libtool-lock or --disable-libtool-lock was given.
 if test "${enable_libtool_lock+set}" = set; then
   enableval="$enable_libtool_lock"
-  :
-fi
 
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
 
 # Some flags need to be propagated to the compiler or linker for good
 # libtool support.
-case "$lt_target" in
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 1397 "configure"' > conftest.$ac_ext
-  if { (eval echo configure:1398: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-    case "`/usr/bin/file conftest.o`" in
+  echo '#line 3654 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
     *32-bit*)
       LD="${LD-ld} -32"
       ;;
@@ -1406,6 +3681,53 @@ case "$lt_target" in
       LD="${LD-ld} -64"
       ;;
     esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case "`/usr/bin/file conftest.o`" in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
   fi
   rm -rf conftest*
   ;;
@@ -1414,353 +3736,15746 @@ case "$lt_target" in
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
   SAVE_CFLAGS="$CFLAGS"
   CFLAGS="$CFLAGS -belf"
-  echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1419: checking whether the C compiler needs -belf" >&5
-if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1424 "configure"
-#include "confdefs.h"
-
-int main() {
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
 
-; return 0; }
-EOF
-if { (eval echo configure:1431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   lt_cv_cc_needs_belf=yes
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  lt_cv_cc_needs_belf=no
-fi
-rm -f conftest*
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
 fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
   if test x"$lt_cv_cc_needs_belf" != x"yes"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
 
-
 esac
 
+need_locks="$enable_libtool_lock"
 
-# Save cache, so that ltconfig can load it
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set | grep ac_space) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
   else
-    echo "not updating unwritable cache $cache_file"
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+  CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      : > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$F77"; then
+  ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+  echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$F77" && break
+  done
+fi
+if test -z "$F77"; then
+  ac_ct_F77=$F77
+  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_F77"; then
+  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_F77="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+  echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_F77" && break
+done
+
+  F77=$ac_ct_F77
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:5211:" \
+     "checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f77_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_f77_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_f77_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
+if test "$ac_test_FFLAGS" = set; then
+  FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-O2"
+  else
+    FFLAGS=
+  fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+ *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
+else
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDRT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  AR=$ac_ct_AR
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+#
+# Check for any special shared library compilation flags.
+#
+lt_prog_cc_shlib=
+if test "$GCC" = no; then
+  case $host_os in
+  sco3.2v5*)
+    lt_prog_cc_shlib='-belf'
+    ;;
+  esac
+fi
+if test -n "$lt_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | grep "[ 	]$lt_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+    { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6
+if test "${lt_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_prog_compiler_static"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+     else
+       lt_prog_compiler_static_works=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6243: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:6247: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic='-Kpic'
+      lt_prog_compiler_static='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6476: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:6480: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:6536: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:6540: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag=
+  enable_shared_with_static_runtimes=no
+  archive_cmds=
+  archive_expsym_cmds=
+  old_archive_From_new_cmds=
+  old_archive_from_expsyms_cmds=
+  export_dynamic_flag_spec=
+  whole_archive_flag_spec=
+  thread_safe_flag_spec=
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_direct=no
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  link_all_deplibs=unknown
+  hardcode_automatic=no
+  module_cmds=
+  module_expsym_cmds=
+  always_export_symbols=no
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds="$tmp_archive_cmds"
+      fi
+      link_all_deplibs=no
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L=yes
+  	  hardcode_libdir_flag_spec='-L$libdir'
+  	  hardcode_libdir_separator=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec=' '
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct=no
+      hardcode_automatic=yes
+      hardcode_shlibpath_var=unsupported
+      whole_archive_flag_spec='-all_load $convenience'
+      link_all_deplibs=yes
+    else
+      ld_shlibs=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld='+b $libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator=:
+	  hardcode_direct=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      link_all_deplibs=yes
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    openbsd*)
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      hardcode_shlibpath_var=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec=
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var " || \
+   test "X$hardcode_automatic"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 8712 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 8810 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# Report which librarie types wil actually be built
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+  darwin* | rhapsody*)
+  if test "$GCC" = yes; then
+    archive_cmds_need_lc=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    output_verbose_link_cmd='echo'
+    archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring'
+    module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag  -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct=no
+    hardcode_automatic=yes
+    hardcode_shlibpath_var=unsupported
+    whole_archive_flag_spec='-all_load $convenience'
+    link_all_deplibs=yes
+  else
+    ld_shlibs=no
+  fi
+    ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler \
+    CC \
+    LD \
+    lt_prog_compiler_wl \
+    lt_prog_compiler_pic \
+    lt_prog_compiler_static \
+    lt_prog_compiler_no_builtin_flag \
+    export_dynamic_flag_spec \
+    thread_safe_flag_spec \
+    whole_archive_flag_spec \
+    enable_shared_with_static_runtimes \
+    old_archive_cmds \
+    old_archive_from_new_cmds \
+    predep_objects \
+    postdep_objects \
+    predeps \
+    postdeps \
+    compiler_lib_search_path \
+    archive_cmds \
+    archive_expsym_cmds \
+    postinstall_cmds \
+    postuninstall_cmds \
+    old_archive_from_expsyms_cmds \
+    allow_undefined_flag \
+    no_undefined_flag \
+    export_symbols_cmds \
+    hardcode_libdir_flag_spec \
+    hardcode_libdir_flag_spec_ld \
+    hardcode_libdir_separator \
+    hardcode_automatic \
+    module_cmds \
+    module_expsym_cmds \
+    lt_cv_prog_compiler_c_o \
+    exclude_expsyms \
+    include_expsyms; do
+
+    case $var in
+    old_archive_cmds | \
+    old_archive_from_new_cmds | \
+    archive_cmds | \
+    archive_expsym_cmds | \
+    module_cmds | \
+    module_expsym_cmds | \
+    old_archive_from_expsyms_cmds | \
+    export_symbols_cmds | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+  cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags or --without-tags was given.
+if test "${with_tags+set}" = set; then
+  withval="$with_tags"
+  tagnames="$withval"
+fi;
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+    else
+      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+    fi
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+    "") ;;
+    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && test "X$CXX" != "Xno"; then
+	  ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+  lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec_CXX=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+ld_shlibs_CXX=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    archive_cmds_CXX=''
+    hardcode_direct_CXX=yes
+    hardcode_libdir_separator_CXX=':'
+    link_all_deplibs_CXX=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.012|aix4.012.*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct_CXX=yes
+	else
+	  # We have old collect2
+	  hardcode_direct_CXX=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_CXX=yes
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  hardcode_libdir_separator_CXX=
+	fi
+      esac
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    always_export_symbols_CXX=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag_CXX='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag_CXX="-z nodefs"
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	no_undefined_flag_CXX=' ${wl}-bernotok'
+	allow_undefined_flag_CXX=' ${wl}-berok'
+	# -bexpall does not export symbols beginning with underscore (_)
+	always_export_symbols_CXX=yes
+	# Exported symbols can be pulled into shared objects from archives
+	whole_archive_flag_spec_CXX=' '
+	archive_cmds_need_lc_CXX=yes
+	# This is similar to how AIX traditionally builds it's shared libraries.
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+    # as there is no search path for DLLs.
+    hardcode_libdir_flag_spec_CXX='-L$libdir'
+    allow_undefined_flag_CXX=unsupported
+    always_export_symbols_CXX=no
+    enable_shared_with_static_runtimes_CXX=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+    else
+      ld_shlibs_CXX=no
+    fi
+  ;;
+
+  darwin* | rhapsody*)
+  if test "$GXX" = yes; then
+    archive_cmds_need_lc_CXX=no
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag_CXX='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_CXX='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_CXX='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+      ;;
+    esac
+    lt_int_apple_cc_single_mod=no
+    output_verbose_link_cmd='echo'
+    if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+      lt_int_apple_cc_single_mod=yes
+    fi
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    else
+      archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    fi
+    module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+
+    # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+    if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+      archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    hardcode_direct_CXX=no
+    hardcode_automatic_CXX=yes
+    hardcode_shlibpath_var_CXX=unsupported
+    whole_archive_flag_spec_CXX='-all_load $convenience'
+    link_all_deplibs_CXX=yes
+  else
+    ld_shlibs_CXX=no
+  fi
+    ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      ghcx)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  freebsd12*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    ld_shlibs_CXX=no
+    ;;
+  freebsd-elf*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  freebsd* | kfreebsd*-gnu)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    ld_shlibs_CXX=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    export_dynamic_flag_spec_CXX='${wl}-E'
+    hardcode_direct_CXX=yes
+    hardcode_minus_L_CXX=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC)
+      # FIXME: insert proper C++ library support
+      ld_shlibs_CXX=no
+      ;;
+    aCC)
+      archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      case "$host_cpu" in
+      hppa*64*)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+	hardcode_libdir_separator_CXX=:
+        ;;
+      ia64*)
+	hardcode_libdir_flag_spec_CXX='-L$libdir'
+        ;;
+      *)
+	hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+	export_dynamic_flag_spec_CXX='${wl}-E'
+        ;;
+      esac
+    fi
+    case "$host_cpu" in
+    hppa*64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      ;;
+    ia64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    *)
+      hardcode_direct_CXX=yes
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      aCC)
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case "$host_cpu" in
+	    ia64*|hppa*64*)
+	      archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+	      ;;
+	    *)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC)
+	# SGI C++
+	archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+	  else
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	link_all_deplibs_CXX=yes
+	;;
+    esac
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc)
+	# Intel C++
+	with_gnu_ld=yes
+	archive_cmds_need_lc_CXX=no
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      cxx)
+	# Compaq C++
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  netbsd* | knetbsd*-gnu)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      hardcode_libdir_flag_spec_CXX='-R$libdir'
+      hardcode_direct_CXX=yes
+      hardcode_shlibpath_var_CXX=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	  archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+	;;
+      RCC)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx)
+	allow_undefined_flag_CXX=' -expect_unresolved \*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+	archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry $objdir/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  sco*)
+    archive_cmds_need_lc_CXX=no
+    case $cc_basename in
+      CC)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      lcc)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC)
+	# Sun C++ 4.2, 5.x and Centerline C++
+	no_undefined_flag_CXX=' -zdefs'
+	archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-R$libdir'
+	hardcode_shlibpath_var_CXX=no
+	case $host_os in
+	  solaris2.0-5 | solaris2.0-5.*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	link_all_deplibs_CXX=yes
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx)
+	# Green Hills C++ Compiler
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+esac
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+
+cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$rm -f confest.$objext
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+	    case "$host_cpu" in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  icpc)
+	    # Intel C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  cxx)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd* | knetbsd*-gnu)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      sco*)
+	case $cc_basename in
+	  CC)
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      unixware*)
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_CXX=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:10987: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:10991: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:11047: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:11051: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux*)
+    link_all_deplibs_CXX=no
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+
+echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+   test -n "$runpath_var CXX" || \
+   test "X$hardcode_automatic_CXX"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6
+
+if test "$hardcode_action_CXX" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 12404 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 12502 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_CXX \
+    CC_CXX \
+    LD_CXX \
+    lt_prog_compiler_wl_CXX \
+    lt_prog_compiler_pic_CXX \
+    lt_prog_compiler_static_CXX \
+    lt_prog_compiler_no_builtin_flag_CXX \
+    export_dynamic_flag_spec_CXX \
+    thread_safe_flag_spec_CXX \
+    whole_archive_flag_spec_CXX \
+    enable_shared_with_static_runtimes_CXX \
+    old_archive_cmds_CXX \
+    old_archive_from_new_cmds_CXX \
+    predep_objects_CXX \
+    postdep_objects_CXX \
+    predeps_CXX \
+    postdeps_CXX \
+    compiler_lib_search_path_CXX \
+    archive_cmds_CXX \
+    archive_expsym_cmds_CXX \
+    postinstall_cmds_CXX \
+    postuninstall_cmds_CXX \
+    old_archive_from_expsyms_cmds_CXX \
+    allow_undefined_flag_CXX \
+    no_undefined_flag_CXX \
+    export_symbols_cmds_CXX \
+    hardcode_libdir_flag_spec_CXX \
+    hardcode_libdir_flag_spec_ld_CXX \
+    hardcode_libdir_separator_CXX \
+    hardcode_automatic_CXX \
+    module_cmds_CXX \
+    module_expsym_cmds_CXX \
+    lt_cv_prog_compiler_c_o_CXX \
+    exclude_expsyms_CXX \
+    include_expsyms_CXX; do
+
+    case $var in
+    old_archive_cmds_CXX | \
+    old_archive_from_new_cmds_CXX | \
+    archive_cmds_CXX | \
+    archive_expsym_cmds_CXX | \
+    module_cmds_CXX | \
+    module_expsym_cmds_CXX | \
+    old_archive_from_expsyms_cmds_CXX | \
+    export_symbols_cmds_CXX | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  test "$enable_shared" = yes && enable_static=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_F77='-Wl,'
+    lt_prog_compiler_static_F77='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_F77=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      else
+	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_F77='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_F77='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_F77='-Kpic'
+      lt_prog_compiler_static_F77='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_F77='-Qoption ld '
+      lt_prog_compiler_pic_F77='-PIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_F77='-Kconform_pic'
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_F77='-pic'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_F77=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_F77"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13329: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:13333: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_F77=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+    case $lt_prog_compiler_pic_F77 in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+     esac
+else
+    lt_prog_compiler_pic_F77=
+     lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_F77=
+    ;;
+  *)
+    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13389: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:13393: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_F77=
+  enable_shared_with_static_runtimes_F77=no
+  archive_cmds_F77=
+  archive_expsym_cmds_F77=
+  old_archive_From_new_cmds_F77=
+  old_archive_from_expsyms_cmds_F77=
+  export_dynamic_flag_spec_F77=
+  whole_archive_flag_spec_F77=
+  thread_safe_flag_spec_F77=
+  hardcode_libdir_flag_spec_F77=
+  hardcode_libdir_flag_spec_ld_F77=
+  hardcode_libdir_separator_F77=
+  hardcode_direct_F77=no
+  hardcode_minus_L_F77=no
+  hardcode_shlibpath_var_F77=unsupported
+  link_all_deplibs_F77=unknown
+  hardcode_automatic_F77=no
+  module_cmds_F77=
+  module_expsym_cmds_F77=
+  always_export_symbols_F77=no
+  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_F77=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_F77=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_F77=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_F77=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=no
+      enable_shared_with_static_runtimes_F77=yes
+      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds_F77="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds_F77="$tmp_archive_cmds"
+      fi
+      link_all_deplibs_F77=no
+    else
+      ld_shlibs_F77=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_F77" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_F77=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=yes
+      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_F77=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_F77=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_F77=''
+      hardcode_direct_F77=yes
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_F77=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_F77=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_F77=yes
+  	  hardcode_libdir_flag_spec_F77='-L$libdir'
+  	  hardcode_libdir_separator_F77=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_F77=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_F77='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_F77="-z nodefs"
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_F77=' ${wl}-bernotok'
+	  allow_undefined_flag_F77=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_F77=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_F77=' '
+	  archive_cmds_need_lc_F77=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_F77=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_F77=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_F77=' '
+      allow_undefined_flag_F77=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_F77='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc_F77=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_F77='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_F77='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_F77='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_F77=no
+      hardcode_automatic_F77=yes
+      hardcode_shlibpath_var_F77=unsupported
+      whole_archive_flag_spec_F77='-all_load $convenience'
+      link_all_deplibs_F77=yes
+    else
+      ld_shlibs_F77=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_F77=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_direct_F77=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_F77=yes
+      export_dynamic_flag_spec_F77='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_F77='-L$libdir'
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_F77=:
+	  hardcode_direct_F77=yes
+	  export_dynamic_flag_spec_F77='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      link_all_deplibs_F77=yes
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    newsos6)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_F77='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_F77='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_F77=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_shlibpath_var_F77=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_F77=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_F77='$CC -r -o $output$reload_objs'
+	  hardcode_direct_F77=no
+        ;;
+	motorola)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_F77=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_F77=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_F77='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_F77=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec_F77=
+      hardcode_shlibpath_var_F77=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      ld_shlibs_F77=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_F77=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_F77 in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_F77
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+        allow_undefined_flag_F77=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_F77=no
+        else
+	  archive_cmds_need_lc_F77=yes
+        fi
+        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+   test -n "$runpath_var F77" || \
+   test "X$hardcode_automatic_F77"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_F77" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+     test "$hardcode_minus_L_F77" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_F77=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_F77=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_F77=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6
+
+if test "$hardcode_action_F77" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_F77 \
+    CC_F77 \
+    LD_F77 \
+    lt_prog_compiler_wl_F77 \
+    lt_prog_compiler_pic_F77 \
+    lt_prog_compiler_static_F77 \
+    lt_prog_compiler_no_builtin_flag_F77 \
+    export_dynamic_flag_spec_F77 \
+    thread_safe_flag_spec_F77 \
+    whole_archive_flag_spec_F77 \
+    enable_shared_with_static_runtimes_F77 \
+    old_archive_cmds_F77 \
+    old_archive_from_new_cmds_F77 \
+    predep_objects_F77 \
+    postdep_objects_F77 \
+    predeps_F77 \
+    postdeps_F77 \
+    compiler_lib_search_path_F77 \
+    archive_cmds_F77 \
+    archive_expsym_cmds_F77 \
+    postinstall_cmds_F77 \
+    postuninstall_cmds_F77 \
+    old_archive_from_expsyms_cmds_F77 \
+    allow_undefined_flag_F77 \
+    no_undefined_flag_F77 \
+    export_symbols_cmds_F77 \
+    hardcode_libdir_flag_spec_F77 \
+    hardcode_libdir_flag_spec_ld_F77 \
+    hardcode_libdir_separator_F77 \
+    hardcode_automatic_F77 \
+    module_cmds_F77 \
+    module_expsym_cmds_F77 \
+    lt_cv_prog_compiler_c_o_F77 \
+    exclude_expsyms_F77 \
+    include_expsyms_F77; do
+
+    case $var in
+    old_archive_cmds_F77 | \
+    old_archive_from_new_cmds_F77 | \
+    archive_cmds_F77 | \
+    archive_expsym_cmds_F77 | \
+    module_cmds_F77 | \
+    module_expsym_cmds_F77 | \
+    old_archive_from_expsyms_cmds_F77 | \
+    export_symbols_cmds_F77 | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
+
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+
+echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15422: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15426: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_GCJ='-Wl,'
+    lt_prog_compiler_static_GCJ='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_GCJ='-fno-common'
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_GCJ=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_GCJ=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_GCJ='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      else
+	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case "$host_cpu" in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    linux*)
+      case $CC in
+      icc* | ecc*)
+	lt_prog_compiler_wl_GCJ='-Wl,'
+	lt_prog_compiler_pic_GCJ='-KPIC'
+	lt_prog_compiler_static_GCJ='-static'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_GCJ='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_GCJ='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_prog_compiler_pic_GCJ='-Kpic'
+      lt_prog_compiler_static_GCJ='-dn'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_GCJ='-Qoption ld '
+      lt_prog_compiler_pic_GCJ='-PIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_GCJ='-Kconform_pic'
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_GCJ='-pic'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+
+echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_GCJ=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15655: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:15659: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s conftest.err; then
+       lt_prog_compiler_pic_works_GCJ=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+    case $lt_prog_compiler_pic_GCJ in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+     esac
+else
+    lt_prog_compiler_pic_GCJ=
+     lt_prog_compiler_can_build_shared_GCJ=no
+fi
+
+fi
+case "$host_os" in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_GCJ=
+    ;;
+  *)
+    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_GCJ=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:15715: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:15719: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test ! -s out/conftest.err; then
+       lt_cv_prog_compiler_c_o_GCJ=yes
+     fi
+   fi
+   chmod u+w .
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+  runpath_var=
+  allow_undefined_flag_GCJ=
+  enable_shared_with_static_runtimes_GCJ=no
+  archive_cmds_GCJ=
+  archive_expsym_cmds_GCJ=
+  old_archive_From_new_cmds_GCJ=
+  old_archive_from_expsyms_cmds_GCJ=
+  export_dynamic_flag_spec_GCJ=
+  whole_archive_flag_spec_GCJ=
+  thread_safe_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_ld_GCJ=
+  hardcode_libdir_separator_GCJ=
+  hardcode_direct_GCJ=no
+  hardcode_minus_L_GCJ=no
+  hardcode_shlibpath_var_GCJ=unsupported
+  link_all_deplibs_GCJ=unknown
+  hardcode_automatic_GCJ=no
+  module_cmds_GCJ=
+  module_expsym_cmds_GCJ=
+  always_export_symbols_GCJ=no
+  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_GCJ=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_GCJ=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_GCJ=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_GCJ=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=no
+      enable_shared_with_static_runtimes_GCJ=yes
+      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000  ${wl}--out-implib,$lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    sunos4*)
+      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+  linux*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_cmds_GCJ="$tmp_archive_cmds"
+      supports_anon_versioning=no
+      case `$LD -v 2>/dev/null` in
+        *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+        *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+        *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+        *\ 2.11.*) ;; # other 2.11 versions
+        *) supports_anon_versioning=yes ;;
+      esac
+      if test $supports_anon_versioning = yes; then
+        archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+$echo "local: *; };" >> $output_objdir/$libname.ver~
+        $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+      else
+        archive_expsym_cmds_GCJ="$tmp_archive_cmds"
+      fi
+      link_all_deplibs_GCJ=no
+    else
+      ld_shlibs_GCJ=no
+    fi
+    ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_GCJ" = yes; then
+      runpath_var=LD_RUN_PATH
+      hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+      export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ 	whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_GCJ=
+      fi
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=yes
+      archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_GCJ=yes
+      if test "$GCC" = yes && test -z "$link_static_flag"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_GCJ=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_GCJ=''
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_separator_GCJ=':'
+      link_all_deplibs_GCJ=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.012|aix4.012.*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_GCJ=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_GCJ=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_GCJ=yes
+  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+  	  hardcode_libdir_separator_GCJ=
+	  fi
+	esac
+	shared_flag='-shared'
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+  	if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+  	fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_GCJ=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_GCJ='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_GCJ="-z nodefs"
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_GCJ=' ${wl}-bernotok'
+	  allow_undefined_flag_GCJ=' ${wl}-berok'
+	  # -bexpall does not export symbols beginning with underscore (_)
+	  always_export_symbols_GCJ=yes
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_GCJ=' '
+	  archive_cmds_need_lc_GCJ=yes
+	  # This is similar to how AIX traditionally builds it's shared libraries.
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_GCJ=no
+      ;;
+
+    bsdi4*)
+      export_dynamic_flag_spec_GCJ=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ=' '
+      allow_undefined_flag_GCJ=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_GCJ='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_GCJ=yes
+      ;;
+
+    darwin* | rhapsody*)
+    if test "$GXX" = yes ; then
+      archive_cmds_need_lc_GCJ=no
+      case "$host_os" in
+      rhapsody* | darwin1.[012])
+	allow_undefined_flag_GCJ='-undefined suppress'
+	;;
+      *) # Darwin 1.3 on
+      if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+      	allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+      else
+        case ${MACOSX_DEPLOYMENT_TARGET} in
+          10.[012])
+            allow_undefined_flag_GCJ='-flat_namespace -undefined suppress'
+            ;;
+          10.*)
+            allow_undefined_flag_GCJ='-undefined dynamic_lookup'
+            ;;
+        esac
+      fi
+	;;
+      esac
+    	lt_int_apple_cc_single_mod=no
+    	output_verbose_link_cmd='echo'
+    	if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+    	  lt_int_apple_cc_single_mod=yes
+    	fi
+    	if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+    	  archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+    	else
+        archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      fi
+      module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+        if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        else
+          archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        fi
+          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      hardcode_direct_GCJ=no
+      hardcode_automatic_GCJ=yes
+      hardcode_shlibpath_var_GCJ=unsupported
+      whole_archive_flag_spec_GCJ='-all_load $convenience'
+      link_all_deplibs_GCJ=yes
+    else
+      ld_shlibs_GCJ=no
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_GCJ=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu)
+      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_direct_GCJ=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_GCJ=yes
+      export_dynamic_flag_spec_GCJ='${wl}-E'
+      ;;
+
+    hpux10* | hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case "$host_cpu" in
+	hppa*64*|ia64*)
+	  archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	case "$host_cpu" in
+	hppa*64*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+	  ;;
+	ia64*)
+	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	*)
+	  hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	  hardcode_libdir_separator_GCJ=:
+	  hardcode_direct_GCJ=yes
+	  export_dynamic_flag_spec_GCJ='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    netbsd* | knetbsd*-gnu)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    newsos6)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_GCJ='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      allow_undefined_flag_GCJ=unsupported
+      archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    sco3.2v5*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ;;
+
+    solaris*)
+      no_undefined_flag_GCJ=' -z text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+	whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+      esac
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+	  hardcode_direct_GCJ=no
+        ;;
+	motorola)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_GCJ=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_GCJ=yes
+      fi
+      ;;
+
+    sysv4.2uw2*)
+      archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      hardcode_runpath_var=yes
+      runpath_var=LD_RUN_PATH
+      ;;
+
+   sysv5OpenUNIX8* | sysv5UnixWare7* |  sysv5uw[78]* | unixware7*)
+      no_undefined_flag_GCJ='${wl}-z ${wl}text'
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv5*)
+      no_undefined_flag_GCJ=' -z text'
+      # $CC -shared without GNU ld will not create a library from C++
+      # object files and a static libstdc++, better avoid it by now
+      archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      hardcode_libdir_flag_spec_GCJ=
+      hardcode_shlibpath_var_GCJ=no
+      runpath_var='LD_RUN_PATH'
+      ;;
+
+    uts4*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      ld_shlibs_GCJ=no
+      ;;
+    esac
+  fi
+
+echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_GCJ=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_GCJ in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_GCJ
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+        allow_undefined_flag_GCJ=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_GCJ=no
+        else
+	  archive_cmds_need_lc_GCJ=yes
+        fi
+        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.01* | freebsdelf3.01*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  *) # from 3.2 on
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case "$host_cpu" in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=yes
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+   test -n "$runpath_var GCJ" || \
+   test "X$hardcode_automatic_GCJ"="Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_GCJ" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+     test "$hardcode_minus_L_GCJ" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_GCJ=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_GCJ=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_GCJ=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6
+
+if test "$hardcode_action_GCJ" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+       else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+       ;;
+   *)
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 17891 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 17989 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_GCJ \
+    CC_GCJ \
+    LD_GCJ \
+    lt_prog_compiler_wl_GCJ \
+    lt_prog_compiler_pic_GCJ \
+    lt_prog_compiler_static_GCJ \
+    lt_prog_compiler_no_builtin_flag_GCJ \
+    export_dynamic_flag_spec_GCJ \
+    thread_safe_flag_spec_GCJ \
+    whole_archive_flag_spec_GCJ \
+    enable_shared_with_static_runtimes_GCJ \
+    old_archive_cmds_GCJ \
+    old_archive_from_new_cmds_GCJ \
+    predep_objects_GCJ \
+    postdep_objects_GCJ \
+    predeps_GCJ \
+    postdeps_GCJ \
+    compiler_lib_search_path_GCJ \
+    archive_cmds_GCJ \
+    archive_expsym_cmds_GCJ \
+    postinstall_cmds_GCJ \
+    postuninstall_cmds_GCJ \
+    old_archive_from_expsyms_cmds_GCJ \
+    allow_undefined_flag_GCJ \
+    no_undefined_flag_GCJ \
+    export_symbols_cmds_GCJ \
+    hardcode_libdir_flag_spec_GCJ \
+    hardcode_libdir_flag_spec_ld_GCJ \
+    hardcode_libdir_separator_GCJ \
+    hardcode_automatic_GCJ \
+    module_cmds_GCJ \
+    module_expsym_cmds_GCJ \
+    lt_cv_prog_compiler_c_o_GCJ \
+    exclude_expsyms_GCJ \
+    include_expsyms_GCJ; do
+
+    case $var in
+    old_archive_cmds_GCJ | \
+    old_archive_from_new_cmds_GCJ | \
+    archive_cmds_GCJ | \
+    archive_expsym_cmds_GCJ | \
+    module_cmds_GCJ | \
+    module_expsym_cmds_GCJ | \
+    old_archive_from_expsyms_cmds_GCJ | \
+    export_symbols_cmds_GCJ | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
   fi
 fi
-rm -f confcache
 
 
-# Actually configure libtool.  ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
-LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
-DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
-|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_RC \
+    CC_RC \
+    LD_RC \
+    lt_prog_compiler_wl_RC \
+    lt_prog_compiler_pic_RC \
+    lt_prog_compiler_static_RC \
+    lt_prog_compiler_no_builtin_flag_RC \
+    export_dynamic_flag_spec_RC \
+    thread_safe_flag_spec_RC \
+    whole_archive_flag_spec_RC \
+    enable_shared_with_static_runtimes_RC \
+    old_archive_cmds_RC \
+    old_archive_from_new_cmds_RC \
+    predep_objects_RC \
+    postdep_objects_RC \
+    predeps_RC \
+    postdeps_RC \
+    compiler_lib_search_path_RC \
+    archive_cmds_RC \
+    archive_expsym_cmds_RC \
+    postinstall_cmds_RC \
+    postuninstall_cmds_RC \
+    old_archive_from_expsyms_cmds_RC \
+    allow_undefined_flag_RC \
+    no_undefined_flag_RC \
+    export_symbols_cmds_RC \
+    hardcode_libdir_flag_spec_RC \
+    hardcode_libdir_flag_spec_ld_RC \
+    hardcode_libdir_separator_RC \
+    hardcode_automatic_RC \
+    module_cmds_RC \
+    module_expsym_cmds_RC \
+    lt_cv_prog_compiler_c_o_RC \
+    exclude_expsyms_RC \
+    include_expsyms_RC; do
+
+    case $var in
+    old_archive_cmds_RC | \
+    old_archive_from_new_cmds_RC | \
+    archive_cmds_RC | \
+    archive_expsym_cmds_RC | \
+    module_cmds_RC | \
+    module_expsym_cmds_RC | \
+    old_archive_from_expsyms_cmds_RC | \
+    export_symbols_cmds_RC | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
 
-# Reload cache, that may have been modified by ltconfig
-if test -r "$cache_file"; then
-  echo "loading cache $cache_file"
-  . $cache_file
 else
-  echo "creating cache $cache_file"
-  > $cache_file
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	;;
+
+      *)
+	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
 fi
 
 
+
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 
-echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:1534: checking whether to enable maintainer-specific portions of Makefiles" >&5
-    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then
-  enableval="$enable_maintainer_mode"
-  USE_MAINTAINER_MODE=$enableval
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval="$enable_maintainer_mode"
+  USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi;
+  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  USE_MAINTAINER_MODE=no
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-  echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
-  
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
 
-if test $USE_MAINTAINER_MODE = yes; then
-  MAINTAINER_MODE_TRUE=
-  MAINTAINER_MODE_FALSE='#'
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
 else
-  MAINTAINER_MODE_TRUE='#'
-  MAINTAINER_MODE_FALSE=
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
-  MAINT=$MAINTAINER_MODE_TRUE
-  
 
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
 
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1560: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="gcc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
 else
-  echo "$ac_t""no" 1>&6
+  CC="$ac_cv_prog_CC"
 fi
 
+fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1590: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
   ac_prog_rejected=no
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
-        ac_prog_rejected=yes
-	continue
-      fi
-      ac_cv_prog_CC="cc"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 if test $ac_prog_rejected = yes; then
   # We found a bogon in the path, so make sure we never use it.
   set dummy $ac_cv_prog_CC
   shift
-  if test $# -gt 0; then
+  if test $# != 0; then
     # We chose a different compiler from the bogus one.
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    set dummy "$ac_dir/$ac_word" "$@"
-    shift
-    ac_cv_prog_CC="$@"
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
   fi
 fi
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-  if test -z "$CC"; then
-    case "`uname -s`" in
-    *win32* | *WIN32*)
-      # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1641: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_CC="cl"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 fi
 fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$ac_t""$CC" 1>&6
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
 else
-  echo "$ac_t""no" 1>&6
-fi
- ;;
-    esac
-  fi
-  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1673: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
 
-cat > conftest.$ac_ext << EOF
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
 
-#line 1684 "configure"
-#include "confdefs.h"
+  test -n "$ac_ct_CC" && break
+done
 
-main(){return(0);}
-EOF
-if { (eval echo configure:1689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  ac_cv_prog_cc_works=yes
-  # If we can't run a trivial program, we are probably using a cross compiler.
-  if (./conftest; exit) 2>/dev/null; then
-    ac_cv_prog_cc_cross=no
-  else
-    ac_cv_prog_cc_cross=yes
-  fi
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_prog_cc_works=no
+  CC=$ac_ct_CC
 fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
 
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
-  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1715: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
 
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1720: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
 #endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1729: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-  ac_cv_prog_gcc=yes
-else
-  ac_cv_prog_gcc=no
-fi
-fi
 
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
-
-if test $ac_cv_prog_gcc = yes; then
-  GCC=yes
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
 else
-  GCC=
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
 fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1748: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_prog_cc_g=yes
 else
-  ac_cv_prog_cc_g=no
-fi
-rm -f conftest*
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+ac_cv_prog_cc_g=no
 fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
 if test "$ac_test_CFLAGS" = set; then
-  CFLAGS="$ac_save_CFLAGS"
+  CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
     CFLAGS="-g -O2"
@@ -1774,6 +19489,367 @@ else
     CFLAGS=
   fi
 fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      : > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
 
 
 if test x$GCC = xyes ; then
@@ -1782,179 +19858,183 @@ fi
 
 for ac_prog in gawk mawk nawk awk
 do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1789: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test -n "$AWK"; then
   ac_cv_prog_AWK="$AWK" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_prog_AWK="$ac_prog"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
 fi
 fi
-AWK="$ac_cv_prog_AWK"
+AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  echo "$ac_t""$AWK" 1>&6
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-test -n "$AWK" && break
+  test -n "$AWK" && break
 done
 
-echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:1819: checking for POSIXized ISC" >&5
-if test -d /etc/conf/kconfig.d &&
-  grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
-then
-  echo "$ac_t""yes" 1>&6
-  ISC=yes # If later tests want to check for ISC.
-  cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
 
-  if test "$GCC" = yes; then
-    CC="$CC -posix"
-  else
-    CC="$CC -Xp"
-  fi
+        echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
+echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6
+if test "${ac_cv_lib_cposix_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo "$ac_t""no" 1>&6
-  ISC=
-fi
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcposix  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1840: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-    # This must be in double quotes, not single quotes, because CPP may get
-  # substituted into the Makefile and "${CC-cc}" will confuse make.
-  CPP="${CC-cc} -E"
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp.
-  cat > conftest.$ac_ext <<EOF
-#line 1855 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1861: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -E -traditional-cpp"
-  cat > conftest.$ac_ext <<EOF
-#line 1872 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP="${CC-cc} -nologo -E"
-  cat > conftest.$ac_ext <<EOF
-#line 1889 "configure"
-#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  :
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  CPP=/lib/cpp
-fi
-rm -f conftest*
-fi
-rm -f conftest*
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_cposix_strerror=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_cposix_strerror=no
 fi
-rm -f conftest*
-  ac_cv_prog_CPP="$CPP"
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-  CPP="$ac_cv_prog_CPP"
-else
-  ac_cv_prog_CPP="$CPP"
+echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
+echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6
+if test $ac_cv_lib_cposix_strerror = yes; then
+  LIBS="$LIBS -lcposix"
 fi
-echo "$ac_t""$CPP" 1>&6
 
-echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1920: checking for ANSI C header files" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1925 "configure"
-#include "confdefs.h"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 #include <stdlib.h>
 #include <stdarg.h>
 #include <string.h>
 #include <float.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1933: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   ac_cv_header_stdc=yes
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  ac_cv_header_stdc=no
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1950 "configure"
-#include "confdefs.h"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 #include <string.h>
-EOF
+
+_ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "memchr" >/dev/null 2>&1; then
+  $EGREP "memchr" >/dev/null 2>&1; then
   :
 else
-  rm -rf conftest*
   ac_cv_header_stdc=no
 fi
 rm -f conftest*
@@ -1963,16 +20043,19 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-cat > conftest.$ac_ext <<EOF
-#line 1968 "configure"
-#include "confdefs.h"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 #include <stdlib.h>
-EOF
+
+_ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "free" >/dev/null 2>&1; then
+  $EGREP "free" >/dev/null 2>&1; then
   :
 else
-  rm -rf conftest*
   ac_cv_header_stdc=no
 fi
 rm -f conftest*
@@ -1981,79 +20064,503 @@ fi
 
 if test $ac_cv_header_stdc = yes; then
   # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-if test "$cross_compiling" = yes; then
+  if test "$cross_compiling" = yes; then
   :
 else
-  cat > conftest.$ac_ext <<EOF
-#line 1989 "configure"
-#include "confdefs.h"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 #include <ctype.h>
-#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int main () { int i; for (i = 0; i < 256; i++)
-if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
-exit (0); }
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
 
-EOF
-if { (eval echo configure:2000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   :
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  ac_cv_header_stdc=no
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
 fi
-rm -fr conftest*
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-
 fi
 fi
-
-echo "$ac_t""$ac_cv_header_stdc" 1>&6
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
 if test $ac_cv_header_stdc = yes; then
-  cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
 #define STDC_HEADERS 1
-EOF
+_ACEOF
 
 fi
 
-if test "$program_transform_name" = s,x,x,; then
-  program_transform_name=
+
+echo "$as_me:$LINENO: checking for pgm_init in -lnetpbm" >&5
+echo $ECHO_N "checking for pgm_init in -lnetpbm... $ECHO_C" >&6
+if test "${ac_cv_lib_netpbm_pgm_init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  # Double any \ or $.  echo might interpret backslashes.
-  cat <<\EOF_SED > conftestsed
-s,\\,\\\\,g; s,\$,$$,g
-EOF_SED
-  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
-  rm -f conftestsed
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnetpbm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char pgm_init ();
+int
+main ()
+{
+pgm_init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_netpbm_pgm_init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_netpbm_pgm_init=no
 fi
-test "$program_prefix" != NONE &&
-  program_transform_name="s,^,${program_prefix},; $program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_netpbm_pgm_init" >&5
+echo "${ECHO_T}$ac_cv_lib_netpbm_pgm_init" >&6
+if test $ac_cv_lib_netpbm_pgm_init = yes; then
+  netpbm="true"
+else
+  { echo "$as_me:$LINENO: WARNING: libnetpbm not found. Some programs will not be available." >&5
+echo "$as_me: WARNING: libnetpbm not found. Some programs will not be available." >&2;}
+fi
+
+
+
+if test x$netpbm = xtrue; then
+  HAS_NETPBM_TRUE=
+  HAS_NETPBM_FALSE='#'
+else
+  HAS_NETPBM_TRUE='#'
+  HAS_NETPBM_FALSE=
+fi
+
+
+# Check whether --enable-glibtest or --disable-glibtest was given.
+if test "${enable_glibtest+set}" = set; then
+  enableval="$enable_glibtest"
+
+else
+  enable_glibtest=yes
+fi;
+
+  pkg_config_args=glib-2.0
+  for module in . gthread gmodule
+  do
+      case "$module" in
+         gmodule)
+             pkg_config_args="$pkg_config_args gmodule-2.0"
+         ;;
+         gobject)
+             pkg_config_args="$pkg_config_args gobject-2.0"
+         ;;
+         gthread)
+             pkg_config_args="$pkg_config_args gthread-2.0"
+         ;;
+      esac
+  done
+
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+
+if test -n "$PKG_CONFIG"; then
+  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+  no_glib=""
+
+  if test x$PKG_CONFIG != xno ; then
+    if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
+      :
+    else
+      echo *** pkg-config too old; version 0.7 or better required.
+      no_glib=yes
+      PKG_CONFIG=no
+    fi
+  else
+    no_glib=yes
+  fi
+
+  min_glib_version=2.4.0
+  echo "$as_me:$LINENO: checking for GLIB - version >= $min_glib_version" >&5
+echo $ECHO_N "checking for GLIB - version >= $min_glib_version... $ECHO_C" >&6
+
+  if test x$PKG_CONFIG != xno ; then
+    ## don't try to run the test against uninstalled libtool libs
+    if $PKG_CONFIG --uninstalled $pkg_config_args; then
+	  echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
+	  enable_glibtest=no
+    fi
+
+    if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
+	  :
+    else
+	  no_glib=yes
+    fi
+  fi
+
+  if test x"$no_glib" = x ; then
+    GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
+    GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
+    GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+
+    GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
+    GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
+    glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+    glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+    glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+    if test "x$enable_glibtest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $GLIB_CFLAGS"
+      LIBS="$GLIB_LIBS $LIBS"
+      rm -f conf.glibtest
+      if test "$cross_compiling" = yes; then
+  echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.glibtest");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = g_strdup("$min_glib_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_glib_version");
+     exit(1);
+   }
+
+  if ((glib_major_version != $glib_config_major_version) ||
+      (glib_minor_version != $glib_config_minor_version) ||
+      (glib_micro_version != $glib_config_micro_version))
+    {
+      printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
+             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
+             glib_major_version, glib_minor_version, glib_micro_version);
+      printf ("*** was found! If pkg-config was correct, then it is best\n");
+      printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
+      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+      printf("*** required on your system.\n");
+      printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
+      printf("*** to point to the correct configuration files\n");
+    }
+  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
+	   (glib_minor_version != GLIB_MINOR_VERSION) ||
+           (glib_micro_version != GLIB_MICRO_VERSION))
+    {
+      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
+	     GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+      printf("*** library (version %d.%d.%d)\n",
+	     glib_major_version, glib_minor_version, glib_micro_version);
+    }
+  else
+    {
+      if ((glib_major_version > major) ||
+        ((glib_major_version == major) && (glib_minor_version > minor)) ||
+        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
+      {
+        return 0;
+       }
+     else
+      {
+        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
+               glib_major_version, glib_minor_version, glib_micro_version);
+        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
+	       major, minor, micro);
+        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
+        printf("***\n");
+        printf("*** If you have already installed a sufficiently new version, this error\n");
+        printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
+        printf("*** being found. The easiest way to fix this is to remove the old version\n");
+        printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
+        printf("*** correct copy of pkg-config. (In this case, you will have to\n");
+        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+        printf("*** so that the correct libraries are found at run-time))\n");
+      }
+    }
+  return 1;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+no_glib=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_glib" = x ; then
+     echo "$as_me:$LINENO: result: yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&5
+echo "${ECHO_T}yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version)" >&6
+     has_glib2=yes
+  else
+     echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+     if test "$PKG_CONFIG" = "no" ; then
+       echo "*** A new enough version of pkg-config was not found."
+       echo "*** See http://www.freedesktop.org/software/pkgconfig/"
+     else
+       if test -f conf.glibtest ; then
+        :
+       else
+          echo "*** Could not run GLIB test program, checking why..."
+          ac_save_CFLAGS="$CFLAGS"
+          ac_save_LIBS="$LIBS"
+          CFLAGS="$CFLAGS $GLIB_CFLAGS"
+          LIBS="$LIBS $GLIB_LIBS"
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
-# sed with no file args requires a program.
-test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+#include <glib.h>
+#include <stdio.h>
 
+int
+main ()
+{
+ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version));
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+   echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
+          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+	  echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-if test x$with_glib = xyes ; then
-  { echo "configure: error: 
-*** Directory must be specified for --with-glib" 1>&2; exit 1; }
+ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means GLIB is incorrectly installed."
 fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     GLIB_CFLAGS=""
+     GLIB_LIBS=""
+     GLIB_GENMARSHAL=""
+     GOBJECT_QUERY=""
+     GLIB_MKENUMS=""
+     has_glib2=no
+  fi
+
+
+
+
+
+  rm -f conf.glibtest
+
+if test x$has_glib2 = xyes; then
+  glib_cflags=`$PKG_CONFIG glib-2.0 --cflags`
+  glib_thread_cflags=`$PKG_CONFIG glib-2.0 --cflags gthread-2.0`
+  glib_module_cflags=`$PKG_CONFIG glib-2.0 --cflags gmodule-2.0`
+  glib_libs=`$PKG_CONFIG glib-2.0 --libs`
+  glib_thread_libs=`$PKG_CONFIG glib-2.0 --libs gthread-2.0`
+  glib_module_libs=`$PKG_CONFIG glib-2.0 --libs gmodule-2.0`
+  GLIB_LIBS="$glib_libs"
+  GLIB_DEPLIBS="$glib_libs"
+else
+  if test x$with_glib = xyes ; then
+    { { echo "$as_me:$LINENO: error:
+*** Directory must be specified for --with-glib" >&5
+echo "$as_me: error:
+*** Directory must be specified for --with-glib" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+  if test x$with_glib = x ; then
+    # Look for separately installed glib
 
-if test x$with_glib = x ; then 
-  # Look for separately installed glib
+    GLIB_REQUIRED_VERSION=1.2.8
 
-  # Check whether --with-glib-prefix or --without-glib-prefix was given.
+# Check whether --with-glib-prefix or --without-glib-prefix was given.
 if test "${with_glib_prefix+set}" = set; then
   withval="$with_glib_prefix"
   glib_config_prefix="$withval"
 else
   glib_config_prefix=""
-fi
+fi;
 
 # Check whether --with-glib-exec-prefix or --without-glib-exec-prefix was given.
 if test "${with_glib_exec_prefix+set}" = set; then
@@ -2061,16 +20568,14 @@ if test "${with_glib_exec_prefix+set}" = set; then
   glib_config_exec_prefix="$withval"
 else
   glib_config_exec_prefix=""
-fi
-
+fi;
 # Check whether --enable-glibtest or --disable-glibtest was given.
 if test "${enable_glibtest+set}" = set; then
   enableval="$enable_glibtest"
-  :
+
 else
   enable_glibtest=yes
-fi
-
+fi;
 
   if test x$glib_config_exec_prefix != x ; then
      glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix"
@@ -2088,10 +20593,10 @@ fi
   for module in . gmodule gthread
   do
       case "$module" in
-         gmodule) 
+         gmodule)
              glib_config_args="$glib_config_args gmodule"
          ;;
-         gthread) 
+         gthread)
              glib_config_args="$glib_config_args gthread"
          ;;
       esac
@@ -2099,43 +20604,47 @@ fi
 
   # Extract the first word of "glib-config", so it can be a program name with args.
 set dummy glib-config; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2104: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_GLIB_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  case "$GLIB_CONFIG" in
-  /*)
+  case $GLIB_CONFIG in
+  [\\/]* | ?:[\\/]*)
   ac_cv_path_GLIB_CONFIG="$GLIB_CONFIG" # Let the user override the test with a path.
   ;;
-  ?:/*)			 
-  ac_cv_path_GLIB_CONFIG="$GLIB_CONFIG" # Let the user override the test with a dos path.
-  ;;
   *)
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do 
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_path_GLIB_CONFIG="$ac_dir/$ac_word"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_GLIB_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
   test -z "$ac_cv_path_GLIB_CONFIG" && ac_cv_path_GLIB_CONFIG="no"
   ;;
 esac
 fi
-GLIB_CONFIG="$ac_cv_path_GLIB_CONFIG"
+GLIB_CONFIG=$ac_cv_path_GLIB_CONFIG
+
 if test -n "$GLIB_CONFIG"; then
-  echo "$ac_t""$GLIB_CONFIG" 1>&6
+  echo "$as_me:$LINENO: result: $GLIB_CONFIG" >&5
+echo "${ECHO_T}$GLIB_CONFIG" >&6
 else
-  echo "$ac_t""no" 1>&6
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 fi
 
-  min_glib_version=1.2.0
-  echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
-echo "configure:2139: checking for GLIB - version >= $min_glib_version" >&5
+  min_glib_version=$GLIB_REQUIRED_VERSION
+  echo "$as_me:$LINENO: checking for GLIB - version >= $min_glib_version" >&5
+echo $ECHO_N "checking for GLIB - version >= $min_glib_version... $ECHO_C" >&6
   no_glib=""
   if test "$GLIB_CONFIG" = "no" ; then
     no_glib=yes
@@ -2157,15 +20666,18 @@ echo "configure:2139: checking for GLIB - version >= $min_glib_version" >&5
       if test "$cross_compiling" = yes; then
   echo $ac_n "cross compiling; assumed OK... $ac_c"
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2162 "configure"
-#include "confdefs.h"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
 #include <glib.h>
 #include <stdio.h>
 #include <stdlib.h>
 
-int 
+int
 main ()
 {
   int major, minor, micro;
@@ -2184,7 +20696,7 @@ main ()
       (glib_minor_version != $glib_config_minor_version) ||
       (glib_micro_version != $glib_config_micro_version))
     {
-      printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
+      printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
              $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
              glib_major_version, glib_minor_version, glib_micro_version);
       printf ("*** was found! If glib-config was correct, then it is best\n");
@@ -2195,7 +20707,7 @@ main ()
       printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n");
       printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n");
       printf("*** before re-running configure\n");
-    } 
+    }
   else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
 	   (glib_minor_version != GLIB_MINOR_VERSION) ||
            (glib_micro_version != GLIB_MICRO_VERSION))
@@ -2233,28 +20745,40 @@ main ()
   return 1;
 }
 
-EOF
-if { (eval echo configure:2238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
   :
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  no_glib=yes
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+no_glib=yes
 fi
-rm -fr conftest*
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 fi
-
        CFLAGS="$ac_save_CFLAGS"
        LIBS="$ac_save_LIBS"
      fi
   fi
   if test "x$no_glib" = x ; then
-     echo "$ac_t""yes" 1>&6
-     :     
+     echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+     :
   else
-     echo "$ac_t""no" 1>&6
+     echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
      if test "$GLIB_CONFIG" = "no" ; then
        echo "*** The glib-config script installed by GLIB could not be found"
        echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in"
@@ -2267,19 +20791,45 @@ fi
           echo "*** Could not run GLIB test program, checking why..."
           CFLAGS="$CFLAGS $GLIB_CFLAGS"
           LIBS="$LIBS $GLIB_LIBS"
-          cat > conftest.$ac_ext <<EOF
-#line 2272 "configure"
-#include "confdefs.h"
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
 
 #include <glib.h>
 #include <stdio.h>
 
-int main() {
- return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); 
-; return 0; }
-EOF
-if { (eval echo configure:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
+int
+main ()
+{
+ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version));
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
    echo "*** The test program compiled, but did not run. This usually means"
           echo "*** that the run-time linker is not finding GLIB or finding the wrong"
           echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
@@ -2293,73 +20843,84 @@ if { (eval echo configure:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && t
           echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
           echo "*** came with the system with the command"
           echo "***"
-          echo "***    rpm --erase --nodeps gtk gtk-devel" 
+          echo "***    rpm --erase --nodeps gtk gtk-devel"
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-   echo "*** The test program failed to compile or link. See the file config.log for the"
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ echo "*** The test program failed to compile or link. See the file config.log for the"
           echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
           echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
-          echo "*** may want to edit the glib-config script: $GLIB_CONFIG" 
+          echo "*** may want to edit the glib-config script: $GLIB_CONFIG"
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
           CFLAGS="$ac_save_CFLAGS"
           LIBS="$ac_save_LIBS"
        fi
      fi
      GLIB_CFLAGS=""
      GLIB_LIBS=""
-     { echo "configure: error: 
-*** GLIB 1.2.0 or better is required. The latest version of GLIB
-*** is always available from ftp://ftp.gtk.org/." 1>&2; exit 1; }
+     { { echo "$as_me:$LINENO: error:
+*** GLIB $GLIB_REQUIRED_VERSION or better is required. The latest version of GLIB
+*** is always available from ftp://ftp.gtk.org/." >&5
+echo "$as_me: error:
+*** GLIB $GLIB_REQUIRED_VERSION or better is required. The latest version of GLIB
+*** is always available from ftp://ftp.gtk.org/." >&2;}
+   { (exit 1); exit 1; }; }
   fi
-  
-  
-  rm -f conf.glibtest
 
 
-  # we do not want to make all gts progs to link to thread or module libraries.
-  glib_cflags=`$GLIB_CONFIG glib --cflags`
-  glib_thread_cflags="$GLIB_CFLAGS"
-  glib_libs=`$GLIB_CONFIG glib --libs`
-  glib_thread_libs="$GLIB_LIBS"
-  GLIB_LIBS="$glib_libs"
-  GLIB_DEPLIBS="$glib_libs"
-else
-  # Use uninstalled glib (assume they got the version right)
+  rm -f conf.glibtest
 
-  GLIB_CONFIG=$with_glib/glib-config
-  if test -x $GLIB_CONFIG ; then 
-    :
+
+    glib_cflags=`$GLIB_CONFIG --cflags`
+    glib_thread_cflags=`$GLIB_CONFIG --cflags gthread`
+    glib_module_cflags=`$GLIB_CONFIG --cflags gmodule`
+    glib_libs=`$GLIB_CONFIG --libs`
+    glib_thread_libs=`$GLIB_CONFIG --libs gthread`
+    glib_module_libs=`$GLIB_CONFIG --libs gmodule`
+    GLIB_LIBS="$glib_libs"
+    GLIB_DEPLIBS="$glib_libs"
   else
-    { echo "configure: error: GLIB directory ($with_glib) not present or not configured" 1>&2; exit 1; }
-  fi
+    # Use uninstalled glib (assume they got the version right)
+
+    GLIB_CONFIG=$with_glib/glib-config
+    if test -x $GLIB_CONFIG ; then
+      :
+    else
+      { { echo "$as_me:$LINENO: error: GLIB directory ($with_glib) not present or not configured" >&5
+echo "$as_me: error: GLIB directory ($with_glib) not present or not configured" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
 
-  # For use in gts-config
-  glib_cflags=`$GLIB_CONFIG --cflags`
-  glib_thread_cflags=`$GLIB_CONFIG --cflags gthread`
-  glib_libs=`$GLIB_CONFIG --libs`
-  glib_thread_libs=`$GLIB_CONFIG --libs gthread`
+    # For use in gts-config
+    glib_cflags=`$GLIB_CONFIG --cflags`
+    glib_thread_cflags=`$GLIB_CONFIG --cflags gthread`
+    glib_module_cflags=`$GLIB_CONFIG --cflags gmodule`
+    glib_libs=`$GLIB_CONFIG --libs`
+    glib_thread_libs=`$GLIB_CONFIG --libs gthread`
+    glib_module_libs=`$GLIB_CONFIG --libs gmodule`
+
+    glib_release=`$GLIB_CONFIG --version | sed 's%\\.[0-9]*$%%'`
+
+    # canonicalize relative paths
+    case $with_glib in
+      /*)
+        glib_dir=$with_glib
+        ;;
+      *)
+        glib_dir="\$(top_builddir)/$with_glib"
+        ;;
+    esac
 
-  glib_release=`$GLIB_CONFIG --version | sed 's%\\.[0-9]*$%%'`
+    GLIB_CFLAGS="-I$glib_dir -I$glib_dir/gmodule"
+    GLIB_LIBS="$glib_dir/libglib.la $glib_dir/gmodule.la"
+    GLIB_DEPLIBS=
 
-  # canonicalize relative paths
-  case $with_glib in 
-    /*)
-      glib_dir=$with_glib
-      ;;
-    *)
-      glib_dir="\$(top_builddir)/$with_glib"
-      ;;
-  esac
 
-  GLIB_CFLAGS="-I$glib_dir -I$glib_dir/gmodule"
-  GLIB_LIBS="$glib_dir/libglib.la $glib_dir/gmodule.la"
-  GLIB_DEPLIBS=
 
-  
-  
+  fi
 fi
 
 
@@ -2368,6 +20929,8 @@ fi
 
 
 
+
+
 CFLAGS="$CFLAGS $glib_cflags"
 LDFLAGS="$LDFLAGS $glib_libs"
 
@@ -2375,678 +20938,2328 @@ LDFLAGS="$LDFLAGS $glib_libs"
 
 
 
+          ac_config_commands="$ac_config_commands default-1"
+
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+"{
+           #warning test
+	}"
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CPP_HAS_WARNING 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ echo "$as_me:$LINENO: WARNING: \"C preprocessor does not support warning directive.\"" >&5
+echo "$as_me: WARNING: \"C preprocessor does not support warning directive.\"" >&2;}
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
 
 
-for ac_hdr in fpu_control.h
+for ac_header in fpu_control.h
 do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2385: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2390 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- cat >> confdefs.h <<\EOF
-#define HAVE_FPU_CONTROL_H 1
-EOF
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo "$ac_t""no" 1>&6
+  eval "$as_ac_Header=\$ac_header_preproc"
 fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_FPU_CONTROL_H 1
+_ACEOF
+
+fi
+
 done
 
-for ac_hdr in floatingpoint.h
+
+for ac_header in floatingpoint.h
 do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2428: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2433 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- cat >> confdefs.h <<\EOF
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ cat >>confdefs.h <<\_ACEOF
 #define HAVE_FLOATINGPOINT_H 1
-EOF
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNISTD_H 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in getopt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------------ ##
+## Report this to the AC_PACKAGE_NAME lists.  ##
+## ------------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  echo "$ac_t""no" 1>&6
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
 fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETOPT_H 1
+_ACEOF
+
+fi
+
 done
 
-for ac_hdr in unistd.h
+
+
+for ac_func in getopt_long
 do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2471: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat > conftest.$ac_ext <<EOF
-#line 2476 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2481: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
 fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+                                                                                                              ac_config_files="$ac_config_files Makefile gts.pc src/Makefile src/gts-config tools/Makefile doc/Makefile examples/Makefile test/Makefile test/boolean/Makefile test/delaunay/Makefile test/coarsen/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${HAS_NETPBM_TRUE}" && test -z "${HAS_NETPBM_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"HAS_NETPBM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAS_NETPBM\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- cat >> confdefs.h <<\EOF
-#define HAVE_UNISTD_H 1
-EOF
 
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
 else
-  echo "$ac_t""no" 1>&6
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
 fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
 done
 
-for ac_hdr in getopt.h
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2514: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2519 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2524: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
 else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
+  as_expr=false
 fi
-rm -f conftest*
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
 fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- cat >> confdefs.h <<\EOF
-#define HAVE_GETOPT_H 1
-EOF
+rm -f conf$$ conf$$.exe conf$$.file
 
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
 else
-  echo "$ac_t""no" 1>&6
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
 fi
-done
 
+as_executable_p="test -f"
 
-for ac_func in getopt_long
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2557: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2562 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char $ac_func();
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 
-int main() {
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
 
-; return 0; }
-EOF
-if { (eval echo configure:2585: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
 fi
-rm -f conftest*
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
 fi
 
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
-EOF
- 
-else
-  echo "$ac_t""no" 1>&6
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
 fi
-done
 
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
 
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set | grep ac_space) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
     ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
     ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
 
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
 
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+  *) ac_config_targets="$ac_config_targets $1" ;;
 
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
-fi
+  esac
+  shift
+done
 
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+ac_configure_extra_args=
 
-DEFS=-DHAVE_CONFIG_H
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
 
-# Without the "./", some shells look in PATH for config.status.
-: ${CONFIG_STATUS=./config.status}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
 
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
-# Generated automatically by configure.
-# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
 #
-# $0 $ac_configure_args
+# INIT-COMMANDS section.
 #
-# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
 
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+	gts_defines="
+#define GTS_MAJOR_VERSION $GTS_MAJOR_VERSION
+#define GTS_MINOR_VERSION $GTS_MINOR_VERSION
+#define GTS_MICRO_VERSION $GTS_MICRO_VERSION"
+	build="$build"
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
 do
-  case "\$ac_option" in
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
-    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.13"
-    exit 0 ;;
-  -help | --help | --hel | --he | --h)
-    echo "\$ac_cs_usage"; exit 0 ;;
-  *) echo "\$ac_cs_usage"; exit 1 ;;
-  esac
-done
-
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
-
-trap 'rm -fr `echo "
-Makefile
-src/Makefile
-src/gts-config
-tools/Makefile
-doc/Makefile
-examples/Makefile
-test/Makefile
-test/boolean/Makefile
-test/delaunay/Makefile
-test/coarsen/Makefile
- config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
-EOF
-cat >> $CONFIG_STATUS <<EOF
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "gts.pc" ) CONFIG_FILES="$CONFIG_FILES gts.pc" ;;
+  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+  "src/gts-config" ) CONFIG_FILES="$CONFIG_FILES src/gts-config" ;;
+  "tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+  "test/boolean/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/boolean/Makefile" ;;
+  "test/delaunay/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/delaunay/Makefile" ;;
+  "test/coarsen/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/coarsen/Makefile" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
 
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@GTS_MAJOR_VERSION@%$GTS_MAJOR_VERSION%g
-s%@GTS_MINOR_VERSION@%$GTS_MINOR_VERSION%g
-s%@GTS_MICRO_VERSION@%$GTS_MICRO_VERSION%g
-s%@GTS_VERSION@%$GTS_VERSION%g
-s%@LT_RELEASE@%$LT_RELEASE%g
-s%@LT_CURRENT@%$LT_CURRENT%g
-s%@LT_REVISION@%$LT_REVISION%g
-s%@LT_AGE@%$LT_AGE%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@PACKAGE@%$PACKAGE%g
-s%@VERSION@%$VERSION%g
-s%@ACLOCAL@%$ACLOCAL%g
-s%@AUTOCONF@%$AUTOCONF%g
-s%@AUTOMAKE@%$AUTOMAKE%g
-s%@AUTOHEADER@%$AUTOHEADER%g
-s%@MAKEINFO@%$MAKEINFO%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@build@%$build%g
-s%@build_alias@%$build_alias%g
-s%@build_cpu@%$build_cpu%g
-s%@build_vendor@%$build_vendor%g
-s%@build_os@%$build_os%g
-s%@RANLIB@%$RANLIB%g
-s%@CC@%$CC%g
-s%@LN_S@%$LN_S%g
-s%@LIBTOOL@%$LIBTOOL%g
-s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
-s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
-s%@MAINT@%$MAINT%g
-s%@AWK@%$AWK%g
-s%@CPP@%$CPP%g
-s%@GLIB_CONFIG@%$GLIB_CONFIG%g
-s%@GLIB_CFLAGS@%$GLIB_CFLAGS%g
-s%@GLIB_LIBS@%$GLIB_LIBS%g
-s%@glib_cflags@%$glib_cflags%g
-s%@glib_libs@%$glib_libs%g
-s%@glib_thread_cflags@%$glib_thread_cflags%g
-s%@glib_thread_libs@%$glib_thread_libs%g
-s%@GLIB_DEPLIBS@%$GLIB_DEPLIBS%g
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
 
-CEOF
-EOF
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
 
-cat >> $CONFIG_STATUS <<\EOF
+# Create a (secure) tmp directory for tmp files.
 
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
-  if test $ac_beg -gt 1; then
-    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
-  else
-    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
-  fi
-  if test ! -s conftest.s$ac_file; then
-    ac_more_lines=false
-    rm -f conftest.s$ac_file
-  else
-    if test -z "$ac_sed_cmds"; then
-      ac_sed_cmds="sed -f conftest.s$ac_file"
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at GTS_MAJOR_VERSION@,$GTS_MAJOR_VERSION,;t t
+s, at GTS_MINOR_VERSION@,$GTS_MINOR_VERSION,;t t
+s, at GTS_MICRO_VERSION@,$GTS_MICRO_VERSION,;t t
+s, at GTS_VERSION@,$GTS_VERSION,;t t
+s, at LT_RELEASE@,$LT_RELEASE,;t t
+s, at LT_CURRENT@,$LT_CURRENT,;t t
+s, at LT_REVISION@,$LT_REVISION,;t t
+s, at LT_AGE@,$LT_AGE,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at CYGPATH_W@,$CYGPATH_W,;t t
+s, at PACKAGE@,$PACKAGE,;t t
+s, at VERSION@,$VERSION,;t t
+s, at ACLOCAL@,$ACLOCAL,;t t
+s, at AUTOCONF@,$AUTOCONF,;t t
+s, at AUTOMAKE@,$AUTOMAKE,;t t
+s, at AUTOHEADER@,$AUTOHEADER,;t t
+s, at MAKEINFO@,$MAKEINFO,;t t
+s, at AMTAR@,$AMTAR,;t t
+s, at install_sh@,$install_sh,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s, at AWK@,$AWK,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at am__leading_dot@,$am__leading_dot,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at DEPDIR@,$DEPDIR,;t t
+s, at am__include@,$am__include,;t t
+s, at am__quote@,$am__quote,;t t
+s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s, at CCDEPMODE@,$CCDEPMODE,;t t
+s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s, at EGREP@,$EGREP,;t t
+s, at LN_S@,$LN_S,;t t
+s, at ECHO@,$ECHO,;t t
+s, at AR@,$AR,;t t
+s, at ac_ct_AR@,$ac_ct_AR,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at CPP@,$CPP,;t t
+s, at CXX@,$CXX,;t t
+s, at CXXFLAGS@,$CXXFLAGS,;t t
+s, at ac_ct_CXX@,$ac_ct_CXX,;t t
+s, at CXXDEPMODE@,$CXXDEPMODE,;t t
+s, at am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s, at am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s, at CXXCPP@,$CXXCPP,;t t
+s, at F77@,$F77,;t t
+s, at FFLAGS@,$FFLAGS,;t t
+s, at ac_ct_F77@,$ac_ct_F77,;t t
+s, at LIBTOOL@,$LIBTOOL,;t t
+s, at MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s, at MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s, at MAINT@,$MAINT,;t t
+s, at HAS_NETPBM_TRUE@,$HAS_NETPBM_TRUE,;t t
+s, at HAS_NETPBM_FALSE@,$HAS_NETPBM_FALSE,;t t
+s, at PKG_CONFIG@,$PKG_CONFIG,;t t
+s, at GLIB_CFLAGS@,$GLIB_CFLAGS,;t t
+s, at GLIB_LIBS@,$GLIB_LIBS,;t t
+s, at GLIB_GENMARSHAL@,$GLIB_GENMARSHAL,;t t
+s, at GOBJECT_QUERY@,$GOBJECT_QUERY,;t t
+s, at GLIB_MKENUMS@,$GLIB_MKENUMS,;t t
+s, at GLIB_CONFIG@,$GLIB_CONFIG,;t t
+s, at glib_cflags@,$glib_cflags,;t t
+s, at glib_libs@,$glib_libs,;t t
+s, at glib_thread_cflags@,$glib_thread_cflags,;t t
+s, at glib_thread_libs@,$glib_thread_libs,;t t
+s, at glib_module_cflags@,$glib_module_cflags,;t t
+s, at glib_module_libs@,$glib_module_libs,;t t
+s, at GLIB_DEPLIBS@,$GLIB_DEPLIBS,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
     else
-      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
     fi
-    ac_file=`expr $ac_file + 1`
-    ac_beg=$ac_end
-    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
   fi
-done
-if test -z "$ac_sed_cmds"; then
-  ac_sed_cmds=cat
-fi
-EOF
+fi # test -n "$CONFIG_FILES"
 
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile
-src/Makefile
-src/gts-config
-tools/Makefile
-doc/Makefile
-examples/Makefile
-test/Makefile
-test/boolean/Makefile
-test/delaunay/Makefile
-test/coarsen/Makefile
-"}
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
   esac
 
-  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
-  # Remove last slash and all that follows it.  Not all systems have dirname.
-  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-    # The file is in a subdirectory.
-    test ! -d "$ac_dir" && mkdir "$ac_dir"
-    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
-    # A "../" for each directory in $ac_dir_suffix.
-    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
   else
-    ac_dir_suffix= ac_dots=
-  fi
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
 
-  case "$ac_given_srcdir" in
-  .)  srcdir=.
-      if test -z "$ac_dots"; then top_srcdir=.
-      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
-  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
   *) # Relative path.
-    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
-    top_srcdir="$ac_dots$ac_given_srcdir" ;;
-  esac
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
 
-  case "$ac_given_INSTALL" in
-  [/$]*) INSTALL="$ac_given_INSTALL" ;;
-  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
-  esac
 
-  echo creating "$ac_file"
-  rm -f "$ac_file"
-  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
-  case "$ac_file" in
-  *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
-  *) ac_comsub= ;;
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
   esac
 
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
 
 # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
 # NAME is the cpp macro being defined and VALUE is the value it is being given.
 #
 # ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
-ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_uB='\([ 	]\)%\1#\2define\3'
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
 ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
-  CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-  *) ac_file_in="${ac_file}.in" ;;
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
   esac
 
-  echo creating $ac_file
-
-  rm -f conftest.frag conftest.in conftest.out
-  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-  cat $ac_file_inputs > conftest.in
-
-EOF
-
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h.  And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
-EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
 
 # This sed command replaces #undef with comments.  This is necessary, for
 # example, in the case of _POSIX_SOURCE, which is predefined and required
 # on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
-EOF
-
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
 
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
 rm -f conftest.tail
-while :
-do
-  ac_lines=`grep -c . conftest.vals`
-  # grep -c gives empty output for an empty file on some AIX systems.
-  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
-  # Write a limited-size here document to conftest.frag.
-  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
   echo 'CEOF
-  sed -f conftest.frag conftest.in > conftest.out
-  rm -f conftest.in
-  mv conftest.out conftest.in
-' >> $CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
-  rm -f conftest.vals
-  mv conftest.tail conftest.vals
-done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
-  rm -f conftest.frag conftest.h
-  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
-  cat conftest.in >> conftest.h
-  rm -f conftest.in
-  if cmp -s $ac_file conftest.h 2>/dev/null; then
-    echo "$ac_file is unchanged"
-    rm -f conftest.h
-  else
-    # Remove last slash and all that follows it.  Not all systems have dirname.
-      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-      # The file is in a subdirectory.
-      test ! -d "$ac_dir" && mkdir "$ac_dir"
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
     fi
-    rm -f $ac_file
-    mv conftest.h $ac_file
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
   fi
-fi; done
-
-EOF
-cat >> $CONFIG_STATUS <<EOF
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X$ac_file : 'X\(//\)[^/]' \| \
+	 X$ac_file : 'X\(//\)$' \| \
+	 X$ac_file : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
 
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
 
-	gts_defines="
-#define GTS_MAJOR_VERSION $GTS_MAJOR_VERSION
-#define GTS_MINOR_VERSION $GTS_MINOR_VERSION
-#define GTS_MICRO_VERSION $GTS_MICRO_VERSION"
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
 
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
 
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
 
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # We invoke sed twice because it is the simplest approach to
+  # changing $(DEPDIR) to its actual value in the expansion.
+  for file in `sed -n -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    default-1 )
 	echo creating src/gtsconfig.h
 	cat >src/gtsconfig.h <<\__EOF
 /* gtsconfig.h
- * 
+ *
  * This is a generated file.  Please modify `configure.in'
  */
 
 #ifndef GTSCONFIG_H
 #define GTSCONFIG_H
+
 __EOF
+	case "$build" in
+	*-cray-unicos*)
+	  echo "/* CRAY inlining directives */" >> src/gtsconfig.h
+	  awk '
+BEGIN {
+  nc = 10;
+  nf = 0;
+}
+{
+  if ( == "G_INLINE_FUNC") {
+    nc = 0;
+    start = 2;
+  }
+  else
+    start = 1;
+  for (i = start; i <= NF; i++) {
+    if (nc == 1) {
+      if (substr ($i, 1, 1) != "*") {
+	in_list = 0;
+	for (j = 0; j < nf && !inlist; j++)
+	  if ($i == f[j])
+	    inlist = 1;
+	if (!inlist)
+          f[nf++] = $i;
+	nc = 10;
+      }
+    }
+    else
+      nc++;
+  }
+}
+END {
+  if (nf > 0) {
+    printf ("#pragma _CRI inline %s", f[0]);
+    for (i = 1; i < nf; i++)
+      printf (", %s", f[i]);
+    printf ("\n");
+  }
+}
+' < src/gts.h >> src/gtsconfig.h
+	;;
+	esac
 	cat >>src/gtsconfig.h <<__EOF
 $gts_defines
 
 #endif /* GTSCONFIG_H */
 __EOF
+ ;;
+  esac
+done
+_ACEOF
 
+cat >>$CONFIG_STATUS <<\_ACEOF
 
-exit 0
-EOF
+{ (exit 0); exit 0; }
+_ACEOF
 chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
 
diff --git a/configure.in b/configure.in
index 9fcc50b..f6d43d3 100644
--- a/configure.in
+++ b/configure.in
@@ -1,8 +1,9 @@
-AC_INIT(src/gts.h)
+AC_INIT
+AC_CONFIG_SRCDIR([src/gts.h])
 
 dnl we to AC_DIVERT_PUSH/AC_DIVERT_POP these variable definitions so they
 dnl are available for $ac_help expansion (don't we all *love* autoconf?)
-AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
+#AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
 # Making releases:
 #   GTS_MICRO_VERSION += 1;
 #   GTS_INTERFACE_AGE += 1;
@@ -12,13 +13,13 @@ AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
 # set GTS_BINARY_AGE and GTS_INTERFACE_AGE to 0.
 #
 GTS_MAJOR_VERSION=0
-GTS_MINOR_VERSION=5
-GTS_MICRO_VERSION=1
-GTS_INTERFACE_AGE=1
-GTS_BINARY_AGE=1
+GTS_MINOR_VERSION=7
+GTS_MICRO_VERSION=3
+GTS_INTERFACE_AGE=0
+GTS_BINARY_AGE=0
 GTS_VERSION=$GTS_MAJOR_VERSION.$GTS_MINOR_VERSION.$GTS_MICRO_VERSION
 dnl
-AC_DIVERT_POP()dnl
+#AC_DIVERT_POP()dnl
 
 AC_SUBST(GTS_MAJOR_VERSION)
 AC_SUBST(GTS_MINOR_VERSION)
@@ -44,11 +45,11 @@ AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define)
 # Specify a configuration file
 AM_CONFIG_HEADER(config.h)
 
-AC_DEFINE_UNQUOTED(GTS_MAJOR_VERSION, $GTS_MAJOR_VERSION)
-AC_DEFINE_UNQUOTED(GTS_MINOR_VERSION, $GTS_MINOR_VERSION)
-AC_DEFINE_UNQUOTED(GTS_MICRO_VERSION, $GTS_MICRO_VERSION)
-AC_DEFINE_UNQUOTED(GTS_INTERFACE_AGE, $GTS_INTERFACE_AGE)
-AC_DEFINE_UNQUOTED(GTS_BINARY_AGE, $GTS_BINARY_AGE)
+AC_DEFINE_UNQUOTED(GTS_MAJOR_VERSION, $GTS_MAJOR_VERSION, [Major version])
+AC_DEFINE_UNQUOTED(GTS_MINOR_VERSION, $GTS_MINOR_VERSION, [Minor version])
+AC_DEFINE_UNQUOTED(GTS_MICRO_VERSION, $GTS_MICRO_VERSION, [Micro version])
+AC_DEFINE_UNQUOTED(GTS_INTERFACE_AGE, $GTS_INTERFACE_AGE, [Interface age])
+AC_DEFINE_UNQUOTED(GTS_BINARY_AGE, $GTS_BINARY_AGE, [Binary age])
 
 dnl Initialize libtool
 AM_PROG_LIBTOOL
@@ -65,69 +66,90 @@ fi
 AC_PROG_AWK
 AC_ISC_POSIX
 AC_HEADER_STDC
-AC_ARG_PROGRAM
 
-if test x$with_glib = xyes ; then
-  AC_MSG_ERROR([
-*** Directory must be specified for --with-glib])
-fi
-
-if test x$with_glib = x ; then 
-  # Look for separately installed glib
-
-  AM_PATH_GLIB(1.2.0,,
-    AC_MSG_ERROR([
-*** GLIB 1.2.0 or better is required. The latest version of GLIB
-*** is always available from ftp://ftp.gtk.org/.]),
-    gmodule gthread)
+AC_CHECK_LIB(netpbm, pgm_init, netpbm="true",
+  AC_MSG_WARN([libnetpbm not found. Some programs will not be available.]))
+AM_CONDITIONAL(HAS_NETPBM, test x$netpbm = xtrue)
 
-  # we do not want to make all gts progs to link to thread or module libraries.
-  glib_cflags=`$GLIB_CONFIG glib --cflags`
-  glib_thread_cflags="$GLIB_CFLAGS"
-  glib_libs=`$GLIB_CONFIG glib --libs`
-  glib_thread_libs="$GLIB_LIBS"
+AM_PATH_GLIB_2_0(2.4.0, has_glib2=yes, has_glib2=no, gthread gmodule)
+if test x$has_glib2 = xyes; then
+  glib_cflags=`$PKG_CONFIG glib-2.0 --cflags`
+  glib_thread_cflags=`$PKG_CONFIG glib-2.0 --cflags gthread-2.0`
+  glib_module_cflags=`$PKG_CONFIG glib-2.0 --cflags gmodule-2.0`
+  glib_libs=`$PKG_CONFIG glib-2.0 --libs`
+  glib_thread_libs=`$PKG_CONFIG glib-2.0 --libs gthread-2.0`
+  glib_module_libs=`$PKG_CONFIG glib-2.0 --libs gmodule-2.0`
   GLIB_LIBS="$glib_libs"
   GLIB_DEPLIBS="$glib_libs"
 else
-  # Use uninstalled glib (assume they got the version right)
+  if test x$with_glib = xyes ; then
+    AC_MSG_ERROR([
+*** Directory must be specified for --with-glib])
+  fi
+
+  if test x$with_glib = x ; then 
+    # Look for separately installed glib
+
+    GLIB_REQUIRED_VERSION=1.2.8
+    AM_PATH_GLIB($GLIB_REQUIRED_VERSION,,
+      AC_MSG_ERROR([
+*** GLIB $GLIB_REQUIRED_VERSION or better is required. The latest version of GLIB
+*** is always available from ftp://ftp.gtk.org/.]),
+      gmodule gthread)
 
-  GLIB_CONFIG=$with_glib/glib-config
-  if test -x $GLIB_CONFIG ; then 
-    :
+    glib_cflags=`$GLIB_CONFIG --cflags`
+    glib_thread_cflags=`$GLIB_CONFIG --cflags gthread`
+    glib_module_cflags=`$GLIB_CONFIG --cflags gmodule`
+    glib_libs=`$GLIB_CONFIG --libs`
+    glib_thread_libs=`$GLIB_CONFIG --libs gthread`
+    glib_module_libs=`$GLIB_CONFIG --libs gmodule`
+    GLIB_LIBS="$glib_libs"
+    GLIB_DEPLIBS="$glib_libs"
   else
-    AC_MSG_ERROR([GLIB directory ($with_glib) not present or not configured])
-  fi
+    # Use uninstalled glib (assume they got the version right)
+
+    GLIB_CONFIG=$with_glib/glib-config
+    if test -x $GLIB_CONFIG ; then 
+      :
+    else
+      AC_MSG_ERROR([GLIB directory ($with_glib) not present or not configured])
+    fi
+
+    # For use in gts-config
+    glib_cflags=`$GLIB_CONFIG --cflags`
+    glib_thread_cflags=`$GLIB_CONFIG --cflags gthread`
+    glib_module_cflags=`$GLIB_CONFIG --cflags gmodule`
+    glib_libs=`$GLIB_CONFIG --libs`
+    glib_thread_libs=`$GLIB_CONFIG --libs gthread`
+    glib_module_libs=`$GLIB_CONFIG --libs gmodule`
+
+    glib_release=`$GLIB_CONFIG --version | sed 's%\\.[[0-9]]*$%%'`
+
+    # canonicalize relative paths
+    case $with_glib in 
+      /*)
+        glib_dir=$with_glib
+        ;;
+      *)
+        glib_dir="\$(top_builddir)/$with_glib"
+        ;;
+    esac
+
+    GLIB_CFLAGS="-I$glib_dir -I$glib_dir/gmodule"
+    GLIB_LIBS="$glib_dir/libglib.la $glib_dir/gmodule.la"
+    GLIB_DEPLIBS=
 
-  # For use in gts-config
-  glib_cflags=`$GLIB_CONFIG --cflags`
-  glib_thread_cflags=`$GLIB_CONFIG --cflags gthread`
-  glib_libs=`$GLIB_CONFIG --libs`
-  glib_thread_libs=`$GLIB_CONFIG --libs gthread`
-
-  glib_release=`$GLIB_CONFIG --version | sed 's%\\.[[0-9]]*$%%'`
-
-  # canonicalize relative paths
-  case $with_glib in 
-    /*)
-      glib_dir=$with_glib
-      ;;
-    *)
-      glib_dir="\$(top_builddir)/$with_glib"
-      ;;
-  esac
-
-  GLIB_CFLAGS="-I$glib_dir -I$glib_dir/gmodule"
-  GLIB_LIBS="$glib_dir/libglib.la $glib_dir/gmodule.la"
-  GLIB_DEPLIBS=
-
-  AC_SUBST(GLIB_CFLAGS)
-  AC_SUBST(GLIB_LIBS)
+    AC_SUBST(GLIB_CFLAGS)
+    AC_SUBST(GLIB_LIBS)
+  fi
 fi
 
 AC_SUBST(glib_cflags)
 AC_SUBST(glib_libs)
 AC_SUBST(glib_thread_cflags)
 AC_SUBST(glib_thread_libs)
+AC_SUBST(glib_module_cflags)
+AC_SUBST(glib_module_libs)
 AC_SUBST(GLIB_DEPLIBS)
 
 CFLAGS="$CFLAGS $glib_cflags"
@@ -138,7 +160,7 @@ AC_SUBST(CPPFLAGS)
 AC_SUBST(LDFLAGS)
 
 dnl generate `src/gtsconfig.h'
-AC_OUTPUT_COMMANDS([
+AC_CONFIG_COMMANDS([default-1],[[
 	echo creating src/gtsconfig.h
 	cat >src/gtsconfig.h <<\__EOF
 /* gtsconfig.h
@@ -148,18 +170,72 @@ AC_OUTPUT_COMMANDS([
 
 #ifndef GTSCONFIG_H
 #define GTSCONFIG_H
+
 __EOF
+	case "$build" in
+	*-cray-unicos*)
+	  echo "/* CRAY inlining directives */" >> src/gtsconfig.h
+	  awk '
+BEGIN {
+  nc = 10;
+  nf = 0;
+}
+{
+  if ($1 == "G_INLINE_FUNC") {
+    nc = 0;
+    start = 2;
+  }
+  else
+    start = 1;
+  for (i = start; i <= NF; i++) {
+    if (nc == 1) {
+      if (substr ($i, 1, 1) != "*") {
+	in_list = 0;
+	for (j = 0; j < nf && !inlist; j++)
+	  if ($i == f[j])
+	    inlist = 1;
+	if (!inlist)
+          f[nf++] = $i;
+	nc = 10;
+      }
+    }
+    else
+      nc++;
+  }
+}
+END {
+  if (nf > 0) {
+    printf ("#pragma _CRI inline %s", f[0]);
+    for (i = 1; i < nf; i++)
+      printf (", %s", f[i]);
+    printf ("\n");
+  }
+}
+' < src/gts.h >> src/gtsconfig.h
+	;;
+	esac
 	cat >>src/gtsconfig.h <<__EOF
 $gts_defines
 
 #endif /* GTSCONFIG_H */
 __EOF
-],[
+]],[[
 	gts_defines="
 #define GTS_MAJOR_VERSION $GTS_MAJOR_VERSION
 #define GTS_MINOR_VERSION $GTS_MINOR_VERSION
 #define GTS_MICRO_VERSION $GTS_MICRO_VERSION"
-])
+	build="$build"
+]])
+
+dnl checking for #warning cpp directive
+AC_TRY_COMPILE(,
+       "{
+           #warning test
+	}", 
+	AC_DEFINE(CPP_HAS_WARNING, 1, 
+	[Define if C preprocessor supports warning directive.]),
+	AC_MSG_WARN(["C preprocessor does not support warning directive."]))
+
 
 dnl header file checks
 AC_CHECK_HEADERS(fpu_control.h, AC_DEFINE(HAVE_FPU_CONTROL_H))
@@ -170,8 +246,9 @@ AC_CHECK_HEADERS(getopt.h, AC_DEFINE(HAVE_GETOPT_H))
 dnl functions checks
 AC_CHECK_FUNCS(getopt_long)
 
-AC_OUTPUT([
+AC_CONFIG_FILES([
 Makefile
+gts.pc
 src/Makefile
 src/gts-config
 tools/Makefile
@@ -182,3 +259,4 @@ test/boolean/Makefile
 test/delaunay/Makefile
 test/coarsen/Makefile
 ])
+AC_OUTPUT
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..edb5d38
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,479 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 84c2e91..d63995b 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,63 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-# The name of the module.
-
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -75,24 +73,87 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
+# The name of the module.
 DOC_MODULE = gts
 
 # The top-level SGML file.
@@ -104,105 +165,152 @@ DOC_SOURCE_DIR = ../src
 TARGET_DIR = html/$(DOC_MODULE)
 
 EXTRA_DIST = html
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES = 
-DIST_COMMON =  Makefile.am Makefile.in
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+all: all-am
 
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = gtar
-GZIP_ENV = --best
-all: all-redirect
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  doc/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+
+mostlyclean-libtool:
+	-rm -f *.lo
 
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+clean-libtool:
+	-rm -rf .libs _libs
 
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 tags: TAGS
 TAGS:
 
+ctags: CTAGS
+CTAGS:
 
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-subdir = doc
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
 check-am: all-am
 check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am:
-install-exec: install-exec-am
+all-am: Makefile
 
-install-data-am:
+installdirs:
+install: install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
 
-clean-am:  clean-generic mostlyclean-am clean-local
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-generic clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-generic distclean-am \
-		maintainer-clean-local
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
-.PHONY: tags distdir info-am info dvi-am dvi check check-am \
-installcheck-am installcheck install-exec-am install-exec \
-install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	clean-local distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am info info-am install install-am install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic maintainer-clean-local mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	uninstall uninstall-am uninstall-info-am
 
 
 scan:
@@ -225,7 +333,6 @@ maintainer-clean-local: clean
 	rm -rf sgml html $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt 
 
 .PHONY : html sgml templates scan
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/doc/html/book1.html b/doc/html/book1.html
deleted file mode 100644
index 80569b3..0000000
--- a/doc/html/book1.html
+++ /dev/null
@@ -1,337 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->GTS Library Reference Manual</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="NEXT"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"></HEAD
-><BODY
-CLASS="BOOK"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="BOOK"
-><DIV
-CLASS="TITLEPAGE"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-ALIGN="center"
-VALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="7"
-><P
-CLASS="TITLE"
-><A
-NAME="AEN2"
->GTS Library Reference Manual</A
-></P
-></FONT
-></TH
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="c4.html"
->Basic Macros, functions and data structures</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="gts-binary-heaps.html"
->Binary heaps</A
-> — efficient data structure for priority heaps.</DT
-><DT
-><A
-HREF="gts-extended-binary-heaps.html"
->Extended binary heaps</A
-> — efficient data structure for priority heaps allowing removal of elements.</DT
-><DT
-><A
-HREF="gts-first-in-first-out-heaps.html"
->First In First Out heaps</A
-> — </DT
-><DT
-><A
-HREF="gts-vectors-and-matrices.html"
->Vectors and matrices</A
-> — simple operations on vectors and matrices.</DT
-><DT
-><A
-HREF="gts-simple-statistics.html"
->Simple statistics</A
-> — a basic structure for computing min, max, average and variance.</DT
-><DT
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
->Miscellaneous macros and functions</A
-> — Various utilities.</DT
-></DL
-></DD
-><DT
-><A
-HREF="c1908.html"
->Geometrical Object Hierarchy</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="gts-object-class.html"
->Object class</A
-> — parent class for all GTS objects.</DT
-><DT
-><A
-HREF="gts-container-classes.html"
->Container classes</A
-> — </DT
-><DT
-><A
-HREF="gts-containee-classes.html"
->Containee classes</A
-> — </DT
-><DT
-><A
-HREF="gts-points.html"
->Points</A
-> — point object and related functions.</DT
-><DT
-><A
-HREF="gts-vertices.html"
->Vertices</A
-> — vertex object and related functions.</DT
-><DT
-><A
-HREF="gts-segments.html"
->Segments</A
-> — segment object and related functions.</DT
-><DT
-><A
-HREF="gts-edges.html"
->Edges</A
-> — edge object and related functions.</DT
-><DT
-><A
-HREF="gts-triangles.html"
->Triangles</A
-> — triangle object and related functions.</DT
-><DT
-><A
-HREF="gts-faces.html"
->Faces</A
-> — face object and related functions.</DT
-><DT
-><A
-HREF="gts-surfaces.html"
->Surfaces</A
-> — surface object and related functions.</DT
-></DL
-></DD
-><DT
-><A
-HREF="c8393.html"
->Geometrical data structures</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="gts-kd-trees.html"
->Kd-Trees</A
-> — an efficient way of doing point location queries.</DT
-><DT
-><A
-HREF="gts-bounding-boxes-trees.html"
->Bounding boxes trees</A
-> — implementation of axis-aligned bounding-box trees.</DT
-></DL
-></DD
-><DT
-><A
-HREF="c9853.html"
->Surface operations</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="gts-boolean-operations.html"
->Boolean operations</A
-> — set operations between surfaces: union, intersection, difference.</DT
-><DT
-><A
-HREF="gts-surface-simplification-and-refinement.html"
->Surface simplification and refinement</A
-> — reducing or increasing the number of edges of a triangulated surface.</DT
-><DT
-><A
-HREF="gts-out-of-core-simplification.html"
->Out-of-core simplification</A
-> — objects for simplification based on vertex clustering.</DT
-><DT
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
->Isosurfaces from 3D functions</A
-> — computing triangulated isosurfaces of a given function f(x,y,z).</DT
-><DT
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
->Delaunay and constrained Delaunay triangulations</A
-> — implementation of a dynamic Delaunay triangulation algorithm.</DT
-></DL
-></DD
-><DT
-><A
-HREF="c12040.html"
->Progressive and Hierarchical surfaces</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="gts-vertex-split.html"
->Vertex split</A
-> — object encoding a reversible edge-collapse operation.</DT
-><DT
-><A
-HREF="gts-progressive-surfaces.html"
->Progressive surfaces</A
-> — continuous level-of-detail for surfaces.</DT
-><DT
-><A
-HREF="gts-hierarchical-vertex-split.html"
->Hierarchical vertex split</A
-> — hierarchical extension of the vertex split.</DT
-><DT
-><A
-HREF="gts-hierarchical-surfaces.html"
->Hierarchical surfaces</A
-> — extension of progressive surfaces allowing arbitrary sequences of vertex split or collapse.</DT
-></DL
-></DD
-><DT
-><A
-HREF="c13676.html"
->Graph and operations on graphs</A
-></DT
-><DD
-><DL
-><DT
-><A
-HREF="gts-graph-class.html"
->Graph class</A
-> — </DT
-><DT
-><A
-HREF="gts-weighted-graph.html"
->Weighted graph</A
-> — </DT
-><DT
-><A
-HREF="gts-progressive-graph.html"
->Progressive graph</A
-> — </DT
-><DT
-><A
-HREF="gts-graph-partitioning.html"
->Graph partitioning</A
-> — </DT
-></DL
-></DD
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-> </TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-> </TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Basic Macros, functions and data structures</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c11561.html b/doc/html/c11561.html
deleted file mode 100644
index e50c78a..0000000
--- a/doc/html/c11561.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Progressive and Hierarchical surfaces</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Delaunay and constrained Delaunay triangulations"
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"><LINK
-REL="NEXT"
-TITLE="Vertex split"
-HREF="gts-vertex-split.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN11561"
->Progressive and Hierarchical surfaces</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-vertex-split.html"
->Vertex split</A
-> — object encoding a reversible edge-collapse operation.</DT
-><DT
-><A
-HREF="gts-progressive-surfaces.html"
->Progressive surfaces</A
-> — continuous level-of-detail for surfaces.</DT
-><DT
-><A
-HREF="gts-hierarchical-vertex-split.html"
->Hierarchical vertex split</A
-> — hierarchical extension of the vertex split.</DT
-><DT
-><A
-HREF="gts-hierarchical-surfaces.html"
->Hierarchical surfaces</A
-> — extension of progressive surfaces allowing arbitrary sequences of vertex split or collapse.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Delaunay and constrained Delaunay triangulations</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vertex split</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c12040.html b/doc/html/c12040.html
deleted file mode 100644
index 3d948e1..0000000
--- a/doc/html/c12040.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Progressive and Hierarchical surfaces</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Delaunay and constrained Delaunay triangulations"
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"><LINK
-REL="NEXT"
-TITLE="Vertex split"
-HREF="gts-vertex-split.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN12040"
->Progressive and Hierarchical surfaces</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-vertex-split.html"
->Vertex split</A
-> — object encoding a reversible edge-collapse operation.</DT
-><DT
-><A
-HREF="gts-progressive-surfaces.html"
->Progressive surfaces</A
-> — continuous level-of-detail for surfaces.</DT
-><DT
-><A
-HREF="gts-hierarchical-vertex-split.html"
->Hierarchical vertex split</A
-> — hierarchical extension of the vertex split.</DT
-><DT
-><A
-HREF="gts-hierarchical-surfaces.html"
->Hierarchical surfaces</A
-> — extension of progressive surfaces allowing arbitrary sequences of vertex split or collapse.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Delaunay and constrained Delaunay triangulations</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vertex split</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c13060.html b/doc/html/c13060.html
deleted file mode 100644
index ca8d204..0000000
--- a/doc/html/c13060.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Graph and operations on graphs</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Hierarchical surfaces"
-HREF="gts-hierarchical-surfaces.html"><LINK
-REL="NEXT"
-TITLE="Graph class"
-HREF="gts-graph-class.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-hierarchical-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-graph-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN13060"
->Graph and operations on graphs</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-graph-class.html"
->Graph class</A
-> — </DT
-><DT
-><A
-HREF="gts-weighted-graph.html"
->Weighted graph</A
-> — </DT
-><DT
-><A
-HREF="gts-progressive-graph.html"
->Progressive graph</A
-> — </DT
-><DT
-><A
-HREF="gts-graph-partitioning.html"
->Graph partitioning</A
-> — </DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-hierarchical-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-graph-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Hierarchical surfaces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Graph class</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c13676.html b/doc/html/c13676.html
deleted file mode 100644
index 656acaf..0000000
--- a/doc/html/c13676.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Graph and operations on graphs</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Hierarchical surfaces"
-HREF="gts-hierarchical-surfaces.html"><LINK
-REL="NEXT"
-TITLE="Graph class"
-HREF="gts-graph-class.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-hierarchical-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-graph-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN13676"
->Graph and operations on graphs</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-graph-class.html"
->Graph class</A
-> — </DT
-><DT
-><A
-HREF="gts-weighted-graph.html"
->Weighted graph</A
-> — </DT
-><DT
-><A
-HREF="gts-progressive-graph.html"
->Progressive graph</A
-> — </DT
-><DT
-><A
-HREF="gts-graph-partitioning.html"
->Graph partitioning</A
-> — </DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-hierarchical-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-graph-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Hierarchical surfaces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Graph class</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c1865.html b/doc/html/c1865.html
deleted file mode 100644
index 86a4115..0000000
--- a/doc/html/c1865.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Geometrical Object Hierarchy</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Miscellaneous macros and functions"
-HREF="gts-miscellaneous-macros-and-functions.html"><LINK
-REL="NEXT"
-TITLE="Object class"
-HREF="gts-object-class.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-object-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN1865"
->Geometrical Object Hierarchy</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-object-class.html"
->Object class</A
-> — parent class for all GTS objects.</DT
-><DT
-><A
-HREF="gts-container-classes.html"
->Container classes</A
-> — </DT
-><DT
-><A
-HREF="gts-containee-classes.html"
->Containee classes</A
-> — </DT
-><DT
-><A
-HREF="gts-points.html"
->Points</A
-> — point object and related functions.</DT
-><DT
-><A
-HREF="gts-vertices.html"
->Vertices</A
-> — vertex object and related functions.</DT
-><DT
-><A
-HREF="gts-segments.html"
->Segments</A
-> — segment object and related functions.</DT
-><DT
-><A
-HREF="gts-edges.html"
->Edges</A
-> — edge object and related functions.</DT
-><DT
-><A
-HREF="gts-triangles.html"
->Triangles</A
-> — triangle object and related functions.</DT
-><DT
-><A
-HREF="gts-faces.html"
->Faces</A
-> — face object and related functions.</DT
-><DT
-><A
-HREF="gts-surfaces.html"
->Surfaces</A
-> — surface object and related functions.</DT
-></DL
-></DIV
-><P
->    GTS uses a simple object system implemented in C which allows all
-    the basic paradigms of object-oriented programming: inheritance of
-    class members and virtual functions overloading in particular.
-    </P
-><P
->    The class hierarchy is implemented via a hierarchy of nested C
-    structs and type casting. In order to avoid "wild" type casts
-    between objects belonging to incompatible classes, type casting is
-    done through macros which check if the conversion is valid. This
-    type checking is however relatively expensive and can be disabled
-    on production code by omitting the GTS_CHECK_CASTS define at
-    compile time.
-    </P
-><P
->    The basic geometrical objects of GTS do not have any support for
-    attributes such as color, texture coordinates, material properties
-    etc... which may be of interest when using GTS for graphical
-    applications. This choice was made on purpose in order to keep GTS
-    as general as possible. Using object inheritance it should however
-    be easy to extend the base classes to fit your personal needs.
-    </P
-><P
->    When destroying geometrical objects you must keep in mind their
-    geometrical relationships. Destroying a vertex also destroys all
-    the edges using this particular vertex, destroying an edge
-    destroys the triangles. Vertices, edges or faces not used by any
-    segment, triangle or surface respectively are considered to be
-    "floating" objects. When initially created all vertices, edges or
-    faces are floating. Destroying a segment, triangle or surface will
-    cause the destruction of any new floating vertex, edge or face.
-    </P
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-object-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Miscellaneous macros and functions</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Object class</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c1908.html b/doc/html/c1908.html
deleted file mode 100644
index 89f17aa..0000000
--- a/doc/html/c1908.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Geometrical Object Hierarchy</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Miscellaneous macros and functions"
-HREF="gts-miscellaneous-macros-and-functions.html"><LINK
-REL="NEXT"
-TITLE="Object class"
-HREF="gts-object-class.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-object-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN1908"
->Geometrical Object Hierarchy</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-object-class.html"
->Object class</A
-> — parent class for all GTS objects.</DT
-><DT
-><A
-HREF="gts-container-classes.html"
->Container classes</A
-> — </DT
-><DT
-><A
-HREF="gts-containee-classes.html"
->Containee classes</A
-> — </DT
-><DT
-><A
-HREF="gts-points.html"
->Points</A
-> — point object and related functions.</DT
-><DT
-><A
-HREF="gts-vertices.html"
->Vertices</A
-> — vertex object and related functions.</DT
-><DT
-><A
-HREF="gts-segments.html"
->Segments</A
-> — segment object and related functions.</DT
-><DT
-><A
-HREF="gts-edges.html"
->Edges</A
-> — edge object and related functions.</DT
-><DT
-><A
-HREF="gts-triangles.html"
->Triangles</A
-> — triangle object and related functions.</DT
-><DT
-><A
-HREF="gts-faces.html"
->Faces</A
-> — face object and related functions.</DT
-><DT
-><A
-HREF="gts-surfaces.html"
->Surfaces</A
-> — surface object and related functions.</DT
-></DL
-></DIV
-><P
->    GTS uses a simple object system implemented in C which allows all
-    the basic paradigms of object-oriented programming: inheritance of
-    class members and virtual functions overloading in particular.
-    </P
-><P
->    The class hierarchy is implemented via a hierarchy of nested C
-    structs and type casting. In order to avoid "wild" type casts
-    between objects belonging to incompatible classes, type casting is
-    done through macros which check if the conversion is valid. This
-    type checking is however relatively expensive and can be disabled
-    on production code by omitting the GTS_CHECK_CASTS define at
-    compile time.
-    </P
-><P
->    The basic geometrical objects of GTS do not have any support for
-    attributes such as color, texture coordinates, material properties
-    etc... which may be of interest when using GTS for graphical
-    applications. This choice was made on purpose in order to keep GTS
-    as general as possible. Using object inheritance it should however
-    be easy to extend the base classes to fit your personal needs.
-    </P
-><P
->    When destroying geometrical objects you must keep in mind their
-    geometrical relationships. Destroying a vertex also destroys all
-    the edges using this particular vertex, destroying an edge
-    destroys the triangles. Vertices, edges or faces not used by any
-    segment, triangle or surface respectively are considered to be
-    "floating" objects. When initially created all vertices, edges or
-    faces are floating. Destroying a segment, triangle or surface will
-    cause the destruction of any new floating vertex, edge or face.
-    </P
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-object-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Miscellaneous macros and functions</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Object class</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c4.html b/doc/html/c4.html
deleted file mode 100644
index 118dcd9..0000000
--- a/doc/html/c4.html
+++ /dev/null
@@ -1,248 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Basic Macros, functions and data structures</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="NEXT"
-TITLE="Binary heaps"
-HREF="gts-binary-heaps.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN4"
->Basic Macros, functions and data structures</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-binary-heaps.html"
->Binary heaps</A
-> — efficient data structure for priority heaps.</DT
-><DT
-><A
-HREF="gts-extended-binary-heaps.html"
->Extended binary heaps</A
-> — efficient data structure for priority heaps allowing removal of elements.</DT
-><DT
-><A
-HREF="gts-first-in-first-out-heaps.html"
->First In First Out heaps</A
-> — </DT
-><DT
-><A
-HREF="gts-vectors-and-matrices.html"
->Vectors and matrices</A
-> — simple operations on vectors and matrices.</DT
-><DT
-><A
-HREF="gts-simple-statistics.html"
->Simple statistics</A
-> — a basic structure for computing min, max, average and variance.</DT
-><DT
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
->Miscellaneous macros and functions</A
-> — Various utilities.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->GTS Library Reference Manual</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Binary heaps</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c8089.html b/doc/html/c8089.html
deleted file mode 100644
index a08a6ae..0000000
--- a/doc/html/c8089.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Geometrical data structures</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Surfaces"
-HREF="gts-surfaces.html"><LINK
-REL="NEXT"
-TITLE="Kd-Trees"
-HREF="gts-kd-trees.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-kd-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN8089"
->Geometrical data structures</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-kd-trees.html"
->Kd-Trees</A
-> — an efficient way of doing point location queries.</DT
-><DT
-><A
-HREF="gts-bounding-boxes-trees.html"
->Bounding boxes trees</A
-> — implementation of axis-aligned bounding-box trees.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-kd-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surfaces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Kd-Trees</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c8393.html b/doc/html/c8393.html
deleted file mode 100644
index 6bd01a9..0000000
--- a/doc/html/c8393.html
+++ /dev/null
@@ -1,228 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Geometrical data structures</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Surfaces"
-HREF="gts-surfaces.html"><LINK
-REL="NEXT"
-TITLE="Kd-Trees"
-HREF="gts-kd-trees.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-kd-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN8393"
->Geometrical data structures</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-kd-trees.html"
->Kd-Trees</A
-> — an efficient way of doing point location queries.</DT
-><DT
-><A
-HREF="gts-bounding-boxes-trees.html"
->Bounding boxes trees</A
-> — implementation of axis-aligned bounding-box trees.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-kd-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surfaces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Kd-Trees</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c9511.html b/doc/html/c9511.html
deleted file mode 100644
index 8622eb5..0000000
--- a/doc/html/c9511.html
+++ /dev/null
@@ -1,243 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Surface operations</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Bounding boxes trees"
-HREF="gts-bounding-boxes-trees.html"><LINK
-REL="NEXT"
-TITLE="Boolean operations"
-HREF="gts-boolean-operations.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-bounding-boxes-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-boolean-operations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN9511"
->Surface operations</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-boolean-operations.html"
->Boolean operations</A
-> — set operations between surfaces: union, intersection, difference.</DT
-><DT
-><A
-HREF="gts-surface-simplification-and-refinement.html"
->Surface simplification and refinement</A
-> — reducing or increasing the number of edges of a triangulated surface.</DT
-><DT
-><A
-HREF="gts-out-of-core-simplification.html"
->Out-of-core simplification</A
-> — objects for simplification based on vertex clustering.</DT
-><DT
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
->Isosurfaces from 3D functions</A
-> — computing triangulated isosurfaces of a given function f(x,y,z).</DT
-><DT
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
->Delaunay and constrained Delaunay triangulations</A
-> — implementation of a dynamic Delaunay triangulation algorithm.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-bounding-boxes-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-boolean-operations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Bounding boxes trees</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Boolean operations</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/c9853.html b/doc/html/c9853.html
deleted file mode 100644
index 21015e6..0000000
--- a/doc/html/c9853.html
+++ /dev/null
@@ -1,243 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Surface operations</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="PREVIOUS"
-TITLE="Bounding boxes trees"
-HREF="gts-bounding-boxes-trees.html"><LINK
-REL="NEXT"
-TITLE="Boolean operations"
-HREF="gts-boolean-operations.html"></HEAD
-><BODY
-CLASS="CHAPTER"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-bounding-boxes-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-boolean-operations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="CHAPTER"
-><H1
-><A
-NAME="AEN9853"
->Surface operations</A
-></H1
-><DIV
-CLASS="TOC"
-><DL
-><DT
-><B
->Table of Contents</B
-></DT
-><DT
-><A
-HREF="gts-boolean-operations.html"
->Boolean operations</A
-> — set operations between surfaces: union, intersection, difference.</DT
-><DT
-><A
-HREF="gts-surface-simplification-and-refinement.html"
->Surface simplification and refinement</A
-> — reducing or increasing the number of edges of a triangulated surface.</DT
-><DT
-><A
-HREF="gts-out-of-core-simplification.html"
->Out-of-core simplification</A
-> — objects for simplification based on vertex clustering.</DT
-><DT
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
->Isosurfaces from 3D functions</A
-> — computing triangulated isosurfaces of a given function f(x,y,z).</DT
-><DT
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
->Delaunay and constrained Delaunay triangulations</A
-> — implementation of a dynamic Delaunay triangulation algorithm.</DT
-></DL
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-bounding-boxes-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-> </B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-boolean-operations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Bounding boxes trees</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Boolean operations</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/dummy.html b/doc/html/dummy.html
deleted file mode 100644
index 8b13789..0000000
--- a/doc/html/dummy.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/doc/html/gts-binary-heaps.html b/doc/html/gts-binary-heaps.html
deleted file mode 100644
index c0551a4..0000000
--- a/doc/html/gts-binary-heaps.html
+++ /dev/null
@@ -1,1198 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Binary heaps</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="PREVIOUS"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="NEXT"
-TITLE="Extended binary heaps"
-HREF="gts-extended-binary-heaps.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-extended-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-BINARY-HEAPS"
->Binary heaps</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN11"
-></A
-><H2
->Name</H2
->Binary heaps -- efficient data structure for priority heaps.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN14"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-struct      <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->;
-
-<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->*    <A
-HREF="gts-binary-heaps.html#GTS-HEAP-NEW"
->gts_heap_new</A
->                    (<GTKDOCLINK
-HREF="GCOMPAREFUNC"
->GCompareFunc</GTKDOCLINK
-> compare_func);
-void        <A
-HREF="gts-binary-heaps.html#GTS-HEAP-INSERT"
->gts_heap_insert</A
->                 (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-binary-heaps.html#GTS-HEAP-REMOVE-TOP"
->gts_heap_remove_top</A
->             (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-binary-heaps.html#GTS-HEAP-TOP"
->gts_heap_top</A
->                    (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);
-void        <A
-HREF="gts-binary-heaps.html#GTS-HEAP-FREEZE"
->gts_heap_freeze</A
->                 (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);
-void        <A
-HREF="gts-binary-heaps.html#GTS-HEAP-THAW"
->gts_heap_thaw</A
->                   (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);
-void        <A
-HREF="gts-binary-heaps.html#GTS-HEAP-FOREACH"
->gts_heap_foreach</A
->                (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GFUNC"
->GFunc</GTKDOCLINK
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> user_data);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-binary-heaps.html#GTS-HEAP-SIZE"
->gts_heap_size</A
->                   (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);
-void        <A
-HREF="gts-binary-heaps.html#GTS-HEAP-DESTROY"
->gts_heap_destroy</A
->                (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN43"
-></A
-><H2
->Description</H2
-><P
->The basic operations <A
-HREF="gts-binary-heaps.html#GTS-HEAP-INSERT"
->gts_heap_insert</A
->() and <A
-HREF="gts-binary-heaps.html#GTS-HEAP-REMOVE-TOP"
->gts_heap_remove_top</A
->() are performed in O(log n) time. Calling <A
-HREF="gts-binary-heaps.html#GTS-HEAP-FREEZE"
->gts_heap_freeze</A
->(), inserting elements using <A
-HREF="gts-binary-heaps.html#GTS-HEAP-INSERT"
->gts_heap_insert</A
->() and calling <A
-HREF="gts-binary-heaps.html#GTS-HEAP-THAW"
->gts_heap_thaw</A
->() allows to build the binary heap in O(n) time.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN51"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN53"
-></A
-><H3
-><A
-NAME="GTSHEAP"
-></A
->struct GtsHeap</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHeap;</PRE
-></TD
-></TR
-></TABLE
-><P
->An opaque data structure describing a binary heap.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN58"
-></A
-><H3
-><A
-NAME="GTS-HEAP-NEW"
-></A
->gts_heap_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->*    gts_heap_new                    (<GTKDOCLINK
-HREF="GCOMPAREFUNC"
->GCompareFunc</GTKDOCLINK
-> compare_func);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->compare_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a GCompareFunc.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> using <TT
-CLASS="PARAMETER"
-><I
->compare_func</I
-></TT
-> as a sorting function.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN81"
-></A
-><H3
-><A
-NAME="GTS-HEAP-INSERT"
-></A
->gts_heap_insert ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_heap_insert                 (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p);</PRE
-></TD
-></TR
-></TABLE
-><P
->Inserts a new element <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> in the heap.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to add to the heap.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN104"
-></A
-><H3
-><A
-NAME="GTS-HEAP-REMOVE-TOP"
-></A
->gts_heap_remove_top ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_heap_remove_top             (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes the element at the top of the heap.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the element at the top of the heap.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN126"
-></A
-><H3
-><A
-NAME="GTS-HEAP-TOP"
-></A
->gts_heap_top ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_heap_top                    (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the element at the top of the heap.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN148"
-></A
-><H3
-><A
-NAME="GTS-HEAP-FREEZE"
-></A
->gts_heap_freeze ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_heap_freeze                 (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Freezes the heap. Any subsequent operation will not preserve the heap
-property. Used in conjunction with <A
-HREF="gts-binary-heaps.html#GTS-HEAP-INSERT"
->gts_heap_insert</A
->() and <A
-HREF="gts-binary-heaps.html#GTS-HEAP-THAW"
->gts_heap_thaw</A
->()
-to create a heap in O(n) time.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN167"
-></A
-><H3
-><A
-NAME="GTS-HEAP-THAW"
-></A
->gts_heap_thaw ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_heap_thaw                   (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> has been frozen previously using <A
-HREF="gts-binary-heaps.html#GTS-HEAP-FREEZE"
->gts_heap_freeze</A
->(), reorder it
-in O(n) time and unfreeze it.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN186"
-></A
-><H3
-><A
-NAME="GTS-HEAP-FOREACH"
-></A
->gts_heap_foreach ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_heap_foreach                (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GFUNC"
->GFunc</GTKDOCLINK
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> user_data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function to call for each element in the heap.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->user_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> to pass to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN214"
-></A
-><H3
-><A
-NAME="GTS-HEAP-SIZE"
-></A
->gts_heap_size ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_heap_size                   (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of items in <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN237"
-></A
-><H3
-><A
-NAME="GTS-HEAP-DESTROY"
-></A
->gts_heap_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_heap_destroy                (<A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Free all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-extended-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Basic Macros, functions and data structures</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Extended binary heaps</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-boolean-operations.html b/doc/html/gts-boolean-operations.html
deleted file mode 100644
index ac57d37..0000000
--- a/doc/html/gts-boolean-operations.html
+++ /dev/null
@@ -1,1300 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Boolean operations</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Surface operations"
-HREF="c9853.html"><LINK
-REL="PREVIOUS"
-TITLE="Surface operations"
-HREF="c9853.html"><LINK
-REL="NEXT"
-TITLE="Surface simplification and refinement"
-HREF="gts-surface-simplification-and-refinement.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-surface-simplification-and-refinement.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-BOOLEAN-OPERATIONS"
->Boolean operations</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN9860"
-></A
-><H2
->Name</H2
->Boolean operations -- set operations between surfaces: union, intersection, difference.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN9863"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-boolean-operations.html#GTS-SURFACE-INTER-CLASS-CAPS"
->GTS_SURFACE_INTER_CLASS</A
->         (klass)
-#define     <A
-HREF="gts-boolean-operations.html#GTS-SURFACE-INTER-CAPS"
->GTS_SURFACE_INTER</A
->               (obj)
-#define     <A
-HREF="gts-boolean-operations.html#GTS-IS-SURFACE-INTER-CAPS"
->GTS_IS_SURFACE_INTER</A
->            (obj)
-struct      <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->;
-struct      <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->;
-
-<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->* <A
-HREF="gts-boolean-operations.html#GTS-SURFACE-INTER-CLASS"
->gts_surface_inter_class</A
->
-                                            (void);
-<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->* <A
-HREF="gts-boolean-operations.html#GTS-SURFACE-INTER-NEW"
->gts_surface_inter_new</A
->      (<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s1,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s2,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *faces_tree1,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *faces_tree2);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-boolean-operations.html#GTS-SURFACE-INTER-CHECK"
->gts_surface_inter_check</A
->         (<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
-> *si);
-enum        <A
-HREF="gts-boolean-operations.html#GTSBOOLEANOPERATION"
->GtsBooleanOperation</A
->;
-void        <A
-HREF="gts-boolean-operations.html#GTS-SURFACE-INTER-BOOLEAN"
->gts_surface_inter_boolean</A
->       (<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
-> *si,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-boolean-operations.html#GTSBOOLEANOPERATION"
->GtsBooleanOperation</A
-> op);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN9888"
-></A
-><H2
->Description</H2
-><P
->The three-dimensional curve intersection of two surfaces is described by a <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
-> object. This object contains additional information which allows to compute all the set operations between the two surfaces.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN9892"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9894"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-INTER-CLASS-CAPS"
-></A
->GTS_SURFACE_INTER_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SURFACE_INTER_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9911"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-INTER-CAPS"
-></A
->GTS_SURFACE_INTER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SURFACE_INTER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9928"
-></A
-><H3
-><A
-NAME="GTS-IS-SURFACE-INTER-CAPS"
-></A
->GTS_IS_SURFACE_INTER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_SURFACE_INTER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9946"
-></A
-><H3
-><A
-NAME="GTSSURFACEINTERCLASS"
-></A
->struct GtsSurfaceInterClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurfaceInterClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The surface intersection class.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9951"
-></A
-><H3
-><A
-NAME="GTSSURFACEINTER"
-></A
->struct GtsSurfaceInter</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurfaceInter {
-  GtsObject object;
-
-  GtsSurface * s1;
-  GtsSurface * s2;
-  GSList * edges;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The surface intersection object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->s1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Local triangulation of the intersecting faces of the first surface.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->s2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Local triangulation of the intersecting faces of the second surface.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->edges</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->List of <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> defining the 3D curve intersection of the two surfaces.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9982"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-INTER-CLASS"
-></A
->gts_surface_inter_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->* gts_surface_inter_class
-                                            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9999"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-INTER-NEW"
-></A
->gts_surface_inter_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->* gts_surface_inter_new      (<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s1,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s2,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *faces_tree1,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *faces_tree2);</PRE
-></TD
-></TR
-></TABLE
-><P
->When triangulating the cut faces, the new faces inherit the
-attributes of these original faces through their <GTKDOCLINK
-HREF="ATTRIBUTES"
->attributes</GTKDOCLINK
->()
-method.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTERCLASS"
->GtsSurfaceInterClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->faces_tree1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree (see <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-NEW"
->gts_bb_tree_new</A
->()) for
-the faces of <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->faces_tree2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree for the faces of <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
-> describing the intersection of <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
->
-and <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10050"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-INTER-CHECK"
-></A
->gts_surface_inter_check ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_surface_inter_check         (<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
-> *si);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->si</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the curve described by <TT
-CLASS="PARAMETER"
-><I
->si</I
-></TT
-> is an orientable
-manifold, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10075"
-></A
-><H3
-><A
-NAME="GTSBOOLEANOPERATION"
-></A
->enum GtsBooleanOperation</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->typedef enum { GTS_1_OUT_2, 
-	       GTS_1_IN_2, 
-	       GTS_2_OUT_1, 
-	       GTS_2_IN_1 }             GtsBooleanOperation;</PRE
-></TD
-></TR
-></TABLE
-><P
-><TT
-CLASS="PARAMETER"
-><I
->GTS_1_OUT_2</I
-></TT
-> identifies the part of the first surface which lies outside the second surface.</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->GTS_1_IN_2</I
-></TT
-> identifies the part of the first surface which lies inside the second surface.</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->GTS_2_OUT_1</I
-></TT
-> identifies the part of the second surface which lies outside the first surface.</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->GTS_2_IN_1</I
-></TT
-> identifies the part of the second surface which lies inside the first surface.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10087"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-INTER-BOOLEAN"
-></A
->gts_surface_inter_boolean ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_inter_boolean       (<A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
-> *si,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-boolean-operations.html#GTSBOOLEANOPERATION"
->GtsBooleanOperation</A
-> op);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> the part of the surface described by <TT
-CLASS="PARAMETER"
-><I
->si</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->op</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->si</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-boolean-operations.html#GTSSURFACEINTER"
->GtsSurfaceInter</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->op</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-boolean-operations.html#GTSBOOLEANOPERATION"
->GtsBooleanOperation</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-surface-simplification-and-refinement.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surface operations</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surface simplification and refinement</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-bounding-boxes-trees.html b/doc/html/gts-bounding-boxes-trees.html
deleted file mode 100644
index abe9cfc..0000000
--- a/doc/html/gts-bounding-boxes-trees.html
+++ /dev/null
@@ -1,5787 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Bounding boxes trees</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical data structures"
-HREF="c8393.html"><LINK
-REL="PREVIOUS"
-TITLE="Kd-Trees"
-HREF="gts-kd-trees.html"><LINK
-REL="NEXT"
-TITLE="Surface operations"
-HREF="c9853.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-kd-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-BOUNDING-BOXES-TREES"
->Bounding boxes trees</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN8502"
-></A
-><H2
->Name</H2
->Bounding boxes trees -- implementation of axis-aligned bounding-box trees.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN8505"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-CLASS-CAPS"
->GTS_BBOX_CLASS</A
->                  (klass)
-#define     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-CAPS"
->GTS_BBOX</A
->                        (obj)
-#define     <A
-HREF="gts-bounding-boxes-trees.html#GTS-IS-BBOX-CAPS"
->GTS_IS_BBOX</A
->                     (obj)
-struct      <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->;
-struct      <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->;
-
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->* <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-CLASS"
->gts_bbox_class</A
->                (void);
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-NEW"
->gts_bbox_new</A
->                    (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z2);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-SET"
->gts_bbox_set</A
->                    (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z2);
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-SEGMENT"
->gts_bbox_segment</A
->                (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-TRIANGLE"
->gts_bbox_triangle</A
->               (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-SURFACE"
->gts_bbox_surface</A
->                (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-POINTS"
->gts_bbox_points</A
->                 (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *points);
-<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-BBOXES"
->gts_bbox_bboxes</A
->                 (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *bboxes);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-DRAW"
->gts_bbox_draw</A
->                   (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-#define     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-POINT-IS-INSIDE"
->gts_bbox_point_is_inside</A
->        (bbox, p)
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOXES-ARE-OVERLAPPING"
->gts_bboxes_are_overlapping</A
->      (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb1,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb2);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-DIAGONAL2"
->gts_bbox_diagonal2</A
->              (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-POINT-DISTANCE2"
->gts_bbox_point_distance2</A
->        (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *min,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *max);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-IS-STABBED"
->gts_bbox_is_stabbed</A
->             (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p);
-
-void        (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBTREETRAVERSEFUNC"
->*GtsBBTreeTraverseFunc</A
->)        (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb1,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb2,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
->*      <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-NEW"
->gts_bb_tree_new</A
->                 (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *bboxes);
-<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
->*      <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE"
->gts_bb_tree_surface</A
->             (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-OVERLAP"
->gts_bb_tree_overlap</A
->             (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-IS-OVERLAPPING"
->gts_bb_tree_is_overlapping</A
->      (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-TRAVERSE-OVERLAPPING"
->gts_bb_tree_traverse_overlapping</A
->
-                                            (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree1,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree2,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBTREETRAVERSEFUNC"
->GtsBBTreeTraverseFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-DRAW"
->gts_bb_tree_draw</A
->                (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> depth,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-DESTROY"
->gts_bb_tree_destroy</A
->             (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> free_leaves);
-
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->*GtsBBoxDistFunc</A
->)              (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded);
-<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLOSESTFUNC"
->*GtsBBoxClosestFunc</A
->)           (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-DISTANCE"
->gts_bb_tree_point_distance</A
->      (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> **bbox);
-<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-CLOSEST"
->gts_bb_tree_point_closest</A
->       (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLOSESTFUNC"
->GtsBBoxClosestFunc</A
-> closest,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *distance);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SEGMENT-DISTANCE"
->gts_bb_tree_segment_distance</A
->    (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-TRIANGLE-DISTANCE"
->gts_bb_tree_triangle_distance</A
->   (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-CLOSEST-BBOXES"
->gts_bb_tree_point_closest_bboxes</A
->
-                                            (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-BOUNDARY-DISTANCE"
->gts_bb_tree_surface_boundary_distance</A
->
-                                            (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);
-void        <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-DISTANCE"
->gts_bb_tree_surface_distance</A
->    (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);
-
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-STABBED"
->gts_bb_tree_stabbed</A
->             (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN8656"
-></A
-><H2
->Description</H2
-><P
->Axis-aligned bounding box trees can be used for intersection/collision detection using <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-TRAVERSE-OVERLAPPING"
->gts_bb_tree_traverse_overlapping</A
->(), or to compute the minimum distance between an object and a collection of others using <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-DISTANCE"
->gts_bb_tree_point_distance</A
->(), <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SEGMENT-DISTANCE"
->gts_bb_tree_segment_distance</A
->(), <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-TRIANGLE-DISTANCE"
->gts_bb_tree_triangle_distance</A
->() or <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-DISTANCE"
->gts_bb_tree_surface_distance</A
->().</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN8664"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8666"
-></A
-><H3
-><A
-NAME="GTS-BBOX-CLASS-CAPS"
-></A
->GTS_BBOX_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_BBOX_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8683"
-></A
-><H3
-><A
-NAME="GTS-BBOX-CAPS"
-></A
->GTS_BBOX()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_BBOX(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8700"
-></A
-><H3
-><A
-NAME="GTS-IS-BBOX-CAPS"
-></A
->GTS_IS_BBOX()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_BBOX(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8718"
-></A
-><H3
-><A
-NAME="GTSBBOXCLASS"
-></A
->struct GtsBBoxClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsBBoxClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The bounding box class derived from <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8724"
-></A
-><H3
-><A
-NAME="GTSBBOX"
-></A
->struct GtsBBox</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsBBox {
-  GtsObject object;
-  gpointer bounded;
-  gdouble x1, y1, z1;
-  gdouble x2, y2, z2;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The bounding box structure.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->bounded</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Bounded object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->x1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->x coordinate of the lower-left front corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->y1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->y coordinate of the lower-left front corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->z1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->z coordinate of the lower-left front corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->x2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->x coordinate of the upper-right back corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->y2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->y coordinate of the upper-right back corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->z2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->z coordinate of the upper-right back corner.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8774"
-></A
-><H3
-><A
-NAME="GTS-BBOX-CLASS"
-></A
->gts_bbox_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->* gts_bbox_class                (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8791"
-></A
-><H3
-><A
-NAME="GTS-BBOX-NEW"
-></A
->gts_bbox_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    gts_bbox_new                    (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the object to be bounded.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> x-coordinate of the lower left corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> y-coordinate of the lower left corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> z-coordinate of the lower left corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> x-coordinate of the upper right corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> y-coordinate of the upper right corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> z-coordinate of the upper right corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8849"
-></A
-><H3
-><A
-NAME="GTS-BBOX-SET"
-></A
->gts_bbox_set ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bbox_set                    (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z2);</PRE
-></TD
-></TR
-></TABLE
-><P
->Sets fields of <TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the object to be bounded.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> x-coordinate of the lower left corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> y-coordinate of the lower left corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> z-coordinate of the lower left corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> x-coordinate of the upper right corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> y-coordinate of the upper right corner.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> z-coordinate of the upper right corner.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8902"
-></A
-><H3
-><A
-NAME="GTS-BBOX-SEGMENT"
-></A
->gts_bbox_segment ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    gts_bbox_segment                (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> bounding box of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8932"
-></A
-><H3
-><A
-NAME="GTS-BBOX-TRIANGLE"
-></A
->gts_bbox_triangle ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    gts_bbox_triangle               (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> bounding box of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8962"
-></A
-><H3
-><A
-NAME="GTS-BBOX-SURFACE"
-></A
->gts_bbox_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    gts_bbox_surface                (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> bounding box of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8992"
-></A
-><H3
-><A
-NAME="GTS-BBOX-POINTS"
-></A
->gts_bbox_points ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    gts_bbox_points                 (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *points);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> bounding box of <TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9022"
-></A
-><H3
-><A
-NAME="GTS-BBOX-BBOXES"
-></A
->gts_bbox_bboxes ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->*    gts_bbox_bboxes                 (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *bboxes);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLASS"
->GtsBBoxClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bboxes</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> bounding box of all the bounding boxes in
-<TT
-CLASS="PARAMETER"
-><I
->bboxes</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9052"
-></A
-><H3
-><A
-NAME="GTS-BBOX-DRAW"
-></A
->gts_bbox_draw ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bbox_draw                   (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes in file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> an OOGL (Geomview) description of <TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9076"
-></A
-><H3
-><A
-NAME="GTS-BBOX-POINT-IS-INSIDE"
-></A
->gts_bbox_point_is_inside()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_bbox_point_is_inside(bbox, p)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is inside (or on the boundary) of <TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9100"
-></A
-><H3
-><A
-NAME="GTS-BBOXES-ARE-OVERLAPPING"
-></A
->gts_bboxes_are_overlapping ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_bboxes_are_overlapping      (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb1,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the bounding boxes <TT
-CLASS="PARAMETER"
-><I
->bb1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->bb2</I
-></TT
-> are overlapping
-(including just touching), <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9132"
-></A
-><H3
-><A
-NAME="GTS-BBOX-DIAGONAL2"
-></A
->gts_bbox_diagonal2 ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_bbox_diagonal2              (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the squared length of the diagonal of <TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9155"
-></A
-><H3
-><A
-NAME="GTS-BBOX-POINT-DISTANCE2"
-></A
->gts_bbox_point_distance2 ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bbox_point_distance2        (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *min,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *max);</PRE
-></TD
-></TR
-></TABLE
-><P
->Sets <TT
-CLASS="PARAMETER"
-><I
->min</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->max</I
-></TT
-> to lower and upper bounds for the square of the
-Euclidean distance between the object contained in <TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->. For these
-bounds to make any sense the bounding box must be "tight" i.e. each of the
-6 faces of the box must at least be touched by one point of the bounded
-object.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->min</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a gdouble.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->max</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a gdouble.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9192"
-></A
-><H3
-><A
-NAME="GTS-BBOX-IS-STABBED"
-></A
->gts_bbox_is_stabbed ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_bbox_is_stabbed             (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the ray starting at <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and ending at (<TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->->x,
-<TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->->y, +infty) intersects with <TT
-CLASS="PARAMETER"
-><I
->bb</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9226"
-></A
-><H3
-><A
-NAME="GTSBBTREETRAVERSEFUNC"
-></A
->GtsBBTreeTraverseFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        (*GtsBBTreeTraverseFunc)        (<A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb1,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bb2,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->User function called for each pair of overlapping bounding boxes. See 
-<A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-TRAVERSE-OVERLAPPING"
->gts_bb_tree_traverse_overlapping</A
->().</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bb2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->another <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->user data passed to the function.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9254"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-NEW"
-></A
->gts_bb_tree_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
->*      gts_bb_tree_new                 (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *bboxes);</PRE
-></TD
-></TR
-></TABLE
-><P
->Builds a new hierarchy of bounding boxes for <TT
-CLASS="PARAMETER"
-><I
->bboxes</I
-></TT
->. At each
-level, the GNode->data field contains a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> bounding box of
-all the children. The tree is binary and is built by repeatedly
-cutting in two approximately equal halves the bounding boxes at
-each level until a leaf node (i.e. a bounding box given in <TT
-CLASS="PARAMETER"
-><I
->bboxes</I
-></TT
->)
-is reached. In order to minimize the depth of the tree, the cutting
-direction is always chosen as perpendicular to the longest
-dimension of the bounding box.</P
-><P
->Returns: a new hierarchy of bounding boxes.  */
-GNode * gts_bb_tree_new (GSList * bboxes)
-{
-  GSList * i, * positive = NULL, * negative = NULL;
-  GNode * node;
-  GtsBBox * bbox;
-  guint dir, np = 0, nn = 0;
-  gdouble * p1, * p2;
-  gdouble cut;
-  
-  g_return_val_if_fail (bboxes != NULL, NULL);</P
-><P
->  if (bboxes->next == NULL) /* leaf node */
-    return g_node_new (bboxes->data);</P
-><P
->  bbox = gts_bbox_bboxes (<A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-CLASS"
->gts_bbox_class</A
->(), bboxes);
-  node = g_node_new (bbox);</P
-><P
->  if (bbox->x2 - bbox->x1 > bbox->y2 - bbox->y1) {
-    if (bbox->z2 - bbox->z1 > bbox->x2 - bbox->x1)
-      dir = 2;
-    else
-      dir = 0;
-  }
-  else if (bbox->z2 - bbox->z1 > bbox->y2 - bbox->y1)
-    dir = 2;
-  else
-    dir = 1;</P
-><P
->  p1 = (gdouble *) &bbox->x1;
-  p2 = (gdouble *) &bbox->x2;
-  cut = (p1[dir] + p2[dir])/2.;
-  i = bboxes;
-  while (i) {
-    bbox = i->data; 
-    p1 = (gdouble *) &bbox->x1;
-    p2 = (gdouble *) &bbox->x2;
-    if ((p1[dir] + p2[dir])/2. > cut) {
-      positive = g_slist_prepend (positive, bbox);
-      np++;
-    }
-    else {
-      negative = g_slist_prepend (negative, bbox);
-      nn++;
-    }
-    i = i->next;
-  }
-  if (!positive) {
-    GSList * last = g_slist_nth (negative, (nn - 1)/2);
-    positive = last->next;
-    last->next = NULL;
-  }
-  else if (!negative) {
-    GSList * last = g_slist_nth (positive, (np - 1)/2);
-    negative = last->next;
-    last->next = NULL;
-  }
-  g_node_prepend (node, gts_bb_tree_new (positive));
-  g_slist_free (positive);
-  g_node_prepend (node, gts_bb_tree_new (negative));
-  g_slist_free (negative);
-  
-  return node;
-}</P
-><P
->static void prepend_triangle_bbox (GtsTriangle * t, GSList ** bboxes)
-{
-bboxes = g_slist_prepend (*bboxes, 
-			     gts_bbox_triangle (<A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-CLASS"
->gts_bbox_class</A
->(), t));
-}</P
-><P
->/**
-gts_bb_tree_surface:
-<TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->: a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bboxes</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new hierarchy of bounding boxes bounding the faces of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9291"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-SURFACE"
-></A
->gts_bb_tree_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
->*      gts_bb_tree_surface             (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9311"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-OVERLAP"
-></A
->gts_bb_tree_overlap ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_bb_tree_overlap             (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox);</PRE
-></TD
-></TR
-></TABLE
-><P
->Returns: a list of bounding boxes, leaves of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> which overlap <TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
->.  */
-GSList * gts_bb_tree_overlap (GNode * tree, GtsBBox * bbox)
-{
-  GSList * list = NULL;
-  GtsBBox * bb;
-  GNode * i;</P
-><P
->  g_return_val_if_fail (tree != NULL, NULL);
-  g_return_val_if_fail (bbox != NULL, NULL);</P
-><P
->  bb = tree->data;
-  if (!gts_bboxes_are_overlapping (bbox, bb))
-    return NULL;
-  if (tree->children == NULL) /* leaf node */
-    return g_slist_prepend (NULL, bb);
-  i = tree->children;
-  while (i) {
-    list = g_slist_concat (list, gts_bb_tree_overlap (i, bbox));
-    i = i->next;
-  }
-  return list;
-}</P
-><P
->/**
-gts_bb_tree_is_overlapping:
-<TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
->: a bounding box tree.
-<TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
->: a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if any leaf of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> overlaps <TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9350"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-IS-OVERLAPPING"
-></A
->gts_bb_tree_is_overlapping ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_bb_tree_is_overlapping      (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9375"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-TRAVERSE-OVERLAPPING"
-></A
->gts_bb_tree_traverse_overlapping ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_traverse_overlapping
-                                            (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree1,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree2,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBTREETRAVERSEFUNC"
->GtsBBTreeTraverseFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each overlapping pair of leaves of <TT
-CLASS="PARAMETER"
-><I
->tree1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->tree2</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBTREETRAVERSEFUNC"
->GtsBBTreeTraverseFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9411"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-DRAW"
-></A
->gts_bb_tree_draw ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_draw                (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> depth,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Write in <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> an OOGL (Geomview) description of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> for the
-depth specified by <TT
-CLASS="PARAMETER"
-><I
->depth</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->depth</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a specified depth.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9440"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-DESTROY"
-></A
->gts_bb_tree_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_destroy             (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> free_leaves);</PRE
-></TD
-></TR
-></TABLE
-><P
->Destroys all the bounding boxes created by <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> and destroys the
-tree itself. If <TT
-CLASS="PARAMETER"
-><I
->free_leaves</I
-></TT
-> is set to <TT
-CLASS="LITERAL"
->TRUE</TT
->, destroys boxes given
-by the user when creating the tree (i.e. leaves of the tree).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->free_leaves</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if <TT
-CLASS="LITERAL"
->TRUE</TT
-> the bounding boxes given by the user are freed.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9465"
-></A
-><H3
-><A
-NAME="GTSBBOXDISTFUNC"
-></A
->GtsBBoxDistFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     (*GtsBBoxDistFunc)              (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded);</PRE
-></TD
-></TR
-></TABLE
-><P
->User function returning the (minimum) distance between the object defined by <TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
-> and point <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->an object bounded by a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the distance between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9496"
-></A
-><H3
-><A
-NAME="GTSBBOXCLOSESTFUNC"
-></A
->GtsBBoxClosestFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   (*GtsBBoxClosestFunc)           (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> bounded);</PRE
-></TD
-></TR
-></TABLE
-><P
->User function returning a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> belonging to the object defined by <TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
-> and closest to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bounded</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->an object bounded by a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9527"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-POINT-DISTANCE"
-></A
->gts_bb_tree_point_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_bb_tree_point_distance      (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> **bbox);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if not <TT
-CLASS="LITERAL"
->NULL</TT
-> is set to the bounding box containing the closest 
-object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the distance as evaluated by <TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and the closest
-object in <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9569"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-POINT-CLOSEST"
-></A
->gts_bb_tree_point_closest ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   gts_bb_tree_point_closest       (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLOSESTFUNC"
->GtsBBoxClosestFunc</A
-> closest,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *distance);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->closest</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXCLOSESTFUNC"
->GtsBBoxClosestFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if not <TT
-CLASS="LITERAL"
->NULL</TT
-> is set to the distance between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and the 
-new <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->, closest point to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and belonging to an object of
-<TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9613"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-SEGMENT-DISTANCE"
-></A
->gts_bb_tree_segment_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_segment_distance    (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);</PRE
-></TD
-></TR
-></TABLE
-><P
->Given a segment <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->, points are sampled regularly on its length
-using <TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> as increment. The distance from each of these points
-to the closest object of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> is computed using <TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> and the
-<A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-DISTANCE"
->gts_bb_tree_point_distance</A
->() function. The fields of <TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> are
-filled with the number of points sampled, the minimum, average and
-maximum value and the standard deviation.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> spatial scale of the sampling to be used.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> to be filled with the results.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9658"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-TRIANGLE-DISTANCE"
-></A
->gts_bb_tree_triangle_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_triangle_distance   (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);</PRE
-></TD
-></TR
-></TABLE
-><P
->Given a triangle <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->, points are sampled regularly on its surface
-using <TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> as increment. The distance from each of these points
-to the closest object of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> is computed using <TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> and the
-<A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-DISTANCE"
->gts_bb_tree_point_distance</A
->() function. The fields of <TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> are
-filled with the number of points sampled, the minimum, average and
-maximum value and the standard deviation.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> spatial scale of the sampling to be used.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> to be filled with the results.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9703"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-POINT-CLOSEST-BBOXES"
-></A
->gts_bb_tree_point_closest_bboxes ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_bb_tree_point_closest_bboxes
-                                            (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->. One of the bounding boxes is assured to contain
-the object of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> closest to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9733"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-SURFACE-BOUNDARY-DISTANCE"
-></A
->gts_bb_tree_surface_boundary_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_surface_boundary_distance
-                                            (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SEGMENT-DISTANCE"
->gts_bb_tree_segment_distance</A
->() for each edge boundary of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.
-The fields of <TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> are filled with the minimum, maximum and
-average distance. The average distance is defined as the sum of the
-average distances for each boundary edge weighthed by their length
-and divided by the total length of the boundaries. The standard
-deviation is defined accordingly. The <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> field of <TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> is filled
-with the number of sampled points used.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a sampling increment defined as the percentage of the diagonal
-of the root bounding box of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> to be filled with the results.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9778"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-SURFACE-DISTANCE"
-></A
->gts_bb_tree_surface_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_bb_tree_surface_distance    (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
-> distance,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *range);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-TRIANGLE-DISTANCE"
->gts_bb_tree_triangle_distance</A
->() for each face of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. The
-fields of <TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> are filled with the minimum, maximum and average
-distance. The average distance is defined as the sum of the average
-distances for each triangle weighthed by their area and divided by
-the total area of the surface. The standard deviation is defined
-accordingly. The <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> field of <TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> is filled with the number of
-sampled points used.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->distance</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC"
->GtsBBoxDistFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a sampling increment defined as the percentage of the diagonal
-of the root bounding box of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->range</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> to be filled with the results.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN9823"
-></A
-><H3
-><A
-NAME="GTS-BB-TREE-STABBED"
-></A
->gts_bb_tree_stabbed ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_bb_tree_stabbed             (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of bounding boxes, leaves of <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> which are
-stabbed by the ray defined by <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> (see <A
-HREF="gts-bounding-boxes-trees.html#GTS-BBOX-IS-STABBED"
->gts_bbox_is_stabbed</A
->()).</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-kd-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Kd-Trees</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surface operations</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-containee-classes.html b/doc/html/gts-containee-classes.html
deleted file mode 100644
index eb21c63..0000000
--- a/doc/html/gts-containee-classes.html
+++ /dev/null
@@ -1,1231 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Containee classes</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Container classes"
-HREF="gts-container-classes.html"><LINK
-REL="NEXT"
-TITLE="Points"
-HREF="gts-points.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-container-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-points.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-CONTAINEE-CLASSES"
->Containee classes</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN3000"
-></A
-><H2
->Name</H2
->Containee classes -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN3003"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-containee-classes.html#GTS-CONTAINEE-CLASS-CAPS"
->GTS_CONTAINEE_CLASS</A
->             (klass)
-#define     <A
-HREF="gts-containee-classes.html#GTS-CONTAINEE-CAPS"
->GTS_CONTAINEE</A
->                   (obj)
-#define     <A
-HREF="gts-containee-classes.html#GTS-IS-CONTAINEE-CAPS"
->GTS_IS_CONTAINEE</A
->                (obj)
-struct      <A
-HREF="gts-containee-classes.html#GTSCONTAINEECLASS"
->GtsContaineeClass</A
->;
-struct      <A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
->;
-
-<A
-HREF="gts-containee-classes.html#GTSCONTAINEECLASS"
->GtsContaineeClass</A
->* <A
-HREF="gts-containee-classes.html#GTS-CONTAINEE-CLASS"
->gts_containee_class</A
->      (void);
-<A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
->* <A
-HREF="gts-containee-classes.html#GTS-CONTAINEE-NEW"
->gts_containee_new</A
->             (<A
-HREF="gts-containee-classes.html#GTSCONTAINEECLASS"
->GtsContaineeClass</A
-> *klass);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-containee-classes.html#GTS-CONTAINEE-IS-CONTAINED"
->gts_containee_is_contained</A
->      (<A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> *item,
-                                             <A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c);
-
-#define     <A
-HREF="gts-containee-classes.html#GTS-SLIST-CONTAINEE-CLASS-CAPS"
->GTS_SLIST_CONTAINEE_CLASS</A
->       (klass)
-#define     <A
-HREF="gts-containee-classes.html#GTS-SLIST-CONTAINEE-CAPS"
->GTS_SLIST_CONTAINEE</A
->             (obj)
-#define     <A
-HREF="gts-containee-classes.html#GTS-IS-SLIST-CONTAINEE-CAPS"
->GTS_IS_SLIST_CONTAINEE</A
->          (obj)
-struct      <A
-HREF="gts-containee-classes.html#GTSSLISTCONTAINEECLASS"
->GtsSListContaineeClass</A
->;
-struct      <A
-HREF="gts-containee-classes.html#GTSSLISTCONTAINEE"
->GtsSListContainee</A
->;
-
-<A
-HREF="gts-containee-classes.html#GTSSLISTCONTAINEECLASS"
->GtsSListContaineeClass</A
->* <A
-HREF="gts-containee-classes.html#GTS-SLIST-CONTAINEE-CLASS"
->gts_slist_containee_class</A
->
-                                            (void);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN3027"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN3030"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3032"
-></A
-><H3
-><A
-NAME="GTS-CONTAINEE-CLASS-CAPS"
-></A
->GTS_CONTAINEE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CONTAINEE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3046"
-></A
-><H3
-><A
-NAME="GTS-CONTAINEE-CAPS"
-></A
->GTS_CONTAINEE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CONTAINEE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3060"
-></A
-><H3
-><A
-NAME="GTS-IS-CONTAINEE-CAPS"
-></A
->GTS_IS_CONTAINEE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_CONTAINEE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3074"
-></A
-><H3
-><A
-NAME="GTSCONTAINEECLASS"
-></A
->struct GtsContaineeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsContaineeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3079"
-></A
-><H3
-><A
-NAME="GTSCONTAINEE"
-></A
->struct GtsContainee</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsContainee {
-  GtsObject object;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The containee object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3094"
-></A
-><H3
-><A
-NAME="GTS-CONTAINEE-CLASS"
-></A
->gts_containee_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-containee-classes.html#GTSCONTAINEECLASS"
->GtsContaineeClass</A
->* gts_containee_class      (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3109"
-></A
-><H3
-><A
-NAME="GTS-CONTAINEE-NEW"
-></A
->gts_containee_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
->* gts_containee_new             (<A
-HREF="gts-containee-classes.html#GTSCONTAINEECLASS"
->GtsContaineeClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3129"
-></A
-><H3
-><A
-NAME="GTS-CONTAINEE-IS-CONTAINED"
-></A
->gts_containee_is_contained ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_containee_is_contained      (<A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> *item,
-                                             <A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->item</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3154"
-></A
-><H3
-><A
-NAME="GTS-SLIST-CONTAINEE-CLASS-CAPS"
-></A
->GTS_SLIST_CONTAINEE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SLIST_CONTAINEE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3168"
-></A
-><H3
-><A
-NAME="GTS-SLIST-CONTAINEE-CAPS"
-></A
->GTS_SLIST_CONTAINEE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SLIST_CONTAINEE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3182"
-></A
-><H3
-><A
-NAME="GTS-IS-SLIST-CONTAINEE-CAPS"
-></A
->GTS_IS_SLIST_CONTAINEE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_SLIST_CONTAINEE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3196"
-></A
-><H3
-><A
-NAME="GTSSLISTCONTAINEECLASS"
-></A
->struct GtsSListContaineeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSListContaineeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3201"
-></A
-><H3
-><A
-NAME="GTSSLISTCONTAINEE"
-></A
->struct GtsSListContainee</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSListContainee {
-  GtsContainee containee;
-
-  GSList * containers;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The singly-linked list containee object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->containee</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->containers</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->A list of <A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> containing this object.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3222"
-></A
-><H3
-><A
-NAME="GTS-SLIST-CONTAINEE-CLASS"
-></A
->gts_slist_containee_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-containee-classes.html#GTSSLISTCONTAINEECLASS"
->GtsSListContaineeClass</A
->* gts_slist_containee_class
-                                            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-container-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-points.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Container classes</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Points</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-container-classes.html b/doc/html/gts-container-classes.html
deleted file mode 100644
index 10db829..0000000
--- a/doc/html/gts-container-classes.html
+++ /dev/null
@@ -1,1786 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Container classes</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Object class"
-HREF="gts-object-class.html"><LINK
-REL="NEXT"
-TITLE="Containee classes"
-HREF="gts-containee-classes.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-object-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-containee-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-CONTAINER-CLASSES"
->Container classes</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN2631"
-></A
-><H2
->Name</H2
->Container classes -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN2634"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-container-classes.html#GTS-CONTAINER-CLASS-CAPS"
->GTS_CONTAINER_CLASS</A
->             (klass)
-#define     <A
-HREF="gts-container-classes.html#GTS-CONTAINER-CAPS"
->GTS_CONTAINER</A
->                   (obj)
-#define     <A
-HREF="gts-container-classes.html#GTS-IS-CONTAINER-CAPS"
->GTS_IS_CONTAINER</A
->                (obj)
-struct      <A
-HREF="gts-container-classes.html#GTSCONTAINERCLASS"
->GtsContainerClass</A
->;
-struct      <A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
->;
-
-<A
-HREF="gts-container-classes.html#GTSCONTAINERCLASS"
->GtsContainerClass</A
->* <A
-HREF="gts-container-classes.html#GTS-CONTAINER-CLASS"
->gts_container_class</A
->      (void);
-<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
->* <A
-HREF="gts-container-classes.html#GTS-CONTAINER-NEW"
->gts_container_new</A
->             (<A
-HREF="gts-container-classes.html#GTSCONTAINERCLASS"
->GtsContainerClass</A
-> *klass);
-void        <A
-HREF="gts-container-classes.html#GTS-CONTAINER-ADD"
->gts_container_add</A
->               (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c,
-                                             <A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> *item);
-void        <A
-HREF="gts-container-classes.html#GTS-CONTAINER-REMOVE"
->gts_container_remove</A
->            (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c,
-                                             <A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> *item);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-container-classes.html#GTS-CONTAINER-SIZE"
->gts_container_size</A
->              (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c);
-void        <A
-HREF="gts-container-classes.html#GTS-CONTAINER-FOREACH"
->gts_container_foreach</A
->           (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-
-#define     <A
-HREF="gts-container-classes.html#GTS-HASH-CONTAINER-CLASS-CAPS"
->GTS_HASH_CONTAINER_CLASS</A
->        (klass)
-#define     <A
-HREF="gts-container-classes.html#GTS-HASH-CONTAINER-CAPS"
->GTS_HASH_CONTAINER</A
->              (obj)
-#define     <A
-HREF="gts-container-classes.html#GTS-IS-HASH-CONTAINER-CAPS"
->GTS_IS_HASH_CONTAINER</A
->           (obj)
-struct      <A
-HREF="gts-container-classes.html#GTSHASHCONTAINERCLASS"
->GtsHashContainerClass</A
->;
-struct      <A
-HREF="gts-container-classes.html#GTSHASHCONTAINER"
->GtsHashContainer</A
->;
-
-<A
-HREF="gts-container-classes.html#GTSHASHCONTAINERCLASS"
->GtsHashContainerClass</A
->* <A
-HREF="gts-container-classes.html#GTS-HASH-CONTAINER-CLASS"
->gts_hash_container_class</A
->
-                                            (void);
-
-#define     <A
-HREF="gts-container-classes.html#GTS-SLIST-CONTAINER-CLASS-CAPS"
->GTS_SLIST_CONTAINER_CLASS</A
->       (klass)
-#define     <A
-HREF="gts-container-classes.html#GTS-SLIST-CONTAINER-CAPS"
->GTS_SLIST_CONTAINER</A
->             (obj)
-#define     <A
-HREF="gts-container-classes.html#GTS-IS-SLIST-CONTAINER-CAPS"
->GTS_IS_SLIST_CONTAINER</A
->          (obj)
-struct      <A
-HREF="gts-container-classes.html#GTSSLISTCONTAINERCLASS"
->GtsSListContainerClass</A
->;
-struct      <A
-HREF="gts-container-classes.html#GTSSLISTCONTAINER"
->GtsSListContainer</A
->;
-
-<A
-HREF="gts-container-classes.html#GTSSLISTCONTAINERCLASS"
->GtsSListContainerClass</A
->* <A
-HREF="gts-container-classes.html#GTS-SLIST-CONTAINER-CLASS"
->gts_slist_container_class</A
->
-                                            (void);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN2674"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN2677"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2679"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-CLASS-CAPS"
-></A
->GTS_CONTAINER_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CONTAINER_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2693"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-CAPS"
-></A
->GTS_CONTAINER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CONTAINER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2707"
-></A
-><H3
-><A
-NAME="GTS-IS-CONTAINER-CAPS"
-></A
->GTS_IS_CONTAINER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_CONTAINER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2721"
-></A
-><H3
-><A
-NAME="GTSCONTAINERCLASS"
-></A
->struct GtsContainerClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsContainerClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2726"
-></A
-><H3
-><A
-NAME="GTSCONTAINER"
-></A
->struct GtsContainer</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsContainer {
-  GtsSListContainee object;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The container object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-containee-classes.html#GTSSLISTCONTAINEE"
->GtsSListContainee</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2741"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-CLASS"
-></A
->gts_container_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-container-classes.html#GTSCONTAINERCLASS"
->GtsContainerClass</A
->* gts_container_class      (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2756"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-NEW"
-></A
->gts_container_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
->* gts_container_new             (<A
-HREF="gts-container-classes.html#GTSCONTAINERCLASS"
->GtsContainerClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2776"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-ADD"
-></A
->gts_container_add ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_container_add               (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c,
-                                             <A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> *item);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->item</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2796"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-REMOVE"
-></A
->gts_container_remove ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_container_remove            (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c,
-                                             <A
-HREF="gts-containee-classes.html#GTSCONTAINEE"
->GtsContainee</A
-> *item);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->item</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2816"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-SIZE"
-></A
->gts_container_size ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_container_size              (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2836"
-></A
-><H3
-><A
-NAME="GTS-CONTAINER-FOREACH"
-></A
->gts_container_foreach ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_container_foreach           (<A
-HREF="gts-container-classes.html#GTSCONTAINER"
->GtsContainer</A
-> *c,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2861"
-></A
-><H3
-><A
-NAME="GTS-HASH-CONTAINER-CLASS-CAPS"
-></A
->GTS_HASH_CONTAINER_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_HASH_CONTAINER_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2875"
-></A
-><H3
-><A
-NAME="GTS-HASH-CONTAINER-CAPS"
-></A
->GTS_HASH_CONTAINER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_HASH_CONTAINER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2889"
-></A
-><H3
-><A
-NAME="GTS-IS-HASH-CONTAINER-CAPS"
-></A
->GTS_IS_HASH_CONTAINER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_HASH_CONTAINER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2903"
-></A
-><H3
-><A
-NAME="GTSHASHCONTAINERCLASS"
-></A
->struct GtsHashContainerClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHashContainerClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2908"
-></A
-><H3
-><A
-NAME="GTSHASHCONTAINER"
-></A
->struct GtsHashContainer</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHashContainer {
-  GtsContainer c;
-
-  GHashTable * items;
-  gboolean frozen;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2913"
-></A
-><H3
-><A
-NAME="GTS-HASH-CONTAINER-CLASS"
-></A
->gts_hash_container_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-container-classes.html#GTSHASHCONTAINERCLASS"
->GtsHashContainerClass</A
->* gts_hash_container_class
-                                            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2928"
-></A
-><H3
-><A
-NAME="GTS-SLIST-CONTAINER-CLASS-CAPS"
-></A
->GTS_SLIST_CONTAINER_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SLIST_CONTAINER_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2942"
-></A
-><H3
-><A
-NAME="GTS-SLIST-CONTAINER-CAPS"
-></A
->GTS_SLIST_CONTAINER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SLIST_CONTAINER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2956"
-></A
-><H3
-><A
-NAME="GTS-IS-SLIST-CONTAINER-CAPS"
-></A
->GTS_IS_SLIST_CONTAINER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_SLIST_CONTAINER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2970"
-></A
-><H3
-><A
-NAME="GTSSLISTCONTAINERCLASS"
-></A
->struct GtsSListContainerClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSListContainerClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2975"
-></A
-><H3
-><A
-NAME="GTSSLISTCONTAINER"
-></A
->struct GtsSListContainer</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSListContainer {
-  GtsContainer c;
-
-  GSList * items;
-  gboolean frozen;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2980"
-></A
-><H3
-><A
-NAME="GTS-SLIST-CONTAINER-CLASS"
-></A
->gts_slist_container_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-container-classes.html#GTSSLISTCONTAINERCLASS"
->GtsSListContainerClass</A
->* gts_slist_container_class
-                                            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-object-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-containee-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Object class</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Containee classes</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-delaunay-and-constrained-delaunay-triangulations.html b/doc/html/gts-delaunay-and-constrained-delaunay-triangulations.html
deleted file mode 100644
index ec47794..0000000
--- a/doc/html/gts-delaunay-and-constrained-delaunay-triangulations.html
+++ /dev/null
@@ -1,2257 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Delaunay and constrained Delaunay triangulations</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Surface operations"
-HREF="c9853.html"><LINK
-REL="PREVIOUS"
-TITLE="Isosurfaces from 3D functions"
-HREF="gts-isosurfaces-from-3d-functions.html"><LINK
-REL="NEXT"
-TITLE="Progressive and Hierarchical surfaces"
-HREF="c12040.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-DELAUNAY-AND-CONSTRAINED-DELAUNAY-TRIANGULATIONS"
->Delaunay and constrained Delaunay triangulations</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN11548"
-></A
-><H2
->Name</H2
->Delaunay and constrained Delaunay triangulations -- implementation of a dynamic Delaunay triangulation algorithm.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN11551"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-CONSTRAINT-CLASS-CAPS"
->GTS_CONSTRAINT_CLASS</A
->            (klass)
-#define     <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-CONSTRAINT-CAPS"
->GTS_CONSTRAINT</A
->                  (obj)
-#define     <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-IS-CONSTRAINT-CAPS"
->GTS_IS_CONSTRAINT</A
->               (obj)
-struct      <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS"
->GtsConstraintClass</A
->;
-struct      <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
->;
-
-<A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS"
->GtsConstraintClass</A
->* <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-CONSTRAINT-CLASS"
->gts_constraint_class</A
->    (void);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-POINT-LOCATE"
->gts_point_locate</A
->                (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *guess);
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-ADD-VERTEX"
->gts_delaunay_add_vertex</A
->         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *guess);
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-ADD-VERTEX-TO-FACE"
->gts_delaunay_add_vertex_to_face</A
-> (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);
-void        <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REMOVE-VERTEX"
->gts_delaunay_remove_vertex</A
->      (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-ADD-CONSTRAINT"
->gts_delaunay_add_constraint</A
->     (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
-> *c);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-CHECK"
->gts_delaunay_check</A
->              (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-void        <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REMOVE-HULL"
->gts_delaunay_remove_hull</A
->        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-CONFORM"
->gts_delaunay_conform</A
->            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> steiner_max,
-                                             <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
-> encroaches,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REFINE"
->gts_delaunay_refine</A
->             (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> steiner_max,
-                                             <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
-> encroaches,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> encroach_data,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> cost,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> cost_data);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN11602"
-></A
-><H2
->Description</H2
-><P
->The functions described in this section are useful to build two-dimensional Delaunay and constrained Delaunay triangulations. Only the <TT
-CLASS="PARAMETER"
-><I
->x</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->y</I
-></TT
-> coordinates of the points are taken into account.</P
-><P
->The algorithm is fully dynamic (insertion and deletion) for Delaunay triangulation and semi-dynamic (insertion only of vertices and constraints) for constrained Delaunay triangulation. </P
-><P
->The insertion part uses a very simple jump-and-walk location algorithm which can be used on any (even non-Delaunay) 2D triangulation as long as its boundary is convex.</P
-><P
->The functions <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-CONFORM"
->gts_delaunay_conform</A
->() and <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REFINE"
->gts_delaunay_refine</A
->() can be used to build Delaunay conforming constrained triangulations and to refine them.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN11612"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11614"
-></A
-><H3
-><A
-NAME="GTS-CONSTRAINT-CLASS-CAPS"
-></A
->GTS_CONSTRAINT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CONSTRAINT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS"
->GtsConstraintClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS"
->GtsConstraintClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11631"
-></A
-><H3
-><A
-NAME="GTS-CONSTRAINT-CAPS"
-></A
->GTS_CONSTRAINT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CONSTRAINT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11648"
-></A
-><H3
-><A
-NAME="GTS-IS-CONSTRAINT-CAPS"
-></A
->GTS_IS_CONSTRAINT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_CONSTRAINT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11666"
-></A
-><H3
-><A
-NAME="GTSCONSTRAINTCLASS"
-></A
->struct GtsConstraintClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsConstraintClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The constraint class derived from <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11672"
-></A
-><H3
-><A
-NAME="GTSCONSTRAINT"
-></A
->struct GtsConstraint</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsConstraint;</PRE
-></TD
-></TR
-></TABLE
-><P
->The constraint object derived from <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11678"
-></A
-><H3
-><A
-NAME="GTS-CONSTRAINT-CLASS"
-></A
->gts_constraint_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS"
->GtsConstraintClass</A
->* gts_constraint_class    (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS"
->GtsConstraintClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11695"
-></A
-><H3
-><A
-NAME="GTS-POINT-LOCATE"
-></A
->gts_point_locate ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_point_locate                (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *guess);</PRE
-></TD
-></TR
-></TABLE
-><P
->Locates the face of the planar projection of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> containing
-<TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->. The planar projection of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> must define a connected set
-of triangles without holes and bounded by a convex boundary. The
-algorithm is randomized and performs in O(n^1/3) expected time
-where n is the number of triangles of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</P
-><P
->If a good <TT
-CLASS="PARAMETER"
-><I
->guess</I
-></TT
-> is given the point location can be significantly faster.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->guess</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> or a face of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> close to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> containing <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is not
-contained within the boundary of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11743"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-ADD-VERTEX"
-></A
->gts_delaunay_add_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_delaunay_add_vertex         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *guess);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds vertex <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> to the Delaunay triangulation defined by
-<TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->. If <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is not contained in the convex hull bounding
-<TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is not added to the triangulation.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.  </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.  </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->guess</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> or a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> to be used as an initial
-guess for point location.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> is <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> has been successfully added to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> or was
-already contained in <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> if <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is not contained in the
-convex hull bounding surface or a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> having the same x and
-y coordinates as <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11792"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-ADD-VERTEX-TO-FACE"
-></A
->gts_delaunay_add_vertex_to_face ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_delaunay_add_vertex_to_face (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds vertex <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> to the face <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> of the Delaunay triangulation defined
-by <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> is <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> has been successfully added to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> or was
-already contained in <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> or a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> having the same x and
-y coordinates as <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11836"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-REMOVE-VERTEX"
-></A
->gts_delaunay_remove_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_delaunay_remove_vertex      (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> from the Delaunay triangulation defined by <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->,
-restores the Delaunay property and destroys <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->. Vertex <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> must not
-be used by any constrained edge otherwise the triangulation is not
-guaranteed to be Delaunay.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11863"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-ADD-CONSTRAINT"
-></A
->gts_delaunay_add_constraint ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_delaunay_add_constraint     (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
-> *c);</PRE
-></TD
-></TR
-></TABLE
-><P
->Add constraint <TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> to the constrained Delaunay triangulation defined by
-<TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT"
->GtsConstraint</A
-> conflicting (i.e. intersecting) with <TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> 
-which were removed from <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11896"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-CHECK"
-></A
->gts_delaunay_check ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_delaunay_check              (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> if the planar projection of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> is a Delaunay 
-triangulation (unconstrained), a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> violating the Delaunay
-property otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11921"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-REMOVE-HULL"
-></A
->gts_delaunay_remove_hull ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_delaunay_remove_hull        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes all the edges of the boundary of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> which are not
-constraints.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11939"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-CONFORM"
-></A
->gts_delaunay_conform ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_delaunay_conform            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> steiner_max,
-                                             <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
-> encroaches,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Recursively split constraints of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> which are encroached by
-vertices of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> (see Shewchuk 96 for details). The split
-constraints are destroyed and replaced by a set of new constraints
-of the same class. If <A
-HREF="gts-vertices.html#GTS-VERTEX-ENCROACHES-EDGE"
->gts_vertex_encroaches_edge</A
->() is used for
-<TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
->, the resulting surface will be Delaunay conforming.</P
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->steiner_max</I
-></TT
-> is positive or nul, the recursive splitting
-procedure will stop when this maximum number of Steiner points is
-reached. In that case the resulting surface will not necessarily be
-Delaunay conforming.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> describing a constrained Delaunay triangulation.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->steiner_max</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> maximum number of Steiner points.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user-data to pass to <TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of remaining encroached edges. If <TT
-CLASS="PARAMETER"
-><I
->steiner_max</I
-></TT
->
-is set to a negative value and <A
-HREF="gts-vertices.html#GTS-VERTEX-ENCROACHES-EDGE"
->gts_vertex_encroaches_edge</A
->() is used
-for <TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
-> this should always be zero. </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11987"
-></A
-><H3
-><A
-NAME="GTS-DELAUNAY-REFINE"
-></A
->gts_delaunay_refine ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_delaunay_refine             (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> steiner_max,
-                                             <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
-> encroaches,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> encroach_data,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> cost,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> cost_data);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of the refinement algorithm described in Ruppert
-(1995) and Shewchuk (1996).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> describing a conforming Delaunay triangulation.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->steiner_max</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> maximum number of Steiner points.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->encroach_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user-data to pass to <TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> used to sort the faces during refinement.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user-data to pass to <TT
-CLASS="PARAMETER"
-><I
->cost</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of unrefined faces of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> left. Should be zero
-if <TT
-CLASS="PARAMETER"
-><I
->steiner_max</I
-></TT
-> is set to a negative value.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Isosurfaces from 3D functions</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Progressive and Hierarchical surfaces</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-edges.html b/doc/html/gts-edges.html
deleted file mode 100644
index b27fe4d..0000000
--- a/doc/html/gts-edges.html
+++ /dev/null
@@ -1,2595 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Edges</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Segments"
-HREF="gts-segments.html"><LINK
-REL="NEXT"
-TITLE="Triangles"
-HREF="gts-triangles.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-segments.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-triangles.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-EDGES"
->Edges</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN5150"
-></A
-><H2
->Name</H2
->Edges -- edge object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN5153"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-edges.html#GTS-EDGE-CLASS-CAPS"
->GTS_EDGE_CLASS</A
->                  (klass)
-#define     <A
-HREF="gts-edges.html#GTS-EDGE-CAPS"
->GTS_EDGE</A
->                        (obj)
-#define     <A
-HREF="gts-edges.html#GTS-IS-EDGE-CAPS"
->GTS_IS_EDGE</A
->                     (obj)
-struct      <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->;
-struct      <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->;
-
-<A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->* <A
-HREF="gts-edges.html#GTS-EDGE-CLASS"
->gts_edge_class</A
->                (void);
-<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    <A
-HREF="gts-edges.html#GTS-EDGE-NEW"
->gts_edge_new</A
->                    (<A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v2);
-void        <A
-HREF="gts-edges.html#GTS-EDGE-REPLACE"
->gts_edge_replace</A
->                (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *with);
-#define     <A
-HREF="gts-edges.html#GTS-EDGE-IS-UNATTACHED"
->gts_edge_is_unattached</A
->          (s)
-<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    <A
-HREF="gts-edges.html#GTS-EDGE-IS-DUPLICATE"
->gts_edge_is_duplicate</A
->           (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-edges.html#GTS-EDGE-HAS-PARENT-SURFACE"
->gts_edge_has_parent_surface</A
->     (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-edges.html#GTS-EDGE-HAS-ANY-PARENT-SURFACE"
->gts_edge_has_any_parent_surface</A
-> (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-edges.html#GTS-EDGE-IS-BOUNDARY"
->gts_edge_is_boundary</A
->            (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-edges.html#GTS-EDGE-IS-CONTACT"
->gts_edge_is_contact</A
->             (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-edges.html#GTS-EDGE-BELONGS-TO-TETRAHEDRON"
->gts_edge_belongs_to_tetrahedron</A
-> (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-edges.html#GTS-EDGE-FACE-NUMBER"
->gts_edge_face_number</A
->            (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    (<A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->*GtsEncroachFunc</A
->)              (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-edges.html#GTS-EDGE-IS-ENCROACHED"
->gts_edge_is_encroached</A
->          (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
-> encroaches,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
->*      <A
-HREF="gts-edges.html#GTS-EDGES-MERGE"
->gts_edges_merge</A
->                 (<GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
-> *edges);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-edges.html#GTS-EDGES-FROM-VERTICES"
->gts_edges_from_vertices</A
->         (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *vertices,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *parent);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN5215"
-></A
-><H2
->Description</H2
-><P
->Edges are derived from <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->. They are used to define <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN5220"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5222"
-></A
-><H3
-><A
-NAME="GTS-EDGE-CLASS-CAPS"
-></A
->GTS_EDGE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_EDGE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5239"
-></A
-><H3
-><A
-NAME="GTS-EDGE-CAPS"
-></A
->GTS_EDGE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_EDGE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5256"
-></A
-><H3
-><A
-NAME="GTS-IS-EDGE-CAPS"
-></A
->GTS_IS_EDGE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_EDGE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5274"
-></A
-><H3
-><A
-NAME="GTSEDGECLASS"
-></A
->struct GtsEdgeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsEdgeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The edge class. No virtual function associated.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5279"
-></A
-><H3
-><A
-NAME="GTSEDGE"
-></A
->struct GtsEdge</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsEdge {
-  GtsSegment segment;
-
-  GSList * triangles;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The edge object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->segment</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->triangles</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->List of <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> using this edge.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5300"
-></A
-><H3
-><A
-NAME="GTS-EDGE-CLASS"
-></A
->gts_edge_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->* gts_edge_class                (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5317"
-></A
-><H3
-><A
-NAME="GTS-EDGE-NEW"
-></A
->gts_edge_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    gts_edge_new                    (<A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> linking <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5354"
-></A
-><H3
-><A
-NAME="GTS-EDGE-REPLACE"
-></A
->gts_edge_replace ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_edge_replace                (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *with);</PRE
-></TD
-></TR
-></TABLE
-><P
->Replaces <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> with <TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
->. For each triangle which uses <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as an
-edge, <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> is replaced with <TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
->. The <TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
->->triangles list is
-updated appropriately and the <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
->->triangles list is freed and set
-to <TT
-CLASS="LITERAL"
->NULL</TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5385"
-></A
-><H3
-><A
-NAME="GTS-EDGE-IS-UNATTACHED"
-></A
->gts_edge_is_unattached()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define       gts_edge_is_unattached(s) ((s)->triangles == NULL ? TRUE : FALSE)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if no triangles uses <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> as an edge, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5403"
-></A
-><H3
-><A
-NAME="GTS-EDGE-IS-DUPLICATE"
-></A
->gts_edge_is_duplicate ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    gts_edge_is_duplicate           (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the first <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> different from <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> which shares the
-same endpoints or <TT
-CLASS="LITERAL"
->NULL</TT
-> if there is none.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5428"
-></A
-><H3
-><A
-NAME="GTS-EDGE-HAS-PARENT-SURFACE"
-></A
->gts_edge_has_parent_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_edge_has_parent_surface     (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> having <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as an edge, <TT
-CLASS="LITERAL"
->NULL</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5460"
-></A
-><H3
-><A
-NAME="GTS-EDGE-HAS-ANY-PARENT-SURFACE"
-></A
->gts_edge_has_any_parent_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_edge_has_any_parent_surface (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> is not an edge of any triangle or if all the
-faces having <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> has an edge do not belong to any surface,
-a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> belonging to a surface and having <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as an edge.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5487"
-></A
-><H3
-><A
-NAME="GTS-EDGE-IS-BOUNDARY"
-></A
->gts_edge_is_boundary ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_edge_is_boundary            (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the unique <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> (which belongs to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->) and which
-has <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as an edge (i.e. <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> is a boundary edge (of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->)) or <TT
-CLASS="LITERAL"
->NULL</TT
-> 
-if there is more than one or no faces (belonging to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->) and
-with <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as an edge.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5524"
-></A
-><H3
-><A
-NAME="GTS-EDGE-IS-CONTACT"
-></A
->gts_edge_is_contact ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_edge_is_contact             (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.  </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of sets of connected triangles sharing <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as a
-contact edge.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5547"
-></A
-><H3
-><A
-NAME="GTS-EDGE-BELONGS-TO-TETRAHEDRON"
-></A
->gts_edge_belongs_to_tetrahedron ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_edge_belongs_to_tetrahedron (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> is used by faces forming a tetrahedron, <TT
-CLASS="LITERAL"
->FALSE</TT
->
-otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5572"
-></A
-><H3
-><A
-NAME="GTS-EDGE-FACE-NUMBER"
-></A
->gts_edge_face_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_edge_face_number            (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of faces using <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> and belonging to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5602"
-></A
-><H3
-><A
-NAME="GTSENCROACHFUNC"
-></A
->GtsEncroachFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    (*GtsEncroachFunc)              (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5637"
-></A
-><H3
-><A
-NAME="GTS-EDGE-IS-ENCROACHED"
-></A
->gts_edge_is_encroached ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_edge_is_encroached          (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
-> encroaches,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> describing a (constrained) Delaunay triangulation.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSENCROACHFUNC"
->GtsEncroachFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> and encroaching upon <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
->
-(as defined by <TT
-CLASS="PARAMETER"
-><I
->encroaches</I
-></TT
->) or <TT
-CLASS="LITERAL"
->NULL</TT
-> if there is none.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5682"
-></A
-><H3
-><A
-NAME="GTS-EDGES-MERGE"
-></A
->gts_edges_merge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
->*      gts_edges_merge                 (<GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
-> *edges);</PRE
-></TD
-></TR
-></TABLE
-><P
->For each edge in <TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
-> check if it is duplicated (as
-returned by <A
-HREF="gts-edges.html#GTS-EDGE-IS-DUPLICATE"
->gts_edge_is_duplicate</A
->()). If it is replace it by its
-duplicate, destroy it and remove it from the list.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the updated <TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
-> list.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5707"
-></A
-><H3
-><A
-NAME="GTS-EDGES-FROM-VERTICES"
-></A
->gts_edges_from_vertices ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_edges_from_vertices         (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *vertices,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *parent);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->parent</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of unique <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> which have one of their vertices in 
-<TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
-> and are used by a face of <TT
-CLASS="PARAMETER"
-><I
->parent</I
-></TT
->. </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-segments.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-triangles.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Segments</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Triangles</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-extended-binary-heaps.html b/doc/html/gts-extended-binary-heaps.html
deleted file mode 100644
index ae3d97f..0000000
--- a/doc/html/gts-extended-binary-heaps.html
+++ /dev/null
@@ -1,2319 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Extended binary heaps</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="PREVIOUS"
-TITLE="Binary heaps"
-HREF="gts-binary-heaps.html"><LINK
-REL="NEXT"
-TITLE="First In First Out heaps"
-HREF="gts-first-in-first-out-heaps.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-first-in-first-out-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-EXTENDED-BINARY-HEAPS"
->Extended binary heaps</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN260"
-></A
-><H2
->Name</H2
->Extended binary heaps -- efficient data structure for priority heaps allowing removal of elements.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN263"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-struct      <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->;
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     (<A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->*GtsKeyFunc</A
->)                   (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> item,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-struct      <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->;
-
-<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->*   <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-NEW"
->gts_eheap_new</A
->                   (<A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> key_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->* <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-INSERT"
->gts_eheap_insert</A
->              (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p);
-<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->* <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-INSERT-WITH-KEY"
->gts_eheap_insert_with_key</A
->     (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> key);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-TOP"
->gts_eheap_top</A
->                   (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *key);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE-TOP"
->gts_eheap_remove_top</A
->            (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *key);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE"
->gts_eheap_remove</A
->                (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> *p);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-DECREASE-KEY"
->gts_eheap_decrease_key</A
->          (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> new_key);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-KEY"
->gts_eheap_key</A
->                   (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-RANDOMIZED"
->gts_eheap_randomized</A
->            (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> randomized);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-UPDATE"
->gts_eheap_update</A
->                (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-FREEZE"
->gts_eheap_freeze</A
->                (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-THAW"
->gts_eheap_thaw</A
->                  (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-FOREACH"
->gts_eheap_foreach</A
->               (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GFUNC"
->GFunc</GTKDOCLINK
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-SIZE"
->gts_eheap_size</A
->                  (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);
-void        <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-DESTROY"
->gts_eheap_destroy</A
->               (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN323"
-></A
-><H2
->Description</H2
-><P
->This data structure is similar to the binary heap implementation but adds the two operations <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-DECREASE-KEY"
->gts_eheap_decrease_key</A
->() and <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE"
->gts_eheap_remove</A
->(). Contrary to the binary heap implementation, keys are stored in a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> structure and comparisons between keys are performed directly (thus saving a call to a comparison function). This structure consequently provides generally faster operations at the expense of memory use. If your comparison function is simple and you don't need the extra functionalities, it is usually better to use a <A
-HREF="gts-binary-heaps.html#GTSHEAP"
->GtsHeap</A
->.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN330"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN332"
-></A
-><H3
-><A
-NAME="GTSEHEAPPAIR"
-></A
->struct GtsEHeapPair</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsEHeapPair {
-  gpointer data;
-  gdouble key;
-  guint pos;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The extended heap structure.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->data</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Points to the item stored in the heap.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->key</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Value of the key for this item.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->pos</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Private field.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN357"
-></A
-><H3
-><A
-NAME="GTSKEYFUNC"
-></A
->GtsKeyFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     (*GtsKeyFunc)                   (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> item,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->item</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->A pointer to an item to be stored in the heap.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->User data passed to <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-NEW"
->gts_eheap_new</A
->().</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the value of the key for the given item.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN383"
-></A
-><H3
-><A
-NAME="GTSEHEAP"
-></A
->struct GtsEHeap</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsEHeap;</PRE
-></TD
-></TR
-></TABLE
-><P
->An opaque data structure describing an extended binary heap.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN388"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-NEW"
-></A
->gts_eheap_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->*   gts_eheap_new                   (<A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> key_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->key_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->key_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> using <TT
-CLASS="PARAMETER"
-><I
->key_func</I
-></TT
-> as key.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN419"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-INSERT"
-></A
->gts_eheap_insert ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->* gts_eheap_insert              (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p);</PRE
-></TD
-></TR
-></TABLE
-><P
->Inserts a new element <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> in the heap.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to add to the heap.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> describing the position of the element in the heap.
-This pointer is necessary for <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE"
->gts_eheap_remove</A
->() and 
-<A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-DECREASE-KEY"
->gts_eheap_decrease_key</A
->().</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN450"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-INSERT-WITH-KEY"
-></A
->gts_eheap_insert_with_key ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->* gts_eheap_insert_with_key     (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> key);</PRE
-></TD
-></TR
-></TABLE
-><P
->Inserts a new element <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> in the heap.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to add to the heap.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->key</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the value of the key associated to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> describing the position of the element in the heap.
-This pointer is necessary for <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE"
->gts_eheap_remove</A
->() and 
-<A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-DECREASE-KEY"
->gts_eheap_decrease_key</A
->().</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN487"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-TOP"
-></A
->gts_eheap_top ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_eheap_top                   (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *key);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->key</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a gdouble or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the element at the top of the heap and optionally (if <TT
-CLASS="PARAMETER"
-><I
->key</I
-></TT
-> is not
-<TT
-CLASS="LITERAL"
->NULL</TT
->) its key.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN517"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-REMOVE-TOP"
-></A
->gts_eheap_remove_top ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_eheap_remove_top            (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *key);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes the element at the top of the heap and optionally (if <TT
-CLASS="PARAMETER"
-><I
->key</I
-></TT
-> is not
-<TT
-CLASS="LITERAL"
->NULL</TT
->) returns the value of its key.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->key</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a gdouble or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the element at the top of the heap.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN547"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-REMOVE"
-></A
->gts_eheap_remove ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_eheap_remove                (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> *p);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes element corresponding to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> from <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> in O(log n).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the element just removed from <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN578"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-DECREASE-KEY"
-></A
->gts_eheap_decrease_key ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_decrease_key          (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> new_key);</PRE
-></TD
-></TR
-></TABLE
-><P
->Decreases the value of the key of the element at position <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->new_key</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new value of the key for this element. Must be smaller than
-the current key.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN607"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-KEY"
-></A
->gts_eheap_key ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_eheap_key                   (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> p);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to be tested;</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the value of the key for pointer <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN635"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-RANDOMIZED"
-></A
->gts_eheap_randomized ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_randomized            (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> randomized);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->randomized</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> whether <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> should be randomized.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN658"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-UPDATE"
-></A
->gts_eheap_update ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_update                (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Updates the key of each element of <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> and reorders it.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN676"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-FREEZE"
-></A
->gts_eheap_freeze ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_freeze                (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Freezes the heap. Any subsequent operation will not preserve the heap
-property. Used in conjunction with <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-INSERT"
->gts_eheap_insert</A
->() and <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-THAW"
->gts_eheap_thaw</A
->()
-to create a heap in O(n) time.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN695"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-THAW"
-></A
->gts_eheap_thaw ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_thaw                  (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> has been frozen previously using <A
-HREF="gts-extended-binary-heaps.html#GTS-EHEAP-FREEZE"
->gts_eheap_freeze</A
->(), reorder it
-in O(n) time and unfreeze it.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN714"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-FOREACH"
-></A
->gts_eheap_foreach ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_foreach               (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap,
-                                             <GTKDOCLINK
-HREF="GFUNC"
->GFunc</GTKDOCLINK
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function to call for each element in the heap.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> to pass to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN742"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-SIZE"
-></A
->gts_eheap_size ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_eheap_size                  (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of items in <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN765"
-></A
-><H3
-><A
-NAME="GTS-EHEAP-DESTROY"
-></A
->gts_eheap_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_eheap_destroy               (<A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Free all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-first-in-first-out-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Binary heaps</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->First In First Out heaps</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-faces.html b/doc/html/gts-faces.html
deleted file mode 100644
index 36baecb..0000000
--- a/doc/html/gts-faces.html
+++ /dev/null
@@ -1,1649 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Faces</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Triangles"
-HREF="gts-triangles.html"><LINK
-REL="NEXT"
-TITLE="Surfaces"
-HREF="gts-surfaces.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-triangles.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-FACES"
->Faces</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN6861"
-></A
-><H2
->Name</H2
->Faces -- face object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN6864"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-faces.html#GTS-FACE-CLASS-CAPS"
->GTS_FACE_CLASS</A
->                  (klass)
-#define     <A
-HREF="gts-faces.html#GTS-FACE-CAPS"
->GTS_FACE</A
->                        (obj)
-#define     <A
-HREF="gts-faces.html#GTS-IS-FACE-CAPS"
->GTS_IS_FACE</A
->                     (obj)
-struct      <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->;
-struct      <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->;
-
-<A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->* <A
-HREF="gts-faces.html#GTS-FACE-CLASS"
->gts_face_class</A
->                (void);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-faces.html#GTS-FACE-NEW"
->gts_face_new</A
->                    (<A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
-> *klass,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-faces.html#GTS-FACE-HAS-PARENT-SURFACE"
->gts_face_has_parent_surface</A
->     (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-faces.html#GTS-FACE-NEIGHBOR-NUMBER"
->gts_face_neighbor_number</A
->        (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-faces.html#GTS-FACE-NEIGHBORS"
->gts_face_neighbors</A
->              (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-void        <A
-HREF="gts-faces.html#GTS-FACE-FOREACH-NEIGHBOR"
->gts_face_foreach_neighbor</A
->       (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-faces.html#GTS-FACES-FROM-EDGES"
->gts_faces_from_edges</A
->            (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *edges,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN6901"
-></A
-><H2
->Description</H2
-><P
->Faces are derived from <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->. A collection of faces defined a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN6906"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6908"
-></A
-><H3
-><A
-NAME="GTS-FACE-CLASS-CAPS"
-></A
->GTS_FACE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_FACE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6925"
-></A
-><H3
-><A
-NAME="GTS-FACE-CAPS"
-></A
->GTS_FACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_FACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6942"
-></A
-><H3
-><A
-NAME="GTS-IS-FACE-CAPS"
-></A
->GTS_IS_FACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_FACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6960"
-></A
-><H3
-><A
-NAME="GTSFACECLASS"
-></A
->struct GtsFaceClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsFaceClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The face class derived from <A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6966"
-></A
-><H3
-><A
-NAME="GTSFACE"
-></A
->struct GtsFace</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsFace {
-  GtsTriangle triangle;
-
-  GSList * surfaces;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The face object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->triangle</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->surfaces</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->A list of <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> using this face.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6987"
-></A
-><H3
-><A
-NAME="GTS-FACE-CLASS"
-></A
->gts_face_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->* gts_face_class                (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7004"
-></A
-><H3
-><A
-NAME="GTS-FACE-NEW"
-></A
->gts_face_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_face_new                    (<A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
-> *klass,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> using <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> as edges.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7048"
-></A
-><H3
-><A
-NAME="GTS-FACE-HAS-PARENT-SURFACE"
-></A
->gts_face_has_parent_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_face_has_parent_surface     (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> belongs to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7080"
-></A
-><H3
-><A
-NAME="GTS-FACE-NEIGHBOR-NUMBER"
-></A
->gts_face_neighbor_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_face_neighbor_number        (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of faces neighbors of <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> and belonging to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7111"
-></A
-><H3
-><A
-NAME="GTS-FACE-NEIGHBORS"
-></A
->gts_face_neighbors ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_face_neighbors              (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of unique <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> neighbors of <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> and belonging to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7143"
-></A
-><H3
-><A
-NAME="GTS-FACE-FOREACH-NEIGHBOR"
-></A
->gts_face_foreach_neighbor ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_face_foreach_neighbor       (<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each neighbor of <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> (if not <TT
-CLASS="LITERAL"
->NULL</TT
->).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7183"
-></A
-><H3
-><A
-NAME="GTS-FACES-FROM-EDGES"
-></A
->gts_faces_from_edges ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_faces_from_edges            (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *edges,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
->Builds a list of unique faces which belong to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> and have
-one of their edges in <TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the list of faces.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-triangles.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Triangles</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surfaces</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-first-in-first-out-heaps.html b/doc/html/gts-first-in-first-out-heaps.html
deleted file mode 100644
index 33a1fe0..0000000
--- a/doc/html/gts-first-in-first-out-heaps.html
+++ /dev/null
@@ -1,1264 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->First In First Out heaps</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="PREVIOUS"
-TITLE="Extended binary heaps"
-HREF="gts-extended-binary-heaps.html"><LINK
-REL="NEXT"
-TITLE="Vectors and matrices"
-HREF="gts-vectors-and-matrices.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-extended-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vectors-and-matrices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-FIRST-IN-FIRST-OUT-HEAPS"
->First In First Out heaps</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN788"
-></A
-><H2
->Name</H2
->First In First Out heaps -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN791"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-struct      <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->;
-
-<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->*    <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-NEW"
->gts_fifo_new</A
->                    (void);
-void        <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-PUSH"
->gts_fifo_push</A
->                   (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-POP"
->gts_fifo_pop</A
->                    (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-TOP"
->gts_fifo_top</A
->                    (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-SIZE"
->gts_fifo_size</A
->                   (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);
-void        <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-FOREACH"
->gts_fifo_foreach</A
->                (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-IS-EMPTY"
->gts_fifo_is_empty</A
->               (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);
-void        <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-WRITE"
->gts_fifo_write</A
->                  (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);
-void        <A
-HREF="gts-first-in-first-out-heaps.html#GTS-FIFO-DESTROY"
->gts_fifo_destroy</A
->                (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN821"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN824"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN826"
-></A
-><H3
-><A
-NAME="GTSFIFO"
-></A
->struct GtsFifo</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsFifo;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN831"
-></A
-><H3
-><A
-NAME="GTS-FIFO-NEW"
-></A
->gts_fifo_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->*    gts_fifo_new                    (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN848"
-></A
-><H3
-><A
-NAME="GTS-FIFO-PUSH"
-></A
->gts_fifo_push ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_fifo_push                   (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Push <TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> into <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to add to <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN873"
-></A
-><H3
-><A
-NAME="GTS-FIFO-POP"
-></A
->gts_fifo_pop ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_fifo_pop                    (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes the first element from <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the first element in <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> is empty.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN899"
-></A
-><H3
-><A
-NAME="GTS-FIFO-TOP"
-></A
->gts_fifo_top ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_fifo_top                    (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the first element in <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> is empty.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN924"
-></A
-><H3
-><A
-NAME="GTS-FIFO-SIZE"
-></A
->gts_fifo_size ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_fifo_size                   (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of elements in <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN947"
-></A
-><H3
-><A
-NAME="GTS-FIFO-FOREACH"
-></A
->gts_fifo_foreach ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_fifo_foreach                (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> in order for each item in <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
->, passing <TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN979"
-></A
-><H3
-><A
-NAME="GTS-FIFO-IS-EMPTY"
-></A
->gts_fifo_is_empty ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_fifo_is_empty               (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> is empty, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1004"
-></A
-><H3
-><A
-NAME="GTS-FIFO-WRITE"
-></A
->gts_fifo_write ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_fifo_write                  (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes the content of <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> in <TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1028"
-></A
-><H3
-><A
-NAME="GTS-FIFO-DESTROY"
-></A
->gts_fifo_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_fifo_destroy                (<A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
-> *fifo);</PRE
-></TD
-></TR
-></TABLE
-><P
->Frees all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fifo</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-first-in-first-out-heaps.html#GTSFIFO"
->GtsFifo</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-extended-binary-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vectors-and-matrices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Extended binary heaps</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vectors and matrices</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-graph-class.html b/doc/html/gts-graph-class.html
deleted file mode 100644
index 39ef3a4..0000000
--- a/doc/html/gts-graph-class.html
+++ /dev/null
@@ -1,5119 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Graph class</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Graph and operations on graphs"
-HREF="c13676.html"><LINK
-REL="PREVIOUS"
-TITLE="Graph and operations on graphs"
-HREF="c13676.html"><LINK
-REL="NEXT"
-TITLE="Weighted graph"
-HREF="gts-weighted-graph.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-weighted-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-GRAPH-CLASS"
->Graph class</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN13683"
-></A
-><H2
->Name</H2
->Graph class -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN13686"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-graph-class.html#GTS-GNODE-CLASS-CAPS"
->GTS_GNODE_CLASS</A
->                 (klass)
-#define     <A
-HREF="gts-graph-class.html#GTS-GNODE-CAPS"
->GTS_GNODE</A
->                       (obj)
-#define     <A
-HREF="gts-graph-class.html#GTS-IS-GNODE-CAPS"
->GTS_IS_GNODE</A
->                    (obj)
-#define     <A
-HREF="gts-graph-class.html#GTS-GNODE-NEIGHBOR-CAPS"
->GTS_GNODE_NEIGHBOR</A
->              (n,e)
-struct      <A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->;
-struct      <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->;
-
-<A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->* <A
-HREF="gts-graph-class.html#GTS-GNODE-CLASS"
->gts_gnode_class</A
->              (void);
-<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   <A
-HREF="gts-graph-class.html#GTS-GNODE-NEW"
->gts_gnode_new</A
->                   (<A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
-> *klass);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-graph-class.html#GTS-GNODE-DEGREE"
->gts_gnode_degree</A
->                (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-void        <A
-HREF="gts-graph-class.html#GTS-GNODE-FOREACH-EDGE"
->gts_gnode_foreach_edge</A
->          (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-graph-class.html#GTS-GNODE-FOREACH-NEIGHBOR"
->gts_gnode_foreach_neighbor</A
->      (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-class.html#GTS-GNODE-WEIGHT"
->gts_gnode_weight</A
->                (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-class.html#GTS-GNODE-MOVE-COST"
->gts_gnode_move_cost</A
->             (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *src,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *dst);
-
-#define     <A
-HREF="gts-graph-class.html#GTS-GEDGE-CLASS-CAPS"
->GTS_GEDGE_CLASS</A
->                 (klass)
-#define     <A
-HREF="gts-graph-class.html#GTS-GEDGE-CAPS"
->GTS_GEDGE</A
->                       (obj)
-#define     <A
-HREF="gts-graph-class.html#GTS-IS-GEDGE-CAPS"
->GTS_IS_GEDGE</A
->                    (obj)
-struct      <A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->;
-struct      <A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
->;
-
-<A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->* <A
-HREF="gts-graph-class.html#GTS-GEDGE-CLASS"
->gts_gedge_class</A
->              (void);
-<A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
->*   <A
-HREF="gts-graph-class.html#GTS-GEDGE-NEW"
->gts_gedge_new</A
->                   (<A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n1,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n2);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-class.html#GTS-GEDGE-WEIGHT"
->gts_gedge_weight</A
->                (<A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
-> *e);
-#define     <A
-HREF="gts-graph-class.html#GTS-GEDGE-CONNECTS"
->gts_gedge_connects</A
->              (e, a1, a2)
-
-#define     <A
-HREF="gts-graph-class.html#GTS-GRAPH-CLASS-CAPS"
->GTS_GRAPH_CLASS</A
->                 (klass)
-#define     <A
-HREF="gts-graph-class.html#GTS-GRAPH-CAPS"
->GTS_GRAPH</A
->                       (obj)
-#define     <A
-HREF="gts-graph-class.html#GTS-IS-GRAPH-CAPS"
->GTS_IS_GRAPH</A
->                    (obj)
-struct      <A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->;
-struct      <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->;
-
-<A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->* <A
-HREF="gts-graph-class.html"
->gts_graph_class</A
->              (void);
-<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->*   <A
-HREF="gts-graph-class.html#GTS-GRAPH-NEW"
->gts_graph_new</A
->                   (<A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
-> *node_class,
-                                             <A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
-> *edge_class);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-graph-class.html#GTS-GRAPH-READ"
->gts_graph_read</A
->                  (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);
-void        <A
-HREF="gts-graph-class.html#GTS-GRAPH-PRINT-STATS"
->gts_graph_print_stats</A
->           (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);
-void        <A
-HREF="gts-graph-class.html#GTS-GRAPH-FOREACH-EDGE"
->gts_graph_foreach_edge</A
->          (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-struct      <A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
->;
-enum        <A
-HREF="gts-graph-class.html#GTSTRAVERSETYPE"
->GtsTraverseType</A
->;
-<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
->* <A
-HREF="gts-graph-class.html#GTS-GRAPH-TRAVERSE-NEW"
->gts_graph_traverse_new</A
->    (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSTRAVERSETYPE"
->GtsTraverseType</A
-> type,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> reinit);
-<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   <A
-HREF="gts-graph-class.html#GTS-GRAPH-TRAVERSE-NEXT"
->gts_graph_traverse_next</A
->         (<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> *t);
-<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   <A
-HREF="gts-graph-class.html#GTS-GRAPH-TRAVERSE-WHAT-NEXT"
->gts_graph_traverse_what_next</A
->    (<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> *t);
-void        <A
-HREF="gts-graph-class.html#GTS-GRAPH-TRAVERSE-DESTROY"
->gts_graph_traverse_destroy</A
->      (<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> *t);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-graph-class.html#GTS-GRAPH-EDGES-CUT"
->gts_graph_edges_cut</A
->             (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-class.html#GTS-GRAPH-EDGES-CUT-WEIGHT"
->gts_graph_edges_cut_weight</A
->      (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-graph-class.html#GTS-GRAPH-DISTANCE-SUM"
->gts_graph_distance_sum</A
->          (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *center);
-<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   <A
-HREF="gts-graph-class.html#GTS-GRAPH-FARTHEST"
->gts_graph_farthest</A
->              (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *gnodes);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-class.html#GTS-GRAPH-WEIGHT"
->gts_graph_weight</A
->                (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-
-#define     <A
-HREF="gts-graph-class.html#GTS-FNODE-CLASS-CAPS"
->GTS_FNODE_CLASS</A
->                 (klass)
-#define     <A
-HREF="gts-graph-class.html#GTS-FNODE-CAPS"
->GTS_FNODE</A
->                       (obj)
-#define     <A
-HREF="gts-graph-class.html#GTS-IS-FNODE-CAPS"
->GTS_IS_FNODE</A
->                    (obj)
-struct      <A
-HREF="gts-graph-class.html#GTSFNODE"
->GtsFNode</A
->;
-struct      <A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
->;
-
-<A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
->* <A
-HREF="gts-graph-class.html#GTS-FNODE-CLASS"
->gts_fnode_class</A
->              (void);
-<A
-HREF="gts-graph-class.html#GTSFNODE"
->GtsFNode</A
->*   <A
-HREF="gts-graph-class.html#GTS-FNODE-NEW"
->gts_fnode_new</A
->                   (<A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
-> *klass,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);
-
-<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->*   <A
-HREF="gts-graph-class.html#GTS-SURFACE-GRAPH-NEW"
->gts_surface_graph_new</A
->           (<A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->* <A
-HREF="gts-graph-class.html#GTS-SURFACE-GRAPH-SURFACE"
->gts_surface_graph_surface</A
->       (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *surface_graph,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN13813"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN13816"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13818"
-></A
-><H3
-><A
-NAME="GTS-GNODE-CLASS-CAPS"
-></A
->GTS_GNODE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GNODE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13832"
-></A
-><H3
-><A
-NAME="GTS-GNODE-CAPS"
-></A
->GTS_GNODE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GNODE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13846"
-></A
-><H3
-><A
-NAME="GTS-IS-GNODE-CAPS"
-></A
->GTS_IS_GNODE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_GNODE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13860"
-></A
-><H3
-><A
-NAME="GTS-GNODE-NEIGHBOR-CAPS"
-></A
->GTS_GNODE_NEIGHBOR()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_GNODE_NEIGHBOR(n,e)   (GTS_GEDGE (e)->n1 == n ? GTS_GEDGE (e)->n2 : GTS_GEDGE (e)->n2 == n ? GTS_GEDGE (e)->n1 : NULL)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13878"
-></A
-><H3
-><A
-NAME="GTSGNODECLASS"
-></A
->struct GtsGNodeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGNodeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13883"
-></A
-><H3
-><A
-NAME="GTSGNODE"
-></A
->struct GtsGNode</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGNode {
-  GtsSListContainer container;
-
-  guint level;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13888"
-></A
-><H3
-><A
-NAME="GTS-GNODE-CLASS"
-></A
->gts_gnode_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->* gts_gnode_class              (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13905"
-></A
-><H3
-><A
-NAME="GTS-GNODE-NEW"
-></A
->gts_gnode_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   gts_gnode_new                   (<A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13928"
-></A
-><H3
-><A
-NAME="GTS-GNODE-DEGREE"
-></A
->gts_gnode_degree ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_gnode_degree                (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of neighbors of <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> (belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> if <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> is not <TT
-CLASS="LITERAL"
->NULL</TT
->).</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13961"
-></A
-><H3
-><A
-NAME="GTS-GNODE-FOREACH-EDGE"
-></A
->gts_gnode_foreach_edge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_gnode_foreach_edge          (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each <A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
-> connecting <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> to another <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->
-(belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> if <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> is not <TT
-CLASS="LITERAL"
->NULL</TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14004"
-></A
-><H3
-><A
-NAME="GTS-GNODE-FOREACH-NEIGHBOR"
-></A
->gts_gnode_foreach_neighbor ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_gnode_foreach_neighbor      (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each neighbor <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> of <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> (belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> if
-<TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> is not <TT
-CLASS="LITERAL"
->NULL</TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14046"
-></A
-><H3
-><A
-NAME="GTS-GNODE-WEIGHT"
-></A
->gts_gnode_weight ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_gnode_weight                (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the weight of <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> as defined by the <GTKDOCLINK
-HREF="WEIGHT"
->weight</GTKDOCLINK
->() method of the
-<A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14071"
-></A
-><H3
-><A
-NAME="GTS-GNODE-MOVE-COST"
-></A
->gts_gnode_move_cost ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_gnode_move_cost             (<A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *src,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *dst);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->src</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> containing <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->dst</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the cost (increase in the sum of the weights of the edges cut) of
-moving <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> from <TT
-CLASS="PARAMETER"
-><I
->src</I
-></TT
-> to <TT
-CLASS="PARAMETER"
-><I
->dst</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14109"
-></A
-><H3
-><A
-NAME="GTS-GEDGE-CLASS-CAPS"
-></A
->GTS_GEDGE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GEDGE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14123"
-></A
-><H3
-><A
-NAME="GTS-GEDGE-CAPS"
-></A
->GTS_GEDGE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GEDGE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14137"
-></A
-><H3
-><A
-NAME="GTS-IS-GEDGE-CAPS"
-></A
->GTS_IS_GEDGE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_GEDGE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14151"
-></A
-><H3
-><A
-NAME="GTSGEDGECLASS"
-></A
->struct GtsGEdgeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGEdgeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14156"
-></A
-><H3
-><A
-NAME="GTSGEDGE"
-></A
->struct GtsGEdge</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGEdge {
-  GtsContainee containee;
-
-  GtsGNode * n1;
-  GtsGNode * n2;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14161"
-></A
-><H3
-><A
-NAME="GTS-GEDGE-CLASS"
-></A
->gts_gedge_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->* gts_gedge_class              (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14178"
-></A
-><H3
-><A
-NAME="GTS-GEDGE-NEW"
-></A
->gts_gedge_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
->*   gts_gedge_new                   (<A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n1,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
-> linking <TT
-CLASS="PARAMETER"
-><I
->n1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->n2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14215"
-></A
-><H3
-><A
-NAME="GTS-GEDGE-WEIGHT"
-></A
->gts_gedge_weight ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_gedge_weight                (<A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGEDGE"
->GtsGEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the weight of edge <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as defined by the <GTKDOCLINK
-HREF="WEIGHT"
->weight</GTKDOCLINK
->() method of
-<A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14240"
-></A
-><H3
-><A
-NAME="GTS-GEDGE-CONNECTS"
-></A
->gts_gedge_connects()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_gedge_connects(e, a1, a2)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14262"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-CLASS-CAPS"
-></A
->GTS_GRAPH_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GRAPH_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14276"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-CAPS"
-></A
->GTS_GRAPH()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GRAPH(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14290"
-></A
-><H3
-><A
-NAME="GTS-IS-GRAPH-CAPS"
-></A
->GTS_IS_GRAPH()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_GRAPH(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14304"
-></A
-><H3
-><A
-NAME="GTSGRAPHCLASS"
-></A
->struct GtsGraphClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGraphClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14309"
-></A
-><H3
-><A
-NAME="GTSGRAPH"
-></A
->struct GtsGraph</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGraph {
-  GtsHashContainer object;
-
-  GtsGNodeClass * node_class;
-  GtsGEdgeClass * edge_class;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14314"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-CLASS"
-></A
->gts_graph_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->* gts_graph_class              (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14331"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-NEW"
-></A
->gts_graph_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->*   gts_graph_new                   (<A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
-> *node_class,
-                                             <A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
-> *edge_class);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->node_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODECLASS"
->GtsGNodeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edge_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGEDGECLASS"
->GtsGEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> using <TT
-CLASS="PARAMETER"
-><I
->node_class</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->edge_class</I
-></TT
-> as node types.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14368"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-READ"
-></A
->gts_graph_read ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_graph_read                  (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> the nodes and edges defined in the file pointed to by
-<TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
->. This file must use the Jostle "graph" ASCII format.  
-The nodes created are of type <GTKDOCLINK
-HREF="GTSNGNODE"
->GtsNGNode</GTKDOCLINK
-> and their identities are the
-line number at which they appear in <TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> 0 if the lecture was successful, the line number at which
-an error occured otherwise.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14399"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PRINT-STATS"
-></A
->gts_graph_print_stats ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_graph_print_stats           (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes to <TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
-> a summary of the properties of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14423"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-FOREACH-EDGE"
-></A
->gts_graph_foreach_edge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_graph_foreach_edge          (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14455"
-></A
-><H3
-><A
-NAME="GTSGRAPHTRAVERSE"
-></A
->struct GtsGraphTraverse</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGraphTraverse;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14460"
-></A
-><H3
-><A
-NAME="GTSTRAVERSETYPE"
-></A
->enum GtsTraverseType</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->typedef enum   { GTS_BREADTH_FIRST
-               }   GtsTraverseType;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14465"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-TRAVERSE-NEW"
-></A
->gts_graph_traverse_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
->* gts_graph_traverse_new    (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-graph-class.html#GTSTRAVERSETYPE"
->GtsTraverseType</A
-> type,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> reinit);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->type</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the type of traversal.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->reinit</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if <TT
-CLASS="LITERAL"
->TRUE</TT
->, the traversal is reinitialized.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> initialized for the traversal of
-<TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> of type <TT
-CLASS="PARAMETER"
-><I
->type</I
-></TT
->, starting from <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14509"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-TRAVERSE-NEXT"
-></A
->gts_graph_traverse_next ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   gts_graph_traverse_next         (<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the next <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> of the traversal defined by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->
-if the traversal is complete.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14534"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-TRAVERSE-WHAT-NEXT"
-></A
->gts_graph_traverse_what_next ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   gts_graph_traverse_what_next    (<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the next <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> of the traversal defined by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->
-if the traversal is complete but without advancing the traversal.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14559"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-TRAVERSE-DESTROY"
-></A
->gts_graph_traverse_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_graph_traverse_destroy      (<A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Frees all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPHTRAVERSE"
->GtsGraphTraverse</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14577"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-EDGES-CUT"
-></A
->gts_graph_edges_cut ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_graph_edges_cut             (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of edges of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> connecting nodes belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->
-to nodes not belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14602"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-EDGES-CUT-WEIGHT"
-></A
->gts_graph_edges_cut_weight ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_graph_edges_cut_weight      (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the sum of the weights of the edges of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> connecting nodes
-belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> to nodes not belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14627"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-DISTANCE-SUM"
-></A
->gts_graph_distance_sum ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_graph_distance_sum          (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *center);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->center</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the sum of the distances between all the other <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->
-of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->center</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14659"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-FARTHEST"
-></A
->gts_graph_farthest ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->*   gts_graph_farthest              (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *gnodes);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->gnodes</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> and farthest from all the nodes in
-<TT
-CLASS="PARAMETER"
-><I
->gnodes</I
-></TT
-> (hmmm, definition of "farthest"?).</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14691"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-WEIGHT"
-></A
->gts_graph_weight ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_graph_weight                (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the weight of graph <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> as defined by the <GTKDOCLINK
-HREF="WEIGHT"
->weight</GTKDOCLINK
->() method
-of <A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->. </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14716"
-></A
-><H3
-><A
-NAME="GTS-FNODE-CLASS-CAPS"
-></A
->GTS_FNODE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_FNODE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14730"
-></A
-><H3
-><A
-NAME="GTS-FNODE-CAPS"
-></A
->GTS_FNODE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_FNODE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14744"
-></A
-><H3
-><A
-NAME="GTS-IS-FNODE-CAPS"
-></A
->GTS_IS_FNODE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_FNODE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14758"
-></A
-><H3
-><A
-NAME="GTSFNODE"
-></A
->struct GtsFNode</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsFNode {
-  GtsGNode node;
-
-  GtsFace * f;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14763"
-></A
-><H3
-><A
-NAME="GTSFNODECLASS"
-></A
->struct GtsFNodeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsFNodeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14768"
-></A
-><H3
-><A
-NAME="GTS-FNODE-CLASS"
-></A
->gts_fnode_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
->* gts_fnode_class              (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14785"
-></A
-><H3
-><A
-NAME="GTS-FNODE-NEW"
-></A
->gts_fnode_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSFNODE"
->GtsFNode</A
->*   gts_fnode_new                   (<A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
-> *klass,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSFNODECLASS"
->GtsFNodeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-class.html#GTSFNODE"
->GtsFNode</A
-> associated with face <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14815"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-GRAPH-NEW"
-></A
->gts_surface_graph_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->*   gts_surface_graph_new           (<A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPHCLASS"
->GtsGraphClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> representing the connectivity of the faces
-of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. This graph uses <GTKDOCLINK
-HREF="GTSFGNODE"
->GtsFGNode</GTKDOCLINK
-> as nodes which allows to store
-the dependencies between nodes and faces of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14847"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-GRAPH-SURFACE"
-></A
->gts_surface_graph_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->* gts_surface_graph_surface       (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *surface_graph,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface_graph</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> using <GTKDOCLINK
-HREF="GTSFGNODE"
->GtsFGNode</GTKDOCLINK
-> as nodes.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> using the same classes as <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> and
-composed of the faces defined by <TT
-CLASS="PARAMETER"
-><I
->surface_graph</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-weighted-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Graph and operations on graphs</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Weighted graph</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-graph-partitioning.html b/doc/html/gts-graph-partitioning.html
deleted file mode 100644
index 685fc01..0000000
--- a/doc/html/gts-graph-partitioning.html
+++ /dev/null
@@ -1,2509 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Graph partitioning</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Graph and operations on graphs"
-HREF="c13676.html"><LINK
-REL="PREVIOUS"
-TITLE="Progressive graph"
-HREF="gts-progressive-graph.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-progressive-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-> </TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-GRAPH-PARTITIONING"
->Graph partitioning</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN15857"
-></A
-><H2
->Name</H2
->Graph partitioning -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN15860"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-struct      <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->;
-<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->* <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-NEW"
->gts_graph_bisection_new</A
->  (<A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
-> *wg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nmin);
-<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->* <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-GGG-BISECTION"
->gts_graph_ggg_bisection</A
->  (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry);
-<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->* <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BFGG-BISECTION"
->gts_graph_bfgg_bisection</A
-> (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-CHECK"
->gts_graph_bisection_check</A
->       (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-KL-REFINE"
->gts_graph_bisection_kl_refine</A
->   (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-BKL-REFINE"
->gts_graph_bisection_bkl_refine</A
->  (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-RECURSIVE-BISECTION"
->gts_graph_recursive_bisection</A
->   (<A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
-> *wg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nmin);
-void        <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-DESTROY"
->gts_graph_bisection_destroy</A
->     (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> destroy_graphs);
-
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BUBBLE-PARTITION"
->gts_graph_bubble_partition</A
->      (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> np,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> niter,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> step_info,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-graph-class.html#GTS-GRAPH-EDGES-CUT"
->gts_graph_edges_cut</A
->             (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-class.html#GTS-GRAPH-EDGES-CUT-WEIGHT"
->gts_graph_edges_cut_weight</A
->      (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-PARTITION-EDGES-CUT"
->gts_graph_partition_edges_cut</A
->   (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-PARTITION-BALANCE"
->gts_graph_partition_balance</A
->     (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-PARTITION-CLONE"
->gts_graph_partition_clone</A
->       (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);
-void        <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-PARTITION-PRINT-STATS"
->gts_graph_partition_print_stats</A
-> (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-PARTITION-EDGES-CUT-WEIGHT"
->gts_graph_partition_edges_cut_weight</A
->
-                                            (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);
-void        <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-PARTITION-DESTROY"
->gts_graph_partition_destroy</A
->     (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN15929"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN15932"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15934"
-></A
-><H3
-><A
-NAME="GTSGRAPHBISECTION"
-></A
->struct GtsGraphBisection</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGraphBisection {
-  GtsGraph * g;
-  GtsGraph * g1;
-  GtsGraph * g2;
-  GHashTable * bg1;
-  GHashTable * bg2;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15939"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BISECTION-NEW"
-></A
->gts_graph_bisection_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->* gts_graph_bisection_new  (<A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
-> *wg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nmin);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of a multilevel bisection algorithm as presented
-in Karypis and Kumar (1997). A multilevel hierarchy of graphs is
-created using the <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> object. The bisection of the coarsest
-graph is created using the <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-GGG-BISECTION"
->gts_graph_ggg_bisection</A
->() function. The
-graph is then uncoarsened using <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-DOWN"
->gts_pgraph_down</A
->() and at each level
-the bisection is refined using <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-BKL-REFINE"
->gts_graph_bisection_bkl_refine</A
->().</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->wg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ntry</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of tries for the graph growing algorithm.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of unsucessful moves for the refinement algorithm.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nmin</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimum number of nodes of the coarsest graph.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> of <TT
-CLASS="PARAMETER"
-><I
->wg</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15982"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-GGG-BISECTION"
-></A
->gts_graph_ggg_bisection ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->* gts_graph_ggg_bisection  (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of the "Greedy Graph Growing" algorithm of
-Karypis and Kumar (1997).  </P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->ntry</I
-></TT
-> randomly chosen seeds are used and the best partition is retained.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ntry</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of randomly selected initial seeds.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16013"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BFGG-BISECTION"
-></A
->gts_graph_bfgg_bisection ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->* gts_graph_bfgg_bisection (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of a "Breadth-First Graph Growing" algorithm.</P
-><P
-><TT
-CLASS="PARAMETER"
-><I
->ntry</I
-></TT
-> randomly chosen seeds are used and the best partition is retained.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ntry</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of randomly selected initial seeds.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16044"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BISECTION-CHECK"
-></A
->gts_graph_bisection_check ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_graph_bisection_check       (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg);</PRE
-></TD
-></TR
-></TABLE
-><P
->Checks that the boundary of <TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> is correctly defined (used for
-debugging purposes).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> is ok, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16070"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BISECTION-KL-REFINE"
-></A
->gts_graph_bisection_kl_refine ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_graph_bisection_kl_refine   (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of the simplified Kernighan-Lin algorithm for
-graph bisection refinement as described in Karypis and Kumar
-(1997).</P
-><P
->The algorithm stops if <TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> consecutive modes do not lead to a
-decrease in the number of edges cut. This last <TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> moves are
-undone.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum number of unsuccessful successive moves.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the decrease in the weight of the edges cut by the bisection.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16100"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BISECTION-BKL-REFINE"
-></A
->gts_graph_bisection_bkl_refine ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_graph_bisection_bkl_refine  (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of the simplified boundary Kernighan-Lin
-algorithm for graph bisection refinement as described in Karypis
-and Kumar (1997).</P
-><P
->The algorithm stops if <TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> consecutive modes do not lead to a
-decrease in the number of edges cut. This last <TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> moves are
-undone.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum number of unsuccessful successive moves.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the decrease in the weight of the edges cut by the bisection.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16130"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-RECURSIVE-BISECTION"
-></A
->gts_graph_recursive_bisection ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_graph_recursive_bisection   (<A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
-> *wg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ntry,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> mmax,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nmin);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <A
-HREF="gts-graph-partitioning.html#GTS-GRAPH-BISECTION-NEW"
->gts_graph_bisection_new</A
->() recursively in order to obtain a
-2^<TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> partition of <TT
-CLASS="PARAMETER"
-><I
->wg</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->wg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of bisection levels.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ntry</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of tries for the graph growing algorithm.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->mmax</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of unsucessful moves for the refinement algorithm.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nmin</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimum number of nodes of the coarsest graph.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of 2^<TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> new <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> representing the partition.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16177"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BISECTION-DESTROY"
-></A
->gts_graph_bisection_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_graph_bisection_destroy     (<A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
-> *bg,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> destroy_graphs);</PRE
-></TD
-></TR
-></TABLE
-><P
->Frees all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
->. If <TT
-CLASS="PARAMETER"
-><I
->destroy_graphs</I
-></TT
-> is <TT
-CLASS="LITERAL"
->TRUE</TT
->
-the graphs created by <TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> are destroyed.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-partitioning.html#GTSGRAPHBISECTION"
->GtsGraphBisection</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->destroy_graphs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> controls graph destruction.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16203"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-BUBBLE-PARTITION"
-></A
->gts_graph_bubble_partition ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_graph_bubble_partition      (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> np,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> niter,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> step_info,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of the "bubble partitioning algorithm" of
-Diekmann, Preis, Schlimbach and Walshaw (2000). The maximum number
-of iteration on the positions of the graph growing seeds is
-controlled by <TT
-CLASS="PARAMETER"
-><I
->niter</I
-></TT
->.</P
-><P
->If not <TT
-CLASS="LITERAL"
->NULL</TT
-> <TT
-CLASS="PARAMETER"
-><I
->step_info</I
-></TT
-> is called after each iteration on the seeds
-positions passing the partition (a GSList) as argument.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->np</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> number of partitions.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->niter</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum number of iterations.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->step_info</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to <TT
-CLASS="PARAMETER"
-><I
->step_info</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->np</I
-></TT
-> new <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> representing the partition.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16254"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-EDGES-CUT"
-></A
->gts_graph_edges_cut ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_graph_edges_cut             (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16275"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-EDGES-CUT-WEIGHT"
-></A
->gts_graph_edges_cut_weight ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_graph_edges_cut_weight      (<A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16296"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PARTITION-EDGES-CUT"
-></A
->gts_graph_partition_edges_cut ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_graph_partition_edges_cut   (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->GtsGraph</I
-></TT
-> representing a partition.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of edges cut by the partition.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16318"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PARTITION-BALANCE"
-></A
->gts_graph_partition_balance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_graph_partition_balance     (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->GtsGraph</I
-></TT
-> representing a partition.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the difference between the maximum and the minimum weight
-of the graphs in <TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16341"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PARTITION-CLONE"
-></A
->gts_graph_partition_clone ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_graph_partition_clone       (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->GtsGraph</I
-></TT
-> representing a partition.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new partition clone of <TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> (i.e. a list of new
-graphs clones of the graphs in <TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
->).  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16365"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PARTITION-PRINT-STATS"
-></A
->gts_graph_partition_print_stats ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_graph_partition_print_stats (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fp);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes to <TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
-> a summary of the properties of <TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->GtsGraph</I
-></TT
-> representing a partition.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fp</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16389"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PARTITION-EDGES-CUT-WEIGHT"
-></A
->gts_graph_partition_edges_cut_weight ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_graph_partition_edges_cut_weight
-                                            (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->GtsGraph</I
-></TT
-> representing a partition.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the total weight of the edges cut by the partition.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN16411"
-></A
-><H3
-><A
-NAME="GTS-GRAPH-PARTITION-DESTROY"
-></A
->gts_graph_partition_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_graph_partition_destroy     (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *partition);</PRE
-></TD
-></TR
-></TABLE
-><P
->Destroys all the graphs in <TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> and frees <TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->partition</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <TT
-CLASS="PARAMETER"
-><I
->GtsGraph</I
-></TT
-> representing a partition.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-progressive-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-> </TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Progressive graph</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-> </TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-hierarchical-surfaces.html b/doc/html/gts-hierarchical-surfaces.html
deleted file mode 100644
index 09f1a9a..0000000
--- a/doc/html/gts-hierarchical-surfaces.html
+++ /dev/null
@@ -1,1606 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Hierarchical surfaces</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Progressive and Hierarchical surfaces"
-HREF="c12040.html"><LINK
-REL="PREVIOUS"
-TITLE="Hierarchical vertex split"
-HREF="gts-hierarchical-vertex-split.html"><LINK
-REL="NEXT"
-TITLE="Graph and operations on graphs"
-HREF="c13676.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-hierarchical-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-HIERARCHICAL-SURFACES"
->Hierarchical surfaces</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN13340"
-></A
-><H2
->Name</H2
->Hierarchical surfaces -- extension of progressive surfaces allowing arbitrary sequences of vertex split or collapse.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN13343"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-CLASS-CAPS"
->GTS_HSURFACE_CLASS</A
->              (klass)
-#define     <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-CAPS"
->GTS_HSURFACE</A
->                    (obj)
-#define     <A
-HREF="gts-hierarchical-surfaces.html#GTS-IS-HSURFACE-CAPS"
->GTS_IS_HSURFACE</A
->                 (obj)
-struct      <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->;
-struct      <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->;
-
-<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->* <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-CLASS"
->gts_hsurface_class</A
->        (void);
-<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->* <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-NEW"
->gts_hsurface_new</A
->               (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
-> *hsplit_class,
-                                             <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *psurface,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> expand_key,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> expand_data,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> collapse_key,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> collapse_data);
-void        <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-TRAVERSE"
->gts_hsurface_traverse</A
->           (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface,
-                                             <GTKDOCLINK
-HREF="GTRAVERSETYPE"
->GTraverseType</GTKDOCLINK
-> order,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> depth,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITTRAVERSEFUNC"
->GtsSplitTraverseFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-HEIGHT"
->gts_hsurface_height</A
->             (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);
-void        <A
-HREF="gts-hierarchical-surfaces.html#GTS-HSURFACE-FOREACH"
->gts_hsurface_foreach</A
->            (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface,
-                                             <GTKDOCLINK
-HREF="GTRAVERSETYPE"
->GTraverseType</GTKDOCLINK
-> order,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN13376"
-></A
-><H2
->Description</H2
-><P
->Hierarchical surfaces are used to manage sequences of vertex splits or collapses which can be different from the initial sequence described by the progressive surface. In this way different branches of the vertex split tree can be collapsed or expanded resulting in a level of detail varying across different parts of the surface. This is the fundamental mechanism of view-dependent level of detail.</P
-><P
->Hierarchical surfaces maintain two priority heaps one containing the next vertices (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->) ready to be expanded, the other the next vertices ready to be collapsed. By updating the priorities for these vertices as the view point changes and collapsing or expanding the top ones until a given criterium is verified, the level of detail can be dynamically adapted.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN13381"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13383"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-CLASS-CAPS"
-></A
->GTS_HSURFACE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_HSURFACE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13400"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-CAPS"
-></A
->GTS_HSURFACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_HSURFACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13417"
-></A
-><H3
-><A
-NAME="GTS-IS-HSURFACE-CAPS"
-></A
->GTS_IS_HSURFACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_HSURFACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13434"
-></A
-><H3
-><A
-NAME="GTSHSURFACECLASS"
-></A
->struct GtsHSurfaceClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHSurfaceClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The hierarchical surface class derived from <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13440"
-></A
-><H3
-><A
-NAME="GTSHSURFACE"
-></A
->struct GtsHSurface</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHSurface {
-  GtsObject object;
-
-  GtsSurface * s;
-  GSList * roots;
-  GtsEHeap * expandable;
-  GtsEHeap * collapsable;
-  GPtrArray * split;
-  guint nvertex;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The hierarchical surface object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->s</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> being refined or coarsened.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->roots</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Private field.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->expandable</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> of the expandable <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> sorted by priority.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->collapsable</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> of the collapsable <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> sorted by priority.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPTRARRAY"
->GPtrArray</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->split</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Private field.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->nvertex</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Private field.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13490"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-CLASS"
-></A
->gts_hsurface_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->* gts_hsurface_class        (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13507"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-NEW"
-></A
->gts_hsurface_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->* gts_hsurface_new               (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
-> *hsplit_class,
-                                             <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *psurface,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> expand_key,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> expand_data,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> collapse_key,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> collapse_data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACECLASS"
->GtsHSurfaceClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsplit_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->psurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->expand_key</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> used to order the priority heap of expandable 
-<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->expand_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to be passed to <TT
-CLASS="PARAMETER"
-><I
->expand_key</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->collapse_key</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> used to order the priority heap of collapsable
-<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->collapse_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to be passed to <TT
-CLASS="PARAMETER"
-><I
->collapsed_key</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->, hierarchical extension of <TT
-CLASS="PARAMETER"
-><I
->psurface</I
-></TT
->
-and using <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> of class <TT
-CLASS="PARAMETER"
-><I
->hsplit_class</I
-></TT
->. Note that <TT
-CLASS="PARAMETER"
-><I
->psurface</I
-></TT
-> is
-destroyed in the process.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13572"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-TRAVERSE"
-></A
->gts_hsurface_traverse ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_hsurface_traverse           (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface,
-                                             <GTKDOCLINK
-HREF="GTRAVERSETYPE"
->GTraverseType</GTKDOCLINK
-> order,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> depth,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITTRAVERSEFUNC"
->GtsSplitTraverseFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Traverses a hierarchical surface starting from its roots. It calls
-the given function for each <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> visited. 
-See also <A
-HREF="gts-vertex-split.html#GTS-SPLIT-TRAVERSE"
->gts_split_traverse</A
->().</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->order</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the order in which nodes are visited - G_PRE_ORDER or G_POST_ORDER.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->depth</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum depth of the traversal. Nodes below this depth
-will not be visited. If max_depth is -1 all nodes in the tree are
-visited. If depth is 1, only the root is visited. If depth is 2,
-the root and its children are visited. And so on.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function to call for each visited <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to the function.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13612"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-HEIGHT"
-></A
->gts_hsurface_height ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_hsurface_height             (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum height of the tree described by <TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13635"
-></A
-><H3
-><A
-NAME="GTS-HSURFACE-FOREACH"
-></A
->gts_hsurface_foreach ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_hsurface_foreach            (<A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface,
-                                             <GTKDOCLINK
-HREF="GTRAVERSETYPE"
->GTraverseType</GTKDOCLINK
-> order,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Starts by expanding all the <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> of <TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
->. If <TT
-CLASS="PARAMETER"
-><I
->order</I
-></TT
-> is
-G_PRE_ORDER, calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> and collapses it. If
-order is G_POST_ORDER, collapses each <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> first and then
-calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->. The traversal can be halted at any point by returning
-TRUE from func.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->order</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the order in which <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> are visited - G_PRE_ORDER or 
-G_POST_ORDER.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function to call for each visited <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to the function.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-hierarchical-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Hierarchical vertex split</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Graph and operations on graphs</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-hierarchical-vertex-split.html b/doc/html/gts-hierarchical-vertex-split.html
deleted file mode 100644
index 1ef4ac4..0000000
--- a/doc/html/gts-hierarchical-vertex-split.html
+++ /dev/null
@@ -1,1230 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Hierarchical vertex split</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Progressive and Hierarchical surfaces"
-HREF="c12040.html"><LINK
-REL="PREVIOUS"
-TITLE="Progressive surfaces"
-HREF="gts-progressive-surfaces.html"><LINK
-REL="NEXT"
-TITLE="Hierarchical surfaces"
-HREF="gts-hierarchical-surfaces.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-progressive-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-hierarchical-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-HIERARCHICAL-VERTEX-SPLIT"
->Hierarchical vertex split</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN13090"
-></A
-><H2
->Name</H2
->Hierarchical vertex split -- hierarchical extension of the vertex split.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN13093"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-CLASS-CAPS"
->GTS_HSPLIT_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-CAPS"
->GTS_HSPLIT</A
->                      (obj)
-#define     <A
-HREF="gts-hierarchical-vertex-split.html#GTS-IS-HSPLIT-CAPS"
->GTS_IS_HSPLIT</A
->                   (obj)
-struct      <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->;
-struct      <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->;
-
-<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->* <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-CLASS"
->gts_hsplit_class</A
->            (void);
-<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->*  <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-NEW"
->gts_hsplit_new</A
->                  (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
-> *klass,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs);
-void        <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-COLLAPSE"
->gts_hsplit_collapse</A
->             (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *hs,
-                                             <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);
-void        <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-EXPAND"
->gts_hsplit_expand</A
->               (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *hs,
-                                             <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);
-void        <A
-HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-FORCE-EXPAND"
->gts_hsplit_force_expand</A
->         (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *hs,
-                                             <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN13116"
-></A
-><H2
->Description</H2
-><P
->Hierarchical vertex splits are the building blocks of hierarchical surfaces. They are derived from <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> objects but add pointers to their parents in the vertex split tree and information on the state (collapsed or expanded) of their children.</P
-><P
->Together with <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> fields these informations allow to manage any valid sequence of expansions or collapses.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN13122"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13124"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-CLASS-CAPS"
-></A
->GTS_HSPLIT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_HSPLIT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13141"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-CAPS"
-></A
->GTS_HSPLIT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_HSPLIT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13158"
-></A
-><H3
-><A
-NAME="GTS-IS-HSPLIT-CAPS"
-></A
->GTS_IS_HSPLIT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_HSPLIT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13176"
-></A
-><H3
-><A
-NAME="GTSHSPLITCLASS"
-></A
->struct GtsHSplitClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHSplitClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The hierarchical split vertex class derived from <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13182"
-></A
-><H3
-><A
-NAME="GTSHSPLIT"
-></A
->struct GtsHSplit</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsHSplit {
-  GtsSplit split;
-
-  GtsEHeapPair * index;
-  GtsHSplit * parent;
-  guint nchild;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The hierarchical split vertex object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->split</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR"
->GtsEHeapPair</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->index</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Used when managing priority heaps for vertex split and collapse.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->parent</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Parent of this hierarchical split vertex in the split vertex tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->nchild</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of expanded children of this vertex split (0, 1, or 2).
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13212"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-CLASS"
-></A
->gts_hsplit_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->* gts_hsplit_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13229"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-NEW"
-></A
->gts_hsplit_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->*  gts_hsplit_new                  (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
-> *klass,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS"
->GtsHSplitClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->, hierarchical extension of <TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13259"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-COLLAPSE"
-></A
->gts_hsplit_collapse ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_hsplit_collapse             (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *hs,
-                                             <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);</PRE
-></TD
-></TR
-></TABLE
-><P
->Collapses the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> defined by <TT
-CLASS="PARAMETER"
-><I
->hs</I
-></TT
->, updates the expandable and
-collapsable priority heaps of <TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13285"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-EXPAND"
-></A
->gts_hsplit_expand ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_hsplit_expand               (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *hs,
-                                             <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);</PRE
-></TD
-></TR
-></TABLE
-><P
->Expands the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> defined by <TT
-CLASS="PARAMETER"
-><I
->hs</I
-></TT
-> (which must be expandable)
-and updates the priority heaps of <TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13311"
-></A
-><H3
-><A
-NAME="GTS-HSPLIT-FORCE-EXPAND"
-></A
->gts_hsplit_force_expand ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_hsplit_force_expand         (<A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
-> *hs,
-                                             <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
-> *hsurface);</PRE
-></TD
-></TR
-></TABLE
-><P
->Forces the expansion of <TT
-CLASS="PARAMETER"
-><I
->hs</I
-></TT
-> by first expanding all its dependencies not
-already expanded.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->hsurface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-hierarchical-surfaces.html#GTSHSURFACE"
->GtsHSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-progressive-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-hierarchical-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Progressive surfaces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Hierarchical surfaces</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-isosurfaces-from-3d-functions.html b/doc/html/gts-isosurfaces-from-3d-functions.html
deleted file mode 100644
index 241e113..0000000
--- a/doc/html/gts-isosurfaces-from-3d-functions.html
+++ /dev/null
@@ -1,2032 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Isosurfaces from 3D functions</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Surface operations"
-HREF="c9853.html"><LINK
-REL="PREVIOUS"
-TITLE="Out-of-core simplification"
-HREF="gts-out-of-core-simplification.html"><LINK
-REL="NEXT"
-TITLE="Delaunay and constrained Delaunay triangulations"
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-out-of-core-simplification.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-ISOSURFACES-FROM-3D-FUNCTIONS"
->Isosurfaces from 3D functions</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN11108"
-></A
-><H2
->Name</H2
->Isosurfaces from 3D functions -- computing triangulated isosurfaces of a given function f(x,y,z).</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN11111"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-struct      <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
->;
-struct      <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
->;
-
-<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
->* <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-GRID-PLANE-NEW"
->gts_grid_plane_new</A
->            (<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nx,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ny);
-void        <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-GRID-PLANE-DESTROY"
->gts_grid_plane_destroy</A
->          (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
-> *g);
-
-struct      <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->;
-
-<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->* <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-NEW"
->gts_iso_slice_new</A
->              (<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nx,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ny);
-void        <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-FILL"
->gts_iso_slice_fill</A
->              (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
-> *plane1,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
-> *plane2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> iso,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass);
-void        <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-FILL-CARTESIAN"
->gts_iso_slice_fill_cartesian</A
->    (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> g,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> iso,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass);
-void        <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-DESTROY"
->gts_iso_slice_destroy</A
->           (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice);
-void        <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-SLICE"
->gts_isosurface_slice</A
->            (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice1,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice2,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-void        (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOCARTESIANFUNC"
->*GtsIsoCartesianFunc</A
->)          (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **a,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> i,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-CARTESIAN"
->gts_isosurface_cartesian</A
->        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> g,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOCARTESIANFUNC"
->GtsIsoCartesianFunc</A
-> f,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> iso);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN11159"
-></A
-><H2
->Description</H2
-><P
->Using the <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-CARTESIAN"
->gts_isosurface_cartesian</A
->() function, it is possible to build a triangulated isosurface of a given user-defined function. As its name indicates this function assumes that the values of the user-defined function are defined for points located on a regular cartesian grid described by the <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> parameter. The triangles describing the isosurface are computed for each pair of successive planes z and z+dz in a pipelined manner. Consequently only two planes need to be stored in memory at any time. This allows to construct isosurfaces for datasets too large to fit in main memory.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN11164"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11166"
-></A
-><H3
-><A
-NAME="GTSCARTESIANGRID"
-></A
->struct GtsCartesianGrid</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsCartesianGrid {
-  guint nx, ny, nz;
-  gdouble x, dx, y, dy, z, dz;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->A regular cartesian grid is defined by the number of points in each direction, the spatial increment in each direction and the coordinates of the first point.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->nx</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of points in direction x.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->ny</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of points in direction y.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->nz</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of points in direction z.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->x</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->x coordinate of the first point.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->dx</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Increment in direction x.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->y</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->y coordinate of the first point.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->dy</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Increment in direction y.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->z</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->z coordinate of the first point.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->dz</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Increment in direction z.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11221"
-></A
-><H3
-><A
-NAME="GTSGRIDPLANE"
-></A
->struct GtsGridPlane</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGridPlane {
-  GtsPoint ** p;
-  guint nx, ny;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11226"
-></A
-><H3
-><A
-NAME="GTS-GRID-PLANE-NEW"
-></A
->gts_grid_plane_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
->* gts_grid_plane_new            (<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nx,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ny);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nx</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ny</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11252"
-></A
-><H3
-><A
-NAME="GTS-GRID-PLANE-DESTROY"
-></A
->gts_grid_plane_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_grid_plane_destroy          (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11268"
-></A
-><H3
-><A
-NAME="GTSISOSLICE"
-></A
->struct GtsIsoSlice</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsIsoSlice;</PRE
-></TD
-></TR
-></TABLE
-><P
->A GtsIsoSlice is an opaque data structure containing the coordinates of the points located on the isosurface for a given slice of the user-defined function.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11273"
-></A
-><H3
-><A
-NAME="GTS-ISO-SLICE-NEW"
-></A
->gts_iso_slice_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->* gts_iso_slice_new              (<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nx,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> ny);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nx</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> number of vertices in the x direction.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ny</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> number of vertices in the y direction.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11300"
-></A
-><H3
-><A
-NAME="GTS-ISO-SLICE-FILL"
-></A
->gts_iso_slice_fill ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_iso_slice_fill              (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
-> *plane1,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
-> *plane2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> iso,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
->Fill <TT
-CLASS="PARAMETER"
-><I
->slice</I
-></TT
-> with the coordinates of the vertices defined by 
-f1 (x,y,z) = <TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
-> and f2 (x, y, z) = <TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->slice</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->plane1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->plane2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE"
->GtsGridPlane</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> values of the function corresponding to <TT
-CLASS="PARAMETER"
-><I
->plane1</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> values of the function corresponding to <TT
-CLASS="PARAMETER"
-><I
->plane2</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> isosurface value.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> or one of its descendant to be used for the 
-new vertices.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11355"
-></A
-><H3
-><A
-NAME="GTS-ISO-SLICE-FILL-CARTESIAN"
-></A
->gts_iso_slice_fill_cartesian ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_iso_slice_fill_cartesian    (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> g,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **f2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> iso,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
->Fill <TT
-CLASS="PARAMETER"
-><I
->slice</I
-></TT
-> with the coordinates of the vertices defined by 
-f1 (x,y,z) = <TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
-> and f2 (x, y, z) = <TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->slice</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> values of the function for plane z = <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.z.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> values of the function for plane z = <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.z + <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.dz.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> isosurface value.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11405"
-></A
-><H3
-><A
-NAME="GTS-ISO-SLICE-DESTROY"
-></A
->gts_iso_slice_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_iso_slice_destroy           (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice);</PRE
-></TD
-></TR
-></TABLE
-><P
->Free all memory allocated for <TT
-CLASS="PARAMETER"
-><I
->slice</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->slice</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11423"
-></A
-><H3
-><A
-NAME="GTS-ISOSURFACE-SLICE"
-></A
->gts_isosurface_slice ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_isosurface_slice            (<A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice1,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
-> *slice2,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
->Given two successive slices <TT
-CLASS="PARAMETER"
-><I
->slice1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->slice2</I
-></TT
-> link their vertices with
-segments and triangles which are added to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->slice1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->slice2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOSLICE"
->GtsIsoSlice</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11455"
-></A
-><H3
-><A
-NAME="GTSISOCARTESIANFUNC"
-></A
->GtsIsoCartesianFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        (*GtsIsoCartesianFunc)          (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> **a,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> g,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> i,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->This user-defined function is passed to the <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-CARTESIAN"
->gts_isosurface_cartesian</A
->() 
-function. Given a particular <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> it must fill the array <TT
-CLASS="PARAMETER"
-><I
->a</I
-></TT
->
-with the values of the function for the plane z=<TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.z (or for the corresponding 
-index <TT
-CLASS="PARAMETER"
-><I
->i</I
-></TT
->). This function is always called in order by <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-CARTESIAN"
->gts_isosurface_cartesian</A
->(), i.e. <TT
-CLASS="PARAMETER"
-><I
->i</I
-></TT
-> varies from 0 to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.nz - 1 with an increment of one (and similarly <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.z is incremented every time by <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.dz).</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the 2D array to be filled.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->i</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the z direction index of the plane to be filled.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->user data.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11497"
-></A
-><H3
-><A
-NAME="GTS-ISOSURFACE-CARTESIAN"
-></A
->gts_isosurface_cartesian ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_isosurface_cartesian        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
-> g,
-                                             <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOCARTESIANFUNC"
->GtsIsoCartesianFunc</A
-> f,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> iso);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> new faces defining the isosurface f(x,y,z) = <TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
->. By
-convention, the normals to the surface are pointing toward the positive
-values of f(x,y,z) - <TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
->.</P
-><P
->The user function <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> is called successively for each value of the z 
-coordinate defined by <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->. It must fill the corresponding (x,y) plane with
-the values of the function for which the isosurface is to be computed.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID"
->GtsCartesianGrid</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-isosurfaces-from-3d-functions.html#GTSISOCARTESIANFUNC"
->GtsIsoCartesianFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->iso</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> isosurface value.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-out-of-core-simplification.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-delaunay-and-constrained-delaunay-triangulations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Out-of-core simplification</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Delaunay and constrained Delaunay triangulations</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-kd-trees.html b/doc/html/gts-kd-trees.html
deleted file mode 100644
index 8a08da7..0000000
--- a/doc/html/gts-kd-trees.html
+++ /dev/null
@@ -1,625 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Kd-Trees</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical data structures"
-HREF="c8393.html"><LINK
-REL="PREVIOUS"
-TITLE="Geometrical data structures"
-HREF="c8393.html"><LINK
-REL="NEXT"
-TITLE="Bounding boxes trees"
-HREF="gts-bounding-boxes-trees.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-bounding-boxes-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-KD-TREES"
->Kd-Trees</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN8400"
-></A
-><H2
->Name</H2
->Kd-Trees -- an efficient way of doing point location queries.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN8403"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
->*      <A
-HREF="gts-kd-trees.html#GTS-KDTREE-NEW"
->gts_kdtree_new</A
->                  (<GTKDOCLINK
-HREF="GPTRARRAY"
->GPtrArray</GTKDOCLINK
-> *points,
-                                             int (*compare) (const void *,const void *));
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-kd-trees.html#GTS-KDTREE-RANGE"
->gts_kdtree_range</A
->                (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox,
-                                             int (*compare) (const void *,const void *));
-#define     <A
-HREF="gts-kd-trees.html#GTS-KDTREE-DESTROY"
->gts_kdtree_destroy</A
->              (tree)</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN8414"
-></A
-><H2
->Description</H2
-><P
->Kd-Trees (in this case 3D-Trees) are a relatively efficient way of doing point location queries.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN8417"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8419"
-></A
-><H3
-><A
-NAME="GTS-KDTREE-NEW"
-></A
->gts_kdtree_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
->*      gts_kdtree_new                  (<GTKDOCLINK
-HREF="GPTRARRAY"
->GPtrArray</GTKDOCLINK
-> *points,
-                                             int (*compare) (const void *,const void *));</PRE
-></TD
-></TR
-></TABLE
-><P
->Note that the order of the points in array <TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
-> is modified by this
-function.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> an array of <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->compare</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> always <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new 3D tree for <TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8448"
-></A
-><H3
-><A
-NAME="GTS-KDTREE-RANGE"
-></A
->gts_kdtree_range ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_kdtree_range                (<GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox,
-                                             int (*compare) (const void *,const void *));</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a 3D tree.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->compare</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> always <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> which are inside <TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8483"
-></A
-><H3
-><A
-NAME="GTS-KDTREE-DESTROY"
-></A
->gts_kdtree_destroy()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define       gts_kdtree_destroy(tree)               g_node_destroy(tree)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-bounding-boxes-trees.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Geometrical data structures</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Bounding boxes trees</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-miscellaneous-macros-and-functions.html b/doc/html/gts-miscellaneous-macros-and-functions.html
deleted file mode 100644
index 295c3e3..0000000
--- a/doc/html/gts-miscellaneous-macros-and-functions.html
+++ /dev/null
@@ -1,573 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Miscellaneous macros and functions</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="PREVIOUS"
-TITLE="Simple statistics"
-HREF="gts-simple-statistics.html"><LINK
-REL="NEXT"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-simple-statistics.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-MISCELLANEOUS-MACROS-AND-FUNCTIONS"
->Miscellaneous macros and functions</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN1827"
-></A
-><H2
->Name</H2
->Miscellaneous macros and functions -- Various utilities.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN1830"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-miscellaneous-macros-and-functions.html#GTS-COMMENTS-CAPS"
->GTS_COMMENTS</A
->
-
-<GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
->        <A
-HREF="gts-miscellaneous-macros-and-functions.html#GTS-GET-TOKEN"
->gts_get_token</A
->                   (<GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr,
-                                             <GTKDOCLINK
-HREF="GSTRING"
->GString</GTKDOCLINK
-> *buf,
-                                             const char *delimiters,
-                                             const char *comments);
-void        <A
-HREF="gts-miscellaneous-macros-and-functions.html#GTS-GET-NEWLINE"
->gts_get_newline</A
->                 (<GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1840"
-></A
-><H2
->Description</H2
-><P
->The <A
-HREF="gts-miscellaneous-macros-and-functions.html#GTS-GET-TOKEN"
->gts_get_token</A
->() and <A
-HREF="gts-miscellaneous-macros-and-functions.html#GTS-GET-NEWLINE"
->gts_get_newline</A
->() functions are used for parsing GTS geometric files.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1845"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1847"
-></A
-><H3
-><A
-NAME="GTS-COMMENTS-CAPS"
-></A
->GTS_COMMENTS</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_COMMENTS  "#%!"</PRE
-></TD
-></TR
-></TABLE
-><P
->Set of characters used as comments identifiers in GTS geometric files.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1852"
-></A
-><H3
-><A
-NAME="GTS-GET-TOKEN"
-></A
->gts_get_token ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
->        gts_get_token                   (<GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr,
-                                             <GTKDOCLINK
-HREF="GSTRING"
->GString</GTKDOCLINK
-> *buf,
-                                             const char *delimiters,
-                                             const char *comments);</PRE
-></TD
-></TR
-></TABLE
-><P
->Reads characters from <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> and fills <TT
-CLASS="PARAMETER"
-><I
->buf</I
-></TT
-> with a string delimited
-by characters in <TT
-CLASS="PARAMETER"
-><I
->delimiters</I
-></TT
->. Comments starts with a character in
-<TT
-CLASS="PARAMETER"
-><I
->comments</I
-></TT
-> and ends with a newline character ('\n').</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->buf</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a buffer in which to return the result.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delimiters</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a string of characters used to delimit the fields.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->comments</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a string of characters defining the start of a comment.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the last character read from <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1891"
-></A
-><H3
-><A
-NAME="GTS-GET-NEWLINE"
-></A
->gts_get_newline ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_get_newline                 (<GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Reads characters from <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> until a '\n' character is met.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-simple-statistics.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Simple statistics</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Geometrical Object Hierarchy</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-object-class.html b/doc/html/gts-object-class.html
deleted file mode 100644
index 1b1caf6..0000000
--- a/doc/html/gts-object-class.html
+++ /dev/null
@@ -1,3149 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Object class</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="NEXT"
-TITLE="Container classes"
-HREF="gts-container-classes.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-container-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-OBJECT-CLASS"
->Object class</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN1919"
-></A
-><H2
->Name</H2
->Object class -- parent class for all GTS objects.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN1922"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-object-class.html#GTS-CLASS-NAME-LENGTH-CAPS"
->GTS_CLASS_NAME_LENGTH</A
->
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-CLASS-CAPS"
->GTS_OBJECT_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-CAPS"
->GTS_OBJECT</A
->                      (obj)
-#define     <A
-HREF="gts-object-class.html#GTS-IS-OBJECT-CAPS"
->GTS_IS_OBJECT</A
->                   (obj)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-CLASS-CAST-CAPS"
->GTS_OBJECT_CLASS_CAST</A
->           (objklass, type, klass)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-CAST-CAPS"
->GTS_OBJECT_CAST</A
->                 (obj, type, klass)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-FLAGS-CAPS"
->GTS_OBJECT_FLAGS</A
->                (obj)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-SET-FLAGS-CAPS"
->GTS_OBJECT_SET_FLAGS</A
->            (obj,flag)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-UNSET-FLAGS-CAPS"
->GTS_OBJECT_UNSET_FLAGS</A
->          (obj,flag)
-#define     <A
-HREF="gts-object-class.html#GTS-OBJECT-DESTROYED-CAPS"
->GTS_OBJECT_DESTROYED</A
->            (obj)
-
-struct      <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->;
-struct      <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->;
-struct      <A
-HREF="gts-object-class.html#GTSOBJECTCLASSINFO"
->GtsObjectClassInfo</A
->;
-void        (<A
-HREF="gts-object-class.html#GTSOBJECTCLASSINITFUNC"
->*GtsObjectClassInitFunc</A
->)       (<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *objclass);
-void        (<A
-HREF="gts-object-class.html#GTSOBJECTINITFUNC"
->*GtsObjectInitFunc</A
->)            (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *obj);
-void        (<A
-HREF="gts-object-class.html#GTSARGSETFUNC"
->*GtsArgSetFunc</A
->)                (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *obj);
-void        (<A
-HREF="gts-object-class.html#GTSARGGETFUNC"
->*GtsArgGetFunc</A
->)                (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *obj);
-enum        <A
-HREF="gts-object-class.html#GTSOBJECTFLAGS"
->GtsObjectFlags</A
->;
-struct      <A
-HREF="gts-object-class.html#GTSCOLOR"
->GtsColor</A
->;
-
-<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->* <A
-HREF="gts-object-class.html"
->gts_object_class</A
->            (void);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-object-class.html#GTS-OBJECT-CLASS-NEW"
->gts_object_class_new</A
->            (<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *parent_class,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECTCLASSINFO"
->GtsObjectClassInfo</A
-> *info);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-object-class.html#GTS-OBJECT-CLASS-CHECK-CAST"
->gts_object_class_check_cast</A
->     (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> from);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-object-class.html#GTS-OBJECT-CLASS-IS-FROM-CLASS"
->gts_object_class_is_from_class</A
->  (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> from);
-<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->* <A
-HREF="gts-object-class.html#GTS-OBJECT-CLASS-FROM-NAME"
->gts_object_class_from_name</A
->  (<GTKDOCLINK
-HREF="GCHAR"
->gchar</GTKDOCLINK
-> *name);
-<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->*  <A
-HREF="gts-object-class.html#GTS-OBJECT-NEW"
->gts_object_new</A
->                  (<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *klass);
-void        <A
-HREF="gts-object-class.html#GTS-OBJECT-INIT"
->gts_object_init</A
->                 (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *klass);
-<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->*  <A
-HREF="gts-object-class.html#GTS-OBJECT-CLONE"
->gts_object_clone</A
->                (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object);
-void        <A
-HREF="gts-object-class.html#GTS-OBJECT-ATTRIBUTES"
->gts_object_attributes</A
->           (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *from);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-object-class.html#GTS-OBJECT-CHECK-CAST"
->gts_object_check_cast</A
->           (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> object,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass);
-<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    <A
-HREF="gts-object-class.html#GTS-OBJECT-IS-FROM-CLASS"
->gts_object_is_from_class</A
->        (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> object,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass);
-void        <A
-HREF="gts-object-class.html#GTS-OBJECT-RESET-RESERVED"
->gts_object_reset_reserved</A
->       (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object);
-void        <A
-HREF="gts-object-class.html#GTS-OBJECT-DESTROY"
->gts_object_destroy</A
->              (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1989"
-></A
-><H2
->Description</H2
-><P
->All GTS objects are derived from this base class. Objects of any class can be constructed using the <A
-HREF="gts-object-class.html#GTS-OBJECT-NEW"
->gts_object_new</A
->() function and destroyed using the <A
-HREF="gts-object-class.html#GTS-OBJECT-DESTROY"
->gts_object_destroy</A
->() function. Default virtual methods include <GTKDOCLINK
-HREF="READ"
->read</GTKDOCLINK
->() and <GTKDOCLINK
-HREF="WRITE"
->write</GTKDOCLINK
->() functions which can be used to read or write associated objects attributes from or to GTS geometrical files.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1996"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1998"
-></A
-><H3
-><A
-NAME="GTS-CLASS-NAME-LENGTH-CAPS"
-></A
->GTS_CLASS_NAME_LENGTH</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_CLASS_NAME_LENGTH 40</PRE
-></TD
-></TR
-></TABLE
-><P
->Maximum class name length for <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2004"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS-CAPS"
-></A
->GTS_OBJECT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_OBJECT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2021"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CAPS"
-></A
->GTS_OBJECT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_OBJECT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2038"
-></A
-><H3
-><A
-NAME="GTS-IS-OBJECT-CAPS"
-></A
->GTS_IS_OBJECT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_OBJECT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2056"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS-CAST-CAPS"
-></A
->GTS_OBJECT_CLASS_CAST()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_OBJECT_CLASS_CAST(objklass, type, klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->This macro is used to define casting macros for object classes. You should need it only when writing new object class functions.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->objklass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->type</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The class type to cast <TT
-CLASS="PARAMETER"
-><I
->objklass</I
-></TT
-> to (example: GtsObjectClass).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the class to cast <TT
-CLASS="PARAMETER"
-><I
->objklass</I
-></TT
-> to (example: <A
-HREF="gts-object-class.html"
->gts_object_class</A
->()).
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2082"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CAST-CAPS"
-></A
->GTS_OBJECT_CAST()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_OBJECT_CAST(obj, type, klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->This macro is used to define casting macros for object. You should need it only when writing new object functions.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->type</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the object type to cast <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to (example: GtsObject).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the object class to cast <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to (example: <GTKDOCLINK
-HREF="GTS-OBJECT"
->gts_object</GTKDOCLINK
->()).
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2108"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-FLAGS-CAPS"
-></A
->GTS_OBJECT_FLAGS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_OBJECT_FLAGS(obj)             (GTS_OBJECT (obj)->flags)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2122"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-SET-FLAGS-CAPS"
-></A
->GTS_OBJECT_SET_FLAGS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_OBJECT_SET_FLAGS(obj,flag)	  G_STMT_START{ (GTS_OBJECT_FLAGS (obj) |= (flag)); }G_STMT_END</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->flag</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2140"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-UNSET-FLAGS-CAPS"
-></A
->GTS_OBJECT_UNSET_FLAGS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_OBJECT_UNSET_FLAGS(obj,flag)  G_STMT_START{ (GTS_OBJECT_FLAGS (obj) &= ~(flag)); }G_STMT_END</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->flag</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2158"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-DESTROYED-CAPS"
-></A
->GTS_OBJECT_DESTROYED()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_OBJECT_DESTROYED(obj)         ((GTS_OBJECT_FLAGS (obj) & GTS_DESTROYED) != 0)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2172"
-></A
-><H3
-><A
-NAME="GTSOBJECTCLASS"
-></A
->struct GtsObjectClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsObjectClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The base object class structure. All the virtual functions <TT
-CLASS="PARAMETER"
-><I
->clone</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->destroy</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->read</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->write</I
-></TT
-> can be overloaded. The default <TT
-CLASS="PARAMETER"
-><I
->read</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->write</I
-></TT
-> methods are undefined. The default <TT
-CLASS="PARAMETER"
-><I
->clone</I
-></TT
-> method just copies the object structure. The default <TT
-CLASS="PARAMETER"
-><I
->destroy</I
-></TT
-> method frees the memory allocated for a given object structure.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2185"
-></A
-><H3
-><A
-NAME="GTSOBJECT"
-></A
->struct GtsObject</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsObject {
-  GtsObjectClass * klass;
-
-  gpointer reserved;
-  guint32 flags;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The base object structure.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->klass</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The object class.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->reserved</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Used internally by the library.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT32"
->guint32</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->flags</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Used internally.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2210"
-></A
-><H3
-><A
-NAME="GTSOBJECTCLASSINFO"
-></A
->struct GtsObjectClassInfo</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsObjectClassInfo;</PRE
-></TD
-></TR
-></TABLE
-><P
->Informations about a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->, including name, size of the object structure to be allocated when constructing the object, size of the object class structure to be allocated when instanciating the object class, class initialization function, object initialization function.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2216"
-></A
-><H3
-><A
-NAME="GTSOBJECTCLASSINITFUNC"
-></A
->GtsObjectClassInitFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        (*GtsObjectClassInitFunc)       (<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *objclass);</PRE
-></TD
-></TR
-></TABLE
-><P
->A function to call to initialize an object class.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->objclass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> to be initialized.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2232"
-></A
-><H3
-><A
-NAME="GTSOBJECTINITFUNC"
-></A
->GtsObjectInitFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        (*GtsObjectInitFunc)            (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *obj);</PRE
-></TD
-></TR
-></TABLE
-><P
->A function to call to initialize an object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2248"
-></A
-><H3
-><A
-NAME="GTSARGSETFUNC"
-></A
->GtsArgSetFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        (*GtsArgSetFunc)                (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *obj);</PRE
-></TD
-></TR
-></TABLE
-><P
->Defined for future use.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2264"
-></A
-><H3
-><A
-NAME="GTSARGGETFUNC"
-></A
->GtsArgGetFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        (*GtsArgGetFunc)                (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *obj);</PRE
-></TD
-></TR
-></TABLE
-><P
->Defined for future use.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2280"
-></A
-><H3
-><A
-NAME="GTSOBJECTFLAGS"
-></A
->enum GtsObjectFlags</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->typedef enum
-{
-  GTS_DESTROYED         = 1 << 0
-} GtsObjectFlags;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2285"
-></A
-><H3
-><A
-NAME="GTSCOLOR"
-></A
->struct GtsColor</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsColor {
-  gfloat r, g, b;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2290"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS"
-></A
->gts_object_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->* gts_object_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2307"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS-NEW"
-></A
->gts_object_class_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_object_class_new            (<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *parent_class,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECTCLASSINFO"
->GtsObjectClassInfo</A
-> *info);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->parent_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->info</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASSINFO"
->GtsObjectClassInfo</A
->, description of the new class to create.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> derived from <TT
-CLASS="PARAMETER"
-><I
->parent_class</I
-></TT
-> and described by
-<TT
-CLASS="PARAMETER"
-><I
->info</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2338"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS-CHECK-CAST"
-></A
->gts_object_class_check_cast ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_object_class_check_cast     (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> from);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> while emitting warnings if <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> is not derived from
-<TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2369"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS-IS-FROM-CLASS"
-></A
->gts_object_class_is_from_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_object_class_is_from_class  (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> from);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> if <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> is equal to <TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
-> or if <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> is derived
-from <TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
->, <TT
-CLASS="LITERAL"
->NULL</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2403"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLASS-FROM-NAME"
-></A
->gts_object_class_from_name ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->* gts_object_class_from_name  (<GTKDOCLINK
-HREF="GCHAR"
->gchar</GTKDOCLINK
-> *name);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->name</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the name of a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> with name <TT
-CLASS="PARAMETER"
-><I
->name</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if it hasn't been 
-instantiated yet.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2428"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-NEW"
-></A
->gts_object_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->*  gts_object_new                  (<A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new initialized object of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2451"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-INIT"
-></A
->gts_object_init ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_object_init                 (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls the init method of <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> with <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> as argument. This is done 
-recursively in the correct order (from the base class to the top). You
-should rarely need this function as it is called automatically by the
-constructor for each class.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2476"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CLONE"
-></A
->gts_object_clone ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->*  gts_object_clone                (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls the clone method of <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
->. The call to this function will fail
-if no clone method exists for the given object.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new object clone of <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2500"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-ATTRIBUTES"
-></A
->gts_object_attributes ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_object_attributes           (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *from);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls the <GTKDOCLINK
-HREF="ATTRIBUTES"
->attributes</GTKDOCLINK
->() method of <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> using <TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
-> as source.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->from</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2526"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-CHECK-CAST"
-></A
->gts_object_check_cast ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_object_check_cast           (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> object,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> while emitting warnings if <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> is not of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2557"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-IS-FROM-CLASS"
-></A
->gts_object_is_from_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
->    gts_object_is_from_class        (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> object,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> if <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> is of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> or of a class derived from
-<TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->, <TT
-CLASS="LITERAL"
->NULL</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2590"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-RESET-RESERVED"
-></A
->gts_object_reset_reserved ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_object_reset_reserved       (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object);</PRE
-></TD
-></TR
-></TABLE
-><P
->Reset the reserved field of <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN2608"
-></A
-><H3
-><A
-NAME="GTS-OBJECT-DESTROY"
-></A
->gts_object_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_object_destroy              (<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *object);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls the destroy method of <TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
->, freeing all memory allocated for it.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->object</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-container-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Geometrical Object Hierarchy</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Container classes</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-out-of-core-simplification.html b/doc/html/gts-out-of-core-simplification.html
deleted file mode 100644
index d707d49..0000000
--- a/doc/html/gts-out-of-core-simplification.html
+++ /dev/null
@@ -1,2251 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Out-of-core simplification</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Surface operations"
-HREF="c9853.html"><LINK
-REL="PREVIOUS"
-TITLE="Surface simplification and refinement"
-HREF="gts-surface-simplification-and-refinement.html"><LINK
-REL="NEXT"
-TITLE="Isosurfaces from 3D functions"
-HREF="gts-isosurfaces-from-3d-functions.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-surface-simplification-and-refinement.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-OUT-OF-CORE-SIMPLIFICATION"
->Out-of-core simplification</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN10609"
-></A
-><H2
->Name</H2
->Out-of-core simplification -- objects for simplification based on vertex clustering.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN10612"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-CLASS-CAPS"
->GTS_CLUSTER_CLASS</A
->               (klass)
-#define     <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-CAPS"
->GTS_CLUSTER</A
->                     (obj)
-#define     <A
-HREF="gts-out-of-core-simplification.html#GTS-IS-CLUSTER-CAPS"
->GTS_IS_CLUSTER</A
->                  (obj)
-struct      <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->;
-struct      <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->;
-struct      <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERID"
->GtsClusterId</A
->;
-
-<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->* <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-CLASS"
->gts_cluster_class</A
->          (void);
-<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->* <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-NEW"
->gts_cluster_new</A
->                 (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
-> *klass,
-                                             <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERID"
->GtsClusterId</A
-> id,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *vklass);
-void        <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-ADD"
->gts_cluster_add</A
->                 (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
-> *c,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-UPDATE"
->gts_cluster_update</A
->              (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
-> *c);
-
-#define     <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-CLASS-CAPS"
->GTS_CLUSTER_GRID_CLASS</A
->          (klass)
-#define     <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-CAPS"
->GTS_CLUSTER_GRID</A
->                (obj)
-#define     <A
-HREF="gts-out-of-core-simplification.html#GTS-IS-CLUSTER-GRID-CAPS"
->GTS_IS_CLUSTER_GRID</A
->             (obj)
-struct      <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->;
-struct      <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
->;
-
-<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->* <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-CLASS"
->gts_cluster_grid_class</A
-> (void);
-<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
->* <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-NEW"
->gts_cluster_grid_new</A
->        (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
-> *klass,
-                                             <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
-> *cluster_class,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta);
-void        <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-ADD-TRIANGLE"
->gts_cluster_grid_add_triangle</A
->   (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
-> *cluster_grid,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->    <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-UPDATE"
->gts_cluster_grid_update</A
->         (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
-> *cluster_grid);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN10657"
-></A
-><H2
->Description</H2
-><P
->Using vertex clusters and vertex cluster grids it is easy to design out-of-core algorithms for surface simplification. This approach has been detailed in a recent paper by Lindstrom and Turk ("Out-of-core simplification of large polygonal models", 2000).</P
-><P
->Vertex clusters are just groups of vertices collapsed into a single vertex. The position of this single representative vertex can be derived with different techniques. The default GTS implementation <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
-> just takes the average of the positions of the vertices in a given cluster as the representative position. Clusters are created using <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-NEW"
->gts_cluster_new</A
->(). The cluster is initially empty and the position of the representative vertex is set to the origin. Vertices are added using <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-ADD"
->gts_cluster_add</A
->() which calls the <GTKDOCLINK
-HREF="ADD"
->add</GTKDOCLINK
->() virtual method of <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->. Once all the vertices have been added <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-UPDATE"
->gts_cluster_update</A
->() computes the position of the representative vertex.</P
-><P
->Clusters are grouped using the <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
-> object which is just an implementation of the hash-table based regular grid of Lindstrom and Turk. This regular grid is created using <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-NEW"
->gts_cluster_grid_new</A
->(). Once created triangles of the surface to be simplified can be added using <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-ADD-TRIANGLE"
->gts_cluster_grid_add_triangle</A
->() which adds the vertices of the triangle to the <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
-> they belong to and adds the corresponding faces to the simplified surface. After all the triangles of the original surface have been added the position of the representative vertex of all the vertex clusters is computed using <A
-HREF="gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-UPDATE"
->gts_cluster_grid_update</A
->(). The simplified surface is then complete and the cluster grid can be destroyed using <A
-HREF="gts-object-class.html#GTS-OBJECT-DESTROY"
->gts_object_destroy</A
->().</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN10674"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10676"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-CLASS-CAPS"
-></A
->GTS_CLUSTER_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CLUSTER_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10693"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-CAPS"
-></A
->GTS_CLUSTER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CLUSTER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10710"
-></A
-><H3
-><A
-NAME="GTS-IS-CLUSTER-CAPS"
-></A
->GTS_IS_CLUSTER()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_CLUSTER(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10728"
-></A
-><H3
-><A
-NAME="GTSCLUSTERCLASS"
-></A
->struct GtsClusterClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsClusterClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The cluster class derived from <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->. Virtual function <TT
-CLASS="PARAMETER"
-><I
->add</I
-></TT
-> adds point <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> to the cluster while passing user-data <TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
->. Virtual function <TT
-CLASS="PARAMETER"
-><I
->update</I
-></TT
-> computes the position of the representative vertex.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10738"
-></A
-><H3
-><A
-NAME="GTSCLUSTER"
-></A
->struct GtsCluster</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsCluster {
-  GtsObject parent;
-
-  GtsClusterId id;
-  GtsVertex * v;
-  guint n;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The cluster object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->parent</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERID"
->GtsClusterId</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->id</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Unique identifier.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->v</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> representative of all the vertices in the cluster.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of vertices added to the cluster.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10769"
-></A
-><H3
-><A
-NAME="GTSCLUSTERID"
-></A
->struct GtsClusterId</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsClusterId {
-  guint x, y, z;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10774"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-CLASS"
-></A
->gts_cluster_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->* gts_cluster_class          (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10791"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-NEW"
-></A
->gts_cluster_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->* gts_cluster_new                 (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
-> *klass,
-                                             <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERID"
->GtsClusterId</A
-> id,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *vklass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->id</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the id of the new cluster.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vklass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> for the representative vertex of the cluster.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10825"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-ADD"
-></A
->gts_cluster_add ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_cluster_add                 (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
-> *c,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds point <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> to cluster <TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to pass to the <GTKDOCLINK
-HREF="ADD"
->add</GTKDOCLINK
->() virtual method of <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10857"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-UPDATE"
-></A
->gts_cluster_update ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_cluster_update              (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
-> *c);</PRE
-></TD
-></TR
-></TABLE
-><P
->Updates the position of the vertex representative of all the
-vertices added to <TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10875"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-GRID-CLASS-CAPS"
-></A
->GTS_CLUSTER_GRID_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CLUSTER_GRID_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10892"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-GRID-CAPS"
-></A
->GTS_CLUSTER_GRID()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_CLUSTER_GRID(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10909"
-></A
-><H3
-><A
-NAME="GTS-IS-CLUSTER-GRID-CAPS"
-></A
->GTS_IS_CLUSTER_GRID()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_CLUSTER_GRID(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTER"
->GtsCluster</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10927"
-></A
-><H3
-><A
-NAME="GTSCLUSTERGRIDCLASS"
-></A
->struct GtsClusterGridClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsClusterGridClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The cluster grid class derived from <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10933"
-></A
-><H3
-><A
-NAME="GTSCLUSTERGRID"
-></A
->struct GtsClusterGrid</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsClusterGrid {
-  GtsObject parent;
-
-  GtsSurface * surface;
-  GtsBBox * bbox;
-  GtsVector size;
-
-  GtsClusterClass * cluster_class;
-  GHashTable * clusters;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The cluster grid object. </P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->parent</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->surface</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Surface being simplified.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->bbox</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Bounding box of the original surface.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->size</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Size of the simplification grid.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->cluster_class</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Private.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GHASHTABLE"
->GHashTable</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->clusters</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Private.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10973"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-GRID-CLASS"
-></A
->gts_cluster_grid_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->* gts_cluster_grid_class (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10990"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-GRID-NEW"
-></A
->gts_cluster_grid_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
->* gts_cluster_grid_new        (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
-> *klass,
-                                             <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERCLASS"
->GtsClusterClass</A
-> *cluster_class,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-bounding-boxes-trees.html#GTSBBOX"
->GtsBBox</A
-> *bbox,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS"
->GtsClusterGridClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cluster_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the klass to be used for the vertex clusters.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the simplified surface.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->bbox</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> bounding box of the surface to be simplified.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the size of one grid cell of the simplification grid.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11033"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-GRID-ADD-TRIANGLE"
-></A
->gts_cluster_grid_add_triangle ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_cluster_grid_add_triangle   (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
-> *cluster_grid,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds the triangle defined by <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
-> to the respective clusters
-of <TT
-CLASS="PARAMETER"
-><I
->cluster_grid</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cluster_grid</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to the cluster <GTKDOCLINK
-HREF="ADD"
->add</GTKDOCLINK
->() method.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN11078"
-></A
-><H3
-><A
-NAME="GTS-CLUSTER-GRID-UPDATE"
-></A
->gts_cluster_grid_update ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->    gts_cluster_grid_update         (<A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
-> *cluster_grid);</PRE
-></TD
-></TR
-></TABLE
-><P
->Updates the representative vertices of all the clusters of <TT
-CLASS="PARAMETER"
-><I
->cluster_grid</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cluster_grid</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-out-of-core-simplification.html#GTSCLUSTERGRID"
->GtsClusterGrid</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> describing the statistics for the number of vertices
-added to each cluster of <TT
-CLASS="PARAMETER"
-><I
->cluster_grid</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-surface-simplification-and-refinement.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-isosurfaces-from-3d-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Surface simplification and refinement</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Isosurfaces from 3D functions</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-points.html b/doc/html/gts-points.html
deleted file mode 100644
index 7ea1d67..0000000
--- a/doc/html/gts-points.html
+++ /dev/null
@@ -1,3867 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Points</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Containee classes"
-HREF="gts-containee-classes.html"><LINK
-REL="NEXT"
-TITLE="Vertices"
-HREF="gts-vertices.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-containee-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vertices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-POINTS"
->Points</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN3242"
-></A
-><H2
->Name</H2
->Points -- point object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN3245"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-points.html#GTS-POINT-CLASS-CAPS"
->GTS_POINT_CLASS</A
->                 (klass)
-#define     <A
-HREF="gts-points.html#GTS-POINT-CAPS"
->GTS_POINT</A
->                       (obj)
-#define     <A
-HREF="gts-points.html#GTS-IS-POINT-CAPS"
->GTS_IS_POINT</A
->                    (obj)
-struct      <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->;
-struct      <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->;
-
-<A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->* <A
-HREF="gts-points.html#GTS-POINT-CLASS"
->gts_point_class</A
->              (void);
-<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   <A
-HREF="gts-points.html#GTS-POINT-NEW"
->gts_point_new</A
->                   (<A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z);
-void        <A
-HREF="gts-points.html#GTS-POINT-SET"
->gts_point_set</A
->                   (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z);
-#define     <A
-HREF="gts-points.html#GTS-POINT-IS-IN-RECTANGLE"
->gts_point_is_in_rectangle</A
->       (p, p1, p2)
-<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   <A
-HREF="gts-points.html#GTS-SEGMENT-TRIANGLE-INTERSECTION"
->gts_segment_triangle_intersection</A
->
-                                            (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> boundary,
-                                             <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> *klass);
-void        <A
-HREF="gts-points.html#GTS-POINT-TRANSFORM"
->gts_point_transform</A
->             (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-DISTANCE"
->gts_point_distance</A
->              (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-DISTANCE2"
->gts_point_distance2</A
->             (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-ORIENTATION-3D"
->gts_point_orientation_3d</A
->        (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p4);
-enum        <A
-HREF="gts-points.html#GTSINTERSECT"
->GtsIntersect</A
->;
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-IN-CIRCLE"
->gts_point_in_circle</A
->             (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-IN-TRIANGLE-CIRCLE"
->gts_point_in_triangle_circle</A
->    (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<A
-HREF="gts-points.html#GTSINTERSECT"
->GtsIntersect</A
-> <A
-HREF="gts-points.html#GTS-POINT-IS-IN-TRIANGLE"
->gts_point_is_in_triangle</A
->       (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-ORIENTATION"
->gts_point_orientation</A
->           (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-SEGMENT-DISTANCE2"
->gts_point_segment_distance2</A
->     (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-SEGMENT-DISTANCE"
->gts_point_segment_distance</A
->      (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);
-void        <A
-HREF="gts-points.html#GTS-POINT-SEGMENT-CLOSEST"
->gts_point_segment_closest</A
->       (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *closest);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-TRIANGLE-DISTANCE"
->gts_point_triangle_distance</A
->     (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-void        <A
-HREF="gts-points.html#GTS-POINT-TRIANGLE-CLOSEST"
->gts_point_triangle_closest</A
->      (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *closest);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-points.html#GTS-POINT-TRIANGLE-DISTANCE2"
->gts_point_triangle_distance2</A
->    (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-points.html#GTS-POINT-IS-INSIDE-SURFACE"
->gts_point_is_inside_surface</A
->     (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> is_open);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN3339"
-></A
-><H2
->Description</H2
-><P
->Three-dimensional points and a few geometrical functions.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN3342"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3344"
-></A
-><H3
-><A
-NAME="GTS-POINT-CLASS-CAPS"
-></A
->GTS_POINT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_POINT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of the <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3361"
-></A
-><H3
-><A
-NAME="GTS-POINT-CAPS"
-></A
->GTS_POINT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_POINT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of the <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3378"
-></A
-><H3
-><A
-NAME="GTS-IS-POINT-CAPS"
-></A
->GTS_IS_POINT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_POINT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a descendant of a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3396"
-></A
-><H3
-><A
-NAME="GTSPOINTCLASS"
-></A
->struct GtsPointClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsPointClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The class for <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->. No virtual functions are associated.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3402"
-></A
-><H3
-><A
-NAME="GTSPOINT"
-></A
->struct GtsPoint</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsPoint {
-  GtsObject object;
-
-  gdouble x, y, z; /* must be contiguous (cast to robust functions) */
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The point object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->x</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->x coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->y</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->y coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->z</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->z coordinate.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3432"
-></A
-><H3
-><A
-NAME="GTS-POINT-CLASS"
-></A
->gts_point_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->* gts_point_class              (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3449"
-></A
-><H3
-><A
-NAME="GTS-POINT-NEW"
-></A
->gts_point_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   gts_point_new                   (<A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the x-coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the y-coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the z-coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3487"
-></A
-><H3
-><A
-NAME="GTS-POINT-SET"
-></A
->gts_point_set ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_point_set                   (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z);</PRE
-></TD
-></TR
-></TABLE
-><P
->Sets the coordinates of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the x-coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the y-coordinate.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the z-coordinate.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3520"
-></A
-><H3
-><A
-NAME="GTS-POINT-IS-IN-RECTANGLE"
-></A
->gts_point_is_in_rectangle()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_point_is_in_rectangle(p, p1, p2)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is contained in the box (boundary included) defined by its two corners <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the lower-left front corner of the box.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the upper-right back corner of the box.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3548"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-TRIANGLE-INTERSECTION"
-></A
->gts_segment_triangle_intersection ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   gts_segment_triangle_intersection
-                                            (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> boundary,
-                                             <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
->Checks if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> intersects <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->. If this is the case, creates a new
-point pi intersection of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> with <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
->This function is geometrically robust in the sense that it will not
-return a point if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> do not intersect and will return a
-point if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> do intersect. However, the point coordinates are
-subject to round-off errors.</P
-><P
->Note that this function will not return any point if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> is contained in
-the plane defined by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->boundary</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if <TT
-CLASS="LITERAL"
->TRUE</TT
->, the boundary of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> is taken into account.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> to be used for the new point.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a summit of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> (if <TT
-CLASS="PARAMETER"
-><I
->boundary</I
-></TT
-> is set to <TT
-CLASS="LITERAL"
->TRUE</TT
->), one of the endpoints
-of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> or a new <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->, intersection of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> with <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> 
-and <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> don't intersect.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3611"
-></A
-><H3
-><A
-NAME="GTS-POINT-TRANSFORM"
-></A
->gts_point_transform ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_point_transform             (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);</PRE
-></TD
-></TR
-></TABLE
-><P
->Transform the coordinates of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> according to <TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
->. (p[] becomes m[][].p[]).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> representing the transformation to 
-apply to the coordinates of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3637"
-></A
-><H3
-><A
-NAME="GTS-POINT-DISTANCE"
-></A
->gts_point_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_distance              (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the Euclidean distance between <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3667"
-></A
-><H3
-><A
-NAME="GTS-POINT-DISTANCE2"
-></A
->gts_point_distance2 ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_distance2             (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the square of the Euclidean distance between <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3697"
-></A
-><H3
-><A
-NAME="GTS-POINT-ORIENTATION-3D"
-></A
->gts_point_orientation_3d ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_orientation_3d        (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p4);</PRE
-></TD
-></TR
-></TABLE
-><P
->Checks if <TT
-CLASS="PARAMETER"
-><I
->p4</I
-></TT
-> lies above, below or on the plane passing through the
-points <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
->. Below is defined so that <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
->
-appear in counterclockwise order when viewed from above the
-plane. The returned value is an approximation of six times the
-signed volume of the tetrahedron defined by the four points. This
-function uses adaptive floating point arithmetic and is
-consequently geometrically robust.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p4</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a positive value if <TT
-CLASS="PARAMETER"
-><I
->p4</I
-></TT
-> lies below, a negative value if
-<TT
-CLASS="PARAMETER"
-><I
->p4</I
-></TT
-> lies above the plane, zero if the four points are coplanar.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3746"
-></A
-><H3
-><A
-NAME="GTSINTERSECT"
-></A
->enum GtsIntersect</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->typedef enum 
-{ 
-  GTS_OUT = -1,
-  GTS_ON = 0,
-  GTS_IN = 1
-} GtsIntersect;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3751"
-></A
-><H3
-><A
-NAME="GTS-POINT-IN-CIRCLE"
-></A
->gts_point_in_circle ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_in_circle             (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3);</PRE
-></TD
-></TR
-></TABLE
-><P
->Tests if the planar projection (x, y) of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is inside or outside the
-circle defined by the planar projection of <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a positive number if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> lies inside,
-a negative number if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> lies outside and zero if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> lies on 
-the circle.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3798"
-></A
-><H3
-><A
-NAME="GTS-POINT-IN-TRIANGLE-CIRCLE"
-></A
->gts_point_in_triangle_circle ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_in_triangle_circle    (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Tests if the planar projection (x, y) of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is inside or outside
-the circumcircle of the planar projection of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->. This function is
-geometrically robust.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a positive number if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> lies inside,
-a negative number if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> lies outside and zero if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> lies on 
-the circumcircle of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3832"
-></A
-><H3
-><A
-NAME="GTS-POINT-IS-IN-TRIANGLE"
-></A
->gts_point_is_in_triangle ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSINTERSECT"
->GtsIntersect</A
-> gts_point_is_in_triangle       (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Tests if the planar projection (x, y) of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is inside, outside or
-on the boundary of the planar projection of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.  This function is
-geometrically robust.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->GTS_IN</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is inside <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->, <TT
-CLASS="LITERAL"
->GTS_ON</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is on the boundary of
-<TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->, <TT
-CLASS="LITERAL"
->GTS_OUT</TT
-> otherwise.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3869"
-></A
-><H3
-><A
-NAME="GTS-POINT-ORIENTATION"
-></A
->gts_point_orientation ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_orientation           (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p1,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p2,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p3);</PRE
-></TD
-></TR
-></TABLE
-><P
->Checks for orientation of the projection of three points on the
-(x,y) plane. The result is also an approximation of twice the
-signed area of the triangle defined by the three points. This
-function uses adaptive floating point arithmetic and is
-consequently geometrically robust.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a positive value if <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p3</I
-></TT
-> appear in
-counterclockwise order, a negative value if they appear in
-clockwise order and zero if they are colinear.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3906"
-></A
-><H3
-><A
-NAME="GTS-POINT-SEGMENT-DISTANCE2"
-></A
->gts_point_segment_distance2 ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_segment_distance2     (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the square of the minimun Euclidean distance between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3936"
-></A
-><H3
-><A
-NAME="GTS-POINT-SEGMENT-DISTANCE"
-></A
->gts_point_segment_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_segment_distance      (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimun Euclidean distance between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3966"
-></A
-><H3
-><A
-NAME="GTS-POINT-SEGMENT-CLOSEST"
-></A
->gts_point_segment_closest ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_point_segment_closest       (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *closest);</PRE
-></TD
-></TR
-></TABLE
-><P
->Set the coordinates of <TT
-CLASS="PARAMETER"
-><I
->closest</I
-></TT
-> to the coordinates of the point belonging
-to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> closest to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->closest</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN3998"
-></A
-><H3
-><A
-NAME="GTS-POINT-TRIANGLE-DISTANCE"
-></A
->gts_point_triangle_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_triangle_distance     (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimun Euclidean distance between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4028"
-></A
-><H3
-><A
-NAME="GTS-POINT-TRIANGLE-CLOSEST"
-></A
->gts_point_triangle_closest ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_point_triangle_closest      (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *closest);</PRE
-></TD
-></TR
-></TABLE
-><P
->Set the coordinates of <TT
-CLASS="PARAMETER"
-><I
->closest</I
-></TT
-> to those of the point belonging to <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> and 
-closest to <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->closest</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4060"
-></A
-><H3
-><A
-NAME="GTS-POINT-TRIANGLE-DISTANCE2"
-></A
->gts_point_triangle_distance2 ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_point_triangle_distance2    (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the square of the minimun Euclidean distance between <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4090"
-></A
-><H3
-><A
-NAME="GTS-POINT-IS-INSIDE-SURFACE"
-></A
->gts_point_is_inside_surface ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_point_is_inside_surface     (<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GNODE"
->GNode</GTKDOCLINK
-> *tree,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> is_open);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.  </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a bounding box tree of the faces of a closed, orientable
-surface (see <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE"
->gts_bb_tree_surface</A
->()).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->is_open</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the surface defined by <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
-> is "open" i.e. its volume 
-is negative, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> is inside or on the boundary of the surface
-defined by <TT
-CLASS="PARAMETER"
-><I
->tree</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-containee-classes.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-vertices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Containee classes</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vertices</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-progressive-graph.html b/doc/html/gts-progressive-graph.html
deleted file mode 100644
index bd4166d..0000000
--- a/doc/html/gts-progressive-graph.html
+++ /dev/null
@@ -1,2750 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Progressive graph</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Graph and operations on graphs"
-HREF="c13676.html"><LINK
-REL="PREVIOUS"
-TITLE="Weighted graph"
-HREF="gts-weighted-graph.html"><LINK
-REL="NEXT"
-TITLE="Graph partitioning"
-HREF="gts-graph-partitioning.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-weighted-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-graph-partitioning.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-PROGRESSIVE-GRAPH"
->Progressive graph</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN15237"
-></A
-><H2
->Name</H2
->Progressive graph -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN15240"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-CLASS-CAPS"
->GTS_GNODE_SPLIT_CLASS</A
->           (klass)
-#define     <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-CAPS"
->GTS_GNODE_SPLIT</A
->                 (obj)
-#define     <A
-HREF="gts-progressive-graph.html#GTS-IS-GNODE-SPLIT-CAPS"
->GTS_IS_GNODE_SPLIT</A
->              (obj)
-#define     <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-N1-CAPS"
->GTS_GNODE_SPLIT_N1</A
->              (ns)
-#define     <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-N2-CAPS"
->GTS_GNODE_SPLIT_N2</A
->              (ns)
-struct      <A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
->;
-struct      <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->;
-
-<A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
->* <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-CLASS"
->gts_gnode_split_class</A
->   (void);
-<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->* <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-NEW"
->gts_gnode_split_new</A
->          (<A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *n1,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *n2);
-void        <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-COLLAPSE"
->gts_gnode_split_collapse</A
->        (<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> *ns,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
-> *klass);
-void        <A
-HREF="gts-progressive-graph.html#GTS-GNODE-SPLIT-EXPAND"
->gts_gnode_split_expand</A
->          (<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> *ns,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);
-
-#define     <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-CLASS-CAPS"
->GTS_PGRAPH_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-CAPS"
->GTS_PGRAPH</A
->                      (obj)
-#define     <A
-HREF="gts-progressive-graph.html#GTS-IS-PGRAPH-CAPS"
->GTS_IS_PGRAPH</A
->                   (obj)
-struct      <A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
->;
-struct      <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->;
-
-<A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
->* <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-CLASS"
->gts_pgraph_class</A
->            (void);
-<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->*  <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-NEW"
->gts_pgraph_new</A
->                  (<A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
-> *split_class,
-                                             <A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
-> *node_class,
-                                             <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
-> *edge_class,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> min);
-<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->* <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-ADD-NODE"
->gts_pgraph_add_node</A
->          (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);
-<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->* <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-REMOVE-NODE"
->gts_pgraph_remove_node</A
->       (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-DOWN"
->gts_pgraph_down</A
->                 (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-SET-NODE-NUMBER"
->gts_pgraph_set_node_number</A
->      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-GET-NODE-NUMBER"
->gts_pgraph_get_node_number</A
->      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-MAX-NODE-NUMBER"
->gts_pgraph_max_node_number</A
->      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-MIN-NODE-NUMBER"
->gts_pgraph_min_node_number</A
->      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);
-void        <A
-HREF="gts-progressive-graph.html#GTS-PGRAPH-FOREACH-NODE"
->gts_pgraph_foreach_node</A
->         (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN15307"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN15310"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15312"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-CLASS-CAPS"
-></A
->GTS_GNODE_SPLIT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GNODE_SPLIT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15326"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-CAPS"
-></A
->GTS_GNODE_SPLIT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_GNODE_SPLIT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15340"
-></A
-><H3
-><A
-NAME="GTS-IS-GNODE-SPLIT-CAPS"
-></A
->GTS_IS_GNODE_SPLIT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_GNODE_SPLIT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15354"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-N1-CAPS"
-></A
->GTS_GNODE_SPLIT_N1()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_GNODE_SPLIT_N1(ns) (GTS_IS_GNODE_SPLIT ((ns)->n1) ? GTS_GNODE_SPLIT ((ns)->n1)->n : GTS_GNODE ((ns)->n1))</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ns</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15368"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-N2-CAPS"
-></A
->GTS_GNODE_SPLIT_N2()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_GNODE_SPLIT_N2(ns) (GTS_IS_GNODE_SPLIT ((ns)->n2) ? GTS_GNODE_SPLIT ((ns)->n2)->n : GTS_GNODE ((ns)->n2))</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ns</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15382"
-></A
-><H3
-><A
-NAME="GTSGNODESPLITCLASS"
-></A
->struct GtsGNodeSplitClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGNodeSplitClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15387"
-></A
-><H3
-><A
-NAME="GTSGNODESPLIT"
-></A
->struct GtsGNodeSplit</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsGNodeSplit {
-  GtsObject object;
-
-  GtsGNode * n;
-  GtsObject * n1;
-  GtsObject * n2;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15392"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-CLASS"
-></A
->gts_gnode_split_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
->* gts_gnode_split_class   (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15409"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-NEW"
-></A
->gts_gnode_split_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->* gts_gnode_split_new          (<A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *n1,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *n2);</PRE
-></TD
-></TR
-></TABLE
-><P
->Creates a new <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> which would collapse <TT
-CLASS="PARAMETER"
-><I
->n1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->n2</I
-></TT
-> into
-<TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
->. The collapse itself is not performed.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> or <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> or <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15456"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-COLLAPSE"
-></A
->gts_gnode_split_collapse ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_gnode_split_collapse        (<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> *ns,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
->Collapses the node split <TT
-CLASS="PARAMETER"
-><I
->ns</I
-></TT
->. Any new edge created during the
-process will be of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ns</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15487"
-></A
-><H3
-><A
-NAME="GTS-GNODE-SPLIT-EXPAND"
-></A
->gts_gnode_split_expand ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_gnode_split_expand          (<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> *ns,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g);</PRE
-></TD
-></TR
-></TABLE
-><P
->Expands the node split ns adding the new nodes to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ns</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15511"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-CLASS-CAPS"
-></A
->GTS_PGRAPH_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_PGRAPH_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15525"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-CAPS"
-></A
->GTS_PGRAPH()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_PGRAPH(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15539"
-></A
-><H3
-><A
-NAME="GTS-IS-PGRAPH-CAPS"
-></A
->GTS_IS_PGRAPH()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_PGRAPH(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15553"
-></A
-><H3
-><A
-NAME="GTSPGRAPHCLASS"
-></A
->struct GtsPGraphClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsPGraphClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15558"
-></A
-><H3
-><A
-NAME="GTSPGRAPH"
-></A
->struct GtsPGraph</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsPGraph {
-  GtsObject object;
-
-  GtsGraph * g;
-  GPtrArray * split;
-  GArray * levels;
-  GtsGNodeSplitClass * split_class;
-  GtsWGEdgeClass * edge_class;
-  guint pos, min, level;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15563"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-CLASS"
-></A
->gts_pgraph_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
->* gts_pgraph_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15580"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-NEW"
-></A
->gts_pgraph_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->*  gts_pgraph_new                  (<A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
-> *g,
-                                             <A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
-> *split_class,
-                                             <A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
-> *node_class,
-                                             <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
-> *edge_class,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> min);</PRE
-></TD
-></TR
-></TABLE
-><P
->Creates a new multilevel approximation of graph <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->. At each level a
-maximal matching is created using the Heavy Edge Matching (HEM)
-technique of Karypis and Kumar (1997). The newly created nodes are
-of type <TT
-CLASS="PARAMETER"
-><I
->node_class</I
-></TT
-> and their weight is set to the sum of the
-weights of their children. The newly created edges are of type
-<TT
-CLASS="PARAMETER"
-><I
->edge_class</I
-></TT
-> and their weight is set to the sum of the weight of the
-collapsed edges. The last level is reached when the maximal
-matching obtained would lead to a graph with less than <TT
-CLASS="PARAMETER"
-><I
->min</I
-></TT
-> nodes.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPHCLASS"
->GtsPGraphClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGRAPH"
->GtsGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->split_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSGNODESPLITCLASS"
->GtsGNodeSplitClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->node_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edge_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->min</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimum number of nodes.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> containing the multilevel
-representation of <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15637"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-ADD-NODE"
-></A
->gts_pgraph_add_node ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->* gts_pgraph_add_node          (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds one node to the multilevel graph <TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> by expanding the next
-available <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the expanded <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> or <GTKDOCLINK
-HREF="NULL-CAPS"
->NULL</GTKDOCLINK
-> if all the
-<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> have already been expanded.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15664"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-REMOVE-NODE"
-></A
->gts_pgraph_remove_node ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->* gts_pgraph_remove_node       (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes one node from the multilevel graph <TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> by collapsing the
-first available <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the collapsed <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if all the
-<A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> have already been collapsed.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15691"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-DOWN"
-></A
->gts_pgraph_down ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_pgraph_down                 (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Performs the required number of expansions to go from the current
-level to the level immediately below.</P
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> is not <TT
-CLASS="LITERAL"
->NULL</TT
->, it is called after each <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> has
-been expanded.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->FALSE</TT
-> if it is not possible to go down one level, <TT
-CLASS="LITERAL"
->TRUE</TT
->
-otherwise.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15732"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-SET-NODE-NUMBER"
-></A
->gts_pgraph_set_node_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_pgraph_set_node_number      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n);</PRE
-></TD
-></TR
-></TABLE
-><P
->Performs the required number of collapses or expansions to set the
-number of nodes of <TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> to <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a number of nodes.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15756"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-GET-NODE-NUMBER"
-></A
->gts_pgraph_get_node_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_pgraph_get_node_number      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the current number of nodes of <TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15779"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-MAX-NODE-NUMBER"
-></A
->gts_pgraph_max_node_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_pgraph_max_node_number      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum number of nodes of <TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> i.e. the number of
-nodes if all the <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> were expanded.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15803"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-MIN-NODE-NUMBER"
-></A
->gts_pgraph_min_node_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_pgraph_min_node_number      (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimum number of nodes of <TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> i.e. the number of
-nodes if all the <A
-HREF="gts-progressive-graph.html#GTSGNODESPLIT"
->GtsGNodeSplit</A
-> were collapsed.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15827"
-></A
-><H3
-><A
-NAME="GTS-PGRAPH-FOREACH-NODE"
-></A
->gts_pgraph_foreach_node ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_pgraph_foreach_node         (<A
-HREF="gts-progressive-graph.html#GTSPGRAPH"
->GtsPGraph</A
-> *pg,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->pg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-weighted-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-graph-partitioning.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Weighted graph</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Graph partitioning</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-progressive-surfaces.html b/doc/html/gts-progressive-surfaces.html
deleted file mode 100644
index 8180d94..0000000
--- a/doc/html/gts-progressive-surfaces.html
+++ /dev/null
@@ -1,2686 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Progressive surfaces</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Progressive and Hierarchical surfaces"
-HREF="c12040.html"><LINK
-REL="PREVIOUS"
-TITLE="Vertex split"
-HREF="gts-vertex-split.html"><LINK
-REL="NEXT"
-TITLE="Hierarchical vertex split"
-HREF="gts-hierarchical-vertex-split.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-hierarchical-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-PROGRESSIVE-SURFACES"
->Progressive surfaces</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN12476"
-></A
-><H2
->Name</H2
->Progressive surfaces -- continuous level-of-detail for surfaces.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN12479"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLASS-CAPS"
->GTS_PSURFACE_CLASS</A
->              (klass)
-#define     <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CAPS"
->GTS_PSURFACE</A
->                    (obj)
-#define     <A
-HREF="gts-progressive-surfaces.html#GTS-IS-PSURFACE-CAPS"
->GTS_IS_PSURFACE</A
->                 (obj)
-#define     <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-IS-CLOSED-CAPS"
->GTS_PSURFACE_IS_CLOSED</A
->          (ps)
-struct      <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->;
-struct      <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->;
-
-<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->* <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLASS"
->gts_psurface_class</A
->        (void);
-<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->* <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-NEW"
->gts_psurface_new</A
->               (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *split_class,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> cost_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> cost_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC"
->GtsCoarsenFunc</A
-> coarsen_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> coarsen_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
-> stop_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> stop_data,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> minangle);
-<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-ADD-VERTEX"
->gts_psurface_add_vertex</A
->         (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);
-<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-REMOVE-VERTEX"
->gts_psurface_remove_vertex</A
->      (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);
-void        <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-SET-VERTEX-NUMBER"
->gts_psurface_set_vertex_number</A
->  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-GET-VERTEX-NUMBER"
->gts_psurface_get_vertex_number</A
->  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MIN-VERTEX-NUMBER"
->gts_psurface_min_vertex_number</A
->  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MAX-VERTEX-NUMBER"
->gts_psurface_max_vertex_number</A
->  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);
-void        <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-FOREACH-VERTEX"
->gts_psurface_foreach_vertex</A
->     (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->* <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN"
->gts_psurface_open</A
->              (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *split_class,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> *line);
-<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-READ-VERTEX"
->gts_psurface_read_vertex</A
->        (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-void        <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE"
->gts_psurface_close</A
->              (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);
-void        <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-WRITE"
->gts_psurface_write</A
->              (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN12540"
-></A
-><H2
->Description</H2
-><P
->Progressive surfaces allow you to control precisely and continuously the level of detail of a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->. They are built off-line by storing the sequence of edge collapses performed during surface simplification (see <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-NEW"
->gts_psurface_new</A
->()). Fast traversal of the pre-built sequence allow on-line selection of the required level of detail.</P
-><P
->Using the <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-WRITE"
->gts_psurface_write</A
->() function a text representation of a progressive surface can be written to a file, pipe or socket. This text representation allows the progressive transmission of a surface, starting with the coarsest representation and progressively refining it as data is read or received (see <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN"
->gts_psurface_open</A
->(), <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-READ-VERTEX"
->gts_psurface_read_vertex</A
->() and <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE"
->gts_psurface_close</A
->() for details).</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN12550"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12552"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-CLASS-CAPS"
-></A
->GTS_PSURFACE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_PSURFACE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12569"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-CAPS"
-></A
->GTS_PSURFACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_PSURFACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12586"
-></A
-><H3
-><A
-NAME="GTS-IS-PSURFACE-CAPS"
-></A
->GTS_IS_PSURFACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_PSURFACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12604"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-IS-CLOSED-CAPS"
-></A
->GTS_PSURFACE_IS_CLOSED()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define GTS_PSURFACE_IS_CLOSED(ps)  (!(ps)->vertices)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> has not been created with <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN"
->gts_psurface_open</A
->() or if
-it has been closed using <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE"
->gts_psurface_close</A
->().</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12623"
-></A
-><H3
-><A
-NAME="GTSPSURFACECLASS"
-></A
->struct GtsPSurfaceClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsPSurfaceClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The progressive surface class derived from <A
-HREF="gts-object-class.html#GTSOBJECTCLASS"
->GtsObjectClass</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12629"
-></A
-><H3
-><A
-NAME="GTSPSURFACE"
-></A
->struct GtsPSurface</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsPSurface {
-  GtsObject object;
-
-  GtsSurface * s;
-  GPtrArray * split;
-  GtsSplitClass * split_class;
-  guint pos, min;
-
-  GPtrArray * vertices;
-  GPtrArray * faces;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The progressive surface object.
-
- derived from <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->. The field <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> is the <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> being refined or coarsened by operations on the progressive surface. All the other fields must be considered private and accessed only through the following functions.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->s</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> being refined or coarsened by operations on the progressive surface.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPTRARRAY"
->GPtrArray</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->split</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->split_class</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->pos</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->min</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPTRARRAY"
->GPtrArray</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->vertices</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GPTRARRAY"
->GPtrArray</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->faces</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12683"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-CLASS"
-></A
->gts_psurface_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->* gts_psurface_class        (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12700"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-NEW"
-></A
->gts_psurface_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->* gts_psurface_new               (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *split_class,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> cost_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> cost_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC"
->GtsCoarsenFunc</A
-> coarsen_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> coarsen_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
-> stop_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> stop_data,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> minangle);</PRE
-></TD
-></TR
-></TABLE
-><P
->This function works in exactly the same way as the
-<A
-HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN"
->gts_surface_coarsen</A
->() function, except that the history of edge
-collapse is saved in an array of <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> objects. This allows for
-dynamic continuous multiresolution control of the input <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->split_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> to use for the new progressive surface.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> cost function for the edge collapse algorithm.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to pass to <TT
-CLASS="PARAMETER"
-><I
->cost_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->coarsen_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function returning the vertex replacement for the edge 
-collapse.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->coarsen_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to pass to <TT
-CLASS="PARAMETER"
-><I
->coarsen_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function to call to decide whether to stop the coarsening
-process.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stop_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to pass to <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->minangle</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimum angle allowable between two neighboring triangles. 
-This is used to avoid introducing folds in the mesh during simplification.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new progressive surface.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12775"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-ADD-VERTEX"
-></A
->gts_psurface_add_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   gts_psurface_add_vertex         (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds a vertex to the progressive surface <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> by expanding the next
-available <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the expanded <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if all the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> have already
-been expanded.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12802"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-REMOVE-VERTEX"
-></A
->gts_psurface_remove_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   gts_psurface_remove_vertex      (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes one vertex from the progressive surface <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> by collapsing the first
-available <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the collapsed <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if all the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> have already
-been collapsed.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12829"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-SET-VERTEX-NUMBER"
-></A
->gts_psurface_set_vertex_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_psurface_set_vertex_number  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n);</PRE
-></TD
-></TR
-></TABLE
-><P
->Performs the required number of collapses or expansions to set the number
-of vertices of <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> to <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a number of vertices.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12853"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-GET-VERTEX-NUMBER"
-></A
->gts_psurface_get_vertex_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_psurface_get_vertex_number  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the current number of vertices of <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12876"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-MIN-VERTEX-NUMBER"
-></A
->gts_psurface_min_vertex_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_psurface_min_vertex_number  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the minimum number of vertices of <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> i.e. the number of vertices
-if all the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> were collapsed.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12900"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-MAX-VERTEX-NUMBER"
-></A
->gts_psurface_max_vertex_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_psurface_max_vertex_number  (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum number of vertices of <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> i.e. the number of vertices
-if all the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> were expanded.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12924"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-FOREACH-VERTEX"
-></A
->gts_psurface_foreach_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_psurface_foreach_vertex     (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each (potential) vertex of <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
->, whether actually used
-or not. The vertices are called in the order they were created during the
-edge collapse operation.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a function to call for each vertex of <TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12955"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-OPEN"
-></A
->gts_psurface_open ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->* gts_psurface_open              (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *split_class,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> *line);</PRE
-></TD
-></TR
-></TABLE
-><P
->Creates a new <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> prepared for input from the file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> 
-containing a valid GTS representation of a progressive surface. The initial
-shape of the progressive surface is loaded into <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
->Before being usable as such this progressive surface must be closed using
-<A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE"
->gts_psurface_close</A
->(). While open however, the functions
-<A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-GET-VERTEX-NUMBER"
->gts_psurface_get_vertex_number</A
->(), <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MIN-VERTEX-NUMBER"
->gts_psurface_min_vertex_number</A
->() and
-<A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MAX-VERTEX-NUMBER"
->gts_psurface_max_vertex_number</A
->() can still be used.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS"
->GtsPSurfaceClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->split_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> to use for the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->line</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->NULL</TT
-> or a pointer to a variable to fill with the line number in case
-of an error in the file format. </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if there was a format error while
-reading the file, in which case <TT
-CLASS="PARAMETER"
-><I
->line</I
-></TT
-> is set to the line where
-the error occured.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13012"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-READ-VERTEX"
-></A
->gts_psurface_read_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   gts_psurface_read_vertex        (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Reads in one vertex split operation from <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> and performs the expansion.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> prealably created with <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN"
->gts_psurface_open</A
->().</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the newly created <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if no vertex split could be
-read from <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13044"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-CLOSE"
-></A
->gts_psurface_close ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_psurface_close              (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps);</PRE
-></TD
-></TR
-></TABLE
-><P
->Closes a progressive surface.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> prealably created with <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN"
->gts_psurface_open</A
->().</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN13062"
-></A
-><H3
-><A
-NAME="GTS-PSURFACE-WRITE"
-></A
->gts_psurface_write ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_psurface_write              (<A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
-> *ps,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes to <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> a GTS progressive surface description.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->ps</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-progressive-surfaces.html#GTSPSURFACE"
->GtsPSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-hierarchical-vertex-split.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vertex split</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Hierarchical vertex split</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-segments.html b/doc/html/gts-segments.html
deleted file mode 100644
index 1516650..0000000
--- a/doc/html/gts-segments.html
+++ /dev/null
@@ -1,1848 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Segments</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Vertices"
-HREF="gts-vertices.html"><LINK
-REL="NEXT"
-TITLE="Edges"
-HREF="gts-edges.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-vertices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-edges.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-SEGMENTS"
->Segments</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN4745"
-></A
-><H2
->Name</H2
->Segments -- segment object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN4748"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-segments.html#GTS-SEGMENT-CLASS-CAPS"
->GTS_SEGMENT_CLASS</A
->               (klass)
-#define     <A
-HREF="gts-segments.html#GTS-SEGMENT-CAPS"
->GTS_SEGMENT</A
->                     (obj)
-#define     <A
-HREF="gts-segments.html#GTS-IS-SEGMENT-CAPS"
->GTS_IS_SEGMENT</A
->                  (obj)
-struct      <A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->;
-struct      <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->;
-
-<A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->* <A
-HREF="gts-segments.html#GTS-SEGMENT-CLASS"
->gts_segment_class</A
->          (void);
-<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->* <A
-HREF="gts-segments.html#GTS-SEGMENT-NEW"
->gts_segment_new</A
->                 (<A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
-> *klass,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v2);
-#define     <A
-HREF="gts-segments.html#GTS-SEGMENTS-ARE-IDENTICAL"
->gts_segments_are_identical</A
->      (s1, s2)
-<A
-HREF="gts-points.html#GTSINTERSECT"
->GtsIntersect</A
-> <A
-HREF="gts-segments.html#GTS-SEGMENTS-ARE-INTERSECTING"
->gts_segments_are_intersecting</A
->  (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s1,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s2);
-<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->* <A
-HREF="gts-segments.html#GTS-SEGMENT-IS-DUPLICATE"
->gts_segment_is_duplicate</A
->        (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-segments.html#GTS-SEGMENT-IS-OK"
->gts_segment_is_ok</A
->               (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);
-#define     <A
-HREF="gts-segments.html#GTS-SEGMENT-CONNECT"
->gts_segment_connect</A
->             (s, e1, e2)
-#define     <A
-HREF="gts-segments.html#GTS-SEGMENTS-TOUCH"
->gts_segments_touch</A
->              (s1, s2)
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-segments.html#GTS-SEGMENTS-FROM-VERTICES"
->gts_segments_from_vertices</A
->      (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *vertices);
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-segments.html#GTS-SEGMENT-MIDVERTEX"
->gts_segment_midvertex</A
->           (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN4783"
-></A
-><H2
->Description</H2
-><P
->Segments are defined by their two <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->. They are not oriented.</P
-><P
->When destroying a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->, all the vertices not used by another edge are also destroyed. This default behaviour can be changed punctually by setting the global variable gts_allow_floating_vertices to <TT
-CLASS="LITERAL"
->TRUE</TT
->. You must not forget to set this variable back to <TT
-CLASS="LITERAL"
->FALSE</TT
-> as all the algorithms of GTS assume the default behaviour.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN4791"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4793"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-CLASS-CAPS"
-></A
->GTS_SEGMENT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SEGMENT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4810"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-CAPS"
-></A
->GTS_SEGMENT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SEGMENT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4827"
-></A
-><H3
-><A
-NAME="GTS-IS-SEGMENT-CAPS"
-></A
->GTS_IS_SEGMENT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_SEGMENT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a descendant of <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4845"
-></A
-><H3
-><A
-NAME="GTSSEGMENTCLASS"
-></A
->struct GtsSegmentClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSegmentClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The segment class. No virtual functions are assiocated.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4850"
-></A
-><H3
-><A
-NAME="GTSSEGMENT"
-></A
->struct GtsSegment</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSegment {
-  GtsObject object;
-
-  GtsVertex * v1;
-  GtsVertex * v2;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The segment object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->v1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->First endpoint of the segment.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->v2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Second endpoint of the segment.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4875"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-CLASS"
-></A
->gts_segment_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->* gts_segment_class          (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4892"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-NEW"
-></A
->gts_segment_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->* gts_segment_new                 (<A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
-> *klass,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENTCLASS"
->GtsSegmentClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> different from <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> linking <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4930"
-></A
-><H3
-><A
-NAME="GTS-SEGMENTS-ARE-IDENTICAL"
-></A
->gts_segments_are_identical()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_segments_are_identical(s1, s2)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> link the same vertices, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->another <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4954"
-></A
-><H3
-><A
-NAME="GTS-SEGMENTS-ARE-INTERSECTING"
-></A
->gts_segments_are_intersecting ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSINTERSECT"
->GtsIntersect</A
-> gts_segments_are_intersecting  (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s1,
-                                             <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->GTS_IN</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> are intersecting, <TT
-CLASS="LITERAL"
->GTS_ON</TT
-> if one of the
-endpoints of <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> (resp. <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
->) lies on <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> (resp. <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
->), <TT
-CLASS="LITERAL"
->GTS_OUT</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4991"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-IS-DUPLICATE"
-></A
->gts_segment_is_duplicate ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->* gts_segment_is_duplicate        (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the first <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> different from <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> which shares the
-same endpoints or <TT
-CLASS="LITERAL"
->NULL</TT
-> if there is none.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5016"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-IS-OK"
-></A
->gts_segment_is_ok ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_segment_is_ok               (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> is not degenerate (i.e. <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->->v1 != <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->->v2) and not 
-duplicate, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5043"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-CONNECT"
-></A
->gts_segment_connect()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_segment_connect(s, e1, e2)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> connects <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> with <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->another <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5073"
-></A
-><H3
-><A
-NAME="GTS-SEGMENTS-TOUCH"
-></A
->gts_segments_touch()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_segments_touch(s1, s2)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5091"
-></A
-><H3
-><A
-NAME="GTS-SEGMENTS-FROM-VERTICES"
-></A
->gts_segments_from_vertices ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_segments_from_vertices      (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *vertices);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of unique <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> which have one of their vertices in 
-<TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5115"
-></A
-><H3
-><A
-NAME="GTS-SEGMENT-MIDVERTEX"
-></A
->gts_segment_midvertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_segment_midvertex           (<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> *s,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> to be used for the new vertex.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, midvertex of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-vertices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-edges.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vertices</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Edges</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-simple-statistics.html b/doc/html/gts-simple-statistics.html
deleted file mode 100644
index 0477f9d..0000000
--- a/doc/html/gts-simple-statistics.html
+++ /dev/null
@@ -1,899 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Simple statistics</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="PREVIOUS"
-TITLE="Vectors and matrices"
-HREF="gts-vectors-and-matrices.html"><LINK
-REL="NEXT"
-TITLE="Miscellaneous macros and functions"
-HREF="gts-miscellaneous-macros-and-functions.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-vectors-and-matrices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-SIMPLE-STATISTICS"
->Simple statistics</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN1657"
-></A
-><H2
->Name</H2
->Simple statistics -- a basic structure for computing min, max, average and variance.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN1660"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-struct      <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->;
-
-void        <A
-HREF="gts-simple-statistics.html#GTS-RANGE-INIT"
->gts_range_init</A
->                  (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r);
-void        <A
-HREF="gts-simple-statistics.html#GTS-RANGE-ADD-VALUE"
->gts_range_add_value</A
->             (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> val);
-void        <A
-HREF="gts-simple-statistics.html#GTS-RANGE-UPDATE"
->gts_range_update</A
->                (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r);
-void        <A
-HREF="gts-simple-statistics.html#GTS-RANGE-RESET"
->gts_range_reset</A
->                 (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r);
-void        <A
-HREF="gts-simple-statistics.html#GTS-RANGE-PRINT"
->gts_range_print</A
->                 (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1676"
-></A
-><H2
->Description</H2
-><P
->Using <A
-HREF="gts-simple-statistics.html#GTS-RANGE-INIT"
->gts_range_init</A
->(), <A
-HREF="gts-simple-statistics.html#GTS-RANGE-ADD-VALUE"
->gts_range_add_value</A
->() and <A
-HREF="gts-simple-statistics.html#GTS-RANGE-UPDATE"
->gts_range_update</A
->(), you can easily maintain basic statistics about an ensemble of values.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1682"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1684"
-></A
-><H3
-><A
-NAME="GTSRANGE"
-></A
->struct GtsRange</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsRange {
-  gdouble min, max, mean, stddev;
-  guint n;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->A simple statistics structure.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->min</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Minimum value of the population.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->max</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Maximum value of the population.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->mean</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Average value of the population.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->stddev</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Standard deviation of the population.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of samples in the population.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1719"
-></A
-><H3
-><A
-NAME="GTS-RANGE-INIT"
-></A
->gts_range_init ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_range_init                  (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r);</PRE
-></TD
-></TR
-></TABLE
-><P
->Initializes a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1737"
-></A
-><H3
-><A
-NAME="GTS-RANGE-ADD-VALUE"
-></A
->gts_range_add_value ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_range_add_value             (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> val);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds <TT
-CLASS="PARAMETER"
-><I
->val</I
-></TT
-> to <TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->val</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a value to add to <TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1762"
-></A
-><H3
-><A
-NAME="GTS-RANGE-UPDATE"
-></A
->gts_range_update ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_range_update                (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r);</PRE
-></TD
-></TR
-></TABLE
-><P
->Updates the fields of <TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1780"
-></A
-><H3
-><A
-NAME="GTS-RANGE-RESET"
-></A
->gts_range_reset ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_range_reset                 (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r);</PRE
-></TD
-></TR
-></TABLE
-><P
->Sets all the fields of <TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> to 0.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1798"
-></A
-><H3
-><A
-NAME="GTS-RANGE-PRINT"
-></A
->gts_range_print ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_range_print                 (<A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *r,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes a text representation of <TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> in <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->r</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-vectors-and-matrices.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-miscellaneous-macros-and-functions.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Vectors and matrices</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Miscellaneous macros and functions</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-surface-simplification-and-refinement.html b/doc/html/gts-surface-simplification-and-refinement.html
deleted file mode 100644
index 29b147d..0000000
--- a/doc/html/gts-surface-simplification-and-refinement.html
+++ /dev/null
@@ -1,2164 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Surface simplification and refinement</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Surface operations"
-HREF="c9853.html"><LINK
-REL="PREVIOUS"
-TITLE="Boolean operations"
-HREF="gts-boolean-operations.html"><LINK
-REL="NEXT"
-TITLE="Out-of-core simplification"
-HREF="gts-out-of-core-simplification.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-boolean-operations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-out-of-core-simplification.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-SURFACE-SIMPLIFICATION-AND-REFINEMENT"
->Surface simplification and refinement</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN10124"
-></A
-><H2
->Name</H2
->Surface simplification and refinement -- reducing or increasing the number of edges of a triangulated surface.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN10127"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-void        <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-REFINE"
->gts_surface_refine</A
->              (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GCOMPAREFUNC"
->GCompareFunc</GTKDOCLINK
-> compare_func,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
-> stop_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  (<A
-HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC"
->*GtsCoarsenFunc</A
->)               (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    (<A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->*GtsStopFunc</A
->)                  (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> cost,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nedge,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN"
->gts_surface_coarsen</A
->             (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> cost_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> cost_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC"
->GtsCoarsenFunc</A
-> coarsen_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> coarsen_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
-> stop_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> stop_data,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> minangle);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-COARSEN-STOP-NUMBER"
->gts_coarsen_stop_number</A
->         (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> cost,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nedge,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> *min_number);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-COARSEN-STOP-COST"
->gts_coarsen_stop_cost</A
->           (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> cost,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nedge,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *max_cost);
-
-struct      <A
-HREF="gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS"
->GtsVolumeOptimizedParams</A
->;
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-VERTEX"
->gts_volume_optimized_vertex</A
->     (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *edge,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS"
->GtsVolumeOptimizedParams</A
-> *params);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-COST"
->gts_volume_optimized_cost</A
->       (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS"
->GtsVolumeOptimizedParams</A
-> *params);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-EDGE-COLLAPSE-IS-VALID"
->gts_edge_collapse_is_valid</A
->      (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-EDGE-COLLAPSE-CREATES-FOLD"
->gts_edge_collapse_creates_fold</A
->  (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> max);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN10182"
-></A
-><H2
->Description</H2
-><P
->The <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN"
->gts_surface_coarsen</A
->() function allows to reduce the number of edges (and of course faces and vertices) of a given surface. Each edge is collapsed according to an order described by a user-defined cost function. It is then replaced by a single vertex given by another user-defined function. Two sets of cost and replacement functions are provided with the library. The default uses the squared length of the segment as cost and replaces the segment with its midpoint.</P
-><P
->The functions <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-COST"
->gts_volume_optimized_cost</A
->() and <A
-HREF="gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-VERTEX"
->gts_volume_optimized_vertex</A
->() are an implementation of an algorithm proposed by Lindstrom and Turk called "memoryless simplification". This algorithm has been shown to be both computationally efficient and very accurate in terms of error between the simplified surface and the original one. It also preserves the volume enclosed by the surface both globally and locally.</P
-><P
->Surface refinement is obtained by splitting the edges in two equal parts according to an order described by a user-defined cost function. The default is to use the squared length of the segments as cost.</P
-><P
->The coarsening or refinement processes are stopped using a user-defined stop function. Two functions are provided stopping either when the cost of collapsing an edge is too large (<A
-HREF="gts-surface-simplification-and-refinement.html#GTS-COARSEN-STOP-COST"
->gts_coarsen_stop_cost</A
->()) or when the number of edges is too small (<A
-HREF="gts-surface-simplification-and-refinement.html#GTS-COARSEN-STOP-NUMBER"
->gts_coarsen_stop_number</A
->()).</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN10193"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10195"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-REFINE"
-></A
->gts_surface_refine ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_refine              (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GCOMPAREFUNC"
->GCompareFunc</GTKDOCLINK
-> compare_func,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
-> stop_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Refine <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> using a midvertex insertion technique. All the
-edges of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> are ordered according to <TT
-CLASS="PARAMETER"
-><I
->compare_func</I
-></TT
->. The edges
-are then processed in order until <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> returns <TT
-CLASS="LITERAL"
->TRUE</TT
->. Each
-edge is split in two and new edges and faces are created.</P
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->compare_func</I
-></TT
-> is set to <TT
-CLASS="LITERAL"
->NULL</TT
-> an internal function comparing the
-squared length of the edges is used.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->compare_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a GCompareFunc.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10237"
-></A
-><H3
-><A
-NAME="GTSCOARSENFUNC"
-></A
->GtsCoarsenFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  (*GtsCoarsenFunc)               (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->User-defined function taking an edge <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> and returning a replacement vertex of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> of the replacement vertex.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->user data passed to the function.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a replacement vertex of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10272"
-></A
-><H3
-><A
-NAME="GTSSTOPFUNC"
-></A
->GtsStopFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    (*GtsStopFunc)                  (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> cost,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nedge,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->User-defined function used to stop the coarsening process.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the cost of collapse of the current edge.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nedge</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the number of edges of the surface after collapse of the current edge.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->user data passed to the function.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><TT
-CLASS="LITERAL"
->TRUE</TT
-> if the collapse of the current edge is not to take place, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10304"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-COARSEN"
-></A
->gts_surface_coarsen ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_coarsen             (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSKEYFUNC"
->GtsKeyFunc</A
-> cost_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> cost_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC"
->GtsCoarsenFunc</A
-> coarsen_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> coarsen_data,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
-> stop_func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> stop_data,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> minangle);</PRE
-></TD
-></TR
-></TABLE
-><P
->The edges of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> are sorted according to <TT
-CLASS="PARAMETER"
-><I
->cost_func</I
-></TT
-> to 
-create a priority heap (a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
->). The edges are extracted in
-turn from the top of the heap and collapsed (i.e. the vertices are
-replaced by the vertex returned by the <TT
-CLASS="PARAMETER"
-><I
->coarsen_func</I
-></TT
-> function)
-until the <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> functions returns <TT
-CLASS="LITERAL"
->TRUE</TT
->.</P
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->cost_func</I
-></TT
-> is set to <TT
-CLASS="LITERAL"
->NULL</TT
->, the edges are sorted according 
-to their length squared (the shortest is on top).</P
-><P
->If <TT
-CLASS="PARAMETER"
-><I
->coarsen_func</I
-></TT
-> is set to <TT
-CLASS="LITERAL"
->NULL</TT
-> <A
-HREF="gts-segments.html#GTS-SEGMENT-MIDVERTEX"
->gts_segment_midvertex</A
->() is used.</P
-><P
->The minimum angle is used to avoid introducing faces which would be folded.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a function returning the cost for a given edge.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->cost_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->coarsen_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSCOARSENVERTEXFUNC"
->GtsCoarsenVertexFunc</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->coarsen_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->coarsen_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC"
->GtsStopFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stop_data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->minangle</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> minimum angle between two neighboring triangles.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10375"
-></A
-><H3
-><A
-NAME="GTS-COARSEN-STOP-NUMBER"
-></A
->gts_coarsen_stop_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_coarsen_stop_number         (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> cost,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nedge,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> *min_number);</PRE
-></TD
-></TR
-></TABLE
-><P
->This function is to be used as the <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> argument of 
-<A
-HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN"
->gts_surface_coarsen</A
->() or <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-NEW"
->gts_psurface_new</A
->().</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the cost of the edge collapse considered.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nedge</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the current number of edges of the surface being simplified.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->min_number</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to the minimum number of edges desired for the 
-surface being simplified.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the edge collapse would create a surface with a smaller 
-number of edges than given by <TT
-CLASS="PARAMETER"
-><I
->min_number</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10412"
-></A
-><H3
-><A
-NAME="GTS-COARSEN-STOP-COST"
-></A
->gts_coarsen_stop_cost ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_coarsen_stop_cost           (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> cost,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> nedge,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *max_cost);</PRE
-></TD
-></TR
-></TABLE
-><P
->This function is to be used as the <TT
-CLASS="PARAMETER"
-><I
->stop_func</I
-></TT
-> argument of 
-<A
-HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN"
->gts_surface_coarsen</A
->() or <A
-HREF="gts-progressive-surfaces.html#GTS-PSURFACE-NEW"
->gts_psurface_new</A
->().</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->cost</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the cost of the edge collapse considered.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->nedge</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the current number of edges of the surface being simplified.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->max_cost</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to the maximum cost allowed for an edge collapse.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the cost of the edge collapse considered is larger than
-given by <TT
-CLASS="PARAMETER"
-><I
->max_cost</I
-></TT
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10449"
-></A
-><H3
-><A
-NAME="GTSVOLUMEOPTIMIZEDPARAMS"
-></A
->struct GtsVolumeOptimizedParams</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsVolumeOptimizedParams {
-  gdouble volume_weight;
-  gdouble boundary_weight;
-  gdouble shape_weight;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The parameters for the volume optimization algorithm of Lindstrom and Turk. THey define the relative weight of the volume, boundary and shape optimization part of the algorithm. Lindstrom and Turk advice is to set them to 0.5, 0.5 and 0. You may want to experiment depending on your problem. Setting <TT
-CLASS="PARAMETER"
-><I
->shape_weight</I
-></TT
-> to a very small value (1e-10) for example might help improve the quality of the resulting triangulation.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->volume_weight</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Weight of the volume optimization.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->boundary_weight</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Weight of the boundary optimization.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->shape_weight</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Weight of the shape optimization.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10475"
-></A
-><H3
-><A
-NAME="GTS-VOLUME-OPTIMIZED-VERTEX"
-></A
->gts_volume_optimized_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_volume_optimized_vertex     (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *edge,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS"
->GtsVolumeOptimizedParams</A
-> *params);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edge</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> to be used for the new vertex.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->params</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSVOLUMEOPTIMIZEDPARMS"
->GtsVolumeOptimizedParms</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> which can be used to replace <TT
-CLASS="PARAMETER"
-><I
->edge</I
-></TT
-> for an
-edge collapse operation. The position of the vertex is optimized in
-order to minimize the changes in area and volume for the surface
-using <TT
-CLASS="PARAMETER"
-><I
->edge</I
-></TT
->. The volume enclosed by the surface is locally
-preserved. For more details see "Fast and memory efficient
-polygonal simplification" (1998) and "Evaluation of memoryless
-simplification" (1999) by Lindstrom and Turk.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10512"
-></A
-><H3
-><A
-NAME="GTS-VOLUME-OPTIMIZED-COST"
-></A
->gts_volume_optimized_cost ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_volume_optimized_cost       (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS"
->GtsVolumeOptimizedParams</A
-> *params);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->params</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS"
->GtsVolumeOptimizedParams</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the cost for the collapse of <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> as minimized by the function
-<A
-HREF="gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-VERTEX"
->gts_volume_optimized_vertex</A
->().</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10542"
-></A
-><H3
-><A
-NAME="GTS-EDGE-COLLAPSE-IS-VALID"
-></A
->gts_edge_collapse_is_valid ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_edge_collapse_is_valid      (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
->An implementation of the topological constraints described in the 
-"Mesh Optimization" article of Hoppe et al (1993).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> can be collapsed without violation of the topological
-constraints, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN10567"
-></A
-><H3
-><A
-NAME="GTS-EDGE-COLLAPSE-CREATES-FOLD"
-></A
->gts_edge_collapse_creates_fold ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_edge_collapse_creates_fold  (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> max);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->max</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->  the maximum value of the square of the cosine of the angle between
-two triangles.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if collapsing edge <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> to vertex <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> would create
-faces making an angle the cosine squared of which would be larger than max,
-<TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-boolean-operations.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c9853.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-out-of-core-simplification.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Boolean operations</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Out-of-core simplification</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-surfaces.html b/doc/html/gts-surfaces.html
deleted file mode 100644
index 7b41acd..0000000
--- a/doc/html/gts-surfaces.html
+++ /dev/null
@@ -1,4981 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Surfaces</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Faces"
-HREF="gts-faces.html"><LINK
-REL="NEXT"
-TITLE="Geometrical data structures"
-HREF="c8393.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-faces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-SURFACES"
->Surfaces</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN7219"
-></A
-><H2
->Name</H2
->Surfaces -- surface object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN7222"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-surfaces.html#GTS-SURFACE-CLASS-CAPS"
->GTS_SURFACE_CLASS</A
->               (klass)
-#define     <A
-HREF="gts-surfaces.html#GTS-SURFACE-CAPS"
->GTS_SURFACE</A
->                     (obj)
-#define     <A
-HREF="gts-surfaces.html#GTS-IS-SURFACE-CAPS"
->GTS_IS_SURFACE</A
->                  (obj)
-struct      <A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->;
-struct      <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->;
-
-<A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->* <A
-HREF="gts-surfaces.html#GTS-SURFACE-CLASS"
->gts_surface_class</A
->          (void);
-<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->* <A
-HREF="gts-surfaces.html#GTS-SURFACE-NEW"
->gts_surface_new</A
->                 (<A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
-> *face_class,
-                                             <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *edge_class,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *vertex_class);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-ADD-FACE"
->gts_surface_add_face</A
->            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-REMOVE-FACE"
->gts_surface_remove_face</A
->         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);
-<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->* <A
-HREF="gts-surfaces.html#GTS-SURFACE-COPY"
->gts_surface_copy</A
->                (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s1,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s2);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-MERGE"
->gts_surface_merge</A
->               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *with);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-surfaces.html#GTS-SURFACE-READ"
->gts_surface_read</A
->                (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surfaces.html#GTS-SURFACE-IS-MANIFOLD"
->gts_surface_is_manifold</A
->         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surfaces.html#GTS-SURFACE-IS-ORIENTABLE"
->gts_surface_is_orientable</A
->       (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-surfaces.html#GTS-SURFACE-IS-CLOSED"
->gts_surface_is_closed</A
->           (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-surfaces.html#GTS-SURFACE-VERTEX-NUMBER"
->gts_surface_vertex_number</A
->       (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-surfaces.html#GTS-SURFACE-EDGE-NUMBER"
->gts_surface_edge_number</A
->         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-surfaces.html#GTS-SURFACE-FACE-NUMBER"
->gts_surface_face_number</A
->         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-surfaces.html#GTS-SURFACE-BOUNDARY"
->gts_surface_boundary</A
->            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-surfaces.html#GTS-SURFACE-AREA"
->gts_surface_area</A
->                (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-surfaces.html#GTS-SURFACE-VOLUME"
->gts_surface_volume</A
->              (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);
-struct      <A
-HREF="gts-surfaces.html#GTSSURFACESTATS"
->GtsSurfaceStats</A
->;
-struct      <A
-HREF="gts-surfaces.html#GTSSURFACEQUALITYSTATS"
->GtsSurfaceQualityStats</A
->;
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-STATS"
->gts_surface_stats</A
->               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACESTATS"
->GtsSurfaceStats</A
-> *stats);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-QUALITY-STATS"
->gts_surface_quality_stats</A
->       (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACEQUALITYSTATS"
->GtsSurfaceQualityStats</A
-> *stats);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-PRINT-STATS"
->gts_surface_print_stats</A
->         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-WRITE"
->gts_surface_write</A
->               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-WRITE-OOGL"
->gts_surface_write_oogl</A
->          (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-WRITE-OOGL-BOUNDARY"
->gts_surface_write_oogl_boundary</A
-> (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-<GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
->        (<A
-HREF="gts-surfaces.html#GTSFUNC"
->*GtsFunc</A
->)                      (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> item,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-FOREACH-VERTEX"
->gts_surface_foreach_vertex</A
->      (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-FOREACH-EDGE"
->gts_surface_foreach_edge</A
->        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-FOREACH-FACE"
->gts_surface_foreach_face</A
->        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-surfaces.html#GTS-SURFACE-FOREACH-FACE-REMOVE"
->gts_surface_foreach_face_remove</A
-> (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-struct      <A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
->;
-<A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
->* <A
-HREF="gts-surfaces.html#GTS-SURFACE-TRAVERSE-NEW"
->gts_surface_traverse_new</A
->
-                                            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);
-<A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    <A
-HREF="gts-surfaces.html#GTS-SURFACE-TRAVERSE-NEXT"
->gts_surface_traverse_next</A
->       (<A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
-> *t,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> *level);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-TRAVERSE-DESTROY"
->gts_surface_traverse_destroy</A
->    (<A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
-> *t);
-void        <A
-HREF="gts-surfaces.html#GTS-SURFACE-DISTANCE"
->gts_surface_distance</A
->            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s1,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *face_range,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *boundary_range);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-surfaces.html#GTS-SURFACE-STRIP"
->gts_surface_strip</A
->               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN7343"
-></A
-><H2
->Description</H2
-><P
->A <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> is defined as a collection of <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->. No topological constraint is imposed: the surface may or may not be manifold, closed or orientable.</P
-><P
->When destroying a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->, all the faces not used by another surface are also destroyed. This default behaviour can be changed punctually by setting the global variable gts_allow_floating_faces to <TT
-CLASS="LITERAL"
->TRUE</TT
->. You must not forget to set this variable back to <TT
-CLASS="LITERAL"
->FALSE</TT
-> as all the algorithms of GTS assume the default behaviour.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN7352"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7354"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-CLASS-CAPS"
-></A
->GTS_SURFACE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SURFACE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7371"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-CAPS"
-></A
->GTS_SURFACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SURFACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7388"
-></A
-><H3
-><A
-NAME="GTS-IS-SURFACE-CAPS"
-></A
->GTS_IS_SURFACE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_SURFACE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7406"
-></A
-><H3
-><A
-NAME="GTSSURFACECLASS"
-></A
->struct GtsSurfaceClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurfaceClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The surface class. No virtual function is defined.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7411"
-></A
-><H3
-><A
-NAME="GTSSURFACE"
-></A
->struct GtsSurface</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurface {
-  GtsObject object;
-
-  GHashTable * faces;
-  GtsFaceClass * face_class;
-  GtsEdgeClass * edge_class;
-  GtsVertexClass * vertex_class;
-  gboolean keep_faces;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The surface structure derived from <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.
-This structure should only be accessed through the following functions.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7417"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-CLASS"
-></A
->gts_surface_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->* gts_surface_class          (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7434"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-NEW"
-></A
->gts_surface_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->* gts_surface_new                 (<A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
-> *klass,
-                                             <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
-> *face_class,
-                                             <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *edge_class,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *vertex_class);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACECLASS"
->GtsSurfaceClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->face_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACECLASS"
->GtsFaceClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edge_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vertex_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new empty <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7475"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-ADD-FACE"
-></A
->gts_surface_add_face ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_add_face            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds face <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> to surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7500"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-REMOVE-FACE"
-></A
->gts_surface_remove_face ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_remove_face         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);</PRE
-></TD
-></TR
-></TABLE
-><P
->Removes face <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> from surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7525"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-COPY"
-></A
->gts_surface_copy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->* gts_surface_copy                (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s1,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s2);</PRE
-></TD
-></TR
-></TABLE
-><P
->Add a copy of all the faces, edges and vertices of <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> to <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7556"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-MERGE"
-></A
->gts_surface_merge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_merge               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *with);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds all the faces of <TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
-> which do not already belong to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->
-to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7582"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-READ"
-></A
->gts_surface_read ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_surface_read                (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Add to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> the data read from <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
->. The format of the file pointed to
-by <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> is as described in <A
-HREF="gts-surfaces.html#GTS-SURFACE-WRITE"
->gts_surface_write</A
->().</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> 0 if successful or the line number at which the parsing stopped in
-case of error.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7613"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-IS-MANIFOLD"
-></A
->gts_surface_is_manifold ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_surface_is_manifold         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if the surface is a manifold, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7637"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-IS-ORIENTABLE"
-></A
->gts_surface_is_orientable ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_surface_is_orientable       (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if all the faces of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> have compatible orientation
-as checked by <GTKDOCLINK
-HREF="GTS-FACES-ARE-COMPATIBLE"
->gts_faces_are_compatible</GTKDOCLINK
->(), <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise. Note that
-an orientable surface is also a manifold.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7663"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-IS-CLOSED"
-></A
->gts_surface_is_closed ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_surface_is_closed           (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> is a closed surface, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise. Note that a
-closed surface is also a manifold.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7688"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-VERTEX-NUMBER"
-></A
->gts_surface_vertex_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_surface_vertex_number       (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of vertices of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7711"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-EDGE-NUMBER"
-></A
->gts_surface_edge_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_surface_edge_number         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of edges of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7734"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-FACE-NUMBER"
-></A
->gts_surface_face_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_surface_face_number         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of faces of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-></TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7757"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-BOUNDARY"
-></A
->gts_surface_boundary ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_surface_boundary            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> boundary of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7781"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-AREA"
-></A
->gts_surface_area ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_surface_area                (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the area of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> obtained as the sum of the signed areas of its
-faces.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7804"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-VOLUME"
-></A
->gts_surface_volume ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_surface_volume              (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the signed volume of the domain bounded by the surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. It
-makes sense only if <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> is a closed and orientable manifold.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7828"
-></A
-><H3
-><A
-NAME="GTSSURFACESTATS"
-></A
->struct GtsSurfaceStats</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurfaceStats {
-  guint n_faces;
-  guint n_incompatible_faces;
-  guint n_duplicate_faces;
-  guint n_duplicate_edges;
-  guint n_boundary_edges;
-  guint n_non_manifold_edges;
-  GtsRange edges_per_vertex, faces_per_edge;
-  GtsSurface * parent;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->Connectivity statistics.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n_faces</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of faces.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n_incompatible_faces</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of incompatible faces (see <A
-HREF="gts-triangles.html#GTS-TRIANGLES-ARE-COMPATIBLE"
->gts_triangles_are_compatible</A
->() for details).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n_duplicate_faces</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of duplicate faces (see <A
-HREF="gts-triangles.html#GTS-TRIANGLE-IS-DUPLICATE"
->gts_triangle_is_duplicate</A
->() for details).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n_duplicate_edges</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of duplicate edges (see <A
-HREF="gts-segments.html#GTS-SEGMENT-IS-DUPLICATE"
->gts_segment_is_duplicate</A
->() for details).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n_boundary_edges</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of boundary edges.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->n_non_manifold_edges</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of non-manifold edges.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->edges_per_vertex</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Statistics on the number of edges per vertex.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->faces_per_edge</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Statistics on the number of faces per vertex.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->parent</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Surface from which these statistics have been obtained.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7886"
-></A
-><H3
-><A
-NAME="GTSSURFACEQUALITYSTATS"
-></A
->struct GtsSurfaceQualityStats</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurfaceQualityStats {
-  GtsRange face_quality;
-  GtsRange face_area;
-  GtsRange edge_length;
-  GtsRange edge_angle;
-  GtsSurface * parent;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->Quality and geometry statistics.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->face_quality</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Statistics for face quality (see <A
-HREF="gts-triangles.html#GTS-TRIANGLE-QUALITY"
->gts_triangle_quality</A
->() for details).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->face_area</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Statistics for the face area.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->edge_length</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Statistics for the edge length.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->edge_angle</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Statistics for the edge angles.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->parent</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Surface from which these statistics have been obtained.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7922"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-STATS"
-></A
->gts_surface_stats ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_stats               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACESTATS"
->GtsSurfaceStats</A
-> *stats);</PRE
-></TD
-></TR
-></TABLE
-><P
->Fills <TT
-CLASS="PARAMETER"
-><I
->stats</I
-></TT
-> with the statistics relevant to surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stats</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACESTATS"
->GtsSurfaceStats</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7947"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-QUALITY-STATS"
-></A
->gts_surface_quality_stats ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_quality_stats       (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACEQUALITYSTATS"
->GtsSurfaceQualityStats</A
-> *stats);</PRE
-></TD
-></TR
-></TABLE
-><P
->Fills <TT
-CLASS="PARAMETER"
-><I
->stats</I
-></TT
-> with quality statistics relevant to surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->stats</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACEQUALITYSTATS"
->GtsSurfaceQualityStats</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7972"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-PRINT-STATS"
-></A
->gts_surface_print_stats ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_print_stats         (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes in the file pointed to by <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> the statistics for surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN7996"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-WRITE"
-></A
->gts_surface_write ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_write               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes in the file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> an ASCII representation of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. The file
-format is as follows. </P
-><P
->All the lines beginning with <A
-HREF="gts-miscellaneous-macros-and-functions.html#GTS-COMMENTS-CAPS"
->GTS_COMMENTS</A
-> are ignored. The first line
-contains three unsigned integers separated by spaces. The first
-integer is the number of vertices, nv, the second is the number of
-edges, ne and the third is the number of faces, nf.</P
-><P
->Follows nv lines containing the x, y and z coordinates of the
-vertices.  Follows ne lines containing the two indices (starting
-from one) of the vertices of each edge. Follows nf lines containing
-the three ordered indices (also starting from one) of the edges of
-each face.  </P
-><P
->The format described above is the least common denominator to all
-GTS files.  Consistent with an object-oriented approach, the GTS
-file format is extensible. Each of the lines of the file can be
-extended with user-specific attributes accessible through the
-<GTKDOCLINK
-HREF="READ"
->read</GTKDOCLINK
->() and <GTKDOCLINK
-HREF="WRITE"
->write</GTKDOCLINK
->() virtual methods of each of the objects written
-(surface, vertices, edges or faces). When read with different
-object classes, these extra attributes are just ignored.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8026"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-WRITE-OOGL"
-></A
->gts_surface_write_oogl ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_write_oogl          (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes in the file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> an OOGL (Geomview) representation of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8050"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-WRITE-OOGL-BOUNDARY"
-></A
->gts_surface_write_oogl_boundary ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_write_oogl_boundary (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Writes in the file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> an OOGL (Geomview) representation of the
-boundary of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file pointer.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8074"
-></A
-><H3
-><A
-NAME="GTSFUNC"
-></A
->GtsFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
->        (*GtsFunc)                      (<GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> item,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->A user function called for each item of a collection.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->item</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer this function is called for.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->user data passed to the function.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->if 0 the calling sequence continues, otherwise it stops.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8099"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-FOREACH-VERTEX"
-></A
->gts_surface_foreach_vertex ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_foreach_vertex      (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> once for each vertex of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8130"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-FOREACH-EDGE"
-></A
->gts_surface_foreach_edge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_foreach_edge        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> once for each edge of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8161"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-FOREACH-FACE"
-></A
->gts_surface_foreach_face ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_foreach_face        (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> once for each face of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8192"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-FOREACH-FACE-REMOVE"
-></A
->gts_surface_foreach_face_remove ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_surface_foreach_face_remove (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> once for each face of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. If <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> returns <TT
-CLASS="LITERAL"
->TRUE</TT
-> the
-corresponding face is removed from <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> (and destroyed if it does not
-belong to any other surface and <GTKDOCLINK
-HREF="GTS-ALLOW-FLOATING-FACES"
->gts_allow_floating_faces</GTKDOCLINK
-> is set to
-<TT
-CLASS="LITERAL"
->FALSE</TT
->).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSFUNC"
->GtsFunc</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to be passed to <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of faces removed from <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8234"
-></A
-><H3
-><A
-NAME="GTSSURFACETRAVERSE"
-></A
->struct GtsSurfaceTraverse</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSurfaceTraverse;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8239"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-TRAVERSE-NEW"
-></A
->gts_surface_traverse_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
->* gts_surface_traverse_new
-                                            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> *f);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
->, initialized to start traversing
-from face <TT
-CLASS="PARAMETER"
-><I
->f</I
-></TT
-> of surface <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8271"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-TRAVERSE-NEXT"
-></A
->gts_surface_traverse_next ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->*    gts_surface_traverse_next       (<A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
-> *t,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> *level);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->level</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to a guint or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the next face of the traversal in breadth-first order or
-<TT
-CLASS="LITERAL"
->NULL</TT
-> if no faces are left. If <TT
-CLASS="PARAMETER"
-><I
->level</I
-></TT
-> if not <TT
-CLASS="LITERAL"
->NULL</TT
->, it is filled
-with the level of the returned face (0 for the initial face, 1 for
-its neighbors and so on).  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8302"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-TRAVERSE-DESTROY"
-></A
->gts_surface_traverse_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_traverse_destroy    (<A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Frees all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACETRAVERSE"
->GtsSurfaceTraverse</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8320"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-DISTANCE"
-></A
->gts_surface_distance ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_surface_distance            (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s1,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s2,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> delta,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *face_range,
-                                             <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
-> *boundary_range);</PRE
-></TD
-></TR
-></TABLE
-><P
->Using the <A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-DISTANCE"
->gts_bb_tree_surface_distance</A
->() and
-<A
-HREF="gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-BOUNDARY-DISTANCE"
->gts_bb_tree_surface_boundary_distance</A
->() functions fills <TT
-CLASS="PARAMETER"
-><I
->face_range</I
-></TT
->
-and <TT
-CLASS="PARAMETER"
-><I
->boundary_range</I
-></TT
-> with the min, max and average Euclidean
-(minimum) distances between the faces of <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> and the faces of <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
->
-and between the boundary edges of <TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->delta</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a spatial increment defined as the percentage of the diagonal
-of the bounding box of <TT
-CLASS="PARAMETER"
-><I
->s2</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->face_range</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->boundary_range</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-simple-statistics.html#GTSRANGE"
->GtsRange</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN8369"
-></A
-><H3
-><A
-NAME="GTS-SURFACE-STRIP"
-></A
->gts_surface_strip ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_surface_strip               (<A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s);</PRE
-></TD
-></TR
-></TABLE
-><P
->Decompose <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> into triangle strips for fast-rendering.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of triangle strips containing all the triangles of <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. 
-A triangle strip is itself a list of successive triangles having one edge
-in common.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-faces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="c8393.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Faces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Geometrical data structures</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-triangles.html b/doc/html/gts-triangles.html
deleted file mode 100644
index 9b507d2..0000000
--- a/doc/html/gts-triangles.html
+++ /dev/null
@@ -1,4744 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Triangles</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Edges"
-HREF="gts-edges.html"><LINK
-REL="NEXT"
-TITLE="Faces"
-HREF="gts-faces.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-edges.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-faces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-TRIANGLES"
->Triangles</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN5743"
-></A
-><H2
->Name</H2
->Triangles -- triangle object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN5746"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-CLASS-CAPS"
->GTS_TRIANGLE_CLASS</A
->              (klass)
-#define     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-CAPS"
->GTS_TRIANGLE</A
->                    (obj)
-#define     <A
-HREF="gts-triangles.html#GTS-IS-TRIANGLE-CAPS"
->GTS_IS_TRIANGLE</A
->                 (obj)
-struct      <A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->;
-struct      <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->;
-
-<A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->* <A
-HREF="gts-triangles.html#GTS-TRIANGLE-CLASS"
->gts_triangle_class</A
->        (void);
-<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* <A
-HREF="gts-triangles.html#GTS-TRIANGLE-NEW"
->gts_triangle_new</A
->               (<A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
-> *klass,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);
-void        <A
-HREF="gts-triangles.html#GTS-TRIANGLE-SET"
->gts_triangle_set</A
->                (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *triangle,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-AREA"
->gts_triangle_area</A
->               (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-PERIMETER"
->gts_triangle_perimeter</A
->          (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-QUALITY"
->gts_triangle_quality</A
->            (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-void        <A
-HREF="gts-triangles.html#GTS-TRIANGLE-NORMAL"
->gts_triangle_normal</A
->             (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *z);
-void        <A
-HREF="gts-triangles.html#GTS-TRIANGLE-REVERT"
->gts_triangle_revert</A
->             (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-ORIENTATION"
->gts_triangle_orientation</A
->        (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* <A
-HREF="gts-triangles.html#GTS-TRIANGLE-IS-DUPLICATE"
->gts_triangle_is_duplicate</A
->      (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-triangles.html#GTS-TRIANGLES-ANGLE"
->gts_triangles_angle</A
->             (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t1,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t2);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-triangles.html#GTS-TRIANGLES-ARE-COMPATIBLE"
->gts_triangles_are_compatible</A
->    (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t1,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* <A
-HREF="gts-triangles.html#GTS-TRIANGLE-ENCLOSING"
->gts_triangle_enclosing</A
->         (<A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *points,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> scale);
-<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    <A
-HREF="gts-triangles.html#GTS-TRIANGLES-COMMON-EDGE"
->gts_triangles_common_edge</A
->       (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t1,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t2);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-triangles.html#GTS-TRIANGLE-NEIGHBOR-NUMBER"
->gts_triangle_neighbor_number</A
->    (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-NEIGHBORS"
->gts_triangle_neighbors</A
->          (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-void        <A
-HREF="gts-triangles.html#GTS-TRIANGLE-VERTICES-EDGES"
->gts_triangle_vertices_edges</A
->     (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v2,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v3,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> **e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> **e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> **e3);
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-triangles.html#GTS-TRIANGLE-VERTEX-OPPOSITE"
->gts_triangle_vertex_opposite</A
->    (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    <A
-HREF="gts-triangles.html#GTS-TRIANGLE-EDGE-OPPOSITE"
->gts_triangle_edge_opposite</A
->      (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v);
-void        <A
-HREF="gts-triangles.html#GTS-TRIANGLE-VERTICES"
->gts_triangle_vertices</A
->           (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v2,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v3);
-#define     <A
-HREF="gts-triangles.html#GTS-TRIANGLE-VERTEX"
->gts_triangle_vertex</A
->             (t)
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-triangles.html#GTS-TRIANGLE-IS-OK"
->gts_triangle_is_ok</A
->              (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* <A
-HREF="gts-triangles.html#GTS-TRIANGLE-USE-EDGES"
->gts_triangle_use_edges</A
->         (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);
-<A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   <A
-HREF="gts-triangles.html#GTS-TRIANGLE-CIRCUMCIRCLE-CENTER"
->gts_triangle_circumcircle_center</A
->
-                                            (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> *point_class);
-<A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->*  <A
-HREF="gts-triangles.html#GTS-TRIANGLE-IS-STABBED"
->gts_triangle_is_stabbed</A
->         (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *orientation);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-triangles.html#GTS-TRIANGLES-ARE-FOLDED"
->gts_triangles_are_folded</A
->        (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *triangles,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *A,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *B,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> max);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-triangles.html#GTS-TRIANGLES-FROM-EDGES"
->gts_triangles_from_edges</A
->        (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *edges);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN5862"
-></A
-><H2
->Description</H2
-><P
->A <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> is defined by three <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->. They are oriented, the normal to the triangle points toward an observer seing the three edges in counter-clockwise order.</P
-><P
->When destroying a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->, all the edges not used by another triangle are also destroyed. This default behaviour can be changed punctually by setting the global variable gts_allow_floating_edges to <TT
-CLASS="LITERAL"
->TRUE</TT
->. You must not forget to set this variable back to <TT
-CLASS="LITERAL"
->FALSE</TT
-> as all the algorithms of GTS assume the default behaviour.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN5871"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5873"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-CLASS-CAPS"
-></A
->GTS_TRIANGLE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_TRIANGLE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5890"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-CAPS"
-></A
->GTS_TRIANGLE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_TRIANGLE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5907"
-></A
-><H3
-><A
-NAME="GTS-IS-TRIANGLE-CAPS"
-></A
->GTS_IS_TRIANGLE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_TRIANGLE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a descendant of <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5925"
-></A
-><H3
-><A
-NAME="GTSTRIANGLECLASS"
-></A
->struct GtsTriangleClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsTriangleClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The triangle class, just derived from <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5931"
-></A
-><H3
-><A
-NAME="GTSTRIANGLE"
-></A
->struct GtsTriangle</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsTriangle {
-  GtsObject object;
-
-  GtsEdge * e1;
-  GtsEdge * e2;
-  GtsEdge * e3;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The triangle object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->e1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->First edge.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->e2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Second edge.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->e3</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Third edge.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5961"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-CLASS"
-></A
->gts_triangle_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->* gts_triangle_class        (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN5978"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-NEW"
-></A
->gts_triangle_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* gts_triangle_new               (<A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
-> *klass,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> touching <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> touching both <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> having <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> as edges.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6025"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-SET"
-></A
->gts_triangle_set ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_triangle_set                (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *triangle,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);</PRE
-></TD
-></TR
-></TABLE
-><P
->Sets the edge of <TT
-CLASS="PARAMETER"
-><I
->triangle</I
-></TT
-> to <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> while checking that they
-define a valid triangle.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->triangle</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> touching <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> touching both <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6067"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-AREA"
-></A
->gts_triangle_area ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_triangle_area               (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the area of the triangle <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6090"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-PERIMETER"
-></A
->gts_triangle_perimeter ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_triangle_perimeter          (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the perimeter of the triangle <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6113"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-QUALITY"
-></A
->gts_triangle_quality ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_triangle_quality            (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->The quality of a triangle is defined as the ratio of its surface to 
-its perimeter relative to this same ratio for an equilateral
-triangle with the same area. The quality is then one for an
-equilateral triangle and tends to zero for a very stretched triangle.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the quality of the triangle <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6136"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-NORMAL"
-></A
->gts_triangle_normal ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_triangle_normal             (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *z);</PRE
-></TD
-></TR
-></TABLE
-><P
->Computes the coordinates of the oriented normal of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> as the
-cross-product of two edges, using the left-hand rule. The normal is
-not normalized.  If this triangle is part of a closed and oriented
-surface, the normal points to the outside of the surface.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the x coordinate of the normal.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the y coordinate of the normal.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the z coordinate of the normal.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6169"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-REVERT"
-></A
->gts_triangle_revert ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_triangle_revert             (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Changes the orientation of triangle <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->, turning it inside out.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6187"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-ORIENTATION"
-></A
->gts_triangle_orientation ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_triangle_orientation        (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Checks for the orientation of the plane (x,y) projection of a
-triangle. See <A
-HREF="gts-points.html#GTS-POINT-ORIENTATION"
->gts_point_orientation</A
->() for details. This function
-is geometrically robust.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a number depending on the orientation of the vertices of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6211"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-IS-DUPLICATE"
-></A
->gts_triangle_is_duplicate ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* gts_triangle_is_duplicate      (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> different from <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> but sharing all its edges 
-with <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if there is none.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6237"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLES-ANGLE"
-></A
->gts_triangles_angle ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_triangles_angle             (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t1,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the value (in radians) of the angle between <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6267"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLES-ARE-COMPATIBLE"
-></A
->gts_triangles_are_compatible ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_triangles_are_compatible    (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t1,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
->Checks if <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> have compatible orientations i.e. if <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and
-<TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> can be part of the same surface without conflict in the surface
-normal orientation.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> used by both <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> are compatible, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6311"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-ENCLOSING"
-></A
->gts_triangle_enclosing ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* gts_triangle_enclosing         (<A
-HREF="gts-triangles.html#GTSTRIANGLECLASS"
->GtsTriangleClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *points,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> scale);</PRE
-></TD
-></TR
-></TABLE
-><P
->Builds a new triangle (including new vertices and edges) enclosing
-the plane projection of all the points in <TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
->. This triangle is
-equilateral and encloses a rectangle defined by the maximum and
-minimum x and y coordinates of the points. <TT
-CLASS="PARAMETER"
-><I
->scale</I
-></TT
-> is an homothetic
-scaling factor. If equal to one, the triangle encloses exactly the
-enclosing rectangle.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the class of the new triangle.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->points</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->scale</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a scaling factor (must be larger than one).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6346"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLES-COMMON-EDGE"
-></A
->gts_triangles_common_edge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    gts_triangles_common_edge       (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t1,
-                                             <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> common to both <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->t1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->t2</I
-></TT
->
-do not share any edge.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6380"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-NEIGHBOR-NUMBER"
-></A
->gts_triangle_neighbor_number ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_triangle_neighbor_number    (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of triangles neighbors of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6403"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-NEIGHBORS"
-></A
->gts_triangle_neighbors ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_triangle_neighbors          (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> neighbors of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6427"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-VERTICES-EDGES"
-></A
->gts_triangle_vertices_edges ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_triangle_vertices_edges     (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v2,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v3,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> **e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> **e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> **e3);</PRE
-></TD
-></TR
-></TABLE
-><P
->Given <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
->, returns <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
->. <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->
-has <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> as vertices, <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> has <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
-> as vertices
-and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> has <TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> as vertices. <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
-> respects
-the orientation of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->. If <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> is not NULL, <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> are
-identical.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> belonging to the edges of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6518"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-VERTEX-OPPOSITE"
-></A
->gts_triangle_vertex_opposite ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_triangle_vertex_opposite    (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
->This function fails if <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> is not an edge of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, vertex of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> which does not belong to <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6552"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-EDGE-OPPOSITE"
-></A
->gts_triangle_edge_opposite ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->*    gts_triangle_edge_opposite      (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the edge of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> opposite <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is not a vertice of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6586"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-VERTICES"
-></A
->gts_triangle_vertices ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_triangle_vertices           (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v2,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> **v3);</PRE
-></TD
-></TR
-></TABLE
-><P
->Fills <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
-> with the oriented set of vertices, summits of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer on a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6625"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-VERTEX"
-></A
->gts_triangle_vertex()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_triangle_vertex(t)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to the <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> not used by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->->e1.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6643"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-IS-OK"
-></A
->gts_triangle_is_ok ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_triangle_is_ok              (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> is a non-degenerate, non-duplicate triangle,
-<TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6668"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-USE-EDGES"
-></A
->gts_triangle_use_edges ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->* gts_triangle_use_edges         (<A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e1,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e2,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e3);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> having <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> as edges or <TT
-CLASS="LITERAL"
->NULL</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->e1</I
-></TT
->,
-<TT
-CLASS="PARAMETER"
-><I
->e2</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->e3</I
-></TT
-> are not part of any triangle.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6710"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-CIRCUMCIRCLE-CENTER"
-></A
->gts_triangle_circumcircle_center ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->*   gts_triangle_circumcircle_center
-                                            (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
-> *point_class);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->point_class</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINTCLASS"
->GtsPointClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->, center of the circumscribing circle of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or
-<TT
-CLASS="LITERAL"
->NULL</TT
-> if the circumscribing circle is not defined.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6741"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLE-IS-STABBED"
-></A
->gts_triangle_is_stabbed ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
->*  gts_triangle_is_stabbed         (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t,
-                                             <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> *p,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> *orientation);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->orientation</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> one of the vertices of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->, one of the edges of <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> or <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> if
-any of these are stabbed by the ray starting at <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> (included) and
-ending at (<TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->->x, <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
->->y, +infty), <TT
-CLASS="LITERAL"
->NULL</TT
-> otherwise. If the ray is
-contained in the plane of the triangle <TT
-CLASS="LITERAL"
->NULL</TT
-> is also returned. If
-<TT
-CLASS="PARAMETER"
-><I
->orientation</I
-></TT
-> is not <TT
-CLASS="LITERAL"
->NULL</TT
->, it is set to the value of the
-orientation of <TT
-CLASS="PARAMETER"
-><I
->p</I
-></TT
-> relative to <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> (as given by
-<A
-HREF="gts-points.html#GTS-POINT-ORIENTATION-3D"
->gts_point_orientation_3d</A
->()).  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6788"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLES-ARE-FOLDED"
-></A
->gts_triangles_are_folded ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_triangles_are_folded        (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *triangles,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *A,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *B,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> max);</PRE
-></TD
-></TR
-></TABLE
-><P
->Given a list of triangles sharing <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->B</I
-></TT
-> as vertices, checks if any
-two triangles in the list make an angle larger than a given value defined
-by <TT
-CLASS="PARAMETER"
-><I
->max</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->triangles</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->B</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->max</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum value of the square of the cosine of the angle between
-two triangles.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if any pair of triangles in <TT
-CLASS="PARAMETER"
-><I
->triangles</I
-></TT
-> makes an angle larger 
-than the maximum value, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN6833"
-></A
-><H3
-><A
-NAME="GTS-TRIANGLES-FROM-EDGES"
-></A
->gts_triangles_from_edges ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_triangles_from_edges        (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *edges);</PRE
-></TD
-></TR
-></TABLE
-><P
->Builds a list of unique triangles which have one of their edges in <TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->edges</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the list of triangles.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-edges.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-faces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Edges</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Faces</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-vectors-and-matrices.html b/doc/html/gts-vectors-and-matrices.html
deleted file mode 100644
index d83658c..0000000
--- a/doc/html/gts-vectors-and-matrices.html
+++ /dev/null
@@ -1,2699 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Vectors and matrices</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Basic Macros, functions and data structures"
-HREF="c4.html"><LINK
-REL="PREVIOUS"
-TITLE="First In First Out heaps"
-HREF="gts-first-in-first-out-heaps.html"><LINK
-REL="NEXT"
-TITLE="Simple statistics"
-HREF="gts-simple-statistics.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-first-in-first-out-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-simple-statistics.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-VECTORS-AND-MATRICES"
->Vectors and matrices</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN1051"
-></A
-><H2
->Name</H2
->Vectors and matrices -- simple operations on vectors and matrices.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN1054"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-typedef     <A
-HREF="gts-vectors-and-matrices.html#GTSVECTOR[3]"
->GtsVector[3]</A
->;
-
-#define     <A
-HREF="gts-vectors-and-matrices.html#GTS-VECTOR-INIT"
->gts_vector_init</A
->                 (v, p1, p2)
-#define     <A
-HREF="gts-vectors-and-matrices.html#GTS-VECTOR-SCALAR"
->gts_vector_scalar</A
->               (v1, v2)
-#define     <A
-HREF="gts-vectors-and-matrices.html#GTS-VECTOR-CROSS"
->gts_vector_cross</A
->                (C,A,B)
-void        <A
-HREF="gts-vectors-and-matrices.html#GTS-VECTOR-PRINT"
->gts_vector_print</A
->                (<GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> v,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-
-typedef     <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->;
-
-<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-NEW"
->gts_matrix_new</A
->                  (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a00,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a01,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a02,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a10,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a11,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a12,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a20,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a21,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a22);
-void        <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-ASSIGN"
->gts_matrix_assign</A
->               (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a00,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a01,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a02,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a10,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a11,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a12,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a20,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a21,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a22);
-<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-TRANSPOSE"
->gts_matrix_transpose</A
->            (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);
-<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-DETERMINANT"
->gts_matrix_determinant</A
->          (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);
-<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-INVERSE"
->gts_matrix_inverse</A
->              (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);
-<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-PROJECTION"
->gts_matrix_projection</A
->           (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);
-<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-PRODUCT"
->gts_matrix_product</A
->              (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m1,
-                                             <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m2);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-COMPATIBLE-ROW"
->gts_matrix_compatible_row</A
->       (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *A,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> b,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> A1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> b1);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-QUADRATIC-OPTIMIZATION"
->gts_matrix_quadratic_optimization</A
->
-                                            (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *A,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> b,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n,
-                                             <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *H,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> c);
-void        <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-PRINT"
->gts_matrix_print</A
->                (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);
-void        <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-DESTROY"
->gts_matrix_destroy</A
->              (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1122"
-></A
-><H2
->Description</H2
-><P
->The functions described in this section allow to perform simple transformations on point coordinates. In particular projection onto a plane passing through the vertices of a given triangle or quadratic optimization problems.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN1125"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1127"
-></A
-><H3
-><A
-NAME="GTSVECTOR[3]"
-></A
->GtsVector[3]</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->typedef gdouble                  GtsVector[3];</PRE
-></TD
-></TR
-></TABLE
-><P
->A <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> is just an array of three coordinates.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1133"
-></A
-><H3
-><A
-NAME="GTS-VECTOR-INIT"
-></A
->gts_vector_init()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_vector_init(v, p1, p2)</PRE
-></TD
-></TR
-></TABLE
-><P
->Given two points <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
->, fills <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> with the coordinates of vector <TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
->-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->p2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->another <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1163"
-></A
-><H3
-><A
-NAME="GTS-VECTOR-SCALAR"
-></A
->gts_vector_scalar()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_vector_scalar(v1, v2)</PRE
-></TD
-></TR
-></TABLE
-><P
->Given two vectors <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> evaluates to the scalar product <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
->.<TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->another <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1187"
-></A
-><H3
-><A
-NAME="GTS-VECTOR-CROSS"
-></A
->gts_vector_cross()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     gts_vector_cross(C,A,B)</PRE
-></TD
-></TR
-></TABLE
-><P
->Given two vectors <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->B</I
-></TT
-> fills <TT
-CLASS="PARAMETER"
-><I
->C</I
-></TT
-> with the coordinates of the cross-product <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
->^<TT
-CLASS="PARAMETER"
-><I
->B</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->C</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->another <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->B</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->and another.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1216"
-></A
-><H3
-><A
-NAME="GTS-VECTOR-PRINT"
-></A
->gts_vector_print ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_vector_print                (<GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> v,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Print <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> to file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file descriptor.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1240"
-></A
-><H3
-><A
-NAME="GTSMATRIX"
-></A
->GtsMatrix</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->typedef GtsVector                GtsMatrix;</PRE
-></TD
-></TR
-></TABLE
-><P
->A <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> is a 3x3 matrix.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1246"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-NEW"
-></A
->gts_matrix_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  gts_matrix_new                  (<GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a00,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a01,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a02,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a10,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a11,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a12,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a20,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a21,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a22);</PRE
-></TD
-></TR
-></TABLE
-><P
->Allocates memory and initializes a new <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a00</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [0][0].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a01</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [0][1].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a02</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [0][2].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a10</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [1][0].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a11</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [1][1].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a12</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [1][2].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a20</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [2][0].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a21</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [2][1].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a22</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [2][2].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to the newly created <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1309"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-ASSIGN"
-></A
->gts_matrix_assign ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_matrix_assign               (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a00,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a01,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a02,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a10,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a11,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a12,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a20,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a21,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> a22);</PRE
-></TD
-></TR
-></TABLE
-><P
->Set values of matrix elements.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a00</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [0][0].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a01</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [0][1].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a02</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [0][2].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a10</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [1][0].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a11</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [1][1].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a12</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [1][2].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a20</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [2][0].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a21</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [2][1].</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->a22</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> element [2][2].</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1371"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-TRANSPOSE"
-></A
->gts_matrix_transpose ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  gts_matrix_transpose            (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to a newly created <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> transposed of <TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1395"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-DETERMINANT"
-></A
->gts_matrix_determinant ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
->     gts_matrix_determinant          (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the value of the det(<TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
->).</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1418"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-INVERSE"
-></A
->gts_matrix_inverse ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  gts_matrix_inverse              (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to a newly created <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> inverse of <TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->
-if <TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> is not invertible.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1444"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-PROJECTION"
-></A
->gts_matrix_projection ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  gts_matrix_projection           (<A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> *t);</PRE
-></TD
-></TR
-></TABLE
-><P
->Creates a new <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> representing the projection onto a plane of normal
-given by <TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->t</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a pointer to the newly created <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1469"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-PRODUCT"
-></A
->gts_matrix_product ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->*  gts_matrix_product              (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m1,
-                                             <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->, product of <TT
-CLASS="PARAMETER"
-><I
->m1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->m2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1500"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-COMPATIBLE-ROW"
-></A
->gts_matrix_compatible_row ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_matrix_compatible_row       (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *A,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> b,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> A1,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> b1);</PRE
-></TD
-></TR
-></TABLE
-><P
->Given a system of <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> constraints <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
->.x=<TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
-> adds to it the compatible
-constraints defined by <TT
-CLASS="PARAMETER"
-><I
->A1</I
-></TT
->.x=<TT
-CLASS="PARAMETER"
-><I
->b1</I
-></TT
->. The compatibility is determined
-by insuring that the resulting system is well-conditioned (see
-Lindstrom and Turk (1998, 1999)).</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of previous constraints of <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
->.x=<TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->A1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->b1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of constraints of the resulting system.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1552"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-QUADRATIC-OPTIMIZATION"
-></A
->gts_matrix_quadratic_optimization ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_matrix_quadratic_optimization
-                                            (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *A,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> b,
-                                             <GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> n,
-                                             <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *H,
-                                             <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
-> c);</PRE
-></TD
-></TR
-></TABLE
-><P
->Solve a quadratic optimization problem: Given a quadratic objective function
-f which can be written as: f(x) = x^t.<TT
-CLASS="PARAMETER"
-><I
->H</I
-></TT
->.x + <TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
->^t.x + k, where <TT
-CLASS="PARAMETER"
-><I
->H</I
-></TT
-> is the 
-symmetric positive definite Hessian of f and k is a constant, find the
-minimum of f subject to the set of <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> prior linear constraints, defined by
-the first <TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> rows of <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
-> (<TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
->.x = <TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
->). The new constraints given by
-the minimization are added to <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
-> only if they are linearly
-independent as determined by <A
-HREF="gts-vectors-and-matrices.html#GTS-MATRIX-COMPATIBLE-ROW"
->gts_matrix_compatible_row</A
->().</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of constraints (must be smaller than 3).</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->H</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a symmetric positive definite Hessian.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->c</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <GTKDOCLINK
-HREF="GTSVECTOR"
->GtsVector</GTKDOCLINK
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new number of constraints defined by <TT
-CLASS="PARAMETER"
-><I
->A</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->b</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1610"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-PRINT"
-></A
->gts_matrix_print ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_matrix_print                (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m,
-                                             <GTKDOCLINK
-HREF="FILE-CAPS"
->FILE</GTKDOCLINK
-> *fptr);</PRE
-></TD
-></TR
-></TABLE
-><P
->Print <TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> to file <TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->fptr</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a file descriptor.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN1634"
-></A
-><H3
-><A
-NAME="GTS-MATRIX-DESTROY"
-></A
->gts_matrix_destroy ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_matrix_destroy              (<A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
-> *m);</PRE
-></TD
-></TR
-></TABLE
-><P
->Free all the memory allocated for <TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->m</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vectors-and-matrices.html#GTSMATRIX"
->GtsMatrix</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-first-in-first-out-heaps.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c4.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-simple-statistics.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->First In First Out heaps</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Simple statistics</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-vertex-split.html b/doc/html/gts-vertex-split.html
deleted file mode 100644
index 94f4c38..0000000
--- a/doc/html/gts-vertex-split.html
+++ /dev/null
@@ -1,1972 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Vertex split</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Progressive and Hierarchical surfaces"
-HREF="c12040.html"><LINK
-REL="PREVIOUS"
-TITLE="Progressive and Hierarchical surfaces"
-HREF="c12040.html"><LINK
-REL="NEXT"
-TITLE="Progressive surfaces"
-HREF="gts-progressive-surfaces.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-progressive-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-VERTEX-SPLIT"
->Vertex split</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN12047"
-></A
-><H2
->Name</H2
->Vertex split -- object encoding a reversible edge-collapse operation.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN12050"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-vertex-split.html#GTS-SPLIT-CLASS-CAPS"
->GTS_SPLIT_CLASS</A
->                 (klass)
-#define     <A
-HREF="gts-vertex-split.html#GTS-SPLIT-CAPS"
->GTS_SPLIT</A
->                       (obj)
-#define     <A
-HREF="gts-vertex-split.html#GTS-IS-SPLIT-CAPS"
->GTS_IS_SPLIT</A
->                    (obj)
-#define     <A
-HREF="gts-vertex-split.html#GTS-SPLIT-V1-CAPS"
->GTS_SPLIT_V1</A
->                    (vs)
-#define     <A
-HREF="gts-vertex-split.html#GTS-SPLIT-V2-CAPS"
->GTS_SPLIT_V2</A
->                    (vs)
-struct      <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->;
-struct      <A
-HREF="gts-vertex-split.html#GTSSPLITCFACE"
->GtsSplitCFace</A
->;
-struct      <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->;
-
-<A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->* <A
-HREF="gts-vertex-split.html#GTS-SPLIT-CLASS"
->gts_split_class</A
->              (void);
-<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   <A
-HREF="gts-vertex-split.html#GTS-SPLIT-NEW"
->gts_split_new</A
->                   (<A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *klass,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *o1,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *o2);
-void        <A
-HREF="gts-vertex-split.html#GTS-SPLIT-COLLAPSE"
->gts_split_collapse</A
->              (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs,
-                                             <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);
-void        <A
-HREF="gts-vertex-split.html#GTS-SPLIT-EXPAND"
->gts_split_expand</A
->                (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *klass);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-vertex-split.html#GTS-SPLIT-HEIGHT"
->gts_split_height</A
->                (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *root);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    (<A
-HREF="gts-vertex-split.html#GTSSPLITTRAVERSEFUNC"
->*GtsSplitTraverseFunc</A
->)         (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);
-void        <A
-HREF="gts-vertex-split.html#GTS-SPLIT-TRAVERSE"
->gts_split_traverse</A
->              (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *root,
-                                             <GTKDOCLINK
-HREF="GTRAVERSETYPE"
->GTraverseType</GTKDOCLINK
-> order,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> depth,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITTRAVERSEFUNC"
->GtsSplitTraverseFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN12090"
-></A
-><H2
->Description</H2
-><P
->The vertex split object is the building block of the progressive mesh representation proposed by Hoppe ("Progressive meshes", SIGGRAPH, 1996). It encodes an edge collapse operation and its inverse the "vertex split". The implementation of vertex split in GTS is somewhat more general than the original version of Hoppe. Non-manifold edges can be collapsed and non-manifold vertices can be split.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN12093"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12095"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-CLASS-CAPS"
-></A
->GTS_SPLIT_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SPLIT_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12112"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-CAPS"
-></A
->GTS_SPLIT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SPLIT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12129"
-></A
-><H3
-><A
-NAME="GTS-IS-SPLIT-CAPS"
-></A
->GTS_IS_SPLIT()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_SPLIT(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12146"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-V1-CAPS"
-></A
->GTS_SPLIT_V1()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SPLIT_V1(vs)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to the first vertex of the edge collapsed by <TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12162"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-V2-CAPS"
-></A
->GTS_SPLIT_V2()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_SPLIT_V2(vs)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to the second vertex of the edge collapsed by <TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12178"
-></A
-><H3
-><A
-NAME="GTSSPLITCLASS"
-></A
->struct GtsSplitClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSplitClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The vertex split class.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12183"
-></A
-><H3
-><A
-NAME="GTSSPLITCFACE"
-></A
->struct GtsSplitCFace</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSplitCFace;</PRE
-></TD
-></TR
-></TABLE
-><P
->An opaque structure describing the faces collapsed by a vertex split.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12188"
-></A
-><H3
-><A
-NAME="GTSSPLIT"
-></A
->struct GtsSplit</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsSplit {
-  GtsObject object;
-
-  GtsVertex * v;
-  GtsObject * v1;
-  GtsObject * v2;
-  GtsSplitCFace * cfaces;
-  guint ncf;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The vertex split object. If <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> is a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> the corresponding vertex can be found in GTS_SPLIT(v1)->v. This conversion is performed directly by the two macros <A
-HREF="gts-vertex-split.html#GTS-SPLIT-V1-CAPS"
->GTS_SPLIT_V1</A
-> and <A
-HREF="gts-vertex-split.html#GTS-SPLIT-V2-CAPS"
->GTS_SPLIT_V2</A
->. Together with the current <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->, <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> define one level of a vertex split tree. If <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> or <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> are both <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, the current vertex split is a leaf of the tree.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->object</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->v</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Vertex to be split.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->v1</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Either a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> or <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, first vertex of the edge to be expanded.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->v2</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Either a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> or <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, second vertex of the edge to be expanded.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-vertex-split.html#GTSSPLITCFACE"
->GtsSplitCFace</A
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->cfaces</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->An array of <A
-HREF="gts-vertex-split.html#GTSSPLITCFACE"
->GtsSplitCFace</A
-> describing the faces collapsed by the vertex split.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
-> <TT
-CLASS="STRUCTFIELD"
-><I
->ncf</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Number of faces collapsed in <TT
-CLASS="PARAMETER"
-><I
->cfaces</I
-></TT
->.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12244"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-CLASS"
-></A
->gts_split_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->* gts_split_class              (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12261"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-NEW"
-></A
->gts_split_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->*   gts_split_new                   (<A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
-> *klass,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *o1,
-                                             <A
-HREF="gts-object-class.html#GTSOBJECT"
->GtsObject</A
-> *o2);</PRE
-></TD
-></TR
-></TABLE
-><P
->Creates a new <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> which would collapse <TT
-CLASS="PARAMETER"
-><I
->o1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->o2</I
-></TT
-> into <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->. The 
-collapse itself is not performed.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLITCLASS"
->GtsSplitClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->o1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> either a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> or a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->o2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> either a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> or a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12308"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-COLLAPSE"
-></A
->gts_split_collapse ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_split_collapse              (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs,
-                                             <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> *heap);</PRE
-></TD
-></TR
-></TABLE
-><P
->Collapses the vertex split <TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
->. Any new edge created during the process will
-be of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->. If heap is not <TT
-CLASS="LITERAL"
->NULL</TT
->, the new edges will be inserted
-into it and the destroyed edges will be removed from it.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->heap</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-extended-binary-heaps.html#GTSEHEAP"
->GtsEHeap</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12341"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-EXPAND"
-></A
->gts_split_expand ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_split_expand                (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *s,
-                                             <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
-> *klass);</PRE
-></TD
-></TR
-></TABLE
-><P
->Expands the vertex split <TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> adding the newly created faces to <TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
->. Any 
-new edge will be of class <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->s</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGECLASS"
->GtsEdgeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12373"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-HEIGHT"
-></A
->gts_split_height ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_split_height                (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *root);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->root</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum height of the vertex split tree having <TT
-CLASS="PARAMETER"
-><I
->root</I
-></TT
-> as root.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12396"
-></A
-><H3
-><A
-NAME="GTSSPLITTRAVERSEFUNC"
-></A
->GtsSplitTraverseFunc ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    (*GtsSplitTraverseFunc)         (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *vs,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->A user-defined function to be called when traversing a vertex split tree.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vs</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> for which this function is called.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->user data passed to the function.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><TT
-CLASS="LITERAL"
->TRUE</TT
-> to stop the traversal, <TT
-CLASS="LITERAL"
->FALSE</TT
-> to continue.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN12424"
-></A
-><H3
-><A
-NAME="GTS-SPLIT-TRAVERSE"
-></A
->gts_split_traverse ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_split_traverse              (<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> *root,
-                                             <GTKDOCLINK
-HREF="GTRAVERSETYPE"
->GTraverseType</GTKDOCLINK
-> order,
-                                             <GTKDOCLINK
-HREF="GINT"
->gint</GTKDOCLINK
-> depth,
-                                             <A
-HREF="gts-vertex-split.html#GTSSPLITTRAVERSEFUNC"
->GtsSplitTraverseFunc</A
-> func,
-                                             <GTKDOCLINK
-HREF="GPOINTER"
->gpointer</GTKDOCLINK
-> data);</PRE
-></TD
-></TR
-></TABLE
-><P
->Traverses the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> tree having <TT
-CLASS="PARAMETER"
-><I
->root</I
-></TT
-> as root. Calls <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> for each
-<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> of the tree in the order specified by <TT
-CLASS="PARAMETER"
-><I
->order</I
-></TT
->. If order is set
-to G_PRE_ORDER <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> is called for the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> then its children, if order
-is set to G_POST_ORDER <TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> is called for the children and then for the
-<A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->root</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-vertex-split.html#GTSSPLIT"
->GtsSplit</A
-> to start the traversal from.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->order</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the order in which nodes are visited - G_PRE_ORDER or G_POST_ORDER.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->depth</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum depth of the traversal. Nodes below this depth
-will not be visited. If depth is -1 all nodes in the tree are
-visited. If depth is 1, only the root is visited. If depth is 2,
-the root and its children are visited. And so on.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->func</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the function to call for each visited <A
-HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT"
->GtsHSplit</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->data</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> user data to pass to the function.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c12040.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-progressive-surfaces.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Progressive and Hierarchical surfaces</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Progressive surfaces</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-vertices.html b/doc/html/gts-vertices.html
deleted file mode 100644
index b03dad3..0000000
--- a/doc/html/gts-vertices.html
+++ /dev/null
@@ -1,2659 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Vertices</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Geometrical Object Hierarchy"
-HREF="c1908.html"><LINK
-REL="PREVIOUS"
-TITLE="Points"
-HREF="gts-points.html"><LINK
-REL="NEXT"
-TITLE="Segments"
-HREF="gts-segments.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-points.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-segments.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-VERTICES"
->Vertices</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN4135"
-></A
-><H2
->Name</H2
->Vertices -- vertex object and related functions.</DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN4138"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-vertices.html#GTS-VERTEX-CLASS-CAPS"
->GTS_VERTEX_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-vertices.html#GTS-VERTEX-CAPS"
->GTS_VERTEX</A
->                      (obj)
-#define     <A
-HREF="gts-vertices.html#GTS-IS-VERTEX-CAPS"
->GTS_IS_VERTEX</A
->                   (obj)
-struct      <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->;
-struct      <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->;
-
-<A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->* <A
-HREF="gts-vertices.html#GTS-VERTEX-CLASS"
->gts_vertex_class</A
->            (void);
-<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  <A
-HREF="gts-vertices.html#GTS-VERTEX-NEW"
->gts_vertex_new</A
->                  (<A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-vertices.html#GTS-VERTEX-IS-UNATTACHED"
->gts_vertex_is_unattached</A
->        (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-vertices.html#GTS-VERTEX-IS-BOUNDARY"
->gts_vertex_is_boundary</A
->          (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       <A
-HREF="gts-vertices.html#GTS-VERTEX-IS-CONTACT"
->gts_vertex_is_contact</A
->           (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> sever);
-<A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->* <A
-HREF="gts-vertices.html#GTS-VERTICES-ARE-CONNECTED"
->gts_vertices_are_connected</A
->      (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v2);
-void        <A
-HREF="gts-vertices.html#GTS-VERTEX-REPLACE"
->gts_vertex_replace</A
->              (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *with);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-vertices.html#GTS-VERTEX-NEIGHBORS"
->gts_vertex_neighbors</A
->            (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *list,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-vertices.html#GTS-VERTEX-TRIANGLES"
->gts_vertex_triangles</A
->            (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *list);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-vertices.html#GTS-VERTEX-FACES"
->gts_vertex_faces</A
->                (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *list);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-vertices.html#GTS-VERTEX-FAN-ORIENTED"
->gts_vertex_fan_oriented</A
->         (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);
-<GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    <A
-HREF="gts-vertices.html#GTS-VERTEX-ENCROACHES-EDGE"
->gts_vertex_encroaches_edge</A
->      (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);
-<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     <A
-HREF="gts-vertices.html#GTS-VERTICES-FROM-SEGMENTS"
->gts_vertices_from_segments</A
->      (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *segments);
-<GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
->*      <A
-HREF="gts-vertices.html#GTS-VERTICES-MERGE"
->gts_vertices_merge</A
->              (<GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
-> *vertices,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> epsilon);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN4201"
-></A
-><H2
->Description</H2
-><P
->Vertices are points used as endpoints of <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->. They are derived from <A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
->.</P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN4206"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4208"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-CLASS-CAPS"
-></A
->GTS_VERTEX_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_VERTEX_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> to <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4225"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-CAPS"
-></A
->GTS_VERTEX()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_VERTEX(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Casts <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> to <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a descendant of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4242"
-></A
-><H3
-><A
-NAME="GTS-IS-VERTEX-CAPS"
-></A
->GTS_IS_VERTEX()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_VERTEX(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
->Evaluates to <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> is a descendant of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->a pointer to test.
-
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4260"
-></A
-><H3
-><A
-NAME="GTSVERTEXCLASS"
-></A
->struct GtsVertexClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsVertexClass;</PRE
-></TD
-></TR
-></TABLE
-><P
->The vertex class. No virtual functions are associated.</P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4265"
-></A
-><H3
-><A
-NAME="GTSVERTEX"
-></A
->struct GtsVertex</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsVertex {
-  GtsPoint p;
-  
-  GSList * segments;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
->The vertex object.</P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFF0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><A
-HREF="gts-points.html#GTSPOINT"
->GtsPoint</A
-> <TT
-CLASS="STRUCTFIELD"
-><I
->p</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->The parent object.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="LEFT"
-VALIGN="TOP"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *<TT
-CLASS="STRUCTFIELD"
-><I
->segments</I
-></TT
-></TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
->Contains all the <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> using this vertex as one of their endpoints.
</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4286"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-CLASS"
-></A
->gts_vertex_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->* gts_vertex_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4303"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-NEW"
-></A
->gts_vertex_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->*  gts_vertex_new                  (<A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> x,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> y,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> z);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEXCLASS"
->GtsVertexClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->x</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the x-coordinate of the vertex to create.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->y</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the y-coordinate of the vertex to create.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->z</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the y-coordinate of the vertex to create.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> with <TT
-CLASS="PARAMETER"
-><I
->x</I
-></TT
->, <TT
-CLASS="PARAMETER"
-><I
->y</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->z</I
-></TT
-> as coordinates.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4344"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-IS-UNATTACHED"
-></A
->gts_vertex_is_unattached ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_vertex_is_unattached        (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is not the endpoint of any <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->, 
-<TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4370"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-IS-BOUNDARY"
-></A
->gts_vertex_is_boundary ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_vertex_is_boundary          (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is used by a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> boundary of <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> as
-determined by <A
-HREF="gts-edges.html#GTS-EDGE-IS-BOUNDARY"
->gts_edge_is_boundary</A
->(), <TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4405"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-IS-CONTACT"
-></A
->gts_vertex_is_contact ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GUINT"
->guint</GTKDOCLINK
->       gts_vertex_is_contact           (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
-> sever);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.  </TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->sever</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if <TT
-CLASS="LITERAL"
->TRUE</TT
-> and if <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is a contact vertex between two or more
-sets of connected triangles replaces it with as many vertices,
-clones of <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the number of sets of connected triangles sharing <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> as a
-contact vertex.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4436"
-></A
-><H3
-><A
-NAME="GTS-VERTICES-ARE-CONNECTED"
-></A
->gts_vertices_are_connected ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->* gts_vertices_are_connected      (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v1,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v2);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> if <TT
-CLASS="PARAMETER"
-><I
->v1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->v2</I
-></TT
-> are the vertices of the same <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->
-this segment else <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4468"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-REPLACE"
-></A
->gts_vertex_replace ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->void        gts_vertex_replace              (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *with);</PRE
-></TD
-></TR
-></TABLE
-><P
->Replaces vertex <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> with vertex <TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
->. <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
-> must be
-different.  All the <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> which have <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> has one of their
-vertices are updated.  The segments list of vertex <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is freed and
-<TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->->segments is set to <TT
-CLASS="LITERAL"
->NULL</TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->with</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4500"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-NEIGHBORS"
-></A
->gts_vertex_neighbors ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_vertex_neighbors            (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *list,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds to <TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
-> all the <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> connected to <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> by a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> and not
-already in <TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
->. If <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> is not <TT
-CLASS="LITERAL"
->NULL</TT
-> only the vertices connected to
-<TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> by an edge belonging to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> are considered.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new list of unique <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4545"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-TRIANGLES"
-></A
->gts_vertex_triangles ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_vertex_triangles            (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *list);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds all the <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> which share <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> as a vertex and do not
-already belong to <TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new list of unique <A
-HREF="gts-triangles.html#GTSTRIANGLE"
->GtsTriangle</A
-> which share <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> as a
-vertex.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4578"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-FACES"
-></A
->gts_vertex_faces ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_vertex_faces                (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface,
-                                             <GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *list);</PRE
-></TD
-></TR
-></TABLE
-><P
->Adds all the <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> (if not <TT
-CLASS="LITERAL"
->NULL</TT
->) which share 
-<TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> as a vertex and do not already belong to <TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
->.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> or <TT
-CLASS="LITERAL"
->NULL</TT
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->list</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the new list of unique <A
-HREF="gts-faces.html#GTSFACE"
->GtsFace</A
-> belonging to <TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> 
-which share <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> as a vertex.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4621"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-FAN-ORIENTED"
-></A
->gts_vertex_fan_oriented ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_vertex_fan_oriented         (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
-> *surface);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-surfaces.html#GTSSURFACE"
->GtsSurface</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> describing in counterclockwise order the 
-boundary of the fan of summit <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
->, the faces of the fan belonging to 
-<TT
-CLASS="PARAMETER"
-><I
->surface</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4652"
-></A
-><H3
-><A
-NAME="GTS-VERTEX-ENCROACHES-EDGE"
-></A
->gts_vertex_encroaches_edge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GBOOLEAN"
->gboolean</GTKDOCLINK
->    gts_vertex_encroaches_edge      (<A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
-> *v,
-                                             <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
-> *e);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-edges.html#GTSEDGE"
->GtsEdge</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> <TT
-CLASS="LITERAL"
->TRUE</TT
-> if <TT
-CLASS="PARAMETER"
-><I
->v</I
-></TT
-> is strictly contained in the diametral circle of <TT
-CLASS="PARAMETER"
-><I
->e</I
-></TT
->,
-<TT
-CLASS="LITERAL"
->FALSE</TT
-> otherwise.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4684"
-></A
-><H3
-><A
-NAME="GTS-VERTICES-FROM-SEGMENTS"
-></A
->gts_vertices_from_segments ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
->*     gts_vertices_from_segments      (<GTKDOCLINK
-HREF="GSLIST"
->GSList</GTKDOCLINK
-> *segments);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->segments</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->, vertices of a <A
-HREF="gts-segments.html#GTSSEGMENT"
->GtsSegment</A
-> in <TT
-CLASS="PARAMETER"
-><I
->segments</I
-></TT
->.
-Each element in the list is unique (no duplicates).</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN4709"
-></A
-><H3
-><A
-NAME="GTS-VERTICES-MERGE"
-></A
->gts_vertices_merge ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
->*      gts_vertices_merge              (<GTKDOCLINK
-HREF="GLIST"
->GList</GTKDOCLINK
-> *vertices,
-                                             <GTKDOCLINK
-HREF="GDOUBLE"
->gdouble</GTKDOCLINK
-> epsilon);</PRE
-></TD
-></TR
-></TABLE
-><P
->For each vertex v in <TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
-> look if there are any vertex of
-<TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
-> contained in a box centered on v of size 2*<TT
-CLASS="PARAMETER"
-><I
->epsilon</I
-></TT
->. If
-there are, replace them with v (using <A
-HREF="gts-vertices.html#GTS-VERTEX-REPLACE"
->gts_vertex_replace</A
->()),
-destroy them and remove them from list.  This is done efficiently
-using Kd-Trees.</P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->vertices</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a list of <A
-HREF="gts-vertices.html#GTSVERTEX"
->GtsVertex</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->epsilon</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> half the size of the bounding box to consider for each vertex.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the updated list of vertices.  </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-points.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c1908.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-segments.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Points</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Segments</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/gts-weighted-graph.html b/doc/html/gts-weighted-graph.html
deleted file mode 100644
index a4b7c23..0000000
--- a/doc/html/gts-weighted-graph.html
+++ /dev/null
@@ -1,1696 +0,0 @@
-<HTML
-><HEAD
-><TITLE
->Weighted graph</TITLE
-><META
-NAME="GENERATOR"
-CONTENT="Modular DocBook HTML Stylesheet Version 1.52"><LINK
-REL="HOME"
-TITLE="GTS Library Reference Manual"
-HREF="book1.html"><LINK
-REL="UP"
-TITLE="Graph and operations on graphs"
-HREF="c13676.html"><LINK
-REL="PREVIOUS"
-TITLE="Graph class"
-HREF="gts-graph-class.html"><LINK
-REL="NEXT"
-TITLE="Progressive graph"
-HREF="gts-progressive-graph.html"></HEAD
-><BODY
-CLASS="REFENTRY"
-BGCOLOR="#FFFFFF"
-TEXT="#000000"
-LINK="#0000FF"
-VLINK="#840084"
-ALINK="#0000FF"
-><DIV
-CLASS="NAVHEADER"
-><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TH
-COLSPAN="4"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="5"
->GTS Library Reference Manual</FONT
-></TH
-></TR
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-graph-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-progressive-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-></TABLE
-></DIV
-><H1
-><A
-NAME="GTS-WEIGHTED-GRAPH"
->Weighted graph</A
-></H1
-><DIV
-CLASS="REFNAMEDIV"
-><A
-NAME="AEN14884"
-></A
-><H2
->Name</H2
->Weighted graph -- </DIV
-><DIV
-CLASS="REFSYNOPSISDIV"
-><A
-NAME="AEN14887"
-></A
-><H2
->Synopsis</H2
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="SYNOPSIS"
->
#include <gts.h>
-
-
-#define     <A
-HREF="gts-weighted-graph.html#GTS-WGEDGE-CLASS-CAPS"
->GTS_WGEDGE_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-weighted-graph.html#GTS-WGEDGE-CAPS"
->GTS_WGEDGE</A
->                      (obj)
-#define     <A
-HREF="gts-weighted-graph.html#GTS-IS-WGEDGE-CAPS"
->GTS_IS_WGEDGE</A
->                   (obj)
-struct      <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->;
-struct      <A
-HREF="gts-weighted-graph.html#GTSWGEDGE"
->GtsWGEdge</A
->;
-
-<A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->* <A
-HREF="gts-weighted-graph.html#GTS-WGEDGE-CLASS"
->gts_wgedge_class</A
->            (void);
-<A
-HREF="gts-weighted-graph.html#GTSWGEDGE"
->GtsWGEdge</A
->*  <A
-HREF="gts-weighted-graph.html#GTS-WGEDGE-NEW"
->gts_wgedge_new</A
->                  (<A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n1,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n2,
-                                             <GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
-> weight);
-
-#define     <A
-HREF="gts-weighted-graph.html#GTS-WGNODE-CLASS-CAPS"
->GTS_WGNODE_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-weighted-graph.html#GTS-WGNODE-CAPS"
->GTS_WGNODE</A
->                      (obj)
-#define     <A
-HREF="gts-weighted-graph.html#GTS-IS-WGNODE-CAPS"
->GTS_IS_WGNODE</A
->                   (obj)
-struct      <A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
->;
-struct      <A
-HREF="gts-weighted-graph.html#GTSWGNODE"
->GtsWGNode</A
->;
-
-<A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
->* <A
-HREF="gts-weighted-graph.html#GTS-WGNODE-CLASS"
->gts_wgnode_class</A
->            (void);
-<A
-HREF="gts-weighted-graph.html#GTSWGNODE"
->GtsWGNode</A
->*  <A
-HREF="gts-weighted-graph.html#GTS-WGNODE-NEW"
->gts_wgnode_new</A
->                  (<A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
-> weight);
-
-#define     <A
-HREF="gts-weighted-graph.html#GTS-WGRAPH-CLASS-CAPS"
->GTS_WGRAPH_CLASS</A
->                (klass)
-#define     <A
-HREF="gts-weighted-graph.html#GTS-WGRAPH-CAPS"
->GTS_WGRAPH</A
->                      (obj)
-#define     <A
-HREF="gts-weighted-graph.html#GTS-IS-WGRAPH-CAPS"
->GTS_IS_WGRAPH</A
->                   (obj)
-struct      <A
-HREF="gts-weighted-graph.html#GTSWGRAPHCLASS"
->GtsWGraphClass</A
->;
-struct      <A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
->;
-
-<A
-HREF="gts-weighted-graph.html#GTSWGRAPHCLASS"
->GtsWGraphClass</A
->* <A
-HREF="gts-weighted-graph.html#GTS-WGRAPH-CLASS"
->gts_wgraph_class</A
->            (void);
-<GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      <A
-HREF="gts-weighted-graph.html#GTS-WGRAPH-WEIGHT-MAX"
->gts_wgraph_weight_max</A
->           (<A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
-> *wg);</PRE
-></TD
-></TR
-></TABLE
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN14924"
-></A
-><H2
->Description</H2
-><P
-></P
-></DIV
-><DIV
-CLASS="REFSECT1"
-><A
-NAME="AEN14927"
-></A
-><H2
->Details</H2
-><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14929"
-></A
-><H3
-><A
-NAME="GTS-WGEDGE-CLASS-CAPS"
-></A
->GTS_WGEDGE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_WGEDGE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14943"
-></A
-><H3
-><A
-NAME="GTS-WGEDGE-CAPS"
-></A
->GTS_WGEDGE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_WGEDGE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14957"
-></A
-><H3
-><A
-NAME="GTS-IS-WGEDGE-CAPS"
-></A
->GTS_IS_WGEDGE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_WGEDGE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14971"
-></A
-><H3
-><A
-NAME="GTSWGEDGECLASS"
-></A
->struct GtsWGEdgeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsWGEdgeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14976"
-></A
-><H3
-><A
-NAME="GTSWGEDGE"
-></A
->struct GtsWGEdge</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsWGEdge {
-  GtsGEdge gedge;
-
-  gfloat weight;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14981"
-></A
-><H3
-><A
-NAME="GTS-WGEDGE-CLASS"
-></A
->gts_wgedge_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->* gts_wgedge_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN14998"
-></A
-><H3
-><A
-NAME="GTS-WGEDGE-NEW"
-></A
->gts_wgedge_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-weighted-graph.html#GTSWGEDGE"
->GtsWGEdge</A
->*  gts_wgedge_new                  (<A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
-> *klass,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n1,
-                                             <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
-> *n2,
-                                             <GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
-> weight);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGEDGECLASS"
->GtsWGEdgeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n1</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->n2</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> another <A
-HREF="gts-graph-class.html#GTSGNODE"
->GtsGNode</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->weight</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the weight of the new edge.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-weighted-graph.html#GTSWGEDGE"
->GtsWGEdge</A
-> of weight <TT
-CLASS="PARAMETER"
-><I
->weight</I
-></TT
-> linking <TT
-CLASS="PARAMETER"
-><I
->n1</I
-></TT
-> and <TT
-CLASS="PARAMETER"
-><I
->n2</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15041"
-></A
-><H3
-><A
-NAME="GTS-WGNODE-CLASS-CAPS"
-></A
->GTS_WGNODE_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_WGNODE_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15055"
-></A
-><H3
-><A
-NAME="GTS-WGNODE-CAPS"
-></A
->GTS_WGNODE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_WGNODE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15069"
-></A
-><H3
-><A
-NAME="GTS-IS-WGNODE-CAPS"
-></A
->GTS_IS_WGNODE()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_WGNODE(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15083"
-></A
-><H3
-><A
-NAME="GTSWGNODECLASS"
-></A
->struct GtsWGNodeClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsWGNodeClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15088"
-></A
-><H3
-><A
-NAME="GTSWGNODE"
-></A
->struct GtsWGNode</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsWGNode {
-  GtsGNode node;
-  
-  gfloat weight;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15093"
-></A
-><H3
-><A
-NAME="GTS-WGNODE-CLASS"
-></A
->gts_wgnode_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
->* gts_wgnode_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15110"
-></A
-><H3
-><A
-NAME="GTS-WGNODE-NEW"
-></A
->gts_wgnode_new ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-weighted-graph.html#GTSWGNODE"
->GtsWGNode</A
->*  gts_wgnode_new                  (<A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
-> *klass,
-                                             <GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
-> weight);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGNODECLASS"
->GtsWGNodeClass</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->weight</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the weight of the <A
-HREF="gts-weighted-graph.html#GTSWGNODE"
->GtsWGNode</A
-> to create.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a new <A
-HREF="gts-weighted-graph.html#GTSWGNODE"
->GtsWGNode</A
-> of weight <TT
-CLASS="PARAMETER"
-><I
->weight</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15140"
-></A
-><H3
-><A
-NAME="GTS-WGRAPH-CLASS-CAPS"
-></A
->GTS_WGRAPH_CLASS()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_WGRAPH_CLASS(klass)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->klass</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15154"
-></A
-><H3
-><A
-NAME="GTS-WGRAPH-CAPS"
-></A
->GTS_WGRAPH()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_WGRAPH(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15168"
-></A
-><H3
-><A
-NAME="GTS-IS-WGRAPH-CAPS"
-></A
->GTS_IS_WGRAPH()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->#define     GTS_IS_WGRAPH(obj)</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->obj</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> </TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15182"
-></A
-><H3
-><A
-NAME="GTSWGRAPHCLASS"
-></A
->struct GtsWGraphClass</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsWGraphClass;</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15187"
-></A
-><H3
-><A
-NAME="GTSWGRAPH"
-></A
->struct GtsWGraph</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
->struct GtsWGraph {
-  GtsGraph graph;
-
-  gfloat weight;
-};</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15192"
-></A
-><H3
-><A
-NAME="GTS-WGRAPH-CLASS"
-></A
->gts_wgraph_class ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><A
-HREF="gts-weighted-graph.html#GTSWGRAPHCLASS"
->GtsWGraphClass</A
->* gts_wgraph_class            (void);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the <A
-HREF="gts-weighted-graph.html#GTSWGRAPHCLASS"
->GtsWGraphClass</A
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-><HR><DIV
-CLASS="REFSECT2"
-><A
-NAME="AEN15209"
-></A
-><H3
-><A
-NAME="GTS-WGRAPH-WEIGHT-MAX"
-></A
->gts_wgraph_weight_max ()</H3
-><TABLE
-BORDER="0"
-BGCOLOR="#D6E8FF"
-WIDTH="100%"
-CELLPADDING="6"
-><TR
-><TD
-><PRE
-CLASS="PROGRAMLISTING"
-><GTKDOCLINK
-HREF="GFLOAT"
->gfloat</GTKDOCLINK
->      gts_wgraph_weight_max           (<A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
-> *wg);</PRE
-></TD
-></TR
-></TABLE
-><P
-></P
-><P
-></P
-><DIV
-CLASS="INFORMALTABLE"
-><P
-></P
-><TABLE
-BORDER="0"
-WIDTH="100%"
-BGCOLOR="#FFD0D0"
-CELLSPACING="0"
-CELLPADDING="4"
-CLASS="CALSTABLE"
-><TBODY
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><TT
-CLASS="PARAMETER"
-><I
->wg</I
-></TT
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> a <A
-HREF="gts-weighted-graph.html#GTSWGRAPH"
->GtsWGraph</A
->.</TD
-></TR
-><TR
-><TD
-WIDTH="20%"
-ALIGN="RIGHT"
-VALIGN="TOP"
-><I
-CLASS="EMPHASIS"
->Returns</I
-> :</TD
-><TD
-WIDTH="80%"
-ALIGN="LEFT"
-VALIGN="TOP"
-> the maximum weight of any vertices belonging to <TT
-CLASS="PARAMETER"
-><I
->g</I
-></TT
->.</TD
-></TR
-></TBODY
-></TABLE
-><P
-></P
-></DIV
-></DIV
-></DIV
-><DIV
-CLASS="NAVFOOTER"
-><BR
-CLEAR="all"><BR><TABLE
-WIDTH="100%"
-BORDER="0"
-BGCOLOR="#000000"
-CELLPADDING="1"
-CELLSPACING="0"
-><TR
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="left"
-><A
-HREF="gts-graph-class.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><<< Previous Page</B
-></FONT
-></A
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#0000C0"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="book1.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Home</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#00C000"
-ALIGN="center"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
-><A
-HREF="c13676.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Up</B
-></FONT
-></A
-></B
-></FONT
-></TD
-><TD
-WIDTH="25%"
-BGCOLOR="#C00000"
-ALIGN="right"
-><A
-HREF="gts-progressive-graph.html"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Next Page >>></B
-></FONT
-></A
-></TD
-></TR
-><TR
-><TD
-COLSPAN="2"
-ALIGN="left"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Graph class</B
-></FONT
-></TD
-><TD
-COLSPAN="2"
-ALIGN="right"
-><FONT
-COLOR="#FFFFFF"
-SIZE="3"
-><B
->Progressive graph</B
-></FONT
-></TD
-></TR
-></TABLE
-></DIV
-></BODY
-></HTML
->
\ No newline at end of file
diff --git a/doc/html/index.sgml b/doc/html/index.sgml
deleted file mode 100644
index 3293d45..0000000
--- a/doc/html/index.sgml
+++ /dev/null
@@ -1,606 +0,0 @@
-<ANCHOR id ="GTS-BINARY-HEAPS" href="gts/gts-binary-heaps.html">
-<ANCHOR id ="GTSHEAP" href="gts/gts-binary-heaps.html#GTSHEAP">
-<ANCHOR id ="GTS-HEAP-NEW" href="gts/gts-binary-heaps.html#GTS-HEAP-NEW">
-<ANCHOR id ="GTS-HEAP-INSERT" href="gts/gts-binary-heaps.html#GTS-HEAP-INSERT">
-<ANCHOR id ="GTS-HEAP-REMOVE-TOP" href="gts/gts-binary-heaps.html#GTS-HEAP-REMOVE-TOP">
-<ANCHOR id ="GTS-HEAP-TOP" href="gts/gts-binary-heaps.html#GTS-HEAP-TOP">
-<ANCHOR id ="GTS-HEAP-FREEZE" href="gts/gts-binary-heaps.html#GTS-HEAP-FREEZE">
-<ANCHOR id ="GTS-HEAP-THAW" href="gts/gts-binary-heaps.html#GTS-HEAP-THAW">
-<ANCHOR id ="GTS-HEAP-FOREACH" href="gts/gts-binary-heaps.html#GTS-HEAP-FOREACH">
-<ANCHOR id ="GTS-HEAP-SIZE" href="gts/gts-binary-heaps.html#GTS-HEAP-SIZE">
-<ANCHOR id ="GTS-HEAP-DESTROY" href="gts/gts-binary-heaps.html#GTS-HEAP-DESTROY">
-<ANCHOR id ="GTS-EXTENDED-BINARY-HEAPS" href="gts/gts-extended-binary-heaps.html">
-<ANCHOR id ="GTSEHEAPPAIR" href="gts/gts-extended-binary-heaps.html#GTSEHEAPPAIR">
-<ANCHOR id ="GTSKEYFUNC" href="gts/gts-extended-binary-heaps.html#GTSKEYFUNC">
-<ANCHOR id ="GTSEHEAP" href="gts/gts-extended-binary-heaps.html#GTSEHEAP">
-<ANCHOR id ="GTS-EHEAP-NEW" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-NEW">
-<ANCHOR id ="GTS-EHEAP-INSERT" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-INSERT">
-<ANCHOR id ="GTS-EHEAP-INSERT-WITH-KEY" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-INSERT-WITH-KEY">
-<ANCHOR id ="GTS-EHEAP-TOP" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-TOP">
-<ANCHOR id ="GTS-EHEAP-REMOVE-TOP" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE-TOP">
-<ANCHOR id ="GTS-EHEAP-REMOVE" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-REMOVE">
-<ANCHOR id ="GTS-EHEAP-DECREASE-KEY" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-DECREASE-KEY">
-<ANCHOR id ="GTS-EHEAP-KEY" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-KEY">
-<ANCHOR id ="GTS-EHEAP-RANDOMIZED" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-RANDOMIZED">
-<ANCHOR id ="GTS-EHEAP-UPDATE" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-UPDATE">
-<ANCHOR id ="GTS-EHEAP-FREEZE" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-FREEZE">
-<ANCHOR id ="GTS-EHEAP-THAW" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-THAW">
-<ANCHOR id ="GTS-EHEAP-FOREACH" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-FOREACH">
-<ANCHOR id ="GTS-EHEAP-SIZE" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-SIZE">
-<ANCHOR id ="GTS-EHEAP-DESTROY" href="gts/gts-extended-binary-heaps.html#GTS-EHEAP-DESTROY">
-<ANCHOR id ="GTS-FIRST-IN-FIRST-OUT-HEAPS" href="gts/gts-first-in-first-out-heaps.html">
-<ANCHOR id ="GTSFIFO" href="gts/gts-first-in-first-out-heaps.html#GTSFIFO">
-<ANCHOR id ="GTS-FIFO-NEW" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-NEW">
-<ANCHOR id ="GTS-FIFO-PUSH" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-PUSH">
-<ANCHOR id ="GTS-FIFO-POP" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-POP">
-<ANCHOR id ="GTS-FIFO-TOP" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-TOP">
-<ANCHOR id ="GTS-FIFO-SIZE" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-SIZE">
-<ANCHOR id ="GTS-FIFO-FOREACH" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-FOREACH">
-<ANCHOR id ="GTS-FIFO-IS-EMPTY" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-IS-EMPTY">
-<ANCHOR id ="GTS-FIFO-WRITE" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-WRITE">
-<ANCHOR id ="GTS-FIFO-DESTROY" href="gts/gts-first-in-first-out-heaps.html#GTS-FIFO-DESTROY">
-<ANCHOR id ="GTS-VECTORS-AND-MATRICES" href="gts/gts-vectors-and-matrices.html">
-<ANCHOR id ="GTSVECTOR[3]" href="gts/gts-vectors-and-matrices.html#GTSVECTOR[3]">
-<ANCHOR id ="GTS-VECTOR-INIT" href="gts/gts-vectors-and-matrices.html#GTS-VECTOR-INIT">
-<ANCHOR id ="GTS-VECTOR-SCALAR" href="gts/gts-vectors-and-matrices.html#GTS-VECTOR-SCALAR">
-<ANCHOR id ="GTS-VECTOR-CROSS" href="gts/gts-vectors-and-matrices.html#GTS-VECTOR-CROSS">
-<ANCHOR id ="GTS-VECTOR-PRINT" href="gts/gts-vectors-and-matrices.html#GTS-VECTOR-PRINT">
-<ANCHOR id ="GTSMATRIX" href="gts/gts-vectors-and-matrices.html#GTSMATRIX">
-<ANCHOR id ="GTS-MATRIX-NEW" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-NEW">
-<ANCHOR id ="GTS-MATRIX-ASSIGN" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-ASSIGN">
-<ANCHOR id ="GTS-MATRIX-TRANSPOSE" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-TRANSPOSE">
-<ANCHOR id ="GTS-MATRIX-DETERMINANT" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-DETERMINANT">
-<ANCHOR id ="GTS-MATRIX-INVERSE" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-INVERSE">
-<ANCHOR id ="GTS-MATRIX-PROJECTION" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-PROJECTION">
-<ANCHOR id ="GTS-MATRIX-PRODUCT" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-PRODUCT">
-<ANCHOR id ="GTS-MATRIX-COMPATIBLE-ROW" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-COMPATIBLE-ROW">
-<ANCHOR id ="GTS-MATRIX-QUADRATIC-OPTIMIZATION" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-QUADRATIC-OPTIMIZATION">
-<ANCHOR id ="GTS-MATRIX-PRINT" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-PRINT">
-<ANCHOR id ="GTS-MATRIX-DESTROY" href="gts/gts-vectors-and-matrices.html#GTS-MATRIX-DESTROY">
-<ANCHOR id ="GTS-SIMPLE-STATISTICS" href="gts/gts-simple-statistics.html">
-<ANCHOR id ="GTSRANGE" href="gts/gts-simple-statistics.html#GTSRANGE">
-<ANCHOR id ="GTS-RANGE-INIT" href="gts/gts-simple-statistics.html#GTS-RANGE-INIT">
-<ANCHOR id ="GTS-RANGE-ADD-VALUE" href="gts/gts-simple-statistics.html#GTS-RANGE-ADD-VALUE">
-<ANCHOR id ="GTS-RANGE-UPDATE" href="gts/gts-simple-statistics.html#GTS-RANGE-UPDATE">
-<ANCHOR id ="GTS-RANGE-RESET" href="gts/gts-simple-statistics.html#GTS-RANGE-RESET">
-<ANCHOR id ="GTS-RANGE-PRINT" href="gts/gts-simple-statistics.html#GTS-RANGE-PRINT">
-<ANCHOR id ="GTS-MISCELLANEOUS-MACROS-AND-FUNCTIONS" href="gts/gts-miscellaneous-macros-and-functions.html">
-<ANCHOR id ="GTS-COMMENTS-CAPS" href="gts/gts-miscellaneous-macros-and-functions.html#GTS-COMMENTS-CAPS">
-<ANCHOR id ="GTS-GET-TOKEN" href="gts/gts-miscellaneous-macros-and-functions.html#GTS-GET-TOKEN">
-<ANCHOR id ="GTS-GET-NEWLINE" href="gts/gts-miscellaneous-macros-and-functions.html#GTS-GET-NEWLINE">
-<ANCHOR id ="GTS-OBJECT-CLASS" href="gts/gts-object-class.html">
-<ANCHOR id ="GTS-CLASS-NAME-LENGTH-CAPS" href="gts/gts-object-class.html#GTS-CLASS-NAME-LENGTH-CAPS">
-<ANCHOR id ="GTS-OBJECT-CLASS-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-CLASS-CAPS">
-<ANCHOR id ="GTS-OBJECT-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-CAPS">
-<ANCHOR id ="GTS-IS-OBJECT-CAPS" href="gts/gts-object-class.html#GTS-IS-OBJECT-CAPS">
-<ANCHOR id ="GTS-OBJECT-CLASS-CAST-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-CLASS-CAST-CAPS">
-<ANCHOR id ="GTS-OBJECT-CAST-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-CAST-CAPS">
-<ANCHOR id ="GTS-OBJECT-FLAGS-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-FLAGS-CAPS">
-<ANCHOR id ="GTS-OBJECT-SET-FLAGS-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-SET-FLAGS-CAPS">
-<ANCHOR id ="GTS-OBJECT-UNSET-FLAGS-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-UNSET-FLAGS-CAPS">
-<ANCHOR id ="GTS-OBJECT-DESTROYED-CAPS" href="gts/gts-object-class.html#GTS-OBJECT-DESTROYED-CAPS">
-<ANCHOR id ="GTSOBJECTCLASS" href="gts/gts-object-class.html#GTSOBJECTCLASS">
-<ANCHOR id ="GTSOBJECT" href="gts/gts-object-class.html#GTSOBJECT">
-<ANCHOR id ="GTSOBJECTCLASSINFO" href="gts/gts-object-class.html#GTSOBJECTCLASSINFO">
-<ANCHOR id ="GTSOBJECTCLASSINITFUNC" href="gts/gts-object-class.html#GTSOBJECTCLASSINITFUNC">
-<ANCHOR id ="GTSOBJECTINITFUNC" href="gts/gts-object-class.html#GTSOBJECTINITFUNC">
-<ANCHOR id ="GTSARGSETFUNC" href="gts/gts-object-class.html#GTSARGSETFUNC">
-<ANCHOR id ="GTSARGGETFUNC" href="gts/gts-object-class.html#GTSARGGETFUNC">
-<ANCHOR id ="GTSOBJECTFLAGS" href="gts/gts-object-class.html#GTSOBJECTFLAGS">
-<ANCHOR id ="GTSCOLOR" href="gts/gts-object-class.html#GTSCOLOR">
-<ANCHOR id ="GTS-OBJECT-CLASS" href="gts/gts-object-class.html#GTS-OBJECT-CLASS">
-<ANCHOR id ="GTS-OBJECT-CLASS-NEW" href="gts/gts-object-class.html#GTS-OBJECT-CLASS-NEW">
-<ANCHOR id ="GTS-OBJECT-CLASS-CHECK-CAST" href="gts/gts-object-class.html#GTS-OBJECT-CLASS-CHECK-CAST">
-<ANCHOR id ="GTS-OBJECT-CLASS-IS-FROM-CLASS" href="gts/gts-object-class.html#GTS-OBJECT-CLASS-IS-FROM-CLASS">
-<ANCHOR id ="GTS-OBJECT-CLASS-FROM-NAME" href="gts/gts-object-class.html#GTS-OBJECT-CLASS-FROM-NAME">
-<ANCHOR id ="GTS-OBJECT-NEW" href="gts/gts-object-class.html#GTS-OBJECT-NEW">
-<ANCHOR id ="GTS-OBJECT-INIT" href="gts/gts-object-class.html#GTS-OBJECT-INIT">
-<ANCHOR id ="GTS-OBJECT-CLONE" href="gts/gts-object-class.html#GTS-OBJECT-CLONE">
-<ANCHOR id ="GTS-OBJECT-ATTRIBUTES" href="gts/gts-object-class.html#GTS-OBJECT-ATTRIBUTES">
-<ANCHOR id ="GTS-OBJECT-CHECK-CAST" href="gts/gts-object-class.html#GTS-OBJECT-CHECK-CAST">
-<ANCHOR id ="GTS-OBJECT-IS-FROM-CLASS" href="gts/gts-object-class.html#GTS-OBJECT-IS-FROM-CLASS">
-<ANCHOR id ="GTS-OBJECT-RESET-RESERVED" href="gts/gts-object-class.html#GTS-OBJECT-RESET-RESERVED">
-<ANCHOR id ="GTS-OBJECT-DESTROY" href="gts/gts-object-class.html#GTS-OBJECT-DESTROY">
-<ANCHOR id ="GTS-CONTAINER-CLASSES" href="gts/gts-container-classes.html">
-<ANCHOR id ="GTS-CONTAINER-CLASS-CAPS" href="gts/gts-container-classes.html#GTS-CONTAINER-CLASS-CAPS">
-<ANCHOR id ="GTS-CONTAINER-CAPS" href="gts/gts-container-classes.html#GTS-CONTAINER-CAPS">
-<ANCHOR id ="GTS-IS-CONTAINER-CAPS" href="gts/gts-container-classes.html#GTS-IS-CONTAINER-CAPS">
-<ANCHOR id ="GTSCONTAINERCLASS" href="gts/gts-container-classes.html#GTSCONTAINERCLASS">
-<ANCHOR id ="GTSCONTAINER" href="gts/gts-container-classes.html#GTSCONTAINER">
-<ANCHOR id ="GTS-CONTAINER-CLASS" href="gts/gts-container-classes.html#GTS-CONTAINER-CLASS">
-<ANCHOR id ="GTS-CONTAINER-NEW" href="gts/gts-container-classes.html#GTS-CONTAINER-NEW">
-<ANCHOR id ="GTS-CONTAINER-ADD" href="gts/gts-container-classes.html#GTS-CONTAINER-ADD">
-<ANCHOR id ="GTS-CONTAINER-REMOVE" href="gts/gts-container-classes.html#GTS-CONTAINER-REMOVE">
-<ANCHOR id ="GTS-CONTAINER-SIZE" href="gts/gts-container-classes.html#GTS-CONTAINER-SIZE">
-<ANCHOR id ="GTS-CONTAINER-FOREACH" href="gts/gts-container-classes.html#GTS-CONTAINER-FOREACH">
-<ANCHOR id ="GTS-HASH-CONTAINER-CLASS-CAPS" href="gts/gts-container-classes.html#GTS-HASH-CONTAINER-CLASS-CAPS">
-<ANCHOR id ="GTS-HASH-CONTAINER-CAPS" href="gts/gts-container-classes.html#GTS-HASH-CONTAINER-CAPS">
-<ANCHOR id ="GTS-IS-HASH-CONTAINER-CAPS" href="gts/gts-container-classes.html#GTS-IS-HASH-CONTAINER-CAPS">
-<ANCHOR id ="GTSHASHCONTAINERCLASS" href="gts/gts-container-classes.html#GTSHASHCONTAINERCLASS">
-<ANCHOR id ="GTSHASHCONTAINER" href="gts/gts-container-classes.html#GTSHASHCONTAINER">
-<ANCHOR id ="GTS-HASH-CONTAINER-CLASS" href="gts/gts-container-classes.html#GTS-HASH-CONTAINER-CLASS">
-<ANCHOR id ="GTS-SLIST-CONTAINER-CLASS-CAPS" href="gts/gts-container-classes.html#GTS-SLIST-CONTAINER-CLASS-CAPS">
-<ANCHOR id ="GTS-SLIST-CONTAINER-CAPS" href="gts/gts-container-classes.html#GTS-SLIST-CONTAINER-CAPS">
-<ANCHOR id ="GTS-IS-SLIST-CONTAINER-CAPS" href="gts/gts-container-classes.html#GTS-IS-SLIST-CONTAINER-CAPS">
-<ANCHOR id ="GTSSLISTCONTAINERCLASS" href="gts/gts-container-classes.html#GTSSLISTCONTAINERCLASS">
-<ANCHOR id ="GTSSLISTCONTAINER" href="gts/gts-container-classes.html#GTSSLISTCONTAINER">
-<ANCHOR id ="GTS-SLIST-CONTAINER-CLASS" href="gts/gts-container-classes.html#GTS-SLIST-CONTAINER-CLASS">
-<ANCHOR id ="GTS-CONTAINEE-CLASSES" href="gts/gts-containee-classes.html">
-<ANCHOR id ="GTS-CONTAINEE-CLASS-CAPS" href="gts/gts-containee-classes.html#GTS-CONTAINEE-CLASS-CAPS">
-<ANCHOR id ="GTS-CONTAINEE-CAPS" href="gts/gts-containee-classes.html#GTS-CONTAINEE-CAPS">
-<ANCHOR id ="GTS-IS-CONTAINEE-CAPS" href="gts/gts-containee-classes.html#GTS-IS-CONTAINEE-CAPS">
-<ANCHOR id ="GTSCONTAINEECLASS" href="gts/gts-containee-classes.html#GTSCONTAINEECLASS">
-<ANCHOR id ="GTSCONTAINEE" href="gts/gts-containee-classes.html#GTSCONTAINEE">
-<ANCHOR id ="GTS-CONTAINEE-CLASS" href="gts/gts-containee-classes.html#GTS-CONTAINEE-CLASS">
-<ANCHOR id ="GTS-CONTAINEE-NEW" href="gts/gts-containee-classes.html#GTS-CONTAINEE-NEW">
-<ANCHOR id ="GTS-CONTAINEE-IS-CONTAINED" href="gts/gts-containee-classes.html#GTS-CONTAINEE-IS-CONTAINED">
-<ANCHOR id ="GTS-SLIST-CONTAINEE-CLASS-CAPS" href="gts/gts-containee-classes.html#GTS-SLIST-CONTAINEE-CLASS-CAPS">
-<ANCHOR id ="GTS-SLIST-CONTAINEE-CAPS" href="gts/gts-containee-classes.html#GTS-SLIST-CONTAINEE-CAPS">
-<ANCHOR id ="GTS-IS-SLIST-CONTAINEE-CAPS" href="gts/gts-containee-classes.html#GTS-IS-SLIST-CONTAINEE-CAPS">
-<ANCHOR id ="GTSSLISTCONTAINEECLASS" href="gts/gts-containee-classes.html#GTSSLISTCONTAINEECLASS">
-<ANCHOR id ="GTSSLISTCONTAINEE" href="gts/gts-containee-classes.html#GTSSLISTCONTAINEE">
-<ANCHOR id ="GTS-SLIST-CONTAINEE-CLASS" href="gts/gts-containee-classes.html#GTS-SLIST-CONTAINEE-CLASS">
-<ANCHOR id ="GTS-POINTS" href="gts/gts-points.html">
-<ANCHOR id ="GTS-POINT-CLASS-CAPS" href="gts/gts-points.html#GTS-POINT-CLASS-CAPS">
-<ANCHOR id ="GTS-POINT-CAPS" href="gts/gts-points.html#GTS-POINT-CAPS">
-<ANCHOR id ="GTS-IS-POINT-CAPS" href="gts/gts-points.html#GTS-IS-POINT-CAPS">
-<ANCHOR id ="GTSPOINTCLASS" href="gts/gts-points.html#GTSPOINTCLASS">
-<ANCHOR id ="GTSPOINT" href="gts/gts-points.html#GTSPOINT">
-<ANCHOR id ="GTS-POINT-CLASS" href="gts/gts-points.html#GTS-POINT-CLASS">
-<ANCHOR id ="GTS-POINT-NEW" href="gts/gts-points.html#GTS-POINT-NEW">
-<ANCHOR id ="GTS-POINT-SET" href="gts/gts-points.html#GTS-POINT-SET">
-<ANCHOR id ="GTS-POINT-IS-IN-RECTANGLE" href="gts/gts-points.html#GTS-POINT-IS-IN-RECTANGLE">
-<ANCHOR id ="GTS-SEGMENT-TRIANGLE-INTERSECTION" href="gts/gts-points.html#GTS-SEGMENT-TRIANGLE-INTERSECTION">
-<ANCHOR id ="GTS-POINT-TRANSFORM" href="gts/gts-points.html#GTS-POINT-TRANSFORM">
-<ANCHOR id ="GTS-POINT-DISTANCE" href="gts/gts-points.html#GTS-POINT-DISTANCE">
-<ANCHOR id ="GTS-POINT-DISTANCE2" href="gts/gts-points.html#GTS-POINT-DISTANCE2">
-<ANCHOR id ="GTS-POINT-ORIENTATION-3D" href="gts/gts-points.html#GTS-POINT-ORIENTATION-3D">
-<ANCHOR id ="GTSINTERSECT" href="gts/gts-points.html#GTSINTERSECT">
-<ANCHOR id ="GTS-POINT-IN-CIRCLE" href="gts/gts-points.html#GTS-POINT-IN-CIRCLE">
-<ANCHOR id ="GTS-POINT-IN-TRIANGLE-CIRCLE" href="gts/gts-points.html#GTS-POINT-IN-TRIANGLE-CIRCLE">
-<ANCHOR id ="GTS-POINT-IS-IN-TRIANGLE" href="gts/gts-points.html#GTS-POINT-IS-IN-TRIANGLE">
-<ANCHOR id ="GTS-POINT-ORIENTATION" href="gts/gts-points.html#GTS-POINT-ORIENTATION">
-<ANCHOR id ="GTS-POINT-SEGMENT-DISTANCE2" href="gts/gts-points.html#GTS-POINT-SEGMENT-DISTANCE2">
-<ANCHOR id ="GTS-POINT-SEGMENT-DISTANCE" href="gts/gts-points.html#GTS-POINT-SEGMENT-DISTANCE">
-<ANCHOR id ="GTS-POINT-SEGMENT-CLOSEST" href="gts/gts-points.html#GTS-POINT-SEGMENT-CLOSEST">
-<ANCHOR id ="GTS-POINT-TRIANGLE-DISTANCE" href="gts/gts-points.html#GTS-POINT-TRIANGLE-DISTANCE">
-<ANCHOR id ="GTS-POINT-TRIANGLE-CLOSEST" href="gts/gts-points.html#GTS-POINT-TRIANGLE-CLOSEST">
-<ANCHOR id ="GTS-POINT-TRIANGLE-DISTANCE2" href="gts/gts-points.html#GTS-POINT-TRIANGLE-DISTANCE2">
-<ANCHOR id ="GTS-POINT-IS-INSIDE-SURFACE" href="gts/gts-points.html#GTS-POINT-IS-INSIDE-SURFACE">
-<ANCHOR id ="GTS-VERTICES" href="gts/gts-vertices.html">
-<ANCHOR id ="GTS-VERTEX-CLASS-CAPS" href="gts/gts-vertices.html#GTS-VERTEX-CLASS-CAPS">
-<ANCHOR id ="GTS-VERTEX-CAPS" href="gts/gts-vertices.html#GTS-VERTEX-CAPS">
-<ANCHOR id ="GTS-IS-VERTEX-CAPS" href="gts/gts-vertices.html#GTS-IS-VERTEX-CAPS">
-<ANCHOR id ="GTSVERTEXCLASS" href="gts/gts-vertices.html#GTSVERTEXCLASS">
-<ANCHOR id ="GTSVERTEX" href="gts/gts-vertices.html#GTSVERTEX">
-<ANCHOR id ="GTS-VERTEX-CLASS" href="gts/gts-vertices.html#GTS-VERTEX-CLASS">
-<ANCHOR id ="GTS-VERTEX-NEW" href="gts/gts-vertices.html#GTS-VERTEX-NEW">
-<ANCHOR id ="GTS-VERTEX-IS-UNATTACHED" href="gts/gts-vertices.html#GTS-VERTEX-IS-UNATTACHED">
-<ANCHOR id ="GTS-VERTEX-IS-BOUNDARY" href="gts/gts-vertices.html#GTS-VERTEX-IS-BOUNDARY">
-<ANCHOR id ="GTS-VERTEX-IS-CONTACT" href="gts/gts-vertices.html#GTS-VERTEX-IS-CONTACT">
-<ANCHOR id ="GTS-VERTICES-ARE-CONNECTED" href="gts/gts-vertices.html#GTS-VERTICES-ARE-CONNECTED">
-<ANCHOR id ="GTS-VERTEX-REPLACE" href="gts/gts-vertices.html#GTS-VERTEX-REPLACE">
-<ANCHOR id ="GTS-VERTEX-NEIGHBORS" href="gts/gts-vertices.html#GTS-VERTEX-NEIGHBORS">
-<ANCHOR id ="GTS-VERTEX-TRIANGLES" href="gts/gts-vertices.html#GTS-VERTEX-TRIANGLES">
-<ANCHOR id ="GTS-VERTEX-FACES" href="gts/gts-vertices.html#GTS-VERTEX-FACES">
-<ANCHOR id ="GTS-VERTEX-FAN-ORIENTED" href="gts/gts-vertices.html#GTS-VERTEX-FAN-ORIENTED">
-<ANCHOR id ="GTS-VERTEX-ENCROACHES-EDGE" href="gts/gts-vertices.html#GTS-VERTEX-ENCROACHES-EDGE">
-<ANCHOR id ="GTS-VERTICES-FROM-SEGMENTS" href="gts/gts-vertices.html#GTS-VERTICES-FROM-SEGMENTS">
-<ANCHOR id ="GTS-VERTICES-MERGE" href="gts/gts-vertices.html#GTS-VERTICES-MERGE">
-<ANCHOR id ="GTS-SEGMENTS" href="gts/gts-segments.html">
-<ANCHOR id ="GTS-SEGMENT-CLASS-CAPS" href="gts/gts-segments.html#GTS-SEGMENT-CLASS-CAPS">
-<ANCHOR id ="GTS-SEGMENT-CAPS" href="gts/gts-segments.html#GTS-SEGMENT-CAPS">
-<ANCHOR id ="GTS-IS-SEGMENT-CAPS" href="gts/gts-segments.html#GTS-IS-SEGMENT-CAPS">
-<ANCHOR id ="GTSSEGMENTCLASS" href="gts/gts-segments.html#GTSSEGMENTCLASS">
-<ANCHOR id ="GTSSEGMENT" href="gts/gts-segments.html#GTSSEGMENT">
-<ANCHOR id ="GTS-SEGMENT-CLASS" href="gts/gts-segments.html#GTS-SEGMENT-CLASS">
-<ANCHOR id ="GTS-SEGMENT-NEW" href="gts/gts-segments.html#GTS-SEGMENT-NEW">
-<ANCHOR id ="GTS-SEGMENTS-ARE-IDENTICAL" href="gts/gts-segments.html#GTS-SEGMENTS-ARE-IDENTICAL">
-<ANCHOR id ="GTS-SEGMENTS-ARE-INTERSECTING" href="gts/gts-segments.html#GTS-SEGMENTS-ARE-INTERSECTING">
-<ANCHOR id ="GTS-SEGMENT-IS-DUPLICATE" href="gts/gts-segments.html#GTS-SEGMENT-IS-DUPLICATE">
-<ANCHOR id ="GTS-SEGMENT-IS-OK" href="gts/gts-segments.html#GTS-SEGMENT-IS-OK">
-<ANCHOR id ="GTS-SEGMENT-CONNECT" href="gts/gts-segments.html#GTS-SEGMENT-CONNECT">
-<ANCHOR id ="GTS-SEGMENTS-TOUCH" href="gts/gts-segments.html#GTS-SEGMENTS-TOUCH">
-<ANCHOR id ="GTS-SEGMENTS-FROM-VERTICES" href="gts/gts-segments.html#GTS-SEGMENTS-FROM-VERTICES">
-<ANCHOR id ="GTS-SEGMENT-MIDVERTEX" href="gts/gts-segments.html#GTS-SEGMENT-MIDVERTEX">
-<ANCHOR id ="GTS-EDGES" href="gts/gts-edges.html">
-<ANCHOR id ="GTS-EDGE-CLASS-CAPS" href="gts/gts-edges.html#GTS-EDGE-CLASS-CAPS">
-<ANCHOR id ="GTS-EDGE-CAPS" href="gts/gts-edges.html#GTS-EDGE-CAPS">
-<ANCHOR id ="GTS-IS-EDGE-CAPS" href="gts/gts-edges.html#GTS-IS-EDGE-CAPS">
-<ANCHOR id ="GTSEDGECLASS" href="gts/gts-edges.html#GTSEDGECLASS">
-<ANCHOR id ="GTSEDGE" href="gts/gts-edges.html#GTSEDGE">
-<ANCHOR id ="GTS-EDGE-CLASS" href="gts/gts-edges.html#GTS-EDGE-CLASS">
-<ANCHOR id ="GTS-EDGE-NEW" href="gts/gts-edges.html#GTS-EDGE-NEW">
-<ANCHOR id ="GTS-EDGE-REPLACE" href="gts/gts-edges.html#GTS-EDGE-REPLACE">
-<ANCHOR id ="GTS-EDGE-IS-UNATTACHED" href="gts/gts-edges.html#GTS-EDGE-IS-UNATTACHED">
-<ANCHOR id ="GTS-EDGE-IS-DUPLICATE" href="gts/gts-edges.html#GTS-EDGE-IS-DUPLICATE">
-<ANCHOR id ="GTS-EDGE-HAS-PARENT-SURFACE" href="gts/gts-edges.html#GTS-EDGE-HAS-PARENT-SURFACE">
-<ANCHOR id ="GTS-EDGE-HAS-ANY-PARENT-SURFACE" href="gts/gts-edges.html#GTS-EDGE-HAS-ANY-PARENT-SURFACE">
-<ANCHOR id ="GTS-EDGE-IS-BOUNDARY" href="gts/gts-edges.html#GTS-EDGE-IS-BOUNDARY">
-<ANCHOR id ="GTS-EDGE-IS-CONTACT" href="gts/gts-edges.html#GTS-EDGE-IS-CONTACT">
-<ANCHOR id ="GTS-EDGE-BELONGS-TO-TETRAHEDRON" href="gts/gts-edges.html#GTS-EDGE-BELONGS-TO-TETRAHEDRON">
-<ANCHOR id ="GTS-EDGE-FACE-NUMBER" href="gts/gts-edges.html#GTS-EDGE-FACE-NUMBER">
-<ANCHOR id ="GTSENCROACHFUNC" href="gts/gts-edges.html#GTSENCROACHFUNC">
-<ANCHOR id ="GTS-EDGE-IS-ENCROACHED" href="gts/gts-edges.html#GTS-EDGE-IS-ENCROACHED">
-<ANCHOR id ="GTS-EDGES-MERGE" href="gts/gts-edges.html#GTS-EDGES-MERGE">
-<ANCHOR id ="GTS-EDGES-FROM-VERTICES" href="gts/gts-edges.html#GTS-EDGES-FROM-VERTICES">
-<ANCHOR id ="GTS-TRIANGLES" href="gts/gts-triangles.html">
-<ANCHOR id ="GTS-TRIANGLE-CLASS-CAPS" href="gts/gts-triangles.html#GTS-TRIANGLE-CLASS-CAPS">
-<ANCHOR id ="GTS-TRIANGLE-CAPS" href="gts/gts-triangles.html#GTS-TRIANGLE-CAPS">
-<ANCHOR id ="GTS-IS-TRIANGLE-CAPS" href="gts/gts-triangles.html#GTS-IS-TRIANGLE-CAPS">
-<ANCHOR id ="GTSTRIANGLECLASS" href="gts/gts-triangles.html#GTSTRIANGLECLASS">
-<ANCHOR id ="GTSTRIANGLE" href="gts/gts-triangles.html#GTSTRIANGLE">
-<ANCHOR id ="GTS-TRIANGLE-CLASS" href="gts/gts-triangles.html#GTS-TRIANGLE-CLASS">
-<ANCHOR id ="GTS-TRIANGLE-NEW" href="gts/gts-triangles.html#GTS-TRIANGLE-NEW">
-<ANCHOR id ="GTS-TRIANGLE-SET" href="gts/gts-triangles.html#GTS-TRIANGLE-SET">
-<ANCHOR id ="GTS-TRIANGLE-AREA" href="gts/gts-triangles.html#GTS-TRIANGLE-AREA">
-<ANCHOR id ="GTS-TRIANGLE-PERIMETER" href="gts/gts-triangles.html#GTS-TRIANGLE-PERIMETER">
-<ANCHOR id ="GTS-TRIANGLE-QUALITY" href="gts/gts-triangles.html#GTS-TRIANGLE-QUALITY">
-<ANCHOR id ="GTS-TRIANGLE-NORMAL" href="gts/gts-triangles.html#GTS-TRIANGLE-NORMAL">
-<ANCHOR id ="GTS-TRIANGLE-REVERT" href="gts/gts-triangles.html#GTS-TRIANGLE-REVERT">
-<ANCHOR id ="GTS-TRIANGLE-ORIENTATION" href="gts/gts-triangles.html#GTS-TRIANGLE-ORIENTATION">
-<ANCHOR id ="GTS-TRIANGLE-IS-DUPLICATE" href="gts/gts-triangles.html#GTS-TRIANGLE-IS-DUPLICATE">
-<ANCHOR id ="GTS-TRIANGLES-ANGLE" href="gts/gts-triangles.html#GTS-TRIANGLES-ANGLE">
-<ANCHOR id ="GTS-TRIANGLES-ARE-COMPATIBLE" href="gts/gts-triangles.html#GTS-TRIANGLES-ARE-COMPATIBLE">
-<ANCHOR id ="GTS-TRIANGLE-ENCLOSING" href="gts/gts-triangles.html#GTS-TRIANGLE-ENCLOSING">
-<ANCHOR id ="GTS-TRIANGLES-COMMON-EDGE" href="gts/gts-triangles.html#GTS-TRIANGLES-COMMON-EDGE">
-<ANCHOR id ="GTS-TRIANGLE-NEIGHBOR-NUMBER" href="gts/gts-triangles.html#GTS-TRIANGLE-NEIGHBOR-NUMBER">
-<ANCHOR id ="GTS-TRIANGLE-NEIGHBORS" href="gts/gts-triangles.html#GTS-TRIANGLE-NEIGHBORS">
-<ANCHOR id ="GTS-TRIANGLE-VERTICES-EDGES" href="gts/gts-triangles.html#GTS-TRIANGLE-VERTICES-EDGES">
-<ANCHOR id ="GTS-TRIANGLE-VERTEX-OPPOSITE" href="gts/gts-triangles.html#GTS-TRIANGLE-VERTEX-OPPOSITE">
-<ANCHOR id ="GTS-TRIANGLE-EDGE-OPPOSITE" href="gts/gts-triangles.html#GTS-TRIANGLE-EDGE-OPPOSITE">
-<ANCHOR id ="GTS-TRIANGLE-VERTICES" href="gts/gts-triangles.html#GTS-TRIANGLE-VERTICES">
-<ANCHOR id ="GTS-TRIANGLE-VERTEX" href="gts/gts-triangles.html#GTS-TRIANGLE-VERTEX">
-<ANCHOR id ="GTS-TRIANGLE-IS-OK" href="gts/gts-triangles.html#GTS-TRIANGLE-IS-OK">
-<ANCHOR id ="GTS-TRIANGLE-USE-EDGES" href="gts/gts-triangles.html#GTS-TRIANGLE-USE-EDGES">
-<ANCHOR id ="GTS-TRIANGLE-CIRCUMCIRCLE-CENTER" href="gts/gts-triangles.html#GTS-TRIANGLE-CIRCUMCIRCLE-CENTER">
-<ANCHOR id ="GTS-TRIANGLE-IS-STABBED" href="gts/gts-triangles.html#GTS-TRIANGLE-IS-STABBED">
-<ANCHOR id ="GTS-TRIANGLES-ARE-FOLDED" href="gts/gts-triangles.html#GTS-TRIANGLES-ARE-FOLDED">
-<ANCHOR id ="GTS-TRIANGLES-FROM-EDGES" href="gts/gts-triangles.html#GTS-TRIANGLES-FROM-EDGES">
-<ANCHOR id ="GTS-FACES" href="gts/gts-faces.html">
-<ANCHOR id ="GTS-FACE-CLASS-CAPS" href="gts/gts-faces.html#GTS-FACE-CLASS-CAPS">
-<ANCHOR id ="GTS-FACE-CAPS" href="gts/gts-faces.html#GTS-FACE-CAPS">
-<ANCHOR id ="GTS-IS-FACE-CAPS" href="gts/gts-faces.html#GTS-IS-FACE-CAPS">
-<ANCHOR id ="GTSFACECLASS" href="gts/gts-faces.html#GTSFACECLASS">
-<ANCHOR id ="GTSFACE" href="gts/gts-faces.html#GTSFACE">
-<ANCHOR id ="GTS-FACE-CLASS" href="gts/gts-faces.html#GTS-FACE-CLASS">
-<ANCHOR id ="GTS-FACE-NEW" href="gts/gts-faces.html#GTS-FACE-NEW">
-<ANCHOR id ="GTS-FACE-HAS-PARENT-SURFACE" href="gts/gts-faces.html#GTS-FACE-HAS-PARENT-SURFACE">
-<ANCHOR id ="GTS-FACE-NEIGHBOR-NUMBER" href="gts/gts-faces.html#GTS-FACE-NEIGHBOR-NUMBER">
-<ANCHOR id ="GTS-FACE-NEIGHBORS" href="gts/gts-faces.html#GTS-FACE-NEIGHBORS">
-<ANCHOR id ="GTS-FACE-FOREACH-NEIGHBOR" href="gts/gts-faces.html#GTS-FACE-FOREACH-NEIGHBOR">
-<ANCHOR id ="GTS-FACES-FROM-EDGES" href="gts/gts-faces.html#GTS-FACES-FROM-EDGES">
-<ANCHOR id ="GTS-SURFACES" href="gts/gts-surfaces.html">
-<ANCHOR id ="GTS-SURFACE-CLASS-CAPS" href="gts/gts-surfaces.html#GTS-SURFACE-CLASS-CAPS">
-<ANCHOR id ="GTS-SURFACE-CAPS" href="gts/gts-surfaces.html#GTS-SURFACE-CAPS">
-<ANCHOR id ="GTS-IS-SURFACE-CAPS" href="gts/gts-surfaces.html#GTS-IS-SURFACE-CAPS">
-<ANCHOR id ="GTSSURFACECLASS" href="gts/gts-surfaces.html#GTSSURFACECLASS">
-<ANCHOR id ="GTSSURFACE" href="gts/gts-surfaces.html#GTSSURFACE">
-<ANCHOR id ="GTS-SURFACE-CLASS" href="gts/gts-surfaces.html#GTS-SURFACE-CLASS">
-<ANCHOR id ="GTS-SURFACE-NEW" href="gts/gts-surfaces.html#GTS-SURFACE-NEW">
-<ANCHOR id ="GTS-SURFACE-ADD-FACE" href="gts/gts-surfaces.html#GTS-SURFACE-ADD-FACE">
-<ANCHOR id ="GTS-SURFACE-REMOVE-FACE" href="gts/gts-surfaces.html#GTS-SURFACE-REMOVE-FACE">
-<ANCHOR id ="GTS-SURFACE-COPY" href="gts/gts-surfaces.html#GTS-SURFACE-COPY">
-<ANCHOR id ="GTS-SURFACE-MERGE" href="gts/gts-surfaces.html#GTS-SURFACE-MERGE">
-<ANCHOR id ="GTS-SURFACE-READ" href="gts/gts-surfaces.html#GTS-SURFACE-READ">
-<ANCHOR id ="GTS-SURFACE-IS-MANIFOLD" href="gts/gts-surfaces.html#GTS-SURFACE-IS-MANIFOLD">
-<ANCHOR id ="GTS-SURFACE-IS-ORIENTABLE" href="gts/gts-surfaces.html#GTS-SURFACE-IS-ORIENTABLE">
-<ANCHOR id ="GTS-SURFACE-IS-CLOSED" href="gts/gts-surfaces.html#GTS-SURFACE-IS-CLOSED">
-<ANCHOR id ="GTS-SURFACE-VERTEX-NUMBER" href="gts/gts-surfaces.html#GTS-SURFACE-VERTEX-NUMBER">
-<ANCHOR id ="GTS-SURFACE-EDGE-NUMBER" href="gts/gts-surfaces.html#GTS-SURFACE-EDGE-NUMBER">
-<ANCHOR id ="GTS-SURFACE-FACE-NUMBER" href="gts/gts-surfaces.html#GTS-SURFACE-FACE-NUMBER">
-<ANCHOR id ="GTS-SURFACE-BOUNDARY" href="gts/gts-surfaces.html#GTS-SURFACE-BOUNDARY">
-<ANCHOR id ="GTS-SURFACE-AREA" href="gts/gts-surfaces.html#GTS-SURFACE-AREA">
-<ANCHOR id ="GTS-SURFACE-VOLUME" href="gts/gts-surfaces.html#GTS-SURFACE-VOLUME">
-<ANCHOR id ="GTSSURFACESTATS" href="gts/gts-surfaces.html#GTSSURFACESTATS">
-<ANCHOR id ="GTSSURFACEQUALITYSTATS" href="gts/gts-surfaces.html#GTSSURFACEQUALITYSTATS">
-<ANCHOR id ="GTS-SURFACE-STATS" href="gts/gts-surfaces.html#GTS-SURFACE-STATS">
-<ANCHOR id ="GTS-SURFACE-QUALITY-STATS" href="gts/gts-surfaces.html#GTS-SURFACE-QUALITY-STATS">
-<ANCHOR id ="GTS-SURFACE-PRINT-STATS" href="gts/gts-surfaces.html#GTS-SURFACE-PRINT-STATS">
-<ANCHOR id ="GTS-SURFACE-WRITE" href="gts/gts-surfaces.html#GTS-SURFACE-WRITE">
-<ANCHOR id ="GTS-SURFACE-WRITE-OOGL" href="gts/gts-surfaces.html#GTS-SURFACE-WRITE-OOGL">
-<ANCHOR id ="GTS-SURFACE-WRITE-OOGL-BOUNDARY" href="gts/gts-surfaces.html#GTS-SURFACE-WRITE-OOGL-BOUNDARY">
-<ANCHOR id ="GTSFUNC" href="gts/gts-surfaces.html#GTSFUNC">
-<ANCHOR id ="GTS-SURFACE-FOREACH-VERTEX" href="gts/gts-surfaces.html#GTS-SURFACE-FOREACH-VERTEX">
-<ANCHOR id ="GTS-SURFACE-FOREACH-EDGE" href="gts/gts-surfaces.html#GTS-SURFACE-FOREACH-EDGE">
-<ANCHOR id ="GTS-SURFACE-FOREACH-FACE" href="gts/gts-surfaces.html#GTS-SURFACE-FOREACH-FACE">
-<ANCHOR id ="GTS-SURFACE-FOREACH-FACE-REMOVE" href="gts/gts-surfaces.html#GTS-SURFACE-FOREACH-FACE-REMOVE">
-<ANCHOR id ="GTSSURFACETRAVERSE" href="gts/gts-surfaces.html#GTSSURFACETRAVERSE">
-<ANCHOR id ="GTS-SURFACE-TRAVERSE-NEW" href="gts/gts-surfaces.html#GTS-SURFACE-TRAVERSE-NEW">
-<ANCHOR id ="GTS-SURFACE-TRAVERSE-NEXT" href="gts/gts-surfaces.html#GTS-SURFACE-TRAVERSE-NEXT">
-<ANCHOR id ="GTS-SURFACE-TRAVERSE-DESTROY" href="gts/gts-surfaces.html#GTS-SURFACE-TRAVERSE-DESTROY">
-<ANCHOR id ="GTS-SURFACE-DISTANCE" href="gts/gts-surfaces.html#GTS-SURFACE-DISTANCE">
-<ANCHOR id ="GTS-SURFACE-STRIP" href="gts/gts-surfaces.html#GTS-SURFACE-STRIP">
-<ANCHOR id ="GTS-KD-TREES" href="gts/gts-kd-trees.html">
-<ANCHOR id ="GTS-KDTREE-NEW" href="gts/gts-kd-trees.html#GTS-KDTREE-NEW">
-<ANCHOR id ="GTS-KDTREE-RANGE" href="gts/gts-kd-trees.html#GTS-KDTREE-RANGE">
-<ANCHOR id ="GTS-KDTREE-DESTROY" href="gts/gts-kd-trees.html#GTS-KDTREE-DESTROY">
-<ANCHOR id ="GTS-BOUNDING-BOXES-TREES" href="gts/gts-bounding-boxes-trees.html">
-<ANCHOR id ="GTS-BBOX-CLASS-CAPS" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-CLASS-CAPS">
-<ANCHOR id ="GTS-BBOX-CAPS" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-CAPS">
-<ANCHOR id ="GTS-IS-BBOX-CAPS" href="gts/gts-bounding-boxes-trees.html#GTS-IS-BBOX-CAPS">
-<ANCHOR id ="GTSBBOXCLASS" href="gts/gts-bounding-boxes-trees.html#GTSBBOXCLASS">
-<ANCHOR id ="GTSBBOX" href="gts/gts-bounding-boxes-trees.html#GTSBBOX">
-<ANCHOR id ="GTS-BBOX-CLASS" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-CLASS">
-<ANCHOR id ="GTS-BBOX-NEW" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-NEW">
-<ANCHOR id ="GTS-BBOX-SET" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-SET">
-<ANCHOR id ="GTS-BBOX-SEGMENT" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-SEGMENT">
-<ANCHOR id ="GTS-BBOX-TRIANGLE" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-TRIANGLE">
-<ANCHOR id ="GTS-BBOX-SURFACE" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-SURFACE">
-<ANCHOR id ="GTS-BBOX-POINTS" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-POINTS">
-<ANCHOR id ="GTS-BBOX-BBOXES" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-BBOXES">
-<ANCHOR id ="GTS-BBOX-DRAW" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-DRAW">
-<ANCHOR id ="GTS-BBOX-POINT-IS-INSIDE" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-POINT-IS-INSIDE">
-<ANCHOR id ="GTS-BBOXES-ARE-OVERLAPPING" href="gts/gts-bounding-boxes-trees.html#GTS-BBOXES-ARE-OVERLAPPING">
-<ANCHOR id ="GTS-BBOX-DIAGONAL2" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-DIAGONAL2">
-<ANCHOR id ="GTS-BBOX-POINT-DISTANCE2" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-POINT-DISTANCE2">
-<ANCHOR id ="GTS-BBOX-IS-STABBED" href="gts/gts-bounding-boxes-trees.html#GTS-BBOX-IS-STABBED">
-<ANCHOR id ="GTSBBTREETRAVERSEFUNC" href="gts/gts-bounding-boxes-trees.html#GTSBBTREETRAVERSEFUNC">
-<ANCHOR id ="GTS-BB-TREE-NEW" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-NEW">
-<ANCHOR id ="GTS-BB-TREE-SURFACE" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE">
-<ANCHOR id ="GTS-BB-TREE-OVERLAP" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-OVERLAP">
-<ANCHOR id ="GTS-BB-TREE-IS-OVERLAPPING" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-IS-OVERLAPPING">
-<ANCHOR id ="GTS-BB-TREE-TRAVERSE-OVERLAPPING" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-TRAVERSE-OVERLAPPING">
-<ANCHOR id ="GTS-BB-TREE-DRAW" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-DRAW">
-<ANCHOR id ="GTS-BB-TREE-DESTROY" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-DESTROY">
-<ANCHOR id ="GTSBBOXDISTFUNC" href="gts/gts-bounding-boxes-trees.html#GTSBBOXDISTFUNC">
-<ANCHOR id ="GTSBBOXCLOSESTFUNC" href="gts/gts-bounding-boxes-trees.html#GTSBBOXCLOSESTFUNC">
-<ANCHOR id ="GTS-BB-TREE-POINT-DISTANCE" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-DISTANCE">
-<ANCHOR id ="GTS-BB-TREE-POINT-CLOSEST" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-CLOSEST">
-<ANCHOR id ="GTS-BB-TREE-SEGMENT-DISTANCE" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-SEGMENT-DISTANCE">
-<ANCHOR id ="GTS-BB-TREE-TRIANGLE-DISTANCE" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-TRIANGLE-DISTANCE">
-<ANCHOR id ="GTS-BB-TREE-POINT-CLOSEST-BBOXES" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-POINT-CLOSEST-BBOXES">
-<ANCHOR id ="GTS-BB-TREE-SURFACE-BOUNDARY-DISTANCE" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-BOUNDARY-DISTANCE">
-<ANCHOR id ="GTS-BB-TREE-SURFACE-DISTANCE" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-SURFACE-DISTANCE">
-<ANCHOR id ="GTS-BB-TREE-STABBED" href="gts/gts-bounding-boxes-trees.html#GTS-BB-TREE-STABBED">
-<ANCHOR id ="GTS-BOOLEAN-OPERATIONS" href="gts/gts-boolean-operations.html">
-<ANCHOR id ="GTS-SURFACE-INTER-CLASS-CAPS" href="gts/gts-boolean-operations.html#GTS-SURFACE-INTER-CLASS-CAPS">
-<ANCHOR id ="GTS-SURFACE-INTER-CAPS" href="gts/gts-boolean-operations.html#GTS-SURFACE-INTER-CAPS">
-<ANCHOR id ="GTS-IS-SURFACE-INTER-CAPS" href="gts/gts-boolean-operations.html#GTS-IS-SURFACE-INTER-CAPS">
-<ANCHOR id ="GTSSURFACEINTERCLASS" href="gts/gts-boolean-operations.html#GTSSURFACEINTERCLASS">
-<ANCHOR id ="GTSSURFACEINTER" href="gts/gts-boolean-operations.html#GTSSURFACEINTER">
-<ANCHOR id ="GTS-SURFACE-INTER-CLASS" href="gts/gts-boolean-operations.html#GTS-SURFACE-INTER-CLASS">
-<ANCHOR id ="GTS-SURFACE-INTER-NEW" href="gts/gts-boolean-operations.html#GTS-SURFACE-INTER-NEW">
-<ANCHOR id ="GTS-SURFACE-INTER-CHECK" href="gts/gts-boolean-operations.html#GTS-SURFACE-INTER-CHECK">
-<ANCHOR id ="GTSBOOLEANOPERATION" href="gts/gts-boolean-operations.html#GTSBOOLEANOPERATION">
-<ANCHOR id ="GTS-SURFACE-INTER-BOOLEAN" href="gts/gts-boolean-operations.html#GTS-SURFACE-INTER-BOOLEAN">
-<ANCHOR id ="GTS-SURFACE-SIMPLIFICATION-AND-REFINEMENT" href="gts/gts-surface-simplification-and-refinement.html">
-<ANCHOR id ="GTS-SURFACE-REFINE" href="gts/gts-surface-simplification-and-refinement.html#GTS-SURFACE-REFINE">
-<ANCHOR id ="GTSCOARSENFUNC" href="gts/gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC">
-<ANCHOR id ="GTSSTOPFUNC" href="gts/gts-surface-simplification-and-refinement.html#GTSSTOPFUNC">
-<ANCHOR id ="GTS-SURFACE-COARSEN" href="gts/gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN">
-<ANCHOR id ="GTS-COARSEN-STOP-NUMBER" href="gts/gts-surface-simplification-and-refinement.html#GTS-COARSEN-STOP-NUMBER">
-<ANCHOR id ="GTS-COARSEN-STOP-COST" href="gts/gts-surface-simplification-and-refinement.html#GTS-COARSEN-STOP-COST">
-<ANCHOR id ="GTSVOLUMEOPTIMIZEDPARAMS" href="gts/gts-surface-simplification-and-refinement.html#GTSVOLUMEOPTIMIZEDPARAMS">
-<ANCHOR id ="GTS-VOLUME-OPTIMIZED-VERTEX" href="gts/gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-VERTEX">
-<ANCHOR id ="GTS-VOLUME-OPTIMIZED-COST" href="gts/gts-surface-simplification-and-refinement.html#GTS-VOLUME-OPTIMIZED-COST">
-<ANCHOR id ="GTS-EDGE-COLLAPSE-IS-VALID" href="gts/gts-surface-simplification-and-refinement.html#GTS-EDGE-COLLAPSE-IS-VALID">
-<ANCHOR id ="GTS-EDGE-COLLAPSE-CREATES-FOLD" href="gts/gts-surface-simplification-and-refinement.html#GTS-EDGE-COLLAPSE-CREATES-FOLD">
-<ANCHOR id ="GTS-OUT-OF-CORE-SIMPLIFICATION" href="gts/gts-out-of-core-simplification.html">
-<ANCHOR id ="GTS-CLUSTER-CLASS-CAPS" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-CLASS-CAPS">
-<ANCHOR id ="GTS-CLUSTER-CAPS" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-CAPS">
-<ANCHOR id ="GTS-IS-CLUSTER-CAPS" href="gts/gts-out-of-core-simplification.html#GTS-IS-CLUSTER-CAPS">
-<ANCHOR id ="GTSCLUSTERCLASS" href="gts/gts-out-of-core-simplification.html#GTSCLUSTERCLASS">
-<ANCHOR id ="GTSCLUSTER" href="gts/gts-out-of-core-simplification.html#GTSCLUSTER">
-<ANCHOR id ="GTSCLUSTERID" href="gts/gts-out-of-core-simplification.html#GTSCLUSTERID">
-<ANCHOR id ="GTS-CLUSTER-CLASS" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-CLASS">
-<ANCHOR id ="GTS-CLUSTER-NEW" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-NEW">
-<ANCHOR id ="GTS-CLUSTER-ADD" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-ADD">
-<ANCHOR id ="GTS-CLUSTER-UPDATE" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-UPDATE">
-<ANCHOR id ="GTS-CLUSTER-GRID-CLASS-CAPS" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-CLASS-CAPS">
-<ANCHOR id ="GTS-CLUSTER-GRID-CAPS" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-CAPS">
-<ANCHOR id ="GTS-IS-CLUSTER-GRID-CAPS" href="gts/gts-out-of-core-simplification.html#GTS-IS-CLUSTER-GRID-CAPS">
-<ANCHOR id ="GTSCLUSTERGRIDCLASS" href="gts/gts-out-of-core-simplification.html#GTSCLUSTERGRIDCLASS">
-<ANCHOR id ="GTSCLUSTERGRID" href="gts/gts-out-of-core-simplification.html#GTSCLUSTERGRID">
-<ANCHOR id ="GTS-CLUSTER-GRID-CLASS" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-CLASS">
-<ANCHOR id ="GTS-CLUSTER-GRID-NEW" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-NEW">
-<ANCHOR id ="GTS-CLUSTER-GRID-ADD-TRIANGLE" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-ADD-TRIANGLE">
-<ANCHOR id ="GTS-CLUSTER-GRID-UPDATE" href="gts/gts-out-of-core-simplification.html#GTS-CLUSTER-GRID-UPDATE">
-<ANCHOR id ="GTS-ISOSURFACES-FROM-3D-FUNCTIONS" href="gts/gts-isosurfaces-from-3d-functions.html">
-<ANCHOR id ="GTSCARTESIANGRID" href="gts/gts-isosurfaces-from-3d-functions.html#GTSCARTESIANGRID">
-<ANCHOR id ="GTSGRIDPLANE" href="gts/gts-isosurfaces-from-3d-functions.html#GTSGRIDPLANE">
-<ANCHOR id ="GTS-GRID-PLANE-NEW" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-GRID-PLANE-NEW">
-<ANCHOR id ="GTS-GRID-PLANE-DESTROY" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-GRID-PLANE-DESTROY">
-<ANCHOR id ="GTSISOSLICE" href="gts/gts-isosurfaces-from-3d-functions.html#GTSISOSLICE">
-<ANCHOR id ="GTS-ISO-SLICE-NEW" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-NEW">
-<ANCHOR id ="GTS-ISO-SLICE-FILL" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-FILL">
-<ANCHOR id ="GTS-ISO-SLICE-FILL-CARTESIAN" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-FILL-CARTESIAN">
-<ANCHOR id ="GTS-ISO-SLICE-DESTROY" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-ISO-SLICE-DESTROY">
-<ANCHOR id ="GTS-ISOSURFACE-SLICE" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-SLICE">
-<ANCHOR id ="GTSISOCARTESIANFUNC" href="gts/gts-isosurfaces-from-3d-functions.html#GTSISOCARTESIANFUNC">
-<ANCHOR id ="GTS-ISOSURFACE-CARTESIAN" href="gts/gts-isosurfaces-from-3d-functions.html#GTS-ISOSURFACE-CARTESIAN">
-<ANCHOR id ="GTS-DELAUNAY-AND-CONSTRAINED-DELAUNAY-TRIANGULATIONS" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html">
-<ANCHOR id ="GTS-CONSTRAINT-CLASS-CAPS" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-CONSTRAINT-CLASS-CAPS">
-<ANCHOR id ="GTS-CONSTRAINT-CAPS" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-CONSTRAINT-CAPS">
-<ANCHOR id ="GTS-IS-CONSTRAINT-CAPS" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-IS-CONSTRAINT-CAPS">
-<ANCHOR id ="GTSCONSTRAINTCLASS" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINTCLASS">
-<ANCHOR id ="GTSCONSTRAINT" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTSCONSTRAINT">
-<ANCHOR id ="GTS-CONSTRAINT-CLASS" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-CONSTRAINT-CLASS">
-<ANCHOR id ="GTS-POINT-LOCATE" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-POINT-LOCATE">
-<ANCHOR id ="GTS-DELAUNAY-ADD-VERTEX" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-ADD-VERTEX">
-<ANCHOR id ="GTS-DELAUNAY-ADD-VERTEX-TO-FACE" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-ADD-VERTEX-TO-FACE">
-<ANCHOR id ="GTS-DELAUNAY-REMOVE-VERTEX" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REMOVE-VERTEX">
-<ANCHOR id ="GTS-DELAUNAY-ADD-CONSTRAINT" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-ADD-CONSTRAINT">
-<ANCHOR id ="GTS-DELAUNAY-CHECK" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-CHECK">
-<ANCHOR id ="GTS-DELAUNAY-REMOVE-HULL" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REMOVE-HULL">
-<ANCHOR id ="GTS-DELAUNAY-CONFORM" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-CONFORM">
-<ANCHOR id ="GTS-DELAUNAY-REFINE" href="gts/gts-delaunay-and-constrained-delaunay-triangulations.html#GTS-DELAUNAY-REFINE">
-<ANCHOR id ="GTS-VERTEX-SPLIT" href="gts/gts-vertex-split.html">
-<ANCHOR id ="GTS-SPLIT-CLASS-CAPS" href="gts/gts-vertex-split.html#GTS-SPLIT-CLASS-CAPS">
-<ANCHOR id ="GTS-SPLIT-CAPS" href="gts/gts-vertex-split.html#GTS-SPLIT-CAPS">
-<ANCHOR id ="GTS-IS-SPLIT-CAPS" href="gts/gts-vertex-split.html#GTS-IS-SPLIT-CAPS">
-<ANCHOR id ="GTS-SPLIT-V1-CAPS" href="gts/gts-vertex-split.html#GTS-SPLIT-V1-CAPS">
-<ANCHOR id ="GTS-SPLIT-V2-CAPS" href="gts/gts-vertex-split.html#GTS-SPLIT-V2-CAPS">
-<ANCHOR id ="GTSSPLITCLASS" href="gts/gts-vertex-split.html#GTSSPLITCLASS">
-<ANCHOR id ="GTSSPLITCFACE" href="gts/gts-vertex-split.html#GTSSPLITCFACE">
-<ANCHOR id ="GTSSPLIT" href="gts/gts-vertex-split.html#GTSSPLIT">
-<ANCHOR id ="GTS-SPLIT-CLASS" href="gts/gts-vertex-split.html#GTS-SPLIT-CLASS">
-<ANCHOR id ="GTS-SPLIT-NEW" href="gts/gts-vertex-split.html#GTS-SPLIT-NEW">
-<ANCHOR id ="GTS-SPLIT-COLLAPSE" href="gts/gts-vertex-split.html#GTS-SPLIT-COLLAPSE">
-<ANCHOR id ="GTS-SPLIT-EXPAND" href="gts/gts-vertex-split.html#GTS-SPLIT-EXPAND">
-<ANCHOR id ="GTS-SPLIT-HEIGHT" href="gts/gts-vertex-split.html#GTS-SPLIT-HEIGHT">
-<ANCHOR id ="GTSSPLITTRAVERSEFUNC" href="gts/gts-vertex-split.html#GTSSPLITTRAVERSEFUNC">
-<ANCHOR id ="GTS-SPLIT-TRAVERSE" href="gts/gts-vertex-split.html#GTS-SPLIT-TRAVERSE">
-<ANCHOR id ="GTS-PROGRESSIVE-SURFACES" href="gts/gts-progressive-surfaces.html">
-<ANCHOR id ="GTS-PSURFACE-CLASS-CAPS" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-CLASS-CAPS">
-<ANCHOR id ="GTS-PSURFACE-CAPS" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-CAPS">
-<ANCHOR id ="GTS-IS-PSURFACE-CAPS" href="gts/gts-progressive-surfaces.html#GTS-IS-PSURFACE-CAPS">
-<ANCHOR id ="GTS-PSURFACE-IS-CLOSED-CAPS" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-IS-CLOSED-CAPS">
-<ANCHOR id ="GTSPSURFACECLASS" href="gts/gts-progressive-surfaces.html#GTSPSURFACECLASS">
-<ANCHOR id ="GTSPSURFACE" href="gts/gts-progressive-surfaces.html#GTSPSURFACE">
-<ANCHOR id ="GTS-PSURFACE-CLASS" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-CLASS">
-<ANCHOR id ="GTS-PSURFACE-NEW" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-NEW">
-<ANCHOR id ="GTS-PSURFACE-ADD-VERTEX" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-ADD-VERTEX">
-<ANCHOR id ="GTS-PSURFACE-REMOVE-VERTEX" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-REMOVE-VERTEX">
-<ANCHOR id ="GTS-PSURFACE-SET-VERTEX-NUMBER" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-SET-VERTEX-NUMBER">
-<ANCHOR id ="GTS-PSURFACE-GET-VERTEX-NUMBER" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-GET-VERTEX-NUMBER">
-<ANCHOR id ="GTS-PSURFACE-MIN-VERTEX-NUMBER" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-MIN-VERTEX-NUMBER">
-<ANCHOR id ="GTS-PSURFACE-MAX-VERTEX-NUMBER" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-MAX-VERTEX-NUMBER">
-<ANCHOR id ="GTS-PSURFACE-FOREACH-VERTEX" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-FOREACH-VERTEX">
-<ANCHOR id ="GTS-PSURFACE-OPEN" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-OPEN">
-<ANCHOR id ="GTS-PSURFACE-READ-VERTEX" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-READ-VERTEX">
-<ANCHOR id ="GTS-PSURFACE-CLOSE" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE">
-<ANCHOR id ="GTS-PSURFACE-WRITE" href="gts/gts-progressive-surfaces.html#GTS-PSURFACE-WRITE">
-<ANCHOR id ="GTS-HIERARCHICAL-VERTEX-SPLIT" href="gts/gts-hierarchical-vertex-split.html">
-<ANCHOR id ="GTS-HSPLIT-CLASS-CAPS" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-CLASS-CAPS">
-<ANCHOR id ="GTS-HSPLIT-CAPS" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-CAPS">
-<ANCHOR id ="GTS-IS-HSPLIT-CAPS" href="gts/gts-hierarchical-vertex-split.html#GTS-IS-HSPLIT-CAPS">
-<ANCHOR id ="GTSHSPLITCLASS" href="gts/gts-hierarchical-vertex-split.html#GTSHSPLITCLASS">
-<ANCHOR id ="GTSHSPLIT" href="gts/gts-hierarchical-vertex-split.html#GTSHSPLIT">
-<ANCHOR id ="GTS-HSPLIT-CLASS" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-CLASS">
-<ANCHOR id ="GTS-HSPLIT-NEW" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-NEW">
-<ANCHOR id ="GTS-HSPLIT-COLLAPSE" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-COLLAPSE">
-<ANCHOR id ="GTS-HSPLIT-EXPAND" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-EXPAND">
-<ANCHOR id ="GTS-HSPLIT-FORCE-EXPAND" href="gts/gts-hierarchical-vertex-split.html#GTS-HSPLIT-FORCE-EXPAND">
-<ANCHOR id ="GTS-HIERARCHICAL-SURFACES" href="gts/gts-hierarchical-surfaces.html">
-<ANCHOR id ="GTS-HSURFACE-CLASS-CAPS" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-CLASS-CAPS">
-<ANCHOR id ="GTS-HSURFACE-CAPS" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-CAPS">
-<ANCHOR id ="GTS-IS-HSURFACE-CAPS" href="gts/gts-hierarchical-surfaces.html#GTS-IS-HSURFACE-CAPS">
-<ANCHOR id ="GTSHSURFACECLASS" href="gts/gts-hierarchical-surfaces.html#GTSHSURFACECLASS">
-<ANCHOR id ="GTSHSURFACE" href="gts/gts-hierarchical-surfaces.html#GTSHSURFACE">
-<ANCHOR id ="GTS-HSURFACE-CLASS" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-CLASS">
-<ANCHOR id ="GTS-HSURFACE-NEW" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-NEW">
-<ANCHOR id ="GTS-HSURFACE-TRAVERSE" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-TRAVERSE">
-<ANCHOR id ="GTS-HSURFACE-HEIGHT" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-HEIGHT">
-<ANCHOR id ="GTS-HSURFACE-FOREACH" href="gts/gts-hierarchical-surfaces.html#GTS-HSURFACE-FOREACH">
-<ANCHOR id ="GTS-GRAPH-CLASS" href="gts/gts-graph-class.html">
-<ANCHOR id ="GTS-GNODE-CLASS-CAPS" href="gts/gts-graph-class.html#GTS-GNODE-CLASS-CAPS">
-<ANCHOR id ="GTS-GNODE-CAPS" href="gts/gts-graph-class.html#GTS-GNODE-CAPS">
-<ANCHOR id ="GTS-IS-GNODE-CAPS" href="gts/gts-graph-class.html#GTS-IS-GNODE-CAPS">
-<ANCHOR id ="GTS-GNODE-NEIGHBOR-CAPS" href="gts/gts-graph-class.html#GTS-GNODE-NEIGHBOR-CAPS">
-<ANCHOR id ="GTSGNODECLASS" href="gts/gts-graph-class.html#GTSGNODECLASS">
-<ANCHOR id ="GTSGNODE" href="gts/gts-graph-class.html#GTSGNODE">
-<ANCHOR id ="GTS-GNODE-CLASS" href="gts/gts-graph-class.html#GTS-GNODE-CLASS">
-<ANCHOR id ="GTS-GNODE-NEW" href="gts/gts-graph-class.html#GTS-GNODE-NEW">
-<ANCHOR id ="GTS-GNODE-DEGREE" href="gts/gts-graph-class.html#GTS-GNODE-DEGREE">
-<ANCHOR id ="GTS-GNODE-FOREACH-EDGE" href="gts/gts-graph-class.html#GTS-GNODE-FOREACH-EDGE">
-<ANCHOR id ="GTS-GNODE-FOREACH-NEIGHBOR" href="gts/gts-graph-class.html#GTS-GNODE-FOREACH-NEIGHBOR">
-<ANCHOR id ="GTS-GNODE-WEIGHT" href="gts/gts-graph-class.html#GTS-GNODE-WEIGHT">
-<ANCHOR id ="GTS-GNODE-MOVE-COST" href="gts/gts-graph-class.html#GTS-GNODE-MOVE-COST">
-<ANCHOR id ="GTS-GEDGE-CLASS-CAPS" href="gts/gts-graph-class.html#GTS-GEDGE-CLASS-CAPS">
-<ANCHOR id ="GTS-GEDGE-CAPS" href="gts/gts-graph-class.html#GTS-GEDGE-CAPS">
-<ANCHOR id ="GTS-IS-GEDGE-CAPS" href="gts/gts-graph-class.html#GTS-IS-GEDGE-CAPS">
-<ANCHOR id ="GTSGEDGECLASS" href="gts/gts-graph-class.html#GTSGEDGECLASS">
-<ANCHOR id ="GTSGEDGE" href="gts/gts-graph-class.html#GTSGEDGE">
-<ANCHOR id ="GTS-GEDGE-CLASS" href="gts/gts-graph-class.html#GTS-GEDGE-CLASS">
-<ANCHOR id ="GTS-GEDGE-NEW" href="gts/gts-graph-class.html#GTS-GEDGE-NEW">
-<ANCHOR id ="GTS-GEDGE-WEIGHT" href="gts/gts-graph-class.html#GTS-GEDGE-WEIGHT">
-<ANCHOR id ="GTS-GEDGE-CONNECTS" href="gts/gts-graph-class.html#GTS-GEDGE-CONNECTS">
-<ANCHOR id ="GTS-GRAPH-CLASS-CAPS" href="gts/gts-graph-class.html#GTS-GRAPH-CLASS-CAPS">
-<ANCHOR id ="GTS-GRAPH-CAPS" href="gts/gts-graph-class.html#GTS-GRAPH-CAPS">
-<ANCHOR id ="GTS-IS-GRAPH-CAPS" href="gts/gts-graph-class.html#GTS-IS-GRAPH-CAPS">
-<ANCHOR id ="GTSGRAPHCLASS" href="gts/gts-graph-class.html#GTSGRAPHCLASS">
-<ANCHOR id ="GTSGRAPH" href="gts/gts-graph-class.html#GTSGRAPH">
-<ANCHOR id ="GTS-GRAPH-CLASS" href="gts/gts-graph-class.html#GTS-GRAPH-CLASS">
-<ANCHOR id ="GTS-GRAPH-NEW" href="gts/gts-graph-class.html#GTS-GRAPH-NEW">
-<ANCHOR id ="GTS-GRAPH-READ" href="gts/gts-graph-class.html#GTS-GRAPH-READ">
-<ANCHOR id ="GTS-GRAPH-PRINT-STATS" href="gts/gts-graph-class.html#GTS-GRAPH-PRINT-STATS">
-<ANCHOR id ="GTS-GRAPH-FOREACH-EDGE" href="gts/gts-graph-class.html#GTS-GRAPH-FOREACH-EDGE">
-<ANCHOR id ="GTSGRAPHTRAVERSE" href="gts/gts-graph-class.html#GTSGRAPHTRAVERSE">
-<ANCHOR id ="GTSTRAVERSETYPE" href="gts/gts-graph-class.html#GTSTRAVERSETYPE">
-<ANCHOR id ="GTS-GRAPH-TRAVERSE-NEW" href="gts/gts-graph-class.html#GTS-GRAPH-TRAVERSE-NEW">
-<ANCHOR id ="GTS-GRAPH-TRAVERSE-NEXT" href="gts/gts-graph-class.html#GTS-GRAPH-TRAVERSE-NEXT">
-<ANCHOR id ="GTS-GRAPH-TRAVERSE-WHAT-NEXT" href="gts/gts-graph-class.html#GTS-GRAPH-TRAVERSE-WHAT-NEXT">
-<ANCHOR id ="GTS-GRAPH-TRAVERSE-DESTROY" href="gts/gts-graph-class.html#GTS-GRAPH-TRAVERSE-DESTROY">
-<ANCHOR id ="GTS-GRAPH-EDGES-CUT" href="gts/gts-graph-class.html#GTS-GRAPH-EDGES-CUT">
-<ANCHOR id ="GTS-GRAPH-EDGES-CUT-WEIGHT" href="gts/gts-graph-class.html#GTS-GRAPH-EDGES-CUT-WEIGHT">
-<ANCHOR id ="GTS-GRAPH-DISTANCE-SUM" href="gts/gts-graph-class.html#GTS-GRAPH-DISTANCE-SUM">
-<ANCHOR id ="GTS-GRAPH-FARTHEST" href="gts/gts-graph-class.html#GTS-GRAPH-FARTHEST">
-<ANCHOR id ="GTS-GRAPH-WEIGHT" href="gts/gts-graph-class.html#GTS-GRAPH-WEIGHT">
-<ANCHOR id ="GTS-FNODE-CLASS-CAPS" href="gts/gts-graph-class.html#GTS-FNODE-CLASS-CAPS">
-<ANCHOR id ="GTS-FNODE-CAPS" href="gts/gts-graph-class.html#GTS-FNODE-CAPS">
-<ANCHOR id ="GTS-IS-FNODE-CAPS" href="gts/gts-graph-class.html#GTS-IS-FNODE-CAPS">
-<ANCHOR id ="GTSFNODE" href="gts/gts-graph-class.html#GTSFNODE">
-<ANCHOR id ="GTSFNODECLASS" href="gts/gts-graph-class.html#GTSFNODECLASS">
-<ANCHOR id ="GTS-FNODE-CLASS" href="gts/gts-graph-class.html#GTS-FNODE-CLASS">
-<ANCHOR id ="GTS-FNODE-NEW" href="gts/gts-graph-class.html#GTS-FNODE-NEW">
-<ANCHOR id ="GTS-SURFACE-GRAPH-NEW" href="gts/gts-graph-class.html#GTS-SURFACE-GRAPH-NEW">
-<ANCHOR id ="GTS-SURFACE-GRAPH-SURFACE" href="gts/gts-graph-class.html#GTS-SURFACE-GRAPH-SURFACE">
-<ANCHOR id ="GTS-WEIGHTED-GRAPH" href="gts/gts-weighted-graph.html">
-<ANCHOR id ="GTS-WGEDGE-CLASS-CAPS" href="gts/gts-weighted-graph.html#GTS-WGEDGE-CLASS-CAPS">
-<ANCHOR id ="GTS-WGEDGE-CAPS" href="gts/gts-weighted-graph.html#GTS-WGEDGE-CAPS">
-<ANCHOR id ="GTS-IS-WGEDGE-CAPS" href="gts/gts-weighted-graph.html#GTS-IS-WGEDGE-CAPS">
-<ANCHOR id ="GTSWGEDGECLASS" href="gts/gts-weighted-graph.html#GTSWGEDGECLASS">
-<ANCHOR id ="GTSWGEDGE" href="gts/gts-weighted-graph.html#GTSWGEDGE">
-<ANCHOR id ="GTS-WGEDGE-CLASS" href="gts/gts-weighted-graph.html#GTS-WGEDGE-CLASS">
-<ANCHOR id ="GTS-WGEDGE-NEW" href="gts/gts-weighted-graph.html#GTS-WGEDGE-NEW">
-<ANCHOR id ="GTS-WGNODE-CLASS-CAPS" href="gts/gts-weighted-graph.html#GTS-WGNODE-CLASS-CAPS">
-<ANCHOR id ="GTS-WGNODE-CAPS" href="gts/gts-weighted-graph.html#GTS-WGNODE-CAPS">
-<ANCHOR id ="GTS-IS-WGNODE-CAPS" href="gts/gts-weighted-graph.html#GTS-IS-WGNODE-CAPS">
-<ANCHOR id ="GTSWGNODECLASS" href="gts/gts-weighted-graph.html#GTSWGNODECLASS">
-<ANCHOR id ="GTSWGNODE" href="gts/gts-weighted-graph.html#GTSWGNODE">
-<ANCHOR id ="GTS-WGNODE-CLASS" href="gts/gts-weighted-graph.html#GTS-WGNODE-CLASS">
-<ANCHOR id ="GTS-WGNODE-NEW" href="gts/gts-weighted-graph.html#GTS-WGNODE-NEW">
-<ANCHOR id ="GTS-WGRAPH-CLASS-CAPS" href="gts/gts-weighted-graph.html#GTS-WGRAPH-CLASS-CAPS">
-<ANCHOR id ="GTS-WGRAPH-CAPS" href="gts/gts-weighted-graph.html#GTS-WGRAPH-CAPS">
-<ANCHOR id ="GTS-IS-WGRAPH-CAPS" href="gts/gts-weighted-graph.html#GTS-IS-WGRAPH-CAPS">
-<ANCHOR id ="GTSWGRAPHCLASS" href="gts/gts-weighted-graph.html#GTSWGRAPHCLASS">
-<ANCHOR id ="GTSWGRAPH" href="gts/gts-weighted-graph.html#GTSWGRAPH">
-<ANCHOR id ="GTS-WGRAPH-CLASS" href="gts/gts-weighted-graph.html#GTS-WGRAPH-CLASS">
-<ANCHOR id ="GTS-WGRAPH-WEIGHT-MAX" href="gts/gts-weighted-graph.html#GTS-WGRAPH-WEIGHT-MAX">
-<ANCHOR id ="GTS-PROGRESSIVE-GRAPH" href="gts/gts-progressive-graph.html">
-<ANCHOR id ="GTS-GNODE-SPLIT-CLASS-CAPS" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-CLASS-CAPS">
-<ANCHOR id ="GTS-GNODE-SPLIT-CAPS" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-CAPS">
-<ANCHOR id ="GTS-IS-GNODE-SPLIT-CAPS" href="gts/gts-progressive-graph.html#GTS-IS-GNODE-SPLIT-CAPS">
-<ANCHOR id ="GTS-GNODE-SPLIT-N1-CAPS" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-N1-CAPS">
-<ANCHOR id ="GTS-GNODE-SPLIT-N2-CAPS" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-N2-CAPS">
-<ANCHOR id ="GTSGNODESPLITCLASS" href="gts/gts-progressive-graph.html#GTSGNODESPLITCLASS">
-<ANCHOR id ="GTSGNODESPLIT" href="gts/gts-progressive-graph.html#GTSGNODESPLIT">
-<ANCHOR id ="GTS-GNODE-SPLIT-CLASS" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-CLASS">
-<ANCHOR id ="GTS-GNODE-SPLIT-NEW" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-NEW">
-<ANCHOR id ="GTS-GNODE-SPLIT-COLLAPSE" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-COLLAPSE">
-<ANCHOR id ="GTS-GNODE-SPLIT-EXPAND" href="gts/gts-progressive-graph.html#GTS-GNODE-SPLIT-EXPAND">
-<ANCHOR id ="GTS-PGRAPH-CLASS-CAPS" href="gts/gts-progressive-graph.html#GTS-PGRAPH-CLASS-CAPS">
-<ANCHOR id ="GTS-PGRAPH-CAPS" href="gts/gts-progressive-graph.html#GTS-PGRAPH-CAPS">
-<ANCHOR id ="GTS-IS-PGRAPH-CAPS" href="gts/gts-progressive-graph.html#GTS-IS-PGRAPH-CAPS">
-<ANCHOR id ="GTSPGRAPHCLASS" href="gts/gts-progressive-graph.html#GTSPGRAPHCLASS">
-<ANCHOR id ="GTSPGRAPH" href="gts/gts-progressive-graph.html#GTSPGRAPH">
-<ANCHOR id ="GTS-PGRAPH-CLASS" href="gts/gts-progressive-graph.html#GTS-PGRAPH-CLASS">
-<ANCHOR id ="GTS-PGRAPH-NEW" href="gts/gts-progressive-graph.html#GTS-PGRAPH-NEW">
-<ANCHOR id ="GTS-PGRAPH-ADD-NODE" href="gts/gts-progressive-graph.html#GTS-PGRAPH-ADD-NODE">
-<ANCHOR id ="GTS-PGRAPH-REMOVE-NODE" href="gts/gts-progressive-graph.html#GTS-PGRAPH-REMOVE-NODE">
-<ANCHOR id ="GTS-PGRAPH-DOWN" href="gts/gts-progressive-graph.html#GTS-PGRAPH-DOWN">
-<ANCHOR id ="GTS-PGRAPH-SET-NODE-NUMBER" href="gts/gts-progressive-graph.html#GTS-PGRAPH-SET-NODE-NUMBER">
-<ANCHOR id ="GTS-PGRAPH-GET-NODE-NUMBER" href="gts/gts-progressive-graph.html#GTS-PGRAPH-GET-NODE-NUMBER">
-<ANCHOR id ="GTS-PGRAPH-MAX-NODE-NUMBER" href="gts/gts-progressive-graph.html#GTS-PGRAPH-MAX-NODE-NUMBER">
-<ANCHOR id ="GTS-PGRAPH-MIN-NODE-NUMBER" href="gts/gts-progressive-graph.html#GTS-PGRAPH-MIN-NODE-NUMBER">
-<ANCHOR id ="GTS-PGRAPH-FOREACH-NODE" href="gts/gts-progressive-graph.html#GTS-PGRAPH-FOREACH-NODE">
-<ANCHOR id ="GTS-GRAPH-PARTITIONING" href="gts/gts-graph-partitioning.html">
-<ANCHOR id ="GTSGRAPHBISECTION" href="gts/gts-graph-partitioning.html#GTSGRAPHBISECTION">
-<ANCHOR id ="GTS-GRAPH-BISECTION-NEW" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BISECTION-NEW">
-<ANCHOR id ="GTS-GRAPH-GGG-BISECTION" href="gts/gts-graph-partitioning.html#GTS-GRAPH-GGG-BISECTION">
-<ANCHOR id ="GTS-GRAPH-BFGG-BISECTION" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BFGG-BISECTION">
-<ANCHOR id ="GTS-GRAPH-BISECTION-CHECK" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BISECTION-CHECK">
-<ANCHOR id ="GTS-GRAPH-BISECTION-KL-REFINE" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BISECTION-KL-REFINE">
-<ANCHOR id ="GTS-GRAPH-BISECTION-BKL-REFINE" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BISECTION-BKL-REFINE">
-<ANCHOR id ="GTS-GRAPH-RECURSIVE-BISECTION" href="gts/gts-graph-partitioning.html#GTS-GRAPH-RECURSIVE-BISECTION">
-<ANCHOR id ="GTS-GRAPH-BISECTION-DESTROY" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BISECTION-DESTROY">
-<ANCHOR id ="GTS-GRAPH-BUBBLE-PARTITION" href="gts/gts-graph-partitioning.html#GTS-GRAPH-BUBBLE-PARTITION">
-<ANCHOR id ="GTS-GRAPH-EDGES-CUT" href="gts/gts-graph-partitioning.html#GTS-GRAPH-EDGES-CUT">
-<ANCHOR id ="GTS-GRAPH-EDGES-CUT-WEIGHT" href="gts/gts-graph-partitioning.html#GTS-GRAPH-EDGES-CUT-WEIGHT">
-<ANCHOR id ="GTS-GRAPH-PARTITION-EDGES-CUT" href="gts/gts-graph-partitioning.html#GTS-GRAPH-PARTITION-EDGES-CUT">
-<ANCHOR id ="GTS-GRAPH-PARTITION-BALANCE" href="gts/gts-graph-partitioning.html#GTS-GRAPH-PARTITION-BALANCE">
-<ANCHOR id ="GTS-GRAPH-PARTITION-CLONE" href="gts/gts-graph-partitioning.html#GTS-GRAPH-PARTITION-CLONE">
-<ANCHOR id ="GTS-GRAPH-PARTITION-PRINT-STATS" href="gts/gts-graph-partitioning.html#GTS-GRAPH-PARTITION-PRINT-STATS">
-<ANCHOR id ="GTS-GRAPH-PARTITION-EDGES-CUT-WEIGHT" href="gts/gts-graph-partitioning.html#GTS-GRAPH-PARTITION-EDGES-CUT-WEIGHT">
-<ANCHOR id ="GTS-GRAPH-PARTITION-DESTROY" href="gts/gts-graph-partitioning.html#GTS-GRAPH-PARTITION-DESTROY">
diff --git a/examples/Makefile.am b/examples/Makefile.am
index b3890d9..4100f0e 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -5,6 +5,14 @@ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
 
+EXTRA_PROGRAMS = happrox
+
+happrox_LDADD = $(LDADD) -lnetpbm
+
+if HAS_NETPBM
+NETPBM_EXTRA = happrox
+endif
+
 bin_PROGRAMS = transform
 
 noinst_PROGRAMS = \
@@ -12,10 +20,18 @@ noinst_PROGRAMS = \
 	volume \
 	cleanup \
 	coarsen \
+	refine \
 	iso \
 	delaunay \
 	gtstoc \
 	oocs \
 	partition \
 	traverse \
-	cartesian
+	cartesian \
+	split \
+	smooth \
+	sphere \
+	stripe \
+	optimize \
+	merge \
+	$(NETPBM_EXTRA)
diff --git a/examples/Makefile.in b/examples/Makefile.in
index bdf54d5..02228a1 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,187 +73,440 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir) 	 -DG_LOG_DOMAIN=\"Gts-examples\"
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
+	 -DG_LOG_DOMAIN=\"Gts-examples\"
 
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
 
+EXTRA_PROGRAMS = happrox
+
+happrox_LDADD = $(LDADD) -lnetpbm
+
+ at HAS_NETPBM_TRUE@NETPBM_EXTRA = happrox
+
 bin_PROGRAMS = transform
 
-noinst_PROGRAMS =  	set 	volume 	cleanup 	coarsen 	iso 	delaunay 	gtstoc 	oocs 	partition 	traverse 	cartesian
+noinst_PROGRAMS = \
+	set \
+	volume \
+	cleanup \
+	coarsen \
+	refine \
+	iso \
+	delaunay \
+	gtstoc \
+	oocs \
+	partition \
+	traverse \
+	cartesian \
+	split \
+	smooth \
+	sphere \
+	stripe \
+	optimize \
+	merge \
+	$(NETPBM_EXTRA)
 
+subdir = examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES = 
-PROGRAMS =  $(bin_PROGRAMS) $(noinst_PROGRAMS)
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+EXTRA_PROGRAMS = happrox$(EXEEXT)
+bin_PROGRAMS = transform$(EXEEXT)
+ at HAS_NETPBM_TRUE@noinst_PROGRAMS = set$(EXEEXT) volume$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	cleanup$(EXEEXT) coarsen$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	refine$(EXEEXT) iso$(EXEEXT) delaunay$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	gtstoc$(EXEEXT) oocs$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	partition$(EXEEXT) traverse$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	cartesian$(EXEEXT) split$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	smooth$(EXEEXT) sphere$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	stripe$(EXEEXT) optimize$(EXEEXT) \
+ at HAS_NETPBM_TRUE@	merge$(EXEEXT) happrox$(EXEEXT)
+ at HAS_NETPBM_FALSE@noinst_PROGRAMS = set$(EXEEXT) volume$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	cleanup$(EXEEXT) coarsen$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	refine$(EXEEXT) iso$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	delaunay$(EXEEXT) gtstoc$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	oocs$(EXEEXT) partition$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	traverse$(EXEEXT) cartesian$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	split$(EXEEXT) smooth$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	sphere$(EXEEXT) stripe$(EXEEXT) \
+ at HAS_NETPBM_FALSE@	optimize$(EXEEXT) merge$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-LIBS = @LIBS@
-transform_SOURCES = transform.c
-transform_OBJECTS =  transform.o
-transform_LDADD = $(LDADD)
-transform_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-transform_LDFLAGS = 
-set_SOURCES = set.c
-set_OBJECTS =  set.o
-set_LDADD = $(LDADD)
-set_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-set_LDFLAGS = 
-volume_SOURCES = volume.c
-volume_OBJECTS =  volume.o
-volume_LDADD = $(LDADD)
-volume_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-volume_LDFLAGS = 
+cartesian_SOURCES = cartesian.c
+cartesian_OBJECTS = cartesian.$(OBJEXT)
+cartesian_LDADD = $(LDADD)
+cartesian_DEPENDENCIES = $(top_builddir)/src/libgts.la
+cartesian_LDFLAGS =
 cleanup_SOURCES = cleanup.c
-cleanup_OBJECTS =  cleanup.o
+cleanup_OBJECTS = cleanup.$(OBJEXT)
 cleanup_LDADD = $(LDADD)
-cleanup_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-cleanup_LDFLAGS = 
+cleanup_DEPENDENCIES = $(top_builddir)/src/libgts.la
+cleanup_LDFLAGS =
 coarsen_SOURCES = coarsen.c
-coarsen_OBJECTS =  coarsen.o
+coarsen_OBJECTS = coarsen.$(OBJEXT)
 coarsen_LDADD = $(LDADD)
-coarsen_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-coarsen_LDFLAGS = 
-iso_SOURCES = iso.c
-iso_OBJECTS =  iso.o
-iso_LDADD = $(LDADD)
-iso_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-iso_LDFLAGS = 
+coarsen_DEPENDENCIES = $(top_builddir)/src/libgts.la
+coarsen_LDFLAGS =
 delaunay_SOURCES = delaunay.c
-delaunay_OBJECTS =  delaunay.o
+delaunay_OBJECTS = delaunay.$(OBJEXT)
 delaunay_LDADD = $(LDADD)
-delaunay_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-delaunay_LDFLAGS = 
+delaunay_DEPENDENCIES = $(top_builddir)/src/libgts.la
+delaunay_LDFLAGS =
 gtstoc_SOURCES = gtstoc.c
-gtstoc_OBJECTS =  gtstoc.o
+gtstoc_OBJECTS = gtstoc.$(OBJEXT)
 gtstoc_LDADD = $(LDADD)
-gtstoc_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-gtstoc_LDFLAGS = 
+gtstoc_DEPENDENCIES = $(top_builddir)/src/libgts.la
+gtstoc_LDFLAGS =
+happrox_SOURCES = happrox.c
+happrox_OBJECTS = happrox.$(OBJEXT)
+happrox_DEPENDENCIES = $(top_builddir)/src/libgts.la
+happrox_LDFLAGS =
+iso_SOURCES = iso.c
+iso_OBJECTS = iso.$(OBJEXT)
+iso_LDADD = $(LDADD)
+iso_DEPENDENCIES = $(top_builddir)/src/libgts.la
+iso_LDFLAGS =
+merge_SOURCES = merge.c
+merge_OBJECTS = merge.$(OBJEXT)
+merge_LDADD = $(LDADD)
+merge_DEPENDENCIES = $(top_builddir)/src/libgts.la
+merge_LDFLAGS =
 oocs_SOURCES = oocs.c
-oocs_OBJECTS =  oocs.o
+oocs_OBJECTS = oocs.$(OBJEXT)
 oocs_LDADD = $(LDADD)
-oocs_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-oocs_LDFLAGS = 
+oocs_DEPENDENCIES = $(top_builddir)/src/libgts.la
+oocs_LDFLAGS =
+optimize_SOURCES = optimize.c
+optimize_OBJECTS = optimize.$(OBJEXT)
+optimize_LDADD = $(LDADD)
+optimize_DEPENDENCIES = $(top_builddir)/src/libgts.la
+optimize_LDFLAGS =
 partition_SOURCES = partition.c
-partition_OBJECTS =  partition.o
+partition_OBJECTS = partition.$(OBJEXT)
 partition_LDADD = $(LDADD)
-partition_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-partition_LDFLAGS = 
+partition_DEPENDENCIES = $(top_builddir)/src/libgts.la
+partition_LDFLAGS =
+refine_SOURCES = refine.c
+refine_OBJECTS = refine.$(OBJEXT)
+refine_LDADD = $(LDADD)
+refine_DEPENDENCIES = $(top_builddir)/src/libgts.la
+refine_LDFLAGS =
+set_SOURCES = set.c
+set_OBJECTS = set.$(OBJEXT)
+set_LDADD = $(LDADD)
+set_DEPENDENCIES = $(top_builddir)/src/libgts.la
+set_LDFLAGS =
+smooth_SOURCES = smooth.c
+smooth_OBJECTS = smooth.$(OBJEXT)
+smooth_LDADD = $(LDADD)
+smooth_DEPENDENCIES = $(top_builddir)/src/libgts.la
+smooth_LDFLAGS =
+sphere_SOURCES = sphere.c
+sphere_OBJECTS = sphere.$(OBJEXT)
+sphere_LDADD = $(LDADD)
+sphere_DEPENDENCIES = $(top_builddir)/src/libgts.la
+sphere_LDFLAGS =
+split_SOURCES = split.c
+split_OBJECTS = split.$(OBJEXT)
+split_LDADD = $(LDADD)
+split_DEPENDENCIES = $(top_builddir)/src/libgts.la
+split_LDFLAGS =
+stripe_SOURCES = stripe.c
+stripe_OBJECTS = stripe.$(OBJEXT)
+stripe_LDADD = $(LDADD)
+stripe_DEPENDENCIES = $(top_builddir)/src/libgts.la
+stripe_LDFLAGS =
+transform_SOURCES = transform.c
+transform_OBJECTS = transform.$(OBJEXT)
+transform_LDADD = $(LDADD)
+transform_DEPENDENCIES = $(top_builddir)/src/libgts.la
+transform_LDFLAGS =
 traverse_SOURCES = traverse.c
-traverse_OBJECTS =  traverse.o
+traverse_OBJECTS = traverse.$(OBJEXT)
 traverse_LDADD = $(LDADD)
-traverse_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-traverse_LDFLAGS = 
-cartesian_SOURCES = cartesian.c
-cartesian_OBJECTS =  cartesian.o
-cartesian_LDADD = $(LDADD)
-cartesian_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-cartesian_LDFLAGS = 
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+traverse_DEPENDENCIES = $(top_builddir)/src/libgts.la
+traverse_LDFLAGS =
+volume_SOURCES = volume.c
+volume_OBJECTS = volume.$(OBJEXT)
+volume_LDADD = $(LDADD)
+volume_DEPENDENCIES = $(top_builddir)/src/libgts.la
+volume_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cartesian.Po ./$(DEPDIR)/cleanup.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/coarsen.Po ./$(DEPDIR)/delaunay.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/gtstoc.Po ./$(DEPDIR)/happrox.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/iso.Po ./$(DEPDIR)/merge.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/oocs.Po ./$(DEPDIR)/optimize.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/partition.Po ./$(DEPDIR)/refine.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/set.Po ./$(DEPDIR)/smooth.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/sphere.Po ./$(DEPDIR)/split.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/stripe.Po ./$(DEPDIR)/transform.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/traverse.Po ./$(DEPDIR)/volume.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON =  Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = cartesian.c cleanup.c coarsen.c delaunay.c gtstoc.c \
+	happrox.c iso.c merge.c oocs.c optimize.c partition.c refine.c \
+	set.c smooth.c sphere.c split.c stripe.c transform.c traverse.c \
+	volume.c
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+SOURCES = cartesian.c cleanup.c coarsen.c delaunay.c gtstoc.c happrox.c iso.c merge.c oocs.c optimize.c partition.c refine.c set.c smooth.c sphere.c split.c stripe.c transform.c traverse.c volume.c
 
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = transform.c set.c volume.c cleanup.c coarsen.c iso.c delaunay.c gtstoc.c oocs.c partition.c traverse.c cartesian.c
-OBJECTS = transform.o set.o volume.o cleanup.o coarsen.o iso.o delaunay.o gtstoc.o oocs.o partition.o traverse.o cartesian.o
+all: all-am
 
-all: all-redirect
 .SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps examples/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-binPROGRAMS:
-
-clean-binPROGRAMS:
-	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-
-distclean-binPROGRAMS:
-
-maintainer-clean-binPROGRAMS:
-
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  examples/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	$(mkinstalldirs) $(DESTDIR)$(bindir)
 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
-	    $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
 	  else :; fi; \
 	done
 
 uninstall-binPROGRAMS:
 	@$(NORMAL_UNINSTALL)
-	list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
 	done
 
-mostlyclean-noinstPROGRAMS:
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
 
 clean-noinstPROGRAMS:
-	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-
-distclean-noinstPROGRAMS:
-
-maintainer-clean-noinstPROGRAMS:
-
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
-
-.S.o:
-	$(COMPILE) -c $<
+	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+cartesian$(EXEEXT): $(cartesian_OBJECTS) $(cartesian_DEPENDENCIES) 
+	@rm -f cartesian$(EXEEXT)
+	$(LINK) $(cartesian_LDFLAGS) $(cartesian_OBJECTS) $(cartesian_LDADD) $(LIBS)
+cleanup$(EXEEXT): $(cleanup_OBJECTS) $(cleanup_DEPENDENCIES) 
+	@rm -f cleanup$(EXEEXT)
+	$(LINK) $(cleanup_LDFLAGS) $(cleanup_OBJECTS) $(cleanup_LDADD) $(LIBS)
+coarsen$(EXEEXT): $(coarsen_OBJECTS) $(coarsen_DEPENDENCIES) 
+	@rm -f coarsen$(EXEEXT)
+	$(LINK) $(coarsen_LDFLAGS) $(coarsen_OBJECTS) $(coarsen_LDADD) $(LIBS)
+delaunay$(EXEEXT): $(delaunay_OBJECTS) $(delaunay_DEPENDENCIES) 
+	@rm -f delaunay$(EXEEXT)
+	$(LINK) $(delaunay_LDFLAGS) $(delaunay_OBJECTS) $(delaunay_LDADD) $(LIBS)
+gtstoc$(EXEEXT): $(gtstoc_OBJECTS) $(gtstoc_DEPENDENCIES) 
+	@rm -f gtstoc$(EXEEXT)
+	$(LINK) $(gtstoc_LDFLAGS) $(gtstoc_OBJECTS) $(gtstoc_LDADD) $(LIBS)
+happrox$(EXEEXT): $(happrox_OBJECTS) $(happrox_DEPENDENCIES) 
+	@rm -f happrox$(EXEEXT)
+	$(LINK) $(happrox_LDFLAGS) $(happrox_OBJECTS) $(happrox_LDADD) $(LIBS)
+iso$(EXEEXT): $(iso_OBJECTS) $(iso_DEPENDENCIES) 
+	@rm -f iso$(EXEEXT)
+	$(LINK) $(iso_LDFLAGS) $(iso_OBJECTS) $(iso_LDADD) $(LIBS)
+merge$(EXEEXT): $(merge_OBJECTS) $(merge_DEPENDENCIES) 
+	@rm -f merge$(EXEEXT)
+	$(LINK) $(merge_LDFLAGS) $(merge_OBJECTS) $(merge_LDADD) $(LIBS)
+oocs$(EXEEXT): $(oocs_OBJECTS) $(oocs_DEPENDENCIES) 
+	@rm -f oocs$(EXEEXT)
+	$(LINK) $(oocs_LDFLAGS) $(oocs_OBJECTS) $(oocs_LDADD) $(LIBS)
+optimize$(EXEEXT): $(optimize_OBJECTS) $(optimize_DEPENDENCIES) 
+	@rm -f optimize$(EXEEXT)
+	$(LINK) $(optimize_LDFLAGS) $(optimize_OBJECTS) $(optimize_LDADD) $(LIBS)
+partition$(EXEEXT): $(partition_OBJECTS) $(partition_DEPENDENCIES) 
+	@rm -f partition$(EXEEXT)
+	$(LINK) $(partition_LDFLAGS) $(partition_OBJECTS) $(partition_LDADD) $(LIBS)
+refine$(EXEEXT): $(refine_OBJECTS) $(refine_DEPENDENCIES) 
+	@rm -f refine$(EXEEXT)
+	$(LINK) $(refine_LDFLAGS) $(refine_OBJECTS) $(refine_LDADD) $(LIBS)
+set$(EXEEXT): $(set_OBJECTS) $(set_DEPENDENCIES) 
+	@rm -f set$(EXEEXT)
+	$(LINK) $(set_LDFLAGS) $(set_OBJECTS) $(set_LDADD) $(LIBS)
+smooth$(EXEEXT): $(smooth_OBJECTS) $(smooth_DEPENDENCIES) 
+	@rm -f smooth$(EXEEXT)
+	$(LINK) $(smooth_LDFLAGS) $(smooth_OBJECTS) $(smooth_LDADD) $(LIBS)
+sphere$(EXEEXT): $(sphere_OBJECTS) $(sphere_DEPENDENCIES) 
+	@rm -f sphere$(EXEEXT)
+	$(LINK) $(sphere_LDFLAGS) $(sphere_OBJECTS) $(sphere_LDADD) $(LIBS)
+split$(EXEEXT): $(split_OBJECTS) $(split_DEPENDENCIES) 
+	@rm -f split$(EXEEXT)
+	$(LINK) $(split_LDFLAGS) $(split_OBJECTS) $(split_LDADD) $(LIBS)
+stripe$(EXEEXT): $(stripe_OBJECTS) $(stripe_DEPENDENCIES) 
+	@rm -f stripe$(EXEEXT)
+	$(LINK) $(stripe_LDFLAGS) $(stripe_OBJECTS) $(stripe_LDADD) $(LIBS)
+transform$(EXEEXT): $(transform_OBJECTS) $(transform_DEPENDENCIES) 
+	@rm -f transform$(EXEEXT)
+	$(LINK) $(transform_LDFLAGS) $(transform_OBJECTS) $(transform_LDADD) $(LIBS)
+traverse$(EXEEXT): $(traverse_OBJECTS) $(traverse_DEPENDENCIES) 
+	@rm -f traverse$(EXEEXT)
+	$(LINK) $(traverse_LDFLAGS) $(traverse_OBJECTS) $(traverse_LDADD) $(LIBS)
+volume$(EXEEXT): $(volume_OBJECTS) $(volume_DEPENDENCIES) 
+	@rm -f volume$(EXEEXT)
+	$(LINK) $(volume_LDFLAGS) $(volume_OBJECTS) $(volume_LDADD) $(LIBS)
 
 mostlyclean-compile:
-	-rm -f *.o core *.core
-
-clean-compile:
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
 
-maintainer-clean-compile:
-
-.c.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cartesian.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cleanup.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/coarsen.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/delaunay.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gtstoc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/happrox.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/iso.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/merge.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/oocs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/optimize.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/partition.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/refine.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/set.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/smooth.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/sphere.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/split.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stripe.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transform.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/traverse.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/volume.Po at am__quote@
 
-.s.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 
-.S.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -262,192 +515,184 @@ clean-libtool:
 	-rm -rf .libs _libs
 
 distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 
-maintainer-clean-libtool:
-
-transform: $(transform_OBJECTS) $(transform_DEPENDENCIES)
-	@rm -f transform
-	$(LINK) $(transform_LDFLAGS) $(transform_OBJECTS) $(transform_LDADD) $(LIBS)
-
-set: $(set_OBJECTS) $(set_DEPENDENCIES)
-	@rm -f set
-	$(LINK) $(set_LDFLAGS) $(set_OBJECTS) $(set_LDADD) $(LIBS)
-
-volume: $(volume_OBJECTS) $(volume_DEPENDENCIES)
-	@rm -f volume
-	$(LINK) $(volume_LDFLAGS) $(volume_OBJECTS) $(volume_LDADD) $(LIBS)
-
-cleanup: $(cleanup_OBJECTS) $(cleanup_DEPENDENCIES)
-	@rm -f cleanup
-	$(LINK) $(cleanup_LDFLAGS) $(cleanup_OBJECTS) $(cleanup_LDADD) $(LIBS)
-
-coarsen: $(coarsen_OBJECTS) $(coarsen_DEPENDENCIES)
-	@rm -f coarsen
-	$(LINK) $(coarsen_LDFLAGS) $(coarsen_OBJECTS) $(coarsen_LDADD) $(LIBS)
-
-iso: $(iso_OBJECTS) $(iso_DEPENDENCIES)
-	@rm -f iso
-	$(LINK) $(iso_LDFLAGS) $(iso_OBJECTS) $(iso_LDADD) $(LIBS)
-
-delaunay: $(delaunay_OBJECTS) $(delaunay_DEPENDENCIES)
-	@rm -f delaunay
-	$(LINK) $(delaunay_LDFLAGS) $(delaunay_OBJECTS) $(delaunay_LDADD) $(LIBS)
-
-gtstoc: $(gtstoc_OBJECTS) $(gtstoc_DEPENDENCIES)
-	@rm -f gtstoc
-	$(LINK) $(gtstoc_LDFLAGS) $(gtstoc_OBJECTS) $(gtstoc_LDADD) $(LIBS)
-
-oocs: $(oocs_OBJECTS) $(oocs_DEPENDENCIES)
-	@rm -f oocs
-	$(LINK) $(oocs_LDFLAGS) $(oocs_OBJECTS) $(oocs_LDADD) $(LIBS)
-
-partition: $(partition_OBJECTS) $(partition_DEPENDENCIES)
-	@rm -f partition
-	$(LINK) $(partition_LDFLAGS) $(partition_OBJECTS) $(partition_LDADD) $(LIBS)
-
-traverse: $(traverse_OBJECTS) $(traverse_DEPENDENCIES)
-	@rm -f traverse
-	$(LINK) $(traverse_LDFLAGS) $(traverse_OBJECTS) $(traverse_LDADD) $(LIBS)
+ETAGS = etags
+ETAGSFLAGS =
 
-cartesian: $(cartesian_OBJECTS) $(cartesian_DEPENDENCIES)
-	@rm -f cartesian
-	$(LINK) $(cartesian_LDFLAGS) $(cartesian_OBJECTS) $(cartesian_LDADD) $(LIBS)
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
-
-maintainer-clean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = examples
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-cartesian.o: cartesian.c ../config.h ../src/gts.h ../src/gtsconfig.h
-cleanup.o: cleanup.c ../config.h ../src/gts.h ../src/gtsconfig.h
-coarsen.o: coarsen.c ../config.h ../src/gts.h ../src/gtsconfig.h
-delaunay.o: delaunay.c ../config.h ../src/gts.h ../src/gtsconfig.h
-gtstoc.o: gtstoc.c ../src/gts.h ../src/gtsconfig.h
-iso.o: iso.c ../config.h ../src/gts.h ../src/gtsconfig.h
-oocs.o: oocs.c ../src/gts.h ../src/gtsconfig.h
-partition.o: partition.c ../config.h ../src/gts.h ../src/gtsconfig.h
-set.o: set.c ../src/gts.h ../src/gtsconfig.h
-transform.o: transform.c ../config.h ../src/gts.h ../src/gtsconfig.h
-traverse.o: traverse.c ../config.h ../src/gts.h ../src/gtsconfig.h
-volume.o: volume.c ../config.h ../src/gts.h ../src/gtsconfig.h
-
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
 check-am: all-am
 check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am: install-binPROGRAMS
-install-exec: install-exec-am
+all-am: Makefile $(PROGRAMS)
 
-install-data-am:
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+install: install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am: uninstall-binPROGRAMS
-uninstall: uninstall-am
-all-am: Makefile $(PROGRAMS)
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-	$(mkinstalldirs)  $(DESTDIR)$(bindir)
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-binPROGRAMS mostlyclean-noinstPROGRAMS \
-		mostlyclean-compile mostlyclean-libtool \
-		mostlyclean-tags mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+	clean-noinstPROGRAMS mostlyclean-am
 
-clean-am:  clean-binPROGRAMS clean-noinstPROGRAMS clean-compile \
-		clean-libtool clean-tags clean-generic mostlyclean-am
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-binPROGRAMS distclean-noinstPROGRAMS \
-		distclean-compile distclean-libtool distclean-tags \
-		distclean-generic clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-binPROGRAMS \
-		maintainer-clean-noinstPROGRAMS \
-		maintainer-clean-compile maintainer-clean-libtool \
-		maintainer-clean-tags maintainer-clean-generic \
-		distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
 
-.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
-maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
-mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
-clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
 
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+	distclean distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am info info-am install \
+	install-am install-binPROGRAMS install-data install-data-am \
+	install-exec install-exec-am install-info install-info-am \
+	install-man install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/examples/cleanup.c b/examples/cleanup.c
index eb5eae2..109c79a 100644
--- a/examples/cleanup.c
+++ b/examples/cleanup.c
@@ -39,6 +39,12 @@ static void build_list1 (gpointer data, GList ** list)
   *list = g_list_prepend (*list, data);
 }
 
+static void build_list2 (GtsVertex * v, GList ** list)
+{
+  if (gts_vertex_is_boundary (v, NULL))
+    *list = g_list_prepend (*list, v);
+}
+
 static void vertex_cleanup (GtsVertex * v)
 {
   gts_vertex_is_contact (v, TRUE);
@@ -110,50 +116,101 @@ static void triangle_cleanup (GtsSurface * s)
   g_slist_free (triangles);
 }
 
+static gboolean check_boundaries (GtsVertex * v1, GtsVertex * v2)
+{
+  return (g_slist_length (v1->segments) < 4 && 
+	  g_slist_length (v2->segments) < 4);
+}
+
 /* cleanup - using a given threshold merge vertices which are too close.
    Eliminate degenerate and duplicate edges.
    Eliminate duplicate triangles . */
 int main (int argc, char * argv[])
 {
-  GtsSurface * s;
+  GtsSurface * s, * m;
   GList * vertices = NULL;
-  gboolean verbose = FALSE, sever = FALSE;
+  gboolean verbose = FALSE, sever = FALSE, boundary = FALSE;
   gdouble threshold;
   int c = 0;
-  guint line;
+  GtsFile * fp;
+  gboolean (* check) (GtsVertex *, GtsVertex *) = NULL;
+
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
 
   /* parse options using getopt */
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"2D", no_argument, NULL, 'c'},
+      {"boundary", no_argument, NULL, 'b'},
+      {"merge", required_argument, NULL, 'm'},
       {"sever", no_argument, NULL, 's'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hvs", 
+    switch ((c = getopt_long (argc, argv, "hvsm:bc", 
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hvs"))) {
+    switch ((c = getopt (argc, argv, "hvsm:bc"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'c': /* 2D */
+      check = check_boundaries;
+      break;
+    case 'b': /* boundary */
+      boundary = TRUE;
+      break;
     case 's': /* sever */
       sever = TRUE;
       break;
+    case 'm': { /* merge */
+      FILE * fptr = fopen (optarg, "rt");
+      GtsFile * fp;
+
+      if (fptr == NULL) {
+	fprintf (stderr, "cleanup: cannot open file `%s' for merging\n", 
+		 optarg);
+	return 1; /* failure */
+      }
+      m = gts_surface_new (gts_surface_class (),
+			   gts_face_class (),
+			   gts_edge_class (),
+			   s->vertex_class);
+      fp = gts_file_new (fptr);
+      if (gts_surface_read (m, fp)) {
+	fprintf (stderr, "cleanup: file `%s' is not a valid GTS file\n", 
+		 optarg);
+	fprintf (stderr, "%s:%d:%d: %s\n", 
+		 optarg, fp->line, fp->pos, fp->error);
+	return 1; /* failure */
+      }
+      gts_file_destroy (fp);
+      fclose (fptr);
+      gts_surface_merge (s, m);
+      gts_object_destroy (GTS_OBJECT (m));      
+      break;
+    }
     case 'v': /* verbose */
       verbose = TRUE;
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: cleanup [OPTION] THRESHOLD < FILE\n"
-	     "Merge vertices of the GTS surface FILE if they are closer than THRESHOLD,\n"
-	     "eliminate degenerate, duplicate edges and duplicate triangles.\n"
-	     "\n"
-	     "  -s    --sever    sever \"contact\" vertices\n"
-	     "  -v    --verbose  print statistics about the surface\n"
-	     "  -h    --help     display this help and exit\n"
-	     "\n"
-	     "Reports bugs to %s\n",
-	     GTS_MAINTAINER);
+	       "Usage: cleanup [OPTION] THRESHOLD < FILE\n"
+	       "Merge vertices of the GTS surface FILE if they are closer than THRESHOLD,\n"
+	       "eliminate degenerate, duplicate edges and duplicate triangles.\n"
+	       "\n"
+	       "  -c      --2D        2D boundary merging\n"
+	       "  -b      --boundary  only consider boundary vertices for merging\n"
+	       "  -s      --sever     sever \"contact\" vertices\n"
+	       "  -m FILE --merge     merge surface FILE\n"
+	       "  -v      --verbose   print statistics about the surface\n"
+	       "  -h      --help      display this help and exit\n"
+	       "\n"
+	       "Report bugs to %s\n",
+	       GTS_MAINTAINER);
       return 0; /* success */
       break;
     case '?': /* wrong options */
@@ -163,7 +220,7 @@ int main (int argc, char * argv[])
   }
 
   if (optind >= argc) { /* missing threshold */
-    fprintf (stderr, 
+    fprintf (stderr,
 	     "cleanup: missing THRESHOLD\n"
 	     "Try `cleanup --help' for more information.\n");
     return 1; /* failure */
@@ -179,17 +236,19 @@ int main (int argc, char * argv[])
   }
 
   /* read surface in */
-  s = gts_surface_new (gts_surface_class (),
+  m = gts_surface_new (gts_surface_class (),
 		       gts_face_class (),
 		       gts_edge_class (),
-		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
+		       s->vertex_class);
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (m, fp)) {
     fputs ("cleanup: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
+  gts_surface_merge (s, m);
+  gts_object_destroy (GTS_OBJECT (m));
 
   /* if verbose on print stats */
   if (verbose)
@@ -197,13 +256,11 @@ int main (int argc, char * argv[])
  
   /* merge vertices which are close enough */
   /* build list of vertices */
-  gts_surface_foreach_vertex (s, (GtsFunc) build_list1, &vertices);
+  gts_surface_foreach_vertex (s, boundary ? (GtsFunc) build_list2 : (GtsFunc) build_list1,
+			      &vertices);
   /* merge vertices: we MUST update the variable vertices because this function
      modifies the list (i.e. removes the merged vertices). */
-  vertices = gts_vertices_merge (vertices, threshold);
-
-  if (sever)
-    g_list_foreach (vertices, (GFunc) vertex_cleanup, NULL);
+  vertices = gts_vertices_merge (vertices, threshold, check);
 
   /* free the list */
   g_list_free (vertices);
@@ -213,9 +270,17 @@ int main (int argc, char * argv[])
   /* eliminate duplicate triangles */
   triangle_cleanup (s);
 
+  if (sever)
+    gts_surface_foreach_vertex (s, (GtsFunc) vertex_cleanup, NULL);
+
   /* if verbose on print stats */
-  if (verbose)
+  if (verbose) {
+    GtsBBox * bb = gts_bbox_surface (gts_bbox_class (), s);
     gts_surface_print_stats (s, stderr);
+    fprintf (stderr, "# Bounding box: [%g,%g,%g] [%g,%g,%g]\n",
+	     bb->x1, bb->y1, bb->z1,
+	     bb->x2, bb->y2, bb->z2);	     
+  }
 
   /* write surface */
   gts_surface_write (s, stdout);
diff --git a/examples/coarsen.c b/examples/coarsen.c
index f42b002..aec59b0 100644
--- a/examples/coarsen.c
+++ b/examples/coarsen.c
@@ -33,7 +33,7 @@
 #endif
 
 typedef enum { NUMBER, COST } StopOptions;
-typedef enum { COST_LENGTH, COST_OPTIMIZED } CostOptions;
+typedef enum { COST_LENGTH, COST_OPTIMIZED, COST_ANGLE } CostOptions;
 typedef enum { MIDVERTEX, OPTIMIZED } MidvertexOptions;
 
 static gboolean stop_number_verbose (gdouble cost, guint number, guint * min)
@@ -103,6 +103,20 @@ static gboolean stop_cost_verbose (gdouble cost, guint number, gdouble * max)
   return FALSE;
 }
 
+static gboolean stop_log_cost (gdouble cost, guint number)
+{
+  fprintf (stderr, "%d %g\n", number, cost);
+  return FALSE;
+}
+
+static gdouble cost_angle (GtsEdge * e)
+{
+  if (e->triangles && e->triangles->next)
+    return fabs (gts_triangles_angle (e->triangles->data,
+				      e->triangles->next->data));
+  return G_MAXDOUBLE;
+}
+
 /* coarsen - produce a coarsened version of the input */
 int main (int argc, char * argv[])
 {
@@ -110,6 +124,7 @@ int main (int argc, char * argv[])
   GtsPSurface * ps = NULL;
   gboolean verbose = FALSE;
   gboolean progressive = FALSE;
+  gboolean log_cost = FALSE;
   guint number = 0;
   gdouble cmax = 0.0;
   StopOptions stop = NUMBER;
@@ -118,8 +133,9 @@ int main (int argc, char * argv[])
   GtsKeyFunc cost_func = NULL;
   GtsCoarsenFunc coarsen_func = NULL;
   GtsStopFunc stop_func = NULL;
+  gpointer stop_data = NULL;
   int c = 0;
-  guint line;
+  GtsFile * fp;
   gdouble fold = PI/180.;
   GtsVolumeOptimizedParams params = { 0.5, 0.5, 0. };
   gpointer coarsen_data = NULL, cost_data = NULL;
@@ -128,6 +144,7 @@ int main (int argc, char * argv[])
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"angle", no_argument, NULL, 'a'},
       {"progressive", no_argument, NULL, 'p'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'},
@@ -138,14 +155,21 @@ int main (int argc, char * argv[])
       {"fold", required_argument, NULL, 'f'},
       {"vweight", required_argument, NULL, 'w'},
       {"bweight", required_argument, NULL, 'b'},
-      {"sweight", required_argument, NULL, 's'}
+      {"sweight", required_argument, NULL, 's'},
+      {"log", no_argument, NULL, 'L'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hvmc:n:lpf:w:b:s:",
+    switch ((c = getopt_long (argc, argv, "hvmc:n:lpf:w:b:s:La",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hvmc:n:lpf:w:b:s:"))) {
+    switch ((c = getopt (argc, argv, "hvmc:n:lpf:w:b:s:La"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'a': /* angle */
+      cost = COST_ANGLE;
+      break;
+    case 'L': /* log */
+      log_cost = TRUE;
+      break;
     case 'p': /* write progressive surface */
       progressive = TRUE;
       break;
@@ -200,6 +224,7 @@ int main (int argc, char * argv[])
 	     "  -s W, --sweight=W   set weight used for shape optimization\n"
 	     "                      default is 0.0\n"
 	     "  -p    --progressive write progressive surface file\n"
+	     "  -L    --log         logs the evolution of the cost\n"
 	     "  -v    --verbose     print statistics about the surface\n"
 	     "  -h    --help        display this help and exit\n"
 	     "\n"
@@ -218,11 +243,11 @@ int main (int argc, char * argv[])
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
     fputs ("coarsen: the file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
@@ -241,12 +266,15 @@ int main (int argc, char * argv[])
     break;
   case COST_LENGTH:
     cost_func = NULL; break;
+  case COST_ANGLE:
+    cost_func = (GtsKeyFunc) cost_angle; break;
   default:
     g_assert_not_reached ();
   }
   switch (mid) {
   case MIDVERTEX:
-    coarsen_func = NULL; break;
+    coarsen_func = NULL; 
+    break;
   case OPTIMIZED:
     coarsen_func = (GtsCoarsenFunc) gts_volume_optimized_vertex; 
     coarsen_data = ¶ms;
@@ -254,34 +282,40 @@ int main (int argc, char * argv[])
   default:
     g_assert_not_reached ();
   }
-  switch (stop) {
-  case NUMBER:
-    if (verbose)
-      stop_func = (GtsStopFunc) stop_number_verbose;
-    else
-      stop_func = (GtsStopFunc) gts_coarsen_stop_number; 
-    break;
-  case COST:
-    if (verbose)
-      stop_func = (GtsStopFunc) stop_cost_verbose;
-    else
-      stop_func = (GtsStopFunc) gts_coarsen_stop_cost; 
-    break;
-  default:
-    g_assert_not_reached ();
+  if (log_cost)
+    stop_func = (GtsStopFunc) stop_log_cost;
+  else {
+    switch (stop) {
+    case NUMBER:
+      if (verbose)
+	stop_func = (GtsStopFunc) stop_number_verbose;
+      else
+	stop_func = (GtsStopFunc) gts_coarsen_stop_number; 
+      stop_data = &number;
+      break;
+    case COST:
+      if (verbose)
+	stop_func = (GtsStopFunc) stop_cost_verbose;
+      else
+	stop_func = (GtsStopFunc) gts_coarsen_stop_cost; 
+      stop_data = &cmax;
+      break;
+    default:
+      g_assert_not_reached ();
+    }
   }
   if (progressive)
     ps = gts_psurface_new (gts_psurface_class (),
 			   s, gts_split_class (),
 			   cost_func, cost_data,
 			   coarsen_func, coarsen_data,
-			   stop_func, &number, 
+			   stop_func, stop_data, 
 			   fold);
   else
     gts_surface_coarsen (s, 
 			 cost_func, cost_data, 
 			 coarsen_func, coarsen_data, 
-			 stop_func, &number, fold);
+			 stop_func, stop_data, fold);
 
   /* if verbose on print stats */
   if (verbose) {
diff --git a/examples/delaunay.c b/examples/delaunay.c
index ee203c6..9571070 100644
--- a/examples/delaunay.c
+++ b/examples/delaunay.c
@@ -234,6 +234,7 @@ int main (int argc, char * argv[])
   gboolean refine = FALSE;
   gboolean split_constraints = FALSE;
   gboolean randomize = FALSE;
+  gboolean remove_duplicates = FALSE;
   gint steiner_max = -1;
   gdouble quality = 0., area = G_MAXDOUBLE;
   int c = 0, status = 0;
@@ -244,6 +245,7 @@ int main (int argc, char * argv[])
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"duplicates", no_argument, NULL, 'd'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'},
       {"randomize", no_argument, NULL, 'r'},
@@ -259,11 +261,14 @@ int main (int argc, char * argv[])
       {"area", required_argument, NULL, 'a'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hvbecf:os:q:a:HSr",
+    switch ((c = getopt_long (argc, argv, "hvbecf:os:q:a:HSrd",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hvbecf:os:q:a:HSr"))) {
+    switch ((c = getopt (argc, argv, "hvbecf:os:q:a:HSrd"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'd': /* duplicates */
+      remove_duplicates = TRUE;
+      break;
     case 'b': /* do not keep convex hull */
       keep_hull = FALSE;
       break;
@@ -313,6 +318,7 @@ int main (int argc, char * argv[])
 	     "  -e       --noconst      do not add constrained edges\n"
 	     "  -S       --split        split constraints (experimental)\n"
 	     "  -H       --holes        remove holes from the triangulation\n"
+	     "  -d       --duplicates   remove duplicate vertices\n"
 	     "  -r       --randomize    shuffle input vertex list\n"
 	     "  -c       --check        check Delaunay property\n"
 	     "  -f FNAME --files=FNAME  generate evolution files\n"
@@ -380,11 +386,16 @@ int main (int argc, char * argv[])
   for (i = 0; i < vertices->len; i++) {
     GtsVertex * v1 = g_ptr_array_index (vertices, i);
     GtsVertex * v = gts_delaunay_add_vertex (surface, v1, NULL);
+
     g_assert (v != v1);
     if (v != NULL) {
-      fprintf (stderr, "delaunay: duplicate vertex (%g,%g) in input file\n",
-	       GTS_POINT (v)->x, GTS_POINT (v)->y);
-      return 1; /* Failure */
+      if (!remove_duplicates) {
+	fprintf (stderr, "delaunay: duplicate vertex (%g,%g) in input file\n",
+		 GTS_POINT (v)->x, GTS_POINT (v)->y);
+	return 1; /* Failure */
+      }
+      else
+	gts_vertex_replace (v1, v);
     }
     if (fname) {
       static guint nf = 1;
diff --git a/examples/gtstoc.c b/examples/gtstoc.c
index 7dc5244..37191d2 100644
--- a/examples/gtstoc.c
+++ b/examples/gtstoc.c
@@ -48,18 +48,19 @@ static void write_face (GtsTriangle * t, guint * nf)
 int main (int argc, char * argv[])
 {
   GtsSurface * s;
-  guint i, line;
+  guint i;
+  GtsFile * fp;
   guint nv = 1, ne = 1, nf = 1;
 
   s = gts_surface_new (gts_surface_class (),
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
     fputs ("gtstoc: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
diff --git a/examples/happrox.c b/examples/happrox.c
new file mode 100644
index 0000000..5ea1c3b
--- /dev/null
+++ b/examples/happrox.c
@@ -0,0 +1,601 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pgm.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include "gts.h"
+
+typedef enum { NUMBER, COST } StopOptions;
+
+static gboolean stop_number (gdouble cost, guint number, guint * max)
+{
+  if (number >= *max)
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean stop_number_log_cost (gdouble cost, guint number, guint * max)
+{
+  if (number >= *max)
+    return TRUE;
+  fprintf (stderr, "%d %g\n", number, cost);
+  return FALSE;
+}
+
+static gboolean stop_number_verbose (gdouble cost, guint number, guint * max)
+{
+  static guint nmax = 0, nold = 0;
+  static GTimer * timer = NULL, * total_timer = NULL;
+
+  if (timer == NULL) {
+    nmax = nold = number;
+    timer = g_timer_new ();
+    total_timer = g_timer_new ();
+    g_timer_start (total_timer);
+  }
+
+  if (number != nold && number % 121 == 0 &&
+      number > nmax && nmax <= *max) {
+    gdouble total_elapsed = g_timer_elapsed (total_timer, NULL);
+    gdouble remaining;
+    gdouble hours, mins, secs;
+    gdouble hours1, mins1, secs1;
+
+    g_timer_stop (timer);
+
+    hours = floor (total_elapsed/3600.);
+    mins = floor ((total_elapsed - 3600.*hours)/60.);
+    secs = floor (total_elapsed - 3600.*hours - 60.*mins);
+
+    remaining = total_elapsed*((*max - nmax)/(gdouble) (number - nmax) - 1.);
+    hours1 = floor (remaining/3600.);
+    mins1 = floor ((remaining - 3600.*hours1)/60.);
+    secs1 = floor (remaining - 3600.*hours1 - 60.*mins1);
+
+    fprintf (stderr, 
+	     "\rVertices: %8u %3.0f%% %6.0f vertices/s "
+	     "Elapsed: %02.0f:%02.0f:%02.0f "
+	     "Remaining: %02.0f:%02.0f:%02.0f ",
+	     number, 
+	     100.*(number - nmax)/(*max - nmax),
+	     (number - nold)/g_timer_elapsed (timer, NULL),
+	     hours, mins, secs,
+	     hours1, mins1, secs1);
+    fflush (stderr);
+
+    nold = number;
+    g_timer_start (timer);
+  }
+  if (number >= *max) {
+    g_timer_destroy (timer);
+    g_timer_destroy (total_timer);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static gboolean stop_cost (gdouble cost, guint number, gdouble * min)
+{
+  if (cost < *min)
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean stop_cost_verbose (gdouble cost, guint number, gdouble * min)
+{
+  if (number % 121 == 0) {
+    fprintf (stderr, "\rVertices: %10u Cost: %10.2f        ", number, cost);
+    fflush (stderr);
+  }
+  if (cost < *min)
+    return TRUE;
+  return FALSE;
+}
+
+/* ListFace: Header */
+
+typedef struct _ListFace         ListFace;
+
+struct _ListFace {
+  /*< private >*/
+  GtsListFace parent;
+
+  /*< public >*/
+  GtsEHeap * heap;
+  GtsEHeapPair * pair;
+  GtsVertex * best;
+  GtsVector p;
+};
+
+typedef struct _ListFaceClass    ListFaceClass;
+
+struct _ListFaceClass {
+  /*< private >*/
+  GtsFaceClass parent_class;
+
+  /*< public >*/
+  void (* cost_init) (ListFace *);
+};
+
+#define LIST_FACE(obj)            GTS_OBJECT_CAST (obj,\
+					         ListFace,\
+					         list_face_class ())
+#define LIST_FACE_CLASS(klass)    GTS_OBJECT_CLASS_CAST (klass,\
+						 ListFaceClass,\
+						 list_face_class())
+#define IS_LIST_FACE(obj)         (gts_object_is_from_class (obj,\
+						 list_face_class ()))
+
+static ListFaceClass * list_face_class (void);
+
+/* ListFace: Object */
+
+static void list_face_destroy (GtsObject * object)
+{
+  ListFace * f = LIST_FACE (object);
+
+  if (f->heap) {
+    gts_eheap_remove (f->heap, f->pair);
+    f->heap = NULL;
+  }
+
+  (* GTS_OBJECT_CLASS (list_face_class ())->parent_class->destroy) 
+    (object);
+}
+
+static void triangle_plane (GtsTriangle * f, GtsVector p)
+{
+  GtsPoint * v1, * v2, * v3;
+  gdouble x1, x2, y1, y2, det;
+
+  v1 = GTS_POINT (GTS_SEGMENT (f->e1)->v1);
+  v2 = GTS_POINT (GTS_SEGMENT (f->e1)->v2);
+  v3 = GTS_POINT (gts_triangle_vertex (f));
+
+  x1 = v2->x - v1->x;
+  y1 = v2->y - v1->y;
+  x2 = v3->x - v1->x;
+  y2 = v3->y - v1->y;
+  det = x1*y2 - x2*y1;
+  g_assert (det != 0.);
+
+  p[0] = (y2*(v2->z - v1->z) - y1*(v3->z - v1->z))/det;
+  p[1] = (-x2*(v2->z - v1->z) + x1*(v3->z - v1->z))/det;
+  p[2] = ((- v1->x*y2 + v1->y*x2)*(v2->z - v1->z) +
+	  (- v1->y*x1 + v1->x*y1)*(v3->z - v1->z))/det + v1->z;
+}
+
+static void list_face_cost_init (ListFace * f)
+{
+  triangle_plane (GTS_TRIANGLE (f), f->p);
+}
+
+static void list_face_class_init (ListFaceClass * klass)
+{
+  GTS_OBJECT_CLASS (klass)->destroy = list_face_destroy;
+  klass->cost_init = list_face_cost_init;
+}
+
+static ListFaceClass * list_face_class (void)
+{
+  static ListFaceClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo list_face_info = {
+      "ListFace",
+      sizeof (ListFace),
+      sizeof (ListFaceClass),
+      (GtsObjectClassInitFunc) list_face_class_init,
+      (GtsObjectInitFunc) NULL,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_list_face_class ()),
+				  &list_face_info);
+  }
+
+  return klass;
+}
+
+typedef gdouble (*CostFunc) (ListFace *, GtsPoint *, gpointer);
+
+static void list_face_update (ListFace * f, gpointer * data)
+{
+  if (IS_LIST_FACE (f)) {
+    GSList * i = GTS_LIST_FACE (f)->points;
+    GtsEHeap * heap = data[0];
+    CostFunc cost = data[1];
+    gpointer cost_data = data[2];
+    
+    if (i) {
+      gdouble maxerr = 0.;
+      ListFaceClass * klass = LIST_FACE_CLASS (GTS_OBJECT (f)->klass);
+
+      (* klass->cost_init) (f);
+      f->best = NULL;
+      while (i) {
+	GtsPoint * v = i->data;
+	gdouble e = (* cost) (f, v, cost_data);
+	
+	if (e > maxerr) {
+	  maxerr = e;
+	  f->best = GTS_VERTEX (v); 
+	}
+	i = i->next;
+      }
+      if (f->heap) {
+	gts_eheap_remove (f->heap, f->pair);
+	f->heap = NULL;
+      }
+      if (maxerr > 0.) {
+	f->pair = gts_eheap_insert_with_key (heap, f, - maxerr);
+	f->heap = heap;
+      }
+    }
+  }
+}
+
+static void list_face_clear_heap (ListFace * f)
+{
+  f->heap = NULL;
+}
+
+static void surface_hf_refine (GtsSurface * s,
+			       CostFunc cost_func,
+			       gpointer cost_data,
+			       GtsStopFunc stop_func,
+			       gpointer stop_data)
+{
+  GtsEHeap * heap;
+  gdouble top_cost;
+  guint nv = 4;
+  GtsListFace * f;
+  gpointer data[3];
+
+  g_return_if_fail (s != NULL);
+  g_return_if_fail (cost_func != NULL);
+  g_return_if_fail (stop_func != NULL);
+
+  data[0] = heap = gts_eheap_new (NULL, NULL);
+  data[1] = cost_func;
+  data[2] = cost_data;
+  gts_surface_foreach_face (s, (GtsFunc) list_face_update, data);
+  while ((f = gts_eheap_remove_top (heap, &top_cost)) &&
+	 !(*stop_func) (- top_cost, nv, stop_data)) {
+    GtsVertex * v = LIST_FACE (f)->best;
+    GSList * t, * i;
+
+    LIST_FACE (f)->heap = NULL;
+    gts_delaunay_add_vertex_to_face (s, v, GTS_FACE (f));
+    i = t = gts_vertex_triangles (v, NULL);
+    while (i) {
+      list_face_update (i->data, data);
+      i = i->next;
+    }
+    g_slist_free (t);
+    nv++;
+  }
+
+  if (f)
+    LIST_FACE (f)->heap = NULL;
+
+  gts_eheap_foreach (heap, (GFunc) list_face_clear_heap, NULL);
+  gts_eheap_destroy (heap);
+}
+
+static void prepend (GtsListFace * f, 
+		     gray ** g, guint i, guint j)
+{
+  f->points = g_slist_prepend (f->points, 
+			       gts_vertex_new (gts_vertex_class (), 
+					       i, j, g[j][i]));
+}
+
+static void destroy_unused (GtsListFace * f)
+{
+  g_slist_foreach (f->points, (GFunc) gts_object_destroy, NULL);
+  g_slist_free (f->points);
+  f->points = NULL;
+}
+
+static GtsSurface * happrox (gray ** g, gint width, gint height,
+			     CostFunc cost_func,
+			     gpointer cost_data,
+			     GtsStopFunc stop_func,
+			     gpointer stop_data)
+{
+  GtsSurface * s = gts_surface_new (gts_surface_class (),
+				    GTS_FACE_CLASS (list_face_class ()),
+				    gts_edge_class (),
+				    gts_vertex_class ());
+  GtsVertex * v1 = gts_vertex_new (s->vertex_class, 0., 0., g[0][0]);
+  GtsVertex * v2 = gts_vertex_new (s->vertex_class, 
+				   0., height - 1, g[height - 1][0]);
+  GtsVertex * v3 = gts_vertex_new (s->vertex_class,
+				   width - 1, 0., g[0][width - 1]);
+  GtsVertex * v4 = gts_vertex_new (s->vertex_class,
+				   width - 1, height - 1, 
+				   g[height - 1][width - 1]);
+  guint i, j;
+  GSList * corners = NULL;
+  GtsTriangle * t;
+  GtsVertex * w1, * w2, * w3;
+  GtsListFace * f;
+
+  /* creates enclosing triangle */
+  corners = g_slist_prepend (corners, v1);
+  corners = g_slist_prepend (corners, v2);
+  corners = g_slist_prepend (corners, v3);
+  corners = g_slist_prepend (corners, v4);
+  t = gts_triangle_enclosing (gts_triangle_class (), corners, 100.);
+  g_slist_free (corners);
+  gts_triangle_vertices (t, &w1, &w2, &w3);
+
+  f = GTS_LIST_FACE (gts_face_new (s->face_class, t->e1, t->e2, t->e3));
+  gts_surface_add_face (s, GTS_FACE (f));
+
+  /* add PGM vertices (corners excepted) to point list of f */
+  for (i = 1; i < width - 1; i++) {
+    for (j = 1; j < height - 1; j++)
+      prepend (f, g, i, j);
+    prepend (f, g, i, 0);
+    prepend (f, g, i, height - 1);
+  }
+  for (j = 1; j < height - 1; j++) {
+    prepend (f, g, 0, j);
+    prepend (f, g, width - 1, j);
+  }
+  pgm_freearray (g, height);
+
+  /* add four corners to initial triangulation */
+  g_assert (gts_delaunay_add_vertex_to_face (s, v1, GTS_FACE (f)) == NULL);
+  f = GTS_LIST_FACE (gts_point_locate (GTS_POINT (v2), s, NULL));
+  g_assert (gts_delaunay_add_vertex_to_face (s, v2, GTS_FACE (f)) == NULL);
+  f = GTS_LIST_FACE (gts_point_locate (GTS_POINT (v3), s, NULL));
+  g_assert (gts_delaunay_add_vertex_to_face (s, v3, GTS_FACE (f)) == NULL);
+  f = GTS_LIST_FACE (gts_point_locate (GTS_POINT (v4), s, NULL));
+  g_assert (gts_delaunay_add_vertex_to_face (s, v4, GTS_FACE (f)) == NULL);
+
+  /* refine surface */
+  surface_hf_refine (s, cost_func, cost_data, stop_func, stop_data);
+
+  /* destroy unused vertices */
+  gts_surface_foreach_face (s, (GtsFunc) destroy_unused, NULL);
+  
+  /* destroy enclosing triangle */
+  gts_allow_floating_vertices = TRUE;
+  gts_object_destroy (GTS_OBJECT (w1));
+  gts_object_destroy (GTS_OBJECT (w2));
+  gts_object_destroy (GTS_OBJECT (w3));
+  gts_allow_floating_vertices = FALSE;
+
+  return s;
+}
+
+static GtsSurface * happrox_list (GSList * points,
+				  gboolean keep_enclosing,
+				  CostFunc cost_func,
+				  gpointer cost_data,
+				  GtsStopFunc stop_func,
+				  gpointer stop_data)
+{
+  GtsSurface * s = gts_surface_new (gts_surface_class (),
+				    GTS_FACE_CLASS (list_face_class ()),
+				    gts_edge_class (),
+				    gts_vertex_class ());
+  GtsTriangle * t;
+  GtsVertex * w1, * w2, * w3;
+  GtsListFace * f;
+
+  /* creates enclosing triangle */
+  t = gts_triangle_enclosing (gts_triangle_class (), points, 10.);
+  gts_triangle_vertices (t, &w1, &w2, &w3);
+  GTS_POINT (w1)->z = GTS_POINT (w2)->z = GTS_POINT (w3)->z = 
+    keep_enclosing ? -10000. : -1e30;
+
+  f = GTS_LIST_FACE (gts_face_new (s->face_class, t->e1, t->e2, t->e3));
+  gts_surface_add_face (s, GTS_FACE (f));
+  f->points = points;
+
+  /* refine surface */
+  surface_hf_refine (s, cost_func, cost_data, stop_func, stop_data);
+
+  /* destroy unused vertices */
+  gts_surface_foreach_face (s, (GtsFunc) destroy_unused, NULL);
+  
+  /* destroy enclosing triangle */
+  if (!keep_enclosing) {
+    gts_allow_floating_vertices = TRUE;
+    gts_object_destroy (GTS_OBJECT (w1));
+    gts_object_destroy (GTS_OBJECT (w2));
+    gts_object_destroy (GTS_OBJECT (w3));
+    gts_allow_floating_vertices = FALSE;
+  }
+
+  return s;
+}
+
+static gdouble height_cost (ListFace * f, GtsPoint * p)
+{
+  return fabs (p->x*f->p[0] + p->y*f->p[1] + f->p[2] - p->z);  
+}
+
+static gdouble relative_height_cost (ListFace * f, GtsPoint * p, gdouble * z)
+{
+  gdouble dz = p->x*f->p[0] + p->y*f->p[1] + f->p[2] - p->z;
+
+  return fabs (p->z) < *z ? fabs (dz/(*z)) : fabs (dz/p->z);
+}
+
+int main (int argc, char * argv[])
+{
+  int c = 0;
+  gboolean verbose = FALSE;
+  GtsSurface * s;
+  CostFunc cost_func = (CostFunc) height_cost;
+  gpointer cost_data = NULL;
+  GtsStopFunc stop_func = NULL;
+  gpointer stop_data = NULL;
+  StopOptions stop = NUMBER;
+  guint number = 0;
+  gdouble cmin = 0.0;
+  gboolean logcost = FALSE;
+  gboolean flat = FALSE;
+  gdouble relative = 0.;
+  gboolean keep_enclosing = FALSE;
+
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"keep", no_argument, NULL, 'k'},
+      {"relative", required_argument, NULL, 'r'},
+      {"flat", no_argument, NULL, 'f'},
+      {"log", no_argument, NULL, 'l'},
+      {"number", required_argument, NULL, 'n'},
+      {"cost", required_argument, NULL, 'c'},
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hvn:c:lfr:k",
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hvn:c:lfr:k"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 'k': /* keep */
+      keep_enclosing = TRUE;
+      break;
+    case 'r': /* relative */
+      cost_func = (CostFunc) relative_height_cost;
+      relative = atof (optarg);
+      cost_data = &relative;
+      if (relative <= 0.) {
+	fprintf (stderr, "happrox: argument for -r option must be strictly positive\n");
+	return 1;
+      }
+      break;
+    case 'f': /* flat file */
+      flat = TRUE;
+      break;
+    case 'l': /* log cost */
+      logcost = TRUE;
+      break;
+    case 'n': /* stop by number */
+      stop = NUMBER;
+      number = atoi (optarg);
+      break;
+    case 'c': /* stop by cost */
+      stop = COST;
+      cmin = atof (optarg);
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+	       "Usage: happrox [OPTION]... < [input.pgm|input] > output.gts\n"
+	       "Returns a simplified triangulation of a set of points using\n"
+	       "algorithm III of Garland and Heckbert (1995).\n"
+	       "\n"
+	       "  -n N, --number=N    stop the refinement process if the number of\n"
+	       "                      vertices is larger than N\n"
+	       "  -c C, --cost=C      stop the refinement process if the cost of insertion\n"
+	       "                      of a vertex is smaller than C\n"
+	       "  -f    --flat        input is a flat file with three x,y,z columns\n"
+	       "                        (default is PGM file)\n"
+               "  -r Z  --relative=Z  use relative height cost for all heights larger than Z\n"
+	       "  -k    --keep        keep enclosing triangle\n"
+	       "  -l    --log         log evolution of cost\n" 
+	       "  -v,   --verbose     display surface statistics\n"
+	       "  -h,   --help        display this help and exit\n"
+	       "\n"
+	       "Report bugs to %s\n",
+	       GTS_MAINTAINER);
+      return 0;
+      break;
+    case 'v':
+      verbose = TRUE;
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `happrox --help' for more information.\n");
+      return 1;
+    }
+  }
+
+  switch (stop) {
+  case NUMBER:
+    if (verbose)
+      stop_func = (GtsStopFunc) stop_number_verbose;
+    else
+      stop_func = (GtsStopFunc) stop_number;
+    if (logcost)
+      stop_func = (GtsStopFunc) stop_number_log_cost;
+    stop_data = &number;
+    break;
+  case COST:
+    if (verbose)
+      stop_func = (GtsStopFunc) stop_cost_verbose;
+    else
+      stop_func = (GtsStopFunc) stop_cost; 
+    stop_data = &cmin;
+    break;
+  default:
+    g_assert_not_reached ();
+  }
+
+  if (flat) {
+    GSList * points = NULL;
+    guint n = 0;
+    gdouble x, y, z;
+
+    while (scanf ("%lf %lf %lf", &x, &y, &z) == 3) {
+      points = g_slist_prepend (points, gts_vertex_new (gts_vertex_class (), x, y, z));
+      n++;
+    }
+    if (verbose)
+      fprintf (stderr, "happrox: %d vertices\n", n);
+
+    s = happrox_list (points, keep_enclosing, cost_func, cost_data, stop_func, stop_data);
+  }
+  else {
+    gint width, height;
+    gray ** g, maxgray;
+
+    g = pgm_readpgm (stdin, &width, &height, &maxgray);
+    if (verbose)
+      fprintf (stderr, "happrox: width: %d height: %d maxgray: %d\n",
+	       width, height, maxgray);
+    
+    s = happrox (g, width, height, cost_func, cost_data, stop_func, stop_data);
+  }
+
+  if (verbose) {
+    fputc ('\n', stderr);
+    gts_surface_print_stats (s, stderr);
+  }
+  gts_surface_write (s, stdout);
+
+  return 0;
+}
diff --git a/examples/iso.c b/examples/iso.c
index 394210f..e7f215b 100644
--- a/examples/iso.c
+++ b/examples/iso.c
@@ -100,24 +100,32 @@ int main (int argc, char * argv[])
   GtsCartesianGrid g;
   GtsSurface * surface;
   gdouble iso;
-  gboolean verbose = FALSE;
+  gboolean verbose = FALSE, tetra = FALSE, dual = FALSE;
   GtsIsoCartesianFunc func = sphere;
 
   /* parse options using getopt */
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"dual", no_argument, NULL, 'd'},
+      {"tetra", no_argument, NULL, 't'},
       {"barth", no_argument, NULL, 'b'},
       {"clebsch", no_argument, NULL, 'c'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hvbc", 
+    switch ((c = getopt_long (argc, argv, "hvbctd",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hvbc"))) {
+    switch ((c = getopt (argc, argv, "hvbctd"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'd': /* dual */
+      dual = TRUE;
+      break;
+    case 't': /* tetra */
+      tetra = TRUE;
+      break;
     case 'b': /* Barth function */
       func = barth;
       break;
@@ -129,12 +137,14 @@ int main (int argc, char * argv[])
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: iso [OPTION] NX NY NZ VAL< file.gts\n"
+             "Usage: iso [OPTION] NX NY NZ VAL > file.gts\n"
 	     "Compute the isosurface of various functions (default is a sphere).\n"
 	     "The size of the cartesian mesh is given by NX, NY and NZ and the isosurface value by VAL.\n"
 	     "\n"
 	     "  -b    --barth    use the Barth decic function\n"
 	     "  -c    --clebsch  use the Clebsch function\n"
+	     "  -t    --tetra    use marching tetrahedra (default is marching cubes)\n"
+             "  -d    --dual     use \"dual\" marching tetrahedra\n"
 	     "  -v    --verbose  print statistics about the surface\n"
 	     "  -h    --help     display this help and exit\n"
 	     "\n"
@@ -189,7 +199,12 @@ int main (int argc, char * argv[])
 			     gts_face_class (),
 			     gts_edge_class (),
 			     gts_vertex_class ());
-  gts_isosurface_cartesian (surface, g, func, NULL, iso);
+  if (tetra)
+    gts_isosurface_tetra (surface, g, func, NULL, iso);
+  else if (dual)
+    gts_isosurface_tetra_bcl (surface, g, func, NULL, iso);
+  else
+    gts_isosurface_cartesian (surface, g, func, NULL, iso);
 
   if (verbose)
     gts_surface_print_stats (surface, stderr);
diff --git a/examples/volume.c b/examples/merge.c
similarity index 55%
copy from examples/volume.c
copy to examples/merge.c
index ba0fc34..1254e60 100644
--- a/examples/volume.c
+++ b/examples/merge.c
@@ -18,6 +18,7 @@
  */
 
 #include <stdlib.h>
+#include <math.h>
 #include "config.h"
 #ifdef HAVE_GETOPT_H
 #  include <getopt.h>
@@ -27,24 +28,21 @@
 #endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
-/* volume - compute the volume of a given surface if it is a closed and
-   orientable manifold */
 int main (int argc, char * argv[])
 {
   GtsSurface * s;
   gboolean verbose = FALSE;
   int c = 0;
-  guint line;
 
   /* parse options using getopt */
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
       {"help", no_argument, NULL, 'h'},
-      {"verbose", no_argument, NULL, 'v'}
+      {"verbose", no_argument, NULL, 'v'},
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hv", 
+    switch ((c = getopt_long (argc, argv, "hv",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
     switch ((c = getopt (argc, argv, "hv"))) {
@@ -54,49 +52,52 @@ int main (int argc, char * argv[])
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: volume [OPTION] < file.gts\n"
-	     "Compute the volume of the domain bounded by the surface defined by file.srf.\n"
-	     "Print the volume and exit successfully if the surface is a closed orientable\n"
-	     "manifold. Exit unsuccessfully otherwise.\n"
+             "Usage: merge [OPTION] file1.gts file2.gts ...\n"
+	     "Merges files and outputs the resulting GTS surface.\n"
 	     "\n"
-	     "  -v    --verbose  print statistics about the surface\n"
-	     "  -h    --help     display this help and exit\n"
+	     "  -v        --verbose       print statistics about the surface\n"
+	     "  -h        --help          display this help and exit\n"
 	     "\n"
 	     "Reports bugs to %s\n",
 	     GTS_MAINTAINER);
       return 0; /* success */
       break;
     case '?': /* wrong options */
-      fprintf (stderr, "Try `volume --help' for more information.\n");
+      fprintf (stderr, "Try `merge --help' for more information.\n");
       return 1; /* failure */
     }
   }
-  
-  /* read surface in */
-  s = gts_surface_new (gts_surface_class (),
-		       gts_face_class (),
-		       gts_edge_class (),
-		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
-    fputs ("volume: the file on standard input is not a valid GTS file\n", 
-	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
-    return 1; /* failure */
+
+  s = GTS_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gts_surface_class ())));
+
+  while (optind < argc) {
+    FILE * f = fopen (argv[optind], "r");
+    GtsFile * fp;
+    GtsSurface * s1;
+
+    if (f == NULL) {
+      fprintf (stderr, "merge: can not open file `%s'\n", argv[optind]);
+      return 1;
+    }
+    fp = gts_file_new (f);
+    s1 = GTS_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gts_surface_class ())));
+    if (gts_surface_read (s1, fp)) {
+      fprintf (stderr, "merge: `%s' is not a valid GTS surface file\n", 
+	       argv[optind]);
+      fprintf (stderr, "%s:%d:%d: %s\n", argv[optind], fp->line, fp->pos, fp->error);
+      return 1;
+    }
+    gts_surface_merge (s, s1);
+    gts_object_destroy (GTS_OBJECT (s1));
+    gts_file_destroy (fp);
+    fclose (f);
+    optind++;
   }
 
-  /* if verbose on print stats */
   if (verbose)
-    gts_surface_print_stats (s, stdout);
+    gts_surface_print_stats (s, stderr);
 
-  /* test if surface is a closed and orientable manifold.
-     we don't need to test if s is a manifold since both tests below
-     implies that. */
-  if (!gts_surface_is_closed (s) || !gts_surface_is_orientable (s))
-    return 1; /* failure */
-  
-  /* print volume */
-  printf ("%g\n", gts_surface_volume (s));
+  gts_surface_write (s, stdout);
 
-  return 0; /* success */
+  return 0;
 }
diff --git a/examples/optimize.c b/examples/optimize.c
new file mode 100644
index 0000000..82f89b6
--- /dev/null
+++ b/examples/optimize.c
@@ -0,0 +1,291 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <math.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include "gts.h"
+
+#define HEAP_INSERT_EDGE(h, e) (GTS_OBJECT (e)->reserved = gts_eheap_insert (h, e))
+#define HEAP_REMOVE_EDGE(h, e) (gts_eheap_remove (h, GTS_OBJECT (e)->reserved),\
+                                GTS_OBJECT (e)->reserved = NULL)
+
+static gdouble triangles_angle (GtsPoint * p1, GtsPoint * p2, 
+				GtsPoint * p3, GtsPoint * p4)
+{ 
+  gdouble x1, y1, z1, x2, y2, z2;
+  gdouble nx1, ny1, nz1, nx2, ny2, nz2;
+  gdouble pvx, pvy, pvz;
+  gdouble theta;
+
+  x1 = p2->x - p1->x;
+  y1 = p2->y - p1->y;
+  z1 = p2->z - p1->z;
+
+  x2 = p3->x - p1->x;
+  y2 = p3->y - p1->y;
+  z2 = p3->z - p1->z;
+
+  nx1 = y1*z2 - z1*y2;
+  ny1 = z1*x2 - x1*z2;
+  nz1 = x1*y2 - y1*x2;
+
+  x1 = p1->x - p2->x;
+  y1 = p1->y - p2->y;
+  z1 = p1->z - p2->z;
+
+  x2 = p4->x - p2->x;
+  y2 = p4->y - p2->y;
+  z2 = p4->z - p2->z;
+
+  nx2 = y1*z2 - z1*y2;
+  ny2 = z1*x2 - x1*z2;
+  nz2 = x1*y2 - y1*x2;
+
+  pvx = ny1*nz2 - nz1*ny2;
+  pvy = nz1*nx2 - nx1*nz2;
+  pvz = nx1*ny2 - ny1*nx2;
+
+  theta = atan2 (sqrt (pvx*pvx + pvy*pvy + pvz*pvz), 
+		 nx1*nx2 + ny1*ny2 + nz1*nz2) - M_PI;
+  return theta < - M_PI ? theta + 2.*M_PI : theta;
+  
+}
+
+static gdouble edge_swap_cost (GtsEdge * e)
+{
+  GSList * i;
+  GtsTriangle * t1 = NULL, * t2 = NULL;
+  GtsVertex * v1, * v2, * v3, * v4;
+  GtsEdge * e1, * e2, * e3, * e4;
+  gdouble ab, aa;
+
+  i = e->triangles;
+  while (i) {
+    if (GTS_IS_FACE (i->data)) {
+      if (!t1) t1 = i->data;
+      else if (!t2) t2 = i->data;
+      else return G_MAXDOUBLE;
+    }
+    i = i->next;
+  }
+  if (!t1 || !t2)
+    return G_MAXDOUBLE;
+
+  gts_triangle_vertices_edges (t1, e, &v1, &v2, &v3, &e, &e3, &e4);
+  gts_triangle_vertices_edges (t2, e, &v2, &v1, &v4, &e, &e1, &e2);
+
+  ab = triangles_angle (GTS_POINT (v1), GTS_POINT (v2), 
+			GTS_POINT (v3), GTS_POINT (v4));
+  aa = triangles_angle (GTS_POINT (v3), GTS_POINT (v4), 
+			GTS_POINT (v2), GTS_POINT (v1));
+  return fabs (ab) - fabs (aa);
+}
+
+static void edge_swap (GtsEdge * e, GtsSurface * s, GtsEHeap * heap)
+{
+  GSList * i;
+  GtsTriangle * t1 = NULL, * t2 = NULL;
+  GtsVertex * v1, * v2, * v3, * v4;
+  GtsEdge * e1, * e2, * e3, * e4;
+
+  i = e->triangles;
+  while (i) {
+    if (GTS_IS_FACE (i->data)) {
+      if (!t1) t1 = i->data;
+      else if (!t2) t2 = i->data;
+      else g_assert_not_reached ();
+    }
+    i = i->next;
+  }
+  g_assert (t1 && t2);
+
+  gts_triangle_vertices_edges (t1, e, &v1, &v2, &v3, &e, &e3, &e4);
+  gts_triangle_vertices_edges (t2, e, &v2, &v1, &v4, &e, &e1, &e2);
+
+  gts_object_destroy (GTS_OBJECT (e));
+  e = gts_edge_new (s->edge_class, v3, v4);
+  gts_surface_add_face (s, gts_face_new (s->face_class, e, e4, e1));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e, e2, e3));
+  
+  HEAP_INSERT_EDGE (heap, e);
+  HEAP_REMOVE_EDGE (heap, e1);
+  HEAP_INSERT_EDGE (heap, e1);
+  HEAP_REMOVE_EDGE (heap, e2);
+  HEAP_INSERT_EDGE (heap, e2);
+  HEAP_REMOVE_EDGE (heap, e3);
+  HEAP_INSERT_EDGE (heap, e3);
+  HEAP_REMOVE_EDGE (heap, e4);
+  HEAP_INSERT_EDGE (heap, e4);
+}
+
+static void create_heap_optimize (GtsEdge * e, GtsEHeap * heap)
+{
+  HEAP_INSERT_EDGE (heap, e);
+}
+
+static void surface_optimize (GtsSurface * surface,
+			      gdouble max_cost)
+{
+  GtsEHeap * heap;
+  GtsEdge * e;
+  gdouble top_cost;
+
+  heap = gts_eheap_new ((GtsKeyFunc) edge_swap_cost, NULL);
+  gts_eheap_freeze (heap);
+  gts_surface_foreach_edge (surface, (GtsFunc) create_heap_optimize, heap);
+  gts_eheap_thaw (heap);
+
+  gts_allow_floating_edges = TRUE;
+  while ((e = gts_eheap_remove_top (heap, &top_cost)) &&
+	 top_cost < max_cost)
+    edge_swap (e, surface, heap);
+  gts_allow_floating_edges = FALSE;
+
+  if (e) GTS_OBJECT (e)->reserved = NULL;
+  gts_eheap_foreach (heap, (GFunc) gts_object_reset_reserved, NULL);
+
+  gts_eheap_destroy (heap);
+}
+
+static void angle_stats (GtsEdge * e, GtsRange * angle)
+{
+  GSList * i;
+  GtsTriangle * t1 = NULL, * t2 = NULL;
+
+  i = e->triangles;
+  while (i) {
+    if (GTS_IS_FACE (i->data)) {
+      if (!t1) t1 = i->data;
+      else if (!t2) t2 = i->data;
+      else return;
+    }
+    i = i->next;
+  }
+  if (!t1 || !t2)
+    return;
+
+  gts_range_add_value (angle, fabs (gts_triangles_angle (t1, t2)));
+}
+
+int main (int argc, char * argv[])
+{
+  GtsSurface * s;
+  gboolean verbose = FALSE;
+  gdouble threshold;
+  int c = 0;
+  GtsFile * fp;
+  GtsRange angle;
+
+  /* parse options using getopt */
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hv", 
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hv"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 'v': /* verbose */
+      verbose = TRUE;
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+             "Usage: optimize [OPTION] THRESHOLD < FILE\n"
+	     "\n"
+	     "  -v      --verbose  print statistics about the surface\n"
+	     "  -h      --help     display this help and exit\n"
+	     "\n"
+	     "Report bugs to %s\n",
+	     GTS_MAINTAINER);
+      return 0; /* success */
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `optimize --help' for more information.\n");
+      return 1; /* failure */
+    }
+  }
+
+  if (optind >= argc) { /* missing threshold */
+    fprintf (stderr, 
+	     "optimize: missing THRESHOLD\n"
+	     "Try `optimize --help' for more information.\n");
+    return 1; /* failure */
+  }
+  threshold = atof (argv[optind]);
+
+  if (threshold < 0.0) { /* threshold must be positive */
+     fprintf (stderr, 
+	     "optimize: THRESHOLD must be >= 0.0\n"
+	     "Try `optimize --help' for more information.\n");
+    return 1; /* failure */
+  }
+
+  /* read surface in */
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("optimize: file on standard input is not a valid GTS file\n", 
+	   stderr);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+    return 1; /* failure */
+  }
+
+  /* if verbose on print stats */
+  if (verbose) {
+    gts_surface_print_stats (s, stderr);
+    gts_range_init (&angle);
+    gts_surface_foreach_edge (s, (GtsFunc) angle_stats, &angle);
+    gts_range_update (&angle);
+    fputs ("#   angle : ", stderr);
+    gts_range_print (&angle, stderr);
+    fputc ('\n', stderr);
+  }
+
+  surface_optimize (s, -threshold);
+
+  /* if verbose on print stats */
+  if (verbose) {
+    gts_surface_print_stats (s, stderr);
+    gts_range_init (&angle);
+    gts_surface_foreach_edge (s, (GtsFunc) angle_stats, &angle);
+    gts_range_update (&angle);
+    fputs ("#   angle : ", stderr);
+    gts_range_print (&angle, stderr);
+    fputc ('\n', stderr);
+  }
+
+  /* write surface */
+  gts_surface_write (s, stdout);
+
+  return 0; /* success */
+}
diff --git a/examples/partition.c b/examples/partition.c
index 4b27b8e..528feaf 100644
--- a/examples/partition.c
+++ b/examples/partition.c
@@ -64,13 +64,15 @@ int main (int argc, char * argv[])
 {
   GtsSurface * s;
   GtsGraph * g;
-  guint line, np;
+  GtsFile * fp;
+  guint np;
   guint nmin = 100;
   guint mmax = 50;
   guint ntry = 10;
   GSList * partition;
   int c = 0;
   gboolean verbose = FALSE;
+  gfloat imbalance = 0.1;
 
   /* parse options using getopt */
   while (c != EOF) {
@@ -80,14 +82,18 @@ int main (int argc, char * argv[])
       {"verbose", no_argument, NULL, 'v'},
       {"try", required_argument, NULL, 't'},
       {"mmax", required_argument, NULL, 'm'},
-      {"nmin", required_argument, NULL, 'n'}
+      {"nmin", required_argument, NULL, 'n'},
+      {"imbalance", required_argument, NULL, 'i'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hvt:m:n:", 
+    switch ((c = getopt_long (argc, argv, "hvt:m:n:i:", 
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hvt:m:n:"))) {
+    switch ((c = getopt (argc, argv, "hvt:m:n:i:"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'i': /* imbalance */
+      imbalance = atof (optarg);
+      break;
     case 't': /* try */
       ntry = atoi (optarg);
       break;
@@ -110,11 +116,12 @@ int main (int argc, char * argv[])
 	       "For GRAPH input the output is a graph partition (.ptn format) as defined in\n"
 	       "\"The Graph Partitioning Archive\" (http://www.gre.ac.uk/~c.walshaw/partition/).\n"
 	       "\n"
-	       "  -t N  --try=N    number of tries for graph growing (default 10)\n"
-	       "  -m N  --mmax=N   number of unsuccessful moves for Kernighan-Lin (default 50)\n"
-	       "  -n N  --nmin=N   minimum number of nodes on coarsest graph (default 100)\n"
-	       "  -v    --verbose  print statistics about the graph and partition\n"
-	       "  -h    --help     display this help and exit\n"
+	       "  -t N  --try=N       number of tries for graph growing (default 10)\n"
+	       "  -m N  --mmax=N      number of unsuccessful moves for Kernighan-Lin (default 50)\n"
+	       "  -n N  --nmin=N      minimum number of nodes on coarsest graph (default 100)\n"
+               "  -i I  --imbalance=I relative imbalance (default is 0.1)\n"
+	       "  -v    --verbose     print statistics about the graph and partition\n"
+	       "  -h    --help        display this help and exit\n"
 	       "\n"
 	       "Reports bugs to %s\n",
 	     GTS_MAINTAINER);
@@ -139,19 +146,23 @@ int main (int argc, char * argv[])
 		       gts_edge_class (),
 		       gts_vertex_class ());
 
-  line = gts_surface_read (s, stdin);
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    GtsFile * fp1;
+
     gts_object_destroy (GTS_OBJECT (s));
     s = NULL;
     rewind (stdin);
-    
+
+    fp1 = gts_file_new (stdin);
     g = gts_graph_new (GTS_GRAPH_CLASS (gts_wgraph_class ()),
 		       gts_gnode_class (), gts_gedge_class ());
-    line = gts_graph_read (g, stdin);
-    if (line) {
+    if (gts_graph_read_jostle (g, fp1)) {
       fputs ("partition: file on standard input is neither a valid GTS file nor a valid GRAPH file\n",
 	     stderr);
-      fprintf (stderr, "GRAPH format error at line %d\n", line);
+      fprintf (stderr, "GTS stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+      fprintf (stderr, "GRAPH stdin:%d:%d: %s\n", 
+	       fp1->line, fp1->pos, fp1->error);
       return 1; /* failure */
     }
   }
@@ -164,7 +175,7 @@ int main (int argc, char * argv[])
   if (verbose)
     gts_graph_print_stats (g, stderr);
   partition = gts_graph_recursive_bisection (GTS_WGRAPH (g), 
-					     np, ntry, mmax, nmin);
+					     np, ntry, mmax, nmin, imbalance);
   if (verbose)
     gts_graph_partition_print_stats (partition, stderr);
 
diff --git a/examples/refine.c b/examples/refine.c
new file mode 100644
index 0000000..360e8bd
--- /dev/null
+++ b/examples/refine.c
@@ -0,0 +1,253 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <math.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include "gts.h"
+
+#ifndef PI
+#define PI 3.14159265359
+#endif
+
+typedef enum { NUMBER, COST } StopOptions;
+
+static gboolean stop_number_verbose (gdouble cost, guint number, guint * max)
+{
+  static guint nmax = 0, nold = 0;
+  static GTimer * timer = NULL, * total_timer = NULL;
+
+  g_return_val_if_fail (max != NULL, TRUE);
+
+  if (timer == NULL) {
+    nmax = nold = number;
+    timer = g_timer_new ();
+    total_timer = g_timer_new ();
+    g_timer_start (total_timer);
+  }
+
+  if (number != nold && number % 1211 == 0 &&
+      number > nmax && nmax < *max) {
+    gdouble total_elapsed = g_timer_elapsed (total_timer, NULL);
+    gdouble remaining;
+    gdouble hours, mins, secs;
+    gdouble hours1, mins1, secs1;
+
+    g_timer_stop (timer);
+
+    hours = floor (total_elapsed/3600.);
+    mins = floor ((total_elapsed - 3600.*hours)/60.);
+    secs = floor (total_elapsed - 3600.*hours - 60.*mins);
+
+    remaining = total_elapsed*((*max - nmax)/(gdouble) (number - nmax) - 1.);
+    hours1 = floor (remaining/3600.);
+    mins1 = floor ((remaining - 3600.*hours1)/60.);
+    secs1 = floor (remaining - 3600.*hours1 - 60.*mins1);
+
+    fprintf (stderr, 
+	     "\rEdges: %10u %3.0f%% %6.0f edges/s "
+	     "Elapsed: %02.0f:%02.0f:%02.0f "
+	     "Remaining: %02.0f:%02.0f:%02.0f ",
+	     number, 
+	     100.*(number - nmax)/(*max - nmax),
+	     (number - nold)/g_timer_elapsed (timer, NULL),
+	     hours, mins, secs,
+	     hours1, mins1, secs1);
+    fflush (stderr);
+
+    nold = number;
+    g_timer_start (timer);
+  }
+  if (number > *max) {
+    g_timer_destroy (timer);
+    g_timer_destroy (total_timer);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+static gboolean stop_number (gdouble cost, guint number, guint * max)
+{
+  if (number > *max)
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean stop_cost_verbose (gdouble cost, guint number, gdouble * min)
+{
+  g_return_val_if_fail (min != NULL, TRUE);
+
+  if (number % 511 == 0) {
+    fprintf (stderr, "\rEdges: %10u Cost: %10g ", number, cost);
+    fflush (stderr);
+  }
+  if (cost < *min)
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean stop_cost (gdouble cost, guint number, gdouble * min)
+{
+  if (cost < *min)
+    return TRUE;
+  return FALSE;
+}
+
+static gboolean stop_log_cost (gdouble cost, guint number)
+{
+  fprintf (stderr, "%d %g\n", number, cost);
+  return FALSE;
+}
+
+/* refine - produce a refined version of the input */
+int main (int argc, char * argv[])
+{
+  GtsSurface * s;
+  gboolean verbose = FALSE;
+  gboolean log_cost = FALSE;
+  guint number = 0;
+  gdouble cmin = 0.0;
+  StopOptions stop = NUMBER;
+  GtsKeyFunc refine_func = NULL;
+  GtsStopFunc stop_func = NULL;
+  gpointer stop_data = NULL;
+  int c = 0;
+  GtsFile * fp;
+
+  /* parse options using getopt */
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'},
+      {"number", required_argument, NULL, 'n'},
+      {"cost", required_argument, NULL, 'c'},
+      {"log", no_argument, NULL, 'L'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hvc:n:L",
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hvc:n:L"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 'L': /* log */
+      log_cost = TRUE;
+      break;
+    case 'n': /* stop by number */
+      stop = NUMBER;
+      number = atoi (optarg);
+      break;
+    case 'c': /* stop by cost */
+      stop = COST;
+      cmin = atof (optarg);
+      break;
+    case 'v': /* verbose */
+      verbose = TRUE;
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+             "Usage: refine [OPTION] < file.gts\n"
+	     "Construct a refineed version of the input.\n"
+	     "\n"
+	     "  -n N, --number=N    stop the refining process if the number of\n"
+	     "                      edges was to be greater than N\n"
+	     "  -c C, --cost=C      stop the refining process if the cost of refining\n"
+	     "                      an edge is smaller than C\n"
+	     "  -L    --log         logs the evolution of the cost\n"
+	     "  -v    --verbose     print statistics about the surface\n"
+	     "  -h    --help        display this help and exit\n"
+	     "\n"
+	     "Reports bugs to %s\n",
+	     GTS_MAINTAINER);
+      return 0; /* success */
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `refine --help' for more information.\n");
+      return 1; /* failure */
+    }
+  }
+  
+  /* read surface in */
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("refine: the file on standard input is not a valid GTS file\n", 
+	   stderr);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+    return 1; /* failure */
+  }
+
+  /* if verbose on print stats */
+  if (verbose) {
+    gts_surface_print_stats (s, stderr);
+    fprintf (stderr, "# volume: %g area: %g\n", 
+	     gts_surface_volume (s), gts_surface_area (s));
+  }
+
+  /* select the right refining process */
+  if (log_cost)
+    stop_func = (GtsStopFunc) stop_log_cost;
+  else {
+    switch (stop) {
+    case NUMBER:
+      if (verbose)
+	stop_func = (GtsStopFunc) stop_number_verbose;
+      else
+	stop_func = (GtsStopFunc) stop_number; 
+      stop_data = &number;
+      break;
+    case COST:
+      if (verbose)
+	stop_func = (GtsStopFunc) stop_cost_verbose;
+      else
+	stop_func = (GtsStopFunc) stop_cost; 
+      stop_data = &cmin;
+      break;
+    default:
+      g_assert_not_reached ();
+    }
+  }
+
+  gts_surface_refine (s, 
+		      refine_func, NULL,
+		      NULL, NULL, 
+		      stop_func, stop_data);
+
+  /* if verbose on print stats */
+  if (verbose) {
+    fputc ('\n', stderr);
+    gts_surface_print_stats (s, stderr);
+    fprintf (stderr, "# volume: %g area: %g\n", 
+	     gts_surface_volume (s), gts_surface_area (s));
+  }
+
+  /* write resulting surface to standard output */
+  gts_surface_write (s, stdout);
+
+  return 0; /* success */
+}
diff --git a/examples/set.c b/examples/set.c
index bf5f8f6..8fbceb5 100644
--- a/examples/set.c
+++ b/examples/set.c
@@ -19,8 +19,25 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
+static void write_edge (GtsSegment * s, FILE * fp)
+{
+  fprintf (fp, "VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
+	   GTS_POINT (s->v1)->x,
+	   GTS_POINT (s->v1)->y,
+	   GTS_POINT (s->v1)->z,
+	   GTS_POINT (s->v2)->x,
+	   GTS_POINT (s->v2)->y,
+	   GTS_POINT (s->v2)->z);
+}
 
 /* set - compute set operations between surfaces */
 int main (int argc, char * argv[])
@@ -28,100 +45,234 @@ int main (int argc, char * argv[])
   GtsSurface * s1, * s2, * s3;
   GtsSurfaceInter * si;
   GNode * tree1, * tree2;
-  FILE * fp;
-  guint line;
+  FILE * fptr;
+  GtsFile * fp;
+  int c = 0;
+  gboolean verbose = TRUE;
+  gboolean inter = FALSE;
+  gboolean check_self_intersection = FALSE;
+  gchar * operation, * file1, * file2;
+  gboolean closed = TRUE, is_open1, is_open2;
+
+  /* parse options using getopt */
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"inter", no_argument, NULL, 'i'},
+      {"self", no_argument, NULL, 's'},
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hvis", 
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hvis"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 's': /* self */
+      check_self_intersection = TRUE;
+      break;
+    case 'i': /* inter */
+      inter = TRUE;
+      break;
+    case 'v': /* verbose */
+      verbose = FALSE;
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+             "Usage: set [OPTION] OPERATION FILE1 FILE2\n"
+             "Compute set operations between surfaces, where OPERATION is either.\n"
+             "union, inter, diff.\n"
+	     "\n"
+             "  -i      --inter    output an OOGL (Geomview) representation of the curve\n"
+             "                     intersection of the surfaces\n"
+	     "  -s      --self     checks that the surfaces are not self-intersecting\n"
+             "                     if one of them is, the set of self-intersecting faces\n"
+	     "                     is written (as a GtsSurface) on standard output\n"
+	     "  -v      --verbose  do not print statistics about the surface\n"
+	     "  -h      --help     display this help and exit\n"
+	     "\n"
+	     "Reports bugs to %s\n",
+	     GTS_MAINTAINER);
+      return 0; /* success */
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `set --help' for more information.\n");
+      return 1; /* failure */
+    }
+  }
 
-  if (argc != 4) {
+  if (optind >= argc) { /* missing OPERATION */
     fprintf (stderr, 
-	     "%s: compute set operations between surfaces\n"
-	     "usage: %s OPERATION FILE1 FILE2\n"
-	     "where OPERATION is either union, inter, diff\n",
-	     argv[0], argv[0]);
-    return 1;
+	     "set: missing OPERATION\n"
+	     "Try `set --help' for more information.\n");
+    return 1; /* failure */
+  }
+  operation = argv[optind++];
+
+  if (optind >= argc) { /* missing FILE1 */
+    fprintf (stderr, 
+	     "set: missing FILE1\n"
+	     "Try `set --help' for more information.\n");
+    return 1; /* failure */
+  }
+  file1 = argv[optind++];
+
+  if (optind >= argc) { /* missing FILE2 */
+    fprintf (stderr, 
+	     "set: missing FILE2\n"
+	     "Try `set --help' for more information.\n");
+    return 1; /* failure */
   }
+  file2 = argv[optind++];
 
   /* open first file */
-  if ((fp = fopen (argv[2], "rt")) == NULL) {
-    fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[2]);
+  if ((fptr = fopen (file1, "rt")) == NULL) {
+    fprintf (stderr, "set: can not open file `%s'\n", file1);
     return 1;
   }
   /* reads in first surface file */
   s1 = GTS_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gts_surface_class ())));
-  if ((line = gts_surface_read (s1, fp))) {
-    fprintf (stderr, "%s: `%s' is not a valid GTS surface file\n", 
-	     argv[0], argv[2]);
-    fprintf (stderr, "Format error at line %d\n", line);
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s1, fp)) {
+    fprintf (stderr, "set: `%s' is not a valid GTS surface file\n", 
+	     file1);
+    fprintf (stderr, "%s:%d:%d: %s\n", file1, fp->line, fp->pos, fp->error);
     return 1;
   }
-  fclose (fp);
+  gts_file_destroy (fp);
+  fclose (fptr);
 
   /* open second file */
-  if ((fp = fopen (argv[3], "rt")) == NULL) {
-    fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[3]);
+  if ((fptr = fopen (file2, "rt")) == NULL) {
+    fprintf (stderr, "set: can not open file `%s'\n", file2);
     return 1;
   }
   /* reads in second surface file */
   s2 = GTS_SURFACE (gts_object_new (GTS_OBJECT_CLASS (gts_surface_class ())));
-  if ((line = gts_surface_read (s2, fp))) {
-    fprintf (stderr, "%s: `%s' is not a valid GTS surface file\n", 
-	     argv[0], argv[3]);
-    fprintf (stderr, "Format error at line %d\n", line);
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s2, fp)) {
+    fprintf (stderr, "set: `%s' is not a valid GTS surface file\n", 
+	     file2);
+    fprintf (stderr, "%s:%d:%d: %s\n", file2, fp->line, fp->pos, fp->error);
     return 1;
   }
-  fclose (fp);
+  gts_file_destroy (fp);
+  fclose (fptr);
 
   /* display summary information about both surfaces */
-  gts_surface_print_stats (s1, stderr);
-  gts_surface_print_stats (s2, stderr);
+  if (verbose) {
+    gts_surface_print_stats (s1, stderr);
+    gts_surface_print_stats (s2, stderr);
+  }
 
   /* check that the surfaces are orientable manifolds */
   if (!gts_surface_is_orientable (s1)) {
-    fprintf (stderr, "surface `%s' is not an orientable manifold\n",
-	     argv[2]);
+    fprintf (stderr, "set: surface `%s' is not an orientable manifold\n",
+	     file1);
     return 1;
   }
   if (!gts_surface_is_orientable (s2)) {
-    fprintf (stderr, "surface `%s' is not an orientable manifold\n",
-	     argv[3]);
+    fprintf (stderr, "set: surface `%s' is not an orientable manifold\n",
+	     file2);
     return 1;
   }
 
+  /* check that the surfaces are not self-intersecting */
+  if (check_self_intersection) {
+    GtsSurface * self_intersects;
+
+    self_intersects = gts_surface_is_self_intersecting (s1);
+    if (self_intersects != NULL) {
+      fprintf (stderr, "set: surface `%s' is self-intersecting\n", file1);
+      if (verbose)
+	gts_surface_print_stats (self_intersects, stderr);
+      gts_surface_write (self_intersects, stdout);
+      gts_object_destroy (GTS_OBJECT (self_intersects));
+      return 1;
+    }
+    self_intersects = gts_surface_is_self_intersecting (s2);
+    if (self_intersects != NULL) {
+      fprintf (stderr, "set: surface `%s' is self-intersecting\n", file2);
+      if (verbose)
+	gts_surface_print_stats (self_intersects, stderr);
+      gts_surface_write (self_intersects, stdout);
+      gts_object_destroy (GTS_OBJECT (self_intersects));
+      return 1;
+    }
+  }
+
   /* build bounding box tree for first surface */
   tree1 = gts_bb_tree_surface (s1);
+  is_open1 = gts_surface_volume (s1) < 0. ? TRUE : FALSE;
 
   /* build bounding box tree for second surface */
   tree2 = gts_bb_tree_surface (s2);
+  is_open2 = gts_surface_volume (s2) < 0. ? TRUE : FALSE;
 
   si = gts_surface_inter_new (gts_surface_inter_class (),
-			      s1, s2, tree1, tree2);
-  g_assert (gts_surface_inter_check (si));
+			      s1, s2, tree1, tree2, is_open1, is_open2);
+  g_assert (gts_surface_inter_check (si, &closed));
+  if (!closed) {
+    fprintf (stderr,
+	     "set: the intersection of `%s' and `%s' is not a closed curve\n",
+	     file1, file2);
+    return 1;
+  }
+
   s3 = gts_surface_new (gts_surface_class (),
 			gts_face_class (),
 			gts_edge_class (),
 			gts_vertex_class ());  
-  if (!strcmp (argv[1], "union")) {
+  if (!strcmp (operation, "union")) {
     gts_surface_inter_boolean (si, s3, GTS_1_OUT_2);
     gts_surface_inter_boolean (si, s3, GTS_2_OUT_1);
   }
-  else if (!strcmp (argv[1], "inter")) {
+  else if (!strcmp (operation, "inter")) {
     gts_surface_inter_boolean (si, s3, GTS_1_IN_2);
     gts_surface_inter_boolean (si, s3, GTS_2_IN_1);
   }
-  else if (!strcmp (argv[1], "diff")) {
+  else if (!strcmp (operation, "diff")) {
     gts_surface_inter_boolean (si, s3, GTS_1_OUT_2);
     gts_surface_inter_boolean (si, s3, GTS_2_IN_1);
     gts_surface_foreach_face (si->s2, (GtsFunc) gts_triangle_revert, NULL);
     gts_surface_foreach_face (s2, (GtsFunc) gts_triangle_revert, NULL);
   }
   else {
-    fprintf (stderr, "%s: operation `%s' unknown\n", argv[0], argv[1]);
+    fprintf (stderr, 
+	     "set: operation `%s' unknown\n"
+	     "Try `set --help' for more information.\n", 
+	     operation);
     return 1;
   }
   
+  /* check that the resulting surface is not self-intersecting */
+  if (check_self_intersection) {
+    GtsSurface * self_intersects;
+
+    self_intersects = gts_surface_is_self_intersecting (s3);
+    if (self_intersects != NULL) {
+      fprintf (stderr, "set: the resulting surface is self-intersecting\n");
+      if (verbose)
+	gts_surface_print_stats (self_intersects, stderr);
+      gts_surface_write (self_intersects, stdout);
+      gts_object_destroy (GTS_OBJECT (self_intersects));
+      return 1;
+    }
+  }
   /* display summary information about the resulting surface */
-  gts_surface_print_stats (s3, stderr);
+  if (verbose)
+    gts_surface_print_stats (s3, stderr);
   /* write resulting surface to standard output */
-  gts_surface_write (s3, stdout);
+  if (inter) {
+    printf ("LIST {\n");
+    g_slist_foreach (si->edges, (GFunc) write_edge, stdout);
+    printf ("}\n");
+  }
+  else {
+    GTS_POINT_CLASS (gts_vertex_class ())->binary = TRUE;
+    gts_surface_write (s3, stdout);
+  }
 
   /* destroy surfaces */
   gts_object_destroy (GTS_OBJECT (s1));
diff --git a/examples/smooth.c b/examples/smooth.c
new file mode 100644
index 0000000..5a84f30
--- /dev/null
+++ b/examples/smooth.c
@@ -0,0 +1,199 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include "gts.h"
+
+static void smooth_vertex (GtsVertex * v, gpointer * data)
+{
+  GtsSurface * s = data[0];
+
+  if (!gts_vertex_is_boundary (v, s)) {
+    gdouble * lambda = data[1];
+    GSList * vertices = gts_vertex_neighbors (v, NULL, s);
+    GSList * i;
+    GtsVector U0 = { 0., 0., 0.};
+    guint n = 0;
+    
+    i = vertices;
+    while (i) {
+      GtsPoint * p = i->data;
+      U0[0] += p->x;
+      U0[1] += p->y;
+      U0[2] += p->z;
+      n++;
+      i = i->next;
+    }
+    g_slist_free (vertices);
+    
+    if (n > 0) {
+      GTS_POINT (v)->x += (*lambda)*(U0[0]/n - GTS_POINT (v)->x);
+      GTS_POINT (v)->y += (*lambda)*(U0[1]/n - GTS_POINT (v)->y);
+      GTS_POINT (v)->z += (*lambda)*(U0[2]/n - GTS_POINT (v)->z);
+    }
+  }
+}
+
+static void smooth_fold (GtsVertex * v, gpointer * data)
+{
+  gdouble * maxcosine2 = data[2];
+  GSList * i = v->segments;
+  gboolean folded = FALSE;
+  guint * nfold = data[3];
+
+  while (i && !folded) {
+    if (GTS_IS_EDGE (i->data)) {
+      GtsEdge * e = i->data;
+
+      if (gts_triangles_are_folded (e->triangles, 
+				    GTS_SEGMENT (e)->v1,
+				    GTS_SEGMENT (e)->v2,
+				    *maxcosine2))
+	folded = TRUE;
+    }
+    i = i->next;
+  }
+  if (folded) {
+    (*nfold)++;
+    smooth_vertex (v, data);
+  }
+}
+
+int main (int argc, char * argv[])
+{
+  GtsSurface * s;
+  GtsFile * fp;
+  int c = 0;
+  gboolean verbose = FALSE;
+  guint n, niter;
+  gdouble lambda;
+  gpointer data[4];
+  gboolean fold = FALSE;
+  gdouble maxcosine2 = 0.;
+  guint nfold = 1;
+
+  /* parse options using getopt */
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"fold", required_argument, NULL, 'f'},
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hvf:", 
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hvf:"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 'f': /* fold */
+      fold = TRUE;
+      maxcosine2 = cos (atof (optarg)*3.14159265359/180.);
+      maxcosine2 *= maxcosine2;
+      break;
+    case 'v': /* verbose */
+      verbose = TRUE;
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+             "Usage: smooth [OPTION] LAMBDA NITER < file.gts > smooth.gts\n"
+	     "Smooth a GTS file by applying NITER iterations of a Laplacian filter\n"
+	     "of parameter LAMBDA.\n"
+	     "\n"
+	     "  -f VAL  --fold=VAL   smooth only folds\n"
+	     "  -v      --verbose    print statistics about the surface\n"
+	     "  -h      --help       display this help and exit\n"
+	     "\n"
+	     "Reports bugs to %s\n",
+	     GTS_MAINTAINER);
+      return 0; /* success */
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `smooth --help' for more information.\n");
+      return 1; /* failure */
+    }
+  }
+
+  if (optind >= argc) { /* missing lambda */
+    fprintf (stderr, 
+	     "smooth: missing LAMBDA\n"
+	     "Try `smooth --help' for more information.\n");
+    return 1; /* failure */
+  }
+  lambda = atof (argv[optind++]);
+
+  if (optind >= argc) { /* missing niter */
+    fprintf (stderr, 
+	     "smooth: missing NITER\n"
+	     "Try `smooth --help' for more information.\n");
+    return 1; /* failure */
+  }
+  niter = atoi (argv[optind++]);
+
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("smooth: file on standard input is not a valid GTS file\n", 
+	   stderr);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+    return 1; /* failure */
+  }
+
+  if (verbose)
+    gts_surface_print_stats (s, stderr);
+
+  data[0] = s;
+  data[1] = λ
+  data[2] = &maxcosine2;
+  data[3] = &nfold;
+
+  for (n = 1; n <= niter && (!fold || nfold > 0); n++) {
+    if (fold) {
+      nfold = 0;
+      gts_surface_foreach_vertex (s, (GtsFunc) smooth_fold, data);
+    }
+    else
+      gts_surface_foreach_vertex (s, (GtsFunc) smooth_vertex, data);
+    if (verbose)
+      fprintf (stderr, "\rIteration: %10u %3.0f%% ",
+	       n,
+	       100.*n/niter);
+  }
+
+  if (verbose) {
+    fputc ('\n', stderr);
+    gts_surface_print_stats (s, stderr);
+  }
+
+  gts_surface_write (s, stdout);
+
+  return 0;
+}
diff --git a/examples/volume.c b/examples/sphere.c
similarity index 62%
copy from examples/volume.c
copy to examples/sphere.c
index ba0fc34..fbdfd7c 100644
--- a/examples/volume.c
+++ b/examples/sphere.c
@@ -27,14 +27,16 @@
 #endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
-/* volume - compute the volume of a given surface if it is a closed and
-   orientable manifold */
+/* sphere - generate a triangulated unit sphere by recursive subdivision.
+   First approximation is an isocahedron; each level of refinement
+   increases the number of triangles by a factor of 4. 
+  */
 int main (int argc, char * argv[])
 {
   GtsSurface * s;
   gboolean verbose = FALSE;
+  guint level=4;
   int c = 0;
-  guint line;
 
   /* parse options using getopt */
   while (c != EOF) {
@@ -54,49 +56,45 @@ int main (int argc, char * argv[])
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: volume [OPTION] < file.gts\n"
-	     "Compute the volume of the domain bounded by the surface defined by file.srf.\n"
-	     "Print the volume and exit successfully if the surface is a closed orientable\n"
-	     "manifold. Exit unsuccessfully otherwise.\n"
-	     "\n"
-	     "  -v    --verbose  print statistics about the surface\n"
-	     "  -h    --help     display this help and exit\n"
-	     "\n"
-	     "Reports bugs to %s\n",
-	     GTS_MAINTAINER);
+       "Usage: sphere [OPTION] [level]\n"
+       "Generate a triangulated unit sphere by recursive subdivision.\n"
+       "First approximation is an isocahedron; each level of refinement\n"
+       "increases the number of triangles by a factor of 4.\n"
+       "level must be a positive integer setting the recursion level\n"
+       "(geodesation order), default is 4.\n"
+       "\n"
+       "Documentation: http://mathworld.wolfram.com/GeodesicDome.html\n"
+       "\n"
+       "  -v    --verbose  print statistics about the surface\n"
+       "  -h    --help     display this help and exit\n"
+       "\n"
+       "Reports bugs to %s\n",
+	       GTS_MAINTAINER);
       return 0; /* success */
       break;
     case '?': /* wrong options */
-      fprintf (stderr, "Try `volume --help' for more information.\n");
+      fprintf (stderr, "Try `sphere --help' for more information.\n");
       return 1; /* failure */
     }
   }
   
-  /* read surface in */
+  /* read level */
+  if (optind < argc)
+    level = atoi(argv[optind]);
+
+  /* generate triangulated sphere */	
   s = gts_surface_new (gts_surface_class (),
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
-    fputs ("volume: the file on standard input is not a valid GTS file\n", 
-	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
-    return 1; /* failure */
-  }
+  gts_surface_generate_sphere (s, level);
 
   /* if verbose on print stats */
   if (verbose)
-    gts_surface_print_stats (s, stdout);
+    gts_surface_print_stats (s, stderr);
 
-  /* test if surface is a closed and orientable manifold.
-     we don't need to test if s is a manifold since both tests below
-     implies that. */
-  if (!gts_surface_is_closed (s) || !gts_surface_is_orientable (s))
-    return 1; /* failure */
+  /* write generating surface to standard output */
+  gts_surface_write (s, stdout);
   
-  /* print volume */
-  printf ("%g\n", gts_surface_volume (s));
-
   return 0; /* success */
 }
diff --git a/examples/volume.c b/examples/split.c
similarity index 64%
copy from examples/volume.c
copy to examples/split.c
index ba0fc34..b8aaaf4 100644
--- a/examples/volume.c
+++ b/examples/split.c
@@ -18,6 +18,7 @@
  */
 
 #include <stdlib.h>
+#include <string.h>
 #include "config.h"
 #ifdef HAVE_GETOPT_H
 #  include <getopt.h>
@@ -27,14 +28,16 @@
 #endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
-/* volume - compute the volume of a given surface if it is a closed and
-   orientable manifold */
+/* split - splits a surface into connected and manifold components */
 int main (int argc, char * argv[])
 {
-  GtsSurface * s;
-  gboolean verbose = FALSE;
+  GtsSurface * s = NULL;
   int c = 0;
-  guint line;
+  GtsFile * fp;
+  gboolean verbose = FALSE;
+  gchar fname[] = "component";
+  guint ncomp = 0;
+  GSList * i;
 
   /* parse options using getopt */
   while (c != EOF) {
@@ -54,10 +57,9 @@ int main (int argc, char * argv[])
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: volume [OPTION] < file.gts\n"
-	     "Compute the volume of the domain bounded by the surface defined by file.srf.\n"
-	     "Print the volume and exit successfully if the surface is a closed orientable\n"
-	     "manifold. Exit unsuccessfully otherwise.\n"
+             "Usage: split [OPTION] [FNAME] < FILE\n"
+	     "Splits the GTS surface into connected and manifold components.\n"
+	     "FNAME is the base name of the components created (default is `component').\n"
 	     "\n"
 	     "  -v    --verbose  print statistics about the surface\n"
 	     "  -h    --help     display this help and exit\n"
@@ -67,36 +69,52 @@ int main (int argc, char * argv[])
       return 0; /* success */
       break;
     case '?': /* wrong options */
-      fprintf (stderr, "Try `volume --help' for more information.\n");
+      fprintf (stderr, "Try `split --help' for more information.\n");
       return 1; /* failure */
     }
   }
-  
+
+  if (optind < argc)
+    strcpy (fname, argv[optind]);
+
   /* read surface in */
   s = gts_surface_new (gts_surface_class (),
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
-    fputs ("volume: the file on standard input is not a valid GTS file\n", 
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("split: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
   /* if verbose on print stats */
   if (verbose)
-    gts_surface_print_stats (s, stdout);
+    gts_surface_print_stats (s, stderr);
 
-  /* test if surface is a closed and orientable manifold.
-     we don't need to test if s is a manifold since both tests below
-     implies that. */
-  if (!gts_surface_is_closed (s) || !gts_surface_is_orientable (s))
-    return 1; /* failure */
-  
-  /* print volume */
-  printf ("%g\n", gts_surface_volume (s));
+  i = gts_surface_split (s);
+  while (i) {
+    gchar name[80];
+    FILE * fp;
+
+    sprintf (name, "%s.%d.gts", fname, ncomp++);
+    fp = fopen (name, "wt");
+    if (fp == NULL) {
+      fprintf (stderr, "split: cannot open file `%s'.\n", name);
+      exit (1);
+    }
+    gts_surface_write (i->data, fp);
+    fclose (fp);
+
+    if (verbose) {
+      fprintf (stderr, "# Component %d\n", ncomp - 1);
+      gts_surface_print_stats (i->data, stderr);
+    }
+
+    i = i->next;
+  }
 
   return 0; /* success */
 }
diff --git a/examples/stripe.c b/examples/stripe.c
new file mode 100644
index 0000000..5f6f604
--- /dev/null
+++ b/examples/stripe.c
@@ -0,0 +1,158 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include "gts.h"
+
+/* stripe - Turns the input surface into triangle strips and outputs a
+   Geomview representation of the result. */
+int main (int argc, char * argv[])
+{
+  GtsSurface * s;
+  GSList * strips = NULL, * i;
+  gboolean verbose = FALSE;
+  int c = 0;
+  GtsFile * fp;
+
+  /* parse options using getopt */
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hv", 
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hv"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 'v': /* verbose */
+      verbose = TRUE;
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+             "Usage: stripe [OPTION] < FILE\n"
+	     "Turns the input surface into triangle strips and outputs a\n"
+	     "Geomview representation of the result.\n"
+	     "\n"
+	     "  -v      --verbose  print statistics about the surface and strips\n"
+	     "  -h      --help     display this help and exit\n"
+	     "\n"
+	     "Report bugs to %s\n",
+	     GTS_MAINTAINER);
+      return 0; /* success */
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `stripe --help' for more information.\n");
+      return 1; /* failure */
+    }
+  }
+
+  /* read surface in */
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("stripe: file on standard input is not a valid GTS file\n", 
+	   stderr);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+    return 1; /* failure */
+  }
+  gts_file_destroy (fp);
+
+  if (verbose)
+    gts_surface_print_stats (s, stderr);
+  
+  strips = gts_surface_strip (s);
+
+  /* if verbose on print stats */
+  if (verbose) {
+    GtsRange l;
+
+    gts_range_init (&l);
+    i = strips;
+    while (i) {
+      gts_range_add_value (&l, g_slist_length (i->data));
+      i = i->next;
+    }
+    gts_range_update (&l);
+    fprintf (stderr, "# Strips: %d\n#   length : ", l.n);
+    gts_range_print (&l, stderr);
+    fputc ('\n', stderr);
+  }
+
+  puts ("LIST {\n");
+  i = strips;
+  while (i) {
+    GList * j = i->data;
+    GtsTriangle * oldt = NULL;
+    GtsColor c;
+
+    c.r = rand ()/(gdouble) RAND_MAX;
+    c.g = rand ()/(gdouble) RAND_MAX;
+    c.b = rand ()/(gdouble) RAND_MAX;
+    while (j) {
+      GtsTriangle * t = j->data;
+      GtsPoint
+        * p1 = GTS_POINT (GTS_SEGMENT (t->e1)->v1),
+        * p2 = GTS_POINT (GTS_SEGMENT (t->e1)->v2),
+        * p3 = GTS_POINT (gts_triangle_vertex (t));
+
+      printf ("OFF 3 1 3\n%g %g %g\n%g %g %g\n%g %g %g\n3 0 1 2 %g %g %g\n",
+              p1->x, p1->y, p1->z,
+              p2->x, p2->y, p2->z,
+              p3->x, p3->y, p3->z,
+	      c.r, c.g, c.b);
+      if (oldt) {
+        GtsSegment * cs = GTS_SEGMENT (gts_triangles_common_edge (t, oldt));
+        GtsPoint
+	  * op1 = GTS_POINT (GTS_SEGMENT (oldt->e1)->v1),
+	  * op2 = GTS_POINT (GTS_SEGMENT (oldt->e1)->v2),
+	  * op3 = GTS_POINT (gts_triangle_vertex (oldt));
+
+        printf ("VECT 1 3 0 3 0 %g %g %g %g %g %g %g %g %g\n",
+                (op1->x + op2->x + op3->x)/3.,
+                (op1->y + op2->y + op3->y)/3.,
+                (op1->z + op2->z + op3->z)/3.,
+                (GTS_POINT (cs->v1)->x + GTS_POINT (cs->v2)->x)/2.,
+                (GTS_POINT (cs->v1)->y + GTS_POINT (cs->v2)->y)/2.,
+                (GTS_POINT (cs->v1)->z + GTS_POINT (cs->v2)->z)/2.,
+                (p1->x + p2->x + p3->x)/3.,
+                (p1->y + p2->y + p3->y)/3.,
+                (p1->z + p2->z + p3->z)/3.);
+      }
+      oldt = t;
+      j = j->next;
+    }
+    i = i->next;
+  }
+  puts ("}\n");
+
+  return 0; /* success */
+}
diff --git a/examples/transform.c b/examples/transform.c
index 4d1df97..4259fff 100644
--- a/examples/transform.c
+++ b/examples/transform.c
@@ -32,26 +32,17 @@
 #define PI 3.14159265359
 #endif
 
-static void point_translate (GtsPoint * p, GtsVector t)
-{
-  p->x += t[0];
-  p->y += t[1];
-  p->z += t[2];
-}
-
 int main (int argc, char * argv[])
 {
   GtsSurface * s;
-  guint line;
+  GtsFile * fp;
   GtsMatrix * m;
-  GtsVector translate = { 0., 0., 0. };
   int c = 0;
   gboolean verbose = FALSE;
   gboolean revert = FALSE;
+  gboolean normalize = FALSE;
 
-  m = gts_matrix_new (1., 0., 0.,
-		      0., 1., 0.,
-		      0., 0., 1.);
+  m = gts_matrix_identity (NULL);
 
   /* parse options using getopt */
   while (c != EOF) {
@@ -68,22 +59,24 @@ int main (int argc, char * argv[])
       {"ty", required_argument, NULL, 'u'},
       {"tz", required_argument, NULL, 'w'},
       {"revert", no_argument, NULL, 'i'},
+      {"normalize", no_argument, NULL, 'o'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'},
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hvr:m:n:s:R:M:N:it:u:w:",
+    switch ((c = getopt_long (argc, argv, "hvr:m:n:s:R:M:N:it:u:w:o",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hvr:m:n:s:R:M:N:it:u:w:"))) {
+    switch ((c = getopt (argc, argv, "hvr:m:n:s:R:M:N:it:u:w:o"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'o': /* normalize */
+      normalize = TRUE;
+      break;
     case 'r': { /* rotate around x-axis */
       gdouble angle, cosa, sina;
       GtsMatrix * rot, * p;
       
-      rot = gts_matrix_new (1., 0., 0.,
-			    0., 1., 0.,
-			    0., 0., 1.);
+      rot = gts_matrix_identity (NULL);
       angle = atof (optarg)*PI/180.;
       cosa = cos (angle);
       sina = sin (angle);
@@ -99,9 +92,7 @@ int main (int argc, char * argv[])
       gdouble angle, cosa, sina;
       GtsMatrix * rot, * p;
       
-      rot = gts_matrix_new (1., 0., 0.,
-			    0., 1., 0.,
-			    0., 0., 1.);
+      rot = gts_matrix_identity (NULL);
       angle = atof (optarg)*PI/180.;
       cosa = cos (angle);
       sina = sin (angle);
@@ -117,9 +108,7 @@ int main (int argc, char * argv[])
       gdouble angle, cosa, sina;
       GtsMatrix * rot, * p;
       
-      rot = gts_matrix_new (1., 0., 0.,
-			    0., 1., 0.,
-			    0., 0., 1.);
+      rot = gts_matrix_identity (NULL);
       angle = atof (optarg)*PI/180.;
       cosa = cos (angle);
       sina = sin (angle);
@@ -135,9 +124,8 @@ int main (int argc, char * argv[])
       GtsMatrix * scale, * p;
       gdouble s = atof (optarg);
 
-      scale = gts_matrix_new (s,  0., 0.,
-			      0., s,  0.,
-			      0., 0., s);
+      scale = gts_matrix_identity (NULL);
+      scale[0][0] = scale[1][1] = scale[2][2] = s;
       p = gts_matrix_product (m, scale);
       gts_matrix_destroy (scale);
       gts_matrix_destroy (m);
@@ -148,9 +136,8 @@ int main (int argc, char * argv[])
       GtsMatrix * scale, * p;
       gdouble s = atof (optarg);
 
-      scale = gts_matrix_new (s,  0., 0.,
-			      0., 1., 0.,
-			      0., 0., 1.);
+      scale = gts_matrix_identity (NULL);
+      scale[0][0] = s;
       p = gts_matrix_product (m, scale);
       gts_matrix_destroy (scale);
       gts_matrix_destroy (m);
@@ -161,9 +148,8 @@ int main (int argc, char * argv[])
       GtsMatrix * scale, * p;
       gdouble s = atof (optarg);
 
-      scale = gts_matrix_new (1., 0., 0.,
-			      0., s,  0.,
-			      0., 0., 1.);
+      scale = gts_matrix_identity (NULL);
+      scale[1][1] = s;
       p = gts_matrix_product (m, scale);
       gts_matrix_destroy (scale);
       gts_matrix_destroy (m);
@@ -174,9 +160,8 @@ int main (int argc, char * argv[])
       GtsMatrix * scale, * p;
       gdouble s = atof (optarg);
 
-      scale = gts_matrix_new (1., 0., 0.,
-			      0., 1., 0.,
-			      0., 0., s);
+      scale = gts_matrix_identity (NULL);
+      scale[2][2] = s;
       p = gts_matrix_product (m, scale);
       gts_matrix_destroy (scale);
       gts_matrix_destroy (m);
@@ -184,13 +169,13 @@ int main (int argc, char * argv[])
       break;
     }
     case 't': /* tx */
-      translate[0] += atof (optarg);
+      m[0][3] += atof (optarg);
       break;
     case 'u': /* ty */
-      translate[1] += atof (optarg);
+      m[1][3] += atof (optarg);
       break;
     case 'w': /* tz */
-      translate[2] += atof (optarg);
+      m[2][3] += atof (optarg);
       break;
     case 'i': /* revert */
       revert = TRUE;
@@ -203,7 +188,7 @@ int main (int argc, char * argv[])
              "Usage: transform [OPTION] < file.gts\n"
 	     "Apply geometric transformations to the input.\n"
 	     "\n"
-	     "  -r ANGLE  --rx=ANGLE      rotate around x-axis\n"
+	     "  -r ANGLE  --rx=ANGLE      rotate around x-axis (angle in degrees)\n"
 	     "  -m ANGLE  --ry=ANGLE      rotate around y-axis\n"
 	     "  -n ANGLE  --rz=ANGLE      rotate around z-axis\n"
 	     "  -s FACTOR --scale=FACTOR  scale by FACTOR\n"
@@ -214,6 +199,8 @@ int main (int argc, char * argv[])
              "  -u V      --ty=V          translate of V along y-axis\n"
              "  -w V      --tz=V          translate of V along z-axis\n"
 	     "  -i        --revert        turn surface inside out\n"
+             "  -o        --normalize     fit the resulting surface in a cube of\n"
+	     "                            size 1 centered at the origin\n"
 	     "  -v        --verbose       print statistics about the surface\n"
 	     "  -h        --help          display this help and exit\n"
 	     "\n"
@@ -231,12 +218,11 @@ int main (int argc, char * argv[])
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-
-  line = gts_surface_read (s, stdin);
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
     fputs ("transform: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
@@ -246,7 +232,25 @@ int main (int argc, char * argv[])
   if (revert)
     gts_surface_foreach_face (s, (GtsFunc) gts_triangle_revert, NULL);
   gts_surface_foreach_vertex (s, (GtsFunc) gts_point_transform, m);
-  gts_surface_foreach_vertex (s, (GtsFunc) point_translate, translate);
+  if (normalize) {
+    GtsBBox * bb = gts_bbox_surface (gts_bbox_class (), s);
+    gdouble scale = bb->x2 - bb->x1;
+    GtsMatrix * sc;
+
+    if (bb->y2 - bb->y1 > scale) scale = bb->y2 - bb->y1;
+    if (bb->z2 - bb->z1 > scale) scale = bb->z2 - bb->z1;
+    if (scale > 0.) scale = 1./scale;
+    else scale = 1.;
+    sc = gts_matrix_identity (NULL);
+    sc[0][3] = - (bb->x1 + bb->x2)/2.;
+    sc[1][3] = - (bb->y1 + bb->y2)/2.;
+    sc[2][3] = - (bb->z1 + bb->z2)/2.;
+    gts_surface_foreach_vertex (s, (GtsFunc) gts_point_transform, sc);
+    sc[0][0] = sc[1][1] = sc[2][2] = scale;    
+    sc[0][3] = sc[1][3] = sc[2][3] = 0.;
+    gts_surface_foreach_vertex (s, (GtsFunc) gts_point_transform, sc);
+    gts_matrix_destroy (sc);
+  }
   gts_surface_write (s, stdout);
 
   return 0;
diff --git a/examples/traverse.c b/examples/traverse.c
index 2a19bd6..74a15f5 100644
--- a/examples/traverse.c
+++ b/examples/traverse.c
@@ -175,7 +175,7 @@ static void pick_first_face (GtsFace * f, GtsFace ** first)
 int main (int argc, char * argv[])
 {
   GtsSurface * s;
-  guint line;
+  GtsFile * fp;
   GtsFace * first = NULL;
   int c = 0;
   gboolean verbose = FALSE;
@@ -234,11 +234,11 @@ int main (int argc, char * argv[])
 		       GTS_FACE_CLASS (depth_face_class ()),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
     fputs ("traverse: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
diff --git a/examples/volume.c b/examples/volume.c
index ba0fc34..fa8354d 100644
--- a/examples/volume.c
+++ b/examples/volume.c
@@ -33,22 +33,27 @@ int main (int argc, char * argv[])
 {
   GtsSurface * s;
   gboolean verbose = FALSE;
+  gboolean cm = FALSE;
   int c = 0;
-  guint line;
+  GtsFile * fp;
 
   /* parse options using getopt */
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"cm", no_argument, NULL, 'c'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hv", 
+    switch ((c = getopt_long (argc, argv, "hvc", 
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hv"))) {
+    switch ((c = getopt (argc, argv, "hvc"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'c': /* cm */
+      cm = TRUE;
+      break;
     case 'v': /* verbose */
       verbose = TRUE;
       break;
@@ -60,6 +65,7 @@ int main (int argc, char * argv[])
 	     "manifold. Exit unsuccessfully otherwise.\n"
 	     "\n"
 	     "  -v    --verbose  print statistics about the surface\n"
+	     "  -c    --cm       output center of mass and volume\n"
 	     "  -h    --help     display this help and exit\n"
 	     "\n"
 	     "Reports bugs to %s\n",
@@ -77,11 +83,11 @@ int main (int argc, char * argv[])
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
     fputs ("volume: the file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
@@ -98,5 +104,13 @@ int main (int argc, char * argv[])
   /* print volume */
   printf ("%g\n", gts_surface_volume (s));
 
+  if (cm) {
+    GtsVector cm;
+
+    /* print center of mass */
+    gts_surface_center_of_mass (s, cm);
+    printf ("(%g,%g,%g)\n", cm[0], cm[1], cm[2]);
+  }
+
   return 0; /* success */
 }
diff --git a/gts.pc.in b/gts.pc.in
new file mode 100644
index 0000000..bcd4014
--- /dev/null
+++ b/gts.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: GTS
+Description: GNU Triangulated Surface Library
+Version: @VERSION@
+Requires: glib-2.0,gthread-2.0,gmodule-2.0
+Libs: -L${libdir} @LIBS@ -lgts
+Cflags: -I${includedir}
diff --git a/install-sh b/install-sh
index e9de238..6ce63b9 100755
--- a/install-sh
+++ b/install-sh
@@ -1,19 +1,37 @@
 #!/bin/sh
 #
 # install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
 #
-# Copyright 1991 by the Massachusetts Institute of Technology
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
 #
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, 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.  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.
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
 # `make' implicit rules from creating a file called install from it
@@ -56,7 +74,7 @@ dir_arg=""
 
 while [ x"$1" != x ]; do
     case $1 in
-	-c) instcmd="$cpprog"
+	-c) instcmd=$cpprog
 	    shift
 	    continue;;
 
@@ -79,7 +97,7 @@ while [ x"$1" != x ]; do
 	    shift
 	    continue;;
 
-	-s) stripcmd="$stripprog"
+	-s) stripcmd=$stripprog
 	    shift
 	    continue;;
 
@@ -106,128 +124,132 @@ done
 
 if [ x"$src" = x ]
 then
-	echo "install:	no input file specified"
+	echo "$0: no input file specified" >&2
 	exit 1
 else
-	true
+	:
 fi
 
 if [ x"$dir_arg" != x ]; then
 	dst=$src
 	src=""
-	
-	if [ -d $dst ]; then
+
+	if [ -d "$dst" ]; then
 		instcmd=:
 		chmodcmd=""
 	else
-		instcmd=mkdir
+		instcmd=$mkdirprog
 	fi
 else
 
 # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad 
+# might cause directories to be created, which would be especially bad
 # if $src (and thus $dsttmp) contains '*'.
 
-	if [ -f $src -o -d $src ]
+	if [ -f "$src" ] || [ -d "$src" ]
 	then
-		true
+		:
 	else
-		echo "install:  $src does not exist"
+		echo "$0: $src does not exist" >&2
 		exit 1
 	fi
-	
+
 	if [ x"$dst" = x ]
 	then
-		echo "install:	no destination specified"
+		echo "$0: no destination specified" >&2
 		exit 1
 	else
-		true
+		:
 	fi
 
 # If destination is a directory, append the input filename; if your system
 # does not like double slashes in filenames, you may need to add some logic
 
-	if [ -d $dst ]
+	if [ -d "$dst" ]
 	then
-		dst="$dst"/`basename $src`
+		dst=$dst/`basename "$src"`
 	else
-		true
+		:
 	fi
 fi
 
 ## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 
 # Make sure that the destination directory exists.
 #  this part is taken from Noah Friedman's mkinstalldirs script
 
 # Skip lots of stat calls in the usual case.
 if [ ! -d "$dstdir" ]; then
-defaultIFS='	
-'
-IFS="${IFS-${defaultIFS}}"
+defaultIFS='
+	'
+IFS="${IFS-$defaultIFS}"
 
-oIFS="${IFS}"
+oIFS=$IFS
 # Some sh's can't handle IFS=/ for some reason.
 IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
+set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS=$oIFS
 
 pathcomp=''
 
 while [ $# -ne 0 ] ; do
-	pathcomp="${pathcomp}${1}"
+	pathcomp=$pathcomp$1
 	shift
 
-	if [ ! -d "${pathcomp}" ] ;
+	if [ ! -d "$pathcomp" ] ;
         then
-		$mkdirprog "${pathcomp}"
+		$mkdirprog "$pathcomp"
 	else
-		true
+		:
 	fi
 
-	pathcomp="${pathcomp}/"
+	pathcomp=$pathcomp/
 done
 fi
 
 if [ x"$dir_arg" != x ]
 then
-	$doit $instcmd $dst &&
+	$doit $instcmd "$dst" &&
 
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
 else
 
 # If we're going to rename the final executable, determine the name now.
 
-	if [ x"$transformarg" = x ] 
+	if [ x"$transformarg" = x ]
 	then
-		dstfile=`basename $dst`
+		dstfile=`basename "$dst"`
 	else
-		dstfile=`basename $dst $transformbasename | 
+		dstfile=`basename "$dst" $transformbasename |
 			sed $transformarg`$transformbasename
 	fi
 
 # don't allow the sed command to completely eliminate the filename
 
-	if [ x"$dstfile" = x ] 
+	if [ x"$dstfile" = x ]
 	then
-		dstfile=`basename $dst`
+		dstfile=`basename "$dst"`
 	else
-		true
+		:
 	fi
 
-# Make a temp file name in the proper directory.
+# Make a couple of temp file names in the proper directory.
 
-	dsttmp=$dstdir/#inst.$$#
+	dsttmp=$dstdir/_inst.$$_
+	rmtmp=$dstdir/_rm.$$_
 
-# Move or copy the file name to the temp name
+# Trap to clean up temp files at exit.
 
-	$doit $instcmd $src $dsttmp &&
+	trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+	trap '(exit $?); exit' 1 2 13 15
 
-	trap "rm -f ${dsttmp}" 0 &&
+# Move or copy the file name to the temp name
+
+	$doit $instcmd "$src" "$dsttmp" &&
 
 # and set any options; do chmod last to preserve setuid bits
 
@@ -235,17 +257,38 @@ else
 # ignore errors from any of these, just make sure not to ignore
 # errors from the above "$doit $instcmd $src $dsttmp" command.
 
-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location.  We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons.  In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+	if [ -f "$dstdir/$dstfile" ]
+	then
+		$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+		$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+		{
+		  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		  (exit 1); exit
+		}
+	else
+		:
+	fi
+} &&
 
 # Now rename the file to the real destination.
 
-	$doit $rmcmd -f $dstdir/$dstfile &&
-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+	$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
 
 fi &&
 
+# The final little trick to "correctly" pass the exit status to the exit trap.
 
-exit 0
+{
+	(exit 0); exit
+}
diff --git a/ltconfig b/ltconfig
deleted file mode 100755
index a01334f..0000000
--- a/ltconfig
+++ /dev/null
@@ -1,3078 +0,0 @@
-#! /bin/sh
-
-# ltconfig - Create a system-specific libtool.
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# A lot of this script is taken from autoconf-2.10.
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-echo=echo
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec "$SHELL" "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit 0
-fi
-
-# Find the correct PATH separator.  Usually this is `:', but
-# DJGPP uses `;' like DOS.
-if test "X${PATH_SEPARATOR+set}" != Xset; then
-  UNAME=${UNAME-`uname 2>/dev/null`}
-  case X$UNAME in
-    *-DOS) PATH_SEPARATOR=';' ;;
-    *)     PATH_SEPARATOR=':' ;;
-  esac
-fi
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-if test "X${echo_test_string+set}" != Xset; then
-  # find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
-       echo_test_string="`eval $cmd`" &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" != 'X\t' ||
-   test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-  for dir in $PATH /usr/ucb; do
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-	 test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running ltconfig again with it.
-      ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}"
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"}
-    else
-      # Try using printf.
-      echo='printf "%s\n"'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-	 test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	# Cool, printf works
-	:
-      elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
-	   test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL"
-	export CONFIG_SHELL
-	SHELL="$CONFIG_SHELL"
-	export SHELL
-	echo="$CONFIG_SHELL $0 --fallback-echo"
-      elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
-	   test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
-	echo="$CONFIG_SHELL $0 --fallback-echo"
-      else
-	# maybe with a smaller string...
-	prev=:
-
-	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then
-	    break
-	  fi
-	  prev="$cmd"
-	done
-
-	if test "$prev" != 'sed 50q "$0"'; then
-	  echo_test_string=`eval $prev`
-	  export echo_test_string
-	  exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"}
-	else
-	  # Oops.  We lost completely, so just stick with echo.
-	  echo=echo
-	fi
-      fi
-    fi
-  fi
-fi
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e s/^X//'
-sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-
-# Same as above, but do not quote variable references.
-double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
-
-# Sed substitution to delay expansion of an escaped shell variable in a
-# double_quote_subst'ed string.
-delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
-
-# The name of this program.
-progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
-
-# Constants:
-PROGRAM=ltconfig
-PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-rm="rm -f"
-
-help="Try \`$progname --help' for more information."
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-enable_shared=yes
-# All known linkers require a `.a' archive for static linking (except M$VC,
-# which needs '.lib').
-enable_static=yes
-enable_fast_install=yes
-enable_dlopen=unknown
-enable_win32_dll=no
-ltmain=
-silent=
-srcdir=
-ac_config_guess=
-ac_config_sub=
-host=
-nonopt=
-ofile="$default_ofile"
-verify_host=yes
-with_gcc=no
-with_gnu_ld=no
-need_locks=yes
-ac_ext=c
-objext=o
-libext=a
-exeext=
-cache_file=
-
-old_AR="$AR"
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-old_CPPFLAGS="$CPPFLAGS"
-old_LDFLAGS="$LDFLAGS"
-old_LD="$LD"
-old_LN_S="$LN_S"
-old_LIBS="$LIBS"
-old_NM="$NM"
-old_RANLIB="$RANLIB"
-old_DLLTOOL="$DLLTOOL"
-old_OBJDUMP="$OBJDUMP"
-old_AS="$AS"
-
-# Parse the command line options.
-args=
-prev=
-for option
-do
-  case "$option" in
-  -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    eval "$prev=\$option"
-    prev=
-    continue
-  fi
-
-  case "$option" in
-  --help) cat <<EOM
-Usage: $progname [OPTION]... [HOST [LTMAIN]]
-
-Generate a system-specific libtool script.
-
-    --debug                enable verbose shell tracing
-    --disable-shared       do not build shared libraries
-    --disable-static       do not build static libraries
-    --disable-fast-install do not optimize for fast installation
-    --enable-dlopen        enable dlopen support
-    --enable-win32-dll     enable building dlls on win32 hosts
-    --help                 display this help and exit
-    --no-verify            do not verify that HOST is a valid host type
--o, --output=FILE          specify the output file [default=$default_ofile]
-    --quiet                same as \`--silent'
-    --silent               do not print informational messages
-    --srcdir=DIR           find \`config.guess' in DIR
-    --version              output version information and exit
-    --with-gcc             assume that the GNU C compiler will be used
-    --with-gnu-ld          assume that the C compiler uses the GNU linker
-    --disable-lock         disable file locking
-    --cache-file=FILE      configure cache file
-
-LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
-that provides basic libtool functionality.
-
-HOST is the canonical host system name [default=guessed].
-EOM
-  exit 0
-  ;;
-
-  --debug)
-    echo "$progname: enabling shell trace mode"
-    set -x
-    ;;
-
-  --disable-shared) enable_shared=no ;;
-
-  --disable-static) enable_static=no ;;
-
-  --disable-fast-install) enable_fast_install=no ;;
-
-  --enable-dlopen) enable_dlopen=yes ;;
-
-  --enable-win32-dll) enable_win32_dll=yes ;;
-
-  --quiet | --silent) silent=yes ;;
-
-  --srcdir) prev=srcdir ;;
-  --srcdir=*) srcdir="$optarg" ;;
-
-  --no-verify) verify_host=no ;;
-
-  --output | -o) prev=ofile ;;
-  --output=*) ofile="$optarg" ;;
-
-  --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
-
-  --with-gcc) with_gcc=yes ;;
-  --with-gnu-ld) with_gnu_ld=yes ;;
-
-  --disable-lock) need_locks=no ;;
-
-  --cache-file=*) cache_file="$optarg" ;;
-
-  -*)
-    echo "$progname: unrecognized option \`$option'" 1>&2
-    echo "$help" 1>&2
-    exit 1
-    ;;
-
-  *)
-    if test -z "$ltmain"; then
-      ltmain="$option"
-    elif test -z "$host"; then
-# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
-#      if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
-#        echo "$progname: warning \`$option' is not a valid host type" 1>&2
-#      fi
-      host="$option"
-    else
-      echo "$progname: too many arguments" 1>&2
-      echo "$help" 1>&2
-      exit 1
-    fi ;;
-  esac
-done
-
-if test -z "$ltmain"; then
-  echo "$progname: you must specify a LTMAIN file" 1>&2
-  echo "$help" 1>&2
-  exit 1
-fi
-
-if test ! -f "$ltmain"; then
-  echo "$progname: \`$ltmain' does not exist" 1>&2
-  echo "$help" 1>&2
-  exit 1
-fi
-
-# Quote any args containing shell metacharacters.
-ltconfig_args=
-for arg
-do
-  case "$arg" in
-  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
-  ltconfig_args="$ltconfig_args '$arg'" ;;
-  *) ltconfig_args="$ltconfig_args $arg" ;;
-  esac
-done
-
-# A relevant subset of AC_INIT.
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 5 compiler messages saved in config.log
-# 6 checking for... messages and results
-if test "$silent" = yes; then
-  exec 6>/dev/null
-else
-  exec 6>&1
-fi
-exec 5>>./config.log
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi
-if test "X${LANG+set}"   = Xset; then LANG=C;   export LANG;   fi
-
-if test -n "$cache_file" && test -r "$cache_file"; then
-  echo "loading cache $cache_file within ltconfig"
-  . $cache_file
-fi
-
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
-  # Stardent Vistra SVR4 grep lacks -e, says ghazi at caip.rutgers.edu.
-  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
-    ac_n= ac_c='
-' ac_t='	'
-  else
-    ac_n=-n ac_c= ac_t=
-  fi
-else
-  ac_n= ac_c='\c' ac_t=
-fi
-
-if test -z "$srcdir"; then
-  # Assume the source directory is the same one as the path to LTMAIN.
-  srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
-  test "$srcdir" = "$ltmain" && srcdir=.
-fi
-
-trap "$rm conftest*; exit 1" 1 2 15
-if test "$verify_host" = yes; then
-  # Check for config.guess and config.sub.
-  ac_aux_dir=
-  for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-    if test -f $ac_dir/config.guess; then
-      ac_aux_dir=$ac_dir
-      break
-    fi
-  done
-  if test -z "$ac_aux_dir"; then
-    echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
-    echo "$help" 1>&2
-    exit 1
-  fi
-  ac_config_guess=$ac_aux_dir/config.guess
-  ac_config_sub=$ac_aux_dir/config.sub
-
-  # Make sure we can run config.sub.
-  if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
-  else
-    echo "$progname: cannot run $ac_config_sub" 1>&2
-    echo "$help" 1>&2
-    exit 1
-  fi
-
-  echo $ac_n "checking host system type""... $ac_c" 1>&6
-
-  host_alias=$host
-  case "$host_alias" in
-  "")
-    if host_alias=`$SHELL $ac_config_guess`; then :
-    else
-      echo "$progname: cannot guess host type; you must specify one" 1>&2
-      echo "$help" 1>&2
-      exit 1
-    fi ;;
-  esac
-  host=`$SHELL $ac_config_sub $host_alias`
-  echo "$ac_t$host" 1>&6
-
-  # Make sure the host verified.
-  test -z "$host" && exit 1
-
-elif test -z "$host"; then
-  echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
-  echo "$help" 1>&2
-  exit 1
-else
-  host_alias=$host
-fi
-
-# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
-case "$host_os" in
-linux-gnu*) ;;
-linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
-esac
-
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-case "$host_os" in
-aix3*)
-  # AIX sometimes has problems with the GCC collect2 program.  For some
-  # reason, if we set the COLLECT_NAMES environment variable, the problems
-  # vanish in a puff of smoke.
-  if test "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Determine commands to create old-style static archives.
-old_archive_cmds='$AR cru $oldlib$oldobjs'
-old_postinstall_cmds='chmod 644 $oldlib'
-old_postuninstall_cmds=
-
-# Set a sane default for `AR'.
-test -z "$AR" && AR=ar
-
-# Set a sane default for `OBJDUMP'.
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-# If RANLIB is not set, then run the test.
-if test "${RANLIB+set}" != "set"; then
-  result=no
-
-  echo $ac_n "checking for ranlib... $ac_c" 1>&6
-  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-  for dir in $PATH; do
-    test -z "$dir" && dir=.
-    if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
-      RANLIB="ranlib"
-      result="ranlib"
-      break
-    fi
-  done
-  IFS="$save_ifs"
-
-  echo "$ac_t$result" 1>&6
-fi
-
-if test -n "$RANLIB"; then
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-  old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
-fi
-
-# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$AS" && AS=as
-
-# Check to see if we are using GCC.
-if test "$with_gcc" != yes || test -z "$CC"; then
-  # If CC is not set, then try to find GCC or a usable CC.
-  if test -z "$CC"; then
-    echo $ac_n "checking for gcc... $ac_c" 1>&6
-    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for dir in $PATH; do
-      test -z "$dir" && dir=.
-      if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
-	CC="gcc"
-	break
-      fi
-    done
-    IFS="$save_ifs"
-
-    if test -n "$CC"; then
-      echo "$ac_t$CC" 1>&6
-    else
-      echo "$ac_t"no 1>&6
-    fi
-  fi
-
-  # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
-  if test -z "$CC"; then
-    echo $ac_n "checking for cc... $ac_c" 1>&6
-    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    cc_rejected=no
-    for dir in $PATH; do
-      test -z "$dir" && dir=.
-      if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
-	if test "$dir/cc" = "/usr/ucb/cc"; then
-	  cc_rejected=yes
-	  continue
-	fi
-	CC="cc"
-	break
-      fi
-    done
-    IFS="$save_ifs"
-    if test $cc_rejected = yes; then
-      # We found a bogon in the path, so make sure we never use it.
-      set dummy $CC
-      shift
-      if test $# -gt 0; then
-	# We chose a different compiler from the bogus one.
-	# However, it has the same name, so the bogon will be chosen
-	# first if we set CC to just the name; use the full file name.
-	shift
-	set dummy "$dir/cc" "$@"
-	shift
-	CC="$@"
-      fi
-    fi
-
-    if test -n "$CC"; then
-      echo "$ac_t$CC" 1>&6
-    else
-      echo "$ac_t"no 1>&6
-    fi
-
-    if test -z "$CC"; then
-      echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
-      exit 1
-    fi
-  fi
-
-  # Now see if the compiler is really GCC.
-  with_gcc=no
-  echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
-  echo "$progname:581: checking whether we are using GNU C" >&5
-
-  $rm conftest.c
-  cat > conftest.c <<EOF
-#ifdef __GNUC__
-  yes;
-#endif
-EOF
-  if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
-    with_gcc=yes
-  fi
-  $rm conftest.c
-  echo "$ac_t$with_gcc" 1>&6
-fi
-
-# Allow CC to be a program name with arguments.
-set dummy $CC
-compiler="$2"
-
-echo $ac_n "checking for object suffix... $ac_c" 1>&6
-$rm conftest*
-echo 'int i = 1;' > conftest.c
-echo "$progname:603: checking for object suffix" >& 5
-if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
-  # Append any warnings to the config.log.
-  cat conftest.err 1>&5
-
-  for ac_file in conftest.*; do
-    case $ac_file in
-    *.c) ;;
-    *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
-    esac
-  done
-else
-  cat conftest.err 1>&5
-  echo "$progname: failed program was:" >&5
-  cat conftest.c >&5
-fi
-$rm conftest*
-echo "$ac_t$objext" 1>&6
-
-echo $ac_n "checking for executable suffix... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_cv_exeext="no"
-  $rm conftest*
-  echo 'main () { return 0; }' > conftest.c
-  echo "$progname:629: checking for executable suffix" >& 5
-  if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
-    # Append any warnings to the config.log.
-    cat conftest.err 1>&5
-
-    for ac_file in conftest.*; do
-      case $ac_file in
-      *.c | *.err | *.$objext ) ;;
-      *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
-      esac
-    done
-  else
-    cat conftest.err 1>&5
-    echo "$progname: failed program was:" >&5
-    cat conftest.c >&5
-  fi
-  $rm conftest*
-fi
-if test "X$ac_cv_exeext" = Xno; then
-  exeext=""
-else
-  exeext="$ac_cv_exeext"
-fi
-echo "$ac_t$ac_cv_exeext" 1>&6
-
-echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
-pic_flag=
-special_shlib_compile_flags=
-wl=
-link_static_flag=
-no_builtin_flag=
-
-if test "$with_gcc" = yes; then
-  wl='-Wl,'
-  link_static_flag='-static'
-
-  case "$host_os" in
-  beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
-    # PIC is the default for these OSes.
-    ;;
-  aix*)
-    # Below there is a dirty hack to force normal static linking with -ldl
-    # The problem is because libdl dynamically linked with both libc and
-    # libC (AIX C++ library), which obviously doesn't included in libraries
-    # list by gcc. This cause undefined symbols with -static flags.
-    # This hack allows C programs to be linked with "-static -ldl", but
-    # we not sure about C++ programs.
-    link_static_flag="$link_static_flag ${wl}-lC"
-    ;;
-  cygwin* | mingw* | os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-  amigaos*)
-    # FIXME: we need at least 68020 code to build shared libraries, but
-    # adding the `-m68020' flag to GCC prevents building anything better,
-    # like `-m68040'.
-    pic_flag='-m68020 -resident32 -malways-restore-a4'
-    ;;
-  sysv4*MP*)
-    if test -d /usr/nec; then
-       pic_flag=-Kconform_pic
-    fi
-    ;;
-  *)
-    pic_flag='-fPIC'
-    ;;
-  esac
-else
-  # PORTME Check for PIC flags for the system compiler.
-  case "$host_os" in
-  aix3* | aix4*)
-    # All AIX code is PIC.
-    link_static_flag='-bnso -bI:/lib/syscalls.exp'
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    # Is there a better link_static_flag that works with the bundled CC?
-    wl='-Wl,'
-    link_static_flag="${wl}-a ${wl}archive"
-    pic_flag='+Z'
-    ;;
-
-  irix5* | irix6*)
-    wl='-Wl,'
-    link_static_flag='-non_shared'
-    # PIC (with -KPIC) is the default.
-    ;;
-
-  cygwin* | mingw* | os2*)
-    # We can build DLLs from non-PIC.
-    ;;
-
-  osf3* | osf4* | osf5*)
-    # All OSF/1 code is PIC.
-    wl='-Wl,'
-    link_static_flag='-non_shared'
-    ;;
-
-  sco3.2v5*)
-    pic_flag='-Kpic'
-    link_static_flag='-dn'
-    special_shlib_compile_flags='-belf'
-    ;;
-
-  solaris*)
-    pic_flag='-KPIC'
-    link_static_flag='-Bstatic'
-    wl='-Wl,'
-    ;;
-
-  sunos4*)
-    pic_flag='-PIC'
-    link_static_flag='-Bstatic'
-    wl='-Qoption ld '
-    ;;
-
-  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-    pic_flag='-KPIC'
-    link_static_flag='-Bstatic'
-    wl='-Wl,'
-    ;;
-
-  uts4*)
-    pic_flag='-pic'
-    link_static_flag='-Bstatic'
-    ;;
-  sysv4*MP*)
-    if test -d /usr/nec ;then
-      pic_flag='-Kconform_pic'
-      link_static_flag='-Bstatic'
-    fi
-    ;;
-  *)
-    can_build_shared=no
-    ;;
-  esac
-fi
-
-if test -n "$pic_flag"; then
-  echo "$ac_t$pic_flag" 1>&6
-
-  # Check to make sure the pic_flag actually works.
-  echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS $pic_flag -DPIC"
-  echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
-  if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
-    # Append any warnings to the config.log.
-    cat conftest.err 1>&5
-    
-    case "$host_os" in
-    hpux9* | hpux10* | hpux11*)
-      # On HP-UX, both CC and GCC only warn that PIC is supported... then they
-      # create non-PIC objects.  So, if there were any warnings, we assume that
-      # PIC is not supported.
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	can_build_shared=no
-	pic_flag=
-      else
-	echo "$ac_t"yes 1>&6
-	pic_flag=" $pic_flag"
-      fi
-      ;;
-    *)
-      echo "$ac_t"yes 1>&6
-      pic_flag=" $pic_flag"
-      ;;
-    esac
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    can_build_shared=no
-    pic_flag=
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-else
-  echo "$ac_t"none 1>&6
-fi
-
-# Check to see if options -o and -c are simultaneously supported by compiler
-echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
-$rm -r conftest 2>/dev/null
-mkdir conftest
-cd conftest
-$rm conftest*
-echo "int some_variable = 0;" > conftest.c
-mkdir out
-# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
-# that will create temporary files in the current directory regardless of
-# the output directory.  Thus, making CWD read-only will cause this test
-# to fail, enabling locking or at least warning the user not to do parallel
-# builds.
-chmod -w .
-save_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS -o out/conftest2.o"
-echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
-if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then
-
-  # The compiler can only warn and ignore the option if not recognized
-  # So say no if there are warnings
-    if test -s out/conftest.err; then
-      echo "$ac_t"no 1>&6
-      compiler_c_o=no
-    else
-      echo "$ac_t"yes 1>&6
-      compiler_c_o=yes
-    fi
-else
-  # Append any errors to the config.log.
-  cat out/conftest.err 1>&5
-  compiler_c_o=no
-  echo "$ac_t"no 1>&6
-fi
-CFLAGS="$save_CFLAGS"
-chmod u+w .
-$rm conftest* out/*
-rmdir out
-cd ..
-rmdir conftest
-$rm -r conftest 2>/dev/null
-
-if test x"$compiler_c_o" = x"yes"; then
-  # Check to see if we can write to a .lo
-  echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -c -o conftest.lo"
-  echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
-if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
-
-    # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	compiler_o_lo=no
-      else
-	echo "$ac_t"yes 1>&6
-	compiler_o_lo=yes
-      fi
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    compiler_o_lo=no
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-else
-  compiler_o_lo=no
-fi
-
-# Check to see if we can do hard links to lock some files if needed
-hard_links="nottested"
-if test "$compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6
-  hard_links=yes
-  $rm conftest*
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  touch conftest.a
-  ln conftest.a conftest.b 2>&5 || hard_links=no
-  ln conftest.a conftest.b 2>/dev/null && hard_links=no
-  echo "$ac_t$hard_links" 1>&6
-  $rm conftest*
-  if test "$hard_links" = no; then
-    echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
-    need_locks=warn
-  fi
-else
-  need_locks=no
-fi
-
-if test "$with_gcc" = yes; then
-  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
-  echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6
-  $rm conftest*
-  echo "int some_variable = 0;" > conftest.c
-  save_CFLAGS="$CFLAGS"
-  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
-  echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-  if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
-
-    # The compiler can only warn and ignore the option if not recognized
-    # So say no if there are warnings
-      if test -s conftest.err; then
-	echo "$ac_t"no 1>&6
-	compiler_rtti_exceptions=no
-      else
-	echo "$ac_t"yes 1>&6
-	compiler_rtti_exceptions=yes
-      fi
-  else
-    # Append any errors to the config.log.
-    cat conftest.err 1>&5
-    compiler_rtti_exceptions=no
-    echo "$ac_t"no 1>&6
-  fi
-  CFLAGS="$save_CFLAGS"
-  $rm conftest*
-
-  if test "$compiler_rtti_exceptions" = "yes"; then
-    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
-  else
-    no_builtin_flag=' -fno-builtin'
-  fi
-  
-fi
-
-# Check for any special shared library compilation flags.
-if test -n "$special_shlib_compile_flags"; then
-  echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
-  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$special_shlib_compile_flags[ 	]" >/dev/null; then :
-  else
-    echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
-    can_build_shared=no
-  fi
-fi
-
-echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
-$rm conftest*
-echo 'main(){return(0);}' > conftest.c
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS $link_static_flag"
-echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
-if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-  echo "$ac_t$link_static_flag" 1>&6
-else
-  echo "$ac_t"none 1>&6
-  link_static_flag=
-fi
-LDFLAGS="$save_LDFLAGS"
-$rm conftest*
-
-if test -z "$LN_S"; then
-  # Check to see if we can use ln -s, or we need hard links.
-  echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
-  $rm conftest.dat
-  if ln -s X conftest.dat 2>/dev/null; then
-    $rm conftest.dat
-    LN_S="ln -s"
-  else
-    LN_S=ln
-  fi
-  if test "$LN_S" = "ln -s"; then
-    echo "$ac_t"yes 1>&6
-  else
-    echo "$ac_t"no 1>&6
-  fi
-fi
-
-# Make sure LD is an absolute path.
-if test -z "$LD"; then
-  ac_prog=ld
-  if test "$with_gcc" = yes; then
-    # Check if gcc -print-prog-name=ld gives a path.
-    echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6
-    echo "$progname:991: checking for ld used by GCC" >&5
-    ac_prog=`($CC -print-prog-name=ld) 2>&5`
-    case "$ac_prog" in
-    # Accept absolute paths.
-    [\\/]* | [A-Za-z]:[\\/]*)
-      re_direlt='/[^/][^/]*/\.\./'
-      # Canonicalize the path of ld
-      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-      done
-      test -z "$LD" && LD="$ac_prog"
-      ;;
-    "")
-      # If it fails, then pretend we are not using GCC.
-      ac_prog=ld
-      ;;
-    *)
-      # If it is relative, then search for the first ld in PATH.
-      with_gnu_ld=unknown
-      ;;
-    esac
-  elif test "$with_gnu_ld" = yes; then
-    echo $ac_n "checking for GNU ld... $ac_c" 1>&6
-    echo "$progname:1015: checking for GNU ld" >&5
-  else
-    echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-    echo "$progname:1018: checking for non-GNU ld" >&5
-  fi
-
-  if test -z "$LD"; then
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for ac_dir in $PATH; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-	LD="$ac_dir/$ac_prog"
-	# Check to see if the program is GNU ld.  I'd rather use --version,
-	# but apparently some GNU ld's only accept -v.
-	# Break only if it was the GNU/non-GNU ld that we prefer.
-	if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-	  test "$with_gnu_ld" != no && break
-	else
-	  test "$with_gnu_ld" != yes && break
-	fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-  fi
-
-  if test -n "$LD"; then
-    echo "$ac_t$LD" 1>&6
-  else
-    echo "$ac_t"no 1>&6
-  fi
-
-  if test -z "$LD"; then
-    echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
-    exit 1
-  fi
-fi
-
-# Check to see if it really is or is not GNU ld.
-echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
-# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-  with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-echo "$ac_t$with_gnu_ld" 1>&6
-
-# See if the linker supports building shared libraries.
-echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
-
-allow_undefined_flag=
-no_undefined_flag=
-need_lib_prefix=unknown
-need_version=unknown
-# when you set need_version to no, make sure it does not cause -set_version
-# flags to be left without arguments
-archive_cmds=
-archive_expsym_cmds=
-old_archive_from_new_cmds=
-export_dynamic_flag_spec=
-whole_archive_flag_spec=
-thread_safe_flag_spec=
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-hardcode_shlibpath_var=unsupported
-runpath_var=
-always_export_symbols=no
-export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
-# include_expsyms should be a list of space-separated symbols to be *always*
-# included in the symbol list
-include_expsyms=
-# exclude_expsyms can be an egrep regular expression of symbols to exclude
-# it will be wrapped by ` (' and `)$', so one must not match beginning or
-# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
-# as well as any symbol that contains `d'.
-exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
-# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
-# platforms (ab)use it in PIC code, but their linkers get confused if
-# the symbol is explicitly referenced.  Since portable code cannot
-# rely on this symbol name, it's probably fine to never include it in
-# preloaded symbol tables.
-
-case "$host_os" in
-cygwin* | mingw*)
-  # FIXME: the MSVC++ port hasn't been tested in a loooong time
-  # When not using gcc, we currently assume that we are using
-  # Microsoft Visual C++.
-  if test "$with_gcc" != yes; then
-    with_gnu_ld=no
-  fi
-  ;;
-
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  # If archive_cmds runs LD, not CC, wlarc should be empty
-  wlarc='${wl}'
-
-  # See if GNU ld supports shared libraries.
-  case "$host_os" in
-  aix3* | aix4*)
-    # On AIX, the GNU linker is very broken
-    ld_shlibs=no
-    cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, is reported
-*** to be unable to reliably create shared libraries on AIX.
-*** Therefore, libtool is disabling shared libraries support.  If you
-*** really care for shared libraries, you may want to modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-    ;;
-
-  amigaos*)
-    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-
-    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
-    # that the semantics of dynamic libraries on AmigaOS, at least up
-    # to version 4, is to share data among multiple programs linked
-    # with the same dynamic library.  Since this doesn't match the
-    # behavior of shared libraries on other platforms, we can use
-    # them.
-    ld_shlibs=no
-    ;;
-
-  beos*)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      allow_undefined_flag=unsupported
-      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
-      # support --undefined.  This deserves some investigation.  FIXME
-      archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-
-  cygwin* | mingw*)
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec='-L$libdir'
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-
-    # Extract the symbol export list from an `--export-all' def file,
-    # then regenerate the def file from the symbol export list, so that
-    # the compiled dll only exports the symbol export list.
-    export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-      $DLLTOOL --export-all --exclude-symbols DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12 --output-def $objdir/$soname-def  $objdir/$soname-ltdll.$objext $libobjs $convenience~
-      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
-
-    archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
-      _lt_hint=1;
-      for symbol in `cat $export_symbols`; do
-	echo "	\$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
-	_lt_hint=`expr 1 + \$_lt_hint`;
-      done~
-      test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
-      test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
-      $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry at 12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-      $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry at 12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
-      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
-      $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry at 12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
-
-      old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' 
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
-      # can we support soname and/or expsyms with a.out? -oliva
-    fi
-    ;;
-
-  solaris* | sysv5*)
-    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
-      ld_shlibs=no
-      cat <<EOF 1>&2
-
-*** Warning: The releases 2.8.* of the GNU linker cannot reliably
-*** create shared libraries on Solaris systems.  Therefore, libtool
-*** is disabling shared libraries support.  We urge you to upgrade GNU
-*** binutils to release 2.9.1 or newer.  Another option is to modify
-*** your PATH or compiler configuration so that the native linker is
-*** used, and then restart.
-
-EOF
-    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;      
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    wlarc=
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
-      archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-    else
-      ld_shlibs=no
-    fi
-    ;;
-  esac
-
-  if test "$ld_shlibs" = yes; then
-    runpath_var=LD_RUN_PATH
-    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec='${wl}--export-dynamic'
-    case $host_os in
-    cygwin* | mingw*)
-      # dlltool doesn't understand --whole-archive et. al.
-      whole_archive_flag_spec=
-      ;;
-    *)
-      # ancient GNU ld didn't support --whole-archive et. al.
-      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
-        whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-        whole_archive_flag_spec=
-      fi
-      ;;
-    esac
-  fi
-else
-  # PORTME fill in a description of your system's linker (not GNU ld)
-  case "$host_os" in
-  aix3*)
-    allow_undefined_flag=unsupported
-    always_export_symbols=yes
-    archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
-    # Note: this linker hardcodes the directories in LIBPATH if there
-    # are no directories specified by -L.
-    hardcode_minus_L=yes
-    if test "$with_gcc" = yes && test -z "$link_static_flag"; then
-      # Neither direct hardcoding nor static linking is supported with a
-      # broken collect2.
-      hardcode_direct=unsupported
-    fi
-    ;;
-
-  aix4*)
-    hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
-    hardcode_libdir_separator=':'
-    if test "$with_gcc" = yes; then
-      collect2name=`${CC} -print-prog-name=collect2`
-      if test -f "$collect2name" && \
-	 strings "$collect2name" | grep resolve_lib_name >/dev/null
-      then
-	# We have reworked collect2
-	hardcode_direct=yes
-      else
-	# We have old collect2
-	hardcode_direct=unsupported
-	# It fails to find uninstalled libraries when the uninstalled
-	# path is not listed in the libpath.  Setting hardcode_minus_L
-	# to unsupported forces relinking
-	hardcode_minus_L=yes
-	hardcode_libdir_flag_spec='-L$libdir'
-	hardcode_libdir_separator=
-      fi
-      shared_flag='-shared'
-    else
-      shared_flag='${wl}-bM:SRE'
-      hardcode_direct=yes
-    fi
-    allow_undefined_flag=' ${wl}-berok'
-    archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
-    archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
-    case "$host_os" in aix4.[01]|aix4.[01].*)
-      # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
-      always_export_symbols=yes ;;
-    esac
-   ;;
-
-  amigaos*)
-    archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    # see comment about different semantics on the GNU ld section
-    ld_shlibs=no
-    ;;
-
-  cygwin* | mingw*)
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    # hardcode_libdir_flag_spec is actually meaningless, as there is
-    # no search path for DLLs.
-    hardcode_libdir_flag_spec=' '
-    allow_undefined_flag=unsupported
-    # Tell ltmain to make .lib files, not .a files.
-    libext=lib
-    # FIXME: Setting linknames here is a bad hack.
-    archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
-    # The linker will automatically build a .lib file if we build a DLL.
-    old_archive_from_new_cmds='true'
-    # FIXME: Should let the user specify the lib program.
-    old_archive_cmds='lib /OUT:$oldlib$oldobjs'
-    fix_srcfile_path='`cygpath -w $srcfile`'
-    ;;
-
-  freebsd1*)
-    ld_shlibs=no
-    ;;
-
-  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
-  # support.  Future versions do this automatically, but an explicit c++rt0.o
-  # does not break anything, and helps significantly (at the cost of a little
-  # extra space).
-  freebsd2.2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-  freebsd2*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-  freebsd*)
-    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  hpux9* | hpux10* | hpux11*)
-    case "$host_os" in
-    hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
-    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
-    esac
-    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-    hardcode_libdir_separator=:
-    hardcode_direct=yes
-    hardcode_minus_L=yes # Not in the search PATH, but as the default
-			 # location of the library.
-    export_dynamic_flag_spec='${wl}-E'
-    ;;
-
-  irix5* | irix6*)
-    if test "$with_gcc" = yes; then
-      archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  netbsd*)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'  # a.out
-    else
-      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts'      # ELF
-    fi
-    hardcode_libdir_flag_spec='${wl}-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  openbsd*)
-    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_direct=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  os2*)
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_minus_L=yes
-    allow_undefined_flag=unsupported
-    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
-    old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
-    ;;
-
-  osf3*)
-    if test "$with_gcc" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  osf4* | osf5*)  # As osf3* with the addition of the -msym flag
-    if test "$with_gcc" = yes; then
-      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
-    else
-      allow_undefined_flag=' -expect_unresolved \*'
-      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
-    fi
-    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-    hardcode_libdir_separator=:
-    ;;
-
-  sco3.2v5*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_shlibpath_var=no
-    runpath_var=LD_RUN_PATH
-    hardcode_runpath_var=yes
-    ;;
-
-  solaris*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-    hardcode_libdir_flag_spec='-R$libdir'
-    hardcode_shlibpath_var=no
-    case "$host_os" in
-    solaris2.[0-5] | solaris2.[0-5].*) ;;
-    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
-      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
-    esac
-    ;;
-
-  sunos4*)
-    archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_direct=yes
-    hardcode_minus_L=yes
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    hardcode_direct=no #Motorola manual says yes, but my tests say they lie 
-    ;;  
-
-  sysv4.3*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_shlibpath_var=no
-    export_dynamic_flag_spec='-Bexport'
-    ;;
-
-  sysv5*)
-    no_undefined_flag=' -z text'
-    # $CC -shared without GNU ld will not create a library from C++
-    # object files and a static libstdc++, better avoid it by now
-    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts'
-    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp'
-    hardcode_libdir_flag_spec=
-    hardcode_shlibpath_var=no
-    runpath_var='LD_RUN_PATH'
-    ;;
-
-  uts4*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  dgux*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    hardcode_libdir_flag_spec='-L$libdir'
-    hardcode_shlibpath_var=no
-    ;;
-
-  sysv4*MP*)
-    if test -d /usr/nec; then
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-      hardcode_shlibpath_var=no
-      runpath_var=LD_RUN_PATH
-      hardcode_runpath_var=yes
-      ld_shlibs=yes
-    fi
-    ;;
-
-  sysv4.2uw2*)
-    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linkopts'
-    hardcode_direct=yes
-    hardcode_minus_L=no
-    hardcode_shlibpath_var=no
-    hardcode_runpath_var=yes
-    runpath_var=LD_RUN_PATH
-    ;;
-
-  unixware7*)
-    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
-    runpath_var='LD_RUN_PATH'
-    hardcode_shlibpath_var=no
-    ;;
-
-  *)
-    ld_shlibs=no
-    ;;
-  esac
-fi
-echo "$ac_t$ld_shlibs" 1>&6
-test "$ld_shlibs" = no && can_build_shared=no
-
-if test -z "$NM"; then
-  echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
-  case "$NM" in
-  [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
-  *)
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
-    for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
-      test -z "$ac_dir" && ac_dir=.
-      if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then
-	# Check to see if the nm accepts a BSD-compat flag.
-	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
-	#   nm: unknown option "B" ignored
-	if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	  NM="$ac_dir/nm -B"
-	  break
-	elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
-	  NM="$ac_dir/nm -p"
-	  break
-	else
-	  NM=${NM="$ac_dir/nm"} # keep the first match, but
-	  continue # so that we can try to find one that supports BSD flags
-	fi
-      fi
-    done
-    IFS="$ac_save_ifs"
-    test -z "$NM" && NM=nm
-    ;;
-  esac
-  echo "$ac_t$NM" 1>&6
-fi
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6
-
-# These are sane defaults that work on at least a few old systems.
-# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
-
-# Character class describing NM global symbol codes.
-symcode='[BCDEGRST]'
-
-# Regexp to match symbols that can be accessed directly from C.
-sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
-
-# Transform the above into a raw symbol and a C symbol.
-symxfrm='\1 \2\3 \3'
-
-# Transform an extracted symbol line into a proper C declaration
-global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
-
-# Define system-specific variables.
-case "$host_os" in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
-  ;;
-irix*)
-  symcode='[BCDEGRST]'
-  ;;
-solaris*)
-  symcode='[BDT]'
-  ;;
-sysv4)
-  symcode='[DFNSTU]'
-  ;;
-esac
-
-# If we're using GNU nm, then use its standard symbol codes.
-if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
-  symcode='[ABCDGISTW]'
-fi
-
-# Try without a prefix undercore, then with it.
-for ac_symprfx in "" "_"; do
-
-  # Write the raw and C identifiers.
-  global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode\)[ 	][ 	]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-  $rm conftest*
-  cat > conftest.c <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  echo "$progname:1635: checking if global_symbol_pipe works" >&5
-  if { (eval echo $progname:1636: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { echo "$progname:1639: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then
-
-      # Try sorting and uniquifying the output.
-      if sort "$nlist" | uniq > "$nlist"T; then
-	mv -f "$nlist"T "$nlist"
-      else
-	rm -f "$nlist"T
-      fi
-
-      # Make sure that we snagged all the symbols we need.
-      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
-	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
-	  cat <<EOF > conftest.c
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-	  # Now generate the symbol file.
-	  eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
-
-	  cat <<EOF >> conftest.c
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
-	  sed 's/^. \(.*\) \(.*\)$/  {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
-	  cat <<\EOF >> conftest.c
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-	  # Now try linking the two files.
-	  mv conftest.$objext conftstm.$objext
-	  save_LIBS="$LIBS"
-	  save_CFLAGS="$CFLAGS"
-	  LIBS="conftstm.$objext"
-	  CFLAGS="$CFLAGS$no_builtin_flag"
-	  if { (eval echo $progname:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
-	    pipe_works=yes
-	  else
-	    echo "$progname: failed program was:" >&5
-	    cat conftest.c >&5
-	  fi
-	  LIBS="$save_LIBS"
-	else
-	  echo "cannot find nm_test_func in $nlist" >&5
-	fi
-      else
-	echo "cannot find nm_test_var in $nlist" >&5
-      fi
-    else
-      echo "cannot run $global_symbol_pipe" >&5
-    fi
-  else
-    echo "$progname: failed program was:" >&5
-    cat conftest.c >&5
-  fi
-  $rm conftest* conftst*
-
-  # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
-    break
-  else
-    global_symbol_pipe=
-  fi
-done
-if test "$pipe_works" = yes; then
-  echo "${ac_t}ok" 1>&6
-else
-  echo "${ac_t}failed" 1>&6
-fi
-
-if test -z "$global_symbol_pipe"; then
-  global_symbol_to_cdecl=
-fi
-
-# Check hardcoding attributes.
-echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
-   test -n "$runpath_var"; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct" != no &&
-     # If the only mechanism to avoid hardcoding is shlibpath_var, we
-     # have to relink, otherwise we might link with an installed library
-     # when we should be linking with a yet-to-be-installed one
-     ## test "$hardcode_shlibpath_var" != no &&
-     test "$hardcode_minus_L" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action=unsupported
-fi
-echo "$ac_t$hardcode_action" 1>&6
-
-
-reload_flag=
-reload_cmds='$LD$reload_flag -o $output$reload_objs'
-echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
-# PORTME Some linkers may need a different reload flag.
-reload_flag='-r'
-echo "$ac_t$reload_flag" 1>&6
-test -n "$reload_flag" && reload_flag=" $reload_flag"
-
-# PORTME Fill in your ld.so characteristics
-library_names_spec=
-libname_spec='lib$name'
-soname_spec=
-postinstall_cmds=
-postuninstall_cmds=
-finish_cmds=
-finish_eval=
-shlibpath_var=
-shlibpath_overrides_runpath=unknown
-version_type=none
-dynamic_linker="$host_os ld.so"
-sys_lib_dlsearch_path_spec="/lib /usr/lib"
-sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-file_magic_cmd=
-file_magic_test_file=
-deplibs_check_method='unknown'
-# Need to set the preceding variable on all platforms that support
-# interlibrary dependencies.
-# 'none' -- dependencies not supported.
-# `unknown' -- same as none, but documents that we really don't know.
-# 'pass_all' -- all dependencies passed with no checks.
-# 'test_compile' -- check by making test program.
-# 'file_magic [regex]' -- check by looking for files in library path
-# which responds to the $file_magic_cmd with a given egrep regex.
-# If you have `file' or equivalent on your system and you're not sure
-# whether `pass_all' will *always* work, you probably want this one.
-echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
-case "$host_os" in
-aix3*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix $libname.a'
-  shlibpath_var=LIBPATH
-
-  # AIX has no versioning support, so we append a major version to the name.
-  soname_spec='${libname}${release}.so$major'
-  ;;
-
-aix4*)
-  version_type=linux
-  # AIX has no versioning support, so currently we can not hardcode correct
-  # soname into executable. Probably we can add versioning support to
-  # collect2, so additional links can be useful in future.
-  # We preserve .a as extension for shared libraries though AIX4.2
-  # and later linker supports .so
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
-  shlibpath_var=LIBPATH
-  deplibs_check_method=pass_all
-  ;;
-
-amigaos*)
-  library_names_spec='$libname.ixlibrary $libname.a'
-  # Create ${libname}_ixlibrary.a entries in /sys/libs.
-  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
-  ;;
-
-beos*)
-  library_names_spec='${libname}.so'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  deplibs_check_method=pass_all
-  lt_cv_dlopen="load_add_on"
-  lt_cv_dlopen_libs=
-  lt_cv_dlopen_self=yes
-  ;;
-
-bsdi4*)
-  version_type=linux
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/shlib/libc.so
-  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
-  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
-  export_dynamic_flag_spec=-rdynamic
-  # the default ld.so.conf also contains /usr/contrib/lib and
-  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
-  # libtool to hard-code these into programs
-  ;;
-
-cygwin* | mingw*)
-  version_type=windows
-  need_version=no
-  need_lib_prefix=no
-  if test "$with_gcc" = yes; then
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
-  else
-    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
-  fi
-  dynamic_linker='Win32 ld.exe'
-  deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  file_magic_cmd='${OBJDUMP} -f'
-  # FIXME: first we should search . and the directory the executable is in
-  shlibpath_var=PATH
-  lt_cv_dlopen="LoadLibrary"
-  lt_cv_dlopen_libs=
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-  
-freebsd*)
-  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
-  version_type=freebsd-$objformat
-  case "$version_type" in
-    freebsd-elf*)
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
-      file_magic_cmd=/usr/bin/file
-      file_magic_test_file=`echo /usr/lib/libc.so*`
-      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-      need_version=no
-      need_lib_prefix=no
-      ;;
-    freebsd-*)
-      deplibs_check_method=unknown
-      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
-      need_version=yes
-      ;;
-  esac
-  shlibpath_var=LD_LIBRARY_PATH
-  case "$host_os" in
-  freebsd2* | freebsd3.[01]* | freebsdelf3.[01]*)
-    shlibpath_overrides_runpath=yes
-    ;;
-  *) # from 3.2 on
-    shlibpath_overrides_runpath=no
-    ;;
-  esac
-  ;;
-
-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-hpux9* | hpux10* | hpux11*)
-  # Give a soname corresponding to the major version so that dld.sl refuses to
-  # link against other versions.
-  dynamic_linker="$host_os dld.sl"
-  version_type=sunos
-  need_lib_prefix=no
-  need_version=no
-  shlibpath_var=SHLIB_PATH
-  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
-  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
-  soname_spec='${libname}${release}.sl$major'
-  # HP-UX runs *really* slowly unless shared libraries are mode 555.
-  postinstall_cmds='chmod 555 $lib'
-  ;;
-
-irix5* | irix6*)
-  version_type=irix
-  need_lib_prefix=no
-  need_version=no
-  soname_spec='${libname}${release}.so.$major'
-  library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so'
-  case "$host_os" in
-  irix5*)
-    libsuff= shlibsuff=
-    # this will be overridden with pass_all, but let us keep it just in case
-    deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
-    ;;
-  *)
-    case "$LD" in # libtool.m4 will add one of these switches to LD
-    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
-    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
-    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
-    *) libsuff= shlibsuff= libmagic=never-match;;
-    esac
-    ;;
-  esac
-  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
-  shlibpath_overrides_runpath=no
-  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
-  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib${libsuff}/libc.so*`
-  deplibs_check_method='pass_all'
-  ;;
-
-# No shared lib support for Linux oldld, aout, or coff.
-linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
-  dynamic_linker=no
-  ;;
-
-# This must be Linux ELF.
-linux-gnu*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
-
-  if test -f /lib/ld.so.1; then
-    dynamic_linker='GNU ld.so'
-  else
-    # Only the GNU ld.so supports shared libraries on MkLinux.
-    case "$host_cpu" in
-    powerpc*) dynamic_linker=no ;;
-    *) dynamic_linker='Linux ld.so' ;;
-    esac
-  fi
-  ;;
-
-netbsd*)
-  version_type=sunos
-  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-    dynamic_linker='NetBSD (a.out) ld.so'
-  else
-    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
-    soname_spec='${libname}${release}.so$major'
-    dynamic_linker='NetBSD ld.elf_so'
-  fi
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-openbsd*)
-  version_type=sunos
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-    need_version=no
-  fi
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-os2*)
-  libname_spec='$name'
-  need_lib_prefix=no
-  library_names_spec='$libname.dll $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-osf3* | osf4* | osf5*)
-  version_type=osf
-  need_version=no
-  soname_spec='${libname}${release}.so'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  # this will be overridden with pass_all, but let us keep it just in case
-  deplibs_check_method='file_magic COFF format alpha shared library'
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/shlib/libc.so
-  deplibs_check_method='pass_all'
-  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
-  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
-  ;;
-
-sco3.2v5*)
-  version_type=osf
-  soname_spec='${libname}${release}.so$major'
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-solaris*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  # ldd complains unless libraries are executable
-  postinstall_cmds='chmod +x $lib'
-  deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
-  file_magic_cmd=/usr/bin/file
-  file_magic_test_file=/lib/libc.so
-  ;;
-
-sunos4*)
-  version_type=sunos
-  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
-  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
-  if test "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  case "$host_vendor" in
-    ncr)
-      deplibs_check_method='pass_all'
-      ;;
-    motorola)
-      need_lib_prefix=no
-      need_version=no
-      shlibpath_overrides_runpath=no
-      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
-      deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
-      file_magic_cmd=/usr/bin/file
-      file_magic_test_file=`echo /usr/lib/libc.so*`
-      ;;
-  esac
-  ;;
-
-uts4*)
-  version_type=linux
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-dgux*)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
-  soname_spec='${libname}${release}.so$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  ;;
-
-sysv4*MP*)
-  if test -d /usr/nec ;then
-    version_type=linux
-    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
-    soname_spec='$libname.so.$major'
-    shlibpath_var=LD_LIBRARY_PATH
-  fi
-  ;;
-
-*)
-  dynamic_linker=no
-  ;;
-esac
-echo "$ac_t$dynamic_linker" 1>&6
-test "$dynamic_linker" = no && can_build_shared=no
-
-# Report the final consequences.
-echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6
-
-# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
-# configure.in, otherwise build static only libraries.
-case "$host_os" in
-cygwin* | mingw* | os2*)
-  if test x$can_build_shared = xyes; then
-    test x$enable_win32_dll = xno && can_build_shared=no
-    echo "checking if package supports dlls... $can_build_shared" 1>&6
-  fi
-;;
-esac
-
-if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
-  case "$deplibs_check_method" in
-  "file_magic "*)
-    file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
-    if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
-       egrep "$file_magic_regex" > /dev/null; then
-      :
-    else
-      cat <<EOF 1>&2
-
-*** Warning: the command libtool uses to detect shared libraries,
-*** $file_magic_cmd, produces output that libtool cannot recognize.
-*** The result is that libtool may fail to recognize shared libraries
-*** as such.  This will affect the creation of libtool libraries that
-*** depend on shared libraries, but programs linked with such libtool
-*** libraries will work regardless of this problem.  Nevertheless, you
-*** may want to report the problem to your system manager and/or to
-*** bug-libtool at gnu.org
-
-EOF
-    fi ;;
-  esac
-fi
-
-echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
-test "$can_build_shared" = "no" && enable_shared=no
-
-# On AIX, shared libraries and static libraries use the same namespace, and
-# are all built from PIC.
-case "$host_os" in
-aix3*)
-  test "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix4*)
-  test "$enable_shared" = yes && enable_static=no
-  ;;
-esac
-
-echo "$ac_t$enable_shared" 1>&6
-
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-
-echo "checking whether to build static libraries... $enable_static" 1>&6
-
-if test "$hardcode_action" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-echo $ac_n "checking for objdir... $ac_c" 1>&6
-rm -f .libs 2>/dev/null
-mkdir .libs 2>/dev/null
-if test -d .libs; then
-  objdir=.libs
-else
-  # MS-DOS does not allow filenames that begin with a dot.
-  objdir=_libs
-fi
-rmdir .libs 2>/dev/null
-echo "$ac_t$objdir" 1>&6
-
-if test "x$enable_dlopen" != xyes; then
-  enable_dlopen=unknown
-  enable_dlopen_self=unknown
-  enable_dlopen_self_static=unknown
-else
-if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
-  lt_cv_dlopen=no lt_cv_dlopen_libs=
-echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "$progname:2212: checking for dlopen in -ldl" >&5
-ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2220 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-dlopen()
-; return 0; }
-EOF
-if { (eval echo $progname:2233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dlopen""... $ac_c" 1>&6
-echo "$progname:2252: checking for dlopen" >&5
-if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2257 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dlopen();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_dlopen) || defined (__stub___dlopen)
-choke me
-#else
-dlopen();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_dlopen=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_dlopen=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dlopen"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
-echo "$progname:2299: checking for dld_link in -ldld" >&5
-ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldld  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2307 "ltconfig"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dld_link();
-
-int main() {
-dld_link()
-; return 0; }
-EOF
-if { (eval echo $progname:2320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load""... $ac_c" 1>&6
-echo "$progname:2339: checking for shl_load" >&5
-if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2344 "ltconfig"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_shl_load) || defined (__stub___shl_load)
-choke me
-#else
-shl_load();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo $progname:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_shl_load=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_shl_load=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="shl_load"
-else
-  echo "$ac_t""no" 1>&6
-echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
-echo "$progname:2387: checking for shl_load in -ldld" >&5
-ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-ldld  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2395 "ltconfig"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char shl_load();
-
-int main() {
-shl_load()
-; return 0; }
-EOF
-if { (eval echo $progname:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-
-fi
-
-    
-fi
-
-  
-fi
-
-
-fi
-
-fi
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  fi
-
-  case "$lt_cv_dlopen" in
-  dlopen)
-for ac_hdr in dlfcn.h; do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "$progname:2452: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 2457 "ltconfig"
-#include <$ac_hdr>
-int fnord = 0;
-EOF
-ac_try="$ac_compile >/dev/null 2>conftest.out"
-{ (eval echo $progname:2462: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-done
-
-    if test "x$ac_cv_header_dlfcn_h" = xyes; then
-      CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
-    fi
-    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
-    LIBS="$lt_cv_dlopen_libs $LIBS"
-
-  echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2490: checking whether a program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-    lt_cv_dlopen_self=cross
-  else
-    cat > conftest.c <<EOF
-#line 2498 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL	RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-#  define LTDL_GLOBAL	DL_GLOBAL
-# else
-#  define LTDL_GLOBAL	0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-#  define LTDL_LAZY_OR_NOW	RTLD_LAZY
-# else
-#  ifdef DL_LAZY
-#   define LTDL_LAZY_OR_NOW	DL_LAZY
-#  else
-#   ifdef RTLD_NOW
-#    define LTDL_LAZY_OR_NOW	RTLD_NOW
-#   else
-#    ifdef DL_NOW
-#     define LTDL_LAZY_OR_NOW	DL_NOW
-#    else
-#     define LTDL_LAZY_OR_NOW	0
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-	       if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
-
-EOF
-if { (eval echo $progname:2544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
-  lt_cv_dlopen_self=yes
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  lt_cv_dlopen_self=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self" 1>&6
-
-  if test "$lt_cv_dlopen_self" = yes; then
-    LDFLAGS="$LDFLAGS $link_static_flag"
-  echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
-echo "$progname:2563: checking whether a statically linked program can dlopen itself" >&5
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-    lt_cv_dlopen_self_static=cross
-  else
-    cat > conftest.c <<EOF
-#line 2571 "ltconfig"
-
-#if HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#include <stdio.h>
-
-#ifdef RTLD_GLOBAL
-# define LTDL_GLOBAL	RTLD_GLOBAL
-#else
-# ifdef DL_GLOBAL
-#  define LTDL_GLOBAL	DL_GLOBAL
-# else
-#  define LTDL_GLOBAL	0
-# endif
-#endif
-
-/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
-   find out it does not work in some platform. */
-#ifndef LTDL_LAZY_OR_NOW
-# ifdef RTLD_LAZY
-#  define LTDL_LAZY_OR_NOW	RTLD_LAZY
-# else
-#  ifdef DL_LAZY
-#   define LTDL_LAZY_OR_NOW	DL_LAZY
-#  else
-#   ifdef RTLD_NOW
-#    define LTDL_LAZY_OR_NOW	RTLD_NOW
-#   else
-#    ifdef DL_NOW
-#     define LTDL_LAZY_OR_NOW	DL_NOW
-#    else
-#     define LTDL_LAZY_OR_NOW	0
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-fnord() { int i=42;}
-main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
-    if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
-    if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } 
-
-EOF
-if { (eval echo $progname:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
-then
-  lt_cv_dlopen_self_static=yes
-else
-  echo "$progname: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  lt_cv_dlopen_self_static=no
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
-fi
-    ;;
-  esac
-
-  case "$lt_cv_dlopen_self" in
-  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
-  *) enable_dlopen_self=unknown ;;
-  esac
-
-  case "$lt_cv_dlopen_self_static" in
-  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
-  *) enable_dlopen_self_static=unknown ;;
-  esac
-fi
-
-# Copy echo and quote the copy, instead of the original, because it is
-# used later.
-ltecho="$echo"
-if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   ltecho="$CONFIG_SHELL \$0 --fallback-echo"
-fi
-LTSHELL="$SHELL"
-
-LTCONFIG_VERSION="$VERSION"
-
-# Only quote variables if we're using ltmain.sh.
-case "$ltmain" in
-*.sh)
-  # Now quote all the things that may contain metacharacters.
-  for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
-    old_LD old_LDFLAGS old_LIBS \
-    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
-    AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
-    reload_flag reload_cmds wl \
-    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
-    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
-    library_names_spec soname_spec \
-    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
-    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \
-    file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \
-    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
-    hardcode_libdir_flag_spec hardcode_libdir_separator  \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
-
-    case "$var" in
-    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case "$ltecho" in
-  *'\$0 --fallback-echo"')
-    ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-  trap "$rm \"$ofile\"; exit 1" 1 2 15
-  echo "creating $ofile"
-  $rm "$ofile"
-  cat <<EOF > "$ofile"
-#! $SHELL
-
-# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh.
-#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Sed that helps us avoid accidentally triggering echo(1) options like -n.
-Xsed="sed -e s/^X//"
-
-# The HP-UX ksh and POSIX shell print the target directory to stdout
-# if CDPATH is set.
-if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
-
-### BEGIN LIBTOOL CONFIG
-EOF
-  cfgfile="$ofile"
-  ;;
-
-*)
-  # Double-quote the variables that need it (for aesthetics).
-  for var in old_CC old_CFLAGS old_CPPFLAGS \
-    old_LD old_LDFLAGS old_LIBS \
-    old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
-    eval "$var=\\\"\$var\\\""
-  done
-
-  # Just create a config file.
-  cfgfile="$ofile.cfg"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  echo "creating $cfgfile"
-  $rm "$cfgfile"
-  cat <<EOF > "$cfgfile"
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-EOF
-  ;;
-esac
-
-cat <<EOF >> "$cfgfile"
-# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
-# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
-# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
-# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
-#   $0$ltconfig_args
-#
-# Compiler and other test output produced by $progname, useful for
-# debugging $progname, is in ./config.log if it exists.
-
-# The version of $progname that generated this script.
-LTCONFIG_VERSION=$LTCONFIG_VERSION
-
-# Shell to use when invoking shell scripts.
-SHELL=$LTSHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# The host system.
-host_alias=$host_alias
-host=$host
-
-# An echo program that does not interpret backslashes.
-echo=$ltecho
-
-# The archiver.
-AR=$AR
-
-# The default C compiler.
-CC=$CC
-
-# The linker used to build libraries.
-LD=$LD
-
-# Whether we need hard or soft links.
-LN_S=$LN_S
-
-# A BSD-compatible nm program.
-NM=$NM
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$reload_flag
-reload_cmds=$reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$wl
-
-# Object file suffix (normally "o").
-objext="$objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$pic_flag
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$compiler_c_o
-
-# Can we write directly to a .lo ?
-compiler_o_lo=$compiler_o_lo
-
-# Must we lock files when doing compilation ?
-need_locks=$need_locks
-
-# Do we need the lib prefix for modules?
-need_lib_prefix=$need_lib_prefix
-
-# Do we need a version for libraries?
-need_version=$need_version
-
-# Whether dlopen is supported.
-dlopen=$enable_dlopen
-
-# Whether dlopen of programs is supported.
-dlopen_self=$enable_dlopen_self
-
-# Whether dlopen of statically linked programs is supported.
-dlopen_self_static=$enable_dlopen_self_static
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$link_static_flag
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$no_builtin_flag
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$export_dynamic_flag_spec
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$whole_archive_flag_spec
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# Format of library name prefix.
-libname_spec=$libname_spec
-
-# List of archive names.  First name is the real one, the rest are links.
-# The last name is the one that the linker finds with -lNAME.
-library_names_spec=$library_names_spec
-
-# The coded name of the library, if different from the real name.
-soname_spec=$soname_spec
-
-# Commands used to build and install an old-style archive.
-RANLIB=$RANLIB
-old_archive_cmds=$old_archive_cmds
-old_postinstall_cmds=$old_postinstall_cmds
-old_postuninstall_cmds=$old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$old_archive_from_new_cmds
-
-# Commands used to build and install a shared archive.
-archive_cmds=$archive_cmds
-archive_expsym_cmds=$archive_expsym_cmds
-postinstall_cmds=$postinstall_cmds
-postuninstall_cmds=$postuninstall_cmds
-
-# Method to check whether dependent libraries are shared objects.
-deplibs_check_method=$deplibs_check_method
-
-# Command to use when deplibs_check_method == file_magic.
-file_magic_cmd=$file_magic_cmd
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$finish_eval
-
-# Take the output of nm and produce a listing of raw symbols and C names.
-global_symbol_pipe=$global_symbol_pipe
-
-# Transform the output of nm in a proper C declaration
-global_symbol_to_cdecl=$global_symbol_to_cdecl
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$hardcode_libdir_separator
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$fix_srcfile_path"
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols
-
-# The commands to list exported symbols.
-export_symbols_cmds=$export_symbols_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$exclude_expsyms
-
-# Symbols that must always be exported.
-include_expsyms=$include_expsyms
-
-EOF
-
-case "$ltmain" in
-*.sh)
-  echo '### END LIBTOOL CONFIG' >> "$ofile"
-  echo >> "$ofile"
-  case "$host_os" in
-  aix3*)
-    cat <<\EOF >> "$ofile"
-
-# AIX sometimes has problems with the GCC collect2 program.  For some
-# reason, if we set the COLLECT_NAMES environment variable, the problems
-# vanish in a puff of smoke.
-if test "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  # Append the ltmain.sh script.
-  sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
-  # We use sed instead of cat because bash on DJGPP gets confused if
-  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
-  # text mode, it properly converts lines to CR/LF.  This bash problem
-  # is reportedly fixed, but why not run on old versions too?
-
-  chmod +x "$ofile"
-  ;;
-
-*)
-  # Compile the libtool program.
-  echo "FIXME: would compile $ltmain"
-  ;;
-esac
-
-test -n "$cache_file" || exit 0
-
-# AC_CACHE_SAVE
-trap '' 1 2 15
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs.  It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already.  You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
-  case `(ac_space=' '; set | grep ac_space) 2>&1` in
-  *ac_space=\ *)
-    # `set' does not quote correctly, so add quotes (double-quote substitution
-    # turns \\\\ into \\, and sed turns \\ into \).
-    sed -n \
-      -e "s/'/'\\\\''/g" \
-      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
-    ;;
-  *)
-    # `set' quotes correctly as required by POSIX, so do not add quotes.
-    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
-    ;;
-  esac >> confcache
-if cmp -s $cache_file confcache; then
-  :
-else
-  if test -w $cache_file; then
-    echo "updating cache $cache_file"
-    cat confcache > $cache_file
-  else
-    echo "not updating unwritable cache $cache_file"
-  fi
-fi
-rm -f confcache
-
-exit 0
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/ltmain.sh b/ltmain.sh
index 50515ad..529c85f 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,7 +1,8 @@
 # ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
+# NOTE: Changing this file will not affect anything until you rerun configure.
 #
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
+# Free Software Foundation, Inc.
 # Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
 #
 # This program is free software; you can redistribute it and/or modify
@@ -23,6 +24,29 @@
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5.6
+TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42) Debian$Rev: 203 $"
+
+
 # Check that we have a working $echo.
 if test "X$1" = X--no-reexec; then
   # Discard the --no-reexec flag, and continue.
@@ -35,7 +59,7 @@ elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
   :
 else
   # Restart under the correct shell, and then maybe $echo will work.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
 fi
 
 if test "X$1" = X--fallback-echo; then
@@ -44,19 +68,9 @@ if test "X$1" = X--fallback-echo; then
   cat <<EOF
 $*
 EOF
-  exit 0
+  exit $EXIT_SUCCESS
 fi
 
-# The name of this program.
-progname=`$echo "$0" | sed 's%^.*/%%'`
-modename="$progname"
-
-# Constants.
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION=1.3.4
-TIMESTAMP=" (1.385.2.196 1999/12/07 21:47:57)"
-
 default_mode=
 help="Try \`$progname --help' for more information."
 magic="%%%MAGIC variable%%%"
@@ -66,10 +80,19 @@ rm="rm -f"
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed="${SED}"' -e 1s/^X//'
 sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-SP2NL='tr \040 \012'
-NL2SP='tr \015\012 \040\040'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+  SP2NL="tr '\100' '\n'"
+  NL2SP="tr '\r\n' '\100\100'"
+  ;;
+ *) # Assume ASCII based system
+  SP2NL="tr '\040' '\012'"
+  NL2SP="tr '\015\012' '\040\040'"
+  ;;
+esac
 
 # NLS nuisances.
 # Only set LANG and LC_ALL to C if already set.
@@ -83,16 +106,14 @@ if test "${LANG+set}" = set; then
   save_LANG="$LANG"; LANG=C; export LANG
 fi
 
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
-  echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
-  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit 1
-fi
+# Make sure IFS has a sensible default
+: ${IFS=" 	
+"}
 
 if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-  echo "$modename: not configured to build any kind of library" 1>&2
-  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit 1
+  $echo "$modename: not configured to build any kind of library" 1>&2
+  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit $EXIT_FAILURE
 fi
 
 # Global variables.
@@ -107,22 +128,163 @@ execute_dlfiles=
 lo2o="s/\\.lo\$/.${objext}/"
 o2lo="s/\\.${objext}\$/.lo/"
 
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid () {
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 | \
+	sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+      if test "X$win32_nmres" = "Ximport" ; then
+        win32_libid_type="x86 archive import"
+      else
+        win32_libid_type="x86 archive static"
+      fi
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag () {
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	case $arg in
+	  *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	CC_quoted="$CC_quoted $arg"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	    # Double-quote args containing other shell metacharacters.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    CC_quoted="$CC_quoted $arg"
+	  done
+	    case "$@ " in
+	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  $echo "$modename: unable to infer tagged configuration"
+	  $echo "$modename: specify a tag with \`--tag'" 1>&2
+	  exit $EXIT_FAILURE
+#        else
+#          $echo "$modename: using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
 # Parse our command line options once, thoroughly.
-while test $# -gt 0
+while test "$#" -gt 0
 do
   arg="$1"
   shift
 
-  case "$arg" in
+  case $arg in
   -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
   *) optarg= ;;
   esac
 
   # If the previous option needs an argument, assign it.
   if test -n "$prev"; then
-    case "$prev" in
+    case $prev in
     execute_dlfiles)
-      eval "$prev=\"\$$prev \$arg\""
+      execute_dlfiles="$execute_dlfiles $arg"
+      ;;
+    tag)
+      tagname="$arg"
+      preserve_args="${preserve_args}=$arg"
+
+      # Check whether tagname contains only valid characters
+      case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+	$echo "$progname: invalid tag name: $tagname" 1>&2
+	exit $EXIT_FAILURE
+	;;
+      esac
+
+      case $tagname in
+      CC)
+	# Don't test for the "default" C tag, as we know, it's there, but
+	# not specially marked.
+	;;
+      *)
+	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
+	  taglist="$taglist $tagname"
+	  # Evaluate the configuration.
+	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+	else
+	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
+	fi
+	;;
+      esac
       ;;
     *)
       eval "$prev=\$arg"
@@ -135,24 +297,33 @@ do
   fi
 
   # Have we seen a non-optional argument yet?
-  case "$arg" in
+  case $arg in
   --help)
     show_help=yes
     ;;
 
   --version)
-    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
-    exit 0
+    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    $echo
+    $echo "Copyright (C) 2003  Free Software Foundation, Inc."
+    $echo "This is free software; see the source for copying conditions.  There is NO"
+    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+    exit $EXIT_SUCCESS
     ;;
 
   --config)
-    sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
-    exit 0
+    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+    done
+    exit $EXIT_SUCCESS
     ;;
 
   --debug)
-    echo "$progname: enabling shell trace mode"
+    $echo "$progname: enabling shell trace mode"
     set -x
+    preserve_args="$preserve_args $arg"
     ;;
 
   --dry-run | -n)
@@ -160,18 +331,18 @@ do
     ;;
 
   --features)
-    echo "host: $host"
+    $echo "host: $host"
     if test "$build_libtool_libs" = yes; then
-      echo "enable shared libraries"
+      $echo "enable shared libraries"
     else
-      echo "disable shared libraries"
+      $echo "disable shared libraries"
     fi
     if test "$build_old_libs" = yes; then
-      echo "enable static libraries"
+      $echo "enable static libraries"
     else
-      echo "disable static libraries"
+      $echo "disable static libraries"
     fi
-    exit 0
+    exit $EXIT_SUCCESS
     ;;
 
   --finish) mode="finish" ;;
@@ -179,8 +350,19 @@ do
   --mode) prevopt="--mode" prev=mode ;;
   --mode=*) mode="$optarg" ;;
 
+  --preserve-dup-deps) duplicate_deps="yes" ;;
+
   --quiet | --silent)
     show=:
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --tag) prevopt="--tag" prev=tag ;;
+  --tag=*)
+    set tag "$optarg" ${1+"$@"}
+    shift
+    prev=tag
+    preserve_args="$preserve_args --tag"
     ;;
 
   -dlopen)
@@ -191,7 +373,7 @@ do
   -*)
     $echo "$modename: unrecognized option \`$arg'" 1>&2
     $echo "$help" 1>&2
-    exit 1
+    exit $EXIT_FAILURE
     ;;
 
   *)
@@ -204,19 +386,26 @@ done
 if test -n "$prevopt"; then
   $echo "$modename: option \`$prevopt' requires an argument" 1>&2
   $echo "$help" 1>&2
-  exit 1
+  exit $EXIT_FAILURE
 fi
 
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
 if test -z "$show_help"; then
 
   # Infer the operation mode.
   if test -z "$mode"; then
-    case "$nonopt" in
-    *cc | *++ | gcc* | *-gcc*)
+    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+    $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+    case $nonopt in
+    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
       mode=link
       for arg
       do
-	case "$arg" in
+	case $arg in
 	-c)
 	   mode=compile
 	   break
@@ -253,7 +442,7 @@ if test -z "$show_help"; then
   if test -n "$execute_dlfiles" && test "$mode" != execute; then
     $echo "$modename: unrecognized option \`-dlopen'" 1>&2
     $echo "$help" 1>&2
-    exit 1
+    exit $EXIT_FAILURE
   fi
 
   # Change the help message to a mode-specific one.
@@ -261,140 +450,222 @@ if test -z "$show_help"; then
   help="Try \`$modename --help --mode=$mode' for more information."
 
   # These modes are in order of execution frequency so that they run quickly.
-  case "$mode" in
+  case $mode in
   # libtool compile mode
   compile)
     modename="$modename: compile"
     # Get the compilation command and the source file.
     base_compile=
-    lastarg=
-    srcfile="$nonopt"
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
     suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
 
-    user_target=no
     for arg
     do
-      # Accept any command-line options.
-      case "$arg" in
-      -o)
-	if test "$user_target" != "no"; then
-	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-	  exit 1
-	fi
-	user_target=next
-	;;
-
-      -static)
-	build_old_libs=yes
-	continue
+      case "$arg_mode" in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
 	;;
-      esac
 
-      case "$user_target" in
-      next)
-	# The next one is the -o target name
-	user_target=yes
-	continue
-	;;
-      yes)
-	# We got the output file
-	user_target=set
+      target )
 	libobj="$arg"
+	arg_mode=normal
 	continue
 	;;
-      esac
 
-      # Accept the current argument as the source file.
-      lastarg="$srcfile"
-      srcfile="$arg"
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  if test -n "$libobj" ; then
+	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  arg_mode=target
+	  continue
+	  ;;
 
-      # Aesthetically quote the previous argument.
+	-static | -prefer-pic | -prefer-non-pic)
+	  later="$later $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+ 	  for arg in $args; do
+	    IFS="$save_ifs"
+
+	    # Double-quote args containing other shell metacharacters.
+	    # Many Bourne shells cannot handle close brackets correctly
+	    # in scan sets, so we specify it separately.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    lastarg="$lastarg $arg"
+	  done
+	  IFS="$save_ifs"
+	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+	  # Add the arguments to base_compile.
+	  base_compile="$base_compile $lastarg"
+	  continue
+	  ;;
+
+	* )
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
 
-      # Backslashify any backslashes, double quotes, and dollar signs.
-      # These are the only characters that are still specially
-      # interpreted inside of double-quoted scrings.
+      # Aesthetically quote the previous argument.
       lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
 
+      case $lastarg in
       # Double-quote args containing other shell metacharacters.
-      # Many Bourne shells cannot handle close brackets correctly in scan
-      # sets, so we specify it separately.
-      case "$lastarg" in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 	lastarg="\"$lastarg\""
 	;;
       esac
 
-      # Add the previous argument to base_compile.
-      if test -z "$base_compile"; then
-	base_compile="$lastarg"
-      else
-	base_compile="$base_compile $lastarg"
-      fi
-    done
+      base_compile="$base_compile $lastarg"
+    done # for arg
 
-    case "$user_target" in
-    set)
+    case $arg_mode in
+    arg)
+      $echo "$modename: you must specify an argument for -Xcompile"
+      exit $EXIT_FAILURE
       ;;
-    no)
-      # Get the name of the library object.
-      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+    target)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit $EXIT_FAILURE
       ;;
     *)
-      $echo "$modename: you must specify a target with \`-o'" 1>&2
-      exit 1
+      # Get the name of the library object.
+      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
       ;;
     esac
 
     # Recognize several different file suffixes.
     # If the user specifies -o file.o, it is replaced with file.lo
-    xform='[cCFSfmso]'
-    case "$libobj" in
+    xform='[cCFSifmso]'
+    case $libobj in
     *.ada) xform=ada ;;
     *.adb) xform=adb ;;
     *.ads) xform=ads ;;
     *.asm) xform=asm ;;
     *.c++) xform=c++ ;;
     *.cc) xform=cc ;;
+    *.ii) xform=ii ;;
+    *.class) xform=class ;;
     *.cpp) xform=cpp ;;
     *.cxx) xform=cxx ;;
     *.f90) xform=f90 ;;
     *.for) xform=for ;;
+    *.java) xform=java ;;
     esac
 
     libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
 
-    case "$libobj" in
+    case $libobj in
     *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
     *)
       $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-      exit 1
+      exit $EXIT_FAILURE
       ;;
     esac
 
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -static)
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$xdir" = "X$obj"; then
+      xdir=
+    else
+      xdir=$xdir/
+    fi
+    lobj=${xdir}$objdir/$objname
+
     if test -z "$base_compile"; then
       $echo "$modename: you must specify a compilation command" 1>&2
       $echo "$help" 1>&2
-      exit 1
+      exit $EXIT_FAILURE
     fi
 
     # Delete any leftover library objects.
     if test "$build_old_libs" = yes; then
-      removelist="$obj $libobj"
+      removelist="$obj $lobj $libobj ${libobj}T"
     else
-      removelist="$libobj"
+      removelist="$lobj $libobj ${libobj}T"
     fi
 
     $run $rm $removelist
-    trap "$run $rm $removelist; exit 1" 1 2 15
+    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
 
     # Calculate the filename of the output object if compiler does
     # not support -o with -c
     if test "$compiler_c_o" = no; then
-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
       lockfile="$output_obj.lock"
       removelist="$removelist $output_obj $lockfile"
-      trap "$run $rm $removelist; exit 1" 1 2 15
+      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
     else
+      output_obj=
       need_locks=no
       lockfile=
     fi
@@ -402,13 +673,13 @@ if test -z "$show_help"; then
     # Lock this critical section if it is needed
     # We use this script file to make the link, it avoids creating a new file
     if test "$need_locks" = yes; then
-      until ln "$0" "$lockfile" 2>/dev/null; do
+      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
 	$show "Waiting for $lockfile to be removed"
 	sleep 2
       done
     elif test "$need_locks" = warn; then
       if test -f "$lockfile"; then
-	echo "\
+	$echo "\
 *** ERROR, $lockfile exists and contains:
 `cat $lockfile 2>/dev/null`
 
@@ -420,63 +691,67 @@ avoid parallel builds (make -j) in this platform, or get a better
 compiler."
 
 	$run $rm $removelist
-	exit 1
+	exit $EXIT_FAILURE
       fi
-      echo $srcfile > "$lockfile"
+      $echo $srcfile > "$lockfile"
     fi
 
     if test -n "$fix_srcfile_path"; then
       eval srcfile=\"$fix_srcfile_path\"
     fi
 
+    $run $rm "$libobj" "${libobj}T"
+
+    # Create a libtool object file (analogous to a ".la" file),
+    # but don't create it if we're doing a dry run.
+    test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
     # Only build a PIC object if we are building libtool libraries.
     if test "$build_libtool_libs" = yes; then
       # Without this assignment, base_compile gets emptied.
       fbsd_hideous_sh_bug=$base_compile
 
-      # All platforms use -DPIC, to notify preprocessed assembler code.
-      command="$base_compile $srcfile $pic_flag -DPIC"
-      if test "$build_old_libs" = yes; then
-	lo_libobj="$libobj"
-	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
-	if test "X$dir" = "X$libobj"; then
-	  dir="$objdir"
-	else
-	  dir="$dir/$objdir"
-	fi
-	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+      if test "$pic_mode" != no; then
+	command="$base_compile $srcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      fi
 
-	if test -d "$dir"; then
-	  $show "$rm $libobj"
-	  $run $rm $libobj
-	else
-	  $show "$mkdir $dir"
-	  $run $mkdir $dir
-	  status=$?
-	  if test $status -ne 0 && test ! -d $dir; then
-	    exit $status
-	  fi
+      if test ! -d "${xdir}$objdir"; then
+	$show "$mkdir ${xdir}$objdir"
+	$run $mkdir ${xdir}$objdir
+	status=$?
+	if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+	  exit $status
 	fi
       fi
-      if test "$compiler_o_lo" = yes; then
-	output_obj="$libobj"
-	command="$command -o $output_obj"
-      elif test "$compiler_c_o" = yes; then
-	output_obj="$obj"
-	command="$command -o $output_obj"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	command="$command -o $lobj"
       fi
 
-      $run $rm "$output_obj"
+      $run $rm "$lobj" "$output_obj"
+
       $show "$command"
       if $run eval "$command"; then :
       else
 	test -n "$output_obj" && $run $rm $removelist
-	exit 1
+	exit $EXIT_FAILURE
       fi
 
       if test "$need_locks" = warn &&
-	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
-	echo "\
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
 *** ERROR, $lockfile contains:
 `cat $lockfile 2>/dev/null`
 
@@ -491,13 +766,13 @@ avoid parallel builds (make -j) in this platform, or get a better
 compiler."
 
 	$run $rm $removelist
-	exit 1
+	exit $EXIT_FAILURE
       fi
 
       # Just move the object if needed, then go on to compile the next one
-      if test x"$output_obj" != x"$libobj"; then
-	$show "$mv $output_obj $libobj"
-	if $run $mv $output_obj $libobj; then :
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	$show "$mv $output_obj $lobj"
+	if $run $mv $output_obj $lobj; then :
 	else
 	  error=$?
 	  $run $rm $removelist
@@ -505,66 +780,50 @@ compiler."
 	fi
       fi
 
-      # If we have no pic_flag, then copy the object into place and finish.
-      if test -z "$pic_flag" && test "$build_old_libs" = yes; then
-	# Rename the .lo from within objdir to obj
-	if test -f $obj; then
-	  $show $rm $obj
-	  $run $rm $obj
-	fi
+      # Append the name of the PIC object to the libtool object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
 
-	$show "$mv $libobj $obj"
-	if $run $mv $libobj $obj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
+EOF
 
-	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-	if test "X$xdir" = "X$obj"; then
-	  xdir="."
-	else
-	  xdir="$xdir"
-	fi
-	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
-	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
-	# Now arrange that obj and lo_libobj become the same file
-	$show "(cd $xdir && $LN_S $baseobj $libobj)"
-	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
-	  exit 0
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+        suppress_output=' >/dev/null 2>&1'
       fi
+    else
+      # No PIC object so indicate it doesn't exist in the libtool
+      # object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
 
-      # Allow error messages only from the first compilation.
-      suppress_output=' >/dev/null 2>&1'
+EOF
     fi
 
     # Only build a position-dependent object if we build old libraries.
     if test "$build_old_libs" = yes; then
-      command="$base_compile $srcfile"
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      else
+	command="$base_compile $srcfile $pic_flag"
+      fi
       if test "$compiler_c_o" = yes; then
 	command="$command -o $obj"
-	output_obj="$obj"
       fi
 
       # Suppress compiler output if we already did a PIC compilation.
       command="$command$suppress_output"
-      $run $rm "$output_obj"
+      $run $rm "$obj" "$output_obj"
       $show "$command"
       if $run eval "$command"; then :
       else
 	$run $rm $removelist
-	exit 1
+	exit $EXIT_FAILURE
       fi
 
       if test "$need_locks" = warn &&
-	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
-	echo "\
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
 *** ERROR, $lockfile contains:
 `cat $lockfile 2>/dev/null`
 
@@ -579,11 +838,11 @@ avoid parallel builds (make -j) in this platform, or get a better
 compiler."
 
 	$run $rm $removelist
-	exit 1
+	exit $EXIT_FAILURE
       fi
 
       # Just move the object if needed
-      if test x"$output_obj" != x"$obj"; then
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
 	$show "$mv $output_obj $obj"
 	if $run $mv $output_obj $obj; then :
 	else
@@ -593,40 +852,42 @@ compiler."
 	fi
       fi
 
-      # Create an invalid libtool object if no PIC, so that we do not
-      # accidentally link it into a program.
-      if test "$build_libtool_libs" != yes; then
-	$show "echo timestamp > $libobj"
-	$run eval "echo timestamp > \$libobj" || exit $?
-      else
-	# Move the .lo from within objdir
-	$show "$mv $libobj $lo_libobj"
-	if $run $mv $libobj $lo_libobj; then :
-	else
-	  error=$?
-	  $run $rm $removelist
-	  exit $error
-	fi
-      fi
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+    else
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
     fi
 
+    $run $mv "${libobj}T" "${libobj}"
+
     # Unlock the critical section if it was locked
     if test "$need_locks" != no; then
-      $rm "$lockfile"
+      $run $rm "$lockfile"
     fi
 
-    exit 0
+    exit $EXIT_SUCCESS
     ;;
 
   # libtool link mode
-  link)
+  link | relink)
     modename="$modename: link"
-    case "$host" in
-    *-*-cygwin* | *-*-mingw* | *-*-os2*)
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
       # It is impossible to link a dll without this setting, and
       # we shouldn't force the makefile maintainer to figure out
       # which system we are compiling for in order to pass an extra
-      # flag for every libtool invokation.
+      # flag for every libtool invocation.
       # allow_undefined=no
 
       # FIXME: Unfortunately, there are problems with the above when trying
@@ -635,179 +896,13 @@ compiler."
       # -no-undefined on the libtool link line when we can be certain
       # that all symbols are satisfied, otherwise we get a static library.
       allow_undefined=yes
-
-      # This is a source program that is used to create dlls on Windows
-      # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# #  ifdef __CYGWIN32__
-# #    define __CYGWIN__ __CYGWIN32__
-# #  endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-#   __hDllInstance_base = hInst;
-#   return TRUE;
-# }
-# /* ltdll.c ends here */
-      # This is a source program that is used to create import libraries
-      # on Windows for dlls which lack them. Don't remove nor modify the
-      # starting and closing comments
-# /* impgen.c starts here */
-# /*   Copyright (C) 1999 Free Software Foundation, Inc.
-# 
-#  This file is part of GNU libtool.
-# 
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License as published by
-#  the Free Software Foundation; either version 2 of the License, or
-#  (at your option) any later version.
-# 
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-# 
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#  */
-# 
-#  #include <stdio.h>		/* for printf() */
-#  #include <unistd.h>		/* for open(), lseek(), read() */
-#  #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
-#  #include <string.h>		/* for strdup() */
-# 
-#  static unsigned int
-#  pe_get16 (fd, offset)
-#       int fd;
-#       int offset;
-#  {
-#    unsigned char b[2];
-#    lseek (fd, offset, SEEK_SET);
-#    read (fd, b, 2);
-#    return b[0] + (b[1]<<8);
-#  }
-# 
-#  static unsigned int
-#  pe_get32 (fd, offset)
-#      int fd;
-#      int offset;
-#  {
-#    unsigned char b[4];
-#    lseek (fd, offset, SEEK_SET);
-#    read (fd, b, 4);
-#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-#  }
-# 
-#  static unsigned int
-#  pe_as32 (ptr)
-#       void *ptr;
-#  {
-#    unsigned char *b = ptr;
-#    return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-#  }
-# 
-#  int
-#  main (argc, argv)
-#      int argc;
-#      char *argv[];
-#  {
-#      int dll;
-#      unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-#      unsigned long export_rva, export_size, nsections, secptr, expptr;
-#      unsigned long name_rvas, nexp;
-#      unsigned char *expdata, *erva;
-#      char *filename, *dll_name;
-# 
-#      filename = argv[1];
-# 
-#      dll = open(filename, O_RDONLY|O_BINARY);
-#      if (!dll)
-#  	return 1;
-# 
-#      dll_name = filename;
-#    
-#      for (i=0; filename[i]; i++)
-#  	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
-#  	    dll_name = filename + i +1;
-# 
-#      pe_header_offset = pe_get32 (dll, 0x3c);
-#      opthdr_ofs = pe_header_offset + 4 + 20;
-#      num_entries = pe_get32 (dll, opthdr_ofs + 92);
-# 
-#      if (num_entries < 1) /* no exports */
-#  	return 1;
-# 
-#      export_rva = pe_get32 (dll, opthdr_ofs + 96);
-#      export_size = pe_get32 (dll, opthdr_ofs + 100);
-#      nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-#      secptr = (pe_header_offset + 4 + 20 +
-#  	      pe_get16 (dll, pe_header_offset + 4 + 16));
-# 
-#      expptr = 0;
-#      for (i = 0; i < nsections; i++)
-#      {
-#  	char sname[8];
-#  	unsigned long secptr1 = secptr + 40 * i;
-#  	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-#  	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-#  	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-#  	lseek(dll, secptr1, SEEK_SET);
-#  	read(dll, sname, 8);
-#  	if (vaddr <= export_rva && vaddr+vsize > export_rva)
-#  	{
-#  	    expptr = fptr + (export_rva - vaddr);
-#  	    if (export_rva + export_size > vaddr + vsize)
-#  		export_size = vsize - (export_rva - vaddr);
-#  	    break;
-#  	}
-#      }
-# 
-#      expdata = (unsigned char*)malloc(export_size);
-#      lseek (dll, expptr, SEEK_SET);
-#      read (dll, expdata, export_size);
-#      erva = expdata - export_rva;
-# 
-#      nexp = pe_as32 (expdata+24);
-#      name_rvas = pe_as32 (expdata+32);
-# 
-#      printf ("EXPORTS\n");
-#      for (i = 0; i<nexp; i++)
-#      {
-#  	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-#  	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-#      }
-# 
-#      return 0;
-#  }
-# /* impgen.c ends here */
       ;;
     *)
       allow_undefined=yes
       ;;
     esac
+    libtool_args="$nonopt"
+    base_compile="$nonopt $@"
     compile_command="$nonopt"
     finalize_command="$nonopt"
 
@@ -818,18 +913,13 @@ compiler."
     convenience=
     old_convenience=
     deplibs=
-    linkopts=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
 
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
-    else
-      lib_search_path=
-    fi
-    # now prepend the system-specific ones
-    eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
-    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-    
     avoid_version=no
     dlfiles=
     dlprefiles=
@@ -839,10 +929,12 @@ compiler."
     export_symbols_regex=
     generated=
     libobjs=
-    link_against_libtool_libs=
     ltlibs=
     module=no
+    no_install=no
     objs=
+    non_pic_objects=
+    precious_files_regex=
     prefer_static_libs=no
     preload=no
     prev=
@@ -854,11 +946,14 @@ compiler."
     temp_rpath=
     thread_safe=no
     vinfo=
+    vinfo_number=no
+
+    func_infer_tag $base_compile
 
     # We need to know -static, to get the right output filenames.
     for arg
     do
-      case "$arg" in
+      case $arg in
       -all-static | -static)
 	if test "X$arg" = "X-all-static"; then
 	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
@@ -884,20 +979,27 @@ compiler."
     test -n "$old_archive_from_new_cmds" && build_old_libs=yes
 
     # Go through the arguments, transforming them on the way.
-    while test $# -gt 0; do
+    while test "$#" -gt 0; do
       arg="$1"
       shift
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+	;;
+      *) qarg=$arg ;;
+      esac
+      libtool_args="$libtool_args $qarg"
 
       # If the previous option needs an argument, assign it.
       if test -n "$prev"; then
-	case "$prev" in
+	case $prev in
 	output)
 	  compile_command="$compile_command @OUTPUT@"
 	  finalize_command="$finalize_command @OUTPUT@"
 	  ;;
 	esac
 
-	case "$prev" in
+	case $prev in
 	dlfiles|dlprefiles)
 	  if test "$preload" = no; then
 	    # Add the symbol object into the linking commands.
@@ -905,7 +1007,7 @@ compiler."
 	    finalize_command="$finalize_command @SYMFILE@"
 	    preload=yes
 	  fi
-	  case "$arg" in
+	  case $arg in
 	  *.la | *.lo) ;;  # We handle these cases below.
 	  force)
 	    if test "$dlself" = no; then
@@ -934,6 +1036,7 @@ compiler."
 	      dlprefiles="$dlprefiles $arg"
 	    fi
 	    prev=
+	    continue
 	    ;;
 	  esac
 	  ;;
@@ -941,7 +1044,7 @@ compiler."
 	  export_symbols="$arg"
 	  if test ! -f "$arg"; then
 	    $echo "$modename: symbol file \`$arg' does not exist"
-	    exit 1
+	    exit $EXIT_FAILURE
 	  fi
 	  prev=
 	  continue
@@ -951,18 +1054,135 @@ compiler."
 	  prev=
 	  continue
 	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
 	release)
 	  release="-$arg"
 	  prev=
 	  continue
 	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat $save_arg`
+	    do
+#	      moreargs="$moreargs $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		# If there is no directory component, then add one.
+		case $arg in
+		*/* | *\\*) . $arg ;;
+		*) . ./$arg ;;
+		esac
+
+		if test -z "$pic_object" || \
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none && \
+		   test "$non_pic_object" = none; then
+		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+
+		# Extract subdirectory from the argument.
+		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		if test "X$xdir" = "X$arg"; then
+		  xdir=
+		else
+		  xdir="$xdir/"
+		fi
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      dlfiles="$dlfiles $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    dlprefiles="$dlprefiles $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  libobjs="$libobjs $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if test -z "$run"; then
+		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+		  exit $EXIT_FAILURE
+		else
+		  # Dry-run case.
+
+		  # Extract subdirectory from the argument.
+		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		  if test "X$xdir" = "X$arg"; then
+		    xdir=
+		  else
+		    xdir="$xdir/"
+		  fi
+
+		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+		  libobjs="$libobjs $pic_object"
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		fi
+	      fi
+	    done
+	  else
+	    $echo "$modename: link input file \`$save_arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
 	rpath | xrpath)
 	  # We need an absolute path.
-	  case "$arg" in
+	  case $arg in
 	  [\\/]* | [A-Za-z]:[\\/]*) ;;
 	  *)
 	    $echo "$modename: only absolute run-paths are allowed" 1>&2
-	    exit 1
+	    exit $EXIT_FAILURE
 	    ;;
 	  esac
 	  if test "$prev" = rpath; then
@@ -979,17 +1199,45 @@ compiler."
 	  prev=
 	  continue
 	  ;;
+	xcompiler)
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $wl$qarg"
+	  prev=
+	  compile_command="$compile_command $wl$qarg"
+	  finalize_command="$finalize_command $wl$qarg"
+	  continue
+	  ;;
+	xcclinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	shrext)
+  	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
 	*)
 	  eval "$prev=\"\$arg\""
 	  prev=
 	  continue
 	  ;;
 	esac
-      fi
+      fi # test -n "$prev"
 
       prevarg="$arg"
 
-      case "$arg" in
+      case $arg in
       -all-static)
 	if test -n "$link_static_flag"; then
 	  compile_command="$compile_command $link_static_flag"
@@ -1026,8 +1274,8 @@ compiler."
 
       -export-symbols | -export-symbols-regex)
 	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-	  $echo "$modename: not more than one -exported-symbols argument allowed"
-	  exit 1
+	  $echo "$modename: more than one -exported-symbols argument is not allowed"
+	  exit $EXIT_FAILURE
 	fi
 	if test "X$arg" = "X-export-symbols"; then
 	  prev=expsyms
@@ -1037,58 +1285,90 @@ compiler."
 	continue
 	;;
 
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  compile_command="$compile_command $arg"
+	  finalize_command="$finalize_command $arg"
+	  ;;
+	esac
+	continue
+	;;
+
       -L*)
 	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
 	# We need an absolute path.
-	case "$dir" in
+	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
 	*)
 	  absdir=`cd "$dir" && pwd`
 	  if test -z "$absdir"; then
-	    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-	    absdir="$dir"
+	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+	    exit $EXIT_FAILURE
 	  fi
 	  dir="$absdir"
 	  ;;
 	esac
-	case " $deplibs " in
-	*" $arg "*) ;;
-	*) deplibs="$deplibs $arg";;
+	case "$deplibs " in
+	*" -L$dir "*) ;;
+	*)
+	  deplibs="$deplibs -L$dir"
+	  lib_search_path="$lib_search_path $dir"
+	  ;;
 	esac
-	case " $lib_search_path " in
-	*" $dir "*) ;;
-	*) lib_search_path="$lib_search_path $dir";;
-	esac
-	case "$host" in
-	*-*-cygwin* | *-*-mingw* | *-*-os2*)
-	  dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
-	  case ":$dllsearchpath:" in
-	  ::) dllsearchpath="$dllsearchdir";;
-	  *":$dllsearchdir:"*) ;;
-	  *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$dir";;
 	  esac
 	  ;;
 	esac
+	continue
 	;;
 
       -l*)
-	if test "$arg" = "-lc"; then
-	  case "$host" in
-	  *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
-	    # These systems don't actually have c library (as such)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
+	    # These systems don't actually have a C or math library (as such)
 	    continue
 	    ;;
-	  esac
-	elif test "$arg" = "-lm"; then
-	  case "$host" in
-	  *-*-cygwin* | *-*-beos*)
-	    # These systems don't actually have math library (as such)
-	    continue
+	  *-*-mingw* | *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
 	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    deplibs="$deplibs -framework System"
+	    continue
 	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
 	fi
 	deplibs="$deplibs $arg"
+	continue
+	;;
+
+     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	deplibs="$deplibs $arg"
+	continue
 	;;
 
       -module)
@@ -1096,13 +1376,70 @@ compiler."
 	continue
 	;;
 
+      # gcc -m* arguments should be passed to the linker via $compiler_flags
+      # in order to pass architecture information to the linker
+      # (e.g. 32 vs 64-bit).  This may also be accomplished via -Wl,-mfoo
+      # but this is not reliable with gcc because gcc may use -mfoo to
+      # select a different linker, different libraries, etc, while
+      # -Wl,-mfoo simply passes -mfoo to the linker.
+      -m*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+        compile_command="$compile_command $arg"
+        finalize_command="$finalize_command $arg"
+        if test "$with_gcc" = "yes" ; then
+          compiler_flags="$compiler_flags $arg"
+        fi
+        continue
+        ;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # in order for the loader to find any dlls it needs.
+	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
       -no-undefined)
 	allow_undefined=no
 	continue
 	;;
 
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
       -o) prev=output ;;
 
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
       -release)
 	prev=release
 	continue
@@ -1121,11 +1458,11 @@ compiler."
       -R*)
 	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
 	# We need an absolute path.
-	case "$dir" in
+	case $dir in
 	[\\/]* | [A-Za-z]:[\\/]*) ;;
 	*)
 	  $echo "$modename: only absolute run-paths are allowed" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
 	case "$xrpath " in
@@ -1136,11 +1473,11 @@ compiler."
 	;;
 
       -static)
-	# If we have no pic_flag, then this is the same as -all-static.
-	if test -z "$pic_flag" && test -n "$link_static_flag"; then
-	  compile_command="$compile_command $link_static_flag"
-	  finalize_command="$finalize_command $link_static_flag"
-	fi
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
 	continue
 	;;
 
@@ -1153,388 +1490,1304 @@ compiler."
 	prev=vinfo
 	continue
 	;;
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -Wc,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Wl,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $wl$flag"
+	  linker_flags="$linker_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
 
       # Some other compiler flag.
       -* | +*)
 	# Unknown arguments in both finalize_command and compile_command need
 	# to be aesthetically quoted because they are evaled later.
 	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case "$arg" in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 	  arg="\"$arg\""
 	  ;;
 	esac
 	;;
 
-      *.o | *.obj | *.a | *.lib)
+      *.$objext)
 	# A standard object.
 	objs="$objs $arg"
 	;;
 
       *.lo)
-	# A library object.
-	if test "$prev" = dlfiles; then
-	  dlfiles="$dlfiles $arg"
-	  if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
-	    prev=
-	    continue
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  # If there is no directory component, then add one.
+	  case $arg in
+	  */* | *\\*) . $arg ;;
+	  *) . ./$arg ;;
+	  esac
+
+	  if test -z "$pic_object" || \
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none && \
+	     test "$non_pic_object" = none; then
+	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	  if test "X$xdir" = "X$arg"; then
+	    xdir=
+ 	  else
+	    xdir="$xdir/"
+	  fi
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		dlfiles="$dlfiles $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      dlprefiles="$dlprefiles $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    libobjs="$libobjs $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if test -z "$run"; then
+	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+	    exit $EXIT_FAILURE
 	  else
-	    # If libtool objects are unsupported, then we need to preload.
-	    prev=dlprefiles
+	    # Dry-run case.
+
+	    # Extract subdirectory from the argument.
+	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	    if test "X$xdir" = "X$arg"; then
+	      xdir=
+	    else
+	      xdir="$xdir/"
+	    fi
+
+	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+	    libobjs="$libobjs $pic_object"
+	    non_pic_objects="$non_pic_objects $non_pic_object"
 	  fi
 	fi
+	;;
 
-	if test "$prev" = dlprefiles; then
-	  # Preload the old-style object.
-	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
-	  prev=
-	fi
-	libobjs="$libobjs $arg"
+      *.$libext)
+	# An archive.
+	deplibs="$deplibs $arg"
+	old_deplibs="$old_deplibs $arg"
+	continue
 	;;
 
       *.la)
 	# A libtool-controlled library.
 
-	dlname=
-	libdir=
-	library_names=
-	old_library=
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  dlfiles="$dlfiles $arg"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  dlprefiles="$dlprefiles $arg"
+	  prev=
+	else
+	  deplibs="$deplibs $arg"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+      fi
+    done # argument parsing loop
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$output_objdir" = "X$output"; then
+      output_objdir="$objdir"
+    else
+      output_objdir="$output_objdir/$objdir"
+    fi
+    # Create the object directory.
+    if test ! -d "$output_objdir"; then
+      $show "$mkdir $output_objdir"
+      $run $mkdir $output_objdir
+      status=$?
+      if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+	exit $status
+      fi
+    fi
+
+    # Determine the type of output
+    case $output in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      duplicate_compiler_generated_deps=yes
+      ;;
+    *)
+      duplicate_compiler_generated_deps=$duplicate_deps
+      ;;
+    esac
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if test "X$duplicate_deps" = "Xyes" ; then
+	case "$libs " in
+	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  esac
+	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+    case $linkmode in
+    lib)
+	passes="conv link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+    for pass in $passes; do
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link)
+	  libs="$deplibs %DEPLIBS%"
+	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+	  ;;
+	esac
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+	    continue
+	  fi
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if (${SED} -e '2q' $lib |
+                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		  library_names=
+		  old_library=
+		  case $lib in
+		  */* | *\\*) . $lib ;;
+		  *) . ./$lib ;;
+		  esac
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+		    test "X$ladir" = "X$lib" && ladir="."
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+	        ;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  *)
+	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) xrpath="$xrpath $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la) lib="$deplib" ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    if test "$deplibs_check_method" != pass_all; then
+	      $echo
+	      $echo "*** Warning: Trying to link with static lib archive $deplib."
+	      $echo "*** I have the capability to make that library automatically link in when"
+	      $echo "*** you link to this library.  But I can only do this if you have a"
+	      $echo "*** shared version of the library, which you do not appear to have"
+	      $echo "*** because the file extensions .$libext of this argument makes me believe"
+	      $echo "*** that it is just a static archive that I should not used here."
+	    else
+	      $echo
+	      $echo "*** Warning: Linking the shared library $output against the"
+	      $echo "*** static library $deplib is not portable!"
+	      deplibs="$deplib $deplibs"
+	    fi
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      newdlprefiles="$newdlprefiles $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      newdlfiles="$newdlfiles $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  $echo "$modename: cannot find the library \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
 
 	# Check to see that this really is a libtool archive.
-	if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
 	else
-	  $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
-	  exit 1
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  exit $EXIT_FAILURE
 	fi
 
+	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$ladir" = "X$lib" && ladir="."
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
 	# If the library was installed with an old release of libtool,
-	# it will not redefine variable installed.
+	# it will not redefine variables installed, or shouldnotlink
 	installed=yes
+	shouldnotlink=no
 
 	# Read the .la file
-	# If there is no directory component, then add one.
-	case "$arg" in
-	*/* | *\\*) . $arg ;;
-	*) . ./$arg ;;
+	case $lib in
+	*/* | *\\*) . $lib ;;
+	*) . ./$lib ;;
 	esac
 
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	      exit $EXIT_FAILURE
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    convenience="$convenience $ladir/$objdir/$old_library"
+	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+              if test "X$duplicate_deps" = "Xyes" ; then
+	        case "$tmp_libs " in
+	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	        esac
+              fi
+	      tmp_libs="$tmp_libs $deplib"
+	    done
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  continue
+	fi # $pass = conv
+
+
 	# Get the name of the library we link against.
 	linklib=
 	for l in $old_library $library_names; do
 	  linklib="$l"
 	done
-
 	if test -z "$linklib"; then
-	  $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
-	  exit 1
+	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
 	fi
 
-	# Find the relevant object directory and library name.
-	name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	  else
+	    newdlfiles="$newdlfiles $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
 
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+	# Find the relevant object directory and library name.
 	if test "X$installed" = Xyes; then
-	  dir="$libdir"
+	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$libdir"
+	    absdir="$libdir"
+	  fi
 	else
-	  dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-	  if test "X$dir" = "X$arg"; then
-	    dir="$objdir"
+	  dir="$ladir/$objdir"
+	  absdir="$abs_ladir/$objdir"
+	  # Remove this search path later
+	  notinst_path="$notinst_path $abs_ladir"
+	fi # $installed = yes
+	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+	  # are required to link).
+	  if test -n "$old_library"; then
+	    newdlprefiles="$newdlprefiles $dir/$old_library"
+	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+	  elif test -n "$dlname"; then
+	    newdlprefiles="$newdlprefiles $dir/$dlname"
 	  else
-	    dir="$dir/$objdir"
+	    newdlprefiles="$newdlprefiles $dir/$linklib"
 	  fi
-	fi
-
-	if test -n "$dependency_libs"; then
-	  # Extract -R and -L from dependency_libs
-	  temp_deplibs=
-	  for deplib in $dependency_libs; do
-	    case "$deplib" in
-	    -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-		 case " $rpath $xrpath " in
-		 *" $temp_xrpath "*) ;;
-		 *) xrpath="$xrpath $temp_xrpath";;
-		 esac;;
-	    -L*) case "$compile_command $temp_deplibs " in
-		 *" $deplib "*) ;;
-		 *) temp_deplibs="$temp_deplibs $deplib";;
-		 esac
-		 temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-		 case " $lib_search_path " in
-		 *" $temp_dir "*) ;;
-		 *) lib_search_path="$lib_search_path $temp_dir";;
-		 esac
-		 ;;
-	    *) temp_deplibs="$temp_deplibs $deplib";;
-	    esac
-	  done
-	  dependency_libs="$temp_deplibs"
-	fi
+	fi # $pass = dlpreopen
 
 	if test -z "$libdir"; then
-	  # It is a libtool convenience library, so add in its objects.
-	  convenience="$convenience $dir/$old_library"
-	  old_convenience="$old_convenience $dir/$old_library"
-	  deplibs="$deplibs$dependency_libs"
-	  compile_command="$compile_command $dir/$old_library$dependency_libs"
-	  finalize_command="$finalize_command $dir/$old_library$dependency_libs"
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
 	  continue
 	fi
 
-	# This library was specified with -dlopen.
-	if test "$prev" = dlfiles; then
-	  dlfiles="$dlfiles $arg"
-	  if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
-	    # If there is no dlname, no dlopen support or we're linking statically,
-	    # we need to preload.
-	    prev=dlprefiles
-	  else
-	    # We should not create a dependency on this library, but we
-	    # may need any libraries it requires.
-	    compile_command="$compile_command$dependency_libs"
-	    finalize_command="$finalize_command$dependency_libs"
-	    prev=
-	    continue
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  newlib_search_path="$newlib_search_path $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
 	  fi
-	fi
 
-	# The library was specified with -dlpreopen.
-	if test "$prev" = dlprefiles; then
-	  # Prefer using a static library (so that no silly _DYNAMIC symbols
-	  # are required to link).
-	  if test -n "$old_library"; then
-	    dlprefiles="$dlprefiles $dir/$old_library"
-	  else
-	    dlprefiles="$dlprefiles $dir/$linklib"
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var"; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath " in
+	      *" $dir "*) ;;
+	      *" $absdir "*) ;;
+	      *) temp_rpath="$temp_rpath $dir" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
 	  fi
-	  prev=
 	fi
 
+	link_static=no # Whether the deplib will be linked statically
 	if test -n "$library_names" &&
 	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
-	  link_against_libtool_libs="$link_against_libtool_libs $arg"
-	  if test -n "$shlibpath_var"; then
-	    # Make sure the rpath contains only unique directories.
-	    case "$temp_rpath " in
-	    *" $dir "*) ;;
-	    *) temp_rpath="$temp_rpath $dir" ;;
-	    esac
+	  if test "$installed" = no; then
+	    notinst_deplibs="$notinst_deplibs $lib"
+	    need_relink=yes
 	  fi
-
-	  # We need an absolute path.
-	  case "$dir" in
-	  [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-	  *)
-	    absdir=`cd "$dir" && pwd`
-	    if test -z "$absdir"; then
-	      $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-	      $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-	      absdir="$dir"
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on
+	  # some systems (darwin)
+	  if test "$shouldnotlink" = yes && test "$pass" = link ; then
+	    $echo
+	    if test "$linkmode" = prog; then
+	      $echo "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $echo "*** Warning: Linking the shared library $output against the loadable module"
 	    fi
-	    ;;
-	  esac
-	  
-	  # This is the magic to use -rpath.
-	  # Skip directories that are in the system default run-time
-	  # search path, unless they have been requested with -R.
-	  case " $sys_lib_dlsearch_path " in
-	  *" $absdir "*) ;;
-	  *)
-	    case "$compile_rpath " in
+	    $echo "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
 	    *" $absdir "*) ;;
-	    *) compile_rpath="$compile_rpath $absdir" 
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
 	    esac
-	    ;;
-	  esac
-
-	  case " $sys_lib_dlsearch_path " in
-	  *" $libdir "*) ;;
-	  *)
-	    case "$finalize_rpath " in
+	    case " $sys_lib_dlsearch_path " in
 	    *" $libdir "*) ;;
-	    *) finalize_rpath="$finalize_rpath $libdir"
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
 	    esac
-	    ;;
-	  esac
+	  fi
 
-	  lib_linked=yes
-	  case "$hardcode_action" in
-	  immediate | unsupported)
-	    if test "$hardcode_direct" = no; then
-	      compile_command="$compile_command $dir/$linklib"
-	      deplibs="$deplibs $dir/$linklib"
-	      case "$host" in
-	      *-*-cygwin* | *-*-mingw* | *-*-os2*)
-		dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
-		if test -n "$dllsearchpath"; then
-		  dllsearchpath="$dllsearchpath:$dllsearchdir"
-		else
-		  dllsearchpath="$dllsearchdir"
-		fi
-		;;
-	      esac
-	    elif test "$hardcode_minus_L" = no; then
-	      case "$host" in
-	      *-*-sunos*)
-		compile_shlibpath="$compile_shlibpath$dir:"
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    realname="$2"
+	    shift; shift
+	    libname=`eval \\$echo \"$libname_spec\"`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw*)
+		major=`expr $current - $age`
+		versuffix="-$major"
 		;;
 	      esac
-	      case "$compile_command " in
-	      *" -L$dir "*) ;;
-	      *) compile_command="$compile_command -L$dir";;
-	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -L$dir -l$name"
-	    elif test "$hardcode_shlibpath_var" = no; then
-	      case ":$compile_shlibpath:" in
-	      *":$dir:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$dir:";;
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      $show "extracting exported symbol list from \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$extract_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      $show "generating import library for \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$old_archive_from_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a module then we can not link against
+		    # it, someone is ignoring the new warnings I added
+		    if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then
+		      $echo "** Warning, lib $linklib is a module, not a shared library"
+		      if test -z "$old_library" ; then
+		        $echo
+		        $echo "** And there doesn't seem to be a static archive available"
+		        $echo "** The link will probably fail, sorry"
+		      else
+		        add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case "$libdir" in
+		    [\\/]*)
+		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      $echo "$modename: configuration error: unsupported hardcode properties"
+	      exit $EXIT_FAILURE
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
 	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -l$name"
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
 	    else
-	      lib_linked=no
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes && \
+		 test "$hardcode_minus_L" != yes && \
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		esac
+	      fi
 	    fi
-	    ;;
+	  fi
 
-	  relink)
+	  if test "$linkmode" = prog || test "$mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
 	    if test "$hardcode_direct" = yes; then
-	      compile_command="$compile_command $absdir/$linklib"
-	      deplibs="$deplibs $absdir/$linklib"
+	      add="$libdir/$linklib"
 	    elif test "$hardcode_minus_L" = yes; then
-	      case "$compile_command " in
-	      *" -L$absdir "*) ;;
-	      *) compile_command="$compile_command -L$absdir";;
-	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -L$absdir -l$name"
+	      add_dir="-L$libdir"
+	      add="-l$name"
 	    elif test "$hardcode_shlibpath_var" = yes; then
-	      case ":$compile_shlibpath:" in
-	      *":$absdir:"*) ;;
-	      *) compile_shlibpath="$compile_shlibpath$absdir:";;
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
 	      esac
-	      compile_command="$compile_command -l$name"
-	      deplibs="$deplibs -l$name"
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+	        add="$inst_prefix_dir$libdir/$linklib"
+	      else
+	        add="$libdir/$linklib"
+	      fi
 	    else
-	      lib_linked=no
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case "$libdir" in
+		  [\\/]*)
+		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
 	    fi
-	    ;;
 
-	  *)
-	    lib_linked=no
-	    ;;
-	  esac
-
-	  if test "$lib_linked" != yes; then
-	    $echo "$modename: configuration error: unsupported hardcode properties"
-	    exit 1
-	  fi
-
-	  # Finalize command for both is simple: just hardcode it.
-	  if test "$hardcode_direct" = yes; then
-	    finalize_command="$finalize_command $libdir/$linklib"
-	  elif test "$hardcode_minus_L" = yes; then
-	    case "$finalize_command " in
-	    *" -L$libdir "*) ;;
-	    *) finalize_command="$finalize_command -L$libdir";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  elif test "$hardcode_shlibpath_var" = yes; then
-	    case ":$finalize_shlibpath:" in
-	    *":$libdir:"*) ;;
-	    *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  else
-	    # We cannot seem to hardcode it, guess we'll fake it.
-	    case "$finalize_command " in
-	    *" -L$dir "*) ;;
-	    *) finalize_command="$finalize_command -L$libdir";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
-	  fi
-	else
-	  # Transform directly to old archives if we don't build new libraries.
-	  if test -n "$pic_flag" && test -z "$old_library"; then
-	    $echo "$modename: cannot find static library for \`$arg'" 1>&2
-	    exit 1
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
 	  fi
-
+	elif test "$linkmode" = prog; then
 	  # Here we assume that one of hardcode_direct or hardcode_minus_L
 	  # is not unsupported.  This is valid on all known static and
 	  # shared platforms.
 	  if test "$hardcode_direct" != unsupported; then
 	    test -n "$old_library" && linklib="$old_library"
-	    compile_command="$compile_command $dir/$linklib"
-	    finalize_command="$finalize_command $dir/$linklib"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
 	  else
-	    case "$compile_command " in
-	    *" -L$dir "*) ;;
-	    *) compile_command="$compile_command -L$dir";;
-	    esac
-	    compile_command="$compile_command -l$name"
-	    case "$finalize_command " in
-	    *" -L$dir "*) ;;
-	    *) finalize_command="$finalize_command -L$dir";;
-	    esac
-	    finalize_command="$finalize_command -l$name"
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    $echo
+	    $echo "*** Warning: This system can not link to static lib archive $lib."
+	    $echo "*** I have the capability to make that library automatically link in when"
+	    $echo "*** you link to this library.  But I can only do this if you have a"
+	    $echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      $echo "*** But as you try to build a module library, libtool will still create "
+	      $echo "*** a static module, that should work as long as the dlopening application"
+	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		$echo
+		$echo "*** However, this would only work if libtool was able to extract symbol"
+		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		$echo "*** not find such a program.  So, this module is probably useless."
+		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    convenience="$convenience $dir/$old_library"
+	    old_convenience="$old_convenience $dir/$old_library"
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) xrpath="$xrpath $temp_xrpath";;
+		   esac;;
+	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
 	  fi
-	fi
-
-	# Add in any libraries that this one depends upon.
-	compile_command="$compile_command$dependency_libs"
-	finalize_command="$finalize_command$dependency_libs"
-	continue
-	;;
-
-      # Some other compiler argument.
-      *)
-	# Unknown arguments in both finalize_command and compile_command need
-	# to be aesthetically quoted because they are evaled later.
-	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-	case "$arg" in
-	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
-	  arg="\"$arg\""
-	  ;;
-	esac
-	;;
-      esac
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-	compile_command="$compile_command $arg"
-	finalize_command="$finalize_command $arg"
-      fi
-    done
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-    fi
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      compile_command="$compile_command $arg"
-      finalize_command="$finalize_command $arg"
-    fi
 
-    oldlibs=
-    # calculate the name of the file, without its directory
-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-    libobjs_save="$libobjs"
+	  newlib_search_path="$newlib_search_path $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done
 
-    case "$output" in
-    "")
-      $echo "$modename: you must specify an output file" 1>&2
-      $echo "$help" 1>&2
-      exit 1
-      ;;
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+		test "X$dir" = "X$deplib" && dir="."
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if grep "^installed=no" $deplib > /dev/null; then
+		  path="$absdir/$objdir"
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  if test -z "$libdir"; then
+		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		    exit $EXIT_FAILURE
+		  fi
+		  if test "$absdir" != "$libdir"; then
+		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+		  fi
+		  path="$absdir"
+		fi
+		depdepl=
+		case $host in
+		*-*-darwin*)
+		  # we do not want to link against static libs,
+		  # but need to link against shared
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$path/$depdepl" ; then
+		      depdepl="$path/$depdepl"
+		    fi
+		    # do not add paths which are already there
+		    case " $newlib_search_path " in
+		    *" $path "*) ;;
+		    *) newlib_search_path="$newlib_search_path $path";;
+		    esac
+		  fi
+		  path=""
+		  ;;
+		*)
+		  path="-L$path"
+		  ;;
+		esac
+		;;
+	      -l*)
+		case $host in
+		*-*-darwin*)
+		  # Again, we only want to link against shared libraries
+		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+		  for tmp in $newlib_search_path ; do
+		    if test -f "$tmp/lib$tmp_libs.dylib" ; then
+		      eval depdepl="$tmp/lib$tmp_libs.dylib"
+		      break
+		    fi
+		  done
+		  path=""
+		  ;;
+		*) continue ;;
+		esac
+		;;
+	      *) continue ;;
+	      esac
+	      case " $deplibs " in
+	      *" $depdepl "*) ;;
+	      *) deplibs="$depdepl $deplibs" ;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$deplibs $path" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) lib_search_path="$lib_search_path $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
 
-    *.a | *.lib)
-      if test -n "$link_against_libtool_libs"; then
-	$echo "$modename: error: cannot link libtool libraries into archives" 1>&2
-	exit 1
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      esac
+	      ;;
+	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
       fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  tmp_libs="$tmp_libs $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+      dlprefiles="$newdlprefiles"
+    fi
 
+    case $linkmode in
+    oldlib)
       if test -n "$deplibs"; then
 	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
       fi
@@ -1552,7 +2805,7 @@ compiler."
       fi
 
       if test -n "$vinfo"; then
-	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
+	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
       fi
 
       if test -n "$release"; then
@@ -1566,24 +2819,27 @@ compiler."
       # Now set the variables for building old libraries.
       build_libtool_libs=no
       oldlibs="$output"
+      objs="$objs$old_deplibs"
       ;;
 
-    *.la)
+    lib)
       # Make sure we only generate libraries of the form `libNAME.la'.
-      case "$outputname" in
+      case $outputname in
       lib*)
 	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+	eval shared_ext=\"$shrext_cmds\"
 	eval libname=\"$libname_spec\"
 	;;
       *)
 	if test "$module" = no; then
 	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
 	  $echo "$help" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 	if test "$need_lib_prefix" != no; then
 	  # Add the "lib" prefix for modules if required
 	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	  eval shared_ext=\"$shrext_cmds\"
 	  eval libname=\"$libname_spec\"
 	else
 	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
@@ -1591,30 +2847,24 @@ compiler."
 	;;
       esac
 
-      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$output_objdir" = "X$output"; then
-	output_objdir="$objdir"
-      else
-	output_objdir="$output_objdir/$objdir"
-      fi
-
       if test -n "$objs"; then
-	$echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
-	exit 1
-      fi
-
-      # How the heck are we supposed to write a wrapper for a shared library?
-      if test -n "$link_against_libtool_libs"; then
-	 $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
-	 exit 1
+	if test "$deplibs_check_method" != pass_all; then
+	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+	  exit $EXIT_FAILURE
+	else
+	  $echo
+	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
+	  $echo "*** objects $objs is not portable!"
+	  libobjs="$libobjs $objs"
+	fi
       fi
 
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-	$echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
+      if test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
       fi
 
       set dummy $rpath
-      if test $# -gt 2; then
+      if test "$#" -gt 2; then
 	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
       fi
       install_libdir="$2"
@@ -1623,15 +2873,16 @@ compiler."
       if test -z "$rpath"; then
 	if test "$build_libtool_libs" = yes; then
 	  # Building a libtool convenience library.
-	  libext=al
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
 	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
 	  build_libtool_libs=convenience
 	  build_old_libs=yes
 	fi
-	dependency_libs="$deplibs"
 
 	if test -n "$vinfo"; then
-	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
+	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
 	fi
 
 	if test -n "$release"; then
@@ -1640,73 +2891,138 @@ compiler."
       else
 
 	# Parse the version information argument.
-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=':'
+	save_ifs="$IFS"; IFS=':'
 	set dummy $vinfo 0 0 0
 	IFS="$save_ifs"
 
 	if test -n "$8"; then
 	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
 	  $echo "$help" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 
-	current="$2"
-	revision="$3"
-	age="$4"
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$2"
+	  number_minor="$3"
+	  number_revision="$4"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows)
+	    current=`expr $number_major + $number_minor`
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    current=`expr $number_major + $number_minor - 1`
+	    age="$number_minor"
+	    revision="$number_minor"
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$2"
+	  revision="$3"
+	  age="$4"
+	  ;;
+	esac
 
 	# Check that each of the things are valid numbers.
-	case "$current" in
-	0 | [1-9] | [1-9][0-9]*) ;;
+	case $current in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
 	*)
 	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
 
-	case "$revision" in
-	0 | [1-9] | [1-9][0-9]*) ;;
+	case $revision in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
 	*)
 	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
 
-	case "$age" in
-	0 | [1-9] | [1-9][0-9]*) ;;
+	case $age in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
 	*)
 	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
 
-	if test $age -gt $current; then
+	if test "$age" -gt "$current"; then
 	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
 	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 
 	# Calculate the version variables.
 	major=
 	versuffix=
 	verstring=
-	case "$version_type" in
+	case $version_type in
 	none) ;;
 
-	irix)
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  minor_current=`expr $current + 1`
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current";
+	  ;;
+
+	irix | nonstopux)
 	  major=`expr $current - $age + 1`
-	  versuffix="$major.$revision"
-	  verstring="sgi$major.$revision"
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
 
 	  # Add in all the interfaces that we are compatible with.
 	  loop=$revision
-	  while test $loop != 0; do
+	  while test "$loop" -ne 0; do
 	    iface=`expr $revision - $loop`
 	    loop=`expr $loop - 1`
-	    verstring="sgi$major.$iface:$verstring"
+	    verstring="$verstring_prefix$major.$iface:$verstring"
 	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
 	  ;;
 
 	linux)
@@ -1715,13 +3031,13 @@ compiler."
 	  ;;
 
 	osf)
-	  major=`expr $current - $age`
+	  major=.`expr $current - $age`
 	  versuffix=".$current.$age.$revision"
 	  verstring="$current.$age.$revision"
 
 	  # Add in all the interfaces that we are compatible with.
 	  loop=$age
-	  while test $loop != 0; do
+	  while test "$loop" -ne 0; do
 	    iface=`expr $current - $loop`
 	    loop=`expr $loop - 1`
 	    verstring="$verstring:${iface}.0"
@@ -1736,34 +3052,33 @@ compiler."
 	  versuffix=".$current.$revision"
 	  ;;
 
-	freebsd-aout)
-	  major=".$current"
-	  versuffix=".$current.$revision";
-	  ;;
-
-	freebsd-elf)
-	  major=".$current"
-	  versuffix=".$current";
-	  ;;
-
 	windows)
-	  # Like Linux, but with '-' rather than '.', since we only
-	  # want one extension on Windows 95.
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
 	  major=`expr $current - $age`
-	  versuffix="-$major-$age-$revision"
+	  versuffix="-$major"
 	  ;;
 
 	*)
 	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
-	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-	  exit 1
+	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
 
 	# Clear the version info if we defaulted, and they specified a release.
 	if test -z "$vinfo" && test -n "$release"; then
 	  major=
-	  verstring="0.0"
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
 	  if test "$need_version" = no; then
 	    versuffix=
 	  else
@@ -1777,7 +3092,7 @@ compiler."
 	  versuffix=
 	  verstring=""
 	fi
-	
+
 	# Check to see if the archive will have undefined symbols.
 	if test "$allow_undefined" = yes; then
 	  if test "$allow_undefined_flag" = unsupported; then
@@ -1789,29 +3104,32 @@ compiler."
 	  # Don't allow undefined symbols.
 	  allow_undefined_flag="$no_undefined_flag"
 	fi
-
-	dependency_libs="$deplibs"
-	case "$host" in
-	*-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
-	  # these systems don't actually have a c library (as such)!
-	  ;;
-	*)
-	  # Add libc to deplibs on all other systems.
-	  deplibs="$deplibs -lc"
-	  ;;
-	esac
       fi
 
-      # Create the output directory, or remove our outputs if we need to.
-      if test -d $output_objdir; then
-	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
-	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
-      else
-	$show "$mkdir $output_objdir"
-	$run $mkdir $output_objdir
-	status=$?
-	if test $status -ne 0 && test ! -d $output_objdir; then
-	  exit $status
+      if test "$mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$echo "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+	         then
+		   continue
+		 fi
+	       fi
+	       removelist="$removelist $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	if test -n "$removelist"; then
+	  $show "${rm}r $removelist"
+	  $run ${rm}r $removelist
 	fi
       fi
 
@@ -1823,7 +3141,74 @@ compiler."
 	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
       fi
 
+      # Eliminate all temporary directories.
+      for path in $notinst_path; do
+	lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+	deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+	dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+      done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  temp_xrpath="$temp_xrpath -R$libdir"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) dlfiles="$dlfiles $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) dlprefiles="$dlprefiles $lib" ;;
+	esac
+      done
+
       if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    deplibs="$deplibs -framework System"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+ 	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      deplibs="$deplibs -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
 	# Transform deplibs into only deplibs that can be linked in shared.
 	name_save=$name
 	libname_save=$libname
@@ -1838,13 +3223,13 @@ compiler."
 	major=""
 	newdeplibs=
 	droppeddeps=no
-	case "$deplibs_check_method" in
+	case $deplibs_check_method in
 	pass_all)
 	  # Don't check for shared/static.  Everything works.
 	  # This might be a little naive.  We might want to check
 	  # whether the library exists or not.  But this is on
 	  # osf3 & osf4 and I'm not really sure... Just
-	  # implementing what was already the behaviour.
+	  # implementing what was already the behavior.
 	  newdeplibs=$deplibs
 	  ;;
 	test_compile)
@@ -1857,64 +3242,88 @@ compiler."
 	  int main() { return 0; }
 EOF
 	  $rm conftest
-	  $CC -o conftest conftest.c $deplibs
-	  if test $? -eq 0 ; then
+	  $LTCC -o conftest conftest.c $deplibs
+	  if test "$?" -eq 0 ; then
 	    ldd_output=`ldd conftest`
 	    for i in $deplibs; do
 	      name="`expr $i : '-l\(.*\)'`"
 	      # If $name is empty we are operating on a -L argument.
-	      if test "$name" != "" ; then
-		libname=`eval \\$echo \"$libname_spec\"`
-		deplib_matches=`eval \\$echo \"$library_names_spec\"`
-		set dummy $deplib_matches
-		deplib_match=$2
-		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		  newdeplibs="$newdeplibs $i"
-		else
-		  droppeddeps=yes
-		  echo
-		  echo "*** Warning: This library needs some functionality provided by $i."
-		  echo "*** I have the capability to make that library automatically link in when"
-		  echo "*** you link to this library.  But I can only do this if you have a"
-		  echo "*** shared version of the library, which you do not appear to have."
+              if test "$name" != "" && test "$name" -ne "0"; then
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    newdeplibs="$newdeplibs $i"
+		    i=""
+		    ;;
+		  esac
+	        fi
+		if test -n "$i" ; then
+		  libname=`eval \\$echo \"$libname_spec\"`
+		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		  set dummy $deplib_matches
+		  deplib_match=$2
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    newdeplibs="$newdeplibs $i"
+		  else
+		    droppeddeps=yes
+		    $echo
+		    $echo "*** Warning: dynamic linker does not accept needed library $i."
+		    $echo "*** I have the capability to make that library automatically link in when"
+		    $echo "*** you link to this library.  But I can only do this if you have a"
+		    $echo "*** shared version of the library, which I believe you do not have"
+		    $echo "*** because a test_compile did reveal that the linker did not use it for"
+		    $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
 		fi
 	      else
 		newdeplibs="$newdeplibs $i"
 	      fi
 	    done
 	  else
-	    # Error occured in the first compile.  Let's try to salvage the situation:
-	    # Compile a seperate program for each library.
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
 	    for i in $deplibs; do
 	      name="`expr $i : '-l\(.*\)'`"
-	     # If $name is empty we are operating on a -L argument.
-	      if test "$name" != "" ; then
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" != "0"; then
 		$rm conftest
-		$CC -o conftest conftest.c $i
+		$LTCC -o conftest conftest.c $i
 		# Did it work?
-		if test $? -eq 0 ; then
+		if test "$?" -eq 0 ; then
 		  ldd_output=`ldd conftest`
-		  libname=`eval \\$echo \"$libname_spec\"`
-		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
-		  set dummy $deplib_matches
-		  deplib_match=$2
-		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-		    newdeplibs="$newdeplibs $i"
-		  else
-		    droppeddeps=yes
-		    echo
-		    echo "*** Warning: This library needs some functionality provided by $i."
-		    echo "*** I have the capability to make that library automatically link in when"
-		    echo "*** you link to this library.  But I can only do this if you have a"
-		    echo "*** shared version of the library, which you do not appear to have."
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      newdeplibs="$newdeplibs $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval \\$echo \"$libname_spec\"`
+		    deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		    set dummy $deplib_matches
+		    deplib_match=$2
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      newdeplibs="$newdeplibs $i"
+		    else
+		      droppeddeps=yes
+		      $echo
+		      $echo "*** Warning: dynamic linker does not accept needed library $i."
+		      $echo "*** I have the capability to make that library automatically link in when"
+		      $echo "*** you link to this library.  But I can only do this if you have a"
+		      $echo "*** shared version of the library, which you do not appear to have"
+		      $echo "*** because a test_compile did reveal that the linker did not use this one"
+		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
 		  fi
 		else
 		  droppeddeps=yes
-		  echo
-		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
-		  echo "***  make it link in!  You will probably need to install it or some"
-		  echo "*** library that it depends on before this library will be fully"
-		  echo "*** functional.  Installing it before continuing would be even better."
+		  $echo
+		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
+		  $echo "***  make it link in!  You will probably need to install it or some"
+		  $echo "*** library that it depends on before this library will be fully"
+		  $echo "*** functional.  Installing it before continuing would be even better."
 		fi
 	      else
 		newdeplibs="$newdeplibs $i"
@@ -1924,19 +3333,28 @@ EOF
 	  ;;
 	file_magic*)
 	  set dummy $deplibs_check_method
-	  file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
+	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
 	  for a_deplib in $deplibs; do
 	    name="`expr $a_deplib : '-l\(.*\)'`"
 	    # If $name is empty we are operating on a -L argument.
-	    if test "$name" != "" ; then
-	      libname=`eval \\$echo \"$libname_spec\"`
-	      for i in $lib_search_path; do
-		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
-		    for potent_lib in $potential_libs; do
+            if test "$name" != "" && test  "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
 		      # Follow soft links.
 		      if ls -lLd "$potent_lib" 2>/dev/null \
 			 | grep " -> " >/dev/null; then
-			continue 
+			continue
 		      fi
 		      # The statement above tries to avoid entering an
 		      # endless loop below, in case of cyclic links.
@@ -1945,28 +3363,88 @@ EOF
 		      # but so what?
 		      potlib="$potent_lib"
 		      while test -h "$potlib" 2>/dev/null; do
-			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
-			case "$potliblink" in
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
 			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
 			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
 			esac
 		      done
 		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-			 | sed 10q \
-			 | egrep "$file_magic_regex" > /dev/null; then
+			 | ${SED} 10q \
+			 | $EGREP "$file_magic_regex" > /dev/null; then
 			newdeplibs="$newdeplibs $a_deplib"
 			a_deplib=""
 			break 2
 		      fi
-		    done
-	      done
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+	    if test -n "$name" && test "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval $echo \"$potent_lib\" 2>/dev/null \
+		        | ${SED} 10q \
+		        | $EGREP "$match_pattern_regex" > /dev/null; then
+		      newdeplibs="$newdeplibs $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
 	      if test -n "$a_deplib" ; then
 		droppeddeps=yes
-		echo
-		echo "*** Warning: This library needs some functionality provided by $a_deplib."
-		echo "*** I have the capability to make that library automatically link in when"
-		echo "*** you link to this library.  But I can only do this if you have a"
-		echo "*** shared version of the library, which you do not appear to have."
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a regex pattern. Last file checked: $potlib"
+		fi
 	      fi
 	    else
 	      # Add a -L argument.
@@ -1976,16 +3454,23 @@ EOF
 	  ;;
 	none | unknown | *)
 	  newdeplibs=""
-	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
-	     grep . >/dev/null; then
-	    echo
+	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+	    -e 's/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+	    done
+	  fi
+	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
+	    | grep . >/dev/null; then
+	    $echo
 	    if test "X$deplibs_check_method" = "Xnone"; then
-	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
 	    else
-	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	      $echo "*** Warning: inter-library dependencies are not known to be supported."
 	    fi
-	    echo "*** All declared inter-library dependencies are being dropped."
+	    $echo "*** All declared inter-library dependencies are being dropped."
 	    droppeddeps=yes
 	  fi
 	  ;;
@@ -1996,19 +3481,26 @@ EOF
 	libname=$libname_save
 	name=$name_save
 
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library is the System framework
+	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	  ;;
+	esac
+
 	if test "$droppeddeps" = yes; then
 	  if test "$module" = yes; then
-	    echo
-	    echo "*** Warning: libtool could not satisfy all declared inter-library"
-	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
-	    echo "*** a static module, that should work as long as the dlopening"
-	    echo "*** application is linked with the -dlopen flag."
+	    $echo
+	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
+	    $echo "*** a static module, that should work as long as the dlopening"
+	    $echo "*** application is linked with the -dlopen flag."
 	    if test -z "$global_symbol_pipe"; then
-	      echo
-	      echo "*** However, this would only work if libtool was able to extract symbol"
-	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
-	      echo "*** not find such a program.  So, this module is probably useless."
-	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      $echo
+	      $echo "*** However, this would only work if libtool was able to extract symbol"
+	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      $echo "*** not find such a program.  So, this module is probably useless."
+	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
 	    fi
 	    if test "$build_old_libs" = no; then
 	      oldlibs="$output_objdir/$libname.$libext"
@@ -2018,9 +3510,24 @@ EOF
 	      build_libtool_libs=no
 	    fi
 	  else
-	    echo "*** The inter-library dependencies that have been dropped here will be"
-	    echo "*** automatically added whenever a program is linked with this library"
-	    echo "*** or is declared to -dlopen it."
+	    $echo "*** The inter-library dependencies that have been dropped here will be"
+	    $echo "*** automatically added whenever a program is linked with this library"
+	    $echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      $echo
+	      $echo "*** Since this library must not contain undefined symbols,"
+	      $echo "*** because either the platform does not support them or"
+	      $echo "*** it was explicitly requested with -no-undefined,"
+	      $echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
 	  fi
 	fi
 	# Done checking deplibs!
@@ -2031,10 +3538,70 @@ EOF
       library_names=
       old_library=
       dlname=
-      
+
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		dep_rpath="$dep_rpath $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      rpath="$rpath$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
 	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
 	eval library_names=\"$library_names_spec\"
 	set dummy $library_names
 	realname="$2"
@@ -2045,6 +3612,9 @@ EOF
 	else
 	  soname="$realname"
 	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
 
 	lib="$output_objdir/$realname"
 	for link
@@ -2052,23 +3622,6 @@ EOF
 	  linknames="$linknames $link"
 	done
 
-	# Ensure that we have .o objects for linkers which dislike .lo
-	# (e.g. aix) in case we are running --disable-static
-	for obj in $libobjs; do
-	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-	  if test "X$xdir" = "X$obj"; then
-	    xdir="."
-	  else
-	    xdir="$xdir"
-	  fi
-	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
-	  if test ! -f $xdir/$oldobj; then
-	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
-	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
-	  fi
-	done
-
 	# Use standard objects if they are pic
 	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
 
@@ -2078,17 +3631,26 @@ EOF
 	    $show "generating symbol list for \`$libname.la'"
 	    export_symbols="$output_objdir/$libname.exp"
 	    $run $rm $export_symbols
-	    eval cmds=\"$export_symbols_cmds\"
-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
 	    for cmd in $cmds; do
 	      IFS="$save_ifs"
-	      $show "$cmd"
-	      $run eval "$cmd" || exit $?
+	      eval cmd=\"$cmd\"
+	      if len=`expr "X$cmd" : ".*"` &&
+	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	        $show "$cmd"
+	        $run eval "$cmd" || exit $?
+	        skipped_export=false
+	      else
+	        # The command line is too long to execute in one step.
+	        $show "using reloadable object file for export list..."
+	        skipped_export=:
+	      fi
 	    done
 	    IFS="$save_ifs"
 	    if test -n "$export_symbols_regex"; then
-	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
 	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
 	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
 	    fi
@@ -2099,24 +3661,36 @@ EOF
 	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
 	fi
 
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+		case " $convenience " in
+		*" $test_deplib "*) ;;
+		*)
+			tmp_deplibs="$tmp_deplibs $test_deplib"
+			;;
+		esac
+	done
+	deplibs="$tmp_deplibs"
+
 	if test -n "$convenience"; then
 	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
 	  else
 	    gentop="$output_objdir/${outputname}x"
 	    $show "${rm}r $gentop"
 	    $run ${rm}r "$gentop"
-	    $show "mkdir $gentop"
-	    $run mkdir "$gentop"
+	    $show "$mkdir $gentop"
+	    $run $mkdir "$gentop"
 	    status=$?
-	    if test $status -ne 0 && test ! -d "$gentop"; then
+	    if test "$status" -ne 0 && test ! -d "$gentop"; then
 	      exit $status
 	    fi
 	    generated="$generated $gentop"
 
 	    for xlib in $convenience; do
 	      # Extract the objects.
-	      case "$xlib" in
+	      case $xlib in
 	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
 	      *) xabs=`pwd`"/$xlib" ;;
 	      esac
@@ -2125,39 +3699,209 @@ EOF
 
 	      $show "${rm}r $xdir"
 	      $run ${rm}r "$xdir"
-	      $show "mkdir $xdir"
-	      $run mkdir "$xdir"
+	      $show "$mkdir $xdir"
+	      $run $mkdir "$xdir"
 	      status=$?
-	      if test $status -ne 0 && test ! -d "$xdir"; then
+	      if test "$status" -ne 0 && test ! -d "$xdir"; then
 		exit $status
 	      fi
+	      # We will extract separately just the conflicting names and we will no
+	      # longer touch any unique names. It is faster to leave these extract
+	      # automatically by $AR in one run.
 	      $show "(cd $xdir && $AR x $xabs)"
 	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	      if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+		:
+	      else
+		$echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+		$echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+		$AR t "$xabs" | sort | uniq -cd | while read -r count name
+		do
+		  i=1
+		  while test "$i" -le "$count"
+		  do
+		   # Put our $i before any first dot (extension)
+		   # Never overwrite any file
+		   name_to="$name"
+		   while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+		   do
+		     name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+		   done
+		   $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+		   $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+		   i=`expr $i + 1`
+		  done
+		done
+	      fi
 
-	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+	      libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
 	    done
 	  fi
 	fi
 
 	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
 	  eval flag=\"$thread_safe_flag_spec\"
-	  linkopts="$linkopts $flag"
+	  linker_flags="$linker_flags $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
 	fi
 
 	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
 	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
-	  eval cmds=\"$archive_expsym_cmds\"
+	  eval test_cmds=\"$archive_expsym_cmds\"
+	  cmds=$archive_expsym_cmds
+	else
+	  eval test_cmds=\"$archive_cmds\"
+	  cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` &&
+	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
 	else
-	  eval cmds=\"$archive_cmds\"
+	  # The command line is too long to link in one step, link piecewise.
+	  $echo "creating reloadable object files..."
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  delfiles=
+	  last_robj=
+	  k=1
+	  output=$output_objdir/$save_output-${k}.$objext
+	  # Loop over the list of objects to be linked.
+	  for obj in $save_libobjs
+	  do
+	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+	    if test "X$objlist" = X ||
+	       { len=`expr "X$test_cmds" : ".*"` &&
+		 test "$len" -le "$max_cmd_len"; }; then
+	      objlist="$objlist $obj"
+	    else
+	      # The command $test_cmds is almost too long, add a
+	      # command to the queue.
+	      if test "$k" -eq 1 ; then
+		# The first file doesn't have a previous command to add.
+		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+	      else
+		# All subsequent reloadable object files will link in
+		# the last one created.
+		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+	      fi
+	      last_robj=$output_objdir/$save_output-${k}.$objext
+	      k=`expr $k + 1`
+	      output=$output_objdir/$save_output-${k}.$objext
+	      objlist=$obj
+	      len=1
+	    fi
+	  done
+	  # Handle the remaining objects by creating one last
+	  # reloadable object file.  All subsequent reloadable object
+	  # files will link in the last one created.
+	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+	  if ${skipped_export-false}; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    libobjs=$output
+	    # Append the command to create the export file.
+	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+          fi
+
+	  # Set up a command to remove the reloadale object files
+	  # after they are used.
+	  i=0
+	  while test "$i" -lt "$k"
+	  do
+	    i=`expr $i + 1`
+	    delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+	  done
+
+	  $echo "creating a temporary reloadable object file: $output"
+
+	  # Loop through the commands generated above and execute them.
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $concat_cmds; do
+	    IFS="$save_ifs"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    cmds=$archive_expsym_cmds
+	  else
+	    cmds=$archive_cmds
+	    fi
+	  fi
+
+	  # Append the command to remove the reloadable object files
+	  # to the just-reset $cmds.
+	  eval cmds=\"\$cmds~\$rm $delfiles\"
 	fi
-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	save_ifs="$IFS"; IFS='~'
 	for cmd in $cmds; do
 	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
 	  $show "$cmd"
 	  $run eval "$cmd" || exit $?
 	done
 	IFS="$save_ifs"
 
+	# Restore the uninstalled library and exit
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+	  exit $EXIT_SUCCESS
+	fi
+
 	# Create links to the real library.
 	for linkname in $linknames; do
 	  if test "$realname" != "$linkname"; then
@@ -2174,12 +3918,7 @@ EOF
       fi
       ;;
 
-    *.lo | *.o | *.obj)
-      if test -n "$link_against_libtool_libs"; then
-	$echo "$modename: error: cannot link libtool libraries into objects" 1>&2
-	exit 1
-      fi
-
+    obj)
       if test -n "$deplibs"; then
 	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
       fi
@@ -2204,11 +3943,11 @@ EOF
 	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
       fi
 
-      case "$output" in
+      case $output in
       *.lo)
-	if test -n "$objs"; then
+	if test -n "$objs$old_deplibs"; then
 	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 	libobj="$output"
 	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
@@ -2230,7 +3969,7 @@ EOF
       gentop=
       # reload_cmds runs $LD directly, so let us get rid of
       # -Wl from whole_archive_flag_spec
-      wl= 
+      wl=
 
       if test -n "$convenience"; then
 	if test -n "$whole_archive_flag_spec"; then
@@ -2239,17 +3978,17 @@ EOF
 	  gentop="$output_objdir/${obj}x"
 	  $show "${rm}r $gentop"
 	  $run ${rm}r "$gentop"
-	  $show "mkdir $gentop"
-	  $run mkdir "$gentop"
+	  $show "$mkdir $gentop"
+	  $run $mkdir "$gentop"
 	  status=$?
-	  if test $status -ne 0 && test ! -d "$gentop"; then
+	  if test "$status" -ne 0 && test ! -d "$gentop"; then
 	    exit $status
 	  fi
 	  generated="$generated $gentop"
 
 	  for xlib in $convenience; do
 	    # Extract the objects.
-	    case "$xlib" in
+	    case $xlib in
 	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
 	    *) xabs=`pwd`"/$xlib" ;;
 	    esac
@@ -2258,28 +3997,55 @@ EOF
 
 	    $show "${rm}r $xdir"
 	    $run ${rm}r "$xdir"
-	    $show "mkdir $xdir"
-	    $run mkdir "$xdir"
+	    $show "$mkdir $xdir"
+	    $run $mkdir "$xdir"
 	    status=$?
-	    if test $status -ne 0 && test ! -d "$xdir"; then
+	    if test "$status" -ne 0 && test ! -d "$xdir"; then
 	      exit $status
 	    fi
-	    $show "(cd $xdir && $AR x $xabs)"
-	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	    # We will extract separately just the conflicting names and we will no
+	    # longer touch any unique names. It is faster to leave these extract
+	    # automatically by $AR in one run.
+	    $show "(cd $xdir && $AR x $xabs)"
+	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	    if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+	      :
+	    else
+	      $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+	      $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+	      $AR t "$xabs" | sort | uniq -cd | while read -r count name
+	      do
+		i=1
+		while test "$i" -le "$count"
+		do
+		 # Put our $i before any first dot (extension)
+		 # Never overwrite any file
+		 name_to="$name"
+		 while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+		 do
+		   name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+		 done
+		 $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+		 $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+		 i=`expr $i + 1`
+		done
+	      done
+	    fi
 
-	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+	    reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
 	  done
 	fi
       fi
 
       # Create the old-style object.
-      reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
+      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
 
       output="$obj"
-      eval cmds=\"$reload_cmds\"
-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+      cmds=$reload_cmds
+      save_ifs="$IFS"; IFS='~'
       for cmd in $cmds; do
 	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
 	$show "$cmd"
 	$run eval "$cmd" || exit $?
       done
@@ -2292,7 +4058,7 @@ EOF
 	  $run ${rm}r $gentop
 	fi
 
-	exit 0
+	exit $EXIT_SUCCESS
       fi
 
       if test "$build_libtool_libs" != yes; then
@@ -2303,37 +4069,24 @@ EOF
 
 	# Create an invalid libtool object if no PIC, so that we don't
 	# accidentally link it into a program.
-	$show "echo timestamp > $libobj"
-	$run eval "echo timestamp > $libobj" || exit $?
-	exit 0
+	# $show "echo timestamp > $libobj"
+	# $run eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
       fi
 
-      if test -n "$pic_flag"; then
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
 	# Only do commands if we really have different PIC objects.
 	reload_objs="$libobjs $reload_conv_objs"
 	output="$libobj"
-	eval cmds=\"$reload_cmds\"
-	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	cmds=$reload_cmds
+	save_ifs="$IFS"; IFS='~'
 	for cmd in $cmds; do
 	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
 	  $show "$cmd"
 	  $run eval "$cmd" || exit $?
 	done
 	IFS="$save_ifs"
-      else
-	# Just create a symlink.
-	$show $rm $libobj
-	$run $rm $libobj
-	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
-	if test "X$xdir" = "X$libobj"; then
-	  xdir="."
-	else
-	  xdir="$xdir"
-	fi
-	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
-	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
-	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
-	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
       fi
 
       if test -n "$gentop"; then
@@ -2341,11 +4094,13 @@ EOF
 	$run ${rm}r $gentop
       fi
 
-      exit 0
+      exit $EXIT_SUCCESS
       ;;
 
-    # Anything else should be a program.
-    *)
+    prog)
+      case $host in
+	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+      esac
       if test -n "$vinfo"; then
 	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
       fi
@@ -2355,20 +4110,37 @@ EOF
       fi
 
       if test "$preload" = yes; then
-	if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
+	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
 	   test "$dlopen_self_static" = unknown; then
 	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-	fi 
+	fi
       fi
-    
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	;;
+      esac
+
+      case $host in
+      *darwin*)
+        # Don't allow lazy linking, it breaks C++ global constructors
+        if test "$tagname" = CXX ; then
+        compile_command="$compile_command ${wl}-bind_at_load"
+        finalize_command="$finalize_command ${wl}-bind_at_load"
+        fi
+        ;;
+      esac
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
       if test -n "$rpath$xrpath"; then
 	# If the user specified any rpath flags, then add them.
 	for libdir in $rpath $xrpath; do
 	  # This is the magic to use -rpath.
-	  case "$compile_rpath " in
-	  *" $libdir "*) ;;
-	  *) compile_rpath="$compile_rpath $libdir" ;;
-	  esac
 	  case "$finalize_rpath " in
 	  *" $libdir "*) ;;
 	  *) finalize_rpath="$finalize_rpath $libdir" ;;
@@ -2386,7 +4158,7 @@ EOF
 	      hardcode_libdirs="$libdir"
 	    else
 	      # Just accumulate the unique libdirs.
-	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
@@ -2404,6 +4176,14 @@ EOF
 	  *) perm_rpath="$perm_rpath $libdir" ;;
 	  esac
 	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  esac
+	  ;;
+	esac
       done
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
@@ -2422,7 +4202,7 @@ EOF
 	      hardcode_libdirs="$libdir"
 	    else
 	      # Just accumulate the unique libdirs.
-	      case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
 	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 		;;
 	      *)
@@ -2449,23 +4229,6 @@ EOF
       fi
       finalize_rpath="$rpath"
 
-      output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$output_objdir" = "X$output"; then
-	output_objdir="$objdir"
-      else
-	output_objdir="$output_objdir/$objdir"
-      fi
-
-      # Create the binary in the object directory, then wrap it.
-      if test ! -d $output_objdir; then
-	$show "$mkdir $output_objdir"
-	$run $mkdir $output_objdir
-	status=$?
-	if test $status -ne 0 && test ! -d $output_objdir; then
-	  exit $status
-	fi
-      fi
-
       if test -n "$libobjs" && test "$build_old_libs" = yes; then
 	# Transform all the library objects into standard objects.
 	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
@@ -2482,7 +4245,7 @@ EOF
       fi
 
       if test -n "$dlsyms"; then
-	case "$dlsyms" in
+	case $dlsyms in
 	"") ;;
 	*.c)
 	  # Discover the nlist of each of the dlfiles.
@@ -2514,19 +4277,19 @@ extern \"C\" {
 	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
 
 	    # Add our own program objects to the symbol list.
-	    progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
 	    for arg in $progfiles; do
 	      $show "extracting global C symbols from \`$arg'"
 	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
 	    done
 
 	    if test -n "$exclude_expsyms"; then
-	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
 	      $run eval '$mv "$nlist"T "$nlist"'
 	    fi
-	    
+
 	    if test -n "$export_symbols_regex"; then
-	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
 	      $run eval '$mv "$nlist"T "$nlist"'
 	    fi
 
@@ -2534,9 +4297,9 @@ extern \"C\" {
 	    if test -z "$export_symbols"; then
 	      export_symbols="$output_objdir/$output.exp"
 	      $run $rm $export_symbols
-	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
 	    else
-	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+	      $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
 	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
 	      $run eval 'mv "$nlist"T "$nlist"'
 	    fi
@@ -2544,8 +4307,8 @@ extern \"C\" {
 
 	  for arg in $dlprefiles; do
 	    $show "extracting global C symbols from \`$arg'"
-	    name=`echo "$arg" | sed -e 's%^.*/%%'`
-	    $run eval 'echo ": $name " >> "$nlist"'
+	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+	    $run eval '$echo ": $name " >> "$nlist"'
 	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
 	  done
 
@@ -2554,12 +4317,18 @@ extern \"C\" {
 	    test -f "$nlist" || : > "$nlist"
 
 	    if test -n "$exclude_expsyms"; then
-	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
 	      $mv "$nlist"T "$nlist"
 	    fi
 
 	    # Try sorting and uniquifying the output.
-	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
+	    if grep -v "^: " < "$nlist" |
+		if sort -k 3 </dev/null >/dev/null 2>&1; then
+		  sort -k 3
+		else
+		  sort +2
+		fi |
+		uniq > "$nlist"S; then
 	      :
 	    else
 	      grep -v "^: " < "$nlist" > "$nlist"S
@@ -2568,7 +4337,7 @@ extern \"C\" {
 	    if test -f "$nlist"S; then
 	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
 	    else
-	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
+	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
 	    fi
 
 	    $echo >> "$output_objdir/$dlsyms" "\
@@ -2576,27 +4345,25 @@ extern \"C\" {
 #undef lt_preloaded_symbols
 
 #if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
+# define lt_ptr void *
 #else
-# define lt_ptr_t char *
+# define lt_ptr char *
 # define const
 #endif
 
 /* The mapping between symbol names and symbols. */
 const struct {
   const char *name;
-  lt_ptr_t address;
+  lt_ptr address;
 }
 lt_preloaded_symbols[] =
 {\
 "
 
-	    sed -n -e 's/^: \([^ ]*\) $/  {\"\1\", (lt_ptr_t) 0},/p' \
-		-e 's/^. \([^ ]*\) \([^ ]*\)$/  {"\2", (lt_ptr_t) \&\2},/p' \
-		  < "$nlist" >> "$output_objdir/$dlsyms"
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
 
 	    $echo >> "$output_objdir/$dlsyms" "\
-  {0, (lt_ptr_t) 0}
+  {0, (lt_ptr) 0}
 };
 
 /* This works around a problem in FreeBSD linker */
@@ -2613,27 +4380,27 @@ static const void *lt_preloaded_setup() {
 	  fi
 
 	  pic_flag_for_symtable=
-	  case "$host" in
+	  case $host in
 	  # compiling the symbol table file with pic_flag works around
 	  # a FreeBSD bug that causes programs to crash when -lm is
 	  # linked before any other PIC object.  But we must not use
 	  # pic_flag when linking with -static.  The problem exists in
 	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 	    case "$compile_command " in
 	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
+	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
 	    esac;;
 	  *-*-hpux*)
 	    case "$compile_command " in
 	    *" -static "*) ;;
-	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
+	    *) pic_flag_for_symtable=" $pic_flag";;
 	    esac
 	  esac
 
 	  # Now compile the dynamic symbol file.
-	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+	  $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+	  $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
 
 	  # Clean up the generated files.
 	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
@@ -2645,7 +4412,7 @@ static const void *lt_preloaded_setup() {
 	  ;;
 	*)
 	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
       else
@@ -2658,7 +4425,7 @@ static const void *lt_preloaded_setup() {
 	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
       fi
 
-      if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
+      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
 	# Replace the output file specification.
 	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
 	link_command="$compile_command$compile_rpath"
@@ -2667,7 +4434,7 @@ static const void *lt_preloaded_setup() {
 	$show "$link_command"
 	$run eval "$link_command"
 	status=$?
-	
+
 	# Delete the generated files.
 	if test -n "$dlsyms"; then
 	  $show "$rm $output_objdir/${outputname}S.${objext}"
@@ -2681,7 +4448,7 @@ static const void *lt_preloaded_setup() {
 	# We should set the shlibpath_var
 	rpath=
 	for dir in $temp_rpath; do
-	  case "$dir" in
+	  case $dir in
 	  [\\/]* | [A-Za-z]:[\\/]*)
 	    # Absolute path.
 	    rpath="$rpath$dir:"
@@ -2723,11 +4490,24 @@ static const void *lt_preloaded_setup() {
 	fi
       fi
 
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$run $rm $output
+	# Link the executable and exit
+	$show "$link_command"
+	$run eval "$link_command" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
       if test "$hardcode_action" = relink; then
 	# Fast installation is not supported
 	link_command="$compile_var$compile_command$compile_rpath"
 	relink_command="$finalize_var$finalize_command$finalize_rpath"
-	
+
 	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
 	$echo "$modename: \`$output' will be relinked during installation" 1>&2
       else
@@ -2747,7 +4527,7 @@ static const void *lt_preloaded_setup() {
 
       # Replace the output file specification.
       link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-      
+
       # Delete the old output files.
       $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
 
@@ -2759,14 +4539,26 @@ static const void *lt_preloaded_setup() {
 
       # Quote the relink command for shipping.
       if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
 	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
       fi
 
       # Quote $echo for shipping.
-      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
-	case "$0" in
-	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
-	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
+	case $progpath in
+	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
 	esac
 	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
       else
@@ -2778,10 +4570,230 @@ static const void *lt_preloaded_setup() {
 	# win32 will think the script is a binary if it has
 	# a .exe suffix, so we strip it off here.
 	case $output in
-	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
+	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    cwrappersource=`$echo ${objdir}/lt-${output}.c`
+	    cwrapper=`$echo ${output}.exe`
+	    $rm $cwrappersource $cwrapper
+	    trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "/bin/sh $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+	    cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int i;
+
+  program_name = (char *) xstrdup ((char *) basename (argv[0]));
+  newargz = XMALLOC(char *, argc+2);
+EOF
+
+	    cat >> $cwrappersource <<EOF
+  newargz[0] = "$SHELL";
+EOF
+
+	    cat >> $cwrappersource <<"EOF"
+  newargz[1] = fnqualify(argv[0]);
+  /* we know the script has the same name, without the .exe */
+  /* so make sure newargz[1] doesn't end in .exe */
+  strendzap(newargz[1],".exe");
+  for (i = 1; i < argc; i++)
+    newargz[i+1] = xstrdup(argv[i]);
+  newargz[argc+1] = NULL;
+EOF
+
+	    cat >> $cwrappersource <<EOF
+  execv("$SHELL",newargz);
+EOF
+
+	    cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void * p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha (name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+  size_t size;
+  char *p;
+  char tmp[LT_PATHMAX + 1];
+
+  assert(path != NULL);
+
+  /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha (path[0]) && path[1] == ':')
+    return xstrdup (path);
+#endif
+  if (IS_DIR_SEPARATOR (path[0]))
+    return xstrdup (path);
+
+  /* prepend the current directory */
+  /* doesn't handle '~' */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+  p = XMALLOC(char, size);
+  sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+  return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert(str != NULL);
+  assert(pat != NULL);
+
+  len = strlen(str);
+  patlen = strlen(pat);
+
+  if (patlen <= len)
+  {
+    str += len - patlen;
+    if (strcmp(str, pat) == 0)
+      *str = '\0';
+  }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+          const char * message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+	  # we should really use a build-platform specific compiler
+	  # here, but OTOH, the wrappers (shell script and this C one)
+	  # are only useful if you want to execute the "real" binary.
+	  # Since the "real" binary is built for $host, then this
+	  # wrapper might as well be built for $host, too.
+	  $run $LTCC -s -o $cwrapper $cwrappersource
+	  ;;
 	esac
 	$rm $output
-	trap "$rm $output; exit 1" 1 2 15
+	trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
 
 	$echo > $output "\
 #! $SHELL
@@ -2797,7 +4809,7 @@ static const void *lt_preloaded_setup() {
 
 # Sed substitution that helps us do robust quoting.  It backslashifies
 # metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
+Xsed='${SED} -e 1s/^X//'
 sed_quote_subst='$sed_quote_subst'
 
 # The HP-UX ksh and POSIX shell print the target directory to stdout
@@ -2809,7 +4821,7 @@ relink_command=\"$relink_command\"
 # This environment variable determines our operation mode.
 if test \"\$libtool_install_magic\" = \"$magic\"; then
   # install mode needs the following variable:
-  link_against_libtool_libs='$link_against_libtool_libs'
+  notinst_deplibs='$notinst_deplibs'
 else
   # When we are sourced in execute mode, \$file and \$echo are already set.
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
@@ -2835,20 +4847,20 @@ else
   test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 
   # Follow symbolic links until we get to the real thisdir.
-  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
   while test -n \"\$file\"; do
     destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
 
     # If there was a directory component, then change thisdir.
     if test \"x\$destdir\" != \"x\$file\"; then
       case \"\$destdir\" in
-      [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
       *) thisdir=\"\$thisdir/\$destdir\" ;;
       esac
     fi
 
     file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
   done
 
   # Try to get the absolute directory name.
@@ -2857,12 +4869,12 @@ else
 "
 
 	if test "$fast_install" = yes; then
-	  echo >> $output "\
-  program=lt-'$outputname'
+	  $echo >> $output "\
+  program=lt-'$outputname'$exeext
   progdir=\"\$thisdir/$objdir\"
-  
+
   if test ! -f \"\$progdir/\$program\" || \\
-     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 
     file=\"\$\$-\$program\"
@@ -2873,14 +4885,15 @@ else
       $rm \"\$progdir/\$file\"
     fi"
 
-	  echo >> $output "\
+	  $echo >> $output "\
 
     # relink executable if necessary
     if test -n \"\$relink_command\"; then
-      if (cd \"\$thisdir\" && eval \$relink_command); then :
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
       else
+	$echo \"\$relink_command_output\" >&2
 	$rm \"\$progdir/\$file\"
-	exit 1
+	exit $EXIT_FAILURE
       fi
     fi
 
@@ -2890,13 +4903,13 @@ else
     $rm \"\$progdir/\$file\"
   fi"
 	else
-	  echo >> $output "\
+	  $echo >> $output "\
   program='$outputname'
   progdir=\"\$thisdir/$objdir\"
 "
 	fi
 
-	echo >> $output "\
+	$echo >> $output "\
 
   if test -f \"\$progdir/\$program\"; then"
 
@@ -2927,39 +4940,35 @@ else
       # Run the actual program with our arguments.
 "
 	case $host in
-	*-*-cygwin* | *-*-mingw | *-*-os2*)
-	  # win32 systems need to use the prog path for dll
-	  # lookup to work
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
 	  $echo >> $output "\
       exec \$progdir\\\\\$program \${1+\"\$@\"}
 "
 	  ;;
+
 	*)
 	  $echo >> $output "\
-      # Export the path to the program.
-      PATH=\"\$progdir:\$PATH\"
-      export PATH
-
-      exec \$program \${1+\"\$@\"}
+      exec \$progdir/\$program \${1+\"\$@\"}
 "
 	  ;;
 	esac
 	$echo >> $output "\
       \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
-      exit 1
+      exit $EXIT_FAILURE
     fi
   else
     # The program doesn't exist.
     \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
     \$echo \"This script is just a wrapper for \$program.\" 1>&2
-    echo \"See the $PACKAGE documentation for more information.\" 1>&2
-    exit 1
+    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit $EXIT_FAILURE
   fi
 fi\
 "
 	chmod +x $output
       fi
-      exit 0
+      exit $EXIT_SUCCESS
       ;;
     esac
 
@@ -2975,7 +4984,7 @@ fi\
 	  oldobjs="$libobjs_save"
 	  build_libtool_libs=no
 	else
-	  oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
+	  oldobjs="$old_deplibs $non_pic_objects"
 	fi
 	addlibs="$old_convenience"
       fi
@@ -2984,18 +4993,18 @@ fi\
 	gentop="$output_objdir/${outputname}x"
 	$show "${rm}r $gentop"
 	$run ${rm}r "$gentop"
-	$show "mkdir $gentop"
-	$run mkdir "$gentop"
+	$show "$mkdir $gentop"
+	$run $mkdir "$gentop"
 	status=$?
-	if test $status -ne 0 && test ! -d "$gentop"; then
+	if test "$status" -ne 0 && test ! -d "$gentop"; then
 	  exit $status
 	fi
 	generated="$generated $gentop"
-	  
+
 	# Add in members from convenience archives.
 	for xlib in $addlibs; do
 	  # Extract the objects.
-	  case "$xlib" in
+	  case $xlib in
 	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
 	  *) xabs=`pwd`"/$xlib" ;;
 	  esac
@@ -3004,14 +5013,40 @@ fi\
 
 	  $show "${rm}r $xdir"
 	  $run ${rm}r "$xdir"
-	  $show "mkdir $xdir"
-	  $run mkdir "$xdir"
+	  $show "$mkdir $xdir"
+	  $run $mkdir "$xdir"
 	  status=$?
-	  if test $status -ne 0 && test ! -d "$xdir"; then
+	  if test "$status" -ne 0 && test ! -d "$xdir"; then
 	    exit $status
 	  fi
+	  # We will extract separately just the conflicting names and we will no
+	  # longer touch any unique names. It is faster to leave these extract
+	  # automatically by $AR in one run.
 	  $show "(cd $xdir && $AR x $xabs)"
 	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+	  if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+	    $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+	    $AR t "$xabs" | sort | uniq -cd | while read -r count name
+	    do
+	      i=1
+	      while test "$i" -le "$count"
+	      do
+	       # Put our $i before any first dot (extension)
+	       # Never overwrite any file
+	       name_to="$name"
+	       while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+	       do
+		 name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+	       done
+	       $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+	       $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+	       i=`expr $i + 1`
+	      done
+	    done
+	  fi
 
 	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
 	done
@@ -3019,30 +5054,71 @@ fi\
 
       # Do each command in the archive commands.
       if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-	eval cmds=\"$old_archive_from_new_cmds\"
+       cmds=$old_archive_from_new_cmds
       else
-	# Ensure that we have .o objects in place in case we decided
-	# not to build a shared library, and have fallen back to building
-	# static libs even though --disable-static was passed!
-	for oldobj in $oldobjs; do
-	  if test ! -f $oldobj; then
-	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
-	    if test "X$xdir" = "X$oldobj"; then
-	      xdir="."
+	eval cmds=\"$old_archive_cmds\"
+
+	if len=`expr "X$cmds" : ".*"` &&
+	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  $echo "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+	  # encoded into archives.  This makes 'ar r' malfunction in
+	  # this piecewise linking case whenever conflicting object
+	  # names appear in distinct ar calls; check, warn and compensate.
+	    if (for obj in $save_oldobjs
+	    do
+	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	    :
+	  else
+	    $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+	    $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+	    AR_FLAGS=cq
+	  fi
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  for obj in $save_oldobjs
+	  do
+	    oldobjs="$objlist $obj"
+	    objlist="$objlist $obj"
+	    eval test_cmds=\"$old_archive_cmds\"
+	    if len=`expr "X$test_cmds" : ".*"` &&
+	       test "$len" -le "$max_cmd_len"; then
+	      :
 	    else
-	      xdir="$xdir"
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+	        RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
 	    fi
-	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
-	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
-	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
-	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
 	  fi
-	done
-
-	eval cmds=\"$old_archive_cmds\"
+	fi
       fi
-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+      save_ifs="$IFS"; IFS='~'
       for cmd in $cmds; do
+        eval cmd=\"$cmd\"
 	IFS="$save_ifs"
 	$show "$cmd"
 	$run eval "$cmd" || exit $?
@@ -3056,20 +5132,31 @@ fi\
     fi
 
     # Now create the libtool archive.
-    case "$output" in
+    case $output in
     *.la)
       old_library=
       test "$build_old_libs" = yes && old_library="$libname.$libext"
       $show "creating $output"
 
-      if test -n "$xrpath"; then
-	temp_xrpath=
-	for libdir in $xrpath; do
-	  temp_xrpath="$temp_xrpath -R$libdir"
-	done
-	dependency_libs="$temp_xrpath $dependency_libs"
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
       fi
 
+
       # Only create the output if not a dry run.
       if test -z "$run"; then
 	for installed in no yes; do
@@ -3078,8 +5165,71 @@ fi\
 	      break
 	    fi
 	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		if test -z "$libdir"; then
+		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+		newdependency_libs="$newdependency_libs $libdir/$name"
+		;;
+	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlfiles="$newdlfiles $libdir/$name"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlprefiles="$newdlprefiles $libdir/$name"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlfiles="$newdlfiles $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlprefiles="$newdlprefiles $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
 	  fi
 	  $rm $output
+	  # place dlname in correct position for cygwin
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	  esac
 	  $echo > $output "\
 # $outputname - a libtool library file
 # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
@@ -3088,7 +5238,7 @@ fi\
 # It is necessary for linking the library.
 
 # The name that we can dlopen(3).
-dlname='$dlname'
+dlname='$tdlname'
 
 # Names of this library.
 library_names='$library_names'
@@ -3107,19 +5257,29 @@ revision=$revision
 # Is this an already installed library?
 installed=$installed
 
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
 # Directory that this library needs to be installed in:
-libdir='$install_libdir'\
-"
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $echo >> $output "\
+relink_command=\"$relink_command\""
+	  fi
 	done
       fi
 
       # Do a symbolic link so that the libtool archive can be found in
       # LD_LIBRARY_PATH before the program is installed.
       $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-      $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
+      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
       ;;
     esac
-    exit 0
+    exit $EXIT_SUCCESS
     ;;
 
   # libtool install mode
@@ -3128,10 +5288,12 @@ libdir='$install_libdir'\
 
     # There may be an optional sh(1) argument at the beginning of
     # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
       # Aesthetically quote it.
       arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-      case "$arg" in
+      case $arg in
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
 	arg="\"$arg\""
 	;;
@@ -3147,7 +5309,7 @@ libdir='$install_libdir'\
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
     arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-    case "$arg" in
+    case $arg in
     *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
       arg="\"$arg\""
       ;;
@@ -3170,7 +5332,7 @@ libdir='$install_libdir'\
 	continue
       fi
 
-      case "$arg" in
+      case $arg in
       -d) isdir=yes ;;
       -f) prev="-f" ;;
       -g) prev="-g" ;;
@@ -3195,7 +5357,7 @@ libdir='$install_libdir'\
 
       # Aesthetically quote the argument.
       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-      case "$arg" in
+      case $arg in
       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
 	arg="\"$arg\""
 	;;
@@ -3206,13 +5368,13 @@ libdir='$install_libdir'\
     if test -z "$install_prog"; then
       $echo "$modename: you must specify an install program" 1>&2
       $echo "$help" 1>&2
-      exit 1
+      exit $EXIT_FAILURE
     fi
 
     if test -n "$prev"; then
       $echo "$modename: the \`$prev' option requires an argument" 1>&2
       $echo "$help" 1>&2
-      exit 1
+      exit $EXIT_FAILURE
     fi
 
     if test -z "$files"; then
@@ -3222,7 +5384,7 @@ libdir='$install_libdir'\
 	$echo "$modename: you must specify a destination" 1>&2
       fi
       $echo "$help" 1>&2
-      exit 1
+      exit $EXIT_FAILURE
     fi
 
     # Strip any trailing slash from the destination.
@@ -3240,22 +5402,22 @@ libdir='$install_libdir'\
 
       # Not a directory, so check to see that there is only one file specified.
       set dummy $files
-      if test $# -gt 2; then
+      if test "$#" -gt 2; then
 	$echo "$modename: \`$dest' is not a directory" 1>&2
 	$echo "$help" 1>&2
-	exit 1
+	exit $EXIT_FAILURE
       fi
     fi
-    case "$destdir" in
+    case $destdir in
     [\\/]* | [A-Za-z]:[\\/]*) ;;
     *)
       for file in $files; do
-	case "$file" in
+	case $file in
 	*.lo) ;;
 	*)
 	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
 	  $echo "$help" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
       done
@@ -3272,25 +5434,26 @@ libdir='$install_libdir'\
     for file in $files; do
 
       # Do each installation.
-      case "$file" in
-      *.a | *.lib)
+      case $file in
+      *.$libext)
 	# Do the static libraries later.
 	staticlibs="$staticlibs $file"
 	;;
 
       *.la)
 	# Check to see that this really is a libtool archive.
-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
 	else
 	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
 	  $echo "$help" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 
 	library_names=
 	old_library=
+	relink_command=
 	# If there is no directory component, then add one.
-	case "$file" in
+	case $file in
 	*/* | *\\*) . $file ;;
 	*) . ./$file ;;
 	esac
@@ -3309,10 +5472,41 @@ libdir='$install_libdir'\
 	  esac
 	fi
 
-	dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
 	test "X$dir" = "X$file/" && dir=
 	dir="$dir$objdir"
 
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  if test "$inst_prefix_dir" = "$destdir"; then
+	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  $echo "$modename: warning: relinking \`$file'" 1>&2
+	  $show "$relink_command"
+	  if $run eval "$relink_command"; then :
+	  else
+	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	fi
+
 	# See the names of the shared library.
 	set dummy $library_names
 	if test -n "$2"; then
@@ -3320,11 +5514,18 @@ libdir='$install_libdir'\
 	  shift
 	  shift
 
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
 	  # Install the shared library and build the symlinks.
-	  $show "$install_prog $dir/$realname $destdir/$realname"
-	  $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
+	  $show "$install_prog $dir/$srcname $destdir/$realname"
+	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+	  if test -n "$stripme" && test -n "$striplib"; then
+	    $show "$striplib $destdir/$realname"
+	    $run eval "$striplib $destdir/$realname" || exit $?
+	  fi
 
-	  if test $# -gt 0; then
+	  if test "$#" -gt 0; then
 	    # Delete the old symlinks, and create new ones.
 	    for linkname
 	    do
@@ -3337,10 +5538,11 @@ libdir='$install_libdir'\
 
 	  # Do each command in the postinstall commands.
 	  lib="$destdir/$realname"
-	  eval cmds=\"$postinstall_cmds\"
-	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	  cmds=$postinstall_cmds
+	  save_ifs="$IFS"; IFS='~'
 	  for cmd in $cmds; do
 	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
 	    $show "$cmd"
 	    $run eval "$cmd" || exit $?
 	  done
@@ -3369,18 +5571,18 @@ libdir='$install_libdir'\
 	fi
 
 	# Deduce the name of the destination old-style object file.
-	case "$destfile" in
+	case $destfile in
 	*.lo)
 	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
 	  ;;
-	*.o | *.obj)
+	*.$objext)
 	  staticdest="$destfile"
 	  destfile=
 	  ;;
 	*)
 	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
 	  $echo "$help" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	  ;;
 	esac
 
@@ -3398,7 +5600,7 @@ libdir='$install_libdir'\
 	  $show "$install_prog $staticobj $staticdest"
 	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
 	fi
-	exit 0
+	exit $EXIT_SUCCESS
 	;;
 
       *)
@@ -3410,52 +5612,99 @@ libdir='$install_libdir'\
 	  destfile="$destdir/$destfile"
 	fi
 
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      file=`$echo $file|${SED} 's,.exe$,,'`
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
 	# Do a test to see if this is really a libtool program.
-	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-	  link_against_libtool_libs=
+	case $host in
+	*cygwin*|*mingw*)
+	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+	  notinst_deplibs=
 	  relink_command=
 
+	  # To insure that "foo" is sourced, and not "foo.exe",
+	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
+	  # which disallows the automatic-append-.exe behavior.
+	  case $build in
+	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+	  *) wrapperdot=${wrapper} ;;
+	  esac
 	  # If there is no directory component, then add one.
-	  case "$file" in
-	  */* | *\\*) . $file ;;
-	  *) . ./$file ;;
+	  case $file in
+	  */* | *\\*) . ${wrapperdot} ;;
+	  *) . ./${wrapperdot} ;;
 	  esac
 
 	  # Check the variables that should have been set.
-	  if test -z "$link_against_libtool_libs"; then
-	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
-	    exit 1
+	  if test -z "$notinst_deplibs"; then
+	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+	    exit $EXIT_FAILURE
 	  fi
 
 	  finalize=yes
-	  for lib in $link_against_libtool_libs; do
+	  for lib in $notinst_deplibs; do
 	    # Check to see that each library is installed.
 	    libdir=
 	    if test -f "$lib"; then
 	      # If there is no directory component, then add one.
-	      case "$lib" in
+	      case $lib in
 	      */* | *\\*) . $lib ;;
 	      *) . ./$lib ;;
 	      esac
 	    fi
-	    libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
+	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
 	    if test -n "$libdir" && test ! -f "$libfile"; then
 	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
 	      finalize=no
 	    fi
 	  done
 
+	  relink_command=
+	  # To insure that "foo" is sourced, and not "foo.exe",
+	  # finese the cygwin/MSYS system by explicitly sourcing "foo."
+	  # which disallows the automatic-append-.exe behavior.
+	  case $build in
+	  *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+	  *) wrapperdot=${wrapper} ;;
+	  esac
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . ${wrapperdot} ;;
+	  *) . ./${wrapperdot} ;;
+	  esac
+
 	  outputname=
 	  if test "$fast_install" = no && test -n "$relink_command"; then
 	    if test "$finalize" = yes && test -z "$run"; then
 	      tmpdir="/tmp"
 	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
 	      tmpdir="$tmpdir/libtool-$$"
-	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
+	      save_umask=`umask`
+	      umask 0077
+	      if $mkdir "$tmpdir"; then
+	        umask $save_umask
 	      else
+	        umask $save_umask
 		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
 		continue
 	      fi
+	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
 	      outputname="$tmpdir/$file"
 	      # Replace the output file specification.
 	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
@@ -3473,10 +5722,27 @@ libdir='$install_libdir'\
 	    fi
 	  else
 	    # Install the binary that we compiled earlier.
-	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
 	  fi
 	fi
 
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyways
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+	    ;;
+	  esac
+	  ;;
+	esac
 	$show "$install_prog$stripme $file $destfile"
 	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
 	test -n "$outputname" && ${rm}r "$tmpdir"
@@ -3493,11 +5759,17 @@ libdir='$install_libdir'\
       $show "$install_prog $file $oldlib"
       $run eval "$install_prog \$file \$oldlib" || exit $?
 
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	$show "$old_striplib $oldlib"
+	$run eval "$old_striplib $oldlib" || exit $?
+      fi
+
       # Do each command in the postinstall commands.
-      eval cmds=\"$old_postinstall_cmds\"
-      IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+      cmds=$old_postinstall_cmds
+      save_ifs="$IFS"; IFS='~'
       for cmd in $cmds; do
 	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
 	$show "$cmd"
 	$run eval "$cmd" || exit $?
       done
@@ -3511,11 +5783,10 @@ libdir='$install_libdir'\
     if test -n "$current_libdirs"; then
       # Maybe just do a dry run.
       test -n "$run" && current_libdirs=" -n$current_libdirs"
-      exec $SHELL $0 --finish$current_libdirs
-      exit 1
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
     fi
-
-    exit 0
     ;;
 
   # libtool finish mode
@@ -3533,10 +5804,11 @@ libdir='$install_libdir'\
       for libdir in $libdirs; do
 	if test -n "$finish_cmds"; then
 	  # Do each command in the finish commands.
-	  eval cmds=\"$finish_cmds\"
-	  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	  cmds=$finish_cmds
+	  save_ifs="$IFS"; IFS='~'
 	  for cmd in $cmds; do
 	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
 	    $show "$cmd"
 	    $run eval "$cmd" || admincmds="$admincmds
        $cmd"
@@ -3553,43 +5825,43 @@ libdir='$install_libdir'\
     fi
 
     # Exit here if they wanted silent mode.
-    test "$show" = : && exit 0
+    test "$show" = : && exit $EXIT_SUCCESS
 
-    echo "----------------------------------------------------------------------"
-    echo "Libraries have been installed in:"
+    $echo "----------------------------------------------------------------------"
+    $echo "Libraries have been installed in:"
     for libdir in $libdirs; do
-      echo "   $libdir"
+      $echo "   $libdir"
     done
-    echo
-    echo "If you ever happen to want to link against installed libraries"
-    echo "in a given directory, LIBDIR, you must either use libtool, and"
-    echo "specify the full pathname of the library, or use \`-LLIBDIR'"
-    echo "flag during linking and do at least one of the following:"
+    $echo
+    $echo "If you ever happen to want to link against installed libraries"
+    $echo "in a given directory, LIBDIR, you must either use libtool, and"
+    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $echo "flag during linking and do at least one of the following:"
     if test -n "$shlibpath_var"; then
-      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
-      echo "     during execution"
+      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $echo "     during execution"
     fi
     if test -n "$runpath_var"; then
-      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
-      echo "     during linking"
+      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $echo "     during linking"
     fi
     if test -n "$hardcode_libdir_flag_spec"; then
       libdir=LIBDIR
       eval flag=\"$hardcode_libdir_flag_spec\"
 
-      echo "   - use the \`$flag' linker flag"
+      $echo "   - use the \`$flag' linker flag"
     fi
     if test -n "$admincmds"; then
-      echo "   - have your system administrator run these commands:$admincmds"
+      $echo "   - have your system administrator run these commands:$admincmds"
     fi
     if test -f /etc/ld.so.conf; then
-      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
     fi
-    echo
-    echo "See any operating system documentation about shared libraries for"
-    echo "more information, such as the ld(1) and ld.so(8) manual pages."
-    echo "----------------------------------------------------------------------"
-    exit 0
+    $echo
+    $echo "See any operating system documentation about shared libraries for"
+    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    $echo "----------------------------------------------------------------------"
+    exit $EXIT_SUCCESS
     ;;
 
   # libtool execute mode
@@ -3601,7 +5873,7 @@ libdir='$install_libdir'\
     if test -z "$cmd"; then
       $echo "$modename: you must specify a COMMAND" 1>&2
       $echo "$help"
-      exit 1
+      exit $EXIT_FAILURE
     fi
 
     # Handle -dlopen flags immediately.
@@ -3609,18 +5881,18 @@ libdir='$install_libdir'\
       if test ! -f "$file"; then
 	$echo "$modename: \`$file' is not a file" 1>&2
 	$echo "$help" 1>&2
-	exit 1
+	exit $EXIT_FAILURE
       fi
 
       dir=
-      case "$file" in
+      case $file in
       *.la)
 	# Check to see that this really is a libtool archive.
-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
 	else
 	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
 	  $echo "$help" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 
 	# Read the libtool library.
@@ -3628,7 +5900,7 @@ libdir='$install_libdir'\
 	library_names=
 
 	# If there is no directory component, then add one.
-	case "$file" in
+	case $file in
 	*/* | *\\*) . $file ;;
 	*) . ./$file ;;
 	esac
@@ -3647,7 +5919,7 @@ libdir='$install_libdir'\
 	  dir="$dir/$objdir"
 	else
 	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-	  exit 1
+	  exit $EXIT_FAILURE
 	fi
 	;;
 
@@ -3683,13 +5955,13 @@ libdir='$install_libdir'\
     args=
     for file
     do
-      case "$file" in
+      case $file in
       -*) ;;
       *)
 	# Do a test to see if this is really a libtool program.
-	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 	  # If there is no directory component, then add one.
-	  case "$file" in
+	  case $file in
 	  */* | *\\*) . $file ;;
 	  *) . ./$file ;;
 	  esac
@@ -3706,11 +5978,11 @@ libdir='$install_libdir'\
 
     if test -z "$run"; then
       if test -n "$shlibpath_var"; then
-        # Export the shlibpath_var.
-        eval "export $shlibpath_var"
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
       fi
 
-      # Restore saved enviroment variables
+      # Restore saved environment variables
       if test "${save_LC_ALL+set}" = set; then
 	LC_ALL="$save_LC_ALL"; export LC_ALL
       fi
@@ -3718,31 +5990,35 @@ libdir='$install_libdir'\
 	LANG="$save_LANG"; export LANG
       fi
 
-      # Now actually exec the command.
-      eval "exec \$cmd$args"
-
-      $echo "$modename: cannot exec \$cmd$args"
-      exit 1
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
     else
       # Display what would be done.
       if test -n "$shlibpath_var"; then
-        eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
-        $echo "export $shlibpath_var"
+	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+	$echo "export $shlibpath_var"
       fi
       $echo "$cmd$args"
-      exit 0
+      exit $EXIT_SUCCESS
     fi
     ;;
 
-  # libtool uninstall mode
-  uninstall)
-    modename="$modename: uninstall"
+  # libtool clean and uninstall mode
+  clean | uninstall)
+    modename="$modename: $mode"
     rm="$nonopt"
     files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
 
     for arg
     do
-      case "$arg" in
+      case $arg in
+      -f) rm="$rm $arg"; rmforce=yes ;;
       -*) rm="$rm $arg" ;;
       *) files="$files $arg" ;;
       esac
@@ -3751,91 +6027,183 @@ libdir='$install_libdir'\
     if test -z "$rm"; then
       $echo "$modename: you must specify an RM program" 1>&2
       $echo "$help" 1>&2
-      exit 1
+      exit $EXIT_FAILURE
     fi
 
+    rmdirs=
+
+    origobjdir="$objdir"
     for file in $files; do
       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$dir" = "X$file" && dir=.
+      if test "X$dir" = "X$file"; then
+	dir=.
+	objdir="$origobjdir"
+      else
+	objdir="$dir/$origobjdir"
+      fi
       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+	case " $rmdirs " in
+	  *" $objdir "*) ;;
+	  *) rmdirs="$rmdirs $objdir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if (test -L "$file") >/dev/null 2>&1 \
+	|| (test -h "$file") >/dev/null 2>&1 \
+	|| test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
 
       rmfiles="$file"
 
-      case "$name" in
+      case $name in
       *.la)
 	# Possibly a libtool archive, so verify it.
-	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 	  . $dir/$name
 
 	  # Delete the libtool libraries and symlinks.
 	  for n in $library_names; do
-	    rmfiles="$rmfiles $dir/$n"
+	    rmfiles="$rmfiles $objdir/$n"
 	  done
-	  test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
-
-	  $show "$rm $rmfiles"
-	  $run $rm $rmfiles
-
-	  if test -n "$library_names"; then
-	    # Do each command in the postuninstall commands.
-	    eval cmds=\"$postuninstall_cmds\"
-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
+	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+	  if test "$mode" = uninstall; then
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      cmds=$postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
 	      IFS="$save_ifs"
-	      $show "$cmd"
-	      $run eval "$cmd"
-	    done
-	    IFS="$save_ifs"
-	  fi
+	    fi
 
-	  if test -n "$old_library"; then
-	    # Do each command in the old_postuninstall commands.
-	    eval cmds=\"$old_postuninstall_cmds\"
-	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-	    for cmd in $cmds; do
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      cmds=$old_postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
 	      IFS="$save_ifs"
-	      $show "$cmd"
-	      $run eval "$cmd"
-	    done
-	    IFS="$save_ifs"
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
 	  fi
-
-	  # FIXME: should reinstall the best remaining shared library.
 	fi
 	;;
 
       *.lo)
-	if test "$build_old_libs" = yes; then
-	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
-	  rmfiles="$rmfiles $dir/$oldobj"
+	# Possibly a libtool object, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+	  # Read the .lo file
+	  . $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" \
+	     && test "$pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" \
+	     && test "$non_pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$non_pic_object"
+	  fi
 	fi
-	$show "$rm $rmfiles"
-	$run $rm $rmfiles
 	;;
 
       *)
-	$show "$rm $rmfiles"
-	$run $rm $rmfiles
+	if test "$mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    file=`$echo $file|${SED} 's,.exe$,,'`
+	    noexename=`$echo $name|${SED} 's,.exe$,,'`
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    rmfiles="$rmfiles $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	    relink_command=
+	    . $dir/$noexename
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      rmfiles="$rmfiles $objdir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
 	;;
       esac
+      $show "$rm $rmfiles"
+      $run $rm $rmfiles || exit_status=1
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	$show "rmdir $dir"
+	$run rmdir $dir >/dev/null 2>&1
+      fi
     done
-    exit 0
+
+    exit $exit_status
     ;;
 
   "")
     $echo "$modename: you must specify a MODE" 1>&2
     $echo "$generic_help" 1>&2
-    exit 1
+    exit $EXIT_FAILURE
     ;;
   esac
 
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$generic_help" 1>&2
-  exit 1
+  if test -z "$exec_cmd"; then
+    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+  fi
 fi # test -z "$show_help"
 
+if test -n "$exec_cmd"; then
+  eval exec $exec_cmd
+  exit $EXIT_FAILURE
+fi
+
 # We need to display help for each of the modes.
-case "$mode" in
+case $mode in
 "") $echo \
 "Usage: $modename [OPTION]... [MODE-ARG]...
 
@@ -3850,10 +6218,12 @@ Provide generalized library-building support services.
     --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
     --quiet           same as \`--silent'
     --silent          don't print informational messages
+    --tag=TAG         use configuration variables from tag TAG
     --version         print version information
 
 MODE must be one of the following:
 
+      clean           remove files from the build directory
       compile         compile a source file into a libtool object
       execute         automatically set library path, then run a program
       finish          complete the installation of libtool libraries
@@ -3862,8 +6232,24 @@ MODE must be one of the following:
       uninstall       remove libraries from an installed directory
 
 MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE."
-  exit 0
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool at gnu.org>."
+  exit $EXIT_SUCCESS
+  ;;
+
+clean)
+  $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
   ;;
 
 compile)
@@ -3875,6 +6261,8 @@ Compile a source file into a libtool library object.
 This mode accepts the following additional options:
 
   -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
   -static           always build a \`.o' file suitable for static linking
 
 COMPILE-COMMAND is a command to be used in creating a \`standard' object file
@@ -3954,8 +6342,13 @@ The following components of LINK-COMMAND are treated specially:
   -LLIBDIR          search LIBDIR for required installed libraries
   -lNAME            OUTPUT-FILE requires the installed library libNAME
   -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
   -no-undefined     declare that a library does not refer to external symbols
   -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
   -release RELEASE  specify package release information
   -rpath LIBDIR     the created library will eventually be installed in LIBDIR
   -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
@@ -3997,14 +6390,34 @@ Otherwise, only FILE itself is deleted using RM."
 *)
   $echo "$modename: invalid operation mode \`$mode'" 1>&2
   $echo "$help" 1>&2
-  exit 1
+  exit $EXIT_FAILURE
   ;;
 esac
 
-echo
+$echo
 $echo "Try \`$modename --help' for more information about other modes."
 
-exit 0
+exit $EXIT_SUCCESS
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
 
 # Local Variables:
 # mode:shell-script
diff --git a/missing b/missing
index 7789652..fc54c64 100755
--- a/missing
+++ b/missing
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Common stub for a few missing GNU programs while installing.
-# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
-# Franc,ois Pinard <pinard at iro.umontreal.ca>, 1996.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -18,11 +18,37 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
 if test $# -eq 0; then
   echo 1>&2 "Try \`$0 --help' for more information"
   exit 1
 fi
 
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
 case "$1" in
 
   -h|--h|--he|--hel|--help)
@@ -35,6 +61,7 @@ error status if there is no known handling for PROGRAM.
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
   aclocal      touch file \`aclocal.m4'
@@ -43,13 +70,15 @@ Supported PROGRAM values:
   automake     touch all \`Makefile.in' files
   bison        create \`y.tab.[ch]', if possible, from existing .[ch]
   flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
   lex          create \`lex.yy.c', if possible, from existing .c
   makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
   yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
     ;;
 
   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing - GNU libit 0.0"
+    echo "missing 0.4 - GNU automake"
     ;;
 
   -*)
@@ -58,31 +87,46 @@ Supported PROGRAM values:
     exit 1
     ;;
 
-  aclocal)
+  aclocal*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`acinclude.m4' or \`configure.in'.  You might want
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
          to install the \`Automake' and \`Perl' packages.  Grab them from
          any GNU archive site."
     touch aclocal.m4
     ;;
 
   autoconf)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`configure.in'.  You might want to install the
+         you modified \`${configure_ac}'.  You might want to install the
          \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
          archive site."
     touch configure
     ;;
 
   autoheader)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`acconfig.h' or \`configure.in'.  You might want
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
          to install the \`Autoconf' and \`GNU m4' packages.  Grab them
          from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
     test -z "$files" && files="config.h"
     touch_files=
     for f in $files; do
@@ -95,10 +139,15 @@ WARNING: \`$1' is missing on your system.  You should only need it if
     touch $touch_files
     ;;
 
-  automake)
+  automake*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
          You might want to install the \`Automake' and \`Perl' packages.
          Grab them from any GNU archive site."
     find . -type f -name Makefile.am -print |
@@ -106,6 +155,34 @@ WARNING: \`$1' is missing on your system.  You should only need it if
 	   while read f; do touch "$f"; done
     ;;
 
+  autom4te)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
   bison|yacc)
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
@@ -159,7 +236,37 @@ WARNING: \`$1' is missing on your system.  You should only need it if
     fi
     ;;
 
+  help2man)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
   makeinfo)
+    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+       # We have makeinfo, but it failed.
+       exit 1
+    fi
+
     echo 1>&2 "\
 WARNING: \`$1' is missing on your system.  You should only need it if
          you modified a \`.texi' or \`.texinfo' file, or any other file
@@ -175,12 +282,51 @@ WARNING: \`$1' is missing on your system.  You should only need it if
     touch $file
     ;;
 
+  tar)
+    shift
+    if test -n "$run"; then
+      echo 1>&2 "ERROR: \`tar' requires --run"
+      exit 1
+    fi
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case "$firstarg" in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case "$firstarg" in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
   *)
     echo 1>&2 "\
 WARNING: \`$1' is needed, and you do not seem to have it handy on your
          system.  You might have modified some files without having the
          proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequirements for installing
+         it often tells you about the needed prerequisites for installing
          this package.  You may also peek at any GNU archive site, in case
          some other package would contain this missing \`$1' program."
     exit 1
diff --git a/mkinstalldirs b/mkinstalldirs
index 4f58503..d2d5f21 100755
--- a/mkinstalldirs
+++ b/mkinstalldirs
@@ -4,37 +4,108 @@
 # Created: 1993-05-16
 # Public domain
 
-# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
-
 errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
 
 for file
 do
-   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
-   shift
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
 
-   pathcomp=
-   for d
-   do
-     pathcomp="$pathcomp$d"
-     case "$pathcomp" in
-       -* ) pathcomp=./$pathcomp ;;
-     esac
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
 
-     if test ! -d "$pathcomp"; then
-        echo "mkdir $pathcomp"
+      mkdir "$pathcomp" || lasterr=$?
 
-        mkdir "$pathcomp" || lasterr=$?
+      if test ! -d "$pathcomp"; then
+  	errstatus=$lasterr
+      else
+  	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+    	  lasterr=""
+  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
 
-        if test ! -d "$pathcomp"; then
-  	  errstatus=$lasterr
-        fi
-     fi
+  	  if test ! -z "$lasterr"; then
+  	    errstatus=$lasterr
+  	  fi
+  	fi
+      fi
+    fi
 
-     pathcomp="$pathcomp/"
-   done
+    pathcomp="$pathcomp/"
+  done
 done
 
 exit $errstatus
 
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
 # mkinstalldirs ends here
diff --git a/src/Makefile.am b/src/Makefile.am
index 6b39e18..273f3cf 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,17 +10,10 @@ BUILT_SOURCES= \
 
 gts-config: gts-config.in
 
-noinst_PROGRAMS = \
-	predicates_init
-
-predicates_init_SOURCES = \
-	predicates_init.c \
-	rounding.h
-
 lib_LTLIBRARIES = libgts.la
 
 libgts_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\
-	-release $(LT_RELEASE) -export-dynamic $(windoze_ldflags)
+	-release $(LT_RELEASE) -export-dynamic
 
 libgts_la_DEPENDENCIES = \
 	predicates_init.h
@@ -41,6 +34,7 @@ libgts_la_SOURCES = \
 	gts-private.h \
 	predicates.c \
 	predicates.h \
+	rounding.h \
 	heap.c \
 	eheap.c \
 	fifo.c \
@@ -50,6 +44,7 @@ libgts_la_SOURCES = \
 	vopt.c \
 	refine.c \
 	iso.c \
+	isotetra.c \
 	split.c \
 	psurface.c \
 	hsurface.c \
@@ -60,7 +55,8 @@ libgts_la_SOURCES = \
 	container.c \
 	graph.c \
 	pgraph.c \
-	partition.c
+	partition.c \
+	curvature.c
 
 include_HEADERS = \
 	gts.h gtsconfig.h
@@ -68,15 +64,19 @@ include_HEADERS = \
 predicates.o: predicates.c predicates_init.h predicates.h
 	$(COMPILE) -c $(srcdir)/predicates.c
 
+predicates_init: predicates_init.c rounding.h
+	$(COMPILE) $(srcdir)/predicates_init.c -o $(srcdir)/predicates_init
+
 predicates_init.h: predicates_init
 	./predicates_init >  $(srcdir)/predicates_init.h
 
-CLEANFILES += $(BUILT_SOURCES)
+CLEANFILES = $(BUILT_SOURCES)
 
 gts.def: libgts.la .libs/libgts.a
-	nm -g .libs/libgts.a | awk 'BEGIN{print "EXPORTS"}{if ($$2 == "T") print "    " $$3}' > gts.def
+	nm -g .libs/libgts.a | awk 'BEGIN{print "EXPORTS"}{if ($$2 == "T" || $$2 == "D" || $$2 == "B") print "    " $$3}' > gts.def
 
 EXTRA_DIST = \
+	predicates_init.c \
 	gts.m4 \
 	makefile.msc \
 	config.h.win32 \
diff --git a/src/Makefile.in b/src/Makefile.in
index adb33e2..414b0bd 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,163 +73,352 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
 INCLUDES = -I$(top_srcdir) -I$(includedir) -DG_LOG_DOMAIN=\"Gts\"
 
 bin_SCRIPTS = gts-config
 
-BUILT_SOURCES =  	gts-config 	predicates_init.h
-
-
-noinst_PROGRAMS =  	predicates_init
-
-
-predicates_init_SOURCES =  	predicates_init.c 	rounding.h
+BUILT_SOURCES = \
+	gts-config \
+	predicates_init.h
 
 
 lib_LTLIBRARIES = libgts.la
 
-libgts_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) 	-release $(LT_RELEASE) -export-dynamic $(windoze_ldflags)
-
-
-libgts_la_DEPENDENCIES =  	predicates_init.h
-
-
-libgts_la_SOURCES =  	predicates_init.h 	object.c 	point.c 	vertex.c 	segment.c 	edge.c 	triangle.c 	face.c 	kdtree.c 	bbtree.c 	misc.c 	gts.h 	gts-private.h 	predicates.c 	predicates.h 	heap.c 	eheap.c 	fifo.c 	matrix.c 	surface.c 	stripe.c 	vopt.c 	refine.c 	iso.c 	split.c 	psurface.c 	hsurface.c 	cdt.c 	boolean.c 	named.c 	oocs.c 	container.c 	graph.c 	pgraph.c 	partition.c
-
-
-include_HEADERS =  	gts.h gtsconfig.h
-
-
-CLEANFILES =  $(BUILT_SOURCES)
-
-EXTRA_DIST =  	gts.m4 	makefile.msc 	config.h.win32 	gts.def 	NOTES
+libgts_la_LDFLAGS = -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)\
+	-release $(LT_RELEASE) -export-dynamic
+
+
+libgts_la_DEPENDENCIES = \
+	predicates_init.h
+
+
+libgts_la_SOURCES = \
+	predicates_init.h \
+	object.c \
+	point.c \
+	vertex.c \
+	segment.c \
+	edge.c \
+	triangle.c \
+	face.c \
+	kdtree.c \
+	bbtree.c \
+	misc.c \
+	gts.h \
+	gts-private.h \
+	predicates.c \
+	predicates.h \
+	rounding.h \
+	heap.c \
+	eheap.c \
+	fifo.c \
+	matrix.c \
+	surface.c \
+	stripe.c \
+	vopt.c \
+	refine.c \
+	iso.c \
+	isotetra.c \
+	split.c \
+	psurface.c \
+	hsurface.c \
+	cdt.c \
+	boolean.c \
+	named.c \
+	oocs.c \
+	container.c \
+	graph.c \
+	pgraph.c \
+	partition.c \
+	curvature.c
+
+
+include_HEADERS = \
+	gts.h gtsconfig.h
+
+
+CLEANFILES = $(BUILT_SOURCES)
+
+EXTRA_DIST = \
+	predicates_init.c \
+	gts.m4 \
+	makefile.msc \
+	config.h.win32 \
+	gts.def \
+	NOTES
 
 
 m4datadir = $(datadir)/aclocal
 m4data_DATA = gts.m4
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =  gts-config
-LTLIBRARIES =  $(lib_LTLIBRARIES)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-LIBS = @LIBS@
-libgts_la_LIBADD = 
-libgts_la_OBJECTS =  object.lo point.lo vertex.lo segment.lo edge.lo \
-triangle.lo face.lo kdtree.lo bbtree.lo misc.lo predicates.lo heap.lo \
-eheap.lo fifo.lo matrix.lo surface.lo stripe.lo vopt.lo refine.lo \
-iso.lo split.lo psurface.lo hsurface.lo cdt.lo boolean.lo named.lo \
-oocs.lo container.lo graph.lo pgraph.lo partition.lo
-PROGRAMS =  $(noinst_PROGRAMS)
-
-predicates_init_OBJECTS =  predicates_init.o
-predicates_init_LDADD = $(LDADD)
-predicates_init_DEPENDENCIES = 
-predicates_init_LDFLAGS = 
-SCRIPTS =  $(bin_SCRIPTS)
-
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = gts-config
+LTLIBRARIES = $(lib_LTLIBRARIES)
+
+libgts_la_LIBADD =
+am_libgts_la_OBJECTS = object.lo point.lo vertex.lo segment.lo edge.lo \
+	triangle.lo face.lo kdtree.lo bbtree.lo misc.lo predicates.lo \
+	heap.lo eheap.lo fifo.lo matrix.lo surface.lo stripe.lo vopt.lo \
+	refine.lo iso.lo isotetra.lo split.lo psurface.lo hsurface.lo \
+	cdt.lo boolean.lo named.lo oocs.lo container.lo graph.lo \
+	pgraph.lo partition.lo curvature.lo
+libgts_la_OBJECTS = $(am_libgts_la_OBJECTS)
+SCRIPTS = $(bin_SCRIPTS)
+
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bbtree.Plo ./$(DEPDIR)/boolean.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/cdt.Plo ./$(DEPDIR)/container.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/curvature.Plo ./$(DEPDIR)/edge.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/eheap.Plo ./$(DEPDIR)/face.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/fifo.Plo ./$(DEPDIR)/graph.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/heap.Plo ./$(DEPDIR)/hsurface.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/iso.Plo ./$(DEPDIR)/isotetra.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/kdtree.Plo ./$(DEPDIR)/matrix.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/misc.Plo ./$(DEPDIR)/named.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/object.Plo ./$(DEPDIR)/oocs.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/partition.Plo ./$(DEPDIR)/pgraph.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/point.Plo ./$(DEPDIR)/predicates.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/psurface.Plo ./$(DEPDIR)/refine.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/segment.Plo ./$(DEPDIR)/split.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/stripe.Plo ./$(DEPDIR)/surface.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/triangle.Plo ./$(DEPDIR)/vertex.Plo \
+ at AMDEP_TRUE@	./$(DEPDIR)/vopt.Plo
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DATA =  $(m4data_DATA)
-
-HEADERS =  $(include_HEADERS)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(libgts_la_SOURCES)
+DATA = $(m4data_DATA)
 
-DIST_COMMON =  Makefile.am Makefile.in gts-config.in
+HEADERS = $(include_HEADERS)
 
+DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.in Makefile.am \
+	gts-config.in
+SOURCES = $(libgts_la_SOURCES)
 
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = $(libgts_la_SOURCES) $(predicates_init_SOURCES)
-OBJECTS = $(libgts_la_OBJECTS) $(predicates_init_OBJECTS)
-
-all: all-redirect
 .SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  src/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 gts-config: $(top_builddir)/config.status gts-config.in
-	cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-mostlyclean-libLTLIBRARIES:
-
-clean-libLTLIBRARIES:
-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-
-distclean-libLTLIBRARIES:
-
-maintainer-clean-libLTLIBRARIES:
-
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+libLTLIBRARIES_INSTALL = $(INSTALL)
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
 	$(mkinstalldirs) $(DESTDIR)$(libdir)
 	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
 	  if test -f $$p; then \
-	    echo "$(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
-	    $(LIBTOOL)  --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
+	    f="`echo $$p | sed -e 's|^.*/||'`"; \
+	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f"; \
+	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$f; \
 	  else :; fi; \
 	done
 
 uninstall-libLTLIBRARIES:
 	@$(NORMAL_UNINSTALL)
-	list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  $(LIBTOOL)  --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	    p="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \
+	  $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
 	done
 
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" = "$$p" && dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+libgts.la: $(libgts_la_OBJECTS) $(libgts_la_DEPENDENCIES) 
+	$(LINK) -rpath $(libdir) $(libgts_la_LDFLAGS) $(libgts_la_OBJECTS) $(libgts_la_LIBADD) $(LIBS)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f $$d$$p; then \
+	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	    echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \
+	    $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
 
-.S.o:
-	$(COMPILE) -c $<
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
 
 mostlyclean-compile:
-	-rm -f *.o core *.core
-
-clean-compile:
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
 
-maintainer-clean-compile:
-
-.c.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bbtree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/boolean.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cdt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/container.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/curvature.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/edge.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/eheap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/face.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fifo.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/graph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/heap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hsurface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/iso.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isotetra.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/kdtree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/matrix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/misc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/named.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/object.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/oocs.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/partition.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pgraph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/point.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/predicates.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/psurface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/refine.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/segment.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/split.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stripe.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/surface.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/triangle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vertex.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vopt.Plo at am__quote@
 
-.s.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 
-.S.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -238,242 +427,231 @@ clean-libtool:
 	-rm -rf .libs _libs
 
 distclean-libtool:
-
-maintainer-clean-libtool:
-
-libgts.la: $(libgts_la_OBJECTS) $(libgts_la_DEPENDENCIES)
-	$(LINK) -rpath $(libdir) $(libgts_la_LDFLAGS) $(libgts_la_OBJECTS) $(libgts_la_LIBADD) $(LIBS)
-
-mostlyclean-noinstPROGRAMS:
-
-clean-noinstPROGRAMS:
-	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
-
-distclean-noinstPROGRAMS:
-
-maintainer-clean-noinstPROGRAMS:
-
-predicates_init: $(predicates_init_OBJECTS) $(predicates_init_DEPENDENCIES)
-	@rm -f predicates_init
-	$(LINK) $(predicates_init_LDFLAGS) $(predicates_init_OBJECTS) $(predicates_init_LDADD) $(LIBS)
-
-install-binSCRIPTS: $(bin_SCRIPTS)
-	@$(NORMAL_INSTALL)
-	$(mkinstalldirs) $(DESTDIR)$(bindir)
-	@list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
-	    $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
-	  else if test -f $(srcdir)/$$p; then \
-	    echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
-	    $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
-	  else :; fi; fi; \
-	done
-
-uninstall-binSCRIPTS:
-	@$(NORMAL_UNINSTALL)
-	list='$(bin_SCRIPTS)'; for p in $$list; do \
-	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
-	done
-
+	-rm -f libtool
+uninstall-info-am:
+m4dataDATA_INSTALL = $(INSTALL_DATA)
 install-m4dataDATA: $(m4data_DATA)
 	@$(NORMAL_INSTALL)
 	$(mkinstalldirs) $(DESTDIR)$(m4datadir)
 	@list='$(m4data_DATA)'; for p in $$list; do \
-	  if test -f $(srcdir)/$$p; then \
-	    echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(m4datadir)/$$p"; \
-	    $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(m4datadir)/$$p; \
-	  else if test -f $$p; then \
-	    echo " $(INSTALL_DATA) $$p $(DESTDIR)$(m4datadir)/$$p"; \
-	    $(INSTALL_DATA) $$p $(DESTDIR)$(m4datadir)/$$p; \
-	  fi; fi; \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(m4dataDATA_INSTALL) $$d$$p $(DESTDIR)$(m4datadir)/$$f"; \
+	  $(m4dataDATA_INSTALL) $$d$$p $(DESTDIR)$(m4datadir)/$$f; \
 	done
 
 uninstall-m4dataDATA:
 	@$(NORMAL_UNINSTALL)
-	list='$(m4data_DATA)'; for p in $$list; do \
-	  rm -f $(DESTDIR)$(m4datadir)/$$p; \
+	@list='$(m4data_DATA)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f $(DESTDIR)$(m4datadir)/$$f"; \
+	  rm -f $(DESTDIR)$(m4datadir)/$$f; \
 	done
-
+includeHEADERS_INSTALL = $(INSTALL_HEADER)
 install-includeHEADERS: $(include_HEADERS)
 	@$(NORMAL_INSTALL)
 	$(mkinstalldirs) $(DESTDIR)$(includedir)
 	@list='$(include_HEADERS)'; for p in $$list; do \
-	  if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
-	  echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \
-	  $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f"; \
+	  $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f; \
 	done
 
 uninstall-includeHEADERS:
 	@$(NORMAL_UNINSTALL)
-	list='$(include_HEADERS)'; for p in $$list; do \
-	  rm -f $(DESTDIR)$(includedir)/$$p; \
+	@list='$(include_HEADERS)'; for p in $$list; do \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  echo " rm -f $(DESTDIR)$(includedir)/$$f"; \
+	  rm -f $(DESTDIR)$(includedir)/$$f; \
 	done
 
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = src
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-	$(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook
-bbtree.lo bbtree.o : bbtree.c gts.h gtsconfig.h
-boolean.lo boolean.o : boolean.c gts.h gtsconfig.h
-cdt.lo cdt.o : cdt.c gts.h gtsconfig.h
-container.lo container.o : container.c gts.h gtsconfig.h
-edge.lo edge.o : edge.c gts.h gtsconfig.h
-eheap.lo eheap.o : eheap.c gts.h gtsconfig.h
-face.lo face.o : face.c gts.h gtsconfig.h
-fifo.lo fifo.o : fifo.c gts.h gtsconfig.h
-graph.lo graph.o : graph.c gts.h gtsconfig.h
-heap.lo heap.o : heap.c gts.h gtsconfig.h
-hsurface.lo hsurface.o : hsurface.c gts.h gtsconfig.h
-iso.lo iso.o : iso.c gts.h gtsconfig.h
-kdtree.lo kdtree.o : kdtree.c gts.h gtsconfig.h
-matrix.lo matrix.o : matrix.c gts.h gtsconfig.h
-misc.lo misc.o : misc.c gts.h gtsconfig.h gts-private.h ../config.h
-named.lo named.o : named.c gts.h gtsconfig.h
-object.lo object.o : object.c gts.h gtsconfig.h gts-private.h
-oocs.lo oocs.o : oocs.c gts.h gtsconfig.h
-partition.lo partition.o : partition.c gts.h gtsconfig.h
-pgraph.lo pgraph.o : pgraph.c gts.h gtsconfig.h
-point.lo point.o : point.c gts.h gtsconfig.h gts-private.h predicates.h
-predicates_init.o: predicates_init.c rounding.h ../config.h
-predicates.lo predicates.o : predicates.c predicates.h predicates_init.h \
-	rounding.h ../config.h
-psurface.lo psurface.o : psurface.c gts.h gtsconfig.h
-refine.lo refine.o : refine.c gts.h gtsconfig.h
-segment.lo segment.o : segment.c gts.h gtsconfig.h
-split.lo split.o : split.c gts.h gtsconfig.h
-stripe.lo stripe.o : stripe.c gts.h gtsconfig.h
-surface.lo surface.o : surface.c gts.h gtsconfig.h
-triangle.lo triangle.o : triangle.c gts.h gtsconfig.h
-vertex.lo vertex.o : vertex.c gts.h gtsconfig.h
-vopt.lo vopt.o : vopt.c gts.h gtsconfig.h
-
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
 check-am: all-am
-check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am: install-libLTLIBRARIES install-binSCRIPTS
-install-exec: install-exec-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(SCRIPTS) $(DATA) $(HEADERS)
 
-install-data-am: install-m4dataDATA install-includeHEADERS
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(m4datadir) $(DESTDIR)$(includedir)
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am: uninstall-libLTLIBRARIES uninstall-binSCRIPTS \
-		uninstall-m4dataDATA uninstall-includeHEADERS
-uninstall: uninstall-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \
-		$(HEADERS)
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-	$(mkinstalldirs)  $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) \
-		$(DESTDIR)$(m4datadir) $(DESTDIR)$(includedir)
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
 	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-mostlyclean-am:  mostlyclean-libLTLIBRARIES mostlyclean-compile \
-		mostlyclean-libtool mostlyclean-noinstPROGRAMS \
-		mostlyclean-tags mostlyclean-generic
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
 
-clean-am:  clean-libLTLIBRARIES clean-compile clean-libtool \
-		clean-noinstPROGRAMS clean-tags clean-generic \
-		mostlyclean-am
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-libLTLIBRARIES distclean-compile \
-		distclean-libtool distclean-noinstPROGRAMS \
-		distclean-tags distclean-generic clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-libLTLIBRARIES \
-		maintainer-clean-compile maintainer-clean-libtool \
-		maintainer-clean-noinstPROGRAMS maintainer-clean-tags \
-		maintainer-clean-generic distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am: install-includeHEADERS install-m4dataDATA
+
+install-exec-am: install-binSCRIPTS install-libLTLIBRARIES
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
 
-.PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
-clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
-uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool mostlyclean-noinstPROGRAMS \
-distclean-noinstPROGRAMS clean-noinstPROGRAMS \
-maintainer-clean-noinstPROGRAMS uninstall-binSCRIPTS install-binSCRIPTS \
-uninstall-m4dataDATA install-m4dataDATA uninstall-includeHEADERS \
-install-includeHEADERS tags mostlyclean-tags distclean-tags clean-tags \
-maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
-installcheck-am installcheck install-exec-am install-exec \
-install-data-am install-data install-am install uninstall-am uninstall \
-all-redirect all-am all installdirs mostlyclean-generic \
-distclean-generic clean-generic maintainer-clean-generic clean \
-mostlyclean distclean maintainer-clean
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS uninstall-includeHEADERS \
+	uninstall-info-am uninstall-libLTLIBRARIES uninstall-m4dataDATA
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am info info-am install \
+	install-am install-binSCRIPTS install-data install-data-am \
+	install-exec install-exec-am install-includeHEADERS \
+	install-info install-info-am install-libLTLIBRARIES \
+	install-m4dataDATA install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binSCRIPTS \
+	uninstall-includeHEADERS uninstall-info-am \
+	uninstall-libLTLIBRARIES uninstall-m4dataDATA
 
 
 gts-config: gts-config.in
@@ -481,15 +659,17 @@ gts-config: gts-config.in
 predicates.o: predicates.c predicates_init.h predicates.h
 	$(COMPILE) -c $(srcdir)/predicates.c
 
+predicates_init: predicates_init.c rounding.h
+	$(COMPILE) $(srcdir)/predicates_init.c -o $(srcdir)/predicates_init
+
 predicates_init.h: predicates_init
 	./predicates_init >  $(srcdir)/predicates_init.h
 
 gts.def: libgts.la .libs/libgts.a
-	nm -g .libs/libgts.a | awk 'BEGIN{print "EXPORTS"}{if ($$2 == "T") print "    " $$3}' > gts.def
+	nm -g .libs/libgts.a | awk 'BEGIN{print "EXPORTS"}{if ($$2 == "T" || $$2 == "D" || $$2 == "B") print "    " $$3}' > gts.def
 
 dist-hook: gts.def
 	cd $(distdir); rm -f $(BUILT_SOURCES)
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
diff --git a/src/bbtree.c b/src/bbtree.c
index 4be35d5..1aef141 100644
--- a/src/bbtree.c
+++ b/src/bbtree.c
@@ -447,17 +447,17 @@ void gts_bbox_point_distance2 (GtsBBox * bb, GtsPoint * p,
  * @bb: a #GtsBBox.
  * @p: a #GtsPoint.
  *
- * Returns: %TRUE if the ray starting at @p and ending at (@p->x,
- * @p->y, +infty) intersects with @bb, %FALSE otherwise.
+ * Returns: %TRUE if the ray starting at @p and ending at (+infty,
+ * @p->y, @p->z) intersects with @bb, %FALSE otherwise.
  */
 gboolean gts_bbox_is_stabbed (GtsBBox * bb, GtsPoint * p)
 {
   g_return_val_if_fail (bb != NULL, FALSE);
   g_return_val_if_fail (p != NULL, FALSE);
 
-  if (p->x < bb->x1 || p->x > bb->x2 ||
+  if (p->x > bb->x2 ||
       p->y < bb->y1 || p->y > bb->y2 ||
-      p->z > bb->z2)
+      p->z < bb->z1 || p->z > bb->z2)
     return FALSE;
   return TRUE;
 }
@@ -475,7 +475,8 @@ gboolean gts_bbox_is_stabbed (GtsBBox * bb, GtsPoint * p)
  * direction is always chosen as perpendicular to the longest
  * dimension of the bounding box.
  *
- * Returns: a new hierarchy of bounding boxes.  */
+ * Returns: a new hierarchy of bounding boxes.  
+ */
 GNode * gts_bb_tree_new (GSList * bboxes)
 {
   GSList * i, * positive = NULL, * negative = NULL;
@@ -601,7 +602,8 @@ GSList * gts_bb_tree_stabbed (GNode * tree, GtsPoint * p)
  * @tree: a bounding box tree.
  * @bbox: a #GtsBBox.
  *
- * Returns: a list of bounding boxes, leaves of @tree which overlap @bbox.  */
+ * Returns: a list of bounding boxes, leaves of @tree which overlap @bbox.
+ */
 GSList * gts_bb_tree_overlap (GNode * tree, GtsBBox * bbox)
 {
   GSList * list = NULL;
@@ -1081,8 +1083,8 @@ static void surface_distance_foreach_triangle (GtsTriangle * t,
 
   area = gts_triangle_area (t);
   *total_area += area;
-  range->mean += area*range_triangle.mean;
-  range->stddev += area*range_triangle.mean*range_triangle.mean;
+  range->sum += area*range_triangle.mean;
+  range->sum2 += area*range_triangle.mean*range_triangle.mean;
 }
 
 /**
@@ -1129,12 +1131,15 @@ void gts_bb_tree_surface_distance (GNode * tree,
 			    data);
 
   if (total_area > 0.) {
-    range->stddev = sqrt ((range->stddev - range->mean*range->mean/total_area)
-			  /total_area);
-    range->mean /= total_area;
+    if (range->sum2 - range->sum*range->sum/total_area >= 0.)
+      range->stddev = sqrt ((range->sum2 - range->sum*range->sum/total_area)
+			    /total_area);
+    else
+      range->stddev = 0.;
+    range->mean = range->sum/total_area;
   }
   else
-    range->min = range->max = 0.;
+    range->min = range->max = range->mean = range->stddev = 0.;
 }
 
 static void surface_distance_foreach_boundary (GtsEdge * e,
@@ -1158,8 +1163,8 @@ static void surface_distance_foreach_boundary (GtsEdge * e,
     
     length = gts_point_distance (GTS_POINT (s->v1), GTS_POINT (s->v2));
     *total_length += length;
-    range->mean += length*range_edge.mean;
-    range->stddev += length*range_edge.mean*range_edge.mean;
+    range->sum += length*range_edge.mean;
+    range->sum2 += length*range_edge.mean*range_edge.mean;
   }
 }
 
@@ -1208,11 +1213,14 @@ void gts_bb_tree_surface_boundary_distance (GNode * tree,
 			    data);
 
   if (total_length > 0.) {
-    range->stddev = sqrt ((range->stddev - 
-			   range->mean*range->mean/total_length)
-			  /total_length);
-    range->mean /= total_length;
+    if (range->sum2 - range->sum*range->sum/total_length >= 0.)
+      range->stddev = sqrt ((range->sum2 - 
+			     range->sum*range->sum/total_length)
+			    /total_length);
+    else
+      range->stddev = 0.;
+    range->mean = range->sum/total_length;
   }
   else
-    range->min = range->max = 0.;
+    range->min = range->max = range->mean = range->stddev = 0.;
 }
diff --git a/src/boolean.c b/src/boolean.c
index db06421..faa051e 100644
--- a/src/boolean.c
+++ b/src/boolean.c
@@ -1,5 +1,5 @@
 /* GTS - Library for the manipulation of triangulated surfaces
- * Copyright (C) 1999 St�phane Popinet
+ * Copyright (C) 1999--2002 St�phane Popinet
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -17,45 +17,16 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#include <math.h>
 #include "gts.h"
 
-/*#define DEBUG
-  #define DEBUG_NAMED*/
+/*#define DEBUG*/
+/*#define DEBUG_BOOLEAN*/
+/*#define CHECK_ORIENTED*/
 
 #ifdef DEBUG
-static void write_edges_vertices (GSList * edges, 
-				  GSList * vertices,
-				  FILE * fptr)
-{
-  GSList * i = vertices;
-  guint v = 1;
-  
-  fprintf (fptr, "%u %u 0\n", 
-	   g_slist_length (vertices), 
-	   g_slist_length (edges));
-  while (i) {
-    GtsPoint * p = i->data;
-    fprintf (fptr, "%.30g %.30g %.30g %p:%s\n",
-	     p->x, p->y, p->z, p, GTS_NVERTEX (p)->name);
-    GTS_OBJECT (p)->reserved = GUINT_TO_POINTER (v++);
-    i = i->next;
-  }
-  i = edges;
-  while (i) {
-    GtsSegment * s = i->data;
-    fprintf (fptr, "%u %u %p:%s\n", 
-	     GPOINTER_TO_UINT (GTS_OBJECT (s->v1)->reserved),
-	     GPOINTER_TO_UINT (GTS_OBJECT (s->v2)->reserved),
-	     s, GTS_NEDGE (s)->name);
-    i = i->next;
-  }
-  i = vertices;
-  while (i) {
-    GTS_OBJECT (i->data)->reserved = NULL;
-    i = i->next;
-  }
-}
-#endif
+#  include "gts-private.h"
+#endif /* DEBUG */
 
 static void surface_inter_destroy (GtsObject * object)
 {
@@ -105,23 +76,93 @@ GtsSurfaceInterClass * gts_surface_inter_class (void)
   return klass;
 }
 
-/* see gts_segment_triangle_intersection() for a description.
- * @cut is set to the edge of @t exactly cut by @s or %NULL otherwise.
- */
+/* EdgeInter: Header */
+
+typedef struct _EdgeInter         EdgeInter;
+
+struct _EdgeInter {
+  GtsEdge parent;
+
+  GtsTriangle * t1, * t2;
+};
+
+#define EDGE_INTER(obj)            GTS_OBJECT_CAST (obj,\
+					         EdgeInter,\
+					         edge_inter_class ())
+#define IS_EDGE_INTER(obj)         (gts_object_is_from_class (obj,\
+						 edge_inter_class ()))
+
+static GtsEdgeClass * edge_inter_class  (void);
+static EdgeInter * edge_inter_new    (GtsVertex * v1, GtsVertex * v2,
+				      GtsTriangle * t1, GtsTriangle * t2);
+
+/* EdgeInter: Object */
+
+static GtsEdgeClass * edge_inter_class (void)
+{
+  static GtsEdgeClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo edge_inter_info = {
+      "EdgeInter",
+      sizeof (EdgeInter),
+      sizeof (GtsEdgeClass),
+      (GtsObjectClassInitFunc) NULL,
+      (GtsObjectInitFunc) NULL,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_constraint_class ()),
+				  &edge_inter_info);
+  }
+
+  return klass;
+}
+
+static EdgeInter * edge_inter_new (GtsVertex * v1, GtsVertex * v2,
+				   GtsTriangle * t1, GtsTriangle * t2)
+{
+  EdgeInter * object;
+
+  object = EDGE_INTER (gts_edge_new (GTS_EDGE_CLASS (edge_inter_class ()), 
+				     v1, v2));
+  object->t1 = t1;
+  object->t2 = t2;
+
+  return object;
+}
+
+#ifdef DEBUG
+static void write_surface_graph (GtsSurface * s, FILE * fp)
+{
+  GSList * l = NULL;
+  GtsGraph * g;
+  static void add_to_list (gpointer data, GSList ** l) {
+    *l = g_slist_prepend (*l, data);
+  }
+
+  gts_surface_foreach_vertex (s, (GtsFunc) gts_object_reset_reserved, NULL);
+  gts_surface_foreach_edge (s, (GtsFunc) gts_object_reset_reserved, NULL);
+  gts_surface_foreach_edge (s, (GtsFunc) add_to_list, &l);
+  g = gts_segments_graph_new (gts_graph_class (), l);
+  gts_graph_write_dot (g, fp);
+  gts_object_destroy (GTS_OBJECT (g));
+  g_slist_free (l);
+}
+#endif /* DEBUG */
+
 static GtsPoint * segment_triangle_intersection (GtsSegment * s,
 						 GtsTriangle * t,
-						 GtsPointClass * klass,
-						 GtsEdge ** cut)
+						 GtsPointClass * klass)
 {
   GtsPoint * A, * B, * C, * D, * E;
-  gdouble ABCE, ABCD, ADCE, ABDE, BCDE;
-  GtsPoint * pi = NULL;
+  gint ABCE, ABCD, ADCE, ABDE, BCDE;
   GtsEdge * AB, * BC, * CA;
+  gdouble a, b, c;
 
   g_return_val_if_fail (s != NULL, NULL);
   g_return_val_if_fail (t != NULL, NULL);
   g_return_val_if_fail (klass != NULL, NULL);
-  g_return_val_if_fail (cut != NULL, NULL);
 
   gts_triangle_vertices_edges (t, NULL, 
 			       (GtsVertex **) &A, 
@@ -130,485 +171,1429 @@ static GtsPoint * segment_triangle_intersection (GtsSegment * s,
 			       &AB, &BC, &CA);
   D = GTS_POINT (s->v1);
   E = GTS_POINT (s->v2);
-  *cut = NULL;
 
-  ABCE = gts_point_orientation_3d (A, B, C, E);
-  ABCD = gts_point_orientation_3d (A, B, C, D);
-  if (ABCE < 0.0 || ABCD > 0.0) {
+  ABCE = gts_point_orientation_3d_sos (A, B, C, E);
+  ABCD = gts_point_orientation_3d_sos (A, B, C, D);
+  if (ABCE < 0 || ABCD > 0) {
     GtsPoint * tmpp;
-    gdouble tmp;
+    gint tmp;
+
     tmpp = E; E = D; D = tmpp;
     tmp = ABCE; ABCE = ABCD; ABCD = tmp;
   }
-  if (ABCE < 0.0 || ABCD > 0.0)
+  if (ABCE < 0 || ABCD > 0)
     return NULL;
-  ADCE = gts_point_orientation_3d (A, D, C, E);
-  if (ADCE < 0.)
+  ADCE = gts_point_orientation_3d_sos (A, D, C, E);
+  if (ADCE < 0)
     return NULL;
-  ABDE = gts_point_orientation_3d (A, B, D, E);
-  if (ABDE < 0.)
+  ABDE = gts_point_orientation_3d_sos (A, B, D, E);
+  if (ABDE < 0)
     return NULL;
-  BCDE = gts_point_orientation_3d (B, C, D, E);
-  if (BCDE < 0.)
+  BCDE = gts_point_orientation_3d_sos (B, C, D, E);
+  if (BCDE < 0)
     return NULL;
-  if (ABCE == 0.0) {
-    if (ABCD == 0.0)
-      /* s is contained in the plane defined by t*/
-      return NULL;
-    pi = E;
-  }
-  else if (ABCD == 0.0)
-    pi = D;
-  if (ABDE == 0.) {
-    if (ADCE == 0.) {
-      if (pi && pi != A) {
-	gts_vertex_replace (GTS_VERTEX (A), GTS_VERTEX (pi));
-	gts_object_destroy (GTS_OBJECT (A));
-	return pi;
+  a = gts_point_orientation_3d (A, B, C, E);
+  b = gts_point_orientation_3d (A, B, C, D);
+  if (a != b) {
+    c = a/(a - b);
+    return gts_point_new (klass,
+			  E->x + c*(D->x - E->x),
+			  E->y + c*(D->y - E->y),
+			  E->z + c*(D->z - E->z));
+  }
+  /* D and E are contained within ABC */
+#ifdef DEBUG
+  fprintf (stderr, 
+	   "segment: %p:%s triangle: %p:%s intersection\n"
+	   "D and E contained in ABC\n",
+	   s, GTS_NEDGE (s)->name, t, GTS_NFACE (t)->name);
+#endif /* DEBUG */  
+  g_assert (a == 0.); 
+  return gts_point_new (klass,
+			(E->x + D->x)/2.,
+			(E->y + D->y)/2.,
+			(E->z + D->z)/2.);
+}
+
+static gint triangle_triangle_orientation (GtsPoint * p1, 
+					   GtsPoint * p2, GtsPoint * p3,
+					   GtsPoint * p4, GtsPoint * p5,
+					   GtsPoint * p6)
+{
+  gint o4 = 0, o5 = 0, o6 = 0;
+
+  if (p4 != p1 && p4 != p2 && p4 != p3)
+    o4 = gts_point_orientation_3d_sos (p1, p2, p3, p4);
+  if (p5 != p1 && p5 != p2 && p5 != p3)
+    o5 = gts_point_orientation_3d_sos (p1, p2, p3, p5);
+  if (o4*o5 < 0)
+    return 0;
+  if (p6 != p1 && p6 != p2 && p6 != p3)
+    o6 = gts_point_orientation_3d_sos (p1, p2, p3, p6);
+  if (o4*o6 < 0 || o5*o6 < 0)
+    return 0;
+  if (o4) return o4;
+  if (o5) return o5;
+  g_assert (o6);
+  return o6;
+}
+
+static gint triangle_point_orientation (GtsTriangle * t1, 
+					GtsTriangle * t2,
+					gint o1,
+					GtsPoint * p)
+{
+  GtsPoint * p1 = GTS_POINT (GTS_SEGMENT (t1->e1)->v1);
+  GtsPoint * p2 = GTS_POINT (GTS_SEGMENT (t1->e1)->v2);
+  GtsPoint * p3 = GTS_POINT (gts_triangle_vertex (t1));
+  GtsPoint * p4 = GTS_POINT (GTS_SEGMENT (t2->e1)->v1);
+  GtsPoint * p5 = GTS_POINT (GTS_SEGMENT (t2->e1)->v2);
+  GtsPoint * p6 = GTS_POINT (gts_triangle_vertex (t2));
+  gint o = triangle_triangle_orientation (p1, p2, p3, p4, p5, p6);
+
+  if (o != 0)
+    return o;
+  o = triangle_triangle_orientation (p4, p5, p6, p1, p2, p3);
+  if (o != 0) {
+    gint o2 = gts_point_orientation_3d_sos (p4, p5, p6, p);
+
+    return - o*o1*o2;
+  }
+  return 0;
+}
+
+static void add_edge_inter (GtsEdge * e,
+			    GtsTriangle * t,
+			    GtsVertex * v)
+{
+  GtsVertex * ev1 = GTS_SEGMENT (e)->v1, * ev2 = GTS_SEGMENT (e)->v2;
+  GList * i = GTS_OBJECT (e)->reserved;
+
+  GTS_OBJECT (v)->reserved = t;
+  if (i == NULL) {
+    GTS_OBJECT (e)->reserved = g_list_prepend (NULL, v);
+#ifdef DEBUG
+    fprintf (stderr, "add_edge_inter: inserting %p (%p,%p)\n", v, e, t);
+#endif /* DEBUG */
+  }
+  else {
+    GtsPoint * p1 = GTS_POINT (GTS_SEGMENT (t->e1)->v1);
+    GtsPoint * p2 = GTS_POINT (GTS_SEGMENT (t->e1)->v2);
+    GtsPoint * p3 = GTS_POINT (gts_triangle_vertex (t));
+    gint o1, oref = gts_point_orientation_3d_sos (p1, p2, p3, GTS_POINT (ev1));
+    
+    o1 = oref;
+    while (i) {
+      gint o2 = triangle_point_orientation (t, GTS_OBJECT (i->data)->reserved,
+					    oref, GTS_POINT (ev1));
+
+      if (o2 == 0) {
+#ifdef DEBUG
+	g_warning ("add_edge_inter: safe sign evaluation failed\n");
+#endif /* DEBUG */
+	o2 = gts_point_orientation_3d_sos (p1, p2, p3, i->data);
       }
-      return A;
+
+      if (o1*o2 < 0)
+	break;
+      ev1 = i->data;
+      o1 = o2;
+      i = i->next;
     }
-    if (BCDE == 0.) {
-      if (pi && pi != B) {
-	gts_vertex_replace (GTS_VERTEX (B), GTS_VERTEX (pi));
-	gts_object_destroy (GTS_OBJECT (B));
-	return pi;
-      }
-      return B;
+    if (i != NULL) {
+      GList * n = g_list_prepend (NULL, v);
+
+      ev2 = i->data;
+      n->next = i;
+      n->prev = i->prev;
+      i->prev = n;
+      if (n->prev == NULL)
+	GTS_OBJECT (e)->reserved = n;
+      else
+	n->prev->next = n;
     }
-    *cut = AB;
-  }
-  else if (BCDE == 0.) {
-    if (ADCE == 0.) {
-      if (pi && pi != C) {
-	gts_vertex_replace (GTS_VERTEX (C), GTS_VERTEX (pi));
-	gts_object_destroy (GTS_OBJECT (C));
-	return pi;
-      }
-      return C;
+    else {
+      g_assert (o1*gts_point_orientation_3d_sos (p1, p2, p3, GTS_POINT (ev2))
+		< 0);
+      GTS_OBJECT (e)->reserved = g_list_append (GTS_OBJECT (e)->reserved, v);
     }
-    *cut = BC;
-  }
-  else if (ADCE == 0.)
-    *cut = CA;
-  if (pi == NULL) {
-    gdouble c = ABCE/(ABCE - ABCD);
-    pi = gts_point_new (klass,
-			E->x + c*(D->x - E->x),
-			E->y + c*(D->y - E->y),
-			E->z + c*(D->z - E->z));
+#ifdef DEBUG
+    fprintf (stderr, 
+	     "add_edge_inter: inserting %p (%p,%p) between %p and %p\n", 
+	     v, e, t, ev1, ev2);
+    i = GTS_OBJECT (e)->reserved;
+    while (i) {
+      fprintf (stderr, " %p", i->data);
+      i = i->next;
+    }
+    fprintf (stderr, "\n");
+#endif /* DEBUG */
   }
-  return pi;
 }
 
-#define prepend_unique(list, data) (g_slist_find (list, data) ?\
-				    list :\
-				    g_slist_prepend (list, data))
-
 static GtsVertex * intersects (GtsEdge * e,
 			       GtsTriangle * t,
-			       GtsSurface * surface)
+			       GtsSurface * s)
+{
+  GList * i = GTS_OBJECT (e)->reserved;
+  GtsVertex * v;
+
+  while (i) {
+    if (GTS_OBJECT (i->data)->reserved == t)
+      return i->data;
+    i = i->next;
+  }
+
+  v = GTS_VERTEX (segment_triangle_intersection (GTS_SEGMENT (e), t, 
+				    GTS_POINT_CLASS (s->vertex_class)));
+  if (v != NULL) {
+#ifdef DEBUG
+    if (GTS_IS_NVERTEX (v) && GTS_IS_NEDGE (e) && GTS_IS_NFACE (t) &&
+	GTS_NVERTEX (v)->name[0] == '\0')
+      g_snprintf (GTS_NVERTEX (v)->name, GTS_NAME_LENGTH, "%s|%s",
+		  GTS_NEDGE (e)->name, GTS_NFACE (t)->name);
+#endif /* DEBUG */
+    if (s->vertex_class->intersection_attributes)
+      (*s->vertex_class->intersection_attributes)
+	(v, GTS_OBJECT (e), GTS_OBJECT (t));
+    add_edge_inter (e, t, v);
+  }
+  return v;
+}
+
+/* see figure misc/orientation.fig */
+static gint intersection_orientation (GtsTriangle * t1, 
+				      GtsEdge * e,
+				      GtsTriangle * t2)
 {
-  GtsPoint * pi;
-  GtsVertex * vi = NULL;
-  GSList * vertices = GTS_OBJECT (e)->reserved, * i;
-  GtsEdge * cut;
-  GtsSegment * s;
   GtsVertex * v1, * v2, * v3;
+  GtsEdge * e2, * e3;
+  GtsVertex * v4, * v5, * v6;
+
+  gts_triangle_vertices_edges (t1, e, &v1, &v2, &v3, &e, &e2, &e3);
+  gts_triangle_vertices (t2, &v4, &v5, &v6);
+
+  return gts_point_orientation_3d_sos (GTS_POINT (v4), 
+				       GTS_POINT (v5), 
+				       GTS_POINT (v6),
+				       GTS_POINT (v2));
+}
+
+#define UPDATE_ORIENTATION if (o > 0) { vi2 = v; e2 = e; } else { vi2 = vi1;\
+                                                                  e2 = e1;\
+                                                                  vi1 = v;\
+                                                                  e1 = e; }
+
+static void intersect_edges (GtsBBox * bb1, GtsBBox * bb2,
+			     GtsSurfaceInter * si)
+{
+  GtsSurface * s1 = GTS_OBJECT (si->s1)->reserved;
+  GtsTriangle * t1 = GTS_TRIANGLE (bb1->bounded);
+  GtsTriangle * t2 = GTS_TRIANGLE (bb2->bounded);
+  GtsVertex * v, * vi1 = NULL, * vi2 = NULL;
+  GtsEdge * e1 = NULL, * e2 = NULL, * e;
+
+  vi1 = intersects (t2->e1, t1, s1);
+  e1 = t2->e1;
+  v = intersects (t2->e2, t1, s1);
+  e = t2->e2;
+  if (!vi1) {
+    vi1 = v;
+    e1 = e;
+  }
+  else if (v) {
+    gint o = intersection_orientation (t2, t2->e2, t1);
+    UPDATE_ORIENTATION;
+  }
+  if (!vi2) {
+    v = intersects (t2->e3, t1, s1);
+    e = t2->e3;
+    if (!vi1) {
+      vi1 = v;
+      e1 = e;
+    }
+    else if (v) {
+      gint o = intersection_orientation (t2, t2->e3, t1);
+      UPDATE_ORIENTATION;
+    }
+  }
+  if (!vi2) {
+    v = intersects (t1->e1, t2, s1);
+    e = t1->e1;
+    if (!vi1) {
+      vi1 = v;
+      e1 = e;
+    }
+    else if (v) {
+      gint o = - intersection_orientation (t1, t1->e1, t2);
+      UPDATE_ORIENTATION;
+    }
+  }
+  if (!vi2) {
+    v = intersects (t1->e2, t2, s1);
+    e = t1->e2;
+    if (!vi1) {
+      vi1 = v;
+      e1 = e;
+    }
+    else if (v) {
+      gint o = - intersection_orientation (t1, t1->e2, t2);
+      UPDATE_ORIENTATION;
+    }
+  }
+  if (!vi2) {
+    v = intersects (t1->e3, t2, s1);
+    e = t1->e3;
+    if (!vi1) {
+      vi1 = v;
+      e1 = e;
+    }
+    else if (v) {
+      gint o = - intersection_orientation (t1, t1->e3, t2);
+      UPDATE_ORIENTATION;
+    }
+  }
+
+  g_assert ((!vi1 && !vi2) || (vi1 && vi2));
+  if (vi1) {
+    GtsEdge * e = GTS_EDGE (edge_inter_new (vi1, vi2, t1, t2));
+
+#ifdef DEBUG
+    fprintf (stderr, "creating constraint %p: %p->%p: %p/%p\n", 
+	     e, vi1, vi2, t1, t2);
+#endif /* DEBUG */
+    gts_surface_add_face (si->s1, GTS_FACE (t1));
+    gts_surface_add_face (si->s2, GTS_FACE (t2));
+    si->edges = g_slist_prepend (si->edges, e);
+    GTS_OBJECT (t1)->reserved = g_slist_prepend (GTS_OBJECT (t1)->reserved, e);
+    GTS_OBJECT (t2)->reserved = g_slist_prepend (GTS_OBJECT (t2)->reserved, e);
+  }
+}
 
-  gts_triangle_vertices (t, &v1, &v2, &v3);
-  i = vertices;
+static GtsSurfaceInter * surface_inter_new (GtsSurfaceInterClass * klass,
+					    GtsSurface * s1,
+					    GtsSurface * s2,
+					    GNode * faces_tree1,
+					    GNode * faces_tree2)
+{
+  GtsSurfaceInter * si;
+
+  si = GTS_SURFACE_INTER (gts_object_new (GTS_OBJECT_CLASS (klass)));
+  si->s1 = gts_surface_new (gts_surface_class (),
+			    s1->face_class,
+			    s1->edge_class,
+			    s1->vertex_class);
+  GTS_OBJECT (si->s1)->reserved = s1;
+  si->s2 = gts_surface_new (gts_surface_class (),
+			    s2->face_class,
+			    s2->edge_class,
+			    s2->vertex_class);
+  GTS_OBJECT (si->s2)->reserved = s2;
+  gts_bb_tree_traverse_overlapping (faces_tree1, faces_tree2,
+				    (GtsBBTreeTraverseFunc) intersect_edges, 
+				    si);
+
+  return si;
+}
+
+static void free_slist (GtsObject * o)
+{
+  g_slist_free (o->reserved);
+  o->reserved = NULL;
+}
+
+static void free_glist (GtsObject * o)
+{
+  g_list_foreach (o->reserved, (GFunc) gts_object_reset_reserved, NULL);
+  g_list_free (o->reserved);
+  o->reserved = NULL;
+}
+
+/**
+ * gts_surface_intersection:
+ * @s1: a #GtsSurface.
+ * @s2: a #GtsSurface.
+ * @faces_tree1: a bounding box tree (see gts_bb_tree_new()) for
+ * the faces of @s1.
+ * @faces_tree2: a bounding box tree for the faces of @s2.
+ *
+ * Returns: a list of #GtsEdge defining the curve intersection of the
+ * two surfaces.
+ */
+GSList * gts_surface_intersection (GtsSurface * s1,
+				   GtsSurface * s2,
+				   GNode * faces_tree1,
+				   GNode * faces_tree2)
+{
+  GtsSurfaceInter * si;
+  GSList * inter;
+
+  g_return_val_if_fail (s1 != NULL, NULL);
+  g_return_val_if_fail (s2 != NULL, NULL);
+  g_return_val_if_fail (faces_tree1 != NULL, NULL);
+  g_return_val_if_fail (faces_tree2 != NULL, NULL);
+
+  si = surface_inter_new (gts_surface_inter_class (),
+			  s1, s2, faces_tree1, faces_tree2);
+
+  gts_surface_foreach_face (si->s1, (GtsFunc) free_slist, NULL);
+  gts_surface_foreach_face (si->s2, (GtsFunc) free_slist, NULL);
+  gts_surface_foreach_edge (si->s1, (GtsFunc) free_glist, NULL);
+  gts_surface_foreach_edge (si->s2, (GtsFunc) free_glist, NULL);
+  inter = si->edges;
+  si->edges = NULL;
+  gts_object_destroy (GTS_OBJECT (si));
+
+  return inter;  
+}
+
+typedef enum {
+  INTERIOR = 1 << (GTS_USER_FLAG),
+  RELEVANT = 1 << (GTS_USER_FLAG + 1)
+} CurveFlag;
+
+#define IS_SET(s, f) ((GTS_OBJECT_FLAGS (s) & (f)) != 0)
+#define SET(s, f)   (GTS_OBJECT_FLAGS (s) |= (f))
+#define UNSET(s, f) (GTS_OBJECT_FLAGS (s) &= ~(f))
+#define NEXT(s)  (GTS_OBJECT (s)->reserved)
+
+#ifdef DEBUG
+static void print_segment (GtsSegment * s)
+{
+  fprintf (stderr, "%p: %s->%s ", s,
+	   GTS_NVERTEX (s->v1)->name,
+	   GTS_NVERTEX (s->v2)->name);
+  if (NEXT (s)) {
+    GtsSegment * next = NEXT (s);
+
+    fprintf (stderr, "next %p: %s->%s\n", next,
+	     GTS_NVERTEX (next->v1)->name,
+	     GTS_NVERTEX (next->v2)->name);
+  }
+  else
+    fprintf (stderr, "next NULL\n");
+}
+
+static void write_nodes (GSList * i, GHashTable * hash, guint * nn,
+			 FILE * fp)
+{
   while (i) {
-    GtsVertex * v = i->data;
-    gpointer cut = GTS_OBJECT (v)->reserved;
-    if (cut == t || 
-	cut == t->e1 || cut == t->e2 || cut == t->e3 ||
-	v == v1 || v == v2 || v == v3)
-      return v;
+    GtsSegment * s = i->data;
+
+    if (!g_hash_table_lookup (hash, s->v1)) {
+      fprintf (fp, "  %u [ label = \"%p\" ];\n", *nn, s->v1);
+      g_hash_table_insert (hash, s->v1, GUINT_TO_POINTER ((*nn)++));
+    }
+    if (!g_hash_table_lookup (hash, s->v2)) {
+      fprintf (fp, "  %u [ label = \"%p\" ];\n", *nn, s->v2);
+      g_hash_table_insert (hash, s->v2, GUINT_TO_POINTER ((*nn)++));
+    }
     i = i->next;
   }
-  s = GTS_SEGMENT (e);
-  /* Warning: wild cast! */
-  pi = segment_triangle_intersection (s, t,
-		  GTS_POINT_CLASS (surface->vertex_class), &cut);
-  if (pi) {
-    vi = GTS_VERTEX (pi);
-    if (cut) {
-      GtsObject * o = GTS_OBJECT (cut);
+}
 
-      i = o->reserved;
-      while (i) {
-	GtsVertex * v = i->data;
-	if (v != vi && GTS_OBJECT (v)->reserved == e) {
-	  gts_object_destroy (GTS_OBJECT (vi));
-	  vi = v;
+static void write_edges (GSList * i, GHashTable * hash, 
+			 GtsSurface * surface,
+			 FILE * fp)
+{
+  while (i) {
+    GtsSegment * s = i->data;
+
+    fprintf (fp, "  %u -> %u [ label = \"%p:%d\" ];\n",
+	     GPOINTER_TO_UINT (g_hash_table_lookup (hash, s->v1)),
+	     GPOINTER_TO_UINT (g_hash_table_lookup (hash, s->v2)),
+	     s,
+	     gts_edge_face_number (GTS_EDGE (s), surface));
+    i = i->next;
+  }
+}
+
+static void write_graph (GSList * boundary, GSList * interior,
+			 GtsSurface * surface,
+			 FILE * fp)
+{
+  GHashTable * hash = g_hash_table_new (NULL, NULL);
+  guint nn = 1;
+  
+  fprintf (fp, "digraph oriented_curve {\n");
+  write_nodes (boundary, hash, &nn, fp);
+  write_nodes (interior, hash, &nn, fp);
+  write_edges (boundary, hash, surface, fp);
+  fprintf (fp, "  edge [ color = red ];\n");
+  write_edges (interior, hash, surface, fp);
+  fprintf (fp, "}\n");
+  g_hash_table_destroy (hash);
+}
+
+static void write_graph1 (GtsSegment * start, GSList * i,
+			  GtsSurface * surface,
+			  FILE * fp)
+{
+  GSList * boundary = NULL, * interior = NULL;
+  GtsSegment * s = start;
+
+  do {
+    boundary = g_slist_prepend (boundary, s);
+    s = NEXT (s);
+  } while (s != start);
+  while (i) {
+    if (IS_SET (i->data, INTERIOR))
+      interior = g_slist_prepend (interior, i->data);
+    i = i->next;
+  }
+  write_graph (boundary, interior, surface, fp);
+  g_slist_free (boundary);
+  g_slist_free (interior);
+}
+
+static void print_loop (GtsSegment * start, FILE * fp)
+{
+  GtsSegment * s = start;
+
+  do {
+    fprintf (fp, "  %p: %p:%s -> %p:%s\n",
+	     s, 
+	     s->v1, GTS_NVERTEX (s->v1)->name, 
+	     s->v2, GTS_NVERTEX (s->v2)->name);
+    s = NEXT (s);
+  } while (s != start && s != NULL);
+}
+
+static void draw_vector (GtsPoint * p1, GtsPoint * p2, FILE * fp)
+{
+  gdouble x = p2->x - p1->x;
+  gdouble y = p2->y - p1->y;
+  gdouble z = p2->z - p1->z;
+
+  fprintf (fp, "VECT 1 3 0 3 0 %g %g %g %g %g %g %g %g %g\n",
+	   p1->x + x - (x - y/2.)/5.,
+	   p1->y + y - (x/2. + y)/5.,
+	   p1->z + z - (x/2. + z)/5.,
+	   p1->x + x,
+	   p1->y + y,
+	   p1->z + z,
+	   p1->x + x - (x + y/2.)/5.,
+	   p1->y + y + (x/2. - y)/5.,
+	   p1->z + z + (x/2. - z)/5.);
+  fprintf (fp, "VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
+	   p1->x, p1->y, p1->z,
+	   p1->x + x,
+	   p1->y + y,
+	   p1->z + z);
+}
+
+static void draw_vector1 (GtsPoint * p1, GtsPoint * p2, GtsPoint * o,
+			  FILE * fp)
+{
+  gdouble x1 = o->x + 0.9*(p1->x - o->x);
+  gdouble y1 = o->y + 0.9*(p1->y - o->y);
+  gdouble z1 = o->z + 0.9*(p1->z - o->z);
+  gdouble x2 = o->x + 0.9*(p2->x - o->x);
+  gdouble y2 = o->y + 0.9*(p2->y - o->y);
+  gdouble z2 = o->z + 0.9*(p2->z - o->z);
+  gdouble x = x2 - x1;
+  gdouble y = y2 - y1;
+  gdouble z = z2 - z1;
+
+  fprintf (fp, "VECT 1 3 0 3 0 %g %g %g %g %g %g %g %g %g\n",
+	   x1 + x - (x - y/2.)/5.,
+	   y1 + y - (x/2. + y)/5.,
+	   z1 + z - (x/2. + z)/5.,
+	   x1 + x,
+	   y1 + y,
+	   z1 + z,
+	   x1 + x - (x + y/2.)/5.,
+	   y1 + y + (x/2. - y)/5.,
+	   z1 + z + (x/2. - z)/5.);
+  fprintf (fp, "VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
+	   x1, y1, z1,
+	   x1 + x,
+	   y1 + y,
+	   z1 + z);
+}
+
+static void write_segments (GSList * boundary, GSList * interior,
+			    FILE * fp)
+{
+  GSList * i = boundary;
+
+  fprintf (fp, "LIST {\n");
+  while (i) {
+    GSList * inext = i->next;
+    GtsSegment * s = i->data;
+    GtsSegment * next = inext ? inext->data : boundary->data;
+    GtsVertex * v1, * v2;
+
+    if (s->v1 != next->v1 && s->v1 != next->v2) {
+      v1 = s->v1;
+      v2 = s->v2;
+    }
+    else {
+      v1 = s->v2;
+      v2 = s->v1;
+    }
+    draw_vector (GTS_POINT (v1), GTS_POINT (v2), fp);
+    i = inext;
+  }
+  i = interior;
+  while (i) {
+    GtsSegment * s = i->data;
+
+    draw_vector (GTS_POINT (s->v1), GTS_POINT (s->v2), fp);
+    i = i->next;
+  }
+  fprintf (fp, "}\n");
+}
+
+static void write_loops (GSList * i, FILE * fp)
+{
+  guint nl = 0;
+
+  while (i) {
+    GtsSegment * start = i->data, * s;
+    GtsPoint os;
+    guint n = 0;
+
+    fprintf (fp, "(geometry \"loop%d\" = LIST {\n", nl++);    
+
+    os.x = os.y = os.z = 0.;
+    s = start;
+    do {
+      GtsSegment * next = NEXT (s);
+      GtsPoint * p;
+      
+      if (s->v1 != next->v1 && s->v1 != next->v2)
+	p = GTS_POINT (s->v1);
+       else
+	 p = GTS_POINT (s->v2);
+      os.x += p->x; os.y += p->y; os.z += p->z; n++;
+      s = next;
+     } while (s != start);
+    os.x /= n; os.y /= n; os.z /= n;
+    
+    s = start;
+    do {
+      GtsSegment * next = NEXT (s);
+      
+      if (s->v1 != next->v1 && s->v1 != next->v2)
+	draw_vector1 (GTS_POINT (s->v1), GTS_POINT (s->v2), &os, fp);
+      else
+	 draw_vector1 (GTS_POINT (s->v2), GTS_POINT (s->v1), &os, fp);
+      s = next;
+    } while (s != start);
+    
+    fprintf (fp, "})\n");
+
+    i = i->next;
+  }
+}
+
+#define NAME(v) (GTS_IS_NVERTEX (v) ? GTS_NVERTEX (v)->name : "")
+#endif /* DEBUG */
+
+static GtsSegment * prev_flag (GtsSegment * s, CurveFlag flag)
+{
+  GSList * i = s->v1->segments;
+
+  while (i) {
+    if (i->data != s && IS_SET (i->data, flag))
+      return i->data;
+    i = i->next;
+  }
+  return NULL;
+}
+
+static GtsSegment * next_flag (GtsSegment * s, CurveFlag flag)
+{
+  GSList * i = s->v2->segments;
+
+  while (i) {
+    if (i->data != s && IS_SET (i->data, flag))
+      return i->data;
+    i = i->next;
+  }
+  return NULL;
+}
+
+static GtsSegment * next_interior (GtsVertex * v)
+{
+  GSList * i = v->segments;
+
+  while (i) {
+    GtsSegment * s = i->data;
+
+    if (s->v1 == v && IS_SET (s, INTERIOR))
+      return s;
+    i = i->next;
+  }
+  return NULL;
+}
+
+static GtsSegment * prev_interior (GtsVertex * v)
+{
+  GSList * i = v->segments;
+
+  while (i) {
+    GtsSegment * s = i->data;
+
+    if (s->v2 == v && IS_SET (s, INTERIOR))
+      return s;
+    i = i->next;
+  }
+  return NULL;
+}
+
+static GtsSegment * reverse (GtsSegment * start,
+			     gboolean interior,
+			     gboolean * isloop)
+{
+  GtsSegment * s = start, * prev = NULL, * rprev = NULL;
+  GtsSegment * rstart = NULL, * rstart1 = NULL;
+
+  do {
+    GtsSegment * rs;
+
+    g_assert (IS_EDGE_INTER (s));
+    rs = GTS_SEGMENT (edge_inter_new (s->v2, s->v1,
+				      EDGE_INTER (s)->t1, EDGE_INTER (s)->t2));
+
+    if (rstart == NULL)
+      rstart = rs;
+    else if (rstart1 == NULL)
+      rstart1 = rs;
+    if (interior)
+      SET (rs, INTERIOR);
+    NEXT (rs) = rprev;
+    rprev = rs;
+    prev = s;
+    s = NEXT (s);
+  } while (s != NULL && s != start);
+  if (s == start) {
+    NEXT (rstart) = rprev;
+    *isloop = TRUE;
+  }
+  else {
+    NEXT (rstart) = start;
+    NEXT (prev) = rprev;
+    *isloop = FALSE;
+  }    
+  return rstart1;
+}
+
+static GSList * interior_loops (GSList * interior)
+{
+  GSList * i = interior;
+  GSList * loops = NULL;
+
+  i = interior;
+  while (i) {
+    GtsSegment * s = i->data;
+
+    if (IS_SET (s, RELEVANT)) {
+      GtsSegment * start = s, * end;
+
+      do {
+	GtsSegment * next = next_flag (s, INTERIOR);
+
+	UNSET (s, RELEVANT);
+	end = s; 
+	s = NEXT (s) = next;
+      } while (s != NULL && s != start);
+
+      if (s == start)
+	loops = g_slist_prepend (loops, start);
+      else {
+	GtsSegment * next, * prev;
+	gboolean isloop;
+
+	s = prev_flag (start, INTERIOR);
+	while (s) {
+	  UNSET (s, RELEVANT);
+	  NEXT (s) = start;
+	  start = s;
+	  s = prev_flag (s, INTERIOR);
 	}
-	i = i->next;
+	next = next_flag (end, RELEVANT);
+	prev = prev_flag (start, RELEVANT);
+	if (prev != NULL)
+	  SET (start->v1, INTERIOR);
+	if (next != NULL)
+	  SET (end->v2, INTERIOR);
+	if (next == NULL && prev == NULL)
+	  loops = g_slist_prepend (loops, start);
+	else
+	  reverse (start, TRUE, &isloop);
+      }
+    }
+    i = i->next;
+  }
+  return loops;
+}
+
+#define ORIENTATION(p1,p2,p3,o) (gts_point_orientation_3d (p1, p2, o, p3))
+#define ORIENTATION_SOS(p1,p2,p3,o) (gts_point_orientation_3d_sos (p1, p2, o, p3))
+
+#define ORIENTED_VERTICES(s,next,w1,w2) {\
+  if ((s)->v1 == (next)->v1 || (s)->v1 == (next)->v2) {\
+    w1 = (s)->v2;\
+    w2 = (s)->v1;\
+  }\
+  else {\
+    w1 = (s)->v1;\
+    w2 = (s)->v2;\
+  }\
+}
+
+#if 0
+static GtsSegment * segment_intersects (GtsPoint * p1, GtsPoint * p2,
+					GSList * i,
+					GtsPoint * o)
+{
+  while (i) {
+    GtsSegment * s = i->data;
+    GtsPoint * p3 = GTS_POINT (s->v1);
+    GtsPoint * p4 = GTS_POINT (s->v2);
+
+    if (p3 != p1 && p3 != p2 && p4 != p1 && p4 != p2) {
+      gdouble o1 = ORIENTATION (p3, p4, p1, o);
+      gdouble o2 = ORIENTATION (p3, p4, p2, o);
+
+      if ((o1 < 0. && o2 > 0.) || (o1 > 0. && o2 < 0.)) {
+	o1 = ORIENTATION (p1, p2, p3, o);
+	o2 = ORIENTATION (p1, p2, p4, o);
+
+	if ((o1 <= 0. && o2 >= 0.) || (o1 >= 0. && o2 <= 0.))
+	  return s;
+      }
+    }
+    i = i->next;
+  }
+  return NULL;
+}
+#else
+static GtsSegment * segment_intersects (GtsPoint * p1, GtsPoint * p2,
+					GSList * i,
+					GtsPoint * o)
+{
+  while (i) {
+    GtsSegment * s = i->data;
+    GtsPoint * p3 = GTS_POINT (s->v1);
+    GtsPoint * p4 = GTS_POINT (s->v2);
+
+    if (p3 != p1 && p3 != p2 && p4 != p1 && p4 != p2) {
+      gint o1 = ORIENTATION_SOS (p3, p4, p1, o);
+      gint o2 = ORIENTATION_SOS (p3, p4, p2, o);
+
+      if (o1*o2 < 0) {
+	o1 = ORIENTATION_SOS (p1, p2, p3, o);
+	o2 = ORIENTATION_SOS (p1, p2, p4, o);
+
+	if (o1*o2 < 0)
+	  return s;
       }
-      GTS_OBJECT (vi)->reserved = cut;
-      o->reserved = prepend_unique (o->reserved, vi);
-#ifdef DEBUG_NAMED
-      if (GTS_NVERTEX (vi)->name[0] == '\0')
-	g_snprintf (GTS_NVERTEX (vi)->name, GTS_NAME_LENGTH, "%s|%s",
-		    GTS_NEDGE (e)->name, GTS_NEDGE (cut)->name);
+    }
+    i = i->next;
+  }
+  return NULL;
+}
 #endif
+
+static gboolean is_inside_wedge (GtsSegment * s1, GtsSegment * s2,
+				 GtsPoint * p, GtsPoint * o)
+{
+  GtsVertex * v1, * v2, * v3;
+
+  ORIENTED_VERTICES (s1, s2, v1, v2);
+  v3 = s2->v1 != v2 ? s2->v1 : s2->v2;
+
+  if (ORIENTATION (GTS_POINT (v1), GTS_POINT (v2), 
+		   GTS_POINT (v3), o) >= 0.) {
+    if (ORIENTATION (GTS_POINT (v1), GTS_POINT (v2), p, o) <= 0. ||
+	ORIENTATION (GTS_POINT (v2), GTS_POINT (v3), p, o) <= 0.)
+      return FALSE;
+  }
+  else if (ORIENTATION (GTS_POINT (v1), GTS_POINT (v2), p, o) <= 0. &&
+	   ORIENTATION (GTS_POINT (v2), GTS_POINT (v3), p, o) <= 0.)
+    return FALSE;
+  return TRUE;
+}
+
+static GtsSegment * connection (GtsPoint * p, 
+				GSList * interior,
+				GSList * bloops,
+				GtsPoint * o)
+{
+  while (bloops) {
+    GtsSegment * start = bloops->data, * s = start;
+
+    do {
+      GtsSegment * next = NEXT (s);
+      GtsVertex * v2 = s->v1 == next->v1 || s->v1 == next->v2 ? s->v1 : s->v2;
+
+      if (is_inside_wedge (s, next, p, o) &&
+	  !segment_intersects (p, GTS_POINT (v2), interior, o))
+	return s;
+      s = next;
+    } while (s != start);
+    bloops = bloops->next;
+  }
+  return NULL;
+}
+
+static gdouble loop_orientation (GtsSegment * start,
+				 GtsPoint * p, GtsPoint * o)
+{
+  GtsSegment * s = start;
+  gdouble or = 0.;
+
+  do {
+    GtsSegment * next = NEXT (s);
+    GtsVertex * v1, * v2;
+
+    ORIENTED_VERTICES (s, next, v1, v2);
+    or += ORIENTATION (p, GTS_POINT (v1), GTS_POINT (v2), o);
+    s = next;
+  } while (s != start);
+
+#ifdef DEBUG
+  fprintf (stderr, "loop orientation: %g\n", or);
+#endif /* DEBUG */
+
+  return or;
+}
+
+static void connect_interior_loop (GtsSegment * start,
+				   GSList ** interior,
+				   GSList ** bloops,
+				   GtsSurface * surface,
+				   GtsPoint * o)
+{
+  GtsSegment * s = start, * c = NULL, * next, * s1, * rs1, * rs;
+  GtsVertex * v, * cv;
+  gboolean isloop;
+
+  do {
+    if (!(c = connection (GTS_POINT (s->v2), *interior, *bloops, o)))
+      s = NEXT (s);
+  } while (s != start && !c);
+  g_assert (c);
+  next = NEXT (c);
+  v = c->v1 == next->v1 || c->v1 == next->v2 ? c->v1 : c->v2;
+  cv = s->v2;
+#ifdef DEBUG
+  fprintf (stderr, "connecting %p:%s with %p:%s\n", 
+	   cv, NAME (cv), v, NAME (v));
+  fprintf (stderr, "  c: %p: %p:%s %p:%s\n", c, 
+	   c->v1, NAME (c->v1),
+	   c->v2, NAME (c->v2));
+  fprintf (stderr, "  next: %p: %p:%s %p:%s\n", next,
+	   next->v1, NAME (next->v1),
+	   next->v2, NAME (next->v2));
+#endif /* DEBUG */
+  rs = reverse (s, FALSE, &isloop);
+  if (isloop) {
+    if (loop_orientation (rs, GTS_POINT (v), o) < 0.) {
+      GtsSegment * tmp = s;
+      s = rs;
+      rs = tmp;
+    }
+    *bloops = g_slist_prepend (*bloops, rs);
+  }
+  s1 = GTS_SEGMENT (gts_edge_new (surface->edge_class, v, cv));
+  rs1 = GTS_SEGMENT (gts_edge_new (surface->edge_class, cv, v));
+  NEXT (c) = s1;
+  NEXT (rs1) = next;
+  *interior = g_slist_prepend (*interior, s1);
+  NEXT (s1) = NEXT (s);
+  NEXT (s) = rs1;
+}
+
+static GSList * boundary_loops (GSList * boundary)
+{
+  GSList * i = boundary;  
+  GtsSegment * start = i->data;
+  GSList * loops = NULL;
+
+  while (i) {
+    GtsSegment * s = i->data;
+    GSList * inext = i->next;
+    GtsSegment * next = inext ? inext->data : start;
+    GtsVertex * v = s->v1 == next->v1 || s->v1 == next->v2 ? s->v1 : s->v2;
+
+    if (IS_SET (v, INTERIOR)) {
+      GtsSegment * intprev = prev_interior (v);
+
+      NEXT (intprev) = next;
+      NEXT (s) = next_interior (v);
+      UNSET (v, INTERIOR);
     }
-    else {
-      GTS_OBJECT (vi)->reserved = t;
-#ifdef DEBUG_NAMED
-      if (GTS_NVERTEX (vi)->name[0] == '\0')
-	g_snprintf (GTS_NVERTEX (vi)->name, GTS_NAME_LENGTH, "%s|%s",
-		    GTS_NEDGE (e)->name, GTS_NFACE (t)->name);
-#endif
+    else
+      NEXT (s) = next;
+    i = inext;
+  }
+
+  i = boundary;
+  while (i) {
+    start = i->data;
+    
+    if (IS_SET (start, RELEVANT)) {
+      GtsSegment * s = start;
+
+      do {
+	UNSET (s, RELEVANT);
+	UNSET (s, INTERIOR);
+	s = NEXT (s);
+      } while (s != start);
+      loops = g_slist_prepend (loops, start);
     }
-    if (vi != s->v1 && vi != s->v2)
-      GTS_OBJECT (s)->reserved = prepend_unique (vertices, vi);
+    i = i->next;
   }
-  return vi;
+
+  return loops;
 }
 
-/* see figure misc/orientation.fig */
-static gdouble intersection_orientation (GtsTriangle * t1, 
-					 GtsEdge * e,
-					 GtsTriangle * t2)
-{
+typedef struct _Ear    Ear;
+
+struct _Ear {
   GtsVertex * v1, * v2, * v3;
-  GtsEdge * e2, * e3;
-  GtsVertex * v4, * v5, * v6;
-  gdouble o1;
+  GtsSegment * s1, * s2, * s3;
+};
 
-  gts_triangle_vertices_edges (t1, e, &v1, &v2, &v3, &e, &e2, &e3);
-  gts_triangle_vertices (t2, &v4, &v5, &v6);
+static gboolean point_in_wedge (GtsPoint * p1, GtsPoint * p2, GtsPoint * p3,
+				GtsPoint * p, gboolean closed, GtsPoint * o)
+{
+  gdouble o1;
 
-  o1 = 
-    gts_point_orientation_3d (GTS_POINT (v4), GTS_POINT (v5), GTS_POINT (v6),
-			      GTS_POINT (v2));
-  if (o1 != 0.)
-    return o1;
-  return
-    - gts_point_orientation_3d (GTS_POINT (v4), GTS_POINT (v5), GTS_POINT (v6),
-				GTS_POINT (v1));
+  if (p == p2 || p == p3)
+    return FALSE;
+  o1 = ORIENTATION (p1, p2, p, o);
+  if ((closed && o1 < 0.) || (!closed && o1 <= 0.)) return FALSE;
+  o1 = ORIENTATION (p3, p1, p, o);
+  if ((closed && o1 < 0.) || (!closed && o1 <= 0.)) return FALSE;
+  return TRUE;
 }
 
-#define UPDATE_ORIENTATION if (o > 0.) vi2 = v; else if (o < 0.) {\
-                             vi2 = vi1; vi1 = v; } else coincident = TRUE;
+#if 0
+static gboolean segment_intersects1 (GtsPoint * p1, GtsPoint * p2, 
+				     GtsPoint * p3, GtsPoint * p4,
+				     gboolean closed, GtsPoint * o)
+{
+  gdouble o1 = ORIENTATION (p3, p4, p1, o);
+  gdouble o2 = ORIENTATION (p3, p4, p2, o);
+  gdouble o3, o4;
+
+  if ((closed && ((o1 > 0. && o2 > 0.) || (o1 < 0. && o2 < 0.))) ||
+      (!closed && ((o1 >= 0. && o2 >= 0.) || (o1 <= 0. && o2 <= 0.))))
+    return FALSE;
+  o3 = ORIENTATION (p1, p2, p3, o);
+  o4 = ORIENTATION (p1, p2, p4, o);
+  if ((o3 > 0. && o4 > 0.) || (o3 < 0. && o4 < 0.))
+    return FALSE;
+  if (closed) return TRUE;
+  if ((o3 == 0. && o4 > 0.) || (o4 == 0. && o3 > 0.))
+    return TRUE;
+  return FALSE;
+}
+#else
+static gboolean segment_intersects1 (GtsPoint * p1, GtsPoint * p2, 
+				     GtsPoint * p3, GtsPoint * p4,
+				     gboolean closed, GtsPoint * o)
+{
+  gint o1, o2;
+
+  o1 = ORIENTATION_SOS (p3, p4, p1, o);
+  o2 = ORIENTATION_SOS (p3, p4, p2, o);
+  if (o1*o2 > 0)
+    return FALSE;
+  o1 = ORIENTATION_SOS (p1, p2, p3, o);
+  o2 = ORIENTATION_SOS (p1, p2, p4, o);
+  if (o1*o2 > 0)
+    return FALSE;
+  return TRUE;
+}
+#endif
 
-static void intersect_edges (GtsBBox * bb1, GtsBBox * bb2,
-			     GtsSurfaceInter * si)
+static GtsSegment * triangle_intersects_segments (GtsPoint * p1,
+						  GtsPoint * p2,
+						  GtsPoint * p3,
+						  gboolean closed,
+						  GtsSegment * start,
+						  GtsPoint * o)
 {
-  GtsSurface * surface = si->s1;
-  GtsTriangle * t1, * t2;
-  GtsVertex * v, * vi1 = NULL, * vi2 = NULL;
-  gboolean coincident = FALSE;
+  GtsSegment * s = start;
 
-  t1 = GTS_TRIANGLE (bb1->bounded);
-  t2 = GTS_TRIANGLE (bb2->bounded);
+  do {
+    GtsPoint * p4 = GTS_POINT (s->v1);
+    GtsPoint * p5 = GTS_POINT (s->v2);
 
-  vi1 = intersects (t2->e1, t1, surface);
-  v = intersects (t2->e2, t1, surface);
-  if (!vi1)
-    vi1 = v;
-  else if (v && v != vi1) {
-    gdouble o = intersection_orientation (t2, t2->e2, t1);
-    UPDATE_ORIENTATION;
-  }
-  if (!vi2) {
-    v = intersects (t2->e3, t1, surface);
-    if (!vi1)
-      vi1 = v;
-    else if (v && v != vi1) {
-      gdouble o = intersection_orientation (t2, t2->e3, t1);
-      UPDATE_ORIENTATION;
+    if (p4 == p1) {
+      if (point_in_wedge (p1, p2, p3, p5, closed, o))
+	return s;
     }
-  }
-  if (!vi2) {
-    v = intersects (t1->e1, t2, surface);
-    if (!vi1)
-      vi1 = v;
-    else if (v && v != vi1) {
-      gdouble o = - intersection_orientation (t1, t1->e1, t2);
-      UPDATE_ORIENTATION;
+    else if (p4 == p2) {
+      if (point_in_wedge (p2, p3, p1, p5, closed, o))
+	return s;
     }
-  }
-  if (!vi2) {
-    v = intersects (t1->e2, t2, surface);
-    if (!vi1)
-      vi1 = v;
-    else if (v && v != vi1) {
-      gdouble o = - intersection_orientation (t1, t1->e2, t2);
-      UPDATE_ORIENTATION;
+    else if (p4 == p3) {
+      if (point_in_wedge (p3, p1, p2, p5, closed, o))
+	return s;
     }
-  }
-  if (!vi2) {
-    v = intersects (t1->e3, t2, surface);
-    if (!vi1)
-      vi1 = v;
-    else if (v && v != vi1) {
-      gdouble o = - intersection_orientation (t1, t1->e3, t2);
-      UPDATE_ORIENTATION;
+    else if (p5 == p1) {
+      if (point_in_wedge (p1, p2, p3, p4, closed, o))
+	return s;
     }
-  }
+    else if (p5 == p2) {
+      if (point_in_wedge (p2, p3, p1, p4, closed, o))
+	return s;
+    }
+    else if (p5 == p3) {
+      if (point_in_wedge (p3, p1, p2, p4, closed, o))
+	return s;
+    }
+    else if (segment_intersects1 (p1, p2, p4, p5, closed, o) ||
+	     segment_intersects1 (p2, p3, p4, p5, closed, o) ||
+	     segment_intersects1 (p3, p1, p4, p5, closed, o))
+      return s;
+    s = NEXT (s);
+  } while (s != start);
+  return NULL;
+}
 
-  if ((vi1 || vi2) && !coincident) {
-    gts_surface_add_face (si->s1, GTS_FACE (t1));
-    gts_surface_add_face (si->s2, GTS_FACE (t2));
+static gboolean new_ear (GtsSegment * s, 
+			 Ear * e, 
+			 GtsSegment * start,
+			 guint sloppy,
+			 GtsPoint * o)
+{
+  gdouble or;
+
+  e->s1 = s;
+  e->s2 = NEXT (s);
+
+  g_return_val_if_fail (e->s2, FALSE);
+  g_return_val_if_fail (e->s2 != e->s1, FALSE);
+
+  ORIENTED_VERTICES (e->s1, e->s2, e->v1, e->v2);
+  e->v3 = e->s2->v1 != e->v2 ? e->s2->v1 : e->s2->v2;
+  if (e->v3 == e->v1)
+    return FALSE;
+  e->s3 = NEXT (e->s2);
+  if (gts_segment_connect (e->s3, e->v1, e->v3)) {
+    if (NEXT (e->s3) != e->s1)
+      return FALSE;
+  }
+  else if (gts_vertices_are_connected (e->v1, e->v3))
+    return FALSE;
+  else
+    e->s3 = NULL;
+  or = ORIENTATION (GTS_POINT (e->v1), GTS_POINT (e->v2), GTS_POINT (e->v3),o);
+  switch (sloppy) {
+  case 0: 
+    if (or <= 0. ||
+	triangle_intersects_segments (GTS_POINT (e->v1), GTS_POINT (e->v2),
+				      GTS_POINT (e->v3), TRUE, start, o))
+      return FALSE;
+    break;
+  case 1:
+    if (or < 0. || 
+	(or > 0. && 
+	 triangle_intersects_segments (GTS_POINT (e->v1), GTS_POINT (e->v2),
+				       GTS_POINT (e->v3), FALSE, start, o)))
+      return FALSE;
+    break;
+  case 2:
+    if ((or > 0. && 
+	 triangle_intersects_segments (GTS_POINT (e->v1), GTS_POINT (e->v2),
+				       GTS_POINT (e->v3), FALSE, start, o)) ||
+	(or < 0. && 
+	 triangle_intersects_segments (GTS_POINT (e->v2), GTS_POINT (e->v1),
+				       GTS_POINT (e->v3), FALSE, start, o)))
+      return FALSE;
+    break;
+  case 3:
+    if (or < 0.)
+      return FALSE;
+    break;
   }
-  if (vi1 && vi2 && !coincident) {
-    GtsEdge * e;
-    GtsSegment * s = gts_vertices_are_connected (vi1, vi2);
+#ifdef DEBUG
+  if (or <= 0.)
+    fprintf (stderr, "or: %g\n", or);
+#endif /* DEBUG */
+  g_assert (or > -1e-6);
+  return TRUE;
+}
+
+static void triangulate_loop (GtsSegment * start,
+			      GtsSurface * surface,
+			      GtsPoint * o)
+{
+  GtsSegment * prev = start, * s;
+  guint sloppy = 0;
+#ifdef DEBUG
+  guint nt = 0;
+#endif /* DEBUG */
+
+  s = NEXT (start);
+  while (NEXT (s) != s) {
+    GtsSegment * next = NEXT (s);
+    Ear e;
 
-    if (!GTS_IS_EDGE (s)) {
-      e = gts_edge_new (si->s1->edge_class, vi1, vi2);
-#ifdef DEBUG_NAMED
-      g_snprintf (GTS_NEDGE (e)->name, GTS_NAME_LENGTH, "%s:%s",
-		  GTS_NVERTEX (vi1)->name, GTS_NVERTEX (vi2)->name);
-#endif  
+#ifdef DEBUG
+    fprintf (stderr, "prev: %p s: %p next: %p\n", prev, s, next);
+#endif /* DEBUG */
+  
+    if (!new_ear (s, &e, start, sloppy, o)) {
+      if (s == start) {
+	sloppy++;
+#ifdef DEBUG
+	fprintf (stderr, "sloppy: %u\n", sloppy);
+#endif /* DEBUG */
+      }
+      prev = s;
+      s = next;
     }
     else {
-      GtsEdge * duplicate;
-      e = GTS_EDGE (s);
-      while ((duplicate = gts_edge_is_duplicate (e))) {
-	gts_edge_replace (duplicate, e);
-	gts_object_destroy (GTS_OBJECT (duplicate));
-      }
-      if (s->v1 != vi1) {
-	s->v1 = vi1;
-	s->v2 = vi2;
+      GtsFace * f;
+
+      if (!GTS_IS_EDGE (e.s3))
+	e.s3 = GTS_SEGMENT (gts_edge_new (surface->edge_class, e.v1, e.v3));
+      f = gts_face_new (surface->face_class, 
+			GTS_EDGE (e.s1), GTS_EDGE (e.s2), GTS_EDGE (e.s3));
+      gts_surface_add_face (surface, f);
+      UNSET (e.s1, RELEVANT);
+      UNSET (e.s1, INTERIOR);
+      UNSET (e.s2, RELEVANT);
+      UNSET (e.s2, INTERIOR);
+      NEXT (prev) = e.s3;
+      NEXT (e.s3) = NEXT (e.s2);
+      NEXT (e.s1) = NEXT (e.s2) = NULL;
+      start = prev;
+      s = NEXT (prev);
+      sloppy = 0;
+#ifdef DEBUG
+      {
+	gchar name[80];
+	FILE * fp;
+	
+	fprintf (stderr, " t.%u: (%p:%s,%p:%s,%p:%s)\n",
+		 nt, 
+		 e.v1, NAME (e.v1),
+		 e.v2, NAME (e.v2),
+		 e.v3, NAME (e.v3));
+	sprintf (name, "/tmp/t.%u", nt++);
+	fp = fopen (name, "wt");
+	//	gts_surface_write (surface, fp);
+	gts_write_triangle (GTS_TRIANGLE (f), NULL, fp);
+	//	  write_graph1 (start, interior, surface, fp);
+	fclose (fp);
+	print_loop (start, stderr);
       }
+#endif /* DEBUG */
     }
-    GTS_OBJECT (t1)->reserved = prepend_unique (GTS_OBJECT (t1)->reserved, e);
-    GTS_OBJECT (t2)->reserved = prepend_unique (GTS_OBJECT (t2)->reserved, e);
-    si->edges = prepend_unique (si->edges, e);
   }
+  UNSET (s, RELEVANT);
+  UNSET (s, INTERIOR);
+  NEXT (s) = NULL;
 }
 
-static void segment_detach_endpoints (GtsSegment * s)
+static void check_object (GtsObject * o)
 {
-  s->v1->segments = g_slist_remove (s->v1->segments, s);
-  s->v2->segments = g_slist_remove (s->v2->segments, s);
+  g_assert (o->reserved == NULL);
+  g_assert (o->flags == 0);  
 }
 
-static void segment_attach_endpoints (GtsSegment * s)
+static void check_boundary (GtsEdge * e, GtsSurface * s)
 {
-  s->v1->segments = g_slist_prepend (s->v1->segments, s);
-  s->v2->segments = g_slist_prepend (s->v2->segments, s);
-  g_assert (!gts_segment_is_duplicate (s));
+  check_object (GTS_OBJECT (e));
+  check_object (GTS_OBJECT (GTS_SEGMENT (e)->v1));
+  check_object (GTS_OBJECT (GTS_SEGMENT (e)->v2));
+  g_assert (gts_edge_face_number (e, s) == 1);
 }
 
-static void triangulate_face (GtsTriangle * t, GtsSurface * sn)
+static void check_interior (GtsEdge * e, GtsSurface * s)
 {
-  GSList * edges, * vertices = NULL, * i;
-  GtsSurface * s = gts_surface_new (gts_surface_class (), 
-				    sn->face_class,
-				    sn->edge_class,
-				    sn->vertex_class);
-  GtsTriangle * enclosing;
-  GtsVertex * v1, * v2, * v3;
-  GtsMatrix * project, * unproject;
-  GtsVector * coords;
-  guint nvertices, n;
+  guint n;
+  check_object (GTS_OBJECT (e));
+  check_object (GTS_OBJECT (GTS_SEGMENT (e)->v1));
+  check_object (GTS_OBJECT (GTS_SEGMENT (e)->v2));
+
+  n = gts_edge_face_number (e, s);
 #ifdef DEBUG
-  static guint nt = 0;
-  guint nv, nc;
-  char name[80];
-  FILE * fptr;
+  if (n != 2)
+    gts_surface_print_stats (s, stderr);
+#endif /* DEBUG */
+  g_assert (n == 2);
+}
 
-  fprintf (stderr, 
-	   "=============== triangulation t.%d: %p:%d %p->%p->%p\n", 
-	   nt, t, id (t), t->e1, t->e2, t->e3);
-  sprintf (name, "t.%d", nt++);
-  fptr = fopen (name, "wt");
-#endif
+static void check_boundary_interior_triangulation (GSList * boundary,
+						   GSList * interior,
+						   GtsSurface * surface)
+{
+  g_slist_foreach (boundary, (GFunc) check_boundary, surface);
+  g_slist_foreach (interior, (GFunc) check_interior, surface);
+}
 
-  /* build constraints list */
-  i = edges = GTS_OBJECT (t)->reserved;
-  GTS_OBJECT (t)->reserved = NULL;
+static void merge_duplicate (GtsEdge * e)
+{
+  GtsEdge * dup = gts_edge_is_duplicate (e);
 
-  if (GTS_OBJECT (t->e1)->reserved) {
-    vertices = g_slist_concat (g_slist_copy (GTS_OBJECT (t->e1)->reserved), 
-			       vertices);
-    /* deconnecte t->e1 from its endpoints to avoid it being used
-       during triangulation */
-    segment_detach_endpoints (GTS_SEGMENT (t->e1));
-  }
-  else
-    edges = prepend_unique (edges, t->e1);
-  if (GTS_OBJECT (t->e2)->reserved) {
-    vertices = g_slist_concat (g_slist_copy (GTS_OBJECT (t->e2)->reserved), 
-			       vertices);
-    segment_detach_endpoints (GTS_SEGMENT (t->e2));
-  }
-  else
-    edges = prepend_unique (edges, t->e2);
-  if (GTS_OBJECT (t->e3)->reserved) {
-    vertices = g_slist_concat (g_slist_copy (GTS_OBJECT (t->e3)->reserved), 
-			       vertices);
-    segment_detach_endpoints (GTS_SEGMENT (t->e3));
-  }
-  else
-    edges = prepend_unique (edges, t->e3);
+  g_assert (dup);
+  gts_edge_replace (dup, e);
+  gts_object_destroy (GTS_OBJECT (dup));
+}
 
-  /* add triangle summits */
-  vertices = g_slist_prepend (vertices, GTS_SEGMENT (t->e1)->v1);
-  vertices = g_slist_prepend (vertices, GTS_SEGMENT (t->e1)->v2);
-  vertices = g_slist_prepend (vertices, gts_triangle_vertex (t));
+static void triangulate_boundary_interior (GSList * boundary, 
+					   GSList * interior,
+					   GtsSurface * s,
+					   GtsPoint * o)
+{
+  GSList * iloops, * bloops, * i;
 
-  /* add edges endpoints */
-  i = edges;
+  i = boundary;
   while (i) {
-    GtsSegment * s = i->data;
-    vertices = prepend_unique (vertices, s->v1);
-    vertices = prepend_unique (vertices, s->v2);
+    SET (i->data, RELEVANT);
     i = i->next;
   }
-
-  /* if there is only three vertices, they are the summits of @t */
-  nvertices = g_slist_length (vertices);
-  if (nvertices == 3) {
-    g_slist_free (vertices);
-    g_slist_free (edges);
-    gts_surface_add_face (sn, GTS_FACE (t));
-    return;
+  i = interior;
+  while (i) {
+    SET (i->data, RELEVANT);
+    SET (i->data, INTERIOR);
+    i = i->next;
   }
 
-  /* reset reserved field of vertices */
-  g_slist_foreach (vertices, (GFunc) gts_object_reset_reserved, NULL);
+  iloops = interior_loops (interior);
+  bloops = boundary_loops (boundary);
 
-  /* project vertices on t */
-  unproject = gts_matrix_projection (t);
-  project = gts_matrix_transpose (unproject);
-  gts_matrix_destroy (unproject);
-  coords = g_malloc (sizeof (GtsVector)*nvertices);
-  n = 0;
-  i = vertices;
+  i = iloops;
   while (i) {
-    GtsPoint * p = i->data;
-    coords[n][0] = p->x;
-    coords[n][1] = p->y;
-    coords[n++][2] = p->z;
-    gts_point_transform (p, project);
+#ifdef DEBUG
+    fprintf (stderr, "--- interior loop ---\n");
+    print_loop (i->data, stderr);
+#endif /* DEBUG */
+    connect_interior_loop (i->data, &interior, &bloops, s, o);
     i = i->next;
   }
-  gts_matrix_destroy (project);
   
-  /* build enclosing triangle */
-  enclosing = gts_triangle_enclosing (gts_triangle_class (), vertices, 10.);
-  gts_triangle_vertices (enclosing, &v1, &v2, &v3);
-  gts_surface_add_face (s, gts_face_new (gts_face_class (),
-					 enclosing->e1,
-					 enclosing->e2,
-					 enclosing->e3));
 #ifdef DEBUG
-  write_edges_vertices (edges, vertices, fptr);
-  fclose (fptr);
-  nv = nc = 0;
-#endif
-
-  /* set edges as constraints, saving there initial class in reserved */
-  i = edges;
+ {
+   FILE * fp = fopen ("/tmp/bloops", "w");
+   write_loops (bloops, fp);
+   fclose (fp);
+ }
+#endif /* DEBUG */
+
+  i = bloops;
   while (i) {
-    GtsObject * e = i->data;
 #ifdef DEBUG
-    fprintf (stderr, "constraint: %p->%d\n", e, id (e));
-#endif
-    g_assert (!e->reserved);
-    e->reserved = e->klass;
-    e->klass = GTS_OBJECT_CLASS (gts_constraint_class ());
+    fprintf (stderr, "--- boundary loop ---\n");
+    print_loop (i->data, stderr);
+#endif /* DEBUG */
+    triangulate_loop (i->data, s, o);
     i = i->next;
   }
+  
+  g_slist_foreach (interior, (GFunc) merge_duplicate, NULL);
+  g_slist_free (iloops);
+  g_slist_free (bloops);
 
-  /* add vertices */
-  i = vertices;
-  while (i) {
-#ifdef DEBUG
-    fprintf (stderr, "adding %p->%d: (%.20g,%.20g,%.20g)\n",
-	     i->data, id (i->data),
-	     GTS_POINT (i->data)->x,
-	     GTS_POINT (i->data)->y,
-	     GTS_POINT (i->data)->z);
-#endif
-    g_assert (gts_delaunay_add_vertex (s, i->data, NULL) == NULL);
-    i = i->next;
+#ifdef CHECK_ORIENTED
+  check_boundary_interior_triangulation (boundary, interior, s);
+#endif /* CHECK_ORIENTED */
+}
+
+static void create_edges (GtsSegment * s, GtsSurface * surface)
+{
+  if (GTS_OBJECT (s)->reserved) {
+    GList * i = GTS_OBJECT (s)->reserved;
+    GtsVertex * v1 = i->data;
+
+    GTS_OBJECT (s)->reserved = g_list_prepend (i, 
+		      gts_edge_new (surface->edge_class, s->v1, v1));
+    while (i) {
+      GList * next = i->next;
+      GtsVertex * v2 = next ? next->data : s->v2;
+
+      GTS_OBJECT (i->data)->reserved = NULL;
+      i->data = gts_edge_new (surface->edge_class, v1, v2);
+      v1 = v2;
+      i = next;
+    }
   }
+}
+
+static void add_boundary (GtsSegment * s, GtsSegment * next, 
+			  GSList ** boundary)
+{
+  if (GTS_OBJECT (s)->reserved == NULL)
+    *boundary = g_slist_prepend (*boundary, s);
+  else {
+    if (s->v2 == next->v2 || s->v2 == next->v1) {
+      GList * i = g_list_last (GTS_OBJECT (s)->reserved);
+
+      while (i) {
+	*boundary = g_slist_prepend (*boundary, i->data);
+	i = i->prev;
+      }
+    }
+    else {
+      GList * i = GTS_OBJECT (s)->reserved;
 
-  /* add remaining constraints */
-  i = edges;
-  while (i) {
-#ifdef DEBUG
-    GSList * inter;
-    fprintf (stderr, "adding constraint %p->%d: %p:%d->%p:%d\n",
-	     i->data, id (i->data),
-	     GTS_SEGMENT (i->data)->v1, id (GTS_SEGMENT (i->data)->v1),
-	     GTS_SEGMENT (i->data)->v2, id (GTS_SEGMENT (i->data)->v2));
-    inter = gts_delaunay_add_constraint (s, i->data);
-    if (inter != NULL) {
-      fprintf (stderr, "  intersects with:\n");
-      i = inter;
       while (i) {
-	GtsSegment * s = i->data;
-	fprintf (stderr, "  %p->%d: %p:%d->%p:%d\n", 
-		 s, id (s), s->v1, id (s->v1), s->v2, id (s->v2));
+	*boundary = g_slist_prepend (*boundary, i->data);
 	i = i->next;
       }
-      g_assert_not_reached ();
     }
-#else
-    g_assert (gts_delaunay_add_constraint (s, i->data) == NULL);
-#endif
-    i = i->next;
-  }
-  
-  /* undo projection */
-  i = vertices;
-  n = 0;
-  while (i) {
-    GtsPoint * p = i->data;
-    p->x = coords[n][0];
-    p->y = coords[n][1];
-    p->z = coords[n++][2];
-    i = i->next;
   }
-  g_free (coords);
-  g_slist_free (vertices);
+}
 
-  /* restore edges classes */
-  i = edges;
-  while (i) {
-    GtsObject * e = i->data;
-    g_assert (e->reserved);
-    e->klass = e->reserved;
-    e->reserved = NULL;
-    i = i->next;
+static void triangulate_face (GtsTriangle * t, GtsSurface * surface)
+{
+  GSList * interior = GTS_OBJECT (t)->reserved;
+  GSList * boundary = NULL;
+  GtsSurface * s = gts_surface_new (gts_surface_class (),
+				    surface->face_class,
+				    surface->edge_class,
+				    surface->vertex_class);
+  gdouble x, y, z;
+  GtsPoint * p = GTS_POINT (GTS_SEGMENT (t->e1)->v1);
+  GtsPoint * o;
+
+  GTS_OBJECT (t)->reserved = NULL;  
+  gts_triangle_normal (t, &x, &y, &z);
+  g_assert (x != 0. || y != 0. || z != 0.);
+  o = gts_point_new (gts_point_class (), p->x + x, p->y + y, p->z + z);
+  add_boundary (GTS_SEGMENT (t->e3), GTS_SEGMENT (t->e1), &boundary);
+  add_boundary (GTS_SEGMENT (t->e2), GTS_SEGMENT (t->e3), &boundary);
+  add_boundary (GTS_SEGMENT (t->e1), GTS_SEGMENT (t->e2), &boundary);
+#ifdef DEBUG
+  {
+    static guint nt = 0;
+    char name[80];
+    FILE * fp;
+
+    fprintf (stderr, "%u: triangulating %p\n", nt, t);
+if (nt == 28)
+  fprintf (stderr, "tintin!!!!\n");
+    sprintf (name, "/tmp/oc.%u", nt++);
+    fp = fopen (name, "wt");
+    //    write_graph (boundary, interior, s, fp);
+    write_segments (boundary, interior, fp);
+    fclose (fp);
   }
-  g_slist_free (edges);
-
-  /* destroy enclosing triangle */
-  gts_allow_floating_vertices = TRUE;
-  gts_object_destroy (GTS_OBJECT (v1));
-  gts_object_destroy (GTS_OBJECT (v2));
-  gts_object_destroy (GTS_OBJECT (v3));
-  gts_allow_floating_vertices = FALSE;
-
-  /* call the attributes() method for each face with @t as argument */
-  if (GTS_OBJECT_CLASS (sn->face_class)->attributes)
+#endif /* DEBUG */
+  triangulate_boundary_interior (boundary, interior, s, o);
+  g_slist_free (interior);
+  g_slist_free (boundary);
+  if (GTS_OBJECT (t)->klass->attributes)
     gts_surface_foreach_face (s, (GtsFunc) gts_object_attributes, t);
-
-  /* add new faces to si */
-  gts_surface_merge (sn, s);
+  gts_surface_merge (surface, s);
   gts_object_destroy (GTS_OBJECT (s));
-
-  /* restore edges of t */
-  if (GTS_OBJECT (t->e1)->reserved)
-    segment_attach_endpoints (GTS_SEGMENT (t->e1));
-  if (GTS_OBJECT (t->e2)->reserved)
-    segment_attach_endpoints (GTS_SEGMENT (t->e2));
-  if (GTS_OBJECT (t->e3)->reserved)
-    segment_attach_endpoints (GTS_SEGMENT (t->e3));
+  gts_object_destroy (GTS_OBJECT (o));
 }
 
-static void free_vertex_list (GtsObject * o)
+static void free_edge_list (GtsObject * o)
 {
-  g_slist_free (o->reserved);
+  g_list_free (o->reserved);
   o->reserved = NULL;
 }
 
@@ -620,6 +1605,8 @@ static void free_vertex_list (GtsObject * o)
  * @faces_tree1: a bounding box tree (see gts_bb_tree_new()) for
  * the faces of @s1.
  * @faces_tree2: a bounding box tree for the faces of @s2.
+ * @is_open1: whether @s1 is an "open" surface.
+ * @is_open2: whether @s2 is an "open" surface.
  *
  * When triangulating the cut faces, the new faces inherit the
  * attributes of these original faces through their attributes()
@@ -628,11 +1615,13 @@ static void free_vertex_list (GtsObject * o)
  * Returns: a new #GtsSurfaceInter describing the intersection of @s1
  * and @s2.  
  */
-GtsSurfaceInter* gts_surface_inter_new (GtsSurfaceInterClass * klass,
-					GtsSurface * s1,
-					GtsSurface * s2,
-					GNode * faces_tree1,
-					GNode * faces_tree2)
+GtsSurfaceInter * gts_surface_inter_new (GtsSurfaceInterClass * klass,
+					 GtsSurface * s1,
+					 GtsSurface * s2,
+					 GNode * faces_tree1,
+					 GNode * faces_tree2,
+					 gboolean is_open1,
+					 gboolean is_open2)
 {
   GtsSurfaceInter * si;
   GtsSurface * s;
@@ -643,79 +1632,182 @@ GtsSurfaceInter* gts_surface_inter_new (GtsSurfaceInterClass * klass,
   g_return_val_if_fail (faces_tree1 != NULL, NULL);
   g_return_val_if_fail (faces_tree2 != NULL, NULL);
 
-  si = GTS_SURFACE_INTER (gts_object_new (GTS_OBJECT_CLASS (klass)));
-  si->s1 = gts_surface_new (gts_surface_class (),
-			    s1->face_class,
-			    s1->edge_class,
-			    s1->vertex_class);
-  si->s2 = gts_surface_new (gts_surface_class (),
-			    s2->face_class,
-			    s2->edge_class,
-			    s2->vertex_class);
-  gts_bb_tree_traverse_overlapping (faces_tree1, faces_tree2,
-				    (GtsBBTreeTraverseFunc) intersect_edges, 
-				    si);
+  si = surface_inter_new (klass, s1, s2, faces_tree1, faces_tree2);
 
+  gts_surface_foreach_edge (si->s1, (GtsFunc) create_edges, si->s1);
+  gts_surface_foreach_edge (si->s2, (GtsFunc) create_edges, si->s2);
+
+#ifdef DEBUG
+  fprintf (stderr, "====== triangulating s1 ======\n");
+#endif /* DEBUG */
   s = gts_surface_new (gts_surface_class (),
 		       s1->face_class,
 		       s1->edge_class,
 		       s1->vertex_class);
   gts_surface_foreach_face (si->s1, (GtsFunc) triangulate_face, s);
-  gts_surface_foreach_edge (si->s1, (GtsFunc) free_vertex_list, NULL);
+  gts_surface_foreach_edge (si->s1, (GtsFunc) free_edge_list, NULL);
   gts_object_destroy (GTS_OBJECT (si->s1));
   si->s1 = s;
   GTS_OBJECT (si->s1)->reserved = s1;
-
+  
+#ifdef DEBUG
+  fprintf (stderr, "====== triangulating s2 ======\n");
+#endif /* DEBUG */
   s = gts_surface_new (gts_surface_class (),
 		       s2->face_class,
 		       s2->edge_class,
 		       s2->vertex_class);
   gts_surface_foreach_face (si->s2, (GtsFunc) triangulate_face, s);
-  gts_surface_foreach_edge (si->s2, (GtsFunc) free_vertex_list, NULL);
+  gts_surface_foreach_edge (si->s2, (GtsFunc) free_edge_list, NULL);
   gts_object_destroy (GTS_OBJECT (si->s2));
   si->s2 = s;
   GTS_OBJECT (si->s2)->reserved = s2;
 
-  si->s1->keep_faces = si->s2->keep_faces = TRUE;
-
   return si;
 }
 
+static void check_surface_edge (GtsEdge * e, gpointer * data)
+{
+  gboolean * ok = data[0];
+  GtsSurface * s = data[1];
+  GtsSurface * bs = GTS_OBJECT (s)->reserved;
+  guint nf = gts_edge_face_number (e, s);
+
+  if (nf < 1 || nf > 2) {
+    *ok = FALSE;
+    g_return_if_fail (nf >= 1 && nf <= 2);
+  }
+  if (nf == 1 && gts_edge_face_number (e, bs) == 0) {
+    *ok = FALSE;
+    g_return_if_fail (gts_edge_face_number (e, bs) > 0);
+  }
+}
+
+static void mark_edge (GtsObject * o, gpointer data)
+{
+  o->reserved = data;
+}
+
+static gint triangle_orientation (GtsTriangle * t, GtsEdge * e)
+{
+  GtsSegment * s = GTS_SEGMENT (t->e1 == e ? t->e2 
+				: 
+				t->e2 == e ? t->e3 
+				: 
+				t->e1);
+  GtsVertex * v2 = GTS_SEGMENT (e)->v2;
+
+  if (s->v1 == v2 || s->v2 == v2)
+    return 1;
+  return -1;
+}
+
+static gboolean check_orientation (GtsEdge * e, GtsSurface * s)
+{
+  GtsTriangle * t1 = NULL, * t2 = NULL;
+  GSList * i = e->triangles;
+  gint o1 = 0, o2 = 0;
+
+  while (i) {
+    if (GTS_IS_FACE (i->data) && 
+	gts_face_has_parent_surface (i->data, s)) {
+      if (t1 == NULL) {
+	t1 = i->data;
+	o1 = triangle_orientation (t1, e);
+      }
+      else if (t2 == NULL) {
+	t2 = i->data;
+	o2 = triangle_orientation (t2, e);
+	g_return_val_if_fail (o1*o2 < 0, FALSE);
+      }
+      else
+	g_assert_not_reached ();
+    }
+    i = i->next;
+  }
+  g_return_val_if_fail (t1 && t2, FALSE);
+  return TRUE;
+}
+
+static void check_edge (GtsSegment * s, gpointer * data)
+{
+  gboolean * ok = data[0];
+  GtsSurfaceInter * si = data[1];
+  gboolean * closed = data[2];
+  GSList * j;
+  guint nn = 0;
+  
+  j = s->v1->segments;
+  while (j && *ok) {
+    GtsSegment * s1 = j->data;
+    
+    if (s1 != s && GTS_OBJECT (s1)->reserved == si) {
+      if (s1->v2 != s->v1)
+	*ok = FALSE;
+      nn++;
+    }
+    j = j->next;
+  }
+  j = s->v2->segments;
+  while (j && *ok) {
+    GtsSegment * s1 = j->data;
+    
+    if (s1 != s && GTS_OBJECT (s1)->reserved == si) {
+      if (s1->v1 != s->v2)
+	*ok = FALSE;
+      nn++;
+    }
+    j = j->next;
+  }
+  if (nn != 2)
+    *closed = FALSE;
+
+  if (!check_orientation (GTS_EDGE (s), si->s1))
+    *ok = FALSE;
+  if (!check_orientation (GTS_EDGE (s), si->s2))
+    *ok = FALSE;
+}
+
 /**
  * gts_surface_inter_check:
  * @si: a #GtsSurfaceInter.
+ * @closed: is set to %TRUE if @si->edges is a closed curve, %FALSE
+ * otherwise.
  *
  * Returns: %TRUE if the curve described by @si is an orientable
- * manifold, %FALSE otherwise.
+ * manifold, %FALSE otherwise.  
  */
-gboolean gts_surface_inter_check (GtsSurfaceInter * si)
+gboolean gts_surface_inter_check (GtsSurfaceInter * si,
+				  gboolean * closed)
 {
-  GSList * i; gboolean ok = TRUE;
+  gboolean ok = TRUE;
+  gpointer data[3];
 
   g_return_val_if_fail (si != NULL, FALSE);
+  g_return_val_if_fail (closed != NULL, FALSE);
 
-  /* mark edges as used by si */
-  i = si->edges;
-  while (i) {
-    GTS_OBJECT (i->data)->reserved = si;
-    i = i->next;
-  }
+  *closed = si->edges ? TRUE : FALSE;
 
-  i = si->edges;
-  while (i && ok) {
-    GtsSegment * s = i->data;
-    GSList * j = s->v1->segments;
-    while (j && ok) {
-      GtsSegment * s1 = j->data;
-      if (s1 != s && GTS_OBJECT (s1)->reserved == si && s1->v2 != s->v1)
-	ok = FALSE;
-      j = j->next;
-    }
-    i = i->next;
-  }
+  /* mark edges as used by si */
+  g_slist_foreach (si->edges, (GFunc) mark_edge, si);
 
+  data[0] = &ok;
+  data[1] = si;
+  data[2] = closed;
+  g_slist_foreach (si->edges, (GFunc) check_edge, data);
   g_slist_foreach (si->edges, (GFunc) gts_object_reset_reserved, NULL);
 
+  /* check connectivity of the faces of @si */
+  if (*closed) {
+    gpointer data[2];
+
+    data[0] = &ok;
+    data[1] = si->s1;
+    gts_surface_foreach_edge (si->s1, (GtsFunc) check_surface_edge, data);
+    data[1] = si->s2;
+    gts_surface_foreach_edge (si->s2, (GtsFunc) check_surface_edge, data);
+  }
+
   return ok;
 }
 
@@ -724,14 +1816,14 @@ gboolean gts_surface_inter_check (GtsSurfaceInter * si)
 static GtsFace * next_compatible_face (GtsEdge * e, 
 				       GtsFace * f, 
 				       GtsSurface * s1,
-				       GtsSurface * s2,
-				       GtsSurface * ssss)
+				       GtsSurface * s2)
 {
   GSList * i = e->triangles;
   GtsFace * f2 = NULL, * f3 = NULL;
 
   while (i) {
     GtsFace * f1 = i->data;
+
     if (f1 != f && GTS_IS_FACE (f1)) {
       if (gts_face_has_parent_surface (f1, s1))
 	return f1;
@@ -748,6 +1840,7 @@ static GtsFace * next_compatible_face (GtsEdge * e,
       return NULL;
     return f2; 
   }
+  g_assert (gts_face_has_parent_surface (f, s1));
   if (gts_triangles_are_compatible (GTS_TRIANGLE (f), GTS_TRIANGLE (f2), e))
     return f2;
   return f3;
@@ -758,34 +1851,37 @@ static void walk_faces (GtsEdge * e, GtsFace * f,
 			GtsSurface * s2,
 			GtsSurface * s)
 {
-  GtsTriangle * t;
-
-  if (f == NULL || GTS_OBJECT (f)->reserved)
-    return;
-
-  gts_surface_add_face (s, f);
-  GTS_OBJECT (f)->reserved = s;
-  t = GTS_TRIANGLE (f);
-  if (t->e1 != e && !GTS_OBJECT (t->e1)->reserved)
-    walk_faces (t->e1, next_compatible_face (t->e1, f, s1, s2, s), s1, s2, s);
-  if (t->e2 != e && !GTS_OBJECT (t->e2)->reserved)
-    walk_faces (t->e2, next_compatible_face (t->e2, f, s1, s2, s), s1, s2, s);
-  if (t->e3 != e && !GTS_OBJECT (t->e3)->reserved)
-    walk_faces (t->e3, next_compatible_face (t->e3, f, s1, s2, s), s1, s2, s);
-}
-
-static gint triangle_orientation (GtsTriangle * t, GtsEdge * e)
-{
-  GtsSegment * s = GTS_SEGMENT (t->e1 == e ? t->e2 
-				: 
-				t->e2 == e ? t->e3 
-				: 
-				t->e1);
-  GtsVertex * v2 = GTS_SEGMENT (e)->v2;
-
-  if (s->v1 == v2 || s->v2 == v2)
-    return 1;
-  return -1;
+  GtsFifo * faces = gts_fifo_new ();
+  GtsFifo * edges = gts_fifo_new ();
+
+  gts_fifo_push (faces, f);
+  gts_fifo_push (edges, e);
+  while ((f = gts_fifo_pop (faces)) && (e = gts_fifo_pop (edges))) {
+    if (!GTS_OBJECT (f)->reserved) {
+      GtsTriangle * t = GTS_TRIANGLE (f);
+      GtsFace * f1;
+
+      gts_surface_add_face (s, f);
+      GTS_OBJECT (f)->reserved = s;
+      if (t->e1 != e && !GTS_OBJECT (t->e1)->reserved &&
+	  (f1 = next_compatible_face (t->e1, f, s1, s2))) {
+	gts_fifo_push (faces, f1);
+	gts_fifo_push (edges, t->e1);
+      }	
+      if (t->e2 != e && !GTS_OBJECT (t->e2)->reserved &&
+	  (f1 = next_compatible_face (t->e2, f, s1, s2))) {
+	gts_fifo_push (faces, f1);
+	gts_fifo_push (edges, t->e2);
+      }	
+      if (t->e3 != e && !GTS_OBJECT (t->e3)->reserved &&
+	  (f1 = next_compatible_face (t->e3, f, s1, s2))) {
+	gts_fifo_push (faces, f1);
+	gts_fifo_push (edges, t->e3);
+      }	
+    }
+  }
+  gts_fifo_destroy (faces);
+  gts_fifo_destroy (edges);
 }
 
 /**
@@ -800,9 +1896,9 @@ void gts_surface_inter_boolean (GtsSurfaceInter * si,
 				GtsSurface * surface,
 				GtsBooleanOperation op)
 {
-  GSList * i;
   GtsSurface * s = NULL;
   gint orient = 1;
+  GSList * i;
 
   g_return_if_fail (si != NULL);
   g_return_if_fail (surface != NULL);
@@ -816,20 +1912,21 @@ void gts_surface_inter_boolean (GtsSurfaceInter * si,
   }
 
   /* mark edges as belonging to intersection */
-  i = si->edges;
-  while (i) {
-    GTS_OBJECT (i->data)->reserved = si;
-    i = i->next;
-  }
+  g_slist_foreach (si->edges, (GFunc) mark_edge, si);
 
   i = si->edges;
   while (i) {
     GtsEdge * e = i->data;
     GSList * j = e->triangles;
-
+    
     while (j) {
       if (gts_face_has_parent_surface (j->data, s) &&
 	  orient*triangle_orientation (j->data, e) > 0) {
+#ifdef DEBUG_BOOLEAN
+	GtsFace * boundary = gts_edge_is_boundary (e, surface);
+
+	g_assert (!boundary || boundary == j->data);
+#endif /* DEBUG_BOOLEAN */
 	walk_faces (e, j->data, s, GTS_OBJECT (s)->reserved, surface);
 	break;
       }
@@ -837,8 +1934,113 @@ void gts_surface_inter_boolean (GtsSurfaceInter * si,
     }
     i = i->next;
   }
-
   g_slist_foreach (si->edges, (GFunc) gts_object_reset_reserved, NULL);
   gts_surface_foreach_face (surface, 
 			    (GtsFunc) gts_object_reset_reserved, NULL);
 }
+
+static void self_intersecting (GtsBBox * bb1, GtsBBox * bb2, 
+			       gpointer * d)
+{
+  GtsTriangle * t1 = bb1->bounded;
+  GtsTriangle * t2 = bb2->bounded;
+
+  if (t1 != t2) {
+    GtsSegment * s1 = GTS_SEGMENT (t1->e1);
+    GtsSegment * s2 = GTS_SEGMENT (t1->e2);
+    GtsSegment * s3 = GTS_SEGMENT (t1->e3);
+    GtsSegment * s4 = GTS_SEGMENT (t2->e1);
+    GtsSegment * s5 = GTS_SEGMENT (t2->e2);
+    GtsSegment * s6 = GTS_SEGMENT (t2->e3);
+    GtsPoint * pi;
+
+    if ((!gts_segments_touch (s4, s1) && 
+	 !gts_segments_touch (s4, s2) &&
+	 !gts_segments_touch (s4, s3) &&
+	 (pi = segment_triangle_intersection (s4, t1, gts_point_class ()))
+	 != NULL) ||
+	(!gts_segments_touch (s5, s1) && 
+	 !gts_segments_touch (s5, s2) &&
+	 !gts_segments_touch (s5, s3) &&
+	 (pi = segment_triangle_intersection (s5, t1, gts_point_class ())) 
+	 != NULL) ||
+	(!gts_segments_touch (s6, s1) && 
+	 !gts_segments_touch (s6, s2) &&
+	 !gts_segments_touch (s6, s3) &&
+	 (pi = segment_triangle_intersection (s6, t1, gts_point_class ())) 
+	 != NULL)) {
+      GtsBBTreeTraverseFunc func = d[0];
+      gpointer data = d[1];
+      gboolean * self_inter = d[2];
+
+      gts_object_destroy (GTS_OBJECT (pi));
+      *self_inter = TRUE;
+      (* func) (bb1, bb2, data);
+    }
+  }
+}
+
+/**
+ * gts_surface_foreach_intersecting_face:
+ * @s: a #GtsSurface.
+ * @func: a #GtsBBTreeTraverseFunc.
+ * @data: user data to pass to @func.
+ *
+ * Calls @func for each intersecting pair of faces of @s.
+ *
+ * Returns: %TRUE if @func was called at least once, %FALSE otherwise.
+ */
+gboolean gts_surface_foreach_intersecting_face (GtsSurface * s,
+						GtsBBTreeTraverseFunc func,
+						gpointer data)
+{
+  GNode * tree;
+  gpointer d[3];
+  gboolean self_inter = FALSE;
+
+  g_return_val_if_fail (s != NULL, FALSE);
+  g_return_val_if_fail (func != NULL, FALSE);
+
+  tree = gts_bb_tree_surface (s);
+  d[0] = func;
+  d[1] = data;
+  d[2] = &self_inter;
+  gts_bb_tree_traverse_overlapping (tree, tree, 
+				    (GtsBBTreeTraverseFunc) self_intersecting,
+				    d);
+  gts_bb_tree_destroy (tree, TRUE);
+
+  return self_inter;
+}
+
+static void add_intersecting (GtsBBox * bb1, GtsBBox * bb2, 
+			      GtsSurface * intersected)
+{
+  gts_surface_add_face (intersected, bb1->bounded);
+  gts_surface_add_face (intersected, bb2->bounded);
+}
+
+/**
+ * gts_surface_is_self_intersecting:
+ * @s: a #GtsSurface.
+ *
+ * Returns: a new #GtsSurface containing the faces of @s which are
+ * self-intersecting or %NULL if no faces of @s are self-intersecting.
+ */
+GtsSurface * gts_surface_is_self_intersecting (GtsSurface * s)
+{
+  GtsSurface * intersected;
+
+  g_return_val_if_fail (s != NULL, NULL);
+
+  intersected = gts_surface_new (GTS_SURFACE_CLASS (GTS_OBJECT (s)->klass),
+				 s->face_class,
+				 s->edge_class,
+				 s->vertex_class);
+  if (!gts_surface_foreach_intersecting_face (s,
+		      (GtsBBTreeTraverseFunc) add_intersecting, intersected)) {
+    gts_object_destroy (GTS_OBJECT (intersected));
+    intersected = NULL;
+  }
+  return intersected;
+}
diff --git a/src/cdt.c b/src/cdt.c
index 6cecd55..8296d9b 100644
--- a/src/cdt.c
+++ b/src/cdt.c
@@ -17,9 +17,113 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+
 #include <math.h>
 #include "gts.h"
 
+#ifdef USE_SURFACE_BTREE
+
+static gint find_closest (GtsTriangle * t, gpointer value, gpointer * data)
+{
+  guint * ns = data[2];
+  guint * n = data[3];
+
+  if (*n >= *ns)
+    return TRUE;
+  else {
+    gdouble * dmin = data[0];
+    gpointer * closest = data[1];
+    GtsPoint * p = data[4];
+
+    if (gts_triangle_orientation (t) > 0.) {
+      GtsPoint * p1 = GTS_POINT (GTS_SEGMENT (t->e1)->v1);
+      gdouble d = (p->x - p1->x)*(p->x - p1->x) + (p->y - p1->y)*(p->y - p1->y);
+      
+      if (d < *dmin) {
+	*dmin = d;
+	*closest = t;
+      }
+      (*n)++;
+    }
+  }
+  return FALSE;
+}
+
+/* select the face closest to @p among n^1/3 randomly picked faces
+ *  of @surface */
+static GtsFace * closest_face (GtsSurface * s, GtsPoint * p)
+{
+  guint n = 0, nt, ns;
+  gdouble dmin = G_MAXDOUBLE;
+  GtsFace * closest = NULL;
+  gpointer data[5];
+
+  nt = gts_surface_face_number (s);
+  if (!nt)
+    return NULL;
+  ns = exp (log ((gdouble) nt)/3.);
+
+  data[0] = &dmin;
+  data[1] = &closest;
+  data[2] = &ns;
+  data[3] = &n;
+  data[4] = p;
+  g_tree_traverse (s->faces, (GTraverseFunc) find_closest, G_IN_ORDER, data);
+
+  return closest;
+}
+
+#else /* not USE_SURFACE_BTREE */
+
+#  if GLIB_CHECK_VERSION(2,4,0)
+/* finally, with g_hash_table_find we are able to stop iteration over the hash 
+   table in the middle */
+
+typedef struct _SFindClosest SFindClosest; 
+
+struct _SFindClosest {
+  gdouble dmin; 
+  GtsFace *closest;
+  GtsPoint * p;
+  gint stop;
+};
+
+static gboolean find_closest (gpointer key, gpointer value, gpointer user_data)
+{
+  SFindClosest * data = (SFindClosest *) user_data;
+  GtsFace * f = GTS_FACE (value);
+  
+  if (gts_triangle_orientation (GTS_TRIANGLE (f)) > 0.) {
+    gdouble d = gts_point_distance2 (data->p, 
+				     GTS_POINT (GTS_SEGMENT (GTS_TRIANGLE (f)->e1)->v1));
+    if (d < data->dmin) {
+      data->dmin = d;
+      data->closest = f;
+    }
+  }
+  data->stop--;
+  return !(data->stop > 0);
+}
+
+static GtsFace * closest_face (GtsSurface * s, GtsPoint * p)
+{
+  SFindClosest fc;
+
+  fc.dmin = G_MAXDOUBLE;
+  fc.closest = NULL;
+  fc.p = p;
+  fc.stop = exp (log ((gdouble) g_hash_table_size (s->faces))/3.);
+  g_hash_table_find (s->faces, find_closest, &fc);
+  
+  return fc.closest;
+}
+
+#  else /* VERSION < 2.4.0 */
+
 /* Due to an unkown reason g_hash_table_foreach does not allow to stop 
  * the loop, hence the redefinition. I hope they don't change
  * the GHashTable, GHashNode structures ... */
@@ -43,11 +147,11 @@ struct _GHashTable
 };
 
 /* select the face closest to @p among n^1/3 randomly picked faces
- *  of @surface */
+ * of @surface */
 static GtsFace * closest_face (GtsSurface * s, GtsPoint * p)
 {
   guint i, n, nt, ns;
-  gdouble dmin = G_MAXDOUBLE, d;
+  gdouble dmin = G_MAXDOUBLE;
   GtsFace * closest = NULL;
   GHashNode * node;
   GHashTable * hash_table = s->faces;
@@ -55,21 +159,27 @@ static GtsFace * closest_face (GtsSurface * s, GtsPoint * p)
   nt = g_hash_table_size (hash_table);
   if (!nt)
     return NULL;
-  ns = exp(log((gdouble) nt)/3.);
 
+  ns = exp(log((gdouble) nt)/3.);
   for (i = 0, n = 0; i < hash_table->size && n < ns; i++)
-    for (node = hash_table->nodes[i]; node && n < ns; node = node->next, n++) {
+    for (node = hash_table->nodes[i]; node && n < ns; node = node->next) {
       GtsFace * f = node->key;
 
-      d = gts_point_distance2 (p, 
-		   GTS_POINT (GTS_SEGMENT (GTS_TRIANGLE (f)->e1)->v1));
-      if (d < dmin) {
-	dmin = d;
-	closest = f;
+      if (gts_triangle_orientation (GTS_TRIANGLE (f)) > 0.) {
+	GtsPoint * p1 = GTS_POINT (GTS_SEGMENT (GTS_TRIANGLE (f)->e1)->v1);
+	gdouble d = (p->x - p1->x)*(p->x - p1->x) + (p->y - p1->y)*(p->y - p1->y);
+		 
+	if (d < dmin) {
+	  dmin = d;
+	  closest = f;
+	}
+	n++;
       }
     }
   return closest;
 }
+#  endif /* VERSION < 2.4.0 */
+#endif /* not USE_SURFACE_BTREE */
 
 /* returns the face belonging to @surface and neighbor of @f via @e */
 static GtsFace * neighbor (GtsFace * f,
@@ -142,9 +252,10 @@ static GtsEdge * triangle_next_edge (GtsTriangle * t,
       *on_summit = TRUE;
     return NULL;
   }
-
-  if (gts_point_orientation (GTS_POINT (v2), GTS_POINT (v3), p) < 0.0 ||
-      gts_point_orientation (GTS_POINT (v1), GTS_POINT (v2), p) < 0.0)
+  
+  if (gts_point_orientation (GTS_POINT (v2), GTS_POINT (v3), p) < 0.0)
+    return e2;
+  if (gts_point_orientation (GTS_POINT (v1), GTS_POINT (v2), p) < 0.0)
     *on_summit = TRUE;
   return NULL;
 }
@@ -189,8 +300,9 @@ static GtsFace * point_locate (GtsPoint * o,
   }
   
   f = neighbor (f, prev, surface);
-  gts_triangle_vertices_edges (GTS_TRIANGLE (f), prev, 
-			       &v1, &v2, &v3, &prev, &e2, &e3);
+  if (f)
+    gts_triangle_vertices_edges (GTS_TRIANGLE (f), prev, 
+				 &v1, &v2, &v3, &prev, &e2, &e3);
   while (f) {
     gdouble orient = gts_point_orientation (o, GTS_POINT (v3), p);
 
@@ -273,6 +385,9 @@ GtsFace * gts_point_locate (GtsPoint * p,
 
   if (guess == NULL)
     guess = closest_face (surface, p);
+  else
+    g_return_val_if_fail (gts_triangle_orientation (GTS_TRIANGLE (guess)) > 0., NULL);
+
   if (guess == NULL)
     return NULL;
 
@@ -318,6 +433,30 @@ GtsConstraintClass * gts_constraint_class (void)
   return klass;
 }
 
+static void split_list (GtsListFace * f, GtsListFace * f1, GtsListFace * f2, 
+			GtsPoint * p1, GtsPoint * p2,
+			GSList ** last1, GSList ** last2)
+{
+  GSList * i = f->points, * l1 = *last1, * l2 = *last2;
+
+  while (i) {
+    GtsPoint * p = i->data;
+    
+    if (gts_point_orientation (p1, p2, p) >= 0.) {
+      if (l1) l1->next = i; else f1->points = i;
+      l1 = i;
+    }
+    else {
+      if (l2) l2->next = i; else f2->points = i;
+      l2 = i;
+    }
+    i = i->next;
+  }
+  f->points = NULL;
+  *last1 = l1;
+  *last2 = l2;
+}
+
 /* cf. figure misc/swap.fig */
 static void swap_if_in_circle (GtsFace * f1,
 			       GtsVertex * v1, 
@@ -358,20 +497,38 @@ static void swap_if_in_circle (GtsFace * f1,
 			   GTS_POINT (v2), GTS_POINT (v3)) > 0.0) {
     GtsEdge * en;
     GtsSegment * sn = gts_vertices_are_connected (v3, v4);
+    GtsFace * f3, * f4;
 
     if (!GTS_IS_EDGE (sn))
       en = gts_edge_new (surface->edge_class, v3, v4);
     else
       en = GTS_EDGE (sn);
 
-    f1 = gts_face_new (surface->face_class, en, e5, e2);
-    gts_surface_add_face (surface, f1);
-    f2 = gts_face_new (surface->face_class, en, e3, e4);
-    gts_surface_add_face (surface, f2);
-    gts_object_destroy (GTS_OBJECT (e1));
+    f3 = gts_face_new (surface->face_class, en, e5, e2);
+    gts_object_attributes (GTS_OBJECT (f3), GTS_OBJECT (f1));
+    f4 = gts_face_new (surface->face_class, en, e3, e4);
+    gts_object_attributes (GTS_OBJECT (f4), GTS_OBJECT (f2));
+    
+    if (GTS_IS_LIST_FACE (f3)) {
+      GSList * last3 = NULL, * last4 = NULL;
+
+      if (GTS_IS_LIST_FACE (f1))
+	split_list (GTS_LIST_FACE (f1), GTS_LIST_FACE (f3), GTS_LIST_FACE (f4),
+		    GTS_POINT (v3), GTS_POINT (v4), &last3, &last4);
+      if (GTS_IS_LIST_FACE (f2))
+	split_list (GTS_LIST_FACE (f2), GTS_LIST_FACE (f3), GTS_LIST_FACE (f4),
+		    GTS_POINT (v3), GTS_POINT (v4), &last3, &last4);
+      if (last3) last3->next = NULL;
+      if (last4) last4->next = NULL;
+    }
+
+    gts_surface_remove_face (surface, f1);
+    gts_surface_remove_face (surface, f2);
+    gts_surface_add_face (surface, f3);
+    gts_surface_add_face (surface, f4);
 
-    swap_if_in_circle (f1, v4, v2, v3, e5, e2, en, surface);
-    swap_if_in_circle (f2, v1, v4, v3, e4, en, e3, surface);
+    swap_if_in_circle (f3, v4, v2, v3, e5, e2, en, surface);
+    swap_if_in_circle (f4, v1, v4, v3, e4, en, e3, surface);
   }
 }
 
@@ -396,7 +553,7 @@ GtsVertex * gts_delaunay_add_vertex_to_face (GtsSurface * surface,
   GtsSegment * s4, * s5, * s6;
   GtsEdge * e4, * e5, * e6;
   GtsVertex * v1, * v2, * v3;
-  GtsFace * f1, * f2, * f3;
+  GtsFace * nf[3];
 
   g_return_val_if_fail (surface != NULL, v);
   g_return_val_if_fail (v != NULL, v);
@@ -433,18 +590,59 @@ GtsVertex * gts_delaunay_add_vertex_to_face (GtsSurface * surface,
     e6 = GTS_EDGE (s6);
 
   /* cf. figure misc/swap.fig */
-  f1 = gts_face_new (surface->face_class, e4, e1, e5);
-  f2 = gts_face_new (surface->face_class, e5, e2, e6);
-  f3 = gts_face_new (surface->face_class, e6, e3, e4);
+  nf[0] = gts_face_new (surface->face_class, e4, e1, e5);
+  gts_object_attributes (GTS_OBJECT (nf[0]), GTS_OBJECT (f));
+  nf[1] = gts_face_new (surface->face_class, e5, e2, e6);
+  gts_object_attributes (GTS_OBJECT (nf[1]), GTS_OBJECT (f));
+  nf[2] = gts_face_new (surface->face_class, e6, e3, e4);
+  gts_object_attributes (GTS_OBJECT (nf[2]), GTS_OBJECT (f));
+
+  if (GTS_IS_LIST_FACE (f) && GTS_IS_LIST_FACE (nf[0])) {
+    GSList * i = GTS_LIST_FACE (f)->points, * last[3] = { NULL, NULL, NULL };
+
+    while (i) {
+      GtsPoint * p = i->data;
+      GSList * next = i->next;
+      guint j;
+      
+      if (p != GTS_POINT (v)) {
+	if (gts_point_orientation (GTS_POINT (v), GTS_POINT (v1), p) >= 0.) {
+	  gdouble o = gts_point_orientation (GTS_POINT (v), GTS_POINT (v2), p);
+
+	  if (o != 0.)
+	    j = o > 0. ? 1 : 0;
+	  else
+	    j = gts_point_orientation (GTS_POINT (v), GTS_POINT (v3), p) 
+	      > 0. ? 0 : 1;
+	}
+	else if (gts_point_orientation (GTS_POINT (v), GTS_POINT (v3), p) > 0.)
+	  j = 2;
+	else
+	  j = 1;
+	if (last[j])
+	  last[j]->next = i; 
+	else 
+	  GTS_LIST_FACE (nf[j])->points = i;
+	last[j] = i;
+      }
+      else
+	g_slist_free_1 (i);
+      i = next;
+    }
+    GTS_LIST_FACE (f)->points = NULL;
+    if (last[0]) last[0]->next = NULL;
+    if (last[1]) last[1]->next = NULL;
+    if (last[2]) last[2]->next = NULL;
+  }
 
   gts_surface_remove_face (surface, f);
-  gts_surface_add_face (surface, f1);
-  gts_surface_add_face (surface, f2);
-  gts_surface_add_face (surface, f3);
+  gts_surface_add_face (surface, nf[0]);
+  gts_surface_add_face (surface, nf[1]);
+  gts_surface_add_face (surface, nf[2]);
 
-  swap_if_in_circle (f1, v1, v2, v, e1, e5, e4, surface);
-  swap_if_in_circle (f2, v2, v3, v, e2, e6, e5, surface);
-  swap_if_in_circle (f3, v3, v1, v, e3, e4, e6, surface);
+  swap_if_in_circle (nf[0], v1, v2, v, e1, e5, e4, surface);
+  swap_if_in_circle (nf[1], v2, v3, v, e2, e6, e5, surface);
+  swap_if_in_circle (nf[2], v3, v1, v, e3, e4, e6, surface);
 
   return NULL;
 }
@@ -510,13 +708,16 @@ static gboolean polygon_in_circle (GSList * poly,
   return FALSE;
 }
 
-static void triangulate_polygon (GSList * poly, GtsSurface * surface)
+static void triangulate_polygon (GSList * poly, 
+				 GtsSurface * surface,
+				 GtsFace * ref)
 {
   GSList * i, * poly1, * poly2;
   GtsVertex * v1, * v2, * v3 = NULL;
   gboolean found = FALSE;
   GtsSegment * s, * s1, * s2;
   GtsEdge * e1, * e2;
+  GtsFace * f;
 
   if (poly == NULL || poly->next == NULL) {
     g_slist_free (poly);
@@ -573,8 +774,9 @@ static void triangulate_polygon (GSList * poly, GtsSurface * surface)
     e2 = gts_edge_new (surface->edge_class, v3, v1);
   else
     e2 = GTS_EDGE (s2);
-  gts_surface_add_face (surface,
-	    gts_face_new (surface->face_class, GTS_EDGE (s), e1, e2));
+  f = gts_face_new (surface->face_class, GTS_EDGE (s), e1, e2);
+  gts_object_attributes (GTS_OBJECT (f), GTS_OBJECT (ref));
+  gts_surface_add_face (surface, f);
 
   poly1 = poly->next;
   g_slist_free_1 (poly);
@@ -587,8 +789,8 @@ static void triangulate_polygon (GSList * poly, GtsSurface * surface)
   else
     i->next = NULL;
 
- triangulate_polygon (poly1, surface);
- triangulate_polygon (poly2, surface);
+ triangulate_polygon (poly1, surface, ref);
+ triangulate_polygon (poly2, surface, ref);
 }
 
 /**
@@ -596,24 +798,43 @@ static void triangulate_polygon (GSList * poly, GtsSurface * surface)
  * @surface: a #GtsSurface.
  * @v: a #GtsVertex.
  *
- * Removes @v from the Delaunay triangulation defined by @surface,
- * restores the Delaunay property and destroys @v. Vertex @v must not
- * be used by any constrained edge otherwise the triangulation is not
- * guaranteed to be Delaunay.  
+ * Removes @v from the Delaunay triangulation defined by @surface and
+ * restores the Delaunay property. Vertex @v must not be used by any
+ * constrained edge otherwise the triangulation is not guaranteed to
+ * be Delaunay.  
  */
 void gts_delaunay_remove_vertex (GtsSurface * surface, GtsVertex * v)
 {
+  GSList * triangles, * i;
+  GtsFace * ref = NULL;
+
   g_return_if_fail (surface != NULL);
   g_return_if_fail (v != NULL);
 
-  triangulate_polygon (gts_vertex_fan_oriented (v, surface), surface);
-  gts_object_destroy (GTS_OBJECT (v));
+  i = triangles = gts_vertex_triangles (v, NULL);
+  while (i && !ref) {
+    if (GTS_IS_FACE (i->data) &&
+	gts_face_has_parent_surface (i->data, surface))
+      ref = i->data;
+    i = i->next;
+  }
+  if (!ref) {
+    g_slist_free (triangles);
+    g_return_if_fail (ref);
+  }
+  triangulate_polygon (gts_vertex_fan_oriented (v, surface), surface, ref);
+  while (i) {
+    if (GTS_IS_FACE (i->data) &&
+	gts_face_has_parent_surface (i->data, surface))
+      gts_surface_remove_face (surface, i->data);
+    i = i->next;
+  }
+  g_slist_free (triangles);
 }
 
 #define NEXT_CUT(edge, edge1, list) { next = neighbor (f, edge, surface);\
-                                      if (constraint)\
-					destroy_triangles (e);\
-				      else\
+                                      remove_triangles (e, surface);\
+                                      if (!constraint && !e->triangles)\
 				        gts_object_destroy (GTS_OBJECT (e));\
                                       g_assert (next);\
 				      *list = g_slist_prepend (*list, edge1);\
@@ -622,16 +843,17 @@ void gts_delaunay_remove_vertex (GtsSurface * surface, GtsVertex * v)
 					       next, surface, left, right));\
                                     }
 
-static void destroy_triangles (GtsEdge * e)
+static void remove_triangles (GtsEdge * e, GtsSurface * s)
 {
   GSList * i = e->triangles;
+
   while (i) {
     GSList * next = i->next;
-    gts_object_destroy (i->data);
+
+    if (GTS_IS_FACE (i->data) && gts_face_has_parent_surface (i->data, s))
+      gts_surface_remove_face (s, i->data);
     i = next;
   }
-  g_slist_free (e->triangles);
-  e->triangles = NULL;
 }
 
 static GSList * 
@@ -661,9 +883,8 @@ remove_intersected_edge (GtsSegment * s,
   if (o1 >= 0.) {
     if (o2 >= 0.) { /* @s->v2 is inside (or on the edge) of @f */
       g_assert (o1 == 0. && o2 == 0.);
-      if (constraint)
-	destroy_triangles (e);
-      else
+      remove_triangles (e, surface);
+      if (!constraint && !e->triangles)
 	gts_object_destroy (GTS_OBJECT (e));
       *left = g_slist_prepend (*left, e2);
       *right = g_slist_prepend (*right, e1);
@@ -689,7 +910,8 @@ remove_intersected_vertex (GtsSegment * s,
 			   GtsVertex * v,
 			   GtsSurface * surface,
 			   GSList ** left,
-			   GSList ** right)
+			   GSList ** right,
+			   GtsFace ** ref)
 {
   GSList * triangles = gts_vertex_triangles (v, NULL);
   GSList * i;
@@ -723,7 +945,8 @@ remove_intersected_vertex (GtsSegment * s,
 	GtsEdge * e = gts_triangle_edge_opposite (t, v);
 	GtsEdge * e1, * e2;
 	GtsFace * next = neighbor (GTS_FACE (t), e, surface);
-	
+
+	*ref = GTS_FACE (t);
 	gts_triangle_vertices_edges (t, e, &v2, &v3, &v, &e, &e2, &e1);
 
 	g_slist_free (triangles);
@@ -731,7 +954,10 @@ remove_intersected_vertex (GtsSegment * s,
 	if (o3 >= 0.) /* @s->v2 is inside (or on the edge) of t */
 	  return NULL;
 
-	gts_object_destroy (GTS_OBJECT (t));
+	gts_allow_floating_faces = TRUE;
+	gts_surface_remove_face (surface, GTS_FACE (t));
+	gts_allow_floating_faces = FALSE;
+
 	*left = g_slist_prepend (*left, e2);
 	*right = g_slist_prepend (*right, e1);
 
@@ -755,7 +981,7 @@ remove_intersected_vertex (GtsSegment * s,
  * @surface.
  *
  * Returns: a list of #GtsConstraint conflicting (i.e. intersecting) with @c 
- * which were removed from @surface.
+ * which were removed from @surface (%NULL if there was none).
  */
 GSList * gts_delaunay_add_constraint (GtsSurface * surface,
 				      GtsConstraint * c)
@@ -763,6 +989,7 @@ GSList * gts_delaunay_add_constraint (GtsSurface * surface,
   GSList * constraints;
   GtsVertex * v1, * v2;
   GSList * left = NULL, * right = NULL;
+  GtsFace * ref = NULL;
 
   g_return_val_if_fail (surface != NULL, NULL);
   g_return_val_if_fail (c != NULL, NULL);
@@ -773,11 +1000,13 @@ GSList * gts_delaunay_add_constraint (GtsSurface * surface,
   
   gts_allow_floating_edges = TRUE;
   constraints = remove_intersected_vertex (GTS_SEGMENT (c), v1, surface,
-					   &left, &right);
+					   &left, &right, &ref);
   gts_allow_floating_edges = FALSE;
 #if 1
-  triangulate_polygon (g_slist_prepend (g_slist_reverse (right), c), surface);
-  triangulate_polygon (g_slist_prepend (left, c), surface);
+  triangulate_polygon (g_slist_prepend (g_slist_reverse (right), c), 
+		       surface, ref);
+  triangulate_polygon (g_slist_prepend (left, c), 
+		       surface, ref);
 #else
   right = g_slist_prepend (g_slist_reverse (right), c);
   left = g_slist_prepend (left, c);
@@ -821,6 +1050,8 @@ GSList * gts_delaunay_add_constraint (GtsSurface * surface,
   triangulate_polygon (right, surface);
   triangulate_polygon (left, surface);
 #endif
+  if (ref && !ref->surfaces)
+    gts_object_destroy (GTS_OBJECT (ref));
   return constraints;
 }
 
@@ -897,6 +1128,7 @@ void gts_delaunay_remove_hull (GtsSurface * surface)
     g_slist_free_1 (i);
     if (!GTS_IS_CONSTRAINT (e)) {
       GtsTriangle * t = GTS_TRIANGLE (gts_edge_is_boundary (e, surface));
+
       if (t != NULL) {
 	if (t->e1 != e && !GTS_IS_CONSTRAINT (t->e1) &&
 	    !gts_edge_is_boundary (t->e1, surface))
@@ -907,9 +1139,47 @@ void gts_delaunay_remove_hull (GtsSurface * surface)
 	if (t->e3 != e && !GTS_IS_CONSTRAINT (t->e3) &&
 	    !gts_edge_is_boundary (t->e3, surface))
 	  boundary = g_slist_prepend (boundary, t->e3);
+	gts_surface_remove_face (surface, GTS_FACE (t));
       }
-      gts_object_destroy (GTS_OBJECT (e));
+      if (!e->triangles)
+	gts_object_destroy (GTS_OBJECT (e));
     }
   }
   gts_allow_floating_edges = FALSE;
 }
+
+/* GtsListFace: Object */
+
+static void gts_list_face_destroy (GtsObject * object)
+{
+  g_slist_free (GTS_LIST_FACE (object)->points);
+
+  (* GTS_OBJECT_CLASS (gts_list_face_class ())->parent_class->destroy) 
+    (object);
+}
+
+static void gts_list_face_class_init (GtsFaceClass * klass)
+{
+  GTS_OBJECT_CLASS (klass)->destroy = gts_list_face_destroy;
+}
+
+GtsFaceClass * gts_list_face_class (void)
+{
+  static GtsFaceClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo gts_list_face_info = {
+      "GtsListFace",
+      sizeof (GtsListFace),
+      sizeof (GtsFaceClass),
+      (GtsObjectClassInitFunc) gts_list_face_class_init,
+      (GtsObjectInitFunc) NULL,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_face_class ()),
+				  &gts_list_face_info);
+  }
+
+  return klass;
+}
diff --git a/src/config.h.win32 b/src/config.h.win32
index c137a54..085ddb5 100644
--- a/src/config.h.win32
+++ b/src/config.h.win32
@@ -7,10 +7,10 @@
 #define STDC_HEADERS 1
 
 #define GTS_MAJOR_VERSION 0
-#define GTS_MINOR_VERSION 4
-#define GTS_MICRO_VERSION 1
+#define GTS_MINOR_VERSION 6
+#define GTS_MICRO_VERSION 0
 #define GTS_INTERFACE_AGE 0
-#define GTS_BINARY_AGE 1
+#define GTS_BINARY_AGE 0
 
 /* Define if you have the <floatingpoint.h> header file.  */
 /* #undef HAVE_FLOATINGPOINT_H */
@@ -24,3 +24,6 @@
 /* Define if this is Win32 without Cygwin.  */
 #define NATIVE_WIN32 1
 
+#ifndef M_PI
+# define M_PI 3.14159265359
+#endif /* not M_PI */
diff --git a/src/container.c b/src/container.c
index 940854b..e1dc0fa 100644
--- a/src/container.c
+++ b/src/container.c
@@ -25,7 +25,9 @@ static void containee_class_init (GtsContaineeClass * klass)
 {
   klass->remove_container = NULL;
   klass->add_container = NULL;
+  klass->foreach = NULL;
   klass->is_contained = NULL;
+  klass->replace = NULL;
 }
 
 GtsContaineeClass * gts_containee_class (void)
@@ -66,10 +68,24 @@ gboolean gts_containee_is_contained (GtsContainee * item,
 
   if (GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->is_contained)
     return
-      (* GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->is_contained) (item, c);
+      (* GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->is_contained) 
+      (item, c);
   return FALSE;
 }
 
+void gts_containee_replace (GtsContainee * item,
+			    GtsContainee * with)
+{
+  if (GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->replace)
+    (* GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->replace) (item, with);
+  if (GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->foreach) {
+    (* GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->foreach) 
+      (item, (GtsFunc) gts_container_add, with);
+    (* GTS_CONTAINEE_CLASS (GTS_OBJECT (item)->klass)->foreach) 
+      (item, (GtsFunc) gts_container_remove, item);
+  }
+}
+
 /* GtsSListContainee */
 
 static void slist_containee_destroy (GtsObject * object)
@@ -80,6 +96,7 @@ static void slist_containee_destroy (GtsObject * object)
   i = item->containers;
   while (i) {
     GSList * next = i->next;
+
     gts_container_remove (i->data, GTS_CONTAINEE (item));
     i = next;
   }
@@ -104,6 +121,20 @@ static void slist_containee_add_container (GtsContainee * i,
     item->containers = g_slist_prepend (item->containers, c);
 }
 
+static void slist_containee_foreach (GtsContainee * c,
+				     GtsFunc func, 
+				     gpointer data)
+{
+  GSList * i = GTS_SLIST_CONTAINEE (c)->containers;
+
+  while (i) {
+    GSList * next = i->next;
+    
+    (* func) (i->data, data);
+    i = next;
+  }
+}
+
 static gboolean slist_containee_is_contained (GtsContainee * i,
 					      GtsContainer * c)
 {
@@ -116,7 +147,9 @@ static void slist_containee_class_init (GtsSListContaineeClass * klass)
     slist_containee_remove_container;
   GTS_CONTAINEE_CLASS (klass)->add_container = 
     slist_containee_add_container;
- GTS_CONTAINEE_CLASS (klass)->is_contained = 
+  GTS_CONTAINEE_CLASS (klass)->foreach = 
+    slist_containee_foreach;
+  GTS_CONTAINEE_CLASS (klass)->is_contained = 
     slist_containee_is_contained;
 
   GTS_OBJECT_CLASS (klass)->destroy = slist_containee_destroy;
@@ -406,10 +439,15 @@ static void slist_container_foreach (GtsContainer * c,
 				     GtsFunc func, 
 				     gpointer data)
 {
-  /* prevent removing or adding items */
-  GTS_SLIST_CONTAINER (c)->frozen = TRUE;
-  g_slist_foreach (GTS_SLIST_CONTAINER (c)->items, (GFunc) func, data);
-  GTS_SLIST_CONTAINER (c)->frozen = FALSE;
+  GSList * i;
+
+  i = GTS_SLIST_CONTAINER (c)->items;
+  while (i) {
+    GSList * next = i->next;
+
+    (* func) (i->data, data);
+    i = next;
+  }
 }
 
 static guint slist_container_size (GtsContainer * c)
diff --git a/src/curvature.c b/src/curvature.c
new file mode 100644
index 0000000..70f6af2
--- /dev/null
+++ b/src/curvature.c
@@ -0,0 +1,621 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999-2002 Ray Jones, St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <math.h>
+#include "gts.h"
+
+static gboolean angle_obtuse (GtsVertex * v, GtsFace * f)
+{
+  GtsEdge * e = gts_triangle_edge_opposite (GTS_TRIANGLE (f), v);
+  GtsVector vec1, vec2;
+
+  gts_vector_init (vec1, GTS_POINT (v), GTS_POINT (GTS_SEGMENT (e)->v1));
+  gts_vector_init (vec2, GTS_POINT (v), GTS_POINT (GTS_SEGMENT (e)->v2));
+
+  return (gts_vector_scalar (vec1, vec2) < 0.0);
+}
+
+static gboolean triangle_obtuse (GtsVertex * v, GtsFace * f)
+{
+  GtsEdge * e = gts_triangle_edge_opposite (GTS_TRIANGLE (f), v);
+
+  return (angle_obtuse (v, f) ||
+          angle_obtuse (GTS_SEGMENT (e)->v1, f) ||
+          angle_obtuse (GTS_SEGMENT (e)->v2, f));
+} 
+
+static gdouble cotan (GtsVertex * vo, GtsVertex * v1, GtsVertex * v2)
+{
+  /* cf. Appendix B of [Meyer et al 2002] */
+  GtsVector u, v;
+  gdouble udotv, denom;
+
+  gts_vector_init (u, GTS_POINT (vo), GTS_POINT (v1));
+  gts_vector_init (v, GTS_POINT (vo), GTS_POINT (v2));
+
+  udotv = gts_vector_scalar (u, v);
+  denom = sqrt (gts_vector_scalar (u,u)*gts_vector_scalar (v,v) -
+		udotv*udotv);
+
+
+  /* denom can be zero if u==v.  Returning 0 is acceptable, based on
+   * the callers of this function below. */
+  if (denom == 0.0) return (0.0);
+
+  return (udotv/denom);
+}
+
+static gdouble angle_from_cotan (GtsVertex * vo, 
+				 GtsVertex * v1, GtsVertex * v2)
+{
+  /* cf. Appendix B and the caption of Table 1 from [Meyer et al 2002] */
+  GtsVector u, v;
+  gdouble udotv, denom;
+
+  gts_vector_init (u, GTS_POINT (vo), GTS_POINT (v1));
+  gts_vector_init (v, GTS_POINT (vo), GTS_POINT (v2));
+
+  udotv = gts_vector_scalar (u, v);
+  denom = sqrt (gts_vector_scalar (u,u)*gts_vector_scalar (v,v) 
+		- udotv*udotv);
+
+  /* Note: I assume this is what they mean by using atan2 (). -Ray Jones */
+
+  /* tan = denom/udotv = y/x (see man page for atan2) */
+  return (fabs (atan2 (denom, udotv)));
+}
+
+static gdouble region_area (GtsVertex * v, GtsFace * f)
+{
+  /* cf. Section 3.3 of [Meyer et al 2002] */
+  
+  if (gts_triangle_area (GTS_TRIANGLE (f)) == 0.0) return (0.0);
+
+  if (triangle_obtuse (v, f)) {
+    if (angle_obtuse (v, f))
+      return (gts_triangle_area (GTS_TRIANGLE (f))/2.0);
+    else
+      return (gts_triangle_area (GTS_TRIANGLE (f))/4.0);
+  } else {
+    GtsEdge * e = gts_triangle_edge_opposite (GTS_TRIANGLE (f), v);
+
+    return ((cotan (GTS_SEGMENT (e)->v1, v, GTS_SEGMENT (e)->v2)* 
+             gts_point_distance2 (GTS_POINT (v), 
+				  GTS_POINT (GTS_SEGMENT (e)->v2)) +
+             cotan (GTS_SEGMENT (e)->v2, v, GTS_SEGMENT (e)->v1)* 
+             gts_point_distance2 (GTS_POINT (v), 
+                                  GTS_POINT (GTS_SEGMENT (e)->v1)))
+            /8.0);
+  }
+}
+
+/** 
+ * gts_vertex_mean_curvature_normal:
+ * @v: a #GtsVertex.  
+ * @s: a #GtsSurface.
+ * @Kh: the Mean Curvature Normal at @v.
+ *
+ * Computes the Discrete Mean Curvature Normal approximation at @v.
+ * The mean curvature at @v is half the magnitude of the vector @Kh.
+ *
+ * Note: the normal computed is not unit length, and may point either
+ * into or out of the surface, depending on the curvature at @v.  It
+ * is the responsibility of the caller of the function to use the mean
+ * curvature normal appropriately.
+ *
+ * This approximation is from the paper:
+ * Discrete Differential-Geometry Operators for Triangulated 2-Manifolds
+ * Mark Meyer, Mathieu Desbrun, Peter Schroder, Alan H. Barr
+ * VisMath '02, Berlin (Germany) 
+ * http://www-grail.usc.edu/pubs.html
+ *
+ * Returns: %TRUE if the operator could be evaluated, %FALSE if the
+ * evaluation failed for some reason (@v is boundary or is the
+ * endpoint of a non-manifold edge.)
+ */
+gboolean gts_vertex_mean_curvature_normal (GtsVertex * v, GtsSurface * s, 
+                                           GtsVector Kh)
+{
+  GSList * faces, * edges, * i;
+  gdouble area = 0.0;
+
+  g_return_val_if_fail (v != NULL, FALSE);
+  g_return_val_if_fail (s != NULL, FALSE);
+
+  /* this operator is not defined for boundary edges */
+  if (gts_vertex_is_boundary (v, s)) return (FALSE);
+    
+  faces = gts_vertex_faces (v, s, NULL);
+  g_return_val_if_fail (faces != NULL, FALSE);
+
+  edges = gts_vertex_fan_oriented (v, s);
+  if (edges == NULL) {
+    g_slist_free (faces);
+    return (FALSE);
+  }
+
+  i = faces;
+  while (i) {
+    GtsFace * f = i->data;
+
+    area += region_area (v, f);
+    i = i->next;
+  } 
+  g_slist_free (faces);
+
+  Kh[0] = Kh[1] = Kh[2] = 0.0;
+
+  i = edges;
+  while (i) {
+    GtsEdge * e = i->data;
+    GtsVertex * v1 = GTS_SEGMENT (e)->v1;
+    GtsVertex * v2 = GTS_SEGMENT (e)->v2;
+    gdouble temp;
+
+    temp = cotan (v1, v, v2);
+    Kh[0] += temp*(GTS_POINT (v2)->x - GTS_POINT (v)->x);
+    Kh[1] += temp*(GTS_POINT (v2)->y - GTS_POINT (v)->y);
+    Kh[2] += temp*(GTS_POINT (v2)->z - GTS_POINT (v)->z);
+
+    temp = cotan (v2, v, v1);
+    Kh[0] += temp*(GTS_POINT (v1)->x - GTS_POINT (v)->x);
+    Kh[1] += temp*(GTS_POINT (v1)->y - GTS_POINT (v)->y);
+    Kh[2] += temp*(GTS_POINT (v1)->z - GTS_POINT (v)->z);
+
+    i = i->next;
+  }
+  g_slist_free (edges);
+
+  if (area > 0.0) {
+    Kh[0] /= 2*area;
+    Kh[1] /= 2*area;
+    Kh[2] /= 2*area;
+  } else {
+    return (FALSE);
+  }
+ 
+  return TRUE;
+}
+
+/** 
+ * gts_vertex_gaussian_curvature:
+ * @v: a #GtsVertex.  
+ * @s: a #GtsSurface.
+ * @Kg: the Discrete Gaussian Curvature approximation at @v.
+ *
+ * Computes the Discrete Gaussian Curvature approximation at @v.
+ *
+ * This approximation is from the paper:
+ * Discrete Differential-Geometry Operators for Triangulated 2-Manifolds
+ * Mark Meyer, Mathieu Desbrun, Peter Schroder, Alan H. Barr
+ * VisMath '02, Berlin (Germany) 
+ * http://www-grail.usc.edu/pubs.html
+ *
+ * Returns: %TRUE if the operator could be evaluated, %FALSE if the
+ * evaluation failed for some reason (@v is boundary or is the
+ * endpoint of a non-manifold edge.)
+ */
+gboolean gts_vertex_gaussian_curvature (GtsVertex * v, GtsSurface * s, 
+                                        gdouble * Kg)
+{
+  GSList * faces, * edges, * i;
+  gdouble area = 0.0;
+  gdouble angle_sum = 0.0;
+
+  g_return_val_if_fail (v != NULL, FALSE);
+  g_return_val_if_fail (s != NULL, FALSE);
+  g_return_val_if_fail (Kg != NULL, FALSE);
+
+  /* this operator is not defined for boundary edges */
+  if (gts_vertex_is_boundary (v, s)) return (FALSE);
+    
+  faces = gts_vertex_faces (v, s, NULL);
+  g_return_val_if_fail (faces != NULL, FALSE);
+
+  edges = gts_vertex_fan_oriented (v, s);
+  if (edges == NULL) {
+    g_slist_free (faces);
+    return (FALSE);
+  }
+
+  i = faces;
+  while (i) {
+    GtsFace * f = i->data;
+
+    area += region_area (v, f);
+    i = i->next;
+  } 
+  g_slist_free (faces);
+
+  i = edges;
+  while (i) {
+    GtsEdge * e = i->data;
+    GtsVertex * v1 = GTS_SEGMENT (e)->v1;
+    GtsVertex * v2 = GTS_SEGMENT (e)->v2;
+
+    angle_sum += angle_from_cotan (v, v1, v2);
+    i = i->next;
+  }
+  g_slist_free (edges);
+
+  *Kg = (2.0*M_PI - angle_sum)/area;
+ 
+  return TRUE;
+}
+
+/** 
+ * gts_vertex_principal_curvatures:
+ * @Kh: mean curvature.
+ * @Kg: Gaussian curvature.
+ * @K1: first principal curvature.
+ * @K2: second principal curvature.
+ *
+ * Computes the principal curvatures at a point given the mean and
+ * Gaussian curvatures at that point.  
+ *
+ * The mean curvature can be computed as one-half the magnitude of the
+ * vector computed by gts_vertex_mean_curvature_normal().
+ *
+ * The Gaussian curvature can be computed with
+ * gts_vertex_gaussian_curvature().
+ */
+void gts_vertex_principal_curvatures (gdouble Kh, gdouble Kg, 
+				      gdouble * K1, gdouble * K2)
+{
+  gdouble temp = Kh*Kh - Kg;
+
+  g_return_if_fail (K1 != NULL);
+  g_return_if_fail (K2 != NULL);
+
+  if (temp < 0.0) temp = 0.0;
+  temp = sqrt (temp);
+  *K1 = Kh + temp;
+  *K2 = Kh - temp;
+}
+
+/* from Maple */
+static void linsolve (gdouble m11, gdouble m12, gdouble b1,
+		      gdouble m21, gdouble m22, gdouble b2,
+		      gdouble * x1, gdouble * x2)
+{
+  gdouble temp;
+
+  temp = 1.0 / (m21*m12 - m11*m22);
+  *x1 = (m12*b2 - m22*b1)*temp;
+  *x2 = (m11*b2 - m21*b1)*temp;
+}
+                
+/* from Maple - largest eigenvector of [a b; b c] */
+static void eigenvector (gdouble a, gdouble b, gdouble c,
+			 GtsVector e)
+{
+  if (b == 0.0) {
+    e[0] = 0.0;
+  } else {
+    e[0] = -(c - a - sqrt (c*c - 2*a*c + a*a + 4*b*b))/(2*b);
+  }
+  e[1] = 1.0;
+  e[2] = 0.0;
+}
+
+/** 
+ * gts_vertex_principal_directions:
+ * @v: a #GtsVertex.  
+ * @s: a #GtsSurface.
+ * @Kh: mean curvature normal (a #GtsVector).
+ * @Kg: Gaussian curvature (a gdouble).
+ * @e1: first principal curvature direction (direction of largest curvature).
+ * @e2: second principal curvature direction.
+ *
+ * Computes the principal curvature directions at a point given @Kh
+ * and @Kg, the mean curvature normal and Gaussian curvatures at that
+ * point, computed with gts_vertex_mean_curvature_normal() and
+ * gts_vertex_gaussian_curvature(), respectively. 
+ *
+ * Note that this computation is very approximate and tends to be
+ * unstable.  Smoothing of the surface or the principal directions may
+ * be necessary to achieve reasonable results.  
+ */
+void gts_vertex_principal_directions (GtsVertex * v, GtsSurface * s,
+                                      GtsVector Kh, gdouble Kg,
+				      GtsVector e1, GtsVector e2)
+{
+  GtsVector N;
+  gdouble normKh;
+  GSList * i, * j;
+  GtsVector basis1, basis2, d, eig;
+  gdouble ve2, vdotN;
+  gdouble aterm_da, bterm_da, cterm_da, const_da;
+  gdouble aterm_db, bterm_db, cterm_db, const_db;
+  gdouble a, b, c;
+  gdouble K1, K2;
+  gdouble *weights, *kappas, *d1s, *d2s;
+  gint edge_count;
+  gdouble err_e1, err_e2;
+  int e;
+
+  /* compute unit normal */
+  normKh = sqrt (gts_vector_scalar (Kh, Kh));
+
+  if (normKh > 0.0) {
+    N[0] = Kh[0] / normKh;
+    N[1] = Kh[1] / normKh;
+    N[2] = Kh[2] / normKh;
+  } else {
+    /* This vertex is a point of zero mean curvature (flat or saddle
+     * point).  Compute a normal by averaging the adjacent triangles
+     */
+    N[0] = N[1] = N[2] = 0.0;
+    i = gts_vertex_faces (v, s, NULL);
+    while (i) {
+      gdouble x, y, z;
+      gts_triangle_normal (GTS_TRIANGLE ((GtsFace *) i->data),
+                           &x, &y, &z);
+      N[0] += x;
+      N[1] += y;
+      N[2] += z;
+
+      i = i->next;
+    }
+    g_return_if_fail (gts_vector_norm (N) > 0.0);
+    gts_vector_normalize (N);
+  }
+    
+
+  /* construct a basis from N: */
+  /* set basis1 to any component not the largest of N */
+  basis1[0] =  basis1[1] =  basis1[2] = 0.0;
+  if (fabs (N[0]) > fabs (N[1]))
+    basis1[1] = 1.0;
+  else
+    basis1[0] = 1.0;
+    
+  /* make basis2 orthogonal to N */
+  gts_vector_cross (basis2, N, basis1);
+  gts_vector_normalize (basis2);
+
+  /* make basis1 orthogonal to N and basis2 */
+  gts_vector_cross (basis1, N, basis2);
+  gts_vector_normalize (basis1);
+  
+  aterm_da = bterm_da = cterm_da = const_da = 0.0;
+  aterm_db = bterm_db = cterm_db = const_db = 0.0;
+
+  weights = g_malloc (sizeof (gdouble)*g_slist_length (v->segments));
+  kappas = g_malloc (sizeof (gdouble)*g_slist_length (v->segments));
+  d1s = g_malloc (sizeof (gdouble)*g_slist_length (v->segments));
+  d2s = g_malloc (sizeof (gdouble)*g_slist_length (v->segments));
+  edge_count = 0;
+
+  i = v->segments;
+  while (i) {
+    GtsEdge * e;
+    GtsFace * f1, * f2;
+    gdouble weight, kappa, d1, d2;
+    GtsVector vec_edge;
+
+    if (! GTS_IS_EDGE (i->data)) {
+      i = i->next;
+      continue;
+    }
+
+    e = i->data;
+
+    /* since this vertex passed the tests in
+     * gts_vertex_mean_curvature_normal(), this should be true. */
+    g_assert (gts_edge_face_number (e, s) == 2);
+
+    /* identify the two triangles bordering e in s */
+    f1 = f2 = NULL;
+    j = e->triangles;
+    while (j) {
+      if ((! GTS_IS_FACE (j->data)) || 
+          (! gts_face_has_parent_surface (GTS_FACE (j->data), s))) {
+        j = j->next;
+        continue;
+      }
+      if (f1 == NULL)
+        f1 = GTS_FACE (j->data);
+      else {
+        f2 = GTS_FACE (j->data);
+        break;
+      }
+      j = j->next;
+    }
+    g_assert (f2 != NULL);
+
+    /* We are solving for the values of the curvature tensor 
+     *     B = [ a b ; b c ].  
+     * The computations here are from section 5 of [Meyer et al 2002].  
+     *
+     * The first step is to calculate the linear equations governing
+     * the values of (a,b,c).  These can be computed by setting the
+     * derivatives of the error E to zero (section 5.3).
+     * 
+     * Since a + c = norm(Kh), we only compute the linear equations
+     * for dE/da and dE/db.  (NB: [Meyer et al 2002] has the
+     * equation a + b = norm(Kh), but I'm almost positive this is
+     * incorrect.)
+     *
+     * Note that the w_ij (defined in section 5.2) are all scaled by
+     * (1/8*A_mixed).  We drop this uniform scale factor because the
+     * solution of the linear equations doesn't rely on it.
+     *
+     * The terms of the linear equations are xterm_dy with x in
+     * {a,b,c} and y in {a,b}.  There are also const_dy terms that are
+     * the constant factors in the equations.  
+     */
+
+    /* find the vector from v along edge e */
+    gts_vector_init (vec_edge, GTS_POINT (v), 
+                     GTS_POINT ((GTS_SEGMENT (e)->v1 == v) ? 
+                                GTS_SEGMENT (e)->v2 : GTS_SEGMENT (e)->v1));
+    ve2 = gts_vector_scalar (vec_edge, vec_edge);
+    vdotN = gts_vector_scalar (vec_edge, N);
+
+    /* section 5.2 - There is a typo in the computation of kappa.  The
+     * edges should be x_j-x_i.
+     */
+    kappa = 2.0 * vdotN / ve2;
+
+    /* section 5.2 */
+
+    /* I don't like performing a minimization where some of the
+     * weights can be negative (as can be the case if f1 or f2 are
+     * obtuse).  To ensure all-positive weights, we check for
+     * obtuseness and use values similar to those in region_area(). */
+    weight = 0.0;
+    if (! triangle_obtuse(v, f1)) {
+      weight += ve2 * 
+        cotan (gts_triangle_vertex_opposite (GTS_TRIANGLE (f1), e), 
+               GTS_SEGMENT (e)->v1, GTS_SEGMENT (e)->v2) / 8.0;
+    } else {
+      if (angle_obtuse (v, f1)) {
+        weight += ve2 * gts_triangle_area (GTS_TRIANGLE (f1)) / 4.0;
+      } else {
+        weight += ve2 * gts_triangle_area (GTS_TRIANGLE (f1)) / 8.0;
+      }
+    }
+
+    if (! triangle_obtuse(v, f2)) {
+      weight += ve2 * 
+        cotan (gts_triangle_vertex_opposite (GTS_TRIANGLE (f2), e), 
+               GTS_SEGMENT (e)->v1, GTS_SEGMENT (e)->v2) / 8.0;
+    } else {
+      if (angle_obtuse (v, f2)) {
+        weight += ve2 * gts_triangle_area (GTS_TRIANGLE (f2)) / 4.0;
+      } else {
+        weight += ve2 * gts_triangle_area (GTS_TRIANGLE (f2)) / 8.0;
+      }
+    }
+
+    /* projection of edge perpendicular to N (section 5.3) */
+    d[0] = vec_edge[0] - vdotN * N[0];
+    d[1] = vec_edge[1] - vdotN * N[1];
+    d[2] = vec_edge[2] - vdotN * N[2];
+    gts_vector_normalize (d);
+    
+    /* not explicit in the paper, but necessary.  Move d to 2D basis. */
+    d1 = gts_vector_scalar (d, basis1);
+    d2 = gts_vector_scalar (d, basis2);
+
+    /* store off the curvature, direction of edge, and weights for later use */
+    weights[edge_count] = weight;
+    kappas[edge_count] = kappa;
+    d1s[edge_count] = d1;
+    d2s[edge_count] = d2;
+    edge_count++;
+
+    /* Finally, update the linear equations */
+    aterm_da += weight * d1 * d1 * d1 * d1;
+    bterm_da += weight * d1 * d1 * 2 * d1 * d2;
+    cterm_da += weight * d1 * d1 * d2 * d2;
+    const_da += weight * d1 * d1 * (- kappa);
+
+    aterm_db += weight * d1 * d2 * d1 * d1;
+    bterm_db += weight * d1 * d2 * 2 * d1 * d2;
+    cterm_db += weight * d1 * d2 * d2 * d2;
+    const_db += weight * d1 * d2 * (- kappa);
+
+    i = i->next;
+  }
+
+  /* now use the identity (Section 5.3) a + c = |Kh| = 2 * kappa_h */
+  aterm_da -= cterm_da;
+  const_da += cterm_da * normKh;
+
+  aterm_db -= cterm_db;
+  const_db += cterm_db * normKh;
+  
+  /* check for solvability of the linear system */
+  if (((aterm_da * bterm_db - aterm_db * bterm_da) != 0.0) &&
+      ((const_da != 0.0) || (const_db != 0.0))) {
+    linsolve (aterm_da, bterm_da, -const_da,
+              aterm_db, bterm_db, -const_db,
+              &a, &b);
+
+    c = normKh - a;
+
+    eigenvector (a, b, c, eig);
+  } else {
+    /* region of v is planar */
+    eig[0] = 1.0;
+    eig[1] = 0.0;
+  }
+
+  /* Although the eigenvectors of B are good estimates of the
+   * principal directions, it seems that which one is attached to
+   * which curvature direction is a bit arbitrary.  This may be a bug
+   * in my implementation, or just a side-effect of the inaccuracy of
+   * B due to the discrete nature of the sampling.
+   *
+   * To overcome this behavior, we'll evaluate which assignment best
+   * matches the given eigenvectors by comparing the curvature
+   * estimates computed above and the curvatures calculated from the
+   * discrete differential operators.  */
+
+  gts_vertex_principal_curvatures (0.5 * normKh, Kg, &K1, &K2);
+  
+  err_e1 = err_e2 = 0.0;
+  /* loop through the values previously saved */
+  for (e = 0; e < edge_count; e++) {
+    gdouble weight, kappa, d1, d2;
+    gdouble temp1, temp2;
+    gdouble delta;
+
+    weight = weights[e];
+    kappa = kappas[e];
+    d1 = d1s[e];
+    d2 = d2s[e];
+
+    temp1 = fabs (eig[0] * d1 + eig[1] * d2);
+    temp1 = temp1 * temp1;
+    temp2 = fabs (eig[1] * d1 - eig[0] * d2);
+    temp2 = temp2 * temp2;
+
+    /* err_e1 is for K1 associated with e1 */
+    delta = K1 * temp1 + K2 * temp2 - kappa;
+    err_e1 += weight * delta * delta;
+
+    /* err_e2 is for K1 associated with e2 */
+    delta = K2 * temp1 + K1 * temp2 - kappa;
+    err_e2 += weight * delta * delta;
+  }
+  g_free (weights);
+  g_free (kappas);
+  g_free (d1s);
+  g_free (d2s);
+
+  /* rotate eig by a right angle if that would decrease the error */
+  if (err_e2 < err_e1) {
+    gdouble temp = eig[0];
+
+    eig[0] = eig[1];
+    eig[1] = -temp;
+  }
+
+  e1[0] = eig[0] * basis1[0] + eig[1] * basis2[0];
+  e1[1] = eig[0] * basis1[1] + eig[1] * basis2[1];
+  e1[2] = eig[0] * basis1[2] + eig[1] * basis2[2];
+  gts_vector_normalize (e1);
+
+  /* make N,e1,e2 a right handed coordinate sytem */
+  gts_vector_cross (e2, N, e1);
+  gts_vector_normalize (e2);
+}
diff --git a/src/edge.c b/src/edge.c
index 582d4e6..f92af35 100644
--- a/src/edge.c
+++ b/src/edge.c
@@ -479,3 +479,100 @@ guint gts_edge_is_contact (GtsEdge * e)
 
   return ncomponent;
 }
+
+/**
+ * gts_edge_swap:
+ * @e: a #GtsEdge.
+ * @s: a #GtsSurface.
+ *
+ * Performs an "edge swap" on the two triangles sharing @e and
+ * belonging to @s.
+ */
+void gts_edge_swap (GtsEdge * e, GtsSurface * s)
+{
+  GtsTriangle * t1 = NULL, * t2 = NULL, * t = NULL;
+  GtsFace * f;
+  GSList * i;
+  GtsVertex * v1, * v2, * v3, * v4, * v5, * v6;
+  GtsEdge * e1, * e2, * e3, * e4;
+  GtsSegment * v3v6;
+
+  g_return_if_fail (e != NULL);
+  g_return_if_fail (s != NULL);
+
+  i = e->triangles;
+  while (i) {
+    if (GTS_IS_FACE (i->data) && gts_face_has_parent_surface (i->data, s)) {
+      if (!t1)
+	t1 = i->data;
+      else if (!t2)
+	t2 = i->data;
+      else
+	g_return_if_fail (gts_edge_face_number (e, s) == 2);
+    }
+    i = i->next;
+  }
+  g_assert (t1 && t2);
+
+  gts_triangle_vertices_edges (t1, e, &v1, &v2, &v3, &e, &e1, &e2);
+  gts_triangle_vertices_edges (t2, e, &v4, &v5, &v6, &e, &e3, &e4);
+  g_assert (v2 == v4 && v1 == v5);
+
+  v3v6 = gts_vertices_are_connected (v3, v6);
+  if (!GTS_IS_EDGE (v3v6))
+    v3v6 = GTS_SEGMENT (gts_edge_new (s->edge_class, v3, v6));
+  f = gts_face_new (s->face_class, e1, GTS_EDGE (v3v6), e4);
+  if ((t == gts_triangle_is_duplicate (GTS_TRIANGLE (f))) &&
+      GTS_IS_FACE (t)) {
+    gts_object_destroy (GTS_OBJECT (f));
+    f = GTS_FACE (t);
+  }
+  gts_surface_add_face (s, f);
+
+  f = gts_face_new (s->face_class, GTS_EDGE (v3v6), e2, e3);
+  if ((t == gts_triangle_is_duplicate (GTS_TRIANGLE (f))) &&
+      GTS_IS_FACE (t)) {
+    gts_object_destroy (GTS_OBJECT (f));
+    f = GTS_FACE (t);
+  }
+  gts_surface_add_face (s, f);
+
+  gts_surface_remove_face (s, GTS_FACE (t1));
+  gts_surface_remove_face (s, GTS_FACE (t2));
+}
+
+/**
+ * gts_edge_manifold_faces:
+ * @e: a #GtsEdge.
+ * @s: a #GtsSurface.
+ * @f1: pointer for first face.
+ * @f2: pointer for second face.
+ *
+ * If @e is a manifold edge of surface @s, fills @f1 and @f2 with the
+ * faces belonging to @s and sharing @e.
+ *
+ * Returns: %TRUE if @e is a manifold edge, %FALSE otherwise.
+ */
+gboolean gts_edge_manifold_faces (GtsEdge * e, GtsSurface * s,
+				  GtsFace ** f1, GtsFace ** f2)
+{
+  GSList * i;
+
+  g_return_val_if_fail (e != NULL, FALSE);
+  g_return_val_if_fail (s != NULL, FALSE);
+  g_return_val_if_fail (f1 != NULL, FALSE);
+  g_return_val_if_fail (f2 != NULL, FALSE);
+
+  *f1 = *f2 = NULL;
+  i = e->triangles;
+  while (i) {
+    if (GTS_IS_FACE (i->data) && gts_face_has_parent_surface (i->data, s)) {
+      if (!(*f1)) *f1 = i->data;
+      else if (!(*f2)) *f2 = i->data;
+      else return FALSE;
+    }
+    i = i->next;
+  }
+
+  return (*f1 && *f2);
+}
diff --git a/src/fifo.c b/src/fifo.c
index b967e3b..8b3d2b6 100644
--- a/src/fifo.c
+++ b/src/fifo.c
@@ -176,3 +176,17 @@ void gts_fifo_foreach (GtsFifo * fifo, GtsFunc func, gpointer data)
     i = i->prev;
   }
 }
+
+/**
+ * gts_fifo_reverse:
+ * @fifo: a #GtsFifo.
+ *
+ * Reverses the order of elements in @fifo.
+ */
+void gts_fifo_reverse (GtsFifo * fifo)
+{
+  g_return_if_fail (fifo != NULL);
+
+  fifo->tail = fifo->head;
+  fifo->head = g_list_reverse (fifo->head);
+}
diff --git a/src/graph.c b/src/graph.c
index 3a23c0d..5e95ad6 100644
--- a/src/graph.c
+++ b/src/graph.c
@@ -28,7 +28,9 @@ gboolean gts_allow_floating_gnodes = FALSE;
 static void gnode_remove_container (GtsContainee * i, GtsContainer * c)
 {
   (* GTS_CONTAINEE_CLASS (GTS_OBJECT_CLASS (gts_gnode_class ())->parent_class)->remove_container) (i, c);
-  if (GTS_SLIST_CONTAINEE (i)->containers == NULL && !gts_allow_floating_gnodes)
+  if (GTS_SLIST_CONTAINEE (i)->containers == NULL && 
+      !gts_allow_floating_gnodes &&
+      !GTS_OBJECT_DESTROYED(GTS_OBJECT (i)))
     gts_object_destroy (GTS_OBJECT (i));
 }
 
@@ -340,8 +342,83 @@ GtsWGNode * gts_wgnode_new (GtsWGNodeClass * klass,
   return n;
 }
 
+/* GtsPNode */
+
+static void pnode_write (GtsGNode * n, FILE * fp)
+{
+  if (GTS_IS_NVERTEX (GTS_PNODE (n)->data))
+    fprintf (fp, "label=\"%p:%s\",", 
+	     GTS_PNODE (n)->data,
+	     GTS_NVERTEX (GTS_PNODE (n)->data)->name);
+  else
+    fprintf (fp, "label=\"%p\",", GTS_PNODE (n)->data);
+}
+
+static void pnode_class_init (GtsPNodeClass * klass)
+{
+  GTS_GNODE_CLASS (klass)->write = pnode_write;
+}
+
+static void pnode_init (GtsPNode * pn)
+{
+  pn->data = NULL;
+}
+
+/**
+ * gts_pnode_class:
+ *
+ * Returns: the #GtsPNodeClass.
+ */
+GtsPNodeClass * gts_pnode_class (void)
+{
+  static GtsPNodeClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo pnode_info = {
+      "GtsPNode",
+      sizeof (GtsPNode),
+      sizeof (GtsPNodeClass),
+      (GtsObjectClassInitFunc) pnode_class_init,
+      (GtsObjectInitFunc) pnode_init,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_gnode_class ()),
+				  &pnode_info);
+  }
+
+  return klass;
+}
+
+/**
+ * gts_pnode_new:
+ * @klass: a #GtsPNodeClass.
+ * @data: user data.
+ *
+ * Returns: a new #GtsPNode associated with @data.
+ */
+GtsPNode * gts_pnode_new (GtsPNodeClass * klass, gpointer data)
+{
+  GtsPNode * pn;
+
+  pn = GTS_PNODE (gts_object_new (GTS_OBJECT_CLASS (klass)));
+  pn->data = data;
+
+  return pn;
+}
+
 /* GtsFNode */
 
+static void fnode_write (GtsGNode * n, FILE * fp)
+{
+  fprintf (fp, "label=\"%p\",", GTS_FNODE (n)->f);
+}
+
+static void fnode_class_init (GtsGNodeClass * klass)
+{
+  klass->write = fnode_write;
+}
+
 static void fnode_init (GtsFNode * fn)
 {
   fn->f = NULL;
@@ -361,7 +438,7 @@ GtsFNodeClass * gts_fnode_class (void)
       "GtsFNode",
       sizeof (GtsFNode),
       sizeof (GtsFNodeClass),
-      (GtsObjectClassInitFunc) NULL,
+      (GtsObjectClassInitFunc) fnode_class_init,
       (GtsObjectInitFunc) fnode_init,
       (GtsArgSetFunc) NULL,
       (GtsArgGetFunc) NULL
@@ -415,10 +492,10 @@ static void gedge_remove_container (GtsContainee * i, GtsContainer * c)
   ge->n1 = ge->n2 = NULL;
   if (n1 != NULL && n2 != NULL) {
     if (GTS_CONTAINER (n1) == c) {
-      if (n2) gts_container_remove (GTS_CONTAINER (n2), i);
+      if (n2 && n2 != n1) gts_container_remove (GTS_CONTAINER (n2), i);
     }
     else if (GTS_CONTAINER (n2) == c) {
-      if (n1) gts_container_remove (GTS_CONTAINER (n1), i);
+      if (n1 && n1 != n2) gts_container_remove (GTS_CONTAINER (n1), i);
     }
     else
       g_assert_not_reached ();
@@ -438,6 +515,7 @@ static gboolean gedge_is_contained (GtsContainee * i, GtsContainer * c)
 
 static void gedge_class_init (GtsGEdgeClass * klass)
 {
+  klass->link = NULL;
   klass->weight = NULL;
 
   GTS_CONTAINEE_CLASS (klass)->remove_container = gedge_remove_container;
@@ -491,13 +569,16 @@ GtsGEdge * gts_gedge_new (GtsGEdgeClass * klass, GtsGNode * n1, GtsGNode * n2)
 
   g_return_val_if_fail (n1 != NULL, NULL);
   g_return_val_if_fail (n2 != NULL, NULL);
-  g_return_val_if_fail (n1 != n2, NULL);
 
   object = GTS_GEDGE (gts_object_new (GTS_OBJECT_CLASS (klass)));
   object->n1 = n1;
   gts_container_add (GTS_CONTAINER (n1), GTS_CONTAINEE (object));
   object->n2 = n2;
-  gts_container_add (GTS_CONTAINER (n2), GTS_CONTAINEE (object));
+  if (n1 != n2)
+    gts_container_add (GTS_CONTAINER (n2), GTS_CONTAINEE (object));
+
+  if (klass->link)
+    object = (* klass->link) (object, n1, n2);
 
   return object;
 }
@@ -518,6 +599,86 @@ gfloat gts_gedge_weight (GtsGEdge * e)
   return 1.;
 }
 
+/* GtsPGEdge */
+
+static void pgedge_write (GtsGEdge * ge, FILE * fp)
+{
+  if (GTS_IS_EDGE (GTS_PGEDGE (ge)->data)) {
+    GtsEdge * e = GTS_PGEDGE (ge)->data;
+    guint n = g_slist_length (e->triangles);
+
+    fprintf (fp, "label=\"%p:%s:%d\",color=%s", e,
+	     GTS_IS_NEDGE (e) ? GTS_NEDGE (e)->name : "",
+	     n,
+	     n == 0 ? "black" : 
+             n == 1 ? "blue" :
+	     n == 2 ? "green" :
+	     n == 3 ? "violet" :
+	     n == 4 ? "red" : 
+	     "pink");
+  }
+  else
+    fprintf (fp, "label=\"%p\",", GTS_PGEDGE (ge)->data);
+}
+
+static void pgedge_class_init (GtsPGEdgeClass * klass)
+{
+  GTS_GEDGE_CLASS (klass)->write = pgedge_write;
+}
+
+static void pgedge_init (GtsPGEdge * e)
+{
+  e->data = NULL;
+}
+
+/**
+ * gts_pgedge_class:
+ * 
+ * Returns: the #GtsPGEdgeClass.
+ */
+GtsPGEdgeClass * gts_pgedge_class (void)
+{
+  static GtsPGEdgeClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo pgedge_info = {
+      "GtsPGEdge",
+      sizeof (GtsPGEdge),
+      sizeof (GtsPGEdgeClass),
+      (GtsObjectClassInitFunc) pgedge_class_init,
+      (GtsObjectInitFunc) pgedge_init,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_gedge_class ()),
+				  &pgedge_info);
+  }
+
+  return klass;
+}
+
+/**
+ * gts_pgedge_new:
+ * @klass: a #GtsPGEdgeClass.
+ * @n1: a #GtsGNode.
+ * @n2: another #GtsGNode.
+ * @data: user data.
+ *
+ * Returns: a new #GtsPGEdge associated with @data linking @n1 and @n2.
+ */ 
+GtsPGEdge * gts_pgedge_new (GtsPGEdgeClass * klass,
+			    GtsGNode * g1,
+			    GtsGNode * g2,
+			    gpointer data)
+{
+  GtsPGEdge * we;
+
+  we = GTS_PGEDGE (gts_gedge_new (GTS_GEDGE_CLASS (klass), g1, g2));
+  we->data = data;
+
+  return we;
+}
+
 /* GtsWGEdge */
 
 static gfloat wgedge_weight (GtsGEdge * e)
@@ -587,13 +748,64 @@ GtsWGEdge * gts_wgedge_new (GtsWGEdgeClass * klass,
 
 static void graph_init (GtsGraph * g)
 {
-  g->node_class = gts_gnode_class ();
-  g->edge_class = gts_gedge_class ();
+  g->graph_class = gts_graph_class ();
+  g->node_class  = gts_gnode_class ();
+  g->edge_class  = gts_gedge_class ();
+}
+
+static void graph_write (GtsObject * object, FILE * fp)
+{
+  GtsGraph * graph = GTS_GRAPH (object);
+
+  fprintf (fp, " %s %s %s",
+	   object->klass->info.name,
+	   GTS_OBJECT_CLASS (graph->node_class)->info.name,
+	   GTS_OBJECT_CLASS (graph->edge_class)->info.name);
+}
+
+static void graph_read (GtsObject ** object, GtsFile * f)
+{
+  GtsObjectClass * klass;
+
+  if (f->type != GTS_STRING) {
+    gts_file_error (f, "expecting a string (GtsGNodeClass)");
+    return;
+  }
+  klass = gts_object_class_from_name (f->token->str);
+  if (klass == NULL) {
+    gts_file_error (f, "unknown class `%s'", f->token->str);
+    return;
+  }
+  if (!gts_object_class_is_from_class (klass, gts_gnode_class ())) {
+    gts_file_error (f, "class `%s' is not a GtsGNodeClass", f->token->str);
+    return;
+  }
+  GTS_GRAPH (*object)->node_class = GTS_GNODE_CLASS (klass);
+  gts_file_next_token (f);
+
+  if (f->type != GTS_STRING) {
+    gts_file_error (f, "expecting a string (GtsGEdgeClass)");
+    return;
+  }
+  klass = gts_object_class_from_name (f->token->str);
+  if (klass == NULL) {
+    gts_file_error (f, "unknown class `%s'", f->token->str);
+    return;
+  }
+  if (!gts_object_class_is_from_class (klass, gts_gedge_class ())) {
+    gts_file_error (f, "class `%s' is not a GtsGEdgeClass", f->token->str);
+    return;
+  }
+  GTS_GRAPH (*object)->edge_class = GTS_GEDGE_CLASS (klass);
+  gts_file_next_token (f);
 }
 
 static void graph_class_init (GtsGraphClass * klass)
 {
   klass->weight = NULL;
+
+  GTS_OBJECT_CLASS (klass)->write = graph_write;
+  GTS_OBJECT_CLASS (klass)->read = graph_read;
 }
 
 /**
@@ -641,6 +853,8 @@ GtsGraph * gts_graph_new (GtsGraphClass * klass,
   g_return_val_if_fail (edge_class != NULL, NULL);
 
   g = GTS_GRAPH (gts_object_new (GTS_OBJECT_CLASS (klass)));
+  g->node_class = node_class;
+  g->edge_class = edge_class;
 
   return g;
 }
@@ -795,7 +1009,7 @@ void gts_graph_traverse_destroy (GtsGraphTraverse * t)
 
 static void edge_foreach_node (GtsGNode * n, gpointer * info)
 {
-  GtsFunc func = info[0];
+  GtsFunc func = (GtsFunc) info[0];
   gpointer data = info[1];
   GHashTable * hash = info[2];
   GSList * i = GTS_SLIST_CONTAINER (n)->items;
@@ -998,9 +1212,9 @@ gfloat gts_graph_edges_cut_weight (GtsGraph * g)
 }
 
 /**
- * gts_graph_read:
+ * gts_graph_read_jostle:
  * @g: a #GtsGraph.
- * @fp: a file pointer.
+ * @fp: a #GtsFile.
  *
  * Adds to @g the nodes and edges defined in the file pointed to by
  * @fp. This file must use the Jostle "graph" ASCII format.  
@@ -1008,68 +1222,335 @@ gfloat gts_graph_edges_cut_weight (GtsGraph * g)
  * line number at which they appear in @fp.
  *
  * Returns: 0 if the lecture was successful, the line number at which
- * an error occured otherwise.  
+ * an error occured otherwise (in which case the @error field of @fp
+ * is set).  
  */
-guint gts_graph_read (GtsGraph * g, FILE * fp)
+guint gts_graph_read_jostle (GtsGraph * g, GtsFile * fp)
 {
-  guint nn, ne, line_number = 1, n;
-  GString * buf;
-  gint delim;
+  guint nn, ne, n;
   GtsGNode ** nodes;
-  gboolean syntax_error = FALSE;
 
   g_return_val_if_fail (g != NULL, 1);
   g_return_val_if_fail (fp != NULL, 1);
 
-  buf = g_string_new ("");
-
-  delim = gts_get_token (fp, buf, " \t\n", "");
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return 1;
+  if (fp->type != GTS_INT) {
+    gts_file_error (fp, "expecting an integer (number of nodes)");
+    return fp->line;
   }
-  nn = atoi (buf->str);
-  delim = gts_get_token (fp, buf, " \t\n", "");
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
-    return 1;
+  nn = atoi (fp->token->str);
+  gts_file_next_token (fp);
+
+  if (fp->type != GTS_INT) {
+    gts_file_error (fp, "expecting an integer (number of edges)");
+    return fp->line;
   }
-  ne = atoi (buf->str);
-  if (delim != '\n')
-    gts_get_newline (fp);
+  ne = atoi (fp->token->str);
+
+  gts_file_first_token_after (fp, '\n');
   nodes = g_malloc (sizeof (GtsGNode *)*(nn + 1));
 
   n = 0;
-  while (n < nn && !syntax_error) {
-    GtsNGNode * node = gts_ngnode_new (gts_ngnode_class (), line_number);
+  while (n < nn && fp->type != GTS_ERROR) {
+    GtsNGNode * node = gts_ngnode_new (gts_ngnode_class (), fp->line);
     
     nodes[n++] = GTS_GNODE (node);
     gts_container_add (GTS_CONTAINER (g), GTS_CONTAINEE (node));
-    line_number++;
     do {
-      delim = gts_get_token (fp, buf, " \t\n", "");
-      if (delim == EOF)
-	syntax_error = TRUE;
+      if (fp->type != GTS_INT)
+	gts_file_error (fp, "expecting an integer (node index)");
       else {
-	guint in = atoi (buf->str);
-	if (in > nn || in == n || in == 0)
-	  syntax_error = TRUE;
+	guint in = atoi (fp->token->str);
+	
+	if (in == 0 || in > nn)
+	  gts_file_error (fp, "node index `%d' is out of range `[1,%d]'",
+			  in, nn);
+	else if (in == n)
+	  gts_file_error (fp, "node index `%d' references itself", in);
 	else if (in < n) {
 	  gts_gedge_new (g->edge_class, GTS_GNODE (node), nodes[in - 1]);
 	  ne--;
+	  gts_file_next_token (fp);
 	}
       }
-    } while (delim != EOF && delim != '\n' && !syntax_error);
+    } while (fp->type != GTS_ERROR && fp->type != '\n');
   }
   g_free (nodes);
-  g_string_free (buf, TRUE);
 
-  if (n != nn || ne > 0 || syntax_error)
-    return line_number;  
+  if (fp->type != GTS_ERROR) {
+    if (n != nn)
+      gts_file_error (fp, "only `%d' nodes read out of `%d'",
+		      n, nn);
+    else if (ne > 0)
+      gts_file_error (fp, "`%d' unallocated edges remaining",
+		      ne);
+  }
 
+  if (fp->type == GTS_ERROR)
+    return fp->line;
   return 0;
 }
 
+static void count_edges (GtsGEdge * e, guint * nedge)
+{
+  (*nedge)++;
+}
+
+static void write_node (GtsObject * node, gpointer * data)
+{
+  FILE * fp = data[0];
+  guint * nnode = data[1];
+
+  node->reserved = GUINT_TO_POINTER ((*nnode)++);
+  if (node->klass->write)
+    (* node->klass->write) (node, fp);
+  fputc ('\n', fp);
+}
+
+static void write_edge (GtsGEdge * edge, FILE * fp)
+{
+  fprintf (fp, "%u %u", 
+	   GPOINTER_TO_UINT (GTS_OBJECT (edge->n1)->reserved),
+	   GPOINTER_TO_UINT (GTS_OBJECT (edge->n2)->reserved));
+  if (GTS_OBJECT (edge)->klass->write)
+    (* GTS_OBJECT (edge)->klass->write) (GTS_OBJECT (edge), fp);
+  fputc ('\n', fp);
+}
+
+/**
+ * gts_graph_write:
+ * @g: a #GtsGraph.
+ * @fp: a file pointer.
+ *
+ * Writes in the file @fp an ASCII representation of @g. The file
+ * format is as follows. 
+ *
+ * All the lines beginning with #GTS_COMMENTS are ignored. The first line
+ * contains two unsigned integers separated by spaces. The first
+ * integer is the number of nodes, nn, the second is the number of
+ * edges, ne.
+ *
+ * Follows nn lines containing node description.
+ * Follows ne lines containing the two indices (starting
+ * from one) of the nodes of each edge.
+ *
+ * The format described above is the least common denominator to all
+ * GTS files.  Consistent with an object-oriented approach, the GTS
+ * file format is extensible. Each of the lines of the file can be
+ * extended with user-specific attributes accessible through the
+ * read() and write() virtual methods of each of the objects written
+ * (graph, nodes or edges). When read with different object classes,
+ * these extra attributes are just ignored.  
+ */
+void gts_graph_write (GtsGraph * g, FILE * fp)
+{
+  guint nnode = 1, nedge = 0;
+  gpointer data[2];
+
+  g_return_if_fail (g != NULL);
+  g_return_if_fail (fp != NULL);
+
+  gts_graph_foreach_edge (g, (GtsFunc) count_edges, &nedge);
+  fprintf (fp, "%u %u", gts_container_size (GTS_CONTAINER (g)), nedge);
+  if (GTS_OBJECT (g)->klass->write)
+    (* GTS_OBJECT (g)->klass->write) (GTS_OBJECT (g), fp);
+  fputc ('\n', fp);
+  data[0] = fp;
+  data[1] = &nnode;
+  gts_container_foreach (GTS_CONTAINER (g), (GtsFunc) write_node, data);
+  gts_graph_foreach_edge (g, (GtsFunc) write_edge, fp);
+  gts_container_foreach (GTS_CONTAINER (g), 
+			 (GtsFunc) gts_object_reset_reserved, NULL);
+}
+
+/**
+ * gts_graph_read:
+ * @fp: a #GtsFile.
+ *
+ * Reads a graph from a file.
+ *
+ * Returns: the new #GtsGraph or %NULL if an error occured (in which
+ * case the @error field of @fp is set).
+ */
+GtsGraph * gts_graph_read (GtsFile * fp)
+{
+  GtsGraph * g;
+  GtsGNode ** nodes;
+  guint nn, ne, n;
+
+  g_return_val_if_fail (fp != NULL, NULL);
+
+  if (fp->type != GTS_INT) {
+    gts_file_error (fp, "expecting an integer (number of nodes)");
+    return NULL;
+  }
+  nn = atoi (fp->token->str);
+  gts_file_next_token (fp);
+
+  if (fp->type != GTS_INT) {
+    gts_file_error (fp, "expecting an integer (number of edges)");
+    return NULL;
+  }
+  ne = atoi (fp->token->str);
+
+  gts_file_next_token (fp);
+  if (fp->type != '\n') {
+    GtsObjectClass * klass;
+
+    gts_graph_class ();
+    gts_gnode_class ();
+    gts_gedge_class ();
+
+    if (fp->type != GTS_STRING) {
+      gts_file_error (fp, "expecting a string (GtsGraphClass)");
+      return NULL;
+    }
+    klass = gts_object_class_from_name (fp->token->str);
+    if (klass == NULL) {
+      gts_file_error (fp, "unknown class `%s'", fp->token->str);
+      return NULL;
+    }
+    if (!gts_object_class_is_from_class (klass, gts_graph_class ())) {
+      gts_file_error (fp, "class `%s' is not a GtsGraphClass", fp->token->str);
+      return NULL;
+    }
+    g = GTS_GRAPH (gts_object_new (klass));
+    g->graph_class = GTS_GRAPH_CLASS (klass);
+    gts_file_next_token (fp);
+    (* klass->read) ((GtsObject **) &g, fp);
+    if (fp->type == GTS_ERROR) {
+      gts_object_destroy (GTS_OBJECT (g));
+      return NULL;
+    }
+  }
+  else
+    g = GTS_GRAPH (gts_object_new (GTS_OBJECT_CLASS (gts_graph_class ())));
+  gts_file_first_token_after (fp, '\n');
+  if (nn <= 0)
+    return g;
+
+  nodes = g_malloc ((nn + 1)*sizeof (GtsGNode *));
+
+  n = 0;
+  while (n < nn && fp->type != GTS_ERROR) {
+    GtsObject * new_node = 
+      gts_object_new (GTS_OBJECT_CLASS (g->node_class));
+
+    gts_container_add (GTS_CONTAINER (g), GTS_CONTAINEE (new_node));
+    if (GTS_OBJECT_CLASS (g->node_class)->read)
+      (*GTS_OBJECT_CLASS (g->node_class)->read) (&new_node, fp);
+    gts_file_first_token_after (fp, '\n');
+    nodes[n++] = GTS_GNODE (new_node);
+  }
+  if (fp->type == GTS_ERROR)
+    nn = n;
+
+  n = 0;
+  while (n < ne && fp->type != GTS_ERROR) {
+    guint n1, n2;
+
+    if (fp->type != GTS_INT)
+      gts_file_error (fp, "expecting an integer (first node index)");
+    else {
+      n1 = atoi (fp->token->str);
+      if (n1 == 0 || n1 > nn)
+	gts_file_error (fp, "node index `%d' is out of range `[1,%d]'",
+			n1, nn);
+      else {
+	gts_file_next_token (fp);
+	if (fp->type != GTS_INT)
+	  gts_file_error (fp, "expecting an integer (second node index)");
+	else {
+	  n2 = atoi (fp->token->str);
+	  if (n2 == 0 || n2 > nn)
+	    gts_file_error (fp, "node index `%d' is out of range `[1,%d]'",
+			    n2, nn);
+	  else {
+	    GtsGEdge * new_edge =
+	      gts_gedge_new (g->edge_class, nodes[n1 - 1], nodes [n2 - 1]);
+
+	    gts_file_next_token (fp);
+	    if (fp->type != '\n')
+	      if (GTS_OBJECT_CLASS (g->edge_class)->read)
+		(*GTS_OBJECT_CLASS (g->edge_class)->read)
+		  ((GtsObject **) &new_edge, fp);
+	    gts_file_first_token_after (fp, '\n');
+	    n++;
+	  }
+	}
+      }
+    }
+  }
+
+  if (fp->type == GTS_ERROR) {
+    gts_allow_floating_gnodes = TRUE;
+    while (nn)
+      gts_object_destroy (GTS_OBJECT (nodes[nn-- - 1]));
+    gts_allow_floating_gnodes = FALSE;
+  }
+  g_free (nodes);
+
+  if (fp->type == GTS_ERROR) {
+    gts_object_destroy (GTS_OBJECT (g));
+    return NULL;
+  }
+  return g;
+}
+
+static void write_dot_node (GtsGNode * node, gpointer * data)
+{
+  FILE * fp = data[0];
+  guint * nnode = data[1];
+
+  fprintf (fp, "  n%u", *nnode);
+  if (GTS_GNODE_CLASS (GTS_OBJECT (node)->klass)->write) {
+    fputs (" [", fp);
+    (* GTS_GNODE_CLASS (GTS_OBJECT (node)->klass)->write) (node, fp);
+    fputc (']', fp);
+  }
+  fputs (";\n", fp);
+  GTS_OBJECT (node)->reserved = GUINT_TO_POINTER ((*nnode)++);  
+}
+
+static void write_dot_edge (GtsGEdge * edge, FILE * fp)
+{
+  fprintf (fp, "  n%u -> n%u", 
+	   GPOINTER_TO_UINT (GTS_OBJECT (edge->n1)->reserved),
+	   GPOINTER_TO_UINT (GTS_OBJECT (edge->n2)->reserved));
+  if (GTS_GEDGE_CLASS (GTS_OBJECT (edge)->klass)->write) {
+    fputs (" [", fp);
+    (* GTS_GEDGE_CLASS (GTS_OBJECT (edge)->klass)->write) (edge, fp);
+    fputc (']', fp);
+  }
+  fputs (";\n", fp);
+}
+
+/**
+ * gts_graph_write_dot:
+ * @g: a #GtsGraph.
+ * @fp: a file pointer.
+ *
+ * Writes in the file @fp an ASCII representation of @g in the dot format of
+ * AT&T Bell Labs.
+ */
+void gts_graph_write_dot (GtsGraph * g, FILE * fp)
+{
+  guint nnode = 1;
+  gpointer data[2];
+
+  g_return_if_fail (g != NULL);
+  g_return_if_fail (fp != NULL);
+
+  fprintf (fp, "digraph \"%p\" {\n", g);
+  data[0] = fp;
+  data[1] = &nnode;
+  gts_container_foreach (GTS_CONTAINER (g), (GtsFunc) write_dot_node, data);
+  gts_graph_foreach_edge (g, (GtsFunc) write_dot_edge, fp);
+  fputs ("}\n", fp);
+
+  gts_container_foreach (GTS_CONTAINER (g), 
+			 (GtsFunc) gts_object_reset_reserved, NULL);
+}
+
 /* GtsWGraph */
 
 static gfloat wgraph_weight (GtsGraph * g)
@@ -1179,9 +1660,10 @@ static void create_edge (GtsEdge * e, GtsSurface * s)
       while (j) {
 	GtsFace * f1 = j->data;
 	if (GTS_IS_FACE (f1) && gts_face_has_parent_surface (f1, s))
-	  gts_gedge_new (gts_gedge_class (), 
-			 GTS_OBJECT (f)->reserved,
-			 GTS_OBJECT (f1)->reserved);
+	  gts_pgedge_new (gts_pgedge_class (), 
+			  GTS_OBJECT (f)->reserved,
+			  GTS_OBJECT (f1)->reserved,
+			  e);
 	j = j->next;
       }
     }
@@ -1214,6 +1696,53 @@ GtsGraph * gts_surface_graph_new (GtsGraphClass * klass,
   return graph;
 }
 
+static void create_segment_edge (GtsSegment * s, GtsGraph * graph)
+{
+  GtsGNode * n1 = GTS_OBJECT (s->v1)->reserved, * n2;
+
+  if (n1 == NULL) {
+    n1 = GTS_GNODE (gts_pnode_new (gts_pnode_class (), s->v1));
+    gts_container_add (GTS_CONTAINER (graph), GTS_CONTAINEE (n1));
+    GTS_OBJECT (s->v1)->reserved = n1;
+  }
+
+  n2 = GTS_OBJECT (s->v2)->reserved;
+  if (n2 == NULL) {
+    n2 = GTS_GNODE (gts_pnode_new (gts_pnode_class (), s->v2));
+    gts_container_add (GTS_CONTAINER (graph), GTS_CONTAINEE (n2));
+    GTS_OBJECT (s->v2)->reserved = n2;
+  }
+  
+  gts_pgedge_new (gts_pgedge_class (), n1, n2, s);
+}
+
+static void reset_reserved (GtsSegment * s)
+{
+  GTS_OBJECT (s->v1)->reserved = GTS_OBJECT (s->v2)->reserved = NULL;
+}
+
+/**
+ * gts_segments_graph_new:
+ * @klass: a #GtsGraphClass.
+ * @segments: a list of #GtsSegment.
+ *
+ * Returns: a new #GtsGraph representing the connectivity of the segments
+ * in @segments.
+ */
+GtsGraph * gts_segments_graph_new (GtsGraphClass * klass,
+				   GSList * segments)
+{
+  GtsGraph * graph;
+  
+  g_return_val_if_fail (klass != NULL, NULL);
+
+  graph = GTS_GRAPH (gts_object_new (GTS_OBJECT_CLASS (klass)));
+  g_slist_foreach (segments, (GFunc) create_segment_edge, graph);
+  g_slist_foreach (segments, (GFunc) reset_reserved, NULL);
+
+  return graph;
+}
+
 static void add_to_surface (GtsGNode * n, GtsSurface * s)
 {
   if (GTS_IS_FNODE (n))
diff --git a/src/gts-config.in b/src/gts-config.in
index 184a304..0eed417 100644
--- a/src/gts-config.in
+++ b/src/gts-config.in
@@ -2,6 +2,10 @@
 
 glib_libs="@glib_libs@"
 glib_cflags="@glib_cflags@"
+glib_thread_libs="@glib_thread_libs@"
+glib_thread_cflags="@glib_thread_cflags@"
+glib_module_libs="@glib_module_libs@"
+glib_module_cflags="@glib_module_cflags@"
 
 prefix=@prefix@
 exec_prefix=@exec_prefix@
@@ -10,7 +14,7 @@ exec_prefix_set=no
 usage()
 {
 	cat <<EOF
-Usage: gts-config [OPTIONS]
+Usage: gts-config [OPTIONS] [LIBRARIES]
 Options:
 	[--prefix[=DIR]]
 	[--exec-prefix[=DIR]]
@@ -18,10 +22,28 @@ Options:
 	[--libs]
 	[--cflags]
 	[--check]
+Libraries:
+	gts
+	gmodule
+	gthread
 EOF
 	exit $1
 }
 
+uniquify()
+{
+    echo $1 | awk '{
+	for (i = 1; i <= NF; i++) {
+	    unique = 1;
+	    for (j = i + 1; j <= NF && unique; j++)
+		if ($i == $j)
+		    unique = 0;
+            if (unique)
+		printf ("%s ", $i);
+	}
+    }'
+}
+
 if test $# -eq 0; then
 	usage 1 1>&2
 fi
@@ -62,6 +84,15 @@ while test $# -gt 0; do
     --check)
       echo_check=yes
       ;;
+    gts)
+      lib_gts=yes
+      ;;
+    gmodule)
+      lib_gmodule=yes
+      ;;
+    gthread)
+      lib_gthread=yes
+      ;;
     *)
       usage 1 1>&2
       ;;
@@ -76,32 +107,28 @@ if test "$echo_exec_prefix" = "yes"; then
 	echo $exec_prefix
 fi
 if test "$echo_cflags" = "yes"; then
-	if test ${prefix}/include != /usr/include ; then
-	    includes=-I${prefix}/include
-	    for i in $glib_cflags ; do
-		if test $i = -I${prefix}/include ; then
-		    includes=""
-		fi
-	    done
+	if test "$lib_gmodule" = "yes"; then
+	    glib_cflags="$glib_cflags $glib_module_cflags"
+	fi
+	if test "$lib_gthread" = "yes"; then
+	    glib_cflags="$glib_cflags $glib_thread_cflags"
 	fi
+	glib_cflags="$glib_cflags -I${prefix}/include"
+	glib_cflags=`uniquify "$glib_cflags"`
         if test "$echo_check" = "yes"; then
-	    echo -DGTS_CHECK_CASTS $includes $glib_cflags
+	    echo -DGTS_CHECK_CASTS $glib_cflags
         else
-	    echo $includes $glib_cflags
+	    echo $glib_cflags
 	fi
 fi
 if test "$echo_libs" = "yes"; then
-	my_glib_libs=
-	libdirs=-L${exec_prefix}/lib
-	for i in $glib_libs ; do
-	    if test $i != -L${exec_prefix}/lib ; then
-		if test -z "$my_glib_libs" ; then
-		    my_glib_libs="$i"
-		else
-		    my_glib_libs="$my_glib_libs $i"
-		fi
-	    fi
-	done
-
-	echo $libdirs -lgts $my_glib_libs -lm
+	if test "$lib_gmodule" = "yes"; then
+	    glib_libs="$glib_libs $glib_module_libs"
+	fi
+	if test "$lib_gthread" = "yes"; then
+	    glib_libs="$glib_libs $glib_thread_libs"
+	fi
+	glib_libs="-L${exec_prefix}/lib -lgts $glib_libs -lm"
+	glib_libs=`uniquify "$glib_libs"`
+	echo $glib_libs
 fi
diff --git a/src/gts.def b/src/gts.def
index 48274cc..1a95cb6 100644
--- a/src/gts.def
+++ b/src/gts.def
@@ -1,4 +1,5 @@
 EXPORTS
+    gts_finalize
     gts_object_attributes
     gts_object_check_cast
     gts_object_class
@@ -20,6 +21,8 @@ EXPORTS
     gts_point_new
     gts_point_orientation
     gts_point_orientation_3d
+    gts_point_orientation_3d_sos
+    gts_point_orientation_sos
     gts_point_segment_closest
     gts_point_segment_distance
     gts_point_segment_distance2
@@ -29,6 +32,8 @@ EXPORTS
     gts_point_triangle_distance
     gts_point_triangle_distance2
     gts_segment_triangle_intersection
+    gts_allow_floating_vertices
+    gts_color_vertex_class
     gts_vertex_class
     gts_vertex_faces
     gts_vertex_fan_oriented
@@ -37,6 +42,7 @@ EXPORTS
     gts_vertex_is_unattached
     gts_vertex_neighbors
     gts_vertex_new
+    gts_vertex_normal_class
     gts_vertex_replace
     gts_vertex_triangles
     gts_vertices_are_connected
@@ -49,6 +55,7 @@ EXPORTS
     gts_segment_new
     gts_segments_are_intersecting
     gts_segments_from_vertices
+    gts_allow_floating_edges
     gts_edge_belongs_to_tetrahedron
     gts_edge_class
     gts_edge_face_number
@@ -57,8 +64,10 @@ EXPORTS
     gts_edge_is_boundary
     gts_edge_is_contact
     gts_edge_is_duplicate
+    gts_edge_manifold_faces
     gts_edge_new
     gts_edge_replace
+    gts_edge_swap
     gts_edges_from_vertices
     gts_edges_merge
     gts_triangle_area
@@ -87,6 +96,7 @@ EXPORTS
     gts_triangles_are_folded
     gts_triangles_common_edge
     gts_triangles_from_edges
+    gts_allow_floating_faces
     gts_face_class
     gts_face_foreach_neighbor
     gts_face_has_parent_surface
@@ -124,8 +134,19 @@ EXPORTS
     gts_bbox_surface
     gts_bbox_triangle
     gts_bboxes_are_overlapping
-    gts_get_newline
-    gts_get_token
+    gts_file_assign_next
+    gts_file_assign_start
+    gts_file_assign_variables
+    gts_file_destroy
+    gts_file_error
+    gts_file_first_token_after
+    gts_file_getc
+    gts_file_getc_scope
+    gts_file_new
+    gts_file_next_token
+    gts_file_read
+    gts_file_variable_error
+    gts_file_verror
     incircle
     insphere
     orient2d
@@ -160,20 +181,28 @@ EXPORTS
     gts_fifo_new
     gts_fifo_pop
     gts_fifo_push
+    gts_fifo_reverse
     gts_fifo_size
     gts_fifo_top
     gts_fifo_write
+    gts_matrix3_inverse
     gts_matrix_assign
     gts_matrix_compatible_row
     gts_matrix_destroy
     gts_matrix_determinant
+    gts_matrix_identity
     gts_matrix_inverse
     gts_matrix_new
     gts_matrix_print
     gts_matrix_product
     gts_matrix_projection
     gts_matrix_quadratic_optimization
+    gts_matrix_rotate
+    gts_matrix_scale
+    gts_matrix_translate
     gts_matrix_transpose
+    gts_matrix_zero
+    gts_vector4_print
     gts_vector_print
     gts_coarsen_stop_cost
     gts_coarsen_stop_number
@@ -187,6 +216,8 @@ EXPORTS
     gts_surface_add_face
     gts_surface_area
     gts_surface_boundary
+    gts_surface_center_of_area
+    gts_surface_center_of_mass
     gts_surface_class
     gts_surface_coarsen
     gts_surface_copy
@@ -197,6 +228,7 @@ EXPORTS
     gts_surface_foreach_face
     gts_surface_foreach_face_remove
     gts_surface_foreach_vertex
+    gts_surface_generate_sphere
     gts_surface_is_closed
     gts_surface_is_manifold
     gts_surface_is_orientable
@@ -207,7 +239,9 @@ EXPORTS
     gts_surface_read
     gts_surface_refine
     gts_surface_remove_face
+    gts_surface_split
     gts_surface_stats
+    gts_surface_tessellate
     gts_surface_traverse_destroy
     gts_surface_traverse_new
     gts_surface_traverse_next
@@ -216,6 +250,7 @@ EXPORTS
     gts_surface_write
     gts_surface_write_oogl
     gts_surface_write_oogl_boundary
+    gts_surface_write_vtk
     gts_surface_strip
     gts_volume_optimized_cost
     gts_volume_optimized_vertex
@@ -231,6 +266,9 @@ EXPORTS
     gts_iso_slice_new
     gts_isosurface_cartesian
     gts_isosurface_slice
+    gts_isosurface_tetra
+    gts_isosurface_tetra_bcl
+    gts_isosurface_tetra_bounded
     gts_hsplit_force_expand
     gts_psurface_close
     gts_psurface_open
@@ -267,11 +305,15 @@ EXPORTS
     gts_delaunay_check
     gts_delaunay_remove_hull
     gts_delaunay_remove_vertex
+    gts_list_face_class
     gts_point_locate
+    gts_surface_foreach_intersecting_face
     gts_surface_inter_boolean
     gts_surface_inter_check
     gts_surface_inter_class
     gts_surface_inter_new
+    gts_surface_intersection
+    gts_surface_is_self_intersecting
     gts_nedge_class
     gts_nface_class
     gts_nvertex_class
@@ -286,6 +328,7 @@ EXPORTS
     gts_containee_class
     gts_containee_is_contained
     gts_containee_new
+    gts_containee_replace
     gts_container_add
     gts_container_class
     gts_container_foreach
@@ -295,6 +338,7 @@ EXPORTS
     gts_hash_container_class
     gts_slist_containee_class
     gts_slist_container_class
+    gts_allow_floating_gnodes
     gts_fnode_class
     gts_fnode_new
     gts_gedge_class
@@ -316,13 +360,21 @@ EXPORTS
     gts_graph_new
     gts_graph_print_stats
     gts_graph_read
+    gts_graph_read_jostle
     gts_graph_traverse_destroy
     gts_graph_traverse_new
     gts_graph_traverse_next
     gts_graph_traverse_what_next
     gts_graph_weight
+    gts_graph_write
+    gts_graph_write_dot
     gts_ngnode_class
     gts_ngnode_new
+    gts_pgedge_class
+    gts_pgedge_new
+    gts_pnode_class
+    gts_pnode_new
+    gts_segments_graph_new
     gts_surface_graph_new
     gts_surface_graph_surface
     gts_wgedge_class
@@ -359,3 +411,7 @@ EXPORTS
     gts_graph_partition_edges_cut_weight
     gts_graph_partition_print_stats
     gts_graph_recursive_bisection
+    gts_vertex_gaussian_curvature
+    gts_vertex_mean_curvature_normal
+    gts_vertex_principal_curvatures
+    gts_vertex_principal_directions
diff --git a/src/gts.h b/src/gts.h
index 8ffdc5a..366a139 100644
--- a/src/gts.h
+++ b/src/gts.h
@@ -22,7 +22,9 @@
 
 #include <stdio.h>
 #include <glib.h>
-#include <gtsconfig.h>
+#ifndef NATIVE_WIN32
+# include <gtsconfig.h>
+#endif
 #ifdef GTS_COMPILATION
 # include "config.h"
 #endif /* not GTS_COMPILATION */
@@ -58,7 +60,7 @@ GTS_C_VAR const guint gts_binary_age;
     (gts_major_version == (major) && gts_minor_version == (minor) && \
      gts_micro_version >= (micro)))
 
-#define GTS_COMMENTS  "#%!"
+#define GTS_COMMENTS  "#!"
 #define GTS_MAINTAINER "popinet at users.sourceforge.net"
 
 /* Class declarations for base types */
@@ -89,7 +91,8 @@ typedef void         (*GtsArgSetFunc)          (GtsObject * obj);
 typedef void         (*GtsArgGetFunc)          (GtsObject * obj);
 
 typedef gdouble                  GtsVector[3];
-typedef GtsVector                GtsMatrix;
+typedef gdouble                  GtsVector4[4];
+typedef GtsVector4               GtsMatrix;
 typedef gdouble                  (*GtsKeyFunc)    (gpointer item,
 						   gpointer data);
 typedef enum 
@@ -110,11 +113,74 @@ typedef gint   (*GtsFunc)              (gpointer item,
 
 /* misc.c */
 
-gint gts_get_token               (FILE * fptr, 
-				  GString * buf, 
-				  const char * delimiters,
-				  const char * comments);
-void gts_get_newline             (FILE * fptr);
+typedef struct _GtsFile GtsFile;
+
+typedef enum {
+  GTS_NONE   = 1 << 8,
+  GTS_INT    = 1 << 9,
+  GTS_UINT   = 1 << 10,
+  GTS_FLOAT  = 1 << 11,
+  GTS_DOUBLE = 1 << 12,
+  GTS_STRING = 1 << 13,
+  GTS_FILE   = 1 << 14,
+  GTS_ERROR  = 1 << 15
+} GtsTokenType;
+
+struct _GtsFile {
+  FILE * fp;
+  guint line, pos;
+  GString * token;
+  GtsTokenType type;
+  gchar * error;
+
+  guint curline, curpos;
+  guint scope, scope_max;
+  gint next_token;
+  gchar * delimiters;
+  gchar * comments;
+  gchar * tokens;
+};
+
+typedef struct _GtsFileVariable GtsFileVariable;
+
+struct _GtsFileVariable {
+  GtsTokenType type;
+  gchar name[30];
+  gboolean unique;
+  gpointer data;
+  gboolean set;
+  guint line, pos;
+};
+
+
+GtsFile *      gts_file_new               (FILE * fp);
+void           gts_file_verror            (GtsFile * f,
+					   const gchar * format,
+					   va_list args);
+void           gts_file_error             (GtsFile * f,
+					   const gchar * format,
+					   ...);
+gint           gts_file_getc              (GtsFile * f);
+guint          gts_file_read              (GtsFile * f, 
+					   gpointer ptr, 
+					   guint size, 
+					   guint nmemb);
+gint           gts_file_getc_scope        (GtsFile * f);
+void           gts_file_next_token        (GtsFile * f);
+void           gts_file_first_token_after (GtsFile * f, 
+					   GtsTokenType type);
+void           gts_file_assign_start      (GtsFile * f, 
+					   GtsFileVariable * vars);
+GtsFileVariable * gts_file_assign_next    (GtsFile * f, 
+					   GtsFileVariable * vars);
+void           gts_file_assign_variables  (GtsFile * f, 
+					   GtsFileVariable * vars);
+void           gts_file_variable_error    (GtsFile * f, 
+					   GtsFileVariable * vars,
+					   const gchar * name,
+					   const gchar * format,
+					   ...);
+void           gts_file_destroy           (GtsFile * f);
 
 /* Objects: object.c */
 
@@ -138,7 +204,8 @@ void gts_get_newline             (FILE * fptr);
 
 typedef enum
 {
-  GTS_DESTROYED         = 1 << 0
+  GTS_DESTROYED         = 1 << 0,
+  GTS_USER_FLAG         = 1 /* user flags start from here */
 } GtsObjectFlags;
 
 #define GTS_OBJECT_FLAGS(obj)             (GTS_OBJECT (obj)->flags)
@@ -169,7 +236,7 @@ struct _GtsObjectClass {
 
   void        (* clone)      (GtsObject *, GtsObject *);
   void        (* destroy)    (GtsObject *);
-  gint        (* read)       (GtsObject **, FILE *);
+  void        (* read)       (GtsObject **, GtsFile *);
   void        (* write)      (GtsObject *, FILE *);
   GtsColor    (* color)      (GtsObject *);
   void        (* attributes) (GtsObject *, GtsObject *);
@@ -244,12 +311,13 @@ void             gts_object_init                (GtsObject * object,
 						 GtsObjectClass * klass);
 void             gts_object_reset_reserved      (GtsObject * object);
 void             gts_object_destroy             (GtsObject * object);
+void             gts_finalize                   (void);
 
 /* Ranges: surface.c */
 typedef struct _GtsRange               GtsRange;
 
 struct _GtsRange {
-  gdouble min, max, mean, stddev;
+  gdouble min, max, sum, sum2, mean, stddev;
   guint n;
 };
 
@@ -280,6 +348,7 @@ struct _GtsPoint {
 
 struct _GtsPointClass {
   GtsObjectClass parent_class;
+  gboolean binary;
 };
 
 GtsPointClass * gts_point_class                      (void);
@@ -311,6 +380,10 @@ gdouble       gts_point_orientation_3d               (GtsPoint * p1,
 						      GtsPoint * p2,
 						      GtsPoint * p3,
 						      GtsPoint * p4);
+gint          gts_point_orientation_3d_sos           (GtsPoint * p1,
+						      GtsPoint * p2,
+						      GtsPoint * p3,
+						      GtsPoint * p4);
 GtsIntersect  gts_point_is_in_triangle               (GtsPoint * p,
 						      GtsTriangle * t);
 gdouble       gts_point_in_circle                    (GtsPoint * p, 
@@ -322,6 +395,9 @@ gdouble       gts_point_in_triangle_circle           (GtsPoint * p,
 gdouble       gts_point_orientation                  (GtsPoint * p1,
 						      GtsPoint * p2,
 						      GtsPoint * p3);
+gint          gts_point_orientation_sos              (GtsPoint * p1,
+						      GtsPoint * p2,
+						      GtsPoint * p3);
 gdouble       gts_point_segment_distance2            (GtsPoint * p, 
 						      GtsSegment * s);
 gdouble       gts_point_segment_distance             (GtsPoint * p, 
@@ -358,6 +434,10 @@ struct _GtsVertex {
 
 struct _GtsVertexClass {
   GtsPointClass parent_class;
+
+  void        (* intersection_attributes) (GtsVertex *, 
+					   GtsObject *, 
+					   GtsObject *);
 };
 
 GTS_C_VAR 
@@ -385,11 +465,52 @@ GSList *      gts_vertices_from_segments   (GSList * segments);
 gboolean      gts_vertex_is_boundary       (GtsVertex * v, 
 					    GtsSurface * surface);
 GList *       gts_vertices_merge           (GList * vertices, 
-					    gdouble epsilon);
+					    gdouble epsilon,
+					    gboolean (* check) (GtsVertex *, GtsVertex *));
 GSList *      gts_vertex_fan_oriented      (GtsVertex * v, 
 					    GtsSurface * surface);
 guint         gts_vertex_is_contact        (GtsVertex * v, gboolean sever);
 
+/* GtsVertexNormal: Header */
+
+typedef struct _GtsVertexNormal         GtsVertexNormal;
+
+struct _GtsVertexNormal {
+  /*< private >*/
+  GtsVertex parent;
+
+  /*< public >*/
+  GtsVector n;
+};
+
+#define GTS_VERTEX_NORMAL(obj)            GTS_OBJECT_CAST (obj,\
+					         GtsVertexNormal,\
+					         gts_vertex_normal_class ())
+#define GTS_IS_VERTEX_NORMAL(obj)         (gts_object_is_from_class (obj,\
+						 gts_vertex_normal_class ()))
+
+GtsVertexClass * gts_vertex_normal_class  (void);
+
+/* GtsColorVertex: Header */
+
+typedef struct _GtsColorVertex         GtsColorVertex;
+
+struct _GtsColorVertex {
+  /*< private >*/
+  GtsVertex parent;
+
+  /*< public >*/
+  GtsColor c;
+};
+
+#define GTS_COLOR_VERTEX(obj)            GTS_OBJECT_CAST (obj,\
+					         GtsColorVertex,\
+					         gts_color_vertex_class ())
+#define GTS_IS_COLOR_VERTEX(obj)         (gts_object_is_from_class (obj,\
+						 gts_color_vertex_class ()))
+
+GtsVertexClass * gts_color_vertex_class  (void);
+
 /* Segments: segment.c */
 
 #define GTS_IS_SEGMENT(obj) (gts_object_is_from_class (obj,\
@@ -485,6 +606,12 @@ GtsEdge *     gts_edge_is_duplicate               (GtsEdge * e);
 GList *       gts_edges_merge                     (GList * edges);
 gboolean      gts_edge_belongs_to_tetrahedron     (GtsEdge * e);
 guint         gts_edge_is_contact                 (GtsEdge * e);
+void          gts_edge_swap                       (GtsEdge * e, 
+						   GtsSurface * s);
+gboolean      gts_edge_manifold_faces             (GtsEdge * e, 
+						   GtsSurface * s,
+						   GtsFace ** f1, 
+						   GtsFace ** f2);
 
 /* Triangles: triangle.c */
 
@@ -630,17 +757,31 @@ void          gts_face_foreach_neighbor             (GtsFace * f,
 #define       gts_vector_scalar(v1, v2)    ((v1)[0]*(v2)[0] +\
 					    (v1)[1]*(v2)[1] +\
 					    (v1)[2]*(v2)[2])
-GtsMatrix *   gts_matrix_new          (gdouble a00, gdouble a01, gdouble a02,
-				       gdouble a10, gdouble a11, gdouble a12,
-				       gdouble a20, gdouble a21, gdouble a22);
-void          gts_matrix_assign       (GtsMatrix * m,
-				       gdouble a00, gdouble a01, gdouble a02,
-				       gdouble a10, gdouble a11, gdouble a12,
-				       gdouble a20, gdouble a21, gdouble a22);
+#define       gts_vector_norm(v)   (sqrt ((v)[0]*(v)[0] +\
+                                          (v)[1]*(v)[1] +\
+                                          (v)[2]*(v)[2]))
+#define       gts_vector_normalize(v) {\
+  gdouble __gts_n = gts_vector_norm (v);\
+  if (__gts_n > 0.) {\
+    (v)[0] /= __gts_n;\
+    (v)[1] /= __gts_n;\
+    (v)[2] /= __gts_n;\
+  }\
+}
+GtsMatrix * gts_matrix_new (gdouble a00, gdouble a01, gdouble a02, gdouble a03,
+			    gdouble a10, gdouble a11, gdouble a12, gdouble a13,
+			    gdouble a20, gdouble a21, gdouble a22, gdouble a23,
+			    gdouble a30, gdouble a31, gdouble a32, gdouble a33);
+void gts_matrix_assign (GtsMatrix * m,
+			gdouble a00, gdouble a01, gdouble a02, gdouble a03,
+			gdouble a10, gdouble a11, gdouble a12, gdouble a13,
+			gdouble a20, gdouble a21, gdouble a22, gdouble a23,
+			gdouble a30, gdouble a31, gdouble a32, gdouble a33);
 GtsMatrix *   gts_matrix_projection                  (GtsTriangle * t);
 GtsMatrix *   gts_matrix_transpose                   (GtsMatrix * m);
 gdouble       gts_matrix_determinant                 (GtsMatrix * m);
 GtsMatrix *   gts_matrix_inverse                     (GtsMatrix * m);
+GtsMatrix *   gts_matrix3_inverse                    (GtsMatrix * m);
 void          gts_matrix_print                       (GtsMatrix * m, 
 						      FILE * fptr);
 guint         gts_matrix_compatible_row              (GtsMatrix * A,
@@ -655,9 +796,20 @@ guint         gts_matrix_quadratic_optimization      (GtsMatrix * A,
 						      GtsVector c);
 GtsMatrix *   gts_matrix_product                     (GtsMatrix * m1, 
 						      GtsMatrix * m2);
+GtsMatrix *   gts_matrix_zero                        (GtsMatrix * m);
+GtsMatrix *   gts_matrix_identity                    (GtsMatrix * m);
+GtsMatrix *   gts_matrix_scale                       (GtsMatrix * m, 
+						      GtsVector s);
+GtsMatrix *   gts_matrix_translate                   (GtsMatrix * m, 
+						      GtsVector t);
+GtsMatrix *   gts_matrix_rotate                      (GtsMatrix * m,
+						      GtsVector r,
+						      gdouble angle);
 void          gts_matrix_destroy                     (GtsMatrix * m);
 void          gts_vector_print                       (GtsVector v,
 						      FILE * fptr);
+void          gts_vector4_print                      (GtsVector4 v, 
+						      FILE * fptr);
 
 /* Kdtrees: kdtree.c */
 
@@ -801,6 +953,9 @@ void       gts_bb_tree_destroy               (GNode * tree,
 
 typedef struct _GtsSurfaceStats        GtsSurfaceStats;
 typedef struct _GtsSurfaceQualityStats GtsSurfaceQualityStats;
+typedef GtsVertex * (*GtsRefineFunc)   (GtsEdge * e,
+					GtsVertexClass * klass,
+					gpointer data);
 typedef GtsVertex * (*GtsCoarsenFunc)  (GtsEdge * e,
 					GtsVertexClass * klass,
 					gpointer data);
@@ -830,7 +985,11 @@ struct _GtsSurfaceQualityStats {
 struct _GtsSurface {
   GtsObject object;
 
+#ifdef USE_SURFACE_BTREE
+  GTree * faces;
+#else /* not USE_SURFACE_BTREE */
   GHashTable * faces;
+#endif /* not USE_SURFACE_BTREE */
   GtsFaceClass * face_class;
   GtsEdgeClass * edge_class;
   GtsVertexClass * vertex_class;
@@ -863,7 +1022,7 @@ void         gts_surface_add_face          (GtsSurface * s,
 void         gts_surface_remove_face       (GtsSurface * s, 
 					    GtsFace * f);
 guint        gts_surface_read              (GtsSurface * surface,
-					    FILE * fptr);
+					    GtsFile * f);
 gdouble      gts_surface_area              (GtsSurface * s);
 void         gts_surface_stats             (GtsSurface * s, 
 					    GtsSurfaceStats * stats);
@@ -875,6 +1034,8 @@ void         gts_surface_write             (GtsSurface * s,
 					    FILE * fptr);
 void         gts_surface_write_oogl        (GtsSurface * s, 
 					    FILE * fptr);
+void         gts_surface_write_vtk         (GtsSurface * s, 
+					    FILE * fptr);
 void         gts_surface_write_oogl_boundary (GtsSurface * s, 
 					      FILE * fptr);
 void         gts_surface_foreach_vertex    (GtsSurface * s, 
@@ -896,9 +1057,12 @@ GtsFace *    gts_surface_traverse_next     (GtsSurfaceTraverse * t,
 					    guint * level);
 void         gts_surface_traverse_destroy  (GtsSurfaceTraverse * t);
 void         gts_surface_refine            (GtsSurface * surface,
-					    GCompareFunc compare_func,
+					    GtsKeyFunc cost_func,
+					    gpointer cost_data,
+					    GtsRefineFunc refine_func,
+					    gpointer refine_data,
 					    GtsStopFunc stop_func,
-					    gpointer data);
+					    gpointer stop_data);
 gboolean     gts_edge_collapse_is_valid    (GtsEdge * e);
 void         gts_surface_coarsen           (GtsSurface * surface,
 					    GtsKeyFunc cost_func,
@@ -914,6 +1078,11 @@ gboolean     gts_coarsen_stop_number       (gdouble cost,
 gboolean     gts_coarsen_stop_cost         (gdouble cost, 
 					    guint nedge, 
 					    gdouble * max_cost);
+void         gts_surface_tessellate        (GtsSurface * s,
+					    GtsRefineFunc refine_func,
+					    gpointer refine_data);
+GtsSurface * gts_surface_generate_sphere   (GtsSurface * s,
+					    guint geodesation_order);
 GtsSurface * gts_surface_copy              (GtsSurface * s1,
 					    GtsSurface * s2);
 void         gts_surface_merge             (GtsSurface * s, 
@@ -922,6 +1091,10 @@ gboolean     gts_surface_is_manifold       (GtsSurface * s);
 gboolean     gts_surface_is_closed         (GtsSurface * s);
 gboolean     gts_surface_is_orientable     (GtsSurface * s);
 gdouble      gts_surface_volume            (GtsSurface * s);
+gdouble      gts_surface_center_of_mass    (GtsSurface * s,
+					    GtsVector cm);
+gdouble      gts_surface_center_of_area    (GtsSurface * s,
+					    GtsVector cm);
 guint        gts_surface_vertex_number     (GtsSurface * s);
 guint        gts_surface_edge_number       (GtsSurface * s);
 guint        gts_surface_face_number       (GtsSurface * s);
@@ -931,6 +1104,26 @@ void         gts_surface_distance          (GtsSurface * s1,
 					    GtsRange * face_range, 
 					    GtsRange * boundary_range);
 GSList *     gts_surface_boundary          (GtsSurface * surface);
+GSList *     gts_surface_split             (GtsSurface * s);
+
+/* Discrete differential operators: curvature.c */
+
+gboolean gts_vertex_mean_curvature_normal  (GtsVertex * v, 
+					    GtsSurface * s, 
+					    GtsVector Kh);
+gboolean gts_vertex_gaussian_curvature     (GtsVertex * v, 
+					    GtsSurface * s, 
+					    gdouble * Kg);
+void     gts_vertex_principal_curvatures   (gdouble Kh, 
+					    gdouble Kg, 
+					    gdouble * K1, 
+					    gdouble * K2);
+void     gts_vertex_principal_directions   (GtsVertex * v, 
+					    GtsSurface * s, 
+					    GtsVector Kh,
+                                            gdouble Kg,
+					    GtsVector e1, 
+					    GtsVector e2);
 
 /* Volume optimization: vopt.c */
 typedef struct _GtsVolumeOptimizedParams   GtsVolumeOptimizedParams;
@@ -949,6 +1142,11 @@ gdouble      gts_volume_optimized_cost     (GtsEdge * e,
 
 /* Boolean operations: boolean.c */
 
+GSList *     gts_surface_intersection      (GtsSurface * s1,
+					    GtsSurface * s2,
+					    GNode * faces_tree1,
+					    GNode * faces_tree2);
+
 typedef struct _GtsSurfaceInter         GtsSurfaceInter;
 typedef struct _GtsSurfaceInterClass    GtsSurfaceInterClass;
 typedef enum { GTS_1_OUT_2, 
@@ -984,13 +1182,21 @@ gts_surface_inter_new            (GtsSurfaceInterClass * klass,
 				  GtsSurface * s1,
 				  GtsSurface * s2,
 				  GNode * faces_tree1,
-				  GNode * faces_tree2);
+				  GNode * faces_tree2,
+				  gboolean is_open1,
+				  gboolean is_open2);
 gboolean 
-gts_surface_inter_check          (GtsSurfaceInter * si);
+gts_surface_inter_check          (GtsSurfaceInter * si,
+				  gboolean * closed);
 void 
 gts_surface_inter_boolean        (GtsSurfaceInter * si, 
 				  GtsSurface * surface,
 				  GtsBooleanOperation op);
+gboolean gts_surface_foreach_intersecting_face (GtsSurface * s,
+					    GtsBBTreeTraverseFunc func,
+					    gpointer data);
+GtsSurface * 
+gts_surface_is_self_intersecting (GtsSurface * s);
 
 /* Binary Heap: heap.c */
 
@@ -1064,6 +1270,7 @@ gboolean       gts_fifo_is_empty      (GtsFifo * fifo);
 void           gts_fifo_foreach       (GtsFifo * fifo, 
 				       GtsFunc func, 
 				       gpointer data);
+void           gts_fifo_reverse       (GtsFifo * fifo);
 void           gts_fifo_destroy       (GtsFifo * fifo);
 
 /* Progressive surfaces */
@@ -1177,10 +1384,9 @@ void          gts_psurface_write              (GtsPSurface * ps,
 GtsPSurface * gts_psurface_open               (GtsPSurfaceClass * klass,
 					       GtsSurface * s,
 					       GtsSplitClass * split_class,
-					       FILE * fptr,
-					       guint * line);
+					       GtsFile * f);
 GtsSplit *    gts_psurface_read_vertex        (GtsPSurface * ps, 
-					       FILE * fptr);
+					       GtsFile * fp);
 void          gts_psurface_close              (GtsPSurface * ps);
 void          gts_psurface_foreach_vertex     (GtsPSurface * ps, 
 					       GtsFunc func, 
@@ -1299,6 +1505,26 @@ GSList *             gts_delaunay_add_constraint (GtsSurface * surface,
 						  GtsConstraint * c);
 void                 gts_delaunay_remove_hull    (GtsSurface * surface);
 
+/* GtsListFace: Header */
+
+typedef struct _GtsListFace         GtsListFace;
+
+struct _GtsListFace {
+  /*< private >*/
+  GtsFace parent;
+
+  /*< public >*/
+  GSList * points;
+};
+
+#define GTS_LIST_FACE(obj)            GTS_OBJECT_CAST (obj,\
+					         GtsListFace,\
+					         gts_list_face_class ())
+#define GTS_IS_LIST_FACE(obj)         (gts_object_is_from_class (obj,\
+						 gts_list_face_class ()))
+
+GtsFaceClass *       gts_list_face_class         (void);
+
 /* Constrained Delaunay refinement: refine.c */
 
 typedef gboolean   (* GtsEncroachFunc)           (GtsVertex * v,
@@ -1323,7 +1549,7 @@ guint                gts_delaunay_refine         (GtsSurface * surface,
 						  GtsKeyFunc cost,
 						  gpointer cost_data);
 
-/* Isosurfaces: iso.c */
+/* Isosurfaces (marching cubes): iso.c */
 
 typedef struct _GtsGridPlane     GtsGridPlane;
 typedef struct _GtsIsoSlice      GtsIsoSlice;
@@ -1371,6 +1597,24 @@ void           gts_isosurface_cartesian     (GtsSurface * surface,
 					     gpointer data,
 					     gdouble iso);
 
+/* Isosurfaces (marching tetrahedra): isotetra.c */
+
+void           gts_isosurface_tetra         (GtsSurface * surface,
+					     GtsCartesianGrid g,
+					     GtsIsoCartesianFunc f,
+					     gpointer data,
+					     gdouble iso);
+void           gts_isosurface_tetra_bcl     (GtsSurface * surface,
+					     GtsCartesianGrid g,
+					     GtsIsoCartesianFunc f,
+					     gpointer data,
+					     gdouble iso);
+void           gts_isosurface_tetra_bounded (GtsSurface * surface,
+					     GtsCartesianGrid g,
+					     GtsIsoCartesianFunc f,
+					     gpointer data,
+					     gdouble iso);
+
 /* Named vertices, edges and triangles: named.c */
 
 #define GTS_NAME_LENGTH             40
@@ -1548,7 +1792,9 @@ struct _GtsContaineeClass {
 
   void     (* add_container)    (GtsContainee *, GtsContainer *);
   void     (* remove_container) (GtsContainee *, GtsContainer *);
+  void     (* foreach)          (GtsContainee *, GtsFunc, gpointer);
   gboolean (* is_contained)     (GtsContainee *, GtsContainer *);
+  void     (* replace)          (GtsContainee *, GtsContainee *);
 };
 
 #define GTS_CONTAINEE(obj)            GTS_OBJECT_CAST (obj,\
@@ -1564,6 +1810,8 @@ GtsContaineeClass * gts_containee_class        (void);
 GtsContainee *      gts_containee_new          (GtsContaineeClass * klass);
 gboolean            gts_containee_is_contained (GtsContainee * item, 
 						GtsContainer * c);
+void                gts_containee_replace      (GtsContainee * item,
+						GtsContainee * with);
 
 /* GtsSListContainee: container.c */
 
@@ -1697,6 +1945,7 @@ struct _GtsGNodeClass {
   GtsSListContainerClass parent_class;
 
   gfloat (* weight) (GtsGNode *);
+  void   (* write)  (GtsGNode *, FILE *);
 };
 
 #define GTS_GNODE(obj)            GTS_OBJECT_CAST (obj,\
@@ -1785,6 +2034,34 @@ GtsWGNodeClass * gts_wgnode_class                (void);
 GtsWGNode *      gts_wgnode_new                  (GtsWGNodeClass * klass,
 						  gfloat weight);
 
+/* GtsPNode */
+
+typedef struct _GtsPNode         GtsPNode;
+typedef struct _GtsPNodeClass    GtsPNodeClass;
+
+struct _GtsPNode {
+  GtsGNode node;
+
+  gpointer data;
+};
+
+struct _GtsPNodeClass {
+  GtsGNodeClass parent_class;
+};
+
+#define GTS_PNODE(obj)            GTS_OBJECT_CAST (obj,\
+					           GtsPNode,\
+					           gts_pnode_class ())
+#define GTS_PNODE_CLASS(klass)    GTS_OBJECT_CLASS_CAST (klass,\
+						         GtsPNodeClass,\
+						         gts_pnode_class())
+#define GTS_IS_PNODE(obj)         (gts_object_is_from_class (obj,\
+						   gts_pnode_class ()))
+     
+GtsPNodeClass * gts_pnode_class                (void);
+GtsPNode *      gts_pnode_new                  (GtsPNodeClass * klass,
+						gpointer data);
+
 /* GtsFNode */
 
 typedef struct _GtsFNode         GtsFNode;
@@ -1828,7 +2105,9 @@ struct _GtsGEdge {
 struct _GtsGEdgeClass {
   GtsContaineeClass parent_class;
 
-  gfloat (* weight) (GtsGEdge *);
+  GtsGEdge * (* link)   (GtsGEdge * e, GtsGNode * n1, GtsGNode * n2);
+  gfloat     (* weight) (GtsGEdge * e);
+  void       (* write)  (GtsGEdge * e, FILE * fp);
 };
 
 #define GTS_GEDGE(obj)            GTS_OBJECT_CAST (obj,\
@@ -1848,6 +2127,36 @@ gfloat          gts_gedge_weight               (GtsGEdge * e);
 #define         gts_gedge_connects(e, a1, a2)\
    (((e)->n1 == a1 && (e)->n2 == a2) || ((e)->n1 == a2 && (e)->n2 == a1)) 
 
+/* GtsPGEdge: graph.c */
+
+typedef struct _GtsPGEdge         GtsPGEdge;
+typedef struct _GtsPGEdgeClass    GtsPGEdgeClass;
+
+struct _GtsPGEdge {
+  GtsGEdge gedge;
+
+  gpointer data;
+};
+
+struct _GtsPGEdgeClass {
+  GtsGEdgeClass parent_class;
+};
+
+#define GTS_PGEDGE(obj)            GTS_OBJECT_CAST (obj,\
+					           GtsPGEdge,\
+					           gts_pgedge_class ())
+#define GTS_PGEDGE_CLASS(klass)    GTS_OBJECT_CLASS_CAST (klass,\
+						         GtsPGEdgeClass,\
+						         gts_pgedge_class())
+#define GTS_IS_PGEDGE(obj)         (gts_object_is_from_class (obj,\
+						   gts_pgedge_class ()))
+     
+GtsPGEdgeClass * gts_pgedge_class                (void);
+GtsPGEdge *      gts_pgedge_new                  (GtsPGEdgeClass * klass,
+						  GtsGNode * n1,
+						  GtsGNode * n2,
+						  gpointer data);
+
 /* GtsWGEdge: graph.c */
 
 typedef struct _GtsWGEdge         GtsWGEdge;
@@ -1883,6 +2192,7 @@ GtsWGEdge *      gts_wgedge_new                  (GtsWGEdgeClass * klass,
 struct _GtsGraph {
   GtsHashContainer object;
 
+  GtsGraphClass * graph_class;
   GtsGNodeClass * node_class;
   GtsGEdgeClass * edge_class;
 };
@@ -1928,8 +2238,13 @@ GtsGNode *         gts_graph_farthest            (GtsGraph * g,
 						  GSList * gnodes);
 guint              gts_graph_edges_cut           (GtsGraph * g);
 gfloat             gts_graph_edges_cut_weight    (GtsGraph * g);
-guint              gts_graph_read                (GtsGraph * g, 
+void               gts_graph_write               (GtsGraph * g, 
 						  FILE * fp);
+void               gts_graph_write_dot           (GtsGraph * g, 
+						  FILE * fp);
+GtsGraph *         gts_graph_read                (GtsFile * fp);
+guint              gts_graph_read_jostle         (GtsGraph * g, 
+						  GtsFile * fp);
 
 /* GtsWGraph: graph.c */
 
@@ -1965,6 +2280,11 @@ GtsGraph *       gts_surface_graph_new           (GtsGraphClass * klass,
 GtsSurface *     gts_surface_graph_surface       (GtsGraph * surface_graph,
 						  GtsSurface * s);
 
+/* Segments graph: graph.c */
+
+GtsGraph *       gts_segments_graph_new          (GtsGraphClass * klass,
+						  GSList * segments);
+
 /* GtsGNodeSplit: pgraph.c */
 
 typedef struct _GtsGNodeSplit         GtsGNodeSplit;
@@ -2070,7 +2390,8 @@ GSList *         gts_graph_recursive_bisection        (GtsWGraph * wg,
 						       guint n,
 						       guint ntry,
 						       guint mmax,
-						       guint nmin);
+						       guint nmin,
+						       gfloat imbalance);
 void             gts_graph_partition_destroy          (GSList * partition);
 
 /* Graph bisection: partition.c */
@@ -2093,11 +2414,13 @@ GtsGraphBisection * gts_graph_bfgg_bisection       (GtsGraph * g,
 gdouble             gts_graph_bisection_kl_refine  (GtsGraphBisection * bg,
 						    guint mmax);
 gdouble             gts_graph_bisection_bkl_refine (GtsGraphBisection * bg,
-						    guint mmax);
+						    guint mmax,
+						    gfloat imbalance);
 GtsGraphBisection * gts_graph_bisection_new        (GtsWGraph * wg,
 						    guint ntry,
 						    guint mmax,
-						    guint nmin);
+						    guint nmin,
+						    gfloat imbalance);
 void                gts_graph_bisection_destroy    (GtsGraphBisection * bg,
 						    gboolean destroy_graphs);
 
diff --git a/src/gtsconfig.h b/src/gtsconfig.h
index 3e31b54..2484cc4 100644
--- a/src/gtsconfig.h
+++ b/src/gtsconfig.h
@@ -1,13 +1,14 @@
 /* gtsconfig.h
- * 
+ *
  * This is a generated file.  Please modify `configure.in'
  */
 
 #ifndef GTSCONFIG_H
 #define GTSCONFIG_H
 
+
 #define GTS_MAJOR_VERSION 0
-#define GTS_MINOR_VERSION 5
-#define GTS_MICRO_VERSION 1
+#define GTS_MINOR_VERSION 7
+#define GTS_MICRO_VERSION 3
 
 #endif /* GTSCONFIG_H */
diff --git a/src/iso.c b/src/iso.c
index 7dd3280..5995a19 100644
--- a/src/iso.c
+++ b/src/iso.c
@@ -31,7 +31,7 @@ struct _GtsIsoSlice {
   guint nx, ny;
 };
 
-/* coordinates of the edges of the cube */
+/* coordinates of the edges of the cube (see doc/isocube.fig) */
 static guint c[12][4] = {
   {0, 0, 0, 0}, {0, 0, 0, 1}, {0, 0, 1, 1}, {0, 0, 1, 0},
   {1, 0, 0, 0}, {1, 0, 0, 1}, {1, 1, 0, 1}, {1, 1, 0, 0},
diff --git a/src/isotetra.c b/src/isotetra.c
new file mode 100644
index 0000000..1ae0e37
--- /dev/null
+++ b/src/isotetra.c
@@ -0,0 +1,848 @@
+/* GTS-Library conform marching tetrahedra algorithm 
+ * Copyright (C) 2002 Gert Wollny
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <math.h>
+#include <string.h>
+#include <gts.h>
+#ifdef NATIVE_WIN32
+# include <memory.h>
+# define M_SQRT2		1.41421356237309504880
+#endif /* NATIVE_WIN32 */
+
+typedef struct {
+  gint nx, ny; 
+  gdouble ** data; 
+} slice_t;
+
+typedef struct {
+  gint x, y, z;
+  gboolean mid;
+  gdouble d; 
+} tetra_vertex_t; 
+
+/* this helper is a lookup table for vertices */
+typedef struct {
+  gint nx, ny; 
+  GtsVertex ** vtop, ** vmid, **vbot;
+} helper_t ;
+
+typedef struct {
+  GHashTable * vbot, * vtop;
+} helper_bcl ;
+
+
+static helper_t * init_helper (int nx, int ny) 
+{
+  gint nxy = 4*nx*ny; 
+  helper_t *retval = g_malloc0 (sizeof (helper_t));
+
+  retval->nx = nx; 
+  retval->ny = ny; 
+  retval->vtop = g_malloc0 (sizeof (GtsVertex *)*nxy);
+  retval->vmid = g_malloc0 (sizeof (GtsVertex *)*nxy);
+  retval->vbot = g_malloc0 (sizeof (GtsVertex *)*nxy);
+  return retval;
+}
+
+static helper_bcl * init_helper_bcl (void)
+{
+  helper_bcl *retval = g_malloc0 (sizeof (helper_bcl));
+
+  retval->vtop = g_hash_table_new (g_str_hash, g_str_equal);
+  retval->vbot = g_hash_table_new (g_str_hash, g_str_equal);
+  return retval;
+}
+
+static void free_helper (helper_t * h) 
+{
+  g_free (h->vtop);
+  g_free (h->vmid);
+  g_free (h->vbot);
+  g_free (h);
+}
+
+static void free_helper_bcl (helper_bcl * h) 
+{
+  g_hash_table_destroy (h->vtop);
+  g_hash_table_destroy (h->vbot);
+  g_free (h);
+}
+
+/* move the vertices in the bottom slice to the top, and clear the
+   other slices in the lookup tables */
+static void helper_advance (helper_t * h) 
+{
+  GtsVertex ** help = h->vbot;
+  h->vbot = h->vtop; 
+  h->vtop = help;
+  
+  memset (h->vmid, 0, 4*sizeof(GtsVertex *) * h->nx * h->ny);
+  memset (h->vbot, 0, 4*sizeof(GtsVertex *) * h->nx * h->ny);
+}
+
+static void helper_advance_bcl (helper_bcl * h) 
+{
+  GHashTable * help = g_hash_table_new (g_str_hash, g_str_equal);
+
+  g_hash_table_destroy (h->vbot);
+  h->vbot = h->vtop;
+  h->vtop = help;
+}
+
+/* find the zero-crossing of line through v1 and v2 and return the
+   corresponding GtsVertex */
+static GtsVertex * get_vertex (gint mz, 
+			       const tetra_vertex_t * v1, 
+			       const tetra_vertex_t * v2, 
+			       helper_t * help, 
+			       GtsCartesianGrid * g,
+			       GtsVertexClass * klass)
+{
+  GtsVertex ** vertex; 
+  gint x, y, index, idx2, z; 
+  gdouble dx, dy, dz, d; 
+
+  g_assert (v1->d - v2->d != 0.);
+  
+  dx = dy = dz = 0.0;
+  d = v1->d/(v1->d - v2->d);
+
+  index = 0;
+  
+  if (v1->x != v2->x) {
+    index |= 1;
+    dx = d;
+  }
+  
+  if (v1->y != v2->y) {
+    index |= 2;
+    dy = d;
+  }
+  
+  if (v1->z != v2->z) {
+    dz = d;
+  }
+
+  x = v1->x;
+  if (v1->x > v2->x) {  x = v2->x; dx = 1.0 - dx; }
+  
+  y = v1->y;
+  if (v1->y > v2->y) {  y = v2->y; dy = 1.0 - dy;}
+  
+  z = v1->z;
+  if (v1->z > v2->z) {  z = v2->z; dz = 1.0 - dz;}
+  
+  idx2 = 4 * ( x + y * help->nx ) + index;
+  
+  if (v1->z == v2->z)
+    vertex = (mz == z) ? &help->vtop[idx2] : &help->vbot[idx2];
+  else
+    vertex = &help->vmid[idx2];
+  
+  if (mz != z && dz != 0.0) {
+    fprintf(stderr, "%f \n", dz);
+  }
+  
+  /* if vertex is not yet created, do it now */
+  if (!*vertex)
+    *vertex = gts_vertex_new (klass,
+			      g->dx * ( x + dx) + g->x, 
+			      g->dy * ( y + dy) + g->y, 
+			      g->dz * ( z + dz) + g->z);
+  
+  return *vertex;
+}
+
+static GtsVertex * get_vertex_bcl (gint mz, 
+				   const tetra_vertex_t * v1, 
+				   const tetra_vertex_t * v2, 
+				   helper_bcl * help, 
+				   GtsCartesianGrid * g,
+				   GtsVertexClass * klass)
+{
+  tetra_vertex_t w1, w2;
+  GtsVertex * v;
+  GHashTable * table;
+  gchar * str;
+  gdouble x1, x2, y1, y2, z1, z2, d;
+
+  g_assert (v1->d - v2->d != 0.);
+
+  /* first find correct hash table */  
+  if ((v1->z > mz) && (v2->z > mz))
+    table = help->vtop;
+  else
+    table = help->vbot;
+
+  /* sort vertices */
+  if ((v1->mid && v2->mid) || (!v1->mid && !v2->mid)){
+    w1 = (v1->x != v2->x) ? (v1->x < v2->x) ? *v1 : *v2 :
+      (v1->y != v2->y) ? (v1->y < v2->y) ? *v1 : *v2 :
+      (v1->z < v2->z) ? *v1 : *v2;
+    w2 = (v1->x != v2->x) ? (v1->x < v2->x) ? *v2 : *v1 :
+      (v1->y != v2->y) ? (v1->y < v2->y) ? *v2 : *v1 :
+      (v1->z < v2->z) ? *v2 : *v1;
+  }
+  else{
+    w1 = (v1->mid) ? *v1 : *v2;
+    w2 = (v1->mid) ? *v2 : *v1;
+  }
+
+  /* make hash */
+  str = g_strdup_printf ("%d %d %d %d %d %d %d %d",
+			 w1.x, w1.y, w1.z, w1.mid, w2.x, w2.y, w2.z, w2.mid);
+
+  /* return existing vertex or make a new one */
+  v = g_hash_table_lookup (table, str);
+  if (!v){
+    d = w1.d / (w1.d - w2.d);
+
+    x1 = g->dx * (w1.x + (w1.mid / 2.0)) + g->x;
+    x2 = g->dx * (w2.x + (w2.mid / 2.0)) + g->x;
+    y1 = g->dy * (w1.y + (w1.mid / 2.0)) + g->y;
+    y2 = g->dy * (w2.y + (w2.mid / 2.0)) + g->y;
+    z1 = g->dz * (w1.z + (w1.mid / 2.0)) + g->z;
+    z2 = g->dz * (w2.z + (w2.mid / 2.0)) + g->z;
+
+    v = gts_vertex_new (klass, x1 * (1.0 - d) + d * x2,
+			y1 * (1.0 - d) + d * y2,
+			z1 * (1.0 - d) + d * z2);
+
+    g_hash_table_insert (table, g_strdup(str), v);
+  }
+  g_free (str);
+
+  return v;
+}
+
+/* create an edge connecting the zero crossings of lines through a
+   pair of vertices, or return an existing one */
+static GtsEdge * get_edge (GtsVertex * v1, GtsVertex * v2,
+			   GtsEdgeClass * klass)
+{
+  GtsSegment *s;
+  GtsEdge *edge; 
+  
+  g_assert (v1);
+  g_assert (v2);
+  
+  s = gts_vertices_are_connected (v1, v2);
+  
+  if (GTS_IS_EDGE (s))
+    edge = GTS_EDGE(s);
+  else
+    edge = gts_edge_new (klass, v1, v2);
+  return edge; 
+}
+
+static void add_face (GtsSurface * surface, 
+		      const tetra_vertex_t * a1, const tetra_vertex_t * a2, 
+		      const tetra_vertex_t * b1, const tetra_vertex_t * b2, 
+		      const tetra_vertex_t * c1, const tetra_vertex_t * c2, 
+		      gint rev, helper_t * help, 
+		      gint z, GtsCartesianGrid * g)
+{
+  GtsFace * t; 
+  GtsEdge * e1, * e2, * e3; 	
+  GtsVertex * v1 = get_vertex (z, a1, a2, help, g, surface->vertex_class);
+  GtsVertex * v2 = get_vertex (z, b1, b2, help, g, surface->vertex_class);
+  GtsVertex * v3 = get_vertex (z, c1, c2, help, g, surface->vertex_class);
+
+  g_assert (v1 != v2);
+  g_assert (v2 != v3);
+  g_assert (v1 != v3);
+
+  if (!rev) {
+    e1 = get_edge (v1, v2, surface->edge_class);
+    e2 = get_edge (v2, v3, surface->edge_class);
+    e3 = get_edge (v1, v3, surface->edge_class);
+  } else {
+    e1 = get_edge (v1, v3, surface->edge_class);
+    e2 = get_edge (v2, v3, surface->edge_class);
+    e3 = get_edge (v1, v2, surface->edge_class);	
+  }
+  
+  t = gts_face_new (surface->face_class, e1, e2, e3);	
+  gts_surface_add_face (surface, t);
+}
+
+static void add_face_bcl (GtsSurface * surface, 
+			  const tetra_vertex_t * a1, 
+			  const tetra_vertex_t * a2, 
+			  const tetra_vertex_t * b1, 
+			  const tetra_vertex_t * b2, 
+			  const tetra_vertex_t * c1, 
+			  const tetra_vertex_t * c2, 
+			  gint rev, helper_bcl * help, 
+			  gint z, GtsCartesianGrid * g)
+{
+  GtsFace * t; 
+  GtsEdge * e1, * e2, * e3; 	
+  GtsVertex * v1 = get_vertex_bcl (z, a1, a2, help, g, surface->vertex_class);
+  GtsVertex * v2 = get_vertex_bcl (z, b1, b2, help, g, surface->vertex_class);
+  GtsVertex * v3 = get_vertex_bcl (z, c1, c2, help, g, surface->vertex_class);
+
+  g_assert (v1 != v2);
+  g_assert (v2 != v3);
+  g_assert (v1 != v3);
+
+  if (!rev) {
+    e1 = get_edge (v1, v2, surface->edge_class);
+    e2 = get_edge (v2, v3, surface->edge_class);
+    e3 = get_edge (v1, v3, surface->edge_class);
+  } else {
+    e1 = get_edge (v1, v3, surface->edge_class);
+    e2 = get_edge (v2, v3, surface->edge_class);
+    e3 = get_edge (v1, v2, surface->edge_class);	
+  }
+  
+  t = gts_face_new (surface->face_class, e1, e2, e3);	
+  gts_surface_add_face (surface, t);
+}
+
+/* create a new slice of site nx \times ny */
+static slice_t * new_slice (gint nx, gint ny) 
+{
+  gint x; 
+  slice_t * retval = g_malloc (sizeof (slice_t));
+
+  retval->data = g_malloc (nx*sizeof(gdouble *));
+  retval->nx = nx;
+  retval->ny = ny;  
+  for (x = 0; x < nx; x++) 
+    retval->data[x] = g_malloc (ny*sizeof (gdouble));
+  return retval; 
+}
+
+/* initialize a slice with inival */
+static void slice_init (slice_t * slice, gdouble inival)
+{
+  gint x, y; 
+  
+  g_assert (slice);
+	
+  for (x = 0; x < slice->nx; x++) 
+    for (y = 0; y < slice->ny; y++)
+      slice->data[x][y] = inival; 
+}
+
+/* free the memory of a slice */
+static void free_slice (slice_t * slice) 
+{
+  gint x; 
+	
+  g_return_if_fail (slice != NULL);
+	
+  for (x = 0; x < slice->nx; x++) 
+    g_free (slice->data[x]);  
+  g_free (slice->data);
+  g_free (slice);
+}
+
+static void analyze_tetrahedra (const tetra_vertex_t * a, 
+				const tetra_vertex_t * b, 
+				const tetra_vertex_t * c, 
+				const tetra_vertex_t * d, 
+				gint parity, GtsSurface * surface, 
+				helper_t * help, 
+				gint z, GtsCartesianGrid * g)
+{
+  gint rev = parity; 
+  gint code = 0; 
+	
+  if (a->d >= 0.) code |= 1; 
+  if (b->d >= 0.) code |= 2; 
+  if (c->d >= 0.) code |= 4; 
+  if (d->d >= 0.) code |= 8;
+		
+  switch (code) {
+  case 15:
+  case 0: return; /* all inside or outside */		
+  
+  case 14:rev = !parity;
+  case  1:add_face (surface, a, b, a, d, a, c, rev, help, z, g);
+	  break;
+  case 13:rev = ! parity;  
+  case  2:add_face (surface, a, b, b, c, b, d, rev, help, z, g);
+	  break;
+  case 12:rev = !parity;	  
+  case  3:add_face (surface, a, d, a, c, b, c, rev, help, z, g);
+	  add_face (surface, a, d, b, c, b, d, rev, help, z, g);
+	  break;
+  case 11:rev = !parity;	  
+  case  4:add_face (surface, a, c, c, d, b, c, rev, help, z, g);
+	  break;
+  case 10:rev = !parity; 	  
+  case 5: add_face (surface, a, b, a, d, c, d, rev, help, z, g);
+	  add_face (surface, a, b, c, d, b, c, rev, help, z, g);
+	  break;	
+  case  9:rev = !parity; 
+  case  6:add_face (surface, a, b, a, c, c, d, rev, help, z, g);
+	  add_face (surface, a, b, c, d, b, d, rev, help, z, g);
+	  break;
+  case  7:rev = !parity;
+  case  8:add_face (surface, a, d, b, d, c, d, rev, help, z, g);
+    break; 
+  }
+}
+
+static void analyze_tetrahedra_bcl (const tetra_vertex_t * a, 
+				    const tetra_vertex_t * b, 
+				    const tetra_vertex_t * c, 
+				    const tetra_vertex_t * d, 
+				    GtsSurface * surface, 
+				    helper_bcl * help, 
+				    gint z, GtsCartesianGrid * g)
+{
+  gint rev = 0;
+  gint code = 0; 
+	
+  if (a->d >= 0.) code |= 1; 
+  if (b->d >= 0.) code |= 2; 
+  if (c->d >= 0.) code |= 4; 
+  if (d->d >= 0.) code |= 8;
+		
+  switch (code) {
+  case 15:
+  case 0: return; /* all inside or outside */		
+
+  case 14:rev = !rev;
+  case  1:add_face_bcl (surface, a, b, a, d, a, c, rev, help, z, g);
+	  break;
+  case 13:rev = !rev;  
+  case  2:add_face_bcl (surface, a, b, b, c, b, d, rev, help, z, g);
+	  break;
+  case 12:rev = !rev;	  
+  case  3:add_face_bcl (surface, a, d, a, c, b, c, rev, help, z, g);
+	  add_face_bcl (surface, a, d, b, c, b, d, rev, help, z, g);
+	  break;
+  case 11:rev = !rev;	  
+  case  4:add_face_bcl (surface, a, c, c, d, b, c, rev, help, z, g);
+	  break;
+  case 10:rev = !rev; 	  
+  case 5: add_face_bcl (surface, a, b, a, d, c, d, rev, help, z, g);
+	  add_face_bcl (surface, a, b, c, d, b, c, rev, help, z, g);
+	  break;	
+  case  9:rev = !rev; 
+  case  6:add_face_bcl (surface, a, b, a, c, c, d, rev, help, z, g);
+	  add_face_bcl (surface, a, b, c, d, b, d, rev, help, z, g);
+	  break;
+  case  7:rev = !rev;
+  case  8:add_face_bcl (surface, a, d, b, d, c, d, rev, help, z, g);
+    break;
+  }
+}
+
+static void  iso_slice_evaluate (slice_t * s1, slice_t * s2, 
+				 GtsCartesianGrid g, 
+				 gint z, GtsSurface * surface, helper_t * help)
+{
+  gint x,y; 
+  tetra_vertex_t v0, v1, v2, v3, v4, v5, v6, v7; 
+  gdouble ** s1p = s1->data; 
+  gdouble ** s2p = s2->data; 
+	
+  for (y = 0; y < g.ny-1; y++)
+    for (x = 0; x < g.nx-1; x++) {
+      gint parity = (((x ^ y) ^ z) & 1);
+      
+      v0.x = x  ; v0.y = y  ; v0.z = z  ; v0.mid = FALSE; v0.d = s1p[x  ][y  ];
+      v1.x = x  ; v1.y = y+1; v1.z = z  ; v1.mid = FALSE; v1.d = s1p[x  ][y+1];
+      v2.x = x+1; v2.y = y  ; v2.z = z  ; v2.mid = FALSE; v2.d = s1p[x+1][y  ];
+      v3.x = x+1; v3.y = y+1; v3.z = z  ; v3.mid = FALSE; v3.d = s1p[x+1][y+1];
+      v4.x = x  ; v4.y = y  ; v4.z = z+1; v4.mid = FALSE; v4.d = s2p[x  ][y  ];
+      v5.x = x  ; v5.y = y+1; v5.z = z+1; v5.mid = FALSE; v5.d = s2p[x  ][y+1];
+      v6.x = x+1; v6.y = y  ; v6.z = z+1; v6.mid = FALSE; v6.d = s2p[x+1][y  ];
+      v7.x = x+1; v7.y = y+1; v7.z = z+1; v7.mid = FALSE; v7.d = s2p[x+1][y+1];
+      
+      if (parity == 0) {
+	analyze_tetrahedra (&v0, &v1, &v2, &v4, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v7, &v1, &v4, &v2, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v1, &v7, &v3, &v2, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v1, &v7, &v4, &v5, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v2, &v6, &v4, &v7, parity, surface, help, z, &g);
+      }else{
+	analyze_tetrahedra (&v4, &v5, &v6, &v0, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v3, &v5, &v0, &v6, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v5, &v3, &v7, &v6, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v5, &v3, &v0, &v1, parity, surface, help, z, &g);
+	analyze_tetrahedra (&v6, &v2, &v0, &v3, parity, surface, help, z, &g);
+      }
+    }
+}
+
+static void  iso_slice_evaluate_bcl (slice_t * s1, slice_t * s2, slice_t * s3,
+				     GtsCartesianGrid g, 
+				     gint z, GtsSurface * surface, 
+				     helper_bcl * help)
+{
+  gint x,y; 
+  tetra_vertex_t v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, w0; 
+  gdouble ** s1p = s1->data;
+  gdouble ** s2p = s2->data;
+  gdouble ** s3p = s3->data;
+	
+  for (y = 0; y < g.ny-2; y++)
+    for (x = 0; x < g.nx-2; x++) {
+      v0.x = x  ; v0.y = y  ; v0.z = z  ; v0.mid = TRUE;
+      v0.d = (s1p[x  ][y  ] + s2p[x  ][y  ] +
+	      s1p[x  ][y+1] + s2p[x  ][y+1] +
+	      s1p[x+1][y  ] + s2p[x+1][y  ] +
+	      s1p[x+1][y+1] + s2p[x+1][y+1])/8.0;
+
+      v1.x = x+1; v1.y = y  ; v1.z = z  ; v1.mid = TRUE;
+      v1.d = (s1p[x+1][y  ] + s2p[x+1][y  ] +
+	      s1p[x+1][y+1] + s2p[x+1][y+1] +
+	      s1p[x+2][y  ] + s2p[x+2][y  ] +
+	      s1p[x+2][y+1] + s2p[x+2][y+1])/8.0;
+
+      v2.x = x  ; v2.y = y+1; v2.z = z  ; v2.mid = TRUE;
+      v2.d = (s1p[x  ][y+1] + s2p[x  ][y+1] +
+	      s1p[x  ][y+2] + s2p[x  ][y+2] +
+	      s1p[x+1][y+1] + s2p[x+1][y+1] +
+	      s1p[x+1][y+2] + s2p[x+1][y+2])/8.0;
+
+      v3.x = x  ; v3.y = y  ; v3.z = z+1; v3.mid = TRUE;
+      v3.d = (s2p[x  ][y  ] + s3p[x  ][y  ] +
+	      s2p[x  ][y+1] + s3p[x  ][y+1] +
+	      s2p[x+1][y  ] + s3p[x+1][y  ] +
+	      s2p[x+1][y+1] + s3p[x+1][y+1])/8.0;
+
+      v4.x = x+1; v4.y = y  ; v4.z = z  ; v4.mid = FALSE; v4.d = s1p[x+1][y  ];
+      v5.x = x  ; v5.y = y+1; v5.z = z  ; v5.mid = FALSE; v5.d = s1p[x  ][y+1];
+      v6.x = x+1; v6.y = y+1; v6.z = z  ; v6.mid = FALSE; v6.d = s1p[x+1][y+1];
+      v7.x = x+1; v7.y = y  ; v7.z = z+1; v7.mid = FALSE; v7.d = s2p[x+1][y  ];
+      v8.x = x  ; v8.y = y+1; v8.z = z+1; v8.mid = FALSE; v8.d = s2p[x  ][y+1];
+      v9.x = x+1; v9.y = y+1; v9.z = z+1; v9.mid = FALSE; v9.d = s2p[x+1][y+1];
+      w0.x = x  ; w0.y = y  ; w0.z = z+1; w0.mid = FALSE; w0.d = s2p[x  ][y  ];
+
+      analyze_tetrahedra_bcl (&v0, &v9, &v6, &v1, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v6, &v4, &v1, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v4, &v7, &v1, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v7, &v9, &v1, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v5, &v6, &v2, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v6, &v9, &v2, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v9, &v8, &v2, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v8, &v5, &v2, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v8, &v9, &v3, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v9, &v7, &v3, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &v7, &w0, &v3, surface, help, z, &g);
+      analyze_tetrahedra_bcl (&v0, &w0, &v8, &v3, surface, help, z, &g);
+    }
+}
+
+/*  copy src into dest by stripping off the iso value and leave out
+    the boundary (which should be G_MINDOUBLE) */
+static void copy_to_bounded (slice_t * dest, slice_t * src, 
+			     gdouble iso, gdouble fill)
+{
+  gint x,y; 
+  gdouble * src_ptr;
+  gdouble * dest_ptr = dest->data[0];
+  
+  g_assert(dest->ny == src->ny + 2);
+  g_assert(dest->nx == src->nx + 2);
+	
+  for (y = 0; y < dest->ny; ++y, ++dest_ptr)
+    *dest_ptr = fill; 
+	
+  for (x = 1; x < src->nx - 1; ++x) {
+    dest_ptr = dest->data[x];
+    src_ptr = src->data[x-1];
+    *dest_ptr++ = fill;
+    for (y = 0; y < src->ny; ++y, ++dest_ptr, ++src_ptr)
+      *dest_ptr  = *src_ptr - iso;
+    *dest_ptr++ = fill; 
+  }
+  
+  dest_ptr = dest->data[y];
+  
+  for (y = 0; y < dest->ny; ++y, ++dest_ptr)
+    *dest_ptr = fill; 
+}
+
+static void iso_sub (slice_t * s, gdouble iso)
+{
+  gint x,y; 
+
+  for (x = 0; x < s->nx; ++x) {
+    gdouble *ptr = s->data[x];
+
+    for (y = 0; y < s->ny; ++y, ++ptr)
+      *ptr -= iso; 
+  }
+}
+
+
+/**
+ * gts_isosurface_tetra_bounded:
+ * @surface: a #GtsSurface.
+ * @g: a #GtsCartesianGrid.
+ * @f: a #GtsIsoCartesianFunc.
+ * @data: user data to be passed to @f.
+ * @iso: isosurface value.
+ *
+ * Adds to @surface new faces defining the isosurface f(x,y,z) =
+ * @iso. By convention, the normals to the surface are pointing toward
+ * the positive values of f(x,y,z) - @iso. To ensure a closed object,
+ * a boundary of G_MINDOUBLE is added around the domain
+ *
+ * The user function @f is called successively for each value of the z
+ * coordinate defined by @g. It must fill the corresponding (x,y)
+ * plane with the values of the function for which the isosurface is
+ * to be computed.  
+ */
+void gts_isosurface_tetra_bounded (GtsSurface * surface,
+				   GtsCartesianGrid g,
+				   GtsIsoCartesianFunc f,
+				   gpointer data,
+				   gdouble iso)
+{
+  slice_t *slice1, *slice2, *transfer_slice; 
+  GtsCartesianGrid g_intern = g; 
+  helper_t *helper;
+  gint z; 
+	
+  g_return_if_fail (surface != NULL);
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (g.nx > 1);
+  g_return_if_fail (g.ny > 1);
+  g_return_if_fail (g.nz > 1);
+
+  /* create the helper slices */
+  slice1 = new_slice (g.nx + 2, g.ny + 2);
+  slice2 = new_slice (g.nx + 2, g.ny + 2);
+	
+  /*  initialize the first slice as OUTSIDE */
+  slice_init (slice1, -1.0);
+	
+  /* create a slice of the original image size */
+  transfer_slice = new_slice (g.nx, g.ny);
+	
+  /* adapt the parameters to our enlarged image */
+  g_intern.x -= g.dx;
+  g_intern.y -= g.dy; 
+  g_intern.z -= g.dz;
+  g_intern.nx = g.nx + 2;
+  g_intern.ny = g.ny + 2; 	
+  g_intern.nz = g.nz;
+	
+  /* create the helper for vertex-lookup */
+  helper = init_helper (g_intern.nx, g_intern.ny);
+	
+  /* go slicewise through the data */
+  z = 0; 
+  while (z < g.nz) {
+    slice_t * hs; 
+    
+    /* request slice */
+    f (transfer_slice->data, g, z, data);
+    g.z += g.dz; 
+    
+    /* copy slice in enlarged image and mark the border as OUTSIDE */
+    copy_to_bounded (slice2, transfer_slice, iso, -1.);
+    
+    /* triangulate */
+    iso_slice_evaluate (slice1, slice2, g_intern, z, surface, helper);
+    
+    /* switch the input slices */
+    hs = slice1; slice1 = slice2; slice2 = hs; 
+    
+    /* switch the vertex lookup tables */
+    helper_advance(helper);
+    ++z; 
+  }
+  
+  /* initialize the last slice as OUTSIDE */
+  slice_init (slice2, - 1.0);
+		
+  /* close the object */
+  iso_slice_evaluate(slice1, slice2, g_intern, z, surface, helper);
+  
+  free_helper (helper);
+  free_slice (slice1);
+  free_slice (slice2);
+  free_slice (transfer_slice);	
+}
+
+/**
+ * gts_isosurface_tetra:
+ * @surface: a #GtsSurface.
+ * @g: a #GtsCartesianGrid.
+ * @f: a #GtsIsoCartesianFunc.
+ * @data: user data to be passed to @f.
+ * @iso: isosurface value.
+ *
+ * Adds to @surface new faces defining the isosurface f(x,y,z) =
+ * @iso. By convention, the normals to the surface are pointing toward
+ * the positive values of f(x,y,z) - @iso.
+ *
+ * The user function @f is called successively for each value of the z
+ * coordinate defined by @g. It must fill the corresponding (x,y)
+ * plane with the values of the function for which the isosurface is
+ * to be computed.  
+ */
+void gts_isosurface_tetra (GtsSurface * surface,
+			   GtsCartesianGrid g,
+			   GtsIsoCartesianFunc f,
+			   gpointer data,
+			   gdouble iso)
+{
+  slice_t *slice1, *slice2; 
+  helper_t *helper;
+  gint z; 
+  GtsCartesianGrid g_internal;
+  
+  g_return_if_fail (surface != NULL);
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (g.nx > 1);
+  g_return_if_fail (g.ny > 1);
+  g_return_if_fail (g.nz > 1);
+
+  memcpy (&g_internal, &g, sizeof (GtsCartesianGrid));
+	
+  /* create the helper slices */
+  slice1 = new_slice (g.nx, g.ny);
+  slice2 = new_slice (g.nx, g.ny);
+  
+  /* create the helper for vertex-lookup */
+  helper = init_helper (g.nx, g.ny);
+	
+  z = 0;
+  f (slice1->data, g, z, data);
+  iso_sub (slice1, iso); 
+  
+  z++; 
+  g.z += g.dz;
+  
+  /* go slicewise through the data */
+  while (z < g.nz) {
+    slice_t * hs; 
+    
+    /* request slice */
+    f (slice2->data, g, z, data);
+    iso_sub (slice2, iso);
+     
+    g.z += g.dz;
+    
+    /* triangulate */
+    iso_slice_evaluate (slice1, slice2, g_internal, z-1, surface, helper);
+    
+    /* switch the input slices */
+    hs = slice1; slice1 = slice2; slice2 = hs; 
+    
+    /* switch the vertex lookup tables */
+    helper_advance (helper);
+    
+    ++z; 
+  }
+
+  free_helper(helper);
+  free_slice(slice1);
+  free_slice(slice2);	
+}
+
+/**
+ * gts_isosurface_tetra_bcl:
+ * @surface: a #GtsSurface.
+ * @g: a #GtsCartesianGrid.
+ * @f: a #GtsIsoCartesianFunc.
+ * @data: user data to be passed to @f.
+ * @iso: isosurface value.
+ *
+ * Adds to @surface new faces defining the isosurface f(x,y,z) =
+ * @iso. By convention, the normals to the surface are pointing toward
+ * the positive values of f(x,y,z) - @iso.
+ *
+ * The user function @f is called successively for each value of the z
+ * coordinate defined by @g. It must fill the corresponding (x,y)
+ * plane with the values of the function for which the isosurface is
+ * to be computed.  
+ *
+ * This version produces the dual "body-centered" faces relative to
+ * the faces produced by gts_isosurface_tetra().
+ */
+void gts_isosurface_tetra_bcl (GtsSurface * surface,
+			       GtsCartesianGrid g,
+			       GtsIsoCartesianFunc f,
+			       gpointer data,
+			       gdouble iso)
+{
+  slice_t *slice1, *slice2, *slice3;
+  helper_bcl *helper;
+  gint z; 
+  GtsCartesianGrid g_internal;
+  
+  g_return_if_fail (surface != NULL);
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (g.nx > 1);
+  g_return_if_fail (g.ny > 1);
+  g_return_if_fail (g.nz > 1);
+
+  memcpy (&g_internal, &g, sizeof (GtsCartesianGrid));
+	
+  /* create the helper slices */
+  slice1 = new_slice (g.nx, g.ny);
+  slice2 = new_slice (g.nx, g.ny);
+  slice3 = new_slice (g.nx, g.ny);
+  
+  /* create the helper for vertex-lookup */
+  helper = init_helper_bcl ();
+	
+  z = 0;
+  f (slice1->data, g, z, data);
+  iso_sub (slice1, iso); 
+
+  z++; 
+  g.z += g.dz;
+
+  f (slice2->data, g, z, data);
+  iso_sub (slice1, iso); 
+  
+  z++; 
+  g.z += g.dz;
+  
+  /* go slicewise through the data */
+  while (z < g.nz) {
+    slice_t * hs; 
+    
+    /* request slice */
+    f (slice3->data, g, z, data);
+    iso_sub (slice3, iso);
+     
+    g.z += g.dz;
+    
+    /* triangulate */
+    iso_slice_evaluate_bcl (slice1, slice2, slice3, g_internal, z-2, 
+			    surface, helper);
+    
+    /* switch the input slices */
+    hs = slice1; slice1 = slice2; slice2 = slice3; slice3 = hs;
+    
+    /* switch the vertex lookup tables */
+    helper_advance_bcl (helper);
+    
+    ++z; 
+  }
+
+  free_helper_bcl(helper);
+  free_slice(slice1);
+  free_slice(slice2);	
+  free_slice(slice3);	
+}
diff --git a/src/makefile.msc b/src/makefile.msc
index 7a0def3..8a151ed 100644
--- a/src/makefile.msc
+++ b/src/makefile.msc
@@ -17,7 +17,7 @@ CP = copy
 RM = del
 CC = cl
 
-GTS_VER = 0.5
+GTS_VER = 0.7
 
 CFLAGS = -I. -DHAVE_CONFIG_H -G5 -GF -Ox -W3 -MD -nologo
 
@@ -42,10 +42,12 @@ gts_OBJECTS = \
 	predicates.obj \
 	heap.obj \
 	eheap.obj \
+	fifo.obj \
 	matrix.obj \
 	surface.obj \
 	stripe.obj \
 	vopt.obj \
+	refine.obj \
 	iso.obj \
 	split.obj \
 	psurface.obj \
@@ -58,11 +60,11 @@ gts_OBJECTS = \
 	graph.obj \
 	pgraph.obj \
 	partition.obj \
-	fifo.obj \
-	refine.obj
+	isotetra.obj \
+	curvature.obj
 
 gts-$(GTS_VER).dll : $(gts_OBJECTS) gts.def
-	$(CC) $(CFLAGS) -LD -Fegts-$(GTS_VER).dll $(gts_OBJECTS) glib-1.2.lib user32.lib advapi32.lib wsock32.lib $(LDFLAGS) /def:gts.def
+	$(CC) $(CFLAGS) -LD -Fegts-$(GTS_VER).dll $(gts_OBJECTS) glib-1.3.lib user32.lib advapi32.lib wsock32.lib $(LDFLAGS) /def:gts.def
 
 config.h: config.h.win32
 	$(CP) config.h.win32 config.h
diff --git a/src/matrix.c b/src/matrix.c
index f73ea16..7ada15d 100644
--- a/src/matrix.c
+++ b/src/matrix.c
@@ -25,28 +25,37 @@
  * @a00: element [0][0].
  * @a01: element [0][1].
  * @a02: element [0][2].
+ * @a03: element [0][3].
  * @a10: element [1][0].
  * @a11: element [1][1].
  * @a12: element [1][2].
+ * @a13: element [1][3].
  * @a20: element [2][0].
  * @a21: element [2][1].
  * @a22: element [2][2].
+ * @a23: element [2][3].
+ * @a30: element [3][0].
+ * @a31: element [3][1].
+ * @a32: element [3][2].
+ * @a33: element [3][3].
  *
  * Allocates memory and initializes a new #GtsMatrix.
  *
  * Returns: a pointer to the newly created #GtsMatrix.
  */
-GtsMatrix * gts_matrix_new (gdouble a00, gdouble a01, gdouble a02,
-			    gdouble a10, gdouble a11, gdouble a12,
-			    gdouble a20, gdouble a21, gdouble a22)
+GtsMatrix * gts_matrix_new (gdouble a00, gdouble a01, gdouble a02, gdouble a03,
+			    gdouble a10, gdouble a11, gdouble a12, gdouble a13,
+			    gdouble a20, gdouble a21, gdouble a22, gdouble a23,
+			    gdouble a30, gdouble a31, gdouble a32, gdouble a33)
 {
   GtsMatrix * m;
 
-  m = g_malloc (3*sizeof (GtsVector));
+  m = g_malloc (4*sizeof (GtsVector4));
 
-  m[0][0] = a00; m[1][0] = a10; m[2][0] = a20;
-  m[0][1] = a01; m[1][1] = a11; m[2][1] = a21;
-  m[0][2] = a02; m[1][2] = a12; m[2][2] = a22;
+  m[0][0] = a00; m[1][0] = a10; m[2][0] = a20; m[3][0] = a30;
+  m[0][1] = a01; m[1][1] = a11; m[2][1] = a21; m[3][1] = a31;
+  m[0][2] = a02; m[1][2] = a12; m[2][2] = a22; m[3][2] = a32;
+  m[0][3] = a03; m[1][3] = a13; m[2][3] = a23; m[3][3] = a33;
 
   return m;
 }
@@ -57,25 +66,34 @@ GtsMatrix * gts_matrix_new (gdouble a00, gdouble a01, gdouble a02,
  * @a00: element [0][0].
  * @a01: element [0][1].
  * @a02: element [0][2].
+ * @a03: element [0][3].
  * @a10: element [1][0].
  * @a11: element [1][1].
  * @a12: element [1][2].
+ * @a13: element [1][3].
  * @a20: element [2][0].
  * @a21: element [2][1].
  * @a22: element [2][2].
+ * @a23: element [2][3].
+ * @a30: element [3][0].
+ * @a31: element [3][1].
+ * @a32: element [3][2].
+ * @a33: element [3][3].
  *
  * Set values of matrix elements.
  */
 void gts_matrix_assign (GtsMatrix * m,
-			gdouble a00, gdouble a01, gdouble a02,
-			gdouble a10, gdouble a11, gdouble a12,
-			gdouble a20, gdouble a21, gdouble a22)
+			gdouble a00, gdouble a01, gdouble a02, gdouble a03,
+			gdouble a10, gdouble a11, gdouble a12, gdouble a13,
+			gdouble a20, gdouble a21, gdouble a22, gdouble a23,
+			gdouble a30, gdouble a31, gdouble a32, gdouble a33)
 {
   g_return_if_fail (m != NULL);
 
-  m[0][0] = a00; m[1][0] = a10; m[2][0] = a20;
-  m[0][1] = a01; m[1][1] = a11; m[2][1] = a21;
-  m[0][2] = a02; m[1][2] = a12; m[2][2] = a22;
+  m[0][0] = a00; m[1][0] = a10; m[2][0] = a20; m[3][0] = a30;
+  m[0][1] = a01; m[1][1] = a11; m[2][1] = a21; m[3][1] = a31;
+  m[0][2] = a02; m[1][2] = a12; m[2][2] = a22; m[3][2] = a32;
+  m[0][3] = a03; m[1][3] = a13; m[2][3] = a23; m[3][3] = a33;
 }
 
 /**
@@ -96,7 +114,7 @@ GtsMatrix * gts_matrix_projection (GtsTriangle * t)
   
   g_return_val_if_fail (t != NULL, NULL);
 
-  m = g_malloc (3*sizeof (GtsVector));
+  m = g_malloc (4*sizeof (GtsVector4));
   gts_triangle_vertices_edges (t, NULL, &v1, &v2, &v3, &e1, &e2, &e3);
 
   x1 = GTS_POINT (v2)->x - GTS_POINT (v1)->x; 
@@ -109,11 +127,13 @@ GtsMatrix * gts_matrix_projection (GtsTriangle * t)
   x2 = y3*z1 - z3*y1; y2 = z3*x1 - x3*z1; z2 = x3*y1 - y3*x1;
 
   g_assert ((l = sqrt (x1*x1 + y1*y1 + z1*z1)) > 0.0);
-  m[0][0] = x1/l; m[1][0] = y1/l; m[2][0] = z1/l;
+  m[0][0] = x1/l; m[1][0] = y1/l; m[2][0] = z1/l; m[3][0] = 0.;
   g_assert ((l = sqrt (x2*x2 + y2*y2 + z2*z2)) > 0.0);
-  m[0][1] = x2/l; m[1][1] = y2/l; m[2][1] = z2/l;
+  m[0][1] = x2/l; m[1][1] = y2/l; m[2][1] = z2/l; m[3][1] = 0.;
   g_assert ((l = sqrt (x3*x3 + y3*y3 + z3*z3)) > 0.0);
-  m[0][2] = x3/l; m[1][2] = y3/l; m[2][2] = z3/l;
+  m[0][2] = x3/l; m[1][2] = y3/l; m[2][2] = z3/l; m[3][2] = 0.;
+  m[0][3] = 0; m[1][3] = 0.; m[2][3] = 0.; m[3][3] = 1.;
+
   return m;
 }
 
@@ -129,30 +149,157 @@ GtsMatrix * gts_matrix_transpose (GtsMatrix * m)
 
   g_return_val_if_fail (m != NULL, NULL);
 
-  mi = g_malloc (3*sizeof (GtsVector));
+  mi = g_malloc (4*sizeof (GtsVector4));
 
-  mi[0][0] = m[0][0]; mi[1][0] = m[0][1]; mi[2][0] = m[0][2]; 
-  mi[0][1] = m[1][0]; mi[1][1] = m[1][1]; mi[2][1] = m[1][2]; 
-  mi[0][2] = m[2][0]; mi[1][2] = m[2][1]; mi[2][2] = m[2][2]; 
+  mi[0][0] = m[0][0]; mi[1][0] = m[0][1]; 
+  mi[2][0] = m[0][2]; mi[3][0] = m[0][3];
+  mi[0][1] = m[1][0]; mi[1][1] = m[1][1]; 
+  mi[2][1] = m[1][2]; mi[3][1] = m[1][3];
+  mi[0][2] = m[2][0]; mi[1][2] = m[2][1]; 
+  mi[2][2] = m[2][2]; mi[3][2] = m[2][3];
+  mi[0][3] = m[3][0]; mi[1][3] = m[3][1]; 
+  mi[2][3] = m[3][2]; mi[3][3] = m[3][3];
 
   return mi;
 }
 
+/*
+ * calculate the determinant of a 2x2 matrix.
+ * 
+ * Adapted from:
+ * Matrix Inversion
+ * by Richard Carling
+ * from "Graphics Gems", Academic Press, 1990
+ */
+static gdouble det2x2 (gdouble a, gdouble b, gdouble c, gdouble d)
+{
+  gdouble ans2;
+
+  ans2 = a*d - b*c;
+  return ans2;
+}
+
+/*
+ * calculate the determinant of a 3x3 matrix
+ * in the form
+ *
+ *     | a1,  b1,  c1 |
+ *     | a2,  b2,  c2 |
+ *     | a3,  b3,  c3 |
+ *
+ * Adapted from:
+ * Matrix Inversion
+ * by Richard Carling
+ * from "Graphics Gems", Academic Press, 1990
+ */
+static gdouble det3x3 (gdouble a1, gdouble a2, gdouble a3, 
+		       gdouble b1, gdouble b2, gdouble b3, 
+		       gdouble c1, gdouble c2, gdouble c3)
+{
+  gdouble ans3;
+
+  ans3 = a1 * det2x2( b2, b3, c2, c3 )
+    - b1 * det2x2( a2, a3, c2, c3 )
+    + c1 * det2x2( a2, a3, b2, b3 );
+  return ans3;
+}
+
 /**
  * gts_matrix_determinant:
  * @m: a #GtsMatrix.
  *
- * Returns: the value of the det(@m).
+ * Returns: the value of det(@m).
  */
 gdouble gts_matrix_determinant (GtsMatrix * m)
 {
+  gdouble ans4;
+  gdouble a1, a2, a3, a4, b1, b2, b3, b4, c1, c2, c3, c4, d1, d2, d3, d4;
+
   g_return_val_if_fail (m != NULL, 0.0);
 
-  return (m[0][0]*(m[1][1]*m[2][2] - m[2][1]*m[1][2]) - 
-	  m[0][1]*(m[1][0]*m[2][2] - m[2][0]*m[1][2]) + 
-	  m[0][2]*(m[1][0]*m[2][1] - m[2][0]*m[1][1]));
+  a1 = m[0][0]; b1 = m[0][1]; 
+  c1 = m[0][2]; d1 = m[0][3];
+  
+  a2 = m[1][0]; b2 = m[1][1]; 
+  c2 = m[1][2]; d2 = m[1][3];
+  
+  a3 = m[2][0]; b3 = m[2][1]; 
+  c3 = m[2][2]; d3 = m[2][3];
+  
+  a4 = m[3][0]; b4 = m[3][1]; 
+  c4 = m[3][2]; d4 = m[3][3];
+  
+  ans4 = a1 * det3x3 (b2, b3, b4, c2, c3, c4, d2, d3, d4)
+    - b1 * det3x3 (a2, a3, a4, c2, c3, c4, d2, d3, d4)
+    + c1 * det3x3 (a2, a3, a4, b2, b3, b4, d2, d3, d4)
+    - d1 * det3x3 (a2, a3, a4, b2, b3, b4, c2, c3, c4);
+
+  return ans4;
 }
 
+/* 
+ *   adjoint( original_matrix, inverse_matrix )
+ * 
+ *     calculate the adjoint of a 4x4 matrix
+ *
+ *      Let  a   denote the minor determinant of matrix A obtained by
+ *           ij
+ *
+ *      deleting the ith row and jth column from A.
+ *
+ *                    i+j
+ *     Let  b   = (-1)    a
+ *          ij            ji
+ *
+ *    The matrix B = (b  ) is the adjoint of A
+ *                     ij
+ */
+static GtsMatrix * adjoint (GtsMatrix * m)
+{
+  gdouble a1, a2, a3, a4, b1, b2, b3, b4;
+  gdouble c1, c2, c3, c4, d1, d2, d3, d4;
+  GtsMatrix * ma;
+
+  a1 = m[0][0]; b1 = m[0][1]; 
+  c1 = m[0][2]; d1 = m[0][3];
+  
+  a2 = m[1][0]; b2 = m[1][1]; 
+  c2 = m[1][2]; d2 = m[1][3];
+  
+  a3 = m[2][0]; b3 = m[2][1];
+  c3 = m[2][2]; d3 = m[2][3];
+  
+  a4 = m[3][0]; b4 = m[3][1]; 
+  c4 = m[3][2]; d4 = m[3][3];
+
+  ma = g_malloc (4*sizeof (GtsVector4));
+
+  /* row column labeling reversed since we transpose rows & columns */
+
+  ma[0][0]  =   det3x3 (b2, b3, b4, c2, c3, c4, d2, d3, d4);
+  ma[1][0]  = - det3x3 (a2, a3, a4, c2, c3, c4, d2, d3, d4);
+  ma[2][0]  =   det3x3 (a2, a3, a4, b2, b3, b4, d2, d3, d4);
+  ma[3][0]  = - det3x3 (a2, a3, a4, b2, b3, b4, c2, c3, c4);
+  
+  ma[0][1]  = - det3x3 (b1, b3, b4, c1, c3, c4, d1, d3, d4);
+  ma[1][1]  =   det3x3 (a1, a3, a4, c1, c3, c4, d1, d3, d4);
+  ma[2][1]  = - det3x3 (a1, a3, a4, b1, b3, b4, d1, d3, d4);
+  ma[3][1]  =   det3x3 (a1, a3, a4, b1, b3, b4, c1, c3, c4);
+  
+  ma[0][2]  =   det3x3 (b1, b2, b4, c1, c2, c4, d1, d2, d4);
+  ma[1][2]  = - det3x3 (a1, a2, a4, c1, c2, c4, d1, d2, d4);
+  ma[2][2]  =   det3x3 (a1, a2, a4, b1, b2, b4, d1, d2, d4);
+  ma[3][2]  = - det3x3 (a1, a2, a4, b1, b2, b4, c1, c2, c4);
+  
+  ma[0][3]  = - det3x3 (b1, b2, b3, c1, c2, c3, d1, d2, d3);
+  ma[1][3]  =   det3x3 (a1, a2, a3, c1, c2, c3, d1, d2, d3);
+  ma[2][3]  = - det3x3 (a1, a2, a3, b1, b2, b3, d1, d2, d3);
+  ma[3][3]  =   det3x3 (a1, a2, a3, b1, b2, b3, c1, c2, c3);
+  
+  return ma;
+}
+
+
 /**
  * gts_matrix_inverse:
  * @m: a #GtsMatrix.
@@ -162,16 +309,45 @@ gdouble gts_matrix_determinant (GtsMatrix * m)
  */
 GtsMatrix * gts_matrix_inverse (GtsMatrix * m)
 {
-  GtsMatrix * mi;
+  GtsMatrix * madj;
   gdouble det;
+  gint i, j;
 
   g_return_val_if_fail (m != NULL, NULL);
   
   det = gts_matrix_determinant (m);
+  if (det == 0.)
+    return NULL;
+
+  madj = adjoint (m);
+  for (i = 0; i < 4; i++)
+    for(j = 0; j < 4; j++)
+      madj[i][j] /= det;
+
+  return madj;
+}
+
+/**
+ * gts_matrix3_inverse:
+ * @m: a 3x3 #GtsMatrix.
+ *
+ * Returns: a pointer to a newly created 3x3 #GtsMatrix inverse of @m or %NULL
+ * if @m is not invertible.
+ */
+GtsMatrix * gts_matrix3_inverse (GtsMatrix * m)
+{
+  GtsMatrix * mi;
+  gdouble det;
+
+  g_return_val_if_fail (m != NULL, NULL);
+  
+  det = (m[0][0]*(m[1][1]*m[2][2] - m[2][1]*m[1][2]) - 
+	 m[0][1]*(m[1][0]*m[2][2] - m[2][0]*m[1][2]) + 
+	 m[0][2]*(m[1][0]*m[2][1] - m[2][0]*m[1][1]));
   if (det == 0.0)
     return NULL;
 
-  mi = g_malloc (3*sizeof (GtsVector));
+  mi = g_malloc0 (4*sizeof (GtsVector));
 
   mi[0][0] = (m[1][1]*m[2][2] - m[1][2]*m[2][1])/det; 
   mi[0][1] = (m[2][1]*m[0][2] - m[0][1]*m[2][2])/det;
@@ -199,12 +375,14 @@ void gts_matrix_print (GtsMatrix * m, FILE * fptr)
   g_return_if_fail (fptr != NULL);
 
   fprintf (fptr, 
-	   "[[%15.7g %15.7g %15.7g ]\n"
-	   " [%15.7g %15.7g %15.7g ]\n"
-	   " [%15.7g %15.7g %15.7g ]]\n",
-	   m[0][0], m[0][1], m[0][2],
-	   m[1][0], m[1][1], m[1][2],
-	   m[2][0], m[2][1], m[2][2]);
+	   "[[%15.7g %15.7g %15.7g %15.7g]\n"
+	   " [%15.7g %15.7g %15.7g %15.7g]\n"
+	   " [%15.7g %15.7g %15.7g %15.7g]\n"
+	   " [%15.7g %15.7g %15.7g %15.7g]]\n",
+	   m[0][0], m[0][1], m[0][2], m[0][3],
+	   m[1][0], m[1][1], m[1][2], m[1][3],
+	   m[2][0], m[2][1], m[2][2], m[2][3],
+	   m[3][0], m[3][1], m[3][2], m[3][3]);
 }
 
 /**
@@ -223,6 +401,22 @@ void gts_vector_print (GtsVector v, FILE * fptr)
 	   v[0], v[1], v[2]);
 }
 
+/**
+ * gts_vector4_print:
+ * @v: a #GtsVector4.
+ * @fptr: a file descriptor.
+ * 
+ * Print @v to file @fptr.
+ */
+void gts_vector4_print (GtsVector4 v, FILE * fptr)
+{
+  g_return_if_fail (fptr != NULL);
+
+  fprintf (fptr, 
+	   "[%15.7g %15.7g %15.7g %15.7g]\n",
+	   v[0], v[1], v[2], v[3]);
+}
+
 /* [cos(alpha)]^2 */
 #define COSALPHA2 0.999695413509 /* alpha = 1 degree */
 /* [sin(alpha)]^2 */
@@ -395,11 +589,137 @@ GtsMatrix * gts_matrix_product (GtsMatrix * m1, GtsMatrix * m2)
   g_return_val_if_fail (m2 != NULL, NULL);
   g_return_val_if_fail (m1 != m2, NULL);
 
-  m = gts_matrix_new (0., 0., 0.,
-		      0., 0., 0.,
-		      0., 0., 0.);
-  for (i = 0; i < 3; i++)
-    for (j = 0; j < 3; j++)
-      m[i][j] = m1[i][0]*m2[0][j] + m1[i][1]*m2[1][j] + m1[i][2]*m2[2][j];
+  m = g_malloc (4*sizeof (GtsVector4));
+
+  for (i = 0; i < 4; i++)
+    for (j = 0; j < 4; j++)
+      m[i][j] = m1[i][0]*m2[0][j] + m1[i][1]*m2[1][j] +
+        m1[i][2]*m2[2][j] + m1[i][3]*m2[3][j];
+  return m;
+}
+
+/**
+ * gts_matrix_zero:
+ * @m: a #GtsMatrix or $NULL.
+ *
+ * Initializes @m to zeros. Allocates a matrix if @m is %NULL.
+ *
+ * Returns: the zero'ed matrix.
+ */
+GtsMatrix * gts_matrix_zero (GtsMatrix * m)
+{
+  if (m == NULL)
+    m = g_malloc0 (4*sizeof (GtsVector4));
+  else {
+    m[0][0] = m[1][0] = m[2][0] = m[3][0] = 0.;
+    m[0][1] = m[1][1] = m[2][1] = m[3][1] = 0.;
+    m[0][2] = m[1][2] = m[2][2] = m[3][2] = 0.;
+    m[0][3] = m[1][3] = m[2][3] = m[3][3] = 0.;
+  }
+  return m;
+}
+
+/**
+ * gts_matrix_identity:
+ * @m: a #GtsMatrix or %NULL.
+ *
+ * Initializes @m to an identity matrix. Allocates a matrix if @m is %NULL.
+ *
+ * Returns: the identity matrix.
+ */
+GtsMatrix * gts_matrix_identity (GtsMatrix * m)
+{
+  m = gts_matrix_zero (m);
+  m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1.;
+  return m;
+}
+
+/**
+ * gts_matrix_scale:
+ * @m: a #GtsMatrix or %NULL.
+ * @s: the scaling vector.
+ *
+ * Initializes @m to a scaling matrix for @s. Allocates a matrix if @m
+ * is %NULL.
+ *
+ * Returns: the scaling matrix.
+ */
+GtsMatrix * gts_matrix_scale (GtsMatrix * m, GtsVector s)
+{
+  m = gts_matrix_zero (m);
+  m[0][0] = s[0];
+  m[1][1] = s[1];
+  m[2][2] = s[2];
+  m[3][3] = 1.;
+  return m;
+}
+
+/**
+ * gts_matrix_translate:
+ * @m: a #GtsMatrix or %NULL.
+ * @t: the translation vector.
+ *
+ * Initializes @m to a translation matrix for @t.  Allocates a new
+ * matrix if @m is %NULL.
+ *
+ * Returns: the translation matix.
+ */
+GtsMatrix * gts_matrix_translate (GtsMatrix * m, GtsVector t)
+{
+  m = gts_matrix_zero (m);
+  m[0][3] = t[0];
+  m[1][3] = t[1];
+  m[2][3] = t[2];
+  m[3][3] = 1.;
+  m[0][0] = m[1][1] = m[2][2] = 1.;
+  return m;
+}
+
+/**
+ * gts_matrix_rotate:
+ * @m: a #GtsMatrix or %NULL.
+ * @r: the rotation axis.
+ * @angle: the angle (in radians) to rotate by.
+ *
+ * Initializes @m to a rotation matrix around @r by @angle.
+ * Allocates a new matrix if @m is %NULL.
+ *
+ * Returns: the rotation matrix.
+ */
+GtsMatrix * gts_matrix_rotate (GtsMatrix * m,
+			       GtsVector r,
+			       gdouble angle)
+{
+  gdouble c, c1, s;
+
+  gts_vector_normalize (r);
+
+  c = cos (angle);
+  c1 = 1. - c;
+  s = sin (angle);
+
+  if (m == NULL)
+    m = g_malloc (4*sizeof (GtsVector4));
+
+  m[0][0] = r[0]*r[0]*c1 + c;
+  m[0][1] = r[0]*r[1]*c1 - r[2]*s;
+  m[0][2] = r[0]*r[2]*c1 + r[1]*s;
+  m[0][3] = 0.;
+
+  m[1][0] = r[1]*r[0]*c1 + r[2]*s;
+  m[1][1] = r[1]*r[1]*c1 + c;
+  m[1][2] = r[1]*r[2]*c1 - r[0]*s;
+  m[1][3] = 0.;
+
+  m[2][0] = r[2]*r[0]*c1 - r[1]*s;
+  m[2][1] = r[2]*r[1]*c1 + r[0]*s;
+  m[2][2] = r[2]*r[2]*c1 + c;
+  m[2][3] = 0.;
+
+  m[3][0] = 0.;
+  m[3][1] = 0.;
+  m[3][2] = 0.;
+  m[3][3] = 1.;
+
   return m;
 }
diff --git a/src/misc.c b/src/misc.c
index 484144c..ce36cf8 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -17,6 +17,9 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#include <stdlib.h>
+#include <string.h>
+
 #include "gts.h"
 #include "gts-private.h"
 #include "config.h"
@@ -36,62 +39,533 @@ static gboolean char_in_string (char c, const char * s)
 }
 
 /**
- * gts_get_token:
- * @fptr: a file pointer.
- * @buf: a buffer in which to return the result.
- * @delimiters: a string of characters used to delimit the fields.
- * @comments: a string of characters defining the start of a comment.
+ * gts_file_new:
+ * @fp: a file pointer.
+ *
+ * Returns: a new #GtsFile.
+ */
+GtsFile * gts_file_new (FILE * fp)
+{
+  GtsFile * f;
+
+  g_return_val_if_fail (fp != NULL, NULL);
+
+  f = g_malloc (sizeof (GtsFile));
+  f->fp = fp;
+  f->curline = 1;
+  f->curpos = 0;
+  f->token = g_string_new ("");
+  f->type = '\0';
+  f->error = NULL;
+  f->next_token = '\0';
+
+  f->scope = f->scope_max = 0;
+  f->delimiters = g_strdup (" \t");
+  f->comments = g_strdup (GTS_COMMENTS);
+  f->tokens = g_strdup ("\n{}()=");
+
+  gts_file_next_token (f);
+
+  return f;
+}
+
+/**
+ * gts_file_destroy:
+ * @f: a #GtsFile.
+ *
+ * Frees all the memory allocated for @f.
+ */
+void gts_file_destroy (GtsFile * f)
+{
+  g_return_if_fail (f != NULL);
+
+  g_free (f->delimiters);
+  g_free (f->comments);
+  g_free (f->tokens);
+  if (f->error)
+    g_free (f->error);
+  g_string_free (f->token, TRUE);
+  g_free (f);
+}
+
+/**
+ * gts_file_verror:
+ * @f: a @GtsFile.
+ * @format: the standard sprintf() format string.
+ * @args: the list of parameters to insert into the format string.
+ *
+ * Sets the @error field of @f using g_strdup_vprintf().
  *
- * Reads characters from @fptr and fills @buf with a string delimited
- * by characters in @delimiters. Comments starts with a character in
- * @comments and ends with a newline character ('\n').
+ * This function can be called only once and disables any other
+ * operation on @f (gts_file_close() excepted).
+ */
+void gts_file_verror (GtsFile * f,
+		      const gchar * format,
+		      va_list args)
+{
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (format != NULL);
+
+  g_assert (f->type != GTS_ERROR);
+  f->error = g_strdup_vprintf (format, args);
+  f->type = GTS_ERROR;
+}
+
+/**
+ * gts_file_error:
+ * @f: a @GtsFile.
+ * @format: the standard sprintf() format string.
+ * @...: the parameters to insert into the format string.
+ *
+ * Sets the @error field of @f using gts_file_verror().
+ *
+ * This function can be called only once and disables any other
+ * operation on @f (gts_file_close() excepted).
+ */
+void gts_file_error (GtsFile * f,
+		     const gchar * format,
+		     ...)
+{
+  va_list args;
+
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (format != NULL);
+
+  va_start (args, format);  
+  gts_file_verror (f, format, args);
+  va_end (args);
+}
+
+/**
+ * gts_file_getc :
+ * @f: a #GtsFile.
  *
- * Returns: the last character read from @fptr.
+ * Returns: the next character in @f or EOF if the end of the file is
+ * reached or if an error occured.
  */
-gint gts_get_token (FILE * fptr, GString * buf, 
-		    const char * delimiters,
-		    const char * comments)
+gint gts_file_getc (GtsFile * f)
 {
   gint c;
-  gboolean in_string = FALSE;
 
-  g_return_val_if_fail (fptr != NULL, EOF);
-  g_return_val_if_fail (buf != NULL, EOF);
-  g_return_val_if_fail (delimiters != NULL, EOF);
-  g_return_val_if_fail (comments != NULL, EOF);
-
-  buf->str[0] = '\0';
-  buf->len = 0;
-  c = fgetc (fptr);
-  while (c != EOF && (!in_string || !char_in_string (c, delimiters))) {
-    if (char_in_string (c, comments))
-      gts_get_newline (fptr);
-    else if (in_string)
-      g_string_append_c (buf, c);
-    else if (!char_in_string (c, delimiters)) {
-      in_string = TRUE;
-      g_string_append_c (buf, c);
+  g_return_val_if_fail (f != NULL, EOF);
+
+  if (f->type == GTS_ERROR)
+    return EOF;
+
+  c = fgetc (f->fp); f->curpos++;
+  switch (c) {
+  case '\n': 
+    f->curline++;
+    f->curpos = 0; 
+    break;
+  case '{':
+    f->scope++; 
+    break;
+  case '}':
+    if (f->scope == 0) {
+      f->line = f->curline;
+      f->pos = f->curpos - 1;
+      gts_file_error (f, "no matching opening brace");
+      c = EOF;
     }
-    c = fgetc (fptr);
+    else
+      f->scope--;
   }
   return c;
 }
 
 /**
- * gts_get_newline:
- * @fptr: a file pointer.
+ * gts_file_read:
+ * @f: a #GtsFile.
+ * @ptr: a pointer.
+ * @size: size of an element.
+ * @nmemb: number of elements.
+ *
+ * Reads @nmemb elements of data, each @size bytes long, from @f,
+ * storing them at the location given by @ptr.
+ *
+ * Returns: the number of elements read.
+ */
+guint gts_file_read (GtsFile * f, gpointer ptr, guint size, guint nmemb)
+{
+  guint i, n;
+  gchar * p;
+
+  g_return_val_if_fail (f != NULL, 0);
+  g_return_val_if_fail (ptr != NULL, 0);
+
+  if (f->type == GTS_ERROR)
+    return 0;
+
+  n = fread (ptr, size, nmemb, f->fp);
+  for (i = 0, p = ptr; i < n*size; i++, p++) {
+    f->curpos++;
+    if (*p == '\n') {
+      f->curline++;
+      f->curpos = 0;
+    }
+  }
+  return n;
+}
+
+/**
+ * gts_file_getc_scope :
+ * @f: a #GtsFile.
  *
- * Reads characters from @fptr until a '\n' character is met.
+ * Returns: the next character in @f in the scope defined by
+ * @f->scope_max or EOF if the end of the file is reached or if an
+ * error occured.
  */
-void gts_get_newline (FILE * fptr)
+gint gts_file_getc_scope (GtsFile * f)
 {
   gint c;
 
-  g_return_if_fail (fptr != NULL);
+  g_return_val_if_fail (f != NULL, EOF);
+
+  if (f->type == GTS_ERROR)
+    return EOF;
   
-  c = fgetc (fptr);
-  while (c != EOF && c != '\n')
-    c = fgetc (fptr);
+  if (f->scope <= f->scope_max)
+    c = gts_file_getc (f);
+  else {
+    c = gts_file_getc (f);
+    while (c != EOF && f->scope > f->scope_max)
+      c = gts_file_getc (f);    
+  }
+  return c;
+}
+
+static void jump_to (GtsFile * f, gchar c)
+{
+  gint a;
+  
+  a = gts_file_getc_scope (f);
+  while (a != EOF && a != c)
+    a = gts_file_getc_scope (f);
+}
+
+/**
+ * gts_file_next_token:
+ * @f: a #GtsFile.
+ *
+ * Reads next token from @f and updates its @token and @delim fields.
+ */
+void gts_file_next_token (GtsFile * f)
+{
+  gint c;
+  gboolean in_string = FALSE;
+
+  g_return_if_fail (f != NULL);
+
+  if (f->type == GTS_ERROR)
+    return;
+  f->token->str[0] = '\0';
+  f->token->len = 0;
+  if (f->next_token != '\0') {
+    f->line = f->curline;
+    f->pos = f->curpos - 1;
+    g_string_append_c (f->token, f->next_token);
+    f->type = f->next_token;
+    f->next_token = '\0';
+    return;
+  }
+  f->type = GTS_NONE;
+  c = gts_file_getc_scope (f);
+  while (c != EOF && (!in_string || !char_in_string (c, f->delimiters))) {
+    if (char_in_string (c, f->comments))
+      jump_to (f, '\n');
+    else if (in_string) {
+      if (char_in_string (c, f->tokens)) {
+	f->next_token = c;
+	break;
+      }
+      g_string_append_c (f->token, c);
+    }
+    else if (!char_in_string (c, f->delimiters)) {
+      in_string = TRUE;
+      f->line = f->curline;
+      f->pos = f->curpos - 1;
+      g_string_append_c (f->token, c);
+      if (char_in_string (c, f->tokens)) {
+	f->type = c;
+	break;
+      }
+    }
+    c = gts_file_getc_scope (f);
+  }
+  if (f->type == GTS_NONE && f->token->len > 0) {
+    gchar * a;
+
+    a = f->token->str;
+    while (*a != '\0' && char_in_string (*a, "+-")) a++;
+    if (*a == '\0') {
+      f->type = GTS_STRING;
+      return;
+    }
+    a = f->token->str;
+    while (*a != '\0' && char_in_string (*a, "+-0123456789")) a++;
+    if (*a == '\0') {
+      f->type = GTS_INT;
+      return;
+    }
+    a = f->token->str;
+    while (*a != '\0' && char_in_string (*a, "+-eE.")) a++;
+    if (*a == '\0') {
+      f->type = GTS_STRING;
+      return;
+    }
+    a = f->token->str;
+    while (*a != '\0' && char_in_string (*a, "+-0123456789eE.")) a++;
+    if (*a == '\0') {
+      f->type = GTS_FLOAT;
+      return;
+    }
+    a = f->token->str;
+    if (!strncmp (a, "0x", 2) || 
+	!strncmp (a, "-0x", 3) || 
+	!strncmp (a, "+0x", 3)) {
+      while (*a != '\0' && char_in_string (*a, "+-0123456789abcdefx")) a++;
+      if (*a == '\0') {
+	f->type = GTS_INT;
+	return;
+      }
+      a = f->token->str;
+      while (*a != '\0' && char_in_string (*a, "+-0123456789abcdefx.p")) a++;
+      if (*a == '\0') {
+	f->type = GTS_FLOAT;
+	return;
+      }
+    }
+    f->type = GTS_STRING;
+  }
+}
+
+/**
+ * gts_file_first_token_after:
+ * @f: a #GtsFile.
+ * @type: a #GtsTokenType.
+ *
+ * Finds and sets the first token of a type different from @type 
+ * occuring after a token of type @type.
+ */
+void gts_file_first_token_after (GtsFile * f, GtsTokenType type)
+{
+  g_return_if_fail (f != NULL);
+
+  while (f->type != GTS_ERROR && 
+	 f->type != GTS_NONE &&
+	 f->type != type)
+    gts_file_next_token (f);
+  while (f->type == type)
+    gts_file_next_token (f);
+}
+
+/**
+ * gts_file_assign_start:
+ * @f: a #GtsFile.
+ * @vars: a %GTS_NONE terminated array of #GtsFileVariable.
+ *
+ * Opens a block delimited by braces to read a list of optional
+ * arguments specified by @vars.  
+ *
+ * If an error is encountered the @error field of @f is set.
+ */
+void gts_file_assign_start (GtsFile * f, GtsFileVariable * vars)
+{
+  GtsFileVariable * var;
+
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (vars != NULL);
+
+  var = vars;
+  while (var->type != GTS_NONE)
+    (var++)->set = FALSE;
+
+  if (f->type != '{') {
+    gts_file_error (f, "expecting an opening brace");
+    return;
+  }
+
+  f->scope_max++;
+  gts_file_next_token (f);
+}
+
+/**
+ * gts_file_assign_next:
+ * @f: a #GtsFile.
+ * @vars: a %GTS_NONE terminated array of #GtsFileVariable.
+ *
+ * Assigns the next optional argument of @vars read from @f.
+ *
+ * Returns: the variable of @vars which has been assigned or %NULL if
+ * no variable has been assigned (if an error has been encountered the
+ * @error field of @f is set).  
+ */
+GtsFileVariable * gts_file_assign_next (GtsFile * f, GtsFileVariable * vars)
+{
+  GtsFileVariable * var;
+  gboolean found = FALSE;
+
+  g_return_val_if_fail (f != NULL, NULL);
+  g_return_val_if_fail (vars != NULL, NULL);
+
+  while (f->type == '\n')
+    gts_file_next_token (f);
+  if (f->type == '}') {
+    f->scope_max--;
+    gts_file_next_token (f);
+    return NULL;
+  }
+  if (f->type == GTS_ERROR)
+    return NULL;
+
+  var = vars;
+  while (f->type != GTS_ERROR && var->type != GTS_NONE && !found) {
+    if (!strcmp (var->name, f->token->str)) {
+      found = TRUE;
+      if (var->unique && var->set)
+	gts_file_error (f, "variable `%s' was already set at line %d:%d", 
+			var->name, var->line, var->pos);
+      else {
+	var->line = f->line;
+	var->pos = f->pos;
+	gts_file_next_token (f);
+	if (f->type != '=')
+	  gts_file_error (f, "expecting `='");
+	else {
+	  var->set = TRUE;
+	  switch (var->type) {
+	  case GTS_FILE:
+	    break;
+	  case GTS_INT:
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT) {
+	      gts_file_error (f, "expecting an integer");
+	      var->set = FALSE;
+	    }
+	    else if (var->data)
+	      *((gint *) var->data) = atoi (f->token->str); 
+	    break;
+	  case GTS_UINT:
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT) {
+	      gts_file_error (f, "expecting an integer");
+	      var->set = FALSE;
+	    }
+	    else if (var->data)
+	      *((guint *) var->data) = atoi (f->token->str); 
+	    break;
+	  case GTS_FLOAT:
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+	      gts_file_error (f, "expecting a number");
+	      var->set = FALSE;
+	    }
+	    else if (var->data)
+	      *((gfloat *) var->data) = atof (f->token->str); 
+	    break;
+	  case GTS_DOUBLE:
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+	      gts_file_error (f, "expecting a number");
+	      var->set = FALSE;
+	    }
+	    else if (var->data)
+	      *((gdouble *) var->data) = atof (f->token->str); 
+	    break;
+	  case GTS_STRING:
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT && 
+		f->type != GTS_FLOAT && 
+		f->type != GTS_STRING) {
+	      gts_file_error (f, "expecting a string");
+	      var->set = FALSE;
+	    }
+	    else if (var->data)
+	      *((gchar **) var->data) = g_strdup (f->token->str); 
+	    break;
+	  default:
+	    g_assert_not_reached ();
+	  }
+	}
+      }
+    }
+    else
+      var++;
+  }
+  if (!found)
+    gts_file_error (f, "unknown identifier `%s'", f->token->str);
+  else if (f->type != GTS_ERROR) {
+    g_assert (var->set);
+    gts_file_next_token (f);
+    return var;
+  }
+  return NULL;
+}
+
+/**
+ * gts_file_assign_variables:
+ * @f: a #GtsFile.
+ * @vars: an array of #GtsFileVariable.
+ *
+ * Assigns all the variables belonging to @vars found in @f.
+ *
+ * If an error is encountered the @error field of @f is set.
+ */
+void gts_file_assign_variables (GtsFile * f, GtsFileVariable * vars)
+{
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (vars != NULL);
+
+  gts_file_assign_start (f, vars);
+  while (gts_file_assign_next (f, vars))
+    ;
+}
+
+/**
+ * gts_file_variable_error:
+ * @f: a #GtsFile.
+ * @vars: an array of #GtsFileVariable.
+ * @name: the name of a variable in @vars.
+ * @format: the standard sprintf() format string.
+ * @...: the parameters to insert into the format string.
+ *
+ * Sets the @error field of @f using gts_file_verror().
+ *
+ * String @name must match one of the variable names in @vars.
+ *
+ * If variable @name has been assigned (using gts_file_assign_variables())
+ * sets the @line and @pos fields of @f to the line and position where
+ * it has been assigned.
+ */
+void gts_file_variable_error (GtsFile * f, 
+			      GtsFileVariable * vars,
+			      const gchar * name,
+			      const gchar * format,
+			      ...)
+{
+  va_list args;
+  GtsFileVariable * var;
+
+  g_return_if_fail (f != NULL);
+  g_return_if_fail (vars != NULL);
+  g_return_if_fail (name != NULL);
+  g_return_if_fail (format != NULL);
+
+  var = vars;
+  while (var->type != GTS_NONE && strcmp (var->name, name))
+    var++;
+
+  g_return_if_fail (var->type != GTS_NONE); /* @name not found in @vars */
+
+  if (var->set) {
+    f->line = var->line;
+    f->pos = var->pos;
+  }
+
+  va_start (args, format);  
+  gts_file_verror (f, format, args);
+  va_end (args);
 }
 
 #ifdef DEBUG_FUNCTIONS
diff --git a/src/named.c b/src/named.c
index 711cc46..379f9f6 100644
--- a/src/named.c
+++ b/src/named.c
@@ -20,24 +20,15 @@
 #include <string.h>
 #include "gts.h"
 
-static gint nvertex_read (GtsObject ** po, FILE * fptr)
+static void nvertex_read (GtsObject ** po, GtsFile * fp)
 {
-  GString * buf;
-  gint delim = 0;
-
   if ((*po)->klass->parent_class->read)
-    delim = (* (*po)->klass->parent_class->read) (po, fptr);
-  if (delim != '\n' && delim != EOF) {
-    buf = g_string_new ("");
-    delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-    if (delim == EOF) {
-      g_string_free (buf, TRUE);
-      return EOF;
-    }
-    strncpy (GTS_NVERTEX (*po)->name, buf->str, GTS_NAME_LENGTH);
-    g_string_free (buf, TRUE);
+    (* (*po)->klass->parent_class->read) (po, fp);
+
+  if (fp->type != '\n' && fp->type != GTS_ERROR) {
+    strncpy (GTS_NVERTEX (*po)->name, fp->token->str, GTS_NAME_LENGTH);
+    gts_file_next_token (fp);
   }
-  return delim;
 }
 
 static void nvertex_write (GtsObject * o, FILE * fptr)
@@ -86,20 +77,14 @@ GtsNVertexClass * gts_nvertex_class (void)
   return klass;
 }
 
-static gint nedge_read (GtsObject ** po, FILE * fptr)
+static void nedge_read (GtsObject ** po, GtsFile * fp)
 {
-  GString * buf;
-  gint delim;
-
-  buf = g_string_new ("");
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
-    return EOF;
+  if (fp->type != GTS_STRING) {
+    gts_file_error (fp, "expecting a string (name)");
+    return;
   }
-  strncpy (GTS_NEDGE (*po)->name, buf->str, GTS_NAME_LENGTH);
-  g_string_free (buf, TRUE);
-  return delim;
+  strncpy (GTS_NEDGE (*po)->name, fp->token->str, GTS_NAME_LENGTH);
+  gts_file_next_token (fp);
 }
 
 static void nedge_write (GtsObject * o, FILE * fptr)
@@ -147,20 +132,14 @@ GtsNEdgeClass * gts_nedge_class (void)
   return klass;
 }
 
-static gint nface_read (GtsObject ** po, FILE * fptr)
+static void nface_read (GtsObject ** po, GtsFile * fp)
 {
-  GString * buf;
-  gint delim;
-
-  buf = g_string_new ("");
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
-    return EOF;
+  if (fp->type != GTS_STRING) {
+    gts_file_error (fp, "expecting a string (name)");
+    return;
   }
-  strncpy (GTS_NFACE (*po)->name, buf->str, GTS_NAME_LENGTH);
-  g_string_free (buf, TRUE);
-  return delim;
+  strncpy (GTS_NFACE (*po)->name, fp->token->str, GTS_NAME_LENGTH);
+  gts_file_next_token (fp);
 }
 
 static void nface_write (GtsObject * o, FILE * fptr)
diff --git a/src/object.c b/src/object.c
index 4622cdc..54ed7de 100644
--- a/src/object.c
+++ b/src/object.c
@@ -47,8 +47,14 @@ gpointer gts_object_class_new (GtsObjectClass * parent_class,
   GtsObjectClass * klass;
 
   g_return_val_if_fail (info != NULL, NULL);
-
-  klass = g_malloc (info->class_size);
+  g_return_val_if_fail (parent_class == NULL ||
+			info->object_size >= parent_class->info.object_size,
+			NULL);
+  g_return_val_if_fail (parent_class == NULL ||
+			info->class_size >= parent_class->info.class_size,
+			NULL);
+
+  klass = g_malloc0 (info->class_size);
   klass->info = *info;
   klass->parent_class = parent_class;
   gts_object_class_init (klass, klass);
@@ -87,6 +93,7 @@ static void object_destroy (GtsObject * object)
 #endif
   id_remove (object);
 #endif
+  object->klass = NULL;
   g_free (object);
 }
 
@@ -286,7 +293,7 @@ GtsObject * gts_object_new (GtsObjectClass * klass)
 
   g_return_val_if_fail (klass != NULL, NULL);
 
-  object = g_malloc (klass->info.object_size);
+  object = g_malloc0 (klass->info.object_size);
   object->klass = klass;
   gts_object_init (object, klass);
 
@@ -318,7 +325,7 @@ GtsObject * gts_object_clone (GtsObject * object)
   g_return_val_if_fail (object != NULL, NULL);
   g_return_val_if_fail (object->klass->clone, NULL);
 
-  clone = g_malloc (object->klass->info.object_size);
+  clone = g_malloc0 (object->klass->info.object_size);
   clone->klass = object->klass;
   object_init (clone);
   (* object->klass->clone) (clone, object);
@@ -375,3 +382,23 @@ void gts_object_attributes (GtsObject * object, GtsObject * from)
   if (object->klass->attributes)
     (* object->klass->attributes) (object, from);
 }
+
+static void free_class (gchar * name, GtsObjectClass * klass)
+{
+  g_free (klass);
+}
+
+/**
+ * gts_finalize:
+ *
+ * Free all the memory allocated by the object system of GTS. No other
+ * GTS function can be called after this function has been called.
+ */
+void gts_finalize (void)
+{
+  if (class_table) {
+    g_hash_table_foreach (class_table, (GHFunc) free_class, NULL);
+    g_hash_table_destroy (class_table);
+    class_table = NULL;
+  }
+}
diff --git a/src/partition.c b/src/partition.c
index 4eb8f5b..1f88986 100644
--- a/src/partition.c
+++ b/src/partition.c
@@ -17,6 +17,8 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#include <math.h>
+
 #include "gts.h"
 
 /* #define DEBUG */
@@ -494,6 +496,7 @@ GtsGraphBisection * gts_graph_ggg_bisection (GtsGraph * g, guint ntry)
 {
   gfloat size, bestcost = G_MAXFLOAT, smin;
   GtsGraph * bestg1 = NULL, * bestg2 = NULL;
+  gboolean balanced = FALSE;
   GtsEHeap * degree_heap;
   GtsGNode * seed;
   GtsGraphBisection * bg;
@@ -544,7 +547,9 @@ GtsGraphBisection * gts_graph_ggg_bisection (GtsGraph * g, guint ntry)
     gts_container_foreach (GTS_CONTAINER (g), (GtsFunc) add_unused, g2);
 
     cost = gts_graph_edges_cut_weight (g1);
-    if (!bestg1 || (cost < bestcost && gts_graph_weight (g1) >= smin)) {
+    if (!bestg1 || 
+	(!balanced && gts_graph_weight (g1) >= smin) ||
+	(cost < bestcost && gts_graph_weight (g1) >= smin)) {
       if (bestg1)
 	bestcost = cost;
       if (bestg1)
@@ -553,6 +558,8 @@ GtsGraphBisection * gts_graph_ggg_bisection (GtsGraph * g, guint ntry)
 	gts_object_destroy (GTS_OBJECT (bestg2));
       bestg1 = g1;
       bestg2 = g2;
+      if (gts_graph_weight (g1) >= smin)
+	balanced = TRUE;
     }
     else {
       gts_object_destroy (GTS_OBJECT (g1));
@@ -715,7 +722,7 @@ gdouble gts_graph_bisection_kl_refine (GtsGraphBisection * bg,
   GtsGNode * n;
   guint nm = 0, i;
   GtsGNode ** moves;
-  gdouble bestcost = 0., totalcost = 0.;
+  gdouble bestcost = 0., totalcost = 0., best_balance;
 
   g_return_val_if_fail (bg != NULL, 0.);
   g_return_val_if_fail (mmax > 0, 0.);
@@ -731,6 +738,7 @@ gdouble gts_graph_bisection_kl_refine (GtsGraphBisection * bg,
   gts_eheap_thaw (h2);
 
   moves = g_malloc (sizeof (GtsGNode *)*mmax);
+  best_balance = fabs (gts_graph_weight (bg->g1) - gts_graph_weight (bg->g2));
 
   do {
     GtsGraph * g1, * g2;
@@ -758,6 +766,14 @@ gdouble gts_graph_bisection_kl_refine (GtsGraphBisection * bg,
 	bestcost = totalcost;
 	nm = 0;
       }
+      else if (totalcost == bestcost) {
+	gdouble balance = fabs (gts_graph_weight (g1) - gts_graph_weight (g2));
+
+	if (balance < best_balance) {
+	  best_balance = balance;
+	  nm = 0;
+	}
+      }	       
       else
 	moves[nm++] = n;
 
@@ -850,6 +866,8 @@ static void update_neighbors (GtsGNode * n, GtsGraphBisection * bg,
  * gts_graph_bisection_bkl_refine:
  * @bg: a #GtsGraphBisection.
  * @mmax: the maximum number of unsuccessful successive moves.
+ * @imbalance: the maximum relative imbalance allowed between the
+ * weights of both halves of the partition.
  *
  * An implementation of the simplified boundary Kernighan-Lin
  * algorithm for graph bisection refinement as described in Karypis
@@ -862,16 +880,19 @@ static void update_neighbors (GtsGNode * n, GtsGraphBisection * bg,
  * Returns: the decrease in the weight of the edges cut by the bisection.  
  */
 gdouble gts_graph_bisection_bkl_refine (GtsGraphBisection * bg,
-					guint mmax)
+					guint mmax,
+					gfloat imbalance)
 {
   GtsEHeap * h1, * h2;
   GtsGNode * n;
   guint nm = 0, i;
   GtsGNode ** moves;
-  gdouble bestcost = 0., totalcost = 0.;
+  gdouble bestcost = 0., totalcost = 0., best_balance;
+  gboolean balanced = FALSE;
 
   g_return_val_if_fail (bg != NULL, 0.);
   g_return_val_if_fail (mmax > 0, 0.);
+  g_return_val_if_fail (imbalance >= 0. && imbalance <= 1., 0.);
 
   h1 = gts_eheap_new ((GtsKeyFunc) node_move_cost1, bg);
   gts_eheap_freeze (h1);
@@ -884,6 +905,10 @@ gdouble gts_graph_bisection_bkl_refine (GtsGraphBisection * bg,
   gts_eheap_thaw (h2);
 
   moves = g_malloc (sizeof (GtsGNode *)*mmax);
+  imbalance *= gts_graph_weight (bg->g);
+  best_balance = fabs (gts_graph_weight (bg->g1) - gts_graph_weight (bg->g2));
+  if (best_balance <= imbalance)
+    balanced = TRUE;
 
   do {
     GtsGraph * g1, * g2;
@@ -905,6 +930,8 @@ gdouble gts_graph_bisection_bkl_refine (GtsGraphBisection * bg,
       bg2 = bg->bg1;
     }
     if (n) {
+      gdouble balance;
+	
       GTS_OBJECT (n)->reserved = n;
       gts_container_add (GTS_CONTAINER (g2), GTS_CONTAINEE (n));
       gts_container_remove (GTS_CONTAINER (g1), GTS_CONTAINEE (n));
@@ -913,10 +940,24 @@ gdouble gts_graph_bisection_bkl_refine (GtsGraphBisection * bg,
 	g_hash_table_insert (bg2, n, n);
 
       update_neighbors (n, bg, h1, h2);
-  
+
       totalcost += cost;
-      if (totalcost < bestcost) {
+      balance = fabs (gts_graph_weight (g1) - gts_graph_weight (g2));
+      
+      if (!balanced && balance <= imbalance) {
+	bestcost = totalcost;
+	best_balance = balance;
+	balanced = TRUE;
+	nm = 0;
+      }
+      else if (totalcost < bestcost && 
+	       (balance < best_balance || balance <= imbalance)) {
 	bestcost = totalcost;
+	best_balance = balance;
+	nm = 0;
+      }
+      else if (totalcost == bestcost && balance < best_balance) {
+	best_balance = balance;
 	nm = 0;
       }
       else
@@ -1004,6 +1045,8 @@ static void bisection_children (GtsGNodeSplit * ns, GtsGraphBisection * bg)
  * @ntry: the number of tries for the graph growing algorithm.
  * @mmax: the number of unsucessful moves for the refinement algorithm.
  * @nmin: the minimum number of nodes of the coarsest graph.
+ * @imbalance: the maximum relative imbalance allowed between the
+ * weights of both halves of the partition.
  *
  * An implementation of a multilevel bisection algorithm as presented
  * in Karypis and Kumar (1997). A multilevel hierarchy of graphs is
@@ -1017,7 +1060,8 @@ static void bisection_children (GtsGNodeSplit * ns, GtsGraphBisection * bg)
 GtsGraphBisection * gts_graph_bisection_new (GtsWGraph * wg,
 					     guint ntry,
 					     guint mmax,
-					     guint nmin)
+					     guint nmin,
+					     gfloat imbalance)
 {
   GtsGraph * g;
   GtsPGraph * pg;
@@ -1042,7 +1086,7 @@ GtsGraphBisection * gts_graph_bisection_new (GtsWGraph * wg,
 	   gts_graph_edges_cut_weight (bg->g1));
   g_assert (gts_graph_bisection_check (bg));
 #endif
-  while ((cost = gts_graph_bisection_bkl_refine (bg, mmax))) {
+  while ((cost = gts_graph_bisection_bkl_refine (bg, mmax, imbalance))) {
 #ifdef DEBUG
     fprintf (stderr, "  cost: %g\n", cost);
     g_assert (gts_graph_bisection_check (bg));
@@ -1063,7 +1107,7 @@ GtsGraphBisection * gts_graph_bisection_new (GtsWGraph * wg,
 	     gts_graph_edges_cut (bg->g1),
 	     gts_graph_edges_cut_weight (bg->g1));	   
 #endif
-    while ((cost = gts_graph_bisection_bkl_refine (bg, mmax))) {
+    while ((cost = gts_graph_bisection_bkl_refine (bg, mmax, imbalance))) {
 #ifdef DEBUG
       fprintf (stderr, "  cost: %g\n", cost);
       g_assert (gts_graph_bisection_check (bg));
@@ -1111,19 +1155,23 @@ static void recursive_bisection (GtsWGraph * wg,
 				 guint ntry,
 				 guint mmax,
 				 guint nmin,
+				 gfloat imbalance,
 				 GSList ** list)
 {
   if (np == 0)
     *list = g_slist_prepend (*list, wg);
   else {
-    GtsGraphBisection * bg = gts_graph_bisection_new (wg, ntry, mmax, nmin);
+    GtsGraphBisection * bg = 
+      gts_graph_bisection_new (wg, ntry, mmax, nmin, imbalance);
     GtsGraph * g1 = bg->g1;
     GtsGraph * g2 = bg->g2;
 
     gts_object_destroy (GTS_OBJECT (wg));
     gts_graph_bisection_destroy (bg, FALSE);
-    recursive_bisection (GTS_WGRAPH (g1), np - 1, ntry, mmax, nmin, list);
-    recursive_bisection (GTS_WGRAPH (g2), np - 1, ntry, mmax, nmin, list);
+    recursive_bisection (GTS_WGRAPH (g1), np - 1, ntry, mmax, nmin, imbalance,
+			 list);
+    recursive_bisection (GTS_WGRAPH (g2), np - 1, ntry, mmax, nmin, imbalance,
+			 list);
   }
 }
 
@@ -1134,6 +1182,8 @@ static void recursive_bisection (GtsWGraph * wg,
  * @ntry: the number of tries for the graph growing algorithm.
  * @mmax: the number of unsucessful moves for the refinement algorithm.
  * @nmin: the minimum number of nodes of the coarsest graph.
+ * @imbalance: the maximum relative imbalance allowed between the
+ * weights of both halves of the partition.
  *
  * Calls gts_graph_bisection_new() recursively in order to obtain a
  * 2^@n partition of @wg.
@@ -1144,7 +1194,8 @@ GSList * gts_graph_recursive_bisection (GtsWGraph * wg,
 					guint n,
 					guint ntry,
 					guint mmax,
-					guint nmin)
+					guint nmin,
+					gfloat imbalance)
 {
   GtsGraphBisection * bg;
   GtsGraph * g1, * g2;
@@ -1153,12 +1204,14 @@ GSList * gts_graph_recursive_bisection (GtsWGraph * wg,
   g_return_val_if_fail (wg != NULL, NULL);
   g_return_val_if_fail (n > 0, NULL);
   
-  bg = gts_graph_bisection_new (wg, ntry, mmax, nmin);
+  bg = gts_graph_bisection_new (wg, ntry, mmax, nmin, imbalance);
   g1 = bg->g1;
   g2 = bg->g2;
   gts_graph_bisection_destroy (bg, FALSE);
-  recursive_bisection (GTS_WGRAPH (g1), n - 1, ntry, mmax, nmin, &list);
-  recursive_bisection (GTS_WGRAPH (g2), n - 1, ntry, mmax, nmin, &list);
+  recursive_bisection (GTS_WGRAPH (g1), n - 1, ntry, mmax, nmin, imbalance, 
+		       &list);
+  recursive_bisection (GTS_WGRAPH (g2), n - 1, ntry, mmax, nmin, imbalance,
+		       &list);
 
   return list;
 }
diff --git a/src/point.c b/src/point.c
index 40bbdfa..86b4238 100644
--- a/src/point.c
+++ b/src/point.c
@@ -25,40 +25,60 @@
 #include "predicates.h"
 #endif /* USE_ROBUST_PREDICATES */
 
-static gint point_read (GtsObject ** o, FILE * fptr)
+static void point_read (GtsObject ** o, GtsFile * f)
 {
   GtsPoint * p = GTS_POINT (*o);
-  GString * buf;
-  gint delim;
-
-  buf = g_string_new ("");
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return EOF;
-  }
-  p->x = atof (buf->str);
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return EOF;
+
+  if (GTS_POINT_CLASS ((*o)->klass)->binary) {
+    if (gts_file_read (f, &(p->x), sizeof (gdouble), 1) != 1) {
+      gts_file_error (f, "expecting a binary number (x coordinate)");
+      return;
+    }
+    if (gts_file_read (f, &(p->y), sizeof (gdouble), 1) != 1) {
+      gts_file_error (f, "expecting a binary number (y coordinate)");
+      return;
+    }
+    if (gts_file_read (f, &(p->z), sizeof (gdouble), 1) != 1) {
+      gts_file_error (f, "expecting a binary number (z coordinate)");
+      return;
+    }
   }
-  p->y = atof (buf->str);
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
-    return EOF;
+  else {
+    if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+      gts_file_error (f, "expecting a number (x coordinate)");
+      return;
+    }
+    p->x = atof (f->token->str);
+    
+    gts_file_next_token (f);
+    if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+      gts_file_error (f, "expecting a number (y coordinate)");
+      return;
+    }
+    p->y = atof (f->token->str);
+    
+    gts_file_next_token (f);
+    if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+      gts_file_error (f, "expecting a number (z coordinate)");
+      return;
+    }
+    p->z = atof (f->token->str);
+    
+    gts_file_next_token (f);
   }
-  p->z = atof (buf->str);
-  g_string_free (buf, TRUE);
-  return delim;
 }
 
 static void point_write (GtsObject * o, FILE * fptr)
 {
   GtsPoint * p = GTS_POINT (o);
 
-  fprintf (fptr, "%.10g %.10g %.10g", p->x, p->y, p->z);
+  if (GTS_POINT_CLASS ((o)->klass)->binary) {
+    fwrite (&(p->x), sizeof (gdouble), 1, fptr);
+    fwrite (&(p->y), sizeof (gdouble), 1, fptr);
+    fwrite (&(p->z), sizeof (gdouble), 1, fptr);
+  }
+  else
+    fprintf (fptr, "%.10g %.10g %.10g", p->x, p->y, p->z);
 }
 
 static void point_class_init (GtsObjectClass * klass)
@@ -713,9 +733,9 @@ void gts_point_transform (GtsPoint * p, GtsMatrix * m)
 {
   gdouble x, y, z;
   g_return_if_fail (p != NULL && m != NULL);
-  x = m[0][0]*p->x + m[0][1]*p->y + m[0][2]*p->z;
-  y = m[1][0]*p->x + m[1][1]*p->y + m[1][2]*p->z;
-  z = m[2][0]*p->x + m[2][1]*p->y + m[2][2]*p->z;
+  x = m[0][0]*p->x + m[0][1]*p->y + m[0][2]*p->z + m[0][3];
+  y = m[1][0]*p->x + m[1][1]*p->y + m[1][2]*p->z + m[1][3];
+  z = m[2][0]*p->x + m[2][1]*p->y + m[2][2]*p->z + m[2][3];
   p->x = x; p->y = y; p->z = z;
 }
 
@@ -756,6 +776,39 @@ gdouble gts_point_orientation (GtsPoint * p1, GtsPoint * p2, GtsPoint * p3)
 #endif /* USE_ROBUST_PREDICATES */
 }
 
+static gboolean ray_intersects_triangle (GtsPoint * D, GtsPoint * E,
+					 GtsTriangle * t)
+{
+  GtsPoint * A, * B, * C;
+  gint ABCE, ABCD, ADCE, ABDE, BCDE;
+
+  gts_triangle_vertices (t, (GtsVertex **) &A, 
+			 (GtsVertex **) &B, 
+			 (GtsVertex **) &C);
+
+  ABCE = gts_point_orientation_3d_sos (A, B, C, E);
+  ABCD = gts_point_orientation_3d_sos (A, B, C, D);
+  if (ABCE < 0 || ABCD > 0) {
+    GtsPoint * tmpp;
+    gint tmp;
+
+    tmpp = E; E = D; D = tmpp;
+    tmp = ABCE; ABCE = ABCD; ABCD = tmp;
+  }
+  if (ABCE < 0 || ABCD > 0)
+    return FALSE;
+  ADCE = gts_point_orientation_3d_sos (A, D, C, E);
+  if (ADCE < 0)
+    return FALSE;
+  ABDE = gts_point_orientation_3d_sos (A, B, D, E);
+  if (ABDE < 0)
+    return FALSE;
+  BCDE = gts_point_orientation_3d_sos (B, C, D, E);
+  if (BCDE < 0)
+    return FALSE;
+  return TRUE;
+}
+
 /** 
  * gts_point_is_inside_surface: 
  * @p: a #GtsPoint.  
@@ -764,33 +817,254 @@ gdouble gts_point_orientation (GtsPoint * p1, GtsPoint * p2, GtsPoint * p3)
  * @is_open: %TRUE if the surface defined by @tree is "open" i.e. its volume 
  * is negative, %FALSE otherwise.
  *
- * Returns: %TRUE if @p is inside or on the boundary of the surface
- * defined by @tree, %FALSE otherwise.  
+ * Returns: %TRUE if @p is inside the surface defined by @tree, %FALSE
+ * otherwise.  
  */
 gboolean gts_point_is_inside_surface (GtsPoint * p, 
 				      GNode * tree,
 				      gboolean is_open)
 {
-  GSList * list, * i, * stabbed = NULL;
-  gboolean inside;
+  GSList * list, * i;
+  guint nc = 0;
+  GtsPoint * p1;
+  GtsBBox * bb;
 
   g_return_val_if_fail (p != NULL, FALSE);
   g_return_val_if_fail (tree != NULL, FALSE);
 
+  bb = tree->data;
+  p1 = gts_point_new (gts_point_class (), bb->x2 + fabs (bb->x2)/10., p->y, p->z);
   i = list = gts_bb_tree_stabbed (tree, p);
   while (i) {
     GtsTriangle * t = GTS_TRIANGLE (GTS_BBOX (i->data)->bounded);
-    GtsObject * o = gts_triangle_is_stabbed (t, p, NULL);
-    
-    if (o && !g_slist_find (stabbed, o))
-      stabbed = g_slist_prepend (stabbed, o);
+
+    if (ray_intersects_triangle (p, p1, t))
+      nc++;
     i = i->next;
   }
   g_slist_free (list);
+  gts_object_destroy (GTS_OBJECT (p1));
+
+  return is_open ? (nc % 2 == 0) : (nc % 2 != 0);
+}
 
-  inside = (g_slist_length (stabbed) % 2 != 0);
-  g_slist_free (stabbed);
+#define SIGN(x) ((x) > 0. ? 1 : -1)
+#define ORIENT1D(a,b) ((a) > (b) ? 1 : (a) < (b) ? -1 : 0)
+
+static gint sortp (gpointer * p, guint n)
+{
+  gint sign = 1;
+  guint i, j;
+
+  for (i = 0; i < n - 1; i++)
+    for (j = 0; j < n - 1 - i; j++)
+      if (GPOINTER_TO_UINT (p[j+1]) < GPOINTER_TO_UINT (p[j])) {
+	gpointer tmp = p[j];
+
+	p[j] = p[j+1];
+	p[j+1] = tmp;
+	sign = - sign;
+      }
+  return sign;
+}
+
+/**
+ * gts_point_orientation_3d_sos:
+ * @p1: a #GtsPoint.
+ * @p2: a #GtsPoint.
+ * @p3: a #GtsPoint.
+ * @p4: a #GtsPoint.
+ *
+ * Checks if @p4 lies above or below the plane passing through the
+ * points @p1, @p2 and @p3. Below is defined so that @p1, @p2 and @p3
+ * appear in counterclockwise order when viewed from above the
+ * plane. This function uses adaptive floating point arithmetic and is
+ * consequently geometrically robust.
+ *
+ * Simulation of Simplicity (SoS) is used to break ties when the
+ * orientation is degenerate (i.e. @p4 lies on the plane defined by
+ * @p1, @p2 and @p3).
+ *
+ * Returns: +1 if @p4 lies below, -1 if @p4 lies above the plane.  
+ */
+gint gts_point_orientation_3d_sos (GtsPoint * p1,
+				   GtsPoint * p2,
+				   GtsPoint * p3,
+				   GtsPoint * p4)
+{
+#ifndef USE_ROBUST_PREDICATES
+  g_assert_not_reached ();
+  return 0;
+#else /* USE_ROBUST_PREDICATES */
+  gdouble o;
 
-  return is_open ? !inside : inside;
+  g_return_val_if_fail (p1 != NULL && p2 != NULL && 
+			p3 != NULL && p4 != NULL, 0);
+
+  o = orient3d ((gdouble *) &p1->x, 
+		(gdouble *) &p2->x, 
+		(gdouble *) &p3->x, 
+		(gdouble *) &p4->x);
+  if (o != 0.)
+    return SIGN (o);
+  else {
+    GtsPoint * p[4];
+    gdouble a[2], b[2], c[2];
+    gint sign;
+
+    p[0] = p1; p[1] = p2; p[2] = p3; p[3] = p4;
+    sign = sortp ((gpointer *) p, 4);
+    
+    /* epsilon^1/8 */
+    a[0] = p[1]->x; a[1] = p[1]->y;
+    b[0] = p[2]->x; b[1] = p[2]->y;
+    c[0] = p[3]->x; c[1] = p[3]->y;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon^1/4 */
+    a[0] = p[1]->x; a[1] = p[1]->z;
+    b[0] = p[2]->x; b[1] = p[2]->z;
+    c[0] = p[3]->x; c[1] = p[3]->z;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return - SIGN (o)*sign;
+    
+    /* epsilon^1/2 */
+    a[0] = p[1]->y; a[1] = p[1]->z;
+    b[0] = p[2]->y; b[1] = p[2]->z;
+    c[0] = p[3]->y; c[1] = p[3]->z;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon */
+    a[0] = p[0]->x; a[1] = p[0]->y;
+    b[0] = p[2]->x; b[1] = p[2]->y;
+    c[0] = p[3]->x; c[1] = p[3]->y;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return - SIGN (o)*sign;
+    
+    /* epsilon^5/4 */
+    o = ORIENT1D (p[2]->x, p[3]->x);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon^3/2 */
+    o = ORIENT1D (p[2]->y, p[3]->y);
+    if (o != 0.)
+      return - SIGN (o)*sign;
+    
+    /* epsilon^2 */
+    a[0] = p[0]->x; a[1] = p[0]->z;
+    b[0] = p[2]->x; b[1] = p[2]->z;
+    c[0] = p[3]->x; c[1] = p[3]->z;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return SIGN (o)*sign;
+
+    /* epsilon^5/2 */
+    o = ORIENT1D (p[2]->z, p[3]->z);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon^4 */
+    a[0] = p[0]->y; a[1] = p[0]->z;
+    b[0] = p[2]->y; b[1] = p[2]->z;
+    c[0] = p[3]->y; c[1] = p[3]->z;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return - SIGN (o)*sign;
+
+    /* epsilon^8 */
+    a[0] = p[0]->x; a[1] = p[0]->y;
+    b[0] = p[1]->x; b[1] = p[1]->y;
+    c[0] = p[3]->x; c[1] = p[3]->y;
+    o = orient2d (a, b, c);
+    if (o != 0.)
+      return SIGN (o)*sign;
+
+    /* epsilon^33/4 */
+    o = ORIENT1D (p[1]->x, p[3]->x);
+    if (o != 0.)
+      return - SIGN (o)*sign;
+    
+    /* epsilon^17/2 */
+    o = ORIENT1D (p[1]->y, p[3]->y);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon^10 */
+    o = ORIENT1D (p[0]->x, p[3]->x);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon^21/2 */
+    return sign;
+  }
+#endif /* USE_ROBUST_PREDICATES */
 }
 
+/**
+ * gts_point_orientation_sos:
+ * @p1: a #GtsPoint.
+ * @p2: a #GtsPoint.
+ * @p3: a #GtsPoint.
+ *
+ * Checks for orientation of the projection of three points on the
+ * (x,y) plane.
+ *
+ * Simulation of Simplicity (SoS) is used to break ties when the
+ * orientation is degenerate (i.e. @p3 lies on the line defined by
+ * @p1 and @p2).
+ *
+ * Returns: a positive value if @p1, @p2 and @p3 appear in
+ * counterclockwise order or a negative value if they appear in
+ * clockwise order.  
+ */
+gint gts_point_orientation_sos (GtsPoint * p1,
+				GtsPoint * p2,
+				GtsPoint * p3)
+{
+#ifndef USE_ROBUST_PREDICATES
+  g_assert_not_reached ();
+  return 0;
+#else /* USE_ROBUST_PREDICATES */
+  gdouble o;
+
+  g_return_val_if_fail (p1 != NULL && p2 != NULL && p3 != NULL, 0);
+
+  o = orient2d ((gdouble *) &p1->x, 
+		(gdouble *) &p2->x, 
+		(gdouble *) &p3->x);
+  if (o != 0.)
+    return SIGN (o);
+  else {
+    GtsPoint * p[3];
+    gint sign;
+
+    p[0] = p1; p[1] = p2; p[2] = p3;
+    sign = sortp ((gpointer *) p, 3);
+    
+    /* epsilon^1/4 */
+    o = ORIENT1D (p[1]->x, p[2]->x);
+    if (o != 0.)
+      return - SIGN (o)*sign;
+    
+    /* epsilon^1/2 */
+    o = ORIENT1D (p[1]->y, p[2]->y);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon */
+    o = ORIENT1D (p[0]->x, p[2]->x);
+    if (o != 0.)
+      return SIGN (o)*sign;
+    
+    /* epsilon^3/2 */
+    return sign;
+  }
+#endif /* USE_ROBUST_PREDICATES */
+}
diff --git a/src/psurface.c b/src/psurface.c
index 75f33df..6db3ae2 100644
--- a/src/psurface.c
+++ b/src/psurface.c
@@ -31,13 +31,13 @@ static void psurface_destroy (GtsObject * object)
   GtsPSurface * ps = GTS_PSURFACE (object);
   guint i;
 
+  if (!GTS_PSURFACE_IS_CLOSED (ps))
+    gts_psurface_close (ps);
+
   for (i = 0; i < ps->split->len; i++)
-    gts_object_destroy (GTS_OBJECT (g_ptr_array_index (ps->split, i)));
+    if (g_ptr_array_index (ps->split, i))
+      gts_object_destroy (GTS_OBJECT (g_ptr_array_index (ps->split, i)));
   g_ptr_array_free (ps->split, TRUE);
-  if (ps->vertices)
-    g_ptr_array_free (ps->vertices, TRUE);
-  if (ps->faces)
-    g_ptr_array_free (ps->faces, TRUE);
 
   (* GTS_OBJECT_CLASS (gts_psurface_class ())->parent_class->destroy) (object);
 }
diff --git a/src/refine.c b/src/refine.c
index 6b6afd3..293eb11 100644
--- a/src/refine.c
+++ b/src/refine.c
@@ -115,12 +115,14 @@ static void make_encroached_fifo (GtsEdge * e, gpointer * datas)
 {
   GtsFifo * fifo = datas[0];
   GtsSurface * s = datas[1];
-  GtsEncroachFunc encroaches = datas[2];
+  GtsEncroachFunc encroaches = (GtsEncroachFunc) datas[2];
   gpointer data = datas[3];
 
   if (GTS_IS_CONSTRAINT (e) && 
-      gts_edge_is_encroached (e, s, encroaches, data))
+      gts_edge_is_encroached (e, s, encroaches, data)) {
     gts_fifo_push (fifo, e);
+    ALREADY_ENCROACHED (e) = fifo;
+  }
 }
 
 #define SQUARE_ROOT_TWO 1.41421356237309504880168872420969807856967187
diff --git a/src/rounding.h b/src/rounding.h
index 32729ca..9dc320d 100644
--- a/src/rounding.h
+++ b/src/rounding.h
@@ -21,12 +21,17 @@
 
 #ifdef HAVE_FPU_CONTROL_H
 #  include <fpu_control.h>
-   static fpu_control_t fpu_round_double =
-     (_FPU_DEFAULT & ~ _FPU_EXTENDED)|_FPU_DOUBLE;
-   static fpu_control_t fpu_init;
-#  define FPU_ROUND_DOUBLE  { _FPU_GETCW(fpu_init);\
-                             _FPU_SETCW(fpu_round_double); }
-#  define FPU_RESTORE       {_FPU_SETCW(fpu_init);}
+#  ifdef _FPU_EXTENDED
+     static fpu_control_t fpu_round_double =
+       (_FPU_DEFAULT & ~ _FPU_EXTENDED)|_FPU_DOUBLE;
+     static fpu_control_t fpu_init;
+#    define FPU_ROUND_DOUBLE  { _FPU_GETCW(fpu_init);\
+                                _FPU_SETCW(fpu_round_double); }
+#    define FPU_RESTORE       {_FPU_SETCW(fpu_init);}
+#  else /* not FPU_EXTENDED */
+#    define FPU_ROUND_DOUBLE
+#    define FPU_RESTORE
+#  endif /* not FPU_EXTENDED */
 #else /* not HAVE_FPU_CONTROL_H */
 #  ifdef __FreeBSD__
 #    include <floatingpoint.h>
@@ -40,13 +45,32 @@
 #        define FPU_ROUND_DOUBLE (fpu_init = _controlfp (0, 0),\
                                  _controlfp (_PC_53, MCW_PC))
 #        define FPU_RESTORE      (_controlfp (fpu_init, 0xfffff))
-#      else /* not _MSC_VER */
-#        error "You need the Microsoft C compiler for the Win32 version"
-#      endif /*  not _MSC_VER */
+#      elif __MINGW32__
+#        include <float.h>
+         static unsigned int fpu_init;
+#        define FPU_ROUND_DOUBLE (fpu_init = _controlfp (0, 0),\
+                                  _controlfp (_PC_53, _MCW_PC))
+#        define FPU_RESTORE      (_controlfp (fpu_init, 0xfffff))
+#      else /* not _MSC_VER or __MINGW32__ */
+#        error "You need MSVC or MinGW for the Win32 version"
+#      endif /*  not _MSC_VER or __MINGW32__ */
 #    else /* not WIN32 */
-#      warning "Unknown CPU: assuming default double precision rounding"
-#      define FPU_ROUND_DOUBLE
-#      define FPU_RESTORE
+#      ifdef __CYGWIN__
+         typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
+         static fpu_control_t fpu_round_double = 0x027f;
+         static fpu_control_t fpu_init;
+#        define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (*&cw))
+#        define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
+#        define FPU_ROUND_DOUBLE  { _FPU_GETCW(fpu_init);\
+                                    _FPU_SETCW(fpu_round_double); }
+#        define FPU_RESTORE       { _FPU_SETCW(fpu_init);}
+#      else /* not __CYGWIN__ */
+#        ifdef CPP_HAS_WARNING
+#          warning "Unknown CPU: assuming default double precision rounding"
+#        endif /* CPP_HAS_WARNING */
+#        define FPU_ROUND_DOUBLE
+#        define FPU_RESTORE
+#      endif /* not __CYGWIN__ */
 #    endif /* not WIN32 */
 #  endif /* not __FreeBSD__ */
 #endif /* not HAVE_FPU_CONTROL_H */
diff --git a/src/split.c b/src/split.c
index 45152bd..c63516c 100644
--- a/src/split.c
+++ b/src/split.c
@@ -18,6 +18,7 @@
  */
 
 #include <stdlib.h>
+#include <string.h>
 #include "gts.h"
 
 #define DYNAMIC_SPLIT
@@ -1284,6 +1285,7 @@ void gts_psurface_write (GtsPSurface * ps, FILE * fptr)
   while (gts_psurface_remove_vertex (ps))
     ;
 
+  GTS_POINT_CLASS (ps->s->vertex_class)->binary = FALSE;
   gts_surface_write (ps->s, fptr);
   
   gts_surface_foreach_vertex (ps->s, (GtsFunc) index_object, &nv);
@@ -1330,15 +1332,15 @@ void gts_psurface_write (GtsPSurface * ps, FILE * fptr)
 
       a = scf->a1;
       while ((t = *(a++)))
-	fprintf (fptr, "%u\n",
+	fprintf (fptr, "%u ",
 		 GPOINTER_TO_UINT (g_hash_table_lookup (hash, t)));
-      fprintf (fptr, "0\n");
+      fprintf (fptr, "\n");
 
       a = scf->a2;
       while ((t = *(a++)))
-	fprintf (fptr, "%u\n",
+	fprintf (fptr, "%u ",
 		 GPOINTER_TO_UINT (g_hash_table_lookup (hash, t)));
-      fprintf (fptr, "0\n");
+      fprintf (fptr, "\n");
 
       g_hash_table_insert (hash, cf, GUINT_TO_POINTER (nf++));
 
@@ -1353,160 +1355,193 @@ void gts_psurface_write (GtsPSurface * ps, FILE * fptr)
   g_hash_table_destroy (hash);
 }
 
-static GtsSurface * surface_read (GtsSurface * surface, 
-				  FILE * fptr, 
-				  guint * line,
-				  GPtrArray * vertices,
-				  GPtrArray * faces)
+static guint surface_read (GtsSurface * surface, 
+			   GtsFile * f,
+			   GPtrArray * vertices,
+			   GPtrArray * faces)
 {
   GtsEdge ** edges;
-  guint n, np, ns, nt, line_number = 1;
-  gboolean syntax_error = FALSE;
-  GString * buf;
-  gint delim;
+  guint n, nv, ne, nf;
 
-  g_return_val_if_fail (surface != NULL, NULL);
-  g_return_val_if_fail (fptr != NULL, NULL);
-
-  buf = g_string_new ("");
+  g_return_val_if_fail (surface != NULL, 1);
+  g_return_val_if_fail (f != NULL, 1);
+  
+  if (f->type != GTS_INT) {
+    gts_file_error (f, "expecting an integer (number of vertices)");
+    return f->line;
+  }
+  nv = atoi (f->token->str);
 
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return NULL;
+  gts_file_next_token (f);
+  if (f->type != GTS_INT) {
+    gts_file_error (f, "expecting an integer (number of edges)");
+    return f->line;
   }
-  np = atoi (buf->str);
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return NULL;
+  ne = atoi (f->token->str);
+
+  gts_file_next_token (f);
+  if (f->type != GTS_INT) {
+    gts_file_error (f, "expecting an integer (number of faces)");
+    return f->line;
   }
-  ns = atoi (buf->str);
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
-    return NULL;
+  nf = atoi (f->token->str);
+
+  gts_file_next_token (f);
+  if (f->type == GTS_STRING) {
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsSurfaceClass)");
+      return f->line;
+    }
+    gts_file_next_token (f);
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsFaceClass)");
+      return f->line;
+    }
+    gts_file_next_token (f);
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsEdgeClass)");
+      return f->line;
+    }
+    gts_file_next_token (f);
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsVertexClass)");
+      return f->line;
+    }
+    if (!strcmp (f->token->str, "GtsVertexBinary"))
+      GTS_POINT_CLASS (surface->vertex_class)->binary = TRUE;
+    else
+      gts_file_first_token_after (f, '\n');
   }
-  nt = atoi (buf->str);
-  if (delim != '\n')
-    gts_get_newline (fptr);
-
-  g_ptr_array_set_size (vertices, np);
-  g_ptr_array_set_size (faces, nt);
-  /* allocate ns + 1 just in case ns == 0 */
-  edges = g_malloc ((ns + 1)*sizeof (GtsEdge *));
+  else
+    gts_file_first_token_after (f, '\n');
+
+  g_ptr_array_set_size (vertices, nv);
+  g_ptr_array_set_size (faces, nf);
+  /* allocate nv + 1 just in case nv == 0 */
+  edges = g_malloc ((ne + 1)*sizeof (GtsEdge *));
   
   n = 0;
-  while (n < np && !syntax_error) {
-    GtsObject * new_vertex = 
+  while (n < nv && f->type != GTS_ERROR) {
+    GtsObject * new_vertex =
       gts_object_new (GTS_OBJECT_CLASS (surface->vertex_class));
 
-    line_number++;
-    delim = (*GTS_OBJECT_CLASS (surface->vertex_class)->read)
-      (&new_vertex, fptr);
-    if (delim == EOF)
-      syntax_error = TRUE;
-    else if (delim != '\n')
-      gts_get_newline (fptr);
-    g_ptr_array_index (vertices, n++) = new_vertex;
+    (* GTS_OBJECT_CLASS (surface->vertex_class)->read) (&new_vertex, f);
+    if (f->type != GTS_ERROR) {
+      if (!GTS_POINT_CLASS (surface->vertex_class)->binary)
+	gts_file_first_token_after (f, '\n');
+      g_ptr_array_index (vertices, n++) = new_vertex;
+    }
+    else
+      gts_object_destroy (new_vertex);
   }
-  if (syntax_error)
-    np = n;
+  if (f->type == GTS_ERROR)
+    nv = n;
+  if (GTS_POINT_CLASS (surface->vertex_class)->binary)
+    gts_file_first_token_after (f, '\n');
 
   n = 0;
-  while (n < ns && !syntax_error) {
+  while (n < ne && f->type != GTS_ERROR) {
     guint p1, p2;
 
-    line_number++;
-    delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-    if (delim == EOF || delim == '\n')
-      syntax_error = TRUE;
+    if (f->type != GTS_INT)
+      gts_file_error (f, "expecting an integer (first vertex index)");
     else {
-      p1 = atoi (buf->str);
-      delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-      if (delim == EOF)
-	syntax_error = TRUE;
+      p1 = atoi (f->token->str);
+      if (p1 == 0 || p1 > nv)
+	gts_file_error (f, "vertex index `%d' is out of range `[1,%d]'", 
+			p1, nv);
       else {
-	p2 = atoi (buf->str);
-	if (p1 == 0 || p2 == 0 || p1 > np || p2 > np)
-	  syntax_error = TRUE;
+	gts_file_next_token (f);
+	if (f->type != GTS_INT)
+	  gts_file_error (f, "expecting an integer (second vertex index)");
 	else {
-	  GtsEdge * new_edge = 
-	    gts_edge_new (surface->edge_class,
-			  g_ptr_array_index (vertices, p1 - 1),
-			  g_ptr_array_index (vertices, p2 - 1));
-	  if (delim != '\n') {
-	    if (GTS_OBJECT_CLASS (surface->edge_class)->read)
-	      delim = (*GTS_OBJECT_CLASS (surface->edge_class)->read)
-		((GtsObject **) &new_edge, fptr);
-	    if (delim != '\n')
-	      gts_get_newline (fptr);
+	  p2 = atoi (f->token->str);
+	  if (p2 == 0 || p2 > nv)
+	    gts_file_error (f, "vertex index `%d' is out of range `[1,%d]'", 
+			    p2, nv);
+	  else {
+	    GtsEdge * new_edge =
+	      gts_edge_new (surface->edge_class,
+			    g_ptr_array_index (vertices, p1 - 1),
+			    g_ptr_array_index (vertices, p2 - 1));
+
+	    gts_file_next_token (f);
+	    if (f->type != '\n')
+	      if (GTS_OBJECT_CLASS (surface->edge_class)->read)
+		(*GTS_OBJECT_CLASS (surface->edge_class)->read)
+		  ((GtsObject **) &new_edge, f);
+	    gts_file_first_token_after (f, '\n');
+	    edges[n++] = new_edge;
 	  }
-	  edges[n++] = new_edge;
 	}
       }
     }
   }
-  if (syntax_error)
-    ns = n;
+  if (f->type == GTS_ERROR)
+    ne = n;
 
   n = 0;
-  while (n < nt && !syntax_error) {
+  while (n < nf && f->type != GTS_ERROR) {
     guint s1, s2, s3;
 
-    line_number++;
-    delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-    if (delim == EOF || delim == '\n')
-      syntax_error = TRUE;
+    if (f->type != GTS_INT)
+      gts_file_error (f, "expecting an integer (first edge index)");
     else {
-      s1 = atoi (buf->str);
-      delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-      if (delim == EOF || delim == '\n')
-	syntax_error = TRUE;
+      s1 = atoi (f->token->str);
+      if (s1 == 0 || s1 > ne)
+	gts_file_error (f, "edge index `%d' is out of range `[1,%d]'", 
+			s1, ne);
       else {
-	s2 = atoi (buf->str);
-	delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-	if (delim == EOF)
-	  syntax_error = TRUE;
+	gts_file_next_token (f);
+	if (f->type != GTS_INT)
+	  gts_file_error (f, "expecting an integer (second edge index)");
 	else {
-	  s3 = atoi (buf->str);
-	  if (s1 == 0 || s2 == 0 || s3 == 0 || s1 > ns || s2 > ns || s3 > ns)
-	    syntax_error = TRUE;
+	  s2 = atoi (f->token->str);
+	  if (s2 == 0 || s2 > ne)
+	    gts_file_error (f, "edge index `%d' is out of range `[1,%d]'", 
+			    s2, ne);
 	  else {
-	    GtsFace * new_face = gts_face_new (surface->face_class,
-					       edges[s1 - 1],
-					       edges[s2 - 1],
-					       edges[s3 - 1]);
-	    if (delim != '\n') {
-	      if (GTS_OBJECT_CLASS (surface->face_class)->read)
-		delim = (*GTS_OBJECT_CLASS (surface->face_class)->read)
-		  ((GtsObject **) &new_face, fptr);
-	      if (delim != '\n')
-		gts_get_newline (fptr);
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT)
+	      gts_file_error (f, "expecting an integer (third edge index)");
+	    else {
+	      s3 = atoi (f->token->str);
+	      if (s3 == 0 || s3 > ne)
+		gts_file_error (f, "edge index `%d' is out of range `[1,%d]'", 
+				s3, ne);
+	      else {
+		GtsFace * new_face = gts_face_new (surface->face_class,
+						   edges[s1 - 1],
+						   edges[s2 - 1],
+						   edges[s3 - 1]);
+
+		gts_file_next_token (f);
+		if (f->type != '\n')
+		  if (GTS_OBJECT_CLASS (surface->face_class)->read)
+		    (*GTS_OBJECT_CLASS (surface->face_class)->read)
+		      ((GtsObject **) &new_face, f);
+		gts_file_first_token_after (f, '\n');
+		gts_surface_add_face (surface, new_face);
+		g_ptr_array_index (faces, n++) = new_face;
+	      }
 	    }
-	    gts_surface_add_face (surface, new_face);
-	    g_ptr_array_index (faces, n++) = new_face;
 	  }
 	}
       }
     }
   }
 
-  if (syntax_error) {
-    while (np)
-      gts_object_destroy (GTS_OBJECT (g_ptr_array_index (vertices, np-- - 1)));
-    while (ns)
-      gts_object_destroy (GTS_OBJECT (edges[ns-- - 1]));
-    gts_object_destroy (GTS_OBJECT (surface));
-    surface = NULL;
-    if (line)
-      *line = line_number;
-  }
-
   g_free (edges);
-  g_string_free (buf, TRUE);
 
-  return surface;
+  if (f->type == GTS_ERROR) {
+    gts_allow_floating_vertices = TRUE;
+    while (nv)
+      gts_object_destroy (GTS_OBJECT (g_ptr_array_index (vertices, nv-- - 1)));
+    gts_allow_floating_vertices = FALSE;    
+    return f->line;
+  }
+
+  return 0;
 }
 
 /**
@@ -1514,11 +1549,9 @@ static GtsSurface * surface_read (GtsSurface * surface,
  * @klass: a #GtsPSurfaceClass.
  * @s: a #GtsSurface.
  * @split_class: a #GtsSplitClass to use for the #GtsSplit.
- * @fptr: a file pointer.
- * @line: %NULL or a pointer to a variable to fill with the line number in case
- * of an error in the file format. 
+ * @f: a #GtsFile.
  *
- * Creates a new #GtsPSurface prepared for input from the file @fptr 
+ * Creates a new #GtsPSurface prepared for input from the file @f 
  * containing a valid GTS representation of a progressive surface. The initial
  * shape of the progressive surface is loaded into @s.
  * 
@@ -1528,22 +1561,19 @@ static GtsSurface * surface_read (GtsSurface * surface,
  * gts_psurface_max_vertex_number() can still be used.
  *
  * Returns: a new #GtsPSurface or %NULL if there was a format error while
- * reading the file, in which case @line is set to the line where
- * the error occured.
+ * reading the file, in which case @f contains information about the error.
  */
 GtsPSurface * gts_psurface_open (GtsPSurfaceClass * klass,
 				 GtsSurface * s,
 				 GtsSplitClass * split_class,
-				 FILE * fptr,
-				 guint * line)
+				 GtsFile * f)
 {
   GtsPSurface * ps;
-  guint ns = 0;
 
   g_return_val_if_fail (klass != NULL, NULL);
   g_return_val_if_fail (s != NULL, NULL);
   g_return_val_if_fail (split_class != NULL, NULL);
-  g_return_val_if_fail (fptr != NULL, NULL);
+  g_return_val_if_fail (f != NULL, NULL);
 
   ps = GTS_PSURFACE (gts_object_new (GTS_OBJECT_CLASS (klass)));
   ps->s = s;
@@ -1552,14 +1582,23 @@ GtsPSurface * gts_psurface_open (GtsPSurfaceClass * klass,
   ps->vertices = g_ptr_array_new ();
   ps->faces = g_ptr_array_new ();
 
-  if (surface_read (s, fptr, line, ps->vertices, ps->faces) == NULL)
-    return ps;
+  if (surface_read (s, f, ps->vertices, ps->faces)) {
+    ps->s = NULL;
+    gts_object_destroy (GTS_OBJECT (ps));
+    return NULL;
+  }
 
   ps->min = gts_surface_vertex_number (ps->s);
   ps->pos = 0;
 
-  if (fscanf (fptr, "%u", &ns) == 1)
-    g_ptr_array_set_size (ps->split, ns);
+  if (f->type == GTS_INT) {
+    gint ns = atoi (f->token->str);
+    
+    if (ns > 0) {
+      g_ptr_array_set_size (ps->split, ns);
+      gts_file_first_token_after (f, '\n');
+    }
+  }
 
   return ps;
 }
@@ -1567,46 +1606,47 @@ GtsPSurface * gts_psurface_open (GtsPSurfaceClass * klass,
 /**
  * gts_psurface_read_vertex:
  * @ps: a #GtsPSurface prealably created with gts_psurface_open().
- * @fptr: a file pointer.
+ * @fp: a #GtsFile.
+ *
+ * Reads in one vertex split operation from @fp and performs the expansion.
  *
- * Reads in one vertex split operation from @fptr and performs the expansion.
+ * If an error occurs while reading the file, the @error field of @fp is set.
  *
  * Returns: the newly created #GtsSplit or %NULL if no vertex split could be
- * read from @fptr.
+ * read from @fp.
  */
-GtsSplit * gts_psurface_read_vertex (GtsPSurface * ps, FILE * fptr)
+GtsSplit * gts_psurface_read_vertex (GtsPSurface * ps, GtsFile * fp)
 {
   guint nv, ncf;
   GtsSplit * vs, * parent;
   GtsSplitCFace * scf;
-  gboolean ok = TRUE;
-  gint delim;
-  GString * buf;
 
   g_return_val_if_fail (ps != NULL, NULL);
-  g_return_val_if_fail (fptr != NULL, NULL);
+  g_return_val_if_fail (fp != NULL, NULL);
   g_return_val_if_fail (!GTS_PSURFACE_IS_CLOSED (ps), NULL);
   
   if (ps->pos >= ps->split->len)
     return NULL;
 
-  buf = g_string_new ("");
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
+  if (fp->type == GTS_NONE)
+    return NULL;
+  if (fp->type != GTS_INT) {
+    gts_file_error (fp, "expecting an integer (vertex index)");
     return NULL;
   }
-  nv = atoi (buf->str);
+  nv = atoi (fp->token->str);
   if (nv == 0 || nv > ps->vertices->len) {
-    g_string_free (buf, TRUE);
+    gts_file_error (fp, "vertex index `%d' is out of range `[1,%d]'",
+		    nv, ps->vertices->len);
     return NULL;
   }
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
+
+  gts_file_next_token (fp);
+  if (fp->type != GTS_INT) {
+    gts_file_error (fp, "expecting an integer (ncf)");
     return NULL;
   }
-  ncf = atoi (buf->str);
+  ncf = atoi (fp->token->str);
   
   vs = GTS_SPLIT (gts_object_new (GTS_OBJECT_CLASS (ps->split_class)));
 
@@ -1615,107 +1655,127 @@ GtsSplit * gts_psurface_read_vertex (GtsPSurface * ps, FILE * fptr)
   vs->cfaces = NULL;
   vs->ncf = 0;
 
-  if (delim != '\n') {
+  gts_file_next_token (fp);
+  if (fp->type != '\n')
     if (GTS_OBJECT (vs)->klass->read)
-      delim = (*GTS_OBJECT (vs)->klass->read) ((GtsObject **) &vs, fptr);
-    if (delim != '\n')
-      gts_get_newline (fptr);
-  }
-  
-  vs->v1 = gts_object_new (GTS_OBJECT_CLASS (ps->s->vertex_class));
-
-  delim = (*GTS_OBJECT_CLASS (ps->s->vertex_class)->read) 
-    (&(vs->v1), fptr);
-  if (delim == EOF)
-    ok = FALSE;
-  else {
-    vs->v1->reserved = vs;
-    g_ptr_array_add (ps->vertices, vs->v1);
+      (* GTS_OBJECT (vs)->klass->read) ((GtsObject **) &vs, fp);
+  gts_file_first_token_after (fp, '\n');
 
-    if (delim != '\n') 
-      gts_get_newline (fptr);
-
-    vs->v2 = gts_object_new (GTS_OBJECT_CLASS (ps->s->vertex_class));
-
-    delim = (*GTS_OBJECT_CLASS (ps->s->vertex_class)->read) 
-      (&(vs->v2), fptr);
-    if (delim == EOF)
-      ok = FALSE;
-    else {
-      vs->v2->reserved = vs;
-      g_ptr_array_add (ps->vertices, vs->v2);
+  if (fp->type != GTS_ERROR) {
+    vs->v1 = gts_object_new (GTS_OBJECT_CLASS (ps->s->vertex_class));
+    (* GTS_OBJECT_CLASS (ps->s->vertex_class)->read) (&(vs->v1), fp);
+    if (fp->type != GTS_ERROR) {
+      vs->v1->reserved = vs;
+      g_ptr_array_add (ps->vertices, vs->v1);
 
-      if (delim != '\n')
-	gts_get_newline (fptr);
+      gts_file_first_token_after (fp, '\n');
+      
+      vs->v2 = gts_object_new (GTS_OBJECT_CLASS (ps->s->vertex_class));
+      (*GTS_OBJECT_CLASS (ps->s->vertex_class)->read) (&(vs->v2), fp);
+      if (fp->type != GTS_ERROR) {
+	vs->v2->reserved = vs;
+	g_ptr_array_add (ps->vertices, vs->v2);
+	gts_file_first_token_after (fp, '\n');
+      }
     }
   }
-  if (ok) {
+
+  if (fp->type != GTS_ERROR) {
     scf = vs->cfaces = g_malloc (sizeof (GtsSplitCFace)*ncf);
-    while (ok && ncf--) {
+    while (fp->type != GTS_ERROR && ncf--) {
       guint it, flags;
       GtsFace * f;
       CFace * cf;
       GPtrArray * a;
 
-      delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-      if (delim == EOF || delim == '\n')
-	ok = FALSE;
+      if (fp->type != GTS_INT)
+	gts_file_error (fp, "expecting an integer (face index)");
       else {
-	it = atoi (buf->str);
-	delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-	if (delim == EOF || it == 0 || it > ps->faces->len)
-	  ok = FALSE;
+	it = atoi (fp->token->str);
+	if (it == 0 || it > ps->faces->len)
+	  gts_file_error (fp, "face index `%d' is out of range `[1,%d]'",
+			  it, ps->faces->len);
 	else {
-	  flags = atoi (buf->str);
-	  f = GTS_FACE (gts_object_new (GTS_OBJECT_CLASS (ps->s->face_class)));
-	  
-	  if (delim != '\n') {
-	    if (GTS_OBJECT (f)->klass->read)
-	      delim = (*GTS_OBJECT (f)->klass->read) 
-		((GtsObject **) &f, fptr);
-	    if (delim != '\n')
-	      gts_get_newline (fptr);
-	  }
-	  scf->f = f;
-
-	  cf = (CFace *) f;
-	  GTS_OBJECT (cf)->klass = GTS_OBJECT_CLASS (cface_class ());
-	  cf->parent_split = vs;
-	  cf->t = g_ptr_array_index (ps->faces, it - 1);
-	  cf->flags = flags;
-	  
-	  a = g_ptr_array_new ();
-	  while (ok && fscanf (fptr, "%u", &it) == 1 && it > 0) {
-	    if (it > ps->faces->len)
-	      ok = FALSE;
-	    else
-	      g_ptr_array_add (a, g_ptr_array_index (ps->faces, it - 1));
-	  }
-	  g_ptr_array_add (a, NULL);
-	  scf->a1 = (GtsTriangle **) a->pdata;
-	  g_ptr_array_free (a, FALSE);
+	  gts_file_next_token (fp);
+	  if (fp->type != GTS_INT)
+	    gts_file_error (fp, "expecting an integer (flags)");
+	  else {
+	    flags = atoi (fp->token->str);
+	    f = 
+	      GTS_FACE (gts_object_new (GTS_OBJECT_CLASS (ps->s->face_class)));
+
+	    gts_file_next_token (fp);
+	    if (fp->type != '\n')
+	      if (GTS_OBJECT (f)->klass->read)
+		(*GTS_OBJECT (f)->klass->read) ((GtsObject **) &f, fp);
+	    gts_file_first_token_after (fp, '\n');
+	    if (fp->type != GTS_ERROR) {
+	      scf->f = f;
+
+	      cf = (CFace *) f;
+	      GTS_OBJECT (cf)->klass = GTS_OBJECT_CLASS (cface_class ());
+	      cf->parent_split = vs;
+	      cf->t = g_ptr_array_index (ps->faces, it - 1);
+	      cf->flags = flags;
 	  
-	  a = g_ptr_array_new ();
-	  while (ok && fscanf (fptr, "%u", &it) == 1 && it > 0) {
-	    if (it > ps->faces->len)
-	      ok = FALSE;
-	    else
-	      g_ptr_array_add (a, g_ptr_array_index (ps->faces, it - 1));
+	      a = g_ptr_array_new ();
+	      do {
+		if (fp->type != GTS_INT)
+		  gts_file_error (fp, "expecting an integer (face index)");
+		else {
+		  it = atoi (fp->token->str);
+		  if (it > ps->faces->len)
+		    gts_file_error (fp, 
+				    "face index `%d' is out of range `[1,%d]'",
+				    it, ps->faces->len);
+		  else {
+		    g_ptr_array_add (a, g_ptr_array_index (ps->faces, 
+							   it - 1));
+		    gts_file_next_token (fp);
+		  }
+		}
+	      } while (fp->type != GTS_ERROR && fp->type != '\n');
+	      gts_file_first_token_after (fp, '\n');
+	      g_ptr_array_add (a, NULL);
+	      scf->a1 = (GtsTriangle **) a->pdata;
+	      g_ptr_array_free (a, FALSE);
+
+	      if (fp->type != GTS_ERROR) {
+		a = g_ptr_array_new ();
+		do {
+		  if (fp->type != GTS_INT)
+		    gts_file_error (fp, "expecting an integer (face index)");
+		  else {
+		    it = atoi (fp->token->str);
+		    if (it > ps->faces->len)
+		      gts_file_error (fp, 
+				   "face index `%d' is out of range `[1,%d]'",
+				      it, ps->faces->len);
+		    else {
+		      g_ptr_array_add (a, g_ptr_array_index (ps->faces, 
+							     it - 1));
+		      gts_file_next_token (fp);
+		    }
+		  }
+		} while (fp->type != GTS_ERROR && fp->type != '\n');
+		gts_file_first_token_after (fp, '\n');
+		g_ptr_array_add (a, NULL);
+		scf->a2 = (GtsTriangle **) a->pdata;
+		g_ptr_array_free (a, FALSE);
+		
+		g_ptr_array_add (ps->faces, f);
+	      
+		vs->ncf++;
+		scf++;
+	      }
+	    }
 	  }
-	  g_ptr_array_add (a, NULL);
-	  scf->a2 = (GtsTriangle **) a->pdata;
-	  g_ptr_array_free (a, FALSE);
-	  
-	  g_ptr_array_add (ps->faces, f);
-	  
-	  vs->ncf++;
-	  scf++;
 	}
       }
     }
   }
 
-  if (ok) {
+  if (fp->type != GTS_ERROR) {
     if ((parent = GTS_OBJECT (vs->v)->reserved)) {
       GTS_OBJECT (vs->v)->reserved = NULL;
       if (parent->v1 == GTS_OBJECT (vs->v))
@@ -1727,8 +1787,6 @@ GtsSplit * gts_psurface_read_vertex (GtsPSurface * ps, FILE * fptr)
     }
     g_ptr_array_index (ps->split, ps->pos++) = vs;
     gts_split_expand (vs, ps->s, ps->s->edge_class);
-    
-    g_string_free (buf, TRUE);
 
     return vs;
   }
@@ -1737,7 +1795,6 @@ GtsSplit * gts_psurface_read_vertex (GtsPSurface * ps, FILE * fptr)
   if (vs->v2) gts_object_destroy (vs->v2);
   gts_object_destroy (GTS_OBJECT (vs));
   
-  g_string_free (buf, TRUE);
   return NULL;
 }
 
diff --git a/src/stripe.c b/src/stripe.c
index 52bf535..7e98a9c 100644
--- a/src/stripe.c
+++ b/src/stripe.c
@@ -1,5 +1,5 @@
 /* GTS - Library for the manipulation of triangulated surfaces
- * Copyright (C) 1999 St�phane Popinet
+ * Copyright (C) 1999-2003  Wagner Toledo Correa, St�phane Popinet
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -19,100 +19,690 @@
 
 #include "gts.h"
 
+#define PRINT_HEAP_ELEMENTS 0
 
-#define HEAP_INSERT_TRIANGLE(h, t) (GTS_OBJECT (t)->reserved =\
-                                    gts_eheap_insert (h, t))
+typedef struct {
+  GtsTriangle * t;
+  gboolean used;
+  GSList * neighbors;
+  GtsEHeapPair *pos;
+} tri_data_t;
+
+typedef struct {
+  GHashTable * ht;
+} map_t;
+
+typedef struct {
+  map_t * map;
+  GtsEHeap * heap;
+} heap_t;
+
+static tri_data_t    * tri_data_new (GtsTriangle * t);
+static void            tri_data_destroy (tri_data_t * td);
+static guint           tri_data_num_unused_neighbors2 (const tri_data_t * td,
+						       const map_t * map);
+static GHashTable    * tri_data_unused_neighbors2 (const tri_data_t * td,
+						   const map_t * map);
+
+static map_t         * map_new (GtsSurface * s);
+static void            map_destroy (map_t * map);
+static tri_data_t    * map_lookup (const map_t * map, GtsTriangle * t);
 
-static gdouble triangle_neighbors (GtsTriangle * t, GtsSurface * s)
+
+static heap_t        * heap_new (GtsSurface * s);
+static void            heap_destroy (heap_t * heap);
+static gboolean        heap_is_empty (const heap_t * heap);
+static GtsTriangle   * heap_top (const heap_t * heap);
+static void            heap_remove (heap_t * heap, GtsTriangle * t);
+
+/* helper functions */
+
+static gboolean vertices_are_unique (GtsVertex * v1,
+				     GtsVertex * v2,
+				     GtsVertex * v3)
 {
-  return gts_face_neighbor_number (GTS_FACE (t), s);
+  g_assert (v1 && v2 && v3);
+  return (v1 != v2 && v1 != v3 && v2 != v3);
 }
 
-static void create_triangle_heap (GtsTriangle * t, GtsEHeap * heap)
+static gboolean vertex_is_one_of (GtsVertex * v,
+				  GtsVertex * v1,
+				  GtsVertex * v2,
+				  GtsVertex * v3)
 {
-  HEAP_INSERT_TRIANGLE (heap, t);
+  g_assert (v && v1 && v2 && v3);
+  return v == v1 || v == v2 || v == v3;
 }
 
-static GSList * triangle_neighbors_data (GtsTriangle * t)
+static guint num_shared_vertices (GtsVertex * u1,
+				  GtsVertex * u2,
+				  GtsVertex * u3,
+				  GtsVertex * v1,
+				  GtsVertex * v2,
+				  GtsVertex * v3)
 {
-  GSList * i, * list = NULL;
-  GtsEdge * ee[4], ** e1 = ee;
+  guint n = 0;
+  
+  g_assert (u1 && u2 && u3);
+  g_assert (v1 && v2 && v3);
+  g_assert (vertices_are_unique (u1, u2, u3));
+  g_assert (vertices_are_unique (v1, v2, v3));
+  
+  if (vertex_is_one_of (v1, u1, u2, u3))
+    n++;
+  if (vertex_is_one_of (v2, u1, u2, u3))
+    n++;
+  if (vertex_is_one_of (v3, u1, u2, u3))
+    n++;
+  return n;
+}
 
-  g_return_val_if_fail (t != NULL, NULL);
+static gboolean vertices_match (GtsVertex * v1,
+				GtsVertex * v2,
+				GtsVertex * v3,
+				GtsVertex ** v4,
+				GtsVertex ** v5,
+				GtsVertex ** v6)
+{
+  guint i;
 
-  ee[0] = t->e1; ee[1] = t->e2; ee[2] = t->e3; ee[3] = NULL;
-  while (*e1) {
-    i = (*e1++)->triangles;
-    while (i) {
-      GtsTriangle * t1 = i->data;
-      if (t1 != t && GTS_OBJECT (t1)->reserved)
-	list = g_slist_prepend (list, t1);
-      i = i->next;
+  g_assert (v4 && v5 && v6);
+  g_assert (*v4 && *v5 && *v6);
+  g_assert (vertices_are_unique (*v4, *v5, *v6));
+  
+  for (i = 0; i < 2; i++) {
+    if ((!v1 || (v1 == *v4)) &&
+	(!v2 || (v2 == *v5)) &&
+	(!v3 || (v3 == *v6)))
+      return TRUE;
+    else {
+      GtsVertex * v7 = * v4;
+
+      *v4 = *v5;
+      *v5 = *v6;
+      *v6 = v7;
     }
   }
-  return list;  
+  return ((!v1 || (v1 == *v4)) &&
+	  (!v2 || (v2 == *v5)) &&
+	  (!v3 || (v3 == *v6)));
+}
+
+static GtsVertex * non_shared_vertex1 (GtsVertex * u1,
+				       GtsVertex * u2,
+				       GtsVertex * u3,
+				       GtsVertex * v1,
+				       GtsVertex * v2,
+				       GtsVertex * v3)
+{
+  GtsVertex * u = NULL;
+
+  g_assert (u1 && u2 && u3);
+  g_assert (v1 && v2 && v3);
+  g_assert (vertices_are_unique (u1, u2, u3));
+  g_assert (vertices_are_unique (v1, v2, v3));
+  g_assert (num_shared_vertices (u1, u2, u3, v1, v2, v3) == 2);
+
+  if (!vertex_is_one_of (u1, v1, v2, v3)) {
+    g_assert (vertex_is_one_of (u2, v1, v2, v3));
+    g_assert (vertex_is_one_of (u3, v1, v2, v3));
+    u = u1;
+  } else if (!vertex_is_one_of (u2, v1, v2, v3)) {
+    g_assert (vertex_is_one_of (u1, v1, v2, v3));
+    g_assert (vertex_is_one_of (u3, v1, v2, v3));
+    u = u2;
+  } else if (!vertex_is_one_of (u3, v1, v2, v3)) {
+    g_assert (vertex_is_one_of (u1, v1, v2, v3));
+    g_assert (vertex_is_one_of (u2, v1, v2, v3));
+    u = u3;
+  } else 
+    g_assert_not_reached ();
+
+  return u;
+}
+
+static void match_vertex (GtsVertex * v,
+			  GtsVertex ** v1,
+			  GtsVertex ** v2,
+			  GtsVertex ** v3)
+{
+  g_assert (v && v1 && v2 && v3);
+  g_assert (*v1 && *v2 && *v3);
+  g_assert (vertex_is_one_of (v, *v1, *v2, *v3));
+  while (*v1 != v) {
+    GtsVertex *v0 = *v1;
+
+    *v1 = *v2;
+    *v2 = *v3;
+    *v3 = v0;
+  }
 }
 
-static GtsTriangle * most_isolated_neighbor (GtsTriangle * t,
-					     GtsEHeap * heap)
+/* tri_data_t functions */
+
+static tri_data_t * tri_data_new (GtsTriangle * t)
 {
-  GSList * neighbors = triangle_neighbors_data (t);
-  GSList * same_key = NULL; /* neighbors of t with the same key */
-  GSList * i;
-  GtsTriangle * tmost = NULL;
-  gdouble keymin = G_MAXDOUBLE;
+  tri_data_t * td;
   
-  i = neighbors;
-  while (i) {
-    GtsTriangle * t1 = i->data;
-    GtsEHeapPair * p = GTS_OBJECT (t1)->reserved;
-    gdouble key = p->key;
-    /* find keymin */
-    if (key < keymin) {
-      keymin = key;
-      g_slist_free (same_key);
-      same_key = g_slist_prepend (NULL, t1);
+  td = g_malloc (sizeof (tri_data_t));
+  td->t = t;
+  td->used = FALSE;
+  td->neighbors = gts_triangle_neighbors (t);
+  td->pos = NULL;
+
+  return td;
+}
+
+static void tri_data_destroy (tri_data_t * td)
+{
+  if (!td)
+    return;
+  g_slist_free (td->neighbors);
+  g_free (td);
+}
+
+static guint tri_data_num_unused_neighbors2 (const tri_data_t * td,
+					     const map_t * map)
+{
+  GHashTable *h;
+  guint n;
+
+  g_assert (td);
+  g_assert (map);
+  h = tri_data_unused_neighbors2 (td, map);
+  n = g_hash_table_size (h);
+  g_hash_table_destroy (h);
+  return n;
+}
+
+static void copy_key_to_array (gpointer key,
+			       gpointer value,
+			       gpointer user_data)
+{
+  GtsTriangle * t = key;
+  GtsTriangle *** p = user_data;
+
+  (void) value;
+  g_assert (t);
+  g_assert (p && *p);
+  **p = t;
+  (*p)++;
+}
+
+static gboolean are_neighbors_unique (GHashTable *h)
+{
+  GtsTriangle ** a;
+  GtsTriangle ** p;
+  gint i, j, n;		/* guint won't work if n == 0 */
+
+  g_assert (h);
+  n = g_hash_table_size (h);
+#ifdef DEBUG
+  if (n > 9)
+    g_warning ("triangle has %d 2-level neighbors", n);
+#endif /* DEBUG */
+  a = g_malloc(n*sizeof (GtsTriangle *));
+  p = a;
+  g_hash_table_foreach (h, copy_key_to_array, &p);
+  for (i = 0; i < n - 1; i++) {
+    g_assert (a[i]);
+    for (j = i + 1; j < n; j++) {
+      g_assert (a[j]);
+      if (a[i] == a[j]) {
+	g_free (a);
+	return FALSE;
+      }
+    }
+  }
+  g_free (a);
+  return TRUE;
+}
+
+static GHashTable * tri_data_unused_neighbors2 (const tri_data_t * td,
+						const map_t * map)
+{
+  GHashTable * h = g_hash_table_new (NULL, NULL);
+  GSList * li;
+
+  g_assert (td);
+  g_assert (map);
+  for (li = td->neighbors; li != NULL; li = li->next) {
+    GtsTriangle * t2 = li->data;
+    tri_data_t * td2 = map_lookup (map, t2);
+    GSList * lj;
+
+    g_assert (td2);
+    if (!td2->used) {
+      g_hash_table_insert (h, t2, td2);
+      for (lj = td2->neighbors; lj != NULL; lj = lj->next) {
+	GtsTriangle * t3 = lj->data;
+	tri_data_t * td3 = map_lookup (map, t3);
+
+	g_assert (td3);
+	if (td3 != td && !td3->used)
+	  g_hash_table_insert (h, t3, td3);
+      }
     }
-    else if (key == keymin)
-      same_key = g_slist_prepend (same_key, t1);
-    /* decrease key */
-    g_assert (key > 0.);
-    gts_eheap_decrease_key (heap, p, key - 1.);
-    i = i->next;
   }
-  g_slist_free (neighbors);
+  g_assert (are_neighbors_unique (h));
+  return h;
+}
+
+#if PRINT_HEAP_ELEMENTS
+static void tri_data_print (const tri_data_t * td, FILE * fp)
+{
+  g_assert (td);
+  g_assert (fp);
+  fprintf(fp, "td=%p t=%p used=%d pos=%p key=%f\n",
+	  td, td->t, td->used, td->pos,
+	  td->pos ? td->pos->key : -1.0);
+}
+#endif /* PRINT_HEAP_ELEMENTS */
+
+/* heap_t functions */
+
+static gdouble triangle_priority (gpointer item, gpointer data)
+{
+  GtsTriangle * t = item;
+  map_t * map = data;
+  tri_data_t * td;
+  gdouble k;
+  
+  g_assert (t);
+  g_assert (map);
+  td = map_lookup (map, t);
+  g_assert (td);
+  k = tri_data_num_unused_neighbors2 (td, map);
+  return k;
+}
+
+#if PRINT_HEAP_ELEMENTS
+static void print_heap_element (gpointer data, gpointer user_data)
+{
+  GtsTriangle * t = data;
+  map_t * map = user_data;
+  tri_data_t * td;
+  
+  g_assert (t);
+  g_assert (map);
+  td = map_lookup (map, t);
+  g_assert (td);
+  g_assert (!td->used);
+  g_assert (td->pos);
+  tri_data_print (td, stderr);
+}
+#endif /* PRINT_HEAP_ELEMENTS */
+
+static void insert_entry_into_heap (gpointer key,
+				    gpointer value,
+				    gpointer user_data)
+{
+  GtsTriangle * t = key;
+  tri_data_t * td = value;
+  GtsEHeap * heap = user_data;
+  
+  g_assert (!td->pos);
+  td->pos = gts_eheap_insert (heap, t);
+  g_assert (td->pos);
+}
+
+static heap_t * heap_new (GtsSurface *s)
+{
+  heap_t * heap;
+
+  g_assert (s);
+  heap = g_malloc (sizeof (heap_t));
+  heap->map = map_new (s);
+  heap->heap = gts_eheap_new (triangle_priority, heap->map);
+  g_hash_table_foreach (heap->map->ht,
+			insert_entry_into_heap,
+			heap->heap);
+#if PRINT_HEAP_ELEMENTS
+  gts_eheap_foreach (heap->heap, print_heap_element, heap->map);
+#endif /* PRINT_HEAP_ELEMENTS */
+  return heap;
+}
+
+static void heap_destroy (heap_t * heap)
+{
+  if (!heap)
+    return;
+  map_destroy (heap->map);
+  gts_eheap_destroy (heap->heap);
+  g_free (heap);
+}
+
+static gboolean heap_is_empty (const heap_t * heap)
+{
+  g_assert (heap);
+  g_assert (heap->heap);
+  return gts_eheap_size (heap->heap) == 0;
+}
+
+typedef struct {
+  const heap_t * heap;
+  double min_key;
+} min_key_t;
+
+static GtsTriangle * heap_top (const heap_t * heap)
+{
+  GtsTriangle * t;
+  
+  g_assert (heap);
+  g_assert (heap->heap);
+  t = gts_eheap_top (heap->heap, NULL);
+  return t;
+}
+
+static void decrease_key (gpointer key, gpointer value, gpointer user_data)
+{
+  GtsTriangle * t = key;
+  tri_data_t * td = value;
+  heap_t *heap = user_data;
+  gdouble k;
+  
+  (void) t;
+  g_assert (heap);
+  g_assert (heap->map);
+  g_assert (heap->heap);
+  g_assert (td);
+  g_assert (!td->used);
+  g_assert (td->pos);
+  
+  k = tri_data_num_unused_neighbors2 (td, heap->map);
+  g_assert (k <= td->pos->key);
+#ifdef DEBUG
+  if (k == td->pos->key)
+    g_warning ("same key: %f\n", k);
+#endif /* DEBUG */
+  if (k != td->pos->key) {
+    g_assert (k < td->pos->key);
+    g_assert (k >= 0.0);
+    gts_eheap_decrease_key (heap->heap, td->pos, k);
+  }
+}
+
+static void heap_remove (heap_t * heap, GtsTriangle * t)
+{
+  tri_data_t * td;
+  GHashTable * h;
+  
+  g_assert (heap);
+  g_assert (t);
+  td = map_lookup (heap->map, t);
+  g_assert (td);
+  g_assert (!td->used);
+  g_assert (td->pos);
+  td->used = TRUE;
+  gts_eheap_remove (heap->heap, td->pos);
+  td->pos = NULL;
   
-  if (same_key == NULL) /* no neighbors */
-    return NULL;
-  if (same_key->next == NULL) { /* only one neighbor with minimum key */
-    tmost = same_key->data;
-    g_slist_free (same_key);
-    return tmost;
+  /*	fprintf(stderr, "td: %p\n", td); */
+  h = tri_data_unused_neighbors2 (td, heap->map);
+  g_hash_table_foreach (h, decrease_key, heap);
+  g_hash_table_destroy (h);
+}
+
+/* map_t functions */
+
+static gint create_map_entry (gpointer item, gpointer data)
+{
+  GtsTriangle * t = item;
+  GHashTable * ht = data;
+  tri_data_t * td;
+
+  g_assert (t);
+  g_assert (ht);
+  td = tri_data_new (t);
+  g_hash_table_insert (ht, t, td);
+  return 0;
+}
+
+static void free_map_entry (gpointer key, gpointer value, gpointer user_data)
+{
+  GtsTriangle * t = key;
+  tri_data_t * td = value;
+
+  (void) user_data;
+  g_assert (t);
+  g_assert (td);
+  g_assert (td->t == t);
+  tri_data_destroy (td);
+}
+
+static map_t * map_new (GtsSurface * s)
+{
+  map_t * map;
+
+  map = g_malloc (sizeof (map_t));
+  map->ht = g_hash_table_new (NULL, NULL);
+  gts_surface_foreach_face (s, create_map_entry, map->ht);
+  return map;
+}
+
+static void map_destroy (map_t * map)
+{
+  if (!map)
+    return;
+  g_hash_table_foreach (map->ht, free_map_entry, NULL);
+  g_hash_table_destroy (map->ht);
+  g_free (map);
+}
+
+static tri_data_t * map_lookup (const map_t * map, GtsTriangle * t)
+{
+  tri_data_t * td;
+
+  g_assert (map);
+  g_assert (map->ht);
+  g_assert (t);
+  td = g_hash_table_lookup (map->ht, t);
+  g_assert (td);
+  g_assert (td->t == t);
+  return td;
+}
+
+/* other helper functions */
+
+static GtsTriangle * find_min_neighbor (heap_t * heap, GtsTriangle * t)
+{
+  GtsTriangle * min_neighbor = NULL;
+  gdouble min_key = G_MAXDOUBLE;
+  tri_data_t * td;
+  GSList * li;
+
+  g_assert (heap);
+  g_assert (t);
+
+  td = map_lookup (heap->map, t);
+  for (li = td->neighbors; li != NULL; li = li->next) {
+    GtsTriangle * t2 = li->data;
+    tri_data_t * td2 = map_lookup (heap->map, t2);
+    gdouble k;
+    
+    g_assert (td2);
+    if (td2->used)
+      continue;
+    g_assert (td2->pos);
+    k = td2->pos->key;
+    if (k < min_key) {
+      min_key = k;
+      min_neighbor = t2;
+    }
   }
+  return min_neighbor;
+}
 
-  /* several neighbors have the same minimum key */
-  tmost = same_key->data;
-  keymin = G_MAXDOUBLE;
-  i = same_key;
-  while (i) {
-    GtsTriangle * t1 = i->data;
-    GSList * j;
-    j = neighbors = triangle_neighbors_data (t1);
-    while (j) {
-      GtsTriangle * t2 = j->data;
-      gdouble key = ((GtsEHeapPair *) GTS_OBJECT (t2)->reserved)->key;
-      if (key < keymin) {
-	keymin = key;
-	tmost = t1;
-      }
-      j = j->next;
+static GtsTriangle * find_neighbor_forward (heap_t * heap,
+					    GtsTriangle * t,
+					    GtsVertex ** v1,
+					    GtsVertex ** v2,
+					    GtsVertex ** v3,
+					    gboolean left_turn)
+{
+  GtsTriangle * neighbor = NULL;
+  tri_data_t * td;
+  GSList * li;
+
+  g_assert (heap);
+  g_assert (t);
+  g_assert (v1 && v2 && v3);
+  g_assert (vertices_are_unique (*v1, *v2, *v3));
+  
+  td = map_lookup (heap->map, t);
+  g_assert (td);
+  for (li = td->neighbors; li && !neighbor; li = li->next) {
+    GtsTriangle * t2 = li->data;
+    tri_data_t * td2 = map_lookup (heap->map, t2);
+    GtsVertex * v4, * v5, * v6;
+    
+    g_assert (td2);
+    if (t2 == t || td2->used)
+      continue;
+    gts_triangle_vertices (t2, &v4, &v5, &v6);
+    if (left_turn) {
+      if (!vertices_match (*v1, *v3, NULL, &v4, &v5, &v6))
+	continue;
+    } else {
+      if (!vertices_match (*v3, *v2, NULL, &v4, &v5, &v6))
+	continue;
     }
-    g_slist_free (neighbors);
-    i = i->next;
+    neighbor = t2;
+    *v1 = v4;
+    *v2 = v5;
+    *v3 = v6;
   }
-  g_slist_free (same_key);
+  return neighbor;
+}
+
+static GtsTriangle * find_neighbor_backward (heap_t * heap,
+					     GtsTriangle * t,
+					     GtsVertex ** v1,
+					     GtsVertex ** v2,
+					     GtsVertex ** v3,
+					     gboolean left_turn)
+{
+  GtsTriangle * neighbor = NULL;
+  tri_data_t * td;
+  GSList * li;
+
+  g_assert (heap);
+  g_assert (t);
+  g_assert (v1 && v2 && v3);
+  g_assert (vertices_are_unique (*v1, *v2, *v3));
+
+  td = map_lookup (heap->map, t);
+  g_assert (td);
+  for (li = td->neighbors; li && !neighbor; li = li->next) {
+    GtsTriangle * t2 = li->data;
+    tri_data_t * td2 = map_lookup (heap->map, t2);
+    GtsVertex * v4, * v5, * v6;
+    
+    g_assert (td2);
+    if (t2 == t || td2->used)
+      continue;
+    gts_triangle_vertices (t2, &v4, &v5, &v6);
+    if (left_turn) {
+      if (!vertices_match (NULL, *v2, *v1, &v4, &v5, &v6))
+	continue;
+    } else if (!vertices_match(*v1, NULL, *v2, &v4, &v5, &v6))
+      continue;
+    neighbor = t2;
+    *v1 = v4;
+    *v2 = v5;
+    *v3 = v6;
+  }
+  return neighbor;
+}
+
+static GSList * grow_strip_forward (heap_t * heap,
+				    GSList * strip,
+				    GtsTriangle * t,
+				    GtsVertex * v1,
+				    GtsVertex * v2,
+				    GtsVertex * v3)
+{
+  gboolean left_turn;
   
-  return tmost;
+  g_assert (heap);
+  g_assert (g_slist_length(strip) == 2);
+  g_assert (t);
+  g_assert (v1 && v2 && v3);
+  g_assert (vertices_are_unique (v1, v2, v3));
+
+  left_turn = TRUE;
+  while ((t = find_neighbor_forward (heap, t, &v1, &v2, &v3, 
+				     left_turn)) != NULL) {
+    heap_remove (heap, t);
+    strip = g_slist_prepend (strip, t);
+    left_turn = !left_turn;
+  }
+  return strip;
+}
+
+static GSList * grow_strip_backward (heap_t * heap,
+				     GSList * strip,
+				     GtsTriangle * t,
+				     GtsVertex * v1,
+				     GtsVertex * v2,
+				     GtsVertex * v3)
+{
+  /* we have to make sure we add an even number of triangles */
+  GtsTriangle * t2;
+
+  g_assert (heap);
+  g_assert (g_slist_length(strip) >= 2);
+  g_assert (t);
+  g_assert (v1 && v2 && v3);
+  g_assert (vertices_are_unique (v1, v2, v3));
+
+  while ((t2 = find_neighbor_backward (heap, t, &v1, &v2, &v3,
+				       FALSE)) != NULL
+	 && (t = find_neighbor_backward (heap, t2, &v1, &v2, &v3,
+					 TRUE)) != NULL) {
+    heap_remove (heap, t2);
+    heap_remove (heap, t);
+    strip = g_slist_prepend (strip, t2);
+    strip = g_slist_prepend (strip, t);
+  }
+  return strip;
+}
+
+static gboolean find_right_turn (GtsVertex ** v1,
+				 GtsVertex ** v2,
+				 GtsVertex ** v3,
+				 GtsVertex ** v4,
+				 GtsVertex ** v5,
+				 GtsVertex ** v6)
+{
+  GtsVertex * v;
+
+  g_assert (v1 && v2 && v3);
+  g_assert (v4 && v5 && v6);
+  g_assert (vertices_are_unique (*v1, *v2, *v3));
+  g_assert (vertices_are_unique (*v4, *v5, *v6));
+  g_assert (num_shared_vertices (*v1, *v2, *v3, *v4, *v5, *v6) == 2);
+
+  v = non_shared_vertex1 (*v1, *v2, *v3, *v4, *v5, *v6);
+  match_vertex (v, v1, v2, v3);
+  match_vertex (*v3, v4, v5, v6);
+
+  g_assert (v1 && v2 && v3);
+  g_assert (v4 && v5 && v6);
+  g_assert (*v4 == *v3);
+
+  if (*v5 == *v2) {
+    g_assert (vertices_are_unique (*v1, *v2, *v3));
+    g_assert (vertices_are_unique (*v4, *v5, *v6));
+    g_assert (num_shared_vertices (*v1, *v2, *v3,
+					*v4, *v5, *v6) == 2);
+    return TRUE;
+  } else {
+#ifdef DEBUG
+    g_warning ("couldn't find a right turn");
+#endif /* DEBUG */
+    return FALSE;
+  }
 }
 
 /**
@@ -125,43 +715,52 @@ static GtsTriangle * most_isolated_neighbor (GtsTriangle * t,
  * A triangle strip is itself a list of successive triangles having one edge
  * in common.
  */
-GSList * gts_surface_strip (GtsSurface * s)
+GSList * gts_surface_strip (GtsSurface *s)
 {
-  GtsEHeap * heap;
-  GtsTriangle * t;
   GSList * strips = NULL;
+  heap_t * heap;
 
   g_return_val_if_fail (s != NULL, NULL);
 
-  heap = gts_eheap_new ((GtsKeyFunc) triangle_neighbors, s);
-  gts_eheap_freeze (heap);
-  gts_surface_foreach_face (s, (GtsFunc) create_triangle_heap, heap);
-  gts_eheap_thaw (heap);
-
-  while ((t = gts_eheap_remove_top (heap, NULL))) {
-    GSList * newstrip;
-    GtsTriangle * tstart, * tmost;
-    GTS_OBJECT (t)->reserved = NULL;
-    /* start new strip from t */
-    newstrip = g_slist_prepend (NULL, t);
-    tstart = t;
-    while ((tmost = most_isolated_neighbor (tstart, heap))) {
-      newstrip = g_slist_prepend (newstrip, tmost);
-      gts_eheap_remove (heap, GTS_OBJECT (tmost)->reserved);
-      GTS_OBJECT (tmost)->reserved = NULL;
-      tstart = tmost;
-    }
-    /* restart new strip from t (i.e. both ends) */
-    newstrip = g_slist_reverse (newstrip);
-    tstart = t;
-    while ((tmost = most_isolated_neighbor (tstart, heap))) {
-      newstrip = g_slist_prepend (newstrip, tmost);
-      gts_eheap_remove (heap, GTS_OBJECT (tmost)->reserved);
-      GTS_OBJECT (tmost)->reserved = NULL;
-      tstart = tmost;
+  heap = heap_new (s);
+  while (!heap_is_empty (heap)) {
+    GtsTriangle * t1, * t2;
+    GtsVertex * v1, * v2, * v3, * v4, * v5, * v6;
+    GSList * strip = NULL;
+
+    /* remove heap top */
+    t1 = heap_top (heap);
+    g_assert (t1);
+    heap_remove (heap, t1);
+
+    /* start a new strip */
+    strip = g_slist_prepend (strip, t1);
+
+    /* find second triangle */
+    t2 = find_min_neighbor (heap, t1);
+    if (t2) {
+      g_assert (t2 != t1);
+
+      /* find right turn */
+      gts_triangle_vertices (t1, &v1, &v2, &v3);
+      gts_triangle_vertices (t2, &v4, &v5, &v6);
+      if (find_right_turn (&v1, &v2, &v3, &v4, &v5, &v6)) {
+	heap_remove (heap, t2);
+	strip = g_slist_prepend (strip, t2);
+
+	/* grow strip forward */
+	strip = grow_strip_forward (heap, strip, t2, v4, v5, v6);
+
+	strip = g_slist_reverse (strip);
+
+	/* grow strip backward */
+	strip = grow_strip_backward (heap, strip, t1, v1, v2, v3);
+      }
     }
-    strips = g_slist_prepend (strips, newstrip);
+    strips = g_slist_prepend (strips, strip);
   }
-    
+  strips = g_slist_reverse (strips);
+  heap_destroy (heap);
+
   return strips;
 }
diff --git a/src/surface.c b/src/surface.c
index 30c19c7..3defb7a 100644
--- a/src/surface.c
+++ b/src/surface.c
@@ -19,8 +19,11 @@
 
 #include <stdlib.h>
 #include <math.h>
+#include <string.h>
 #include "gts.h"
 
+#include "gts-private.h"
+
 static void destroy_foreach_face (GtsFace * f, GtsSurface * s)
 {
   f->surfaces = g_slist_remove (f->surfaces, s);
@@ -34,7 +37,11 @@ static void surface_destroy (GtsObject * object)
   GtsSurface * surface = GTS_SURFACE (object);
   
   gts_surface_foreach_face (surface, (GtsFunc) destroy_foreach_face, surface);
+#ifdef USE_SURFACE_BTREE
+  g_tree_destroy (surface->faces);
+#else /* not USE_SURFACE_BTREE */
   g_hash_table_destroy (surface->faces);
+#endif /* not USE_SURFACE_BTREE */
 
   (* GTS_OBJECT_CLASS (gts_surface_class ())->parent_class->destroy) (object);
 }
@@ -45,6 +52,8 @@ static void surface_write (GtsObject * object, FILE * fptr)
 	   object->klass->info.name,
 	   GTS_OBJECT_CLASS (GTS_SURFACE (object)->face_class)->info.name,
 	   GTS_OBJECT_CLASS (GTS_SURFACE (object)->edge_class)->info.name,
+	   GTS_POINT_CLASS (GTS_SURFACE (object)->vertex_class)->binary ?
+	   "GtsVertexBinary" :
 	   GTS_OBJECT_CLASS (GTS_SURFACE (object)->vertex_class)->info.name);
 }
 
@@ -56,9 +65,24 @@ static void surface_class_init (GtsSurfaceClass * klass)
   klass->remove_face = NULL;
 }
 
+#ifdef USE_SURFACE_BTREE
+static gint compare_pointers (gconstpointer a, gconstpointer b)
+{
+  if (GPOINTER_TO_UINT (a) < GPOINTER_TO_UINT (b))
+    return -1;
+  if (GPOINTER_TO_UINT (a) > GPOINTER_TO_UINT (b))
+    return 1;
+  return 0;
+}
+#endif /* USE_SURFACE_BTREE */
+
 static void surface_init (GtsSurface * surface)
 {
+#ifdef USE_SURFACE_BTREE
+  surface->faces = g_tree_new (compare_pointers);
+#else /* not USE_SURFACE_BTREE */
   surface->faces = g_hash_table_new (NULL, NULL);
+#endif /* not USE_SURFACE_BTREE */
   surface->vertex_class = gts_vertex_class ();
   surface->edge_class = gts_edge_class ();
   surface->face_class = gts_face_class ();
@@ -128,10 +152,17 @@ void gts_surface_add_face (GtsSurface * s, GtsFace * f)
 
   g_assert (s->keep_faces == FALSE);
 
+#ifdef USE_SURFACE_BTREE
+  if (!g_tree_lookup (s->faces, f)) {
+    f->surfaces = g_slist_prepend (f->surfaces, s);
+    g_tree_insert (s->faces, f, f);
+  }
+#else /* not USE_SURFACE_BTREE */
   if (!g_hash_table_lookup (s->faces, f)) {
     f->surfaces = g_slist_prepend (f->surfaces, s);
     g_hash_table_insert (s->faces, f, f);
   }
+#endif /* not USE_SURFACE_BTREE */
 
   if (GTS_SURFACE_CLASS (GTS_OBJECT (s)->klass)->add_face)
     (* GTS_SURFACE_CLASS (GTS_OBJECT (s)->klass)->add_face) (s, f);
@@ -152,7 +183,12 @@ void gts_surface_remove_face (GtsSurface * s,
 
   g_assert (s->keep_faces == FALSE);
 
+#ifdef USE_SURFACE_BTREE
+  g_tree_remove (s->faces, f);
+#else /* not USE_SURFACE_BTREE */
   g_hash_table_remove (s->faces, f);
+#endif /* not USE_SURFACE_BTREE */
+
   f->surfaces = g_slist_remove (f->surfaces, s);
 
   if (GTS_SURFACE_CLASS (GTS_OBJECT (s)->klass)->remove_face)
@@ -167,167 +203,205 @@ void gts_surface_remove_face (GtsSurface * s,
 /**
  * gts_surface_read:
  * @surface: a #GtsSurface.
- * @fptr: a file pointer.
+ * @f: a #GtsFile.
  *
- * Add to @surface the data read from @fptr. The format of the file pointed to
- * by @fptr is as described in gts_surface_write().
+ * Add to @surface the data read from @f. The format of the file pointed to
+ * by @f is as described in gts_surface_write().
  *
- * Returns: 0 if successful or the line number at which the parsing stopped in
- * case of error.
+ * Returns: 0 if successful or the line number at which the parsing
+ * stopped in case of error (in which case the @error field of @f is
+ * set to a description of the error which occured).  
  */
-guint gts_surface_read (GtsSurface * surface, FILE * fptr)
+/* Update split.c/surface_read() if modifying this function */
+guint gts_surface_read (GtsSurface * surface, GtsFile * f)
 {
   GtsVertex ** vertices;
   GtsEdge ** edges;
-  guint n, nv, ne, nf, line_number = 1;
-  gboolean syntax_error = FALSE;
-  GString * buf;
-  gint delim;
+  guint n, nv, ne, nf;
 
   g_return_val_if_fail (surface != NULL, 1);
-  g_return_val_if_fail (fptr != NULL, 1);
+  g_return_val_if_fail (f != NULL, 1);
 
-  buf = g_string_new ("");
+  if (f->type != GTS_INT) {
+    gts_file_error (f, "expecting an integer (number of vertices)");
+    return f->line;
+  }
+  nv = atoi (f->token->str);
 
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return 1;
+  gts_file_next_token (f);
+  if (f->type != GTS_INT) {
+    gts_file_error (f, "expecting an integer (number of edges)");
+    return f->line;
   }
-  nv = atoi (buf->str);
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF || delim == '\n') {
-    g_string_free (buf, TRUE);
-    return 1;
+  ne = atoi (f->token->str);
+
+  gts_file_next_token (f);
+  if (f->type != GTS_INT) {
+    gts_file_error (f, "expecting an integer (number of faces)");
+    return f->line;
   }
-  ne = atoi (buf->str);
-  delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-  if (delim == EOF) {
-    g_string_free (buf, TRUE);
-    return 1;
+  nf = atoi (f->token->str);
+  
+  gts_file_next_token (f);
+  if (f->type == GTS_STRING) {
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsSurfaceClass)");
+      return f->line;
+    }
+    gts_file_next_token (f);
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsFaceClass)");
+      return f->line;
+    }
+    gts_file_next_token (f);
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsEdgeClass)");
+      return f->line;
+    }
+    gts_file_next_token (f);
+    if (f->type != GTS_STRING) {
+      gts_file_error (f, "expecting a string (GtsVertexClass)");
+      return f->line;
+    }
+    if (!strcmp (f->token->str, "GtsVertexBinary"))
+      GTS_POINT_CLASS (surface->vertex_class)->binary = TRUE;
+    else {
+      GTS_POINT_CLASS (surface->vertex_class)->binary = FALSE;
+      gts_file_first_token_after (f, '\n');
+    }
   }
-  nf = atoi (buf->str);
-  if (delim != '\n')
-    gts_get_newline (fptr);
+  else
+    gts_file_first_token_after (f, '\n');
 
-  if (nf <= 0) {
-    g_string_free (buf, TRUE);
+  if (nf <= 0)
     return 0;
-  }
 
   /* allocate nv + 1 just in case nv == 0 */
   vertices = g_malloc ((nv + 1)*sizeof (GtsVertex *));
   edges = g_malloc ((ne + 1)*sizeof (GtsEdge *));
   
   n = 0;
-  while (n < nv && !syntax_error) {
+  while (n < nv && f->type != GTS_ERROR) {
     GtsObject * new_vertex =
       gts_object_new (GTS_OBJECT_CLASS (surface->vertex_class));
 
-    line_number++;
-    delim = (*GTS_OBJECT_CLASS (surface->vertex_class)->read)
-      (&new_vertex, fptr);
-    if (delim == EOF)
-      syntax_error = TRUE;
-    else if (delim != '\n')
-      gts_get_newline (fptr);
-    vertices[n++] = GTS_VERTEX (new_vertex);
+    (* GTS_OBJECT_CLASS (surface->vertex_class)->read) (&new_vertex, f);
+    if (f->type != GTS_ERROR) {
+      if (!GTS_POINT_CLASS (surface->vertex_class)->binary)
+	gts_file_first_token_after (f, '\n');
+      vertices[n++] = GTS_VERTEX (new_vertex);
+    }
+    else
+      gts_object_destroy (new_vertex);
   }
-  if (syntax_error)
+  if (f->type == GTS_ERROR)
     nv = n;
+  if (GTS_POINT_CLASS (surface->vertex_class)->binary)
+    gts_file_first_token_after (f, '\n');
 
   n = 0;
-  while (n < ne && !syntax_error) {
+  while (n < ne && f->type != GTS_ERROR) {
     guint p1, p2;
 
-    line_number++;
-    delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-    if (delim == EOF || delim == '\n')
-      syntax_error = TRUE;
+    if (f->type != GTS_INT)
+      gts_file_error (f, "expecting an integer (first vertex index)");
     else {
-      p1 = atoi (buf->str);
-      delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-      if (delim == EOF)
-	syntax_error = TRUE;
+      p1 = atoi (f->token->str);
+      if (p1 == 0 || p1 > nv)
+	gts_file_error (f, "vertex index `%d' is out of range `[1,%d]'", 
+			p1, nv);
       else {
-	p2 = atoi (buf->str);
-	if (p1 == 0 || p2 == 0 || p1 > nv || p2 > nv)
-	  syntax_error = TRUE;
+	gts_file_next_token (f);
+	if (f->type != GTS_INT)
+	  gts_file_error (f, "expecting an integer (second vertex index)");
 	else {
-	  GtsEdge * new_edge =
-	    gts_edge_new (surface->edge_class,
-			  vertices[p1 - 1], vertices[p2 - 1]);
-	  if (delim != '\n') {
-	    if (GTS_OBJECT_CLASS (surface->edge_class)->read)
-	      delim = (*GTS_OBJECT_CLASS (surface->edge_class)->read)
-		((GtsObject **) &new_edge, fptr);
-	    if (delim != '\n')
-	      gts_get_newline (fptr);
+	  p2 = atoi (f->token->str);
+	  if (p2 == 0 || p2 > nv)
+	    gts_file_error (f, "vertex index `%d' is out of range `[1,%d]'", 
+			    p2, nv);
+	  else {
+	    GtsEdge * new_edge =
+	      gts_edge_new (surface->edge_class,
+			    vertices[p1 - 1], vertices[p2 - 1]);
+
+	    gts_file_next_token (f);
+	    if (f->type != '\n')
+	      if (GTS_OBJECT_CLASS (surface->edge_class)->read)
+		(*GTS_OBJECT_CLASS (surface->edge_class)->read)
+		  ((GtsObject **) &new_edge, f);
+	    gts_file_first_token_after (f, '\n');
+	    edges[n++] = new_edge;
 	  }
-	  edges[n++] = new_edge;
 	}
       }
     }
   }
-  if (syntax_error)
+  if (f->type == GTS_ERROR)
     ne = n;
 
   n = 0;
-  while (n < nf && !syntax_error) {
+  while (n < nf && f->type != GTS_ERROR) {
     guint s1, s2, s3;
 
-    line_number++;
-    delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-    if (delim == EOF || delim == '\n')
-      syntax_error = TRUE;
+    if (f->type != GTS_INT)
+      gts_file_error (f, "expecting an integer (first edge index)");
     else {
-      s1 = atoi (buf->str);
-      delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-      if (delim == EOF || delim == '\n')
-	syntax_error = TRUE;
+      s1 = atoi (f->token->str);
+      if (s1 == 0 || s1 > ne)
+	gts_file_error (f, "edge index `%d' is out of range `[1,%d]'", 
+			s1, ne);
       else {
-	s2 = atoi (buf->str);
-	delim = gts_get_token (fptr, buf, " \t\n", GTS_COMMENTS);
-	if (delim == EOF)
-	  syntax_error = TRUE;
+	gts_file_next_token (f);
+	if (f->type != GTS_INT)
+	  gts_file_error (f, "expecting an integer (second edge index)");
 	else {
-	  s3 = atoi (buf->str);
-	  if (s1 == 0 || s2 == 0 || s3 == 0 || s1 > ne || s2 > ne || s3 > ne)
-	    syntax_error = TRUE;
+	  s2 = atoi (f->token->str);
+	  if (s2 == 0 || s2 > ne)
+	    gts_file_error (f, "edge index `%d' is out of range `[1,%d]'", 
+			    s2, ne);
 	  else {
-	    GtsFace * new_face = gts_face_new (surface->face_class,
-					       edges[s1 - 1],
-					       edges[s2 - 1],
-					       edges[s3 - 1]);
-	    if (delim != '\n') {
-	      if (GTS_OBJECT_CLASS (surface->face_class)->read)
-		delim = (*GTS_OBJECT_CLASS (surface->face_class)->read)
-		  ((GtsObject **) &new_face, fptr);
-	      if (delim != '\n')
-		gts_get_newline (fptr);
+	    gts_file_next_token (f);
+	    if (f->type != GTS_INT)
+	      gts_file_error (f, "expecting an integer (third edge index)");
+	    else {
+	      s3 = atoi (f->token->str);
+	      if (s3 == 0 || s3 > ne)
+		gts_file_error (f, "edge index `%d' is out of range `[1,%d]'", 
+				s3, ne);
+	      else {
+		GtsFace * new_face = gts_face_new (surface->face_class,
+						   edges[s1 - 1],
+						   edges[s2 - 1],
+						   edges[s3 - 1]);
+
+		gts_file_next_token (f);
+		if (f->type != '\n')
+		  if (GTS_OBJECT_CLASS (surface->face_class)->read)
+		    (*GTS_OBJECT_CLASS (surface->face_class)->read)
+		      ((GtsObject **) &new_face, f);
+		gts_file_first_token_after (f, '\n');
+		gts_surface_add_face (surface, new_face);
+		n++;
+	      }
 	    }
-	    gts_surface_add_face (surface, new_face);
-	    n++;
 	  }
 	}
       }
     }
   }
 
-  if (syntax_error) {
+  if (f->type == GTS_ERROR) {
     gts_allow_floating_vertices = TRUE;
     while (nv)
       gts_object_destroy (GTS_OBJECT (vertices[nv-- - 1]));
     gts_allow_floating_vertices = FALSE;
-    gts_object_destroy (GTS_OBJECT (surface));
   }
 
   g_free (vertices);
   g_free (edges);
-  g_string_free (buf, TRUE);
 
-  if (syntax_error)
-    return line_number;
+  if (f->type == GTS_ERROR)
+    return f->line;
   return 0;
 }
 
@@ -361,7 +435,7 @@ void gts_range_init (GtsRange * r)
 
   r->max = - G_MAXDOUBLE;
   r->min = G_MAXDOUBLE;
-  r->mean = r->stddev = 0.0;
+  r->sum = r->sum2 = 0.0;
   r->n = 0;
 }
 
@@ -377,7 +451,7 @@ void gts_range_reset (GtsRange * r)
 
   r->max = 0.0;
   r->min = 0.0;
-  r->mean = r->stddev = 0.0;
+  r->sum = r->sum2 = 0.0;
   r->n = 0;
 }
 
@@ -394,8 +468,8 @@ void gts_range_add_value (GtsRange * r, gdouble val)
 
   if (val < r->min) r->min = val;
   if (val > r->max) r->max = val;
-  r->mean += val;
-  r->stddev += val*val;
+  r->sum += val;
+  r->sum2 += val*val;
   r->n++;
 }
 
@@ -408,16 +482,17 @@ void gts_range_add_value (GtsRange * r, gdouble val)
 void gts_range_update (GtsRange * r)
 {
   g_return_if_fail (r != NULL);
+
   if (r->n > 0) {
-    if (r->stddev - r->mean*r->mean/(gdouble)r->n >= 0.)
-      r->stddev = sqrt ((r->stddev - r->mean*r->mean/(gdouble)r->n)
-			/(gdouble)r->n);
+    if (r->sum2 - r->sum*r->sum/(gdouble) r->n >= 0.)
+      r->stddev = sqrt ((r->sum2 - r->sum*r->sum/(gdouble) r->n)
+			/(gdouble) r->n);
     else
       r->stddev = 0.;
-    r->mean /= (gdouble)r->n;
+    r->mean = r->sum/(gdouble) r->n;
   }
-  else
-    r->min = r->max = 0.0;
+  else 
+    r->min = r->max = r->mean = r->stddev = 0.;
 }
 
 /**
@@ -634,45 +709,33 @@ void gts_surface_print_stats (GtsSurface * s, FILE * fptr)
 static void write_vertex (GtsPoint * p, gpointer * data)
 {
   (*GTS_OBJECT (p)->klass->write) (GTS_OBJECT (p), (FILE *) data[0]);
-  fputc ('\n', (FILE *) data[0]);
-  GTS_OBJECT (p)->reserved = GUINT_TO_POINTER (++(*((guint *) data[1])));
+  if (!GTS_POINT_CLASS (GTS_OBJECT (p)->klass)->binary)
+    fputc ('\n', (FILE *) data[0]);
+  g_hash_table_insert (data[2], p, 
+		       GUINT_TO_POINTER (++(*((guint *) data[1]))));
 }
 
 static void write_edge (GtsSegment * s, gpointer * data) 
 {
   fprintf ((FILE *) data[0], "%u %u",
-	   GPOINTER_TO_UINT (GTS_OBJECT (s->v1)->reserved),
-	   GPOINTER_TO_UINT (GTS_OBJECT (s->v2)->reserved));
+	   GPOINTER_TO_UINT (g_hash_table_lookup (data[2], s->v1)),
+	   GPOINTER_TO_UINT (g_hash_table_lookup (data[2], s->v2)));
   if (GTS_OBJECT (s)->klass->write)
     (*GTS_OBJECT (s)->klass->write) (GTS_OBJECT (s), (FILE *) data[0]);
   fputc ('\n', (FILE *) data[0]);
-  GTS_OBJECT (s)->reserved = GUINT_TO_POINTER (++(*((guint *) data[1])));
+  g_hash_table_insert (data[3], s, 
+		       GUINT_TO_POINTER (++(*((guint *) data[1]))));
 }
 
-static void write_face (GtsTriangle * t, FILE * fp)
+static void write_face (GtsTriangle * t, gpointer * data)
 {
-  fprintf (fp, "%u %u %u",
-	   GPOINTER_TO_UINT (GTS_OBJECT (t->e1)->reserved),
-	   GPOINTER_TO_UINT (GTS_OBJECT (t->e2)->reserved),
-	   GPOINTER_TO_UINT (GTS_OBJECT (t->e3)->reserved));
+  fprintf (data[0], "%u %u %u",
+	   GPOINTER_TO_UINT (g_hash_table_lookup (data[3], t->e1)),
+	   GPOINTER_TO_UINT (g_hash_table_lookup (data[3], t->e2)),
+	   GPOINTER_TO_UINT (g_hash_table_lookup (data[3], t->e3)));
   if (GTS_OBJECT (t)->klass->write)
-    (*GTS_OBJECT (t)->klass->write) (GTS_OBJECT (t), fp);
-  fputc ('\n', fp);
-}
-
-static void reset_reserved (GtsTriangle * t)
-{
-  GtsSegment
-    * s1 = GTS_SEGMENT (t->e1), 
-    * s2 = GTS_SEGMENT (t->e2), 
-    * s3 = GTS_SEGMENT (t->e3);
-
-  GTS_OBJECT (s1)->reserved = NULL;
-  GTS_OBJECT (s2)->reserved = NULL;
-  GTS_OBJECT (s3)->reserved = NULL;
-  GTS_OBJECT (s1->v1)->reserved = GTS_OBJECT (s1->v2)->reserved = NULL;
-  GTS_OBJECT (s2->v1)->reserved = GTS_OBJECT (s2->v2)->reserved = NULL;
-  GTS_OBJECT (s3->v1)->reserved = GTS_OBJECT (s3->v2)->reserved = NULL;
+    (*GTS_OBJECT (t)->klass->write) (GTS_OBJECT (t), data[0]);
+  fputc ('\n', data[0]);
 }
 
 /**
@@ -705,7 +768,8 @@ static void reset_reserved (GtsTriangle * t)
 void gts_surface_write (GtsSurface * s, FILE * fptr)
 {
   guint n;
-  gpointer data[2];
+  gpointer data[4];
+  GHashTable * vindex, * eindex;
   GtsSurfaceStats stats;
 
   g_return_if_fail (s != NULL);
@@ -713,6 +777,8 @@ void gts_surface_write (GtsSurface * s, FILE * fptr)
 
   data[0] = fptr;
   data[1] = &n;
+  data[2] = vindex = g_hash_table_new (NULL, NULL);
+  data[3] = eindex = g_hash_table_new (NULL, NULL);
 
   gts_surface_stats (s, &stats);
   fprintf (fptr, "%u %u %u", 
@@ -725,9 +791,12 @@ void gts_surface_write (GtsSurface * s, FILE * fptr)
   n = 0;
   gts_surface_foreach_vertex (s, (GtsFunc) write_vertex, data);
   n = 0;
+  if (GTS_POINT_CLASS (s->vertex_class)->binary)
+    fputc ('\n', fptr);
   gts_surface_foreach_edge (s, (GtsFunc) write_edge, data);
-  gts_surface_foreach_face (s, (GtsFunc) write_face, fptr);
-  gts_surface_foreach_face (s, (GtsFunc) reset_reserved, NULL);
+  gts_surface_foreach_face (s, (GtsFunc) write_face, data);
+  g_hash_table_destroy (vindex);
+  g_hash_table_destroy (eindex);
 }
 
 static void write_vertex_oogl (GtsPoint * p, gpointer * data)
@@ -793,6 +862,59 @@ void gts_surface_write_oogl (GtsSurface * s, FILE * fptr)
   gts_surface_foreach_vertex (s, (GtsFunc) gts_object_reset_reserved, NULL);
 }
 
+static void write_vertex_vtk (GtsPoint * p, gpointer * data)
+{
+  FILE * fp = data[0];
+
+  fprintf (fp, "%g %g %g\n", p->x, p->y, p->z);
+  GTS_OBJECT (p)->reserved = GUINT_TO_POINTER ((*((guint *) data[1]))++);
+}
+
+static void write_face_vtk (GtsTriangle * t, FILE * fp)
+{
+  GtsVertex * v1, * v2, * v3;
+  gts_triangle_vertices (t, &v1, &v2, &v3);
+  fprintf (fp, "3 %u %u %u\n",
+	   GPOINTER_TO_UINT (GTS_OBJECT (v1)->reserved),
+	   GPOINTER_TO_UINT (GTS_OBJECT (v2)->reserved),
+	   GPOINTER_TO_UINT (GTS_OBJECT (v3)->reserved));
+}
+
+/**
+ * gts_surface_write_vtk:
+ * @s: a #GtsSurface.
+ * @fptr: a file pointer.
+ * 
+ * Writes in the file @fptr a VTK representation of @s.
+ */
+void gts_surface_write_vtk (GtsSurface * s, FILE * fptr)
+{
+  guint n = 0;
+  gpointer data[2];
+  GtsSurfaceStats stats;
+
+  g_return_if_fail (s != NULL);
+  g_return_if_fail (fptr != NULL);
+
+  data[0] = fptr;
+  data[1] = &n;
+
+  gts_surface_stats (s, &stats);
+  fprintf (fptr,
+	   "# vtk DataFile Version 2.0\n"
+	   "Generated by GTS\n"
+           "ASCII\n"
+	   "DATASET POLYDATA\n"
+	   "POINTS %u float\n",
+	   stats.edges_per_vertex.n);
+  gts_surface_foreach_vertex (s, (GtsFunc) write_vertex_vtk, data);
+  fprintf (fptr,
+	   "POLYGONS %u %u\n",
+	   stats.n_faces, stats.n_faces*4);
+  gts_surface_foreach_face (s, (GtsFunc) write_face_vtk, fptr);
+  gts_surface_foreach_vertex (s, (GtsFunc) gts_object_reset_reserved, NULL);  
+}
+
 static void write_edge_oogl_boundary (GtsSegment * s, gpointer * data)
 {
   if (!gts_edge_is_boundary (GTS_EDGE (s), data[1]))
@@ -833,13 +955,19 @@ void gts_surface_write_oogl_boundary (GtsSurface * s, FILE * fptr)
   fputs ("}\n", fptr);
 }
 
+#ifdef USE_SURFACE_BTREE
+static gint vertex_foreach_face (GtsTriangle * t,
+				 gpointer t_data,
+				 gpointer * info)
+#else /* not USE_SURFACE_BTREE */
 static void vertex_foreach_face (GtsTriangle * t,
 				 gpointer t_data,
 				 gpointer * info)
+#endif /* not USE_SURFACE_BTREE */
 {
   GHashTable * hash = info[0];
   gpointer data = info[1];
-  GtsFunc func = info[2];
+  GtsFunc func = (GtsFunc) info[2];
   GtsSegment 
     * s1 = GTS_SEGMENT (t->e1);
 
@@ -856,6 +984,9 @@ static void vertex_foreach_face (GtsTriangle * t,
     g_hash_table_insert (hash, gts_triangle_vertex (t), 
 			 GINT_TO_POINTER (-1));
   }
+#ifdef USE_SURFACE_BTREE
+  return FALSE;
+#endif /* USE_SURFACE_BTREE */
 }
 
 /**
@@ -878,19 +1009,30 @@ void gts_surface_foreach_vertex (GtsSurface * s, GtsFunc func, gpointer data)
   info[0] = g_hash_table_new (NULL, NULL);
   info[1] = data;
   info[2] = func;
+#ifdef USE_SURFACE_BTREE
+  g_tree_traverse (s->faces, (GTraverseFunc) vertex_foreach_face, G_IN_ORDER,
+		   info);
+#else /* not USE_SURFACE_BTREE */
   g_hash_table_foreach (s->faces, (GHFunc) vertex_foreach_face, info);
+#endif /* not USE_SURFACE_BTREE */
   g_hash_table_destroy (info[0]);
   /* allow removal of faces */
   s->keep_faces = FALSE;
 }
 
+#ifdef USE_SURFACE_BTREE
+static gint edge_foreach_face (GtsTriangle * t,
+			       gpointer t_data, 
+			       gpointer * info)
+#else /* not USE_SURFACE_BTREE */
 static void edge_foreach_face (GtsTriangle * t,
 			       gpointer t_data, 
 			       gpointer * info)
+#endif /* not USE_SURFACE_BTREE */
 {
   GHashTable * hash = info[0];
   gpointer data = info[1];
-  GtsFunc func = info[2];
+  GtsFunc func = (GtsFunc) info[2];
 
   if (!g_hash_table_lookup (hash, t->e1)) {
     (*func) (t->e1, data);
@@ -904,6 +1046,9 @@ static void edge_foreach_face (GtsTriangle * t,
     (*func) (t->e3, data);
     g_hash_table_insert (hash, t->e3, GINT_TO_POINTER (-1));
   }
+#ifdef USE_SURFACE_BTREE
+  return FALSE;
+#endif /* not USE_SURFACE_BTREE */
 }
 
 /**
@@ -926,71 +1071,31 @@ void gts_surface_foreach_edge (GtsSurface * s, GtsFunc func, gpointer data)
   info[0] = g_hash_table_new (NULL, NULL);
   info[1] = data;
   info[2] = func;
-  g_hash_table_foreach (s->faces, (GHFunc)edge_foreach_face, info);
+#ifdef USE_SURFACE_BTREE
+  g_tree_traverse (s->faces, (GTraverseFunc) edge_foreach_face, G_IN_ORDER,
+		   info);
+#else /* not USE_SURFACE_BTREE */
+  g_hash_table_foreach (s->faces, (GHFunc) edge_foreach_face, info);
+#endif /* not USE_SURFACE_BTREE */
   g_hash_table_destroy (info[0]);
   /* allow removal of faces */
   s->keep_faces = FALSE;
 }
 
-#if 0
-
-/* Due to an unkown reason g_hash_table_foreach does not allow to stop 
- * the loop, hence the redefinition. I hope they don't change
- * the GHashTable, GHashNode structures ... */
-typedef struct _GHashNode      GHashNode;
-
-struct _GHashNode
-{
-  gpointer key;
-  gpointer value;
-  GHashNode *next;
-};
-
-struct _GHashTable
-{
-  gint size;
-  gint nnodes;
-  guint frozen;
-  GHashNode **nodes;
-  GHashFunc hash_func;
-  GCompareFunc key_compare_func;
-};
-
-/**
- * gts_surface_foreach_face:
- * @s: a #GtsSurface.
- * @func: a #GtsFunc.
- * @data: user data to be passed to @func.
- *
- * Calls @func once for each face of @s.
- */
-void gts_surface_foreach_face (GtsSurface * s,
-			       GtsFunc func, 
-			       gpointer data)
-{
-  guint i;
-  GHashNode * node;
-  gboolean stop = FALSE;
-
-  g_return_if_fail (s != NULL);
-  g_return_if_fail (func != NULL);
-
-  /* forbid removal of faces */
-  s->keep_faces = TRUE;
-  for (i = 0; i < s->faces->size && !stop; i++)
-    for (node = s->faces->nodes[i]; node && !stop; node = node->next)
-      stop = !(* func) (node->key, data);
-  /* allow removal of faces */
-  s->keep_faces = FALSE;
-}
-
-#else
-
+#ifdef USE_SURFACE_BTREE
+static gint foreach_face (GtsFace * f, 
+			  gpointer t_data,
+			  gpointer * info)
+#else /* not USE_SURFACE_BTREE */
 static void foreach_face (GtsFace * f, 
 			  gpointer t_data,
 			  gpointer * info)
+#endif /* not USE_SURFACE_BTREE */
 {
   (*((GtsFunc) info[0])) (f, info[1]);
+#ifdef USE_SURFACE_BTREE
+  return FALSE;
+#endif /* USE_SURFACE_BTREE */
 }
 
 /**
@@ -1014,13 +1119,40 @@ void gts_surface_foreach_face (GtsSurface * s,
   s->keep_faces = TRUE;
   info[0] = func;
   info[1] = data;
-  g_hash_table_foreach (s->faces, (GHFunc)foreach_face, info);
+#ifdef USE_SURFACE_BTREE
+  g_tree_traverse (s->faces, (GTraverseFunc) foreach_face, G_IN_ORDER,
+		   info);
+#else /* not USE_SURFACE_BTREE */
+  g_hash_table_foreach (s->faces, (GHFunc) foreach_face, info);
+#endif /* not USE_SURFACE_BTREE */
   /* allow removal of faces */
   s->keep_faces = FALSE;
 }
 
-#endif
+#ifdef USE_SURFACE_BTREE
+static gint foreach_face_remove (GtsFace * f,
+				 gpointer t_data,
+				 gpointer * info)
+{
+  if ((*((GtsFunc) info[0])) (f, info[1])) {
+    GtsSurface * s = info[2];
+    guint * n = info[3];
+
+    f->surfaces = g_slist_remove (f->surfaces, s);
+    if (!GTS_OBJECT_DESTROYED (f) &&
+	!gts_allow_floating_faces && 
+	f->surfaces == NULL)
+      gts_object_destroy (GTS_OBJECT (f));
+    
+    if (GTS_SURFACE_CLASS (GTS_OBJECT (s)->klass)->remove_face)
+      (* GTS_SURFACE_CLASS (GTS_OBJECT (s)->klass)->remove_face) (s, f);
 
+    g_tree_remove (s->faces, f);
+    (*n)++;
+  }
+  return FALSE;
+}
+#else /* not USE_SURFACE_BTREE */
 static gboolean foreach_face_remove (GtsFace * f,
 				     gpointer t_data,
 				     gpointer * info)
@@ -1041,6 +1173,7 @@ static gboolean foreach_face_remove (GtsFace * f,
   }
   return FALSE;
 }
+#endif /* not USE_SURFACE_BTREE */
 
 /**
  * gts_surface_foreach_face_remove:
@@ -1059,8 +1192,8 @@ guint gts_surface_foreach_face_remove (GtsSurface * s,
 				       GtsFunc func, 
 				       gpointer data)
 {
-  gpointer info[3];
-  guint n;
+  gpointer info[4];
+  guint n = 0;
 
   g_return_val_if_fail (s != NULL, 0);
   g_return_val_if_fail (func != NULL, 0);
@@ -1070,9 +1203,15 @@ guint gts_surface_foreach_face_remove (GtsSurface * s,
   info[0] = func;
   info[1] = data;
   info[2] = s;
+#ifdef USE_SURFACE_BTREE
+  info[3] = &n;
+  g_tree_traverse (s->faces, (GTraverseFunc) foreach_face_remove, G_PRE_ORDER,
+		   info);
+#else /* not USE_SURFACE_BTREE */
   n = g_hash_table_foreach_remove (s->faces, 
 				   (GHRFunc) foreach_face_remove, 
 				   info);
+#endif /* not USE_SURFACE_BTREE */
   /* allow removal of faces */
   s->keep_faces = FALSE;
   
@@ -1081,7 +1220,9 @@ guint gts_surface_foreach_face_remove (GtsSurface * s,
 
 static void midvertex_insertion (GtsEdge * e,
 				 GtsSurface * surface,
-				 GtsHeap * heap,
+				 GtsEHeap * heap,
+				 GtsRefineFunc refine_func,
+				 gpointer refine_data,
 				 GtsVertexClass * vertex_class,
 				 GtsEdgeClass * edge_class)
 {
@@ -1089,11 +1230,11 @@ static void midvertex_insertion (GtsEdge * e,
   GtsEdge * e1, * e2;
   GSList * i;
 
-  midvertex = gts_segment_midvertex (GTS_SEGMENT (e), vertex_class);
+  midvertex = (*refine_func) (e, vertex_class, refine_data);
   e1 = gts_edge_new (edge_class, GTS_SEGMENT (e)->v1, midvertex);
-  gts_heap_insert (heap, e1);
+  gts_eheap_insert (heap, e1);
   e2 = gts_edge_new (edge_class, GTS_SEGMENT (e)->v2, midvertex);
-  gts_heap_insert (heap, e2);
+  gts_eheap_insert (heap, e2);
   
   /* creates new faces and modifies old ones */
   i = e->triangles;
@@ -1104,7 +1245,7 @@ static void midvertex_insertion (GtsEdge * e,
 
     gts_triangle_vertices_edges (t, e, &v1, &v2, &v3, &e, &te2, &te3);
     ne = gts_edge_new (edge_class, midvertex, v3);
-    gts_heap_insert (heap, ne);
+    gts_eheap_insert (heap, ne);
     if (GTS_SEGMENT (e1)->v1 == v2) {
       tmp = e1; e1 = e2; e2 = tmp;
     }
@@ -1122,61 +1263,69 @@ static void midvertex_insertion (GtsEdge * e,
   gts_object_destroy (GTS_OBJECT (e));
 }
 
-static gint edge_is_longer (GtsSegment * s1, GtsSegment * s2)
+static gdouble edge_length2_inverse (GtsSegment * s)
 {
-  if (gts_point_distance2 (GTS_POINT (s1->v1), GTS_POINT (s1->v2)) >
-      gts_point_distance2 (GTS_POINT (s2->v1), GTS_POINT (s2->v2)))
-    return -1;
-  return 1;
+  return - gts_point_distance2 (GTS_POINT (s->v1), GTS_POINT (s->v2));
 }
 
-static void create_heap_refine (GtsEdge * e, GtsHeap * heap)
+static void create_heap_refine (GtsEdge * e, GtsEHeap * heap)
 {
-  gts_heap_insert (heap, e);
+  gts_eheap_insert (heap, e);
 }
 
 /**
  * gts_surface_refine:
  * @surface: a #GtsSurface.
- * @compare_func: a GCompareFunc.
+ * @cost_func: a function returning the cost for a given edge.
+ * @cost_data: user data to be passed to @cost_func.
+ * @refine_func: a #GtsRefineFunc.
+ * @refine_data: user data to be passed to @refine_func.
  * @stop_func: a #GtsStopFunc.
- * @data: user data to be passed to @stop_func.
+ * @stop_data: user data to be passed to @stop_func.
  *
  * Refine @surface using a midvertex insertion technique. All the
- * edges of @surface are ordered according to @compare_func. The edges
+ * edges of @surface are ordered according to @cost_func. The edges
  * are then processed in order until @stop_func returns %TRUE. Each
  * edge is split in two and new edges and faces are created.
  *
- * If @compare_func is set to %NULL an internal function comparing the
- * squared length of the edges is used.  
+ * If @cost_func is set to %NULL, the edges are sorted according 
+ * to their length squared (the longest is on top).
+ *
+ * If @refine_func is set to %NULL gts_segment_midvertex() is used.
+ * 
  */
 void gts_surface_refine (GtsSurface * surface,
-			 GCompareFunc compare_func,
+			 GtsKeyFunc cost_func,
+			 gpointer cost_data,
+			 GtsRefineFunc refine_func,
+			 gpointer refine_data,
 			 GtsStopFunc stop_func,
-			 gpointer data)
+			 gpointer stop_data)
 {
-  GtsHeap * heap;
+  GtsEHeap * heap;
   GtsEdge * e;
+  gdouble top_cost;
 
   g_return_if_fail (surface != NULL);
   g_return_if_fail (stop_func != NULL);
 
-  if (compare_func == NULL)
-    compare_func = (GCompareFunc) edge_is_longer;
-
-  heap = gts_heap_new (compare_func);
-  gts_heap_freeze (heap);
-  gts_surface_foreach_edge (surface, (GtsFunc)create_heap_refine, heap);
-  gts_heap_thaw (heap);
-  while ((e = gts_heap_remove_top (heap)) &&
-	 !(*stop_func) (gts_point_distance (GTS_POINT (GTS_SEGMENT (e)->v1), 
-					    GTS_POINT (GTS_SEGMENT (e)->v2)),
-			gts_heap_size (heap) + 
+  if (cost_func == NULL)
+    cost_func = (GtsKeyFunc) edge_length2_inverse;
+  if (refine_func == NULL)
+    refine_func = (GtsRefineFunc) gts_segment_midvertex;
+
+  heap = gts_eheap_new (cost_func, cost_data);
+  gts_eheap_freeze (heap);
+  gts_surface_foreach_edge (surface, (GtsFunc) create_heap_refine, heap);
+  gts_eheap_thaw (heap);
+  while ((e = gts_eheap_remove_top (heap, &top_cost)) &&
+	 !(*stop_func) (top_cost,
+			gts_eheap_size (heap) + 
 			gts_edge_face_number (e, surface) + 2,
-			data))
-    midvertex_insertion (e, surface, heap, 
+			stop_data))
+    midvertex_insertion (e, surface, heap, refine_func, refine_data,
 			 surface->vertex_class, surface->edge_class);
-  gts_heap_destroy (heap);
+  gts_eheap_destroy (heap);
 }
 
 static GSList * edge_triangles (GtsEdge * e1, GtsEdge * e)
@@ -1614,6 +1763,315 @@ gboolean gts_coarsen_stop_cost (gdouble cost,
   return FALSE;
 }
 
+#define GTS_M_ICOSAHEDRON_X /* sqrt(sqrt(5)+1)/sqrt(2*sqrt(5)) */ \
+  0.850650808352039932181540497063011072240401406
+#define GTS_M_ICOSAHEDRON_Y /* sqrt(2)/sqrt(5+sqrt(5))         */ \
+  0.525731112119133606025669084847876607285497935
+#define GTS_M_ICOSAHEDRON_Z 0.0
+
+static guint generate_icosahedron (GtsSurface * s)
+{
+  GtsVertex * v01 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y);
+  GtsVertex * v02 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z);
+  GtsVertex * v03 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X);
+  GtsVertex * v04 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X);
+  GtsVertex * v05 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z);
+  GtsVertex * v06 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y);
+  GtsVertex * v07 = gts_vertex_new (s->vertex_class,
+      -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, +GTS_M_ICOSAHEDRON_X);
+  GtsVertex * v08 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y);
+  GtsVertex * v09 = gts_vertex_new (s->vertex_class,
+      -GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z);
+  GtsVertex * v10 = gts_vertex_new (s->vertex_class,
+      -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X);
+  GtsVertex * v11 = gts_vertex_new (s->vertex_class,
+      -GTS_M_ICOSAHEDRON_X, -GTS_M_ICOSAHEDRON_Y, +GTS_M_ICOSAHEDRON_Z);
+  GtsVertex * v12 = gts_vertex_new (s->vertex_class,
+      +GTS_M_ICOSAHEDRON_Z, -GTS_M_ICOSAHEDRON_X, +GTS_M_ICOSAHEDRON_Y);
+
+  GtsEdge * e01 = gts_edge_new (s->edge_class, v01, v02);
+  GtsEdge * e02 = gts_edge_new (s->edge_class, v03, v02);
+  GtsEdge * e03 = gts_edge_new (s->edge_class, v01, v03);
+  GtsEdge * e04 = gts_edge_new (s->edge_class, v04, v05);
+  GtsEdge * e05 = gts_edge_new (s->edge_class, v02, v05);
+  GtsEdge * e06 = gts_edge_new (s->edge_class, v04, v02);
+  GtsEdge * e07 = gts_edge_new (s->edge_class, v06, v07);
+  GtsEdge * e08 = gts_edge_new (s->edge_class, v04, v07);
+  GtsEdge * e09 = gts_edge_new (s->edge_class, v06, v04);
+  GtsEdge * e10 = gts_edge_new (s->edge_class, v08, v03);
+  GtsEdge * e11 = gts_edge_new (s->edge_class, v03, v05);
+  GtsEdge * e12 = gts_edge_new (s->edge_class, v08, v05);
+  GtsEdge * e13 = gts_edge_new (s->edge_class, v06, v09);
+  GtsEdge * e14 = gts_edge_new (s->edge_class, v07, v09);
+  GtsEdge * e15 = gts_edge_new (s->edge_class, v08, v10);
+  GtsEdge * e16 = gts_edge_new (s->edge_class, v03, v10);
+  GtsEdge * e17 = gts_edge_new (s->edge_class, v06, v01);
+  GtsEdge * e18 = gts_edge_new (s->edge_class, v01, v09);
+  GtsEdge * e19 = gts_edge_new (s->edge_class, v08, v11);
+  GtsEdge * e20 = gts_edge_new (s->edge_class, v10, v11);
+  GtsEdge * e21 = gts_edge_new (s->edge_class, v06, v02);
+  GtsEdge * e22 = gts_edge_new (s->edge_class, v12, v11);
+  GtsEdge * e23 = gts_edge_new (s->edge_class, v12, v08);
+  GtsEdge * e24 = gts_edge_new (s->edge_class, v12, v07);
+  GtsEdge * e25 = gts_edge_new (s->edge_class, v07, v11);
+  GtsEdge * e26 = gts_edge_new (s->edge_class, v12, v04);
+  GtsEdge * e27 = gts_edge_new (s->edge_class, v09, v11);
+  GtsEdge * e28 = gts_edge_new (s->edge_class, v10, v09);
+  GtsEdge * e29 = gts_edge_new (s->edge_class, v12, v05);
+  GtsEdge * e30 = gts_edge_new (s->edge_class, v01, v10);
+  
+  gts_surface_add_face (s, gts_face_new (s->face_class, e01, e02, e03));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e04, e05, e06));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e07, e08, e09));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e10, e11, e12));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e13, e14, e07));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e15, e16, e10));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e17, e18, e13));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e19, e20, e15));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e21, e01, e17));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e22, e19, e23));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e09, e06, e21));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e24, e25, e22));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e26, e08, e24));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e20, e27, e28));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e29, e04, e26));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e14, e27, e25));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e23, e12, e29));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e02, e05, e11));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e30, e28, e18));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e03, e16, e30));
+
+  return 0;
+}
+
+static GtsVertex * unit_sphere_arc_midvertex (GtsSegment * s, 
+					      GtsVertexClass * vertex_class)
+{
+  GtsPoint * p1, * p2;
+  gdouble x, y, z, norm;
+
+  p1 = GTS_POINT (s->v1); p2 = GTS_POINT (s->v2);
+
+  x = 0.5*(p1->x + p2->x);
+  y = 0.5*(p1->y + p2->y);
+  z = 0.5*(p1->z + p2->z);
+
+  norm = x*x + y*y + z*z;
+  norm = sqrt (norm);
+
+  x /= norm; y /= norm; z /= norm;
+
+  return gts_vertex_new (vertex_class, x, y, z);
+}
+
+static void tessellate_face (GtsFace * f,
+			     GtsSurface * s,
+			     GtsRefineFunc refine_func,
+			     gpointer refine_data,
+			     GtsVertexClass * vertex_class,
+			     GtsEdgeClass * edge_class)
+{
+  GtsTriangle * t;
+  GtsEdge * e1, * e2, * e3;                          /* former edges     */
+  GtsVertex * v1, * v2, * v3;                        /* initial vertices */
+  GtsVertex * v4, * v5, * v6;                        /* new vertices     */ 
+  GtsEdge * e56, * e64, * e45;                       /* new inside edges */
+  GtsEdge * e24, * e34, * e35, * e15, * e16, * e26;  /* new border edges */
+  GSList * dum;
+  GtsEdge * edum;
+  
+  t = GTS_TRIANGLE (f);
+  e1 = t->e1; e2 = t->e2; e3 = t->e3;
+
+  if (GTS_SEGMENT (e1)->v2 == GTS_SEGMENT (e2)->v1) {
+    v1 = GTS_SEGMENT (e2)->v2;
+    v2 = GTS_SEGMENT (e1)->v1;
+    v3 = GTS_SEGMENT (e1)->v2;
+  }
+  else if (GTS_SEGMENT (e1)->v2 == GTS_SEGMENT (e2)->v2) {
+    v1 = GTS_SEGMENT (e2)->v1;
+    v2 = GTS_SEGMENT (e1)->v1;
+    v3 = GTS_SEGMENT (e1)->v2;
+  }
+  else if (GTS_SEGMENT (e1)->v1 == GTS_SEGMENT (e2)->v1) {
+    v1 = GTS_SEGMENT (e2)->v2;
+    v2 = GTS_SEGMENT (e1)->v2;
+    v3 = GTS_SEGMENT (e1)->v1;
+  }
+  else if (GTS_SEGMENT (e1)->v1 == GTS_SEGMENT (e2)->v2) {
+    v1 = GTS_SEGMENT (e2)->v1;
+    v2 = GTS_SEGMENT (e1)->v2;
+    v3 = GTS_SEGMENT (e1)->v1;
+  }
+  else {
+    v1 = v2 = v3 = NULL;
+    g_assert_not_reached ();
+  }
+
+  e1->triangles = g_slist_remove (e1->triangles, t);
+  e2->triangles = g_slist_remove (e2->triangles, t);
+  e3->triangles = g_slist_remove (e3->triangles, t);
+  
+  if (GTS_OBJECT (e1)->reserved) {
+    dum = (GTS_OBJECT (e1)->reserved);
+    e24 = dum->data;
+    e34 = dum->next->data;
+    v4 = GTS_SEGMENT (e24)->v2;
+    if (GTS_SEGMENT (e24)->v1 == v3) {
+      edum = e34; e34 = e24; e24 = edum;
+    }
+  }
+  else {
+    v4 = (*refine_func) (e1, vertex_class, refine_data);
+    e24 = gts_edge_new (edge_class, v2, v4);
+    e34 = gts_edge_new (edge_class, v3, v4);
+    dum = g_slist_append (NULL, e24);
+    dum = g_slist_append (dum,  e34);
+    GTS_OBJECT (e1)->reserved = dum;
+  }
+  if (GTS_OBJECT (e2)->reserved) {
+    dum = (GTS_OBJECT (e2)->reserved);
+    e35 = dum->data;
+    e15 = dum->next->data;
+    v5 = GTS_SEGMENT (e35)->v2;
+    if (GTS_SEGMENT (e35)->v1 == v1) {
+      edum = e15; e15 = e35; e35 = edum;
+    }
+  }
+  else {
+    v5 = (*refine_func) (e2, vertex_class, refine_data);
+    e35 = gts_edge_new (edge_class, v3, v5);
+    e15 = gts_edge_new (edge_class, v1, v5);
+    dum = g_slist_append (NULL, e35);
+    dum = g_slist_append (dum,  e15);
+    GTS_OBJECT (e2)->reserved = dum;
+  }
+  if (GTS_OBJECT (e3)->reserved) {
+    dum = (GTS_OBJECT (e3)->reserved);
+    e16 = dum->data;
+    e26 = dum->next->data;
+    v6 = GTS_SEGMENT (e16)->v2;
+    if (GTS_SEGMENT (e16)->v1 == v2) {
+      edum = e16; e16 = e26; e26 = edum;
+    }
+  }
+  else {
+    v6 = (*refine_func) (e3, vertex_class, refine_data);
+    e16 = gts_edge_new (edge_class, v1, v6);
+    e26 = gts_edge_new (edge_class, v2, v6);
+    dum = g_slist_append (NULL, e16);
+    dum = g_slist_append (dum,  e26);
+    GTS_OBJECT (e3)->reserved = dum;
+  }
+  
+  if (e1->triangles == NULL) {
+    g_slist_free (GTS_OBJECT (e1)->reserved);
+    GTS_OBJECT (e1)->reserved = NULL;
+    gts_object_destroy (GTS_OBJECT (e1));
+    e1 = NULL;
+  }
+  if (e2->triangles == NULL) {
+    g_slist_free (GTS_OBJECT (e2)->reserved);
+    GTS_OBJECT (e2)->reserved = NULL;
+    gts_object_destroy (GTS_OBJECT (e2));
+    e2 = NULL;
+  }
+  if (e3->triangles == NULL) {
+    g_slist_free (GTS_OBJECT (e3)->reserved);
+    GTS_OBJECT (e3)->reserved = NULL;
+    gts_object_destroy (GTS_OBJECT (e3));
+    e3 = NULL;
+  }
+
+  e56 = gts_edge_new (edge_class, v5, v6);
+  e64 = gts_edge_new (edge_class, v6, v4);
+  e45 = gts_edge_new (edge_class, v4, v5);
+  t->e1 = e56; e56->triangles = g_slist_prepend (e56->triangles, t);
+  t->e2 = e64; e64->triangles = g_slist_prepend (e64->triangles, t);
+  t->e3 = e45; e45->triangles = g_slist_prepend (e45->triangles, t);
+  
+  gts_surface_add_face (s, gts_face_new (s->face_class, e16, e56, e15));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e26, e24, e64));
+  gts_surface_add_face (s, gts_face_new (s->face_class, e45, e34, e35)); 
+}
+
+static void create_array_tessellate (GtsFace * f, GPtrArray * array)
+{
+  g_ptr_array_add (array, f);
+}
+
+/**
+ * gts_surface_tessellate:
+ * @s: a #GtsSurface.
+ * @refine_func: a #GtsRefineFunc.
+ * @refine_data: user data to be passed to @refine_func.
+ *
+ * Tessellate each triangle of @s with 4 triangles:   
+ * the number of triangles is increased by a factor of 4.
+ * http://mathworld.wolfram.com/GeodesicDome.html
+ *
+ * If @refine_func is set to %NULL a mid arc function is used: if
+ * the surface is a polyhedron with the unit sphere as circum sphere,
+ * then gts_surface_tessellate() corresponds to a geodesation step
+ * (see gts_surface_generate_sphere()).
+ * 
+ */
+void gts_surface_tessellate (GtsSurface * s,
+			     GtsRefineFunc refine_func,
+			     gpointer refine_data)
+{
+  GPtrArray * array;
+  guint i;
+
+  g_return_if_fail (s != NULL);
+  
+  if (refine_func == NULL) /* tessellate_surface == geodesate_surface */
+    refine_func = (GtsRefineFunc) unit_sphere_arc_midvertex;
+
+  array = g_ptr_array_new ();
+  gts_surface_foreach_face (s, (GtsFunc) create_array_tessellate, array);
+  for(i = 0; i < array->len; i++)
+    tessellate_face (g_ptr_array_index (array, i),
+		     s, refine_func, refine_data, 
+		     s->vertex_class, s->edge_class);
+  g_ptr_array_free (array, TRUE);
+}
+
+/**
+ * gts_surface_generate_sphere:
+ * @s: a #GtsSurface.
+ * @geodesation_order: a #guint.
+ *
+ * Add a triangulated unit sphere generated by recursive subdivision to @s.
+ * First approximation is an isocahedron; each level of refinement
+ * (@geodesation_order) increases the number of triangles by a factor of 4.
+ * http://mathworld.wolfram.com/GeodesicDome.html
+ *
+ * Returns: @s.
+ */
+GtsSurface * gts_surface_generate_sphere (GtsSurface * s, 
+					  guint geodesation_order)
+{
+  guint cgo; 
+
+  g_return_val_if_fail (s != NULL, NULL);
+  g_return_val_if_fail (geodesation_order != 0, NULL);
+
+  generate_icosahedron (s);
+
+  for (cgo = 1; cgo < geodesation_order; cgo++)
+    gts_surface_tessellate (s, NULL, NULL);
+  
+  return s;
+}
+
 static void foreach_vertex_copy (GtsPoint * p, GtsVertexClass * klass)
 {
   GTS_OBJECT (p)->reserved = gts_vertex_new (klass, p->x, p->y, p->z);
@@ -1819,6 +2277,127 @@ gdouble gts_surface_volume (GtsSurface * s)
   return volume/6.;
 }
 
+static void center_of_mass_foreach_face (GtsTriangle * t,
+					 gpointer * data)
+{
+  GtsVertex * v1, * v2, * v3;
+  GtsPoint * p1, * p2, * p3;
+  gdouble x1, y1, z1, x2, y2, z2, nx, ny, nz;
+  gdouble * volume = data[0];
+  gdouble * cm = data[1];
+
+  gts_triangle_vertices (t, &v1, &v2, &v3);
+  p1 = GTS_POINT (v1);
+  p2 = GTS_POINT (v2);
+  p3 = GTS_POINT (v3);
+
+  x1 = p2->x - p1->x;
+  y1 = p2->y - p1->y;
+  z1 = p2->z - p1->z;
+
+  x2 = p3->x - p1->x;
+  y2 = p3->y - p1->y;
+  z2 = p3->z - p1->z;
+  
+  nx = y1*z2 - z1*y2;
+  ny = z1*x2 - x1*z2;
+  nz = x1*y2 - y1*x2;
+
+  cm[0] += nx*(p1->x*p1->x + p2->x*p2->x + p3->x*p3->x + 
+	       p1->x*p2->x + p1->x*p3->x + p2->x*p3->x);
+  cm[1] += ny*(p1->y*p1->y + p2->y*p2->y + p3->y*p3->y + 
+	       p1->y*p2->y + p1->y*p3->y + p2->y*p3->y);
+  cm[2] += nz*(p1->z*p1->z + p2->z*p2->z + p3->z*p3->z + 
+	       p1->z*p2->z + p1->z*p3->z + p2->z*p3->z);
+
+  *volume += nx*(p1->x + p2->x + p3->x);
+}
+
+
+/**
+ * gts_surface_center_of_mass:
+ * @s: a #GtsSurface.
+ * @cm: a #GtsVector.
+ *
+ * Fills @cm with the coordinates of the center of mass of @s.
+ *
+ * Returns: the signed volume of the domain bounded by the surface @s.
+ */
+gdouble gts_surface_center_of_mass (GtsSurface * s,
+				    GtsVector cm)
+{
+  gdouble volume = 0.;
+  gpointer data[2];
+
+  g_return_val_if_fail (s != NULL, 0.0);
+
+  data[0] = &volume;
+  data[1] = &(cm[0]);
+  cm[0] = cm[1] = cm[2] = 0.;
+  gts_surface_foreach_face (s, (GtsFunc) center_of_mass_foreach_face, data);
+  
+  if (volume != 0.) {
+    cm[0] /= 4.*volume;
+    cm[1] /= 4.*volume;
+    cm[2] /= 4.*volume;
+  }
+
+  return volume/6.;
+}
+
+static void center_of_area_foreach_face (GtsTriangle * t,
+					 gpointer * data)
+{
+  GtsVertex * v1, * v2, * v3;
+  GtsPoint * p1, * p2, * p3;
+  gdouble a;
+  gdouble * area = data[0];
+  gdouble * cm = data[1];
+
+  gts_triangle_vertices (t, &v1, &v2, &v3);
+  p1 = GTS_POINT (v1);
+  p2 = GTS_POINT (v2);
+  p3 = GTS_POINT (v3);
+
+  a = gts_triangle_area (t);
+  cm[0] += a*(p1->x + p2->x + p3->x);
+  cm[1] += a*(p1->y + p2->y + p3->y);
+  cm[2] += a*(p1->z + p2->z + p3->z);
+  *area += a;
+}
+
+
+/**
+ * gts_surface_center_of_area:
+ * @s: a #GtsSurface.
+ * @cm: a #GtsVector.
+ *
+ * Fills @cm with the coordinates of the center of area of @s.
+ *
+ * Returns: the area of surface @s.
+ */
+gdouble gts_surface_center_of_area (GtsSurface * s,
+				    GtsVector cm)
+{
+  gdouble area = 0.;
+  gpointer data[2];
+
+  g_return_val_if_fail (s != NULL, 0.0);
+
+  data[0] = &area;
+  data[1] = &(cm[0]);
+  cm[0] = cm[1] = cm[2] = 0.;
+  gts_surface_foreach_face (s, (GtsFunc) center_of_area_foreach_face, data);
+  
+  if (area != 0.) {
+    cm[0] /= 3.*area;
+    cm[1] /= 3.*area;
+    cm[2] /= 3.*area;
+  }
+
+  return area;
+}
+
 static void number_foreach (gpointer data, guint * n)
 {
   (*n)++;
@@ -1868,7 +2447,11 @@ guint gts_surface_face_number (GtsSurface * s)
 {
   g_return_val_if_fail (s != NULL, 0);
 
+#ifdef USE_SURFACE_BTREE
+  return g_tree_nnodes (s->faces);
+#else /* not USE_SURFACE_BTREE */
   return g_hash_table_size (s->faces);
+#endif /* not USE_SURFACE_BTREE */
 }
 
 static void build_list_face (GtsTriangle * t, GSList ** list)
@@ -2054,3 +2637,131 @@ void gts_surface_traverse_destroy (GtsSurfaceTraverse * t)
   g_free (t);
 }
 
+static void traverse_manifold (GtsTriangle * t, GtsSurface * s)
+{
+  if (g_slist_length (GTS_FACE (t)->surfaces) > 1)
+    return;
+
+  gts_surface_add_face (s, GTS_FACE (t));
+  if (g_slist_length (t->e1->triangles) == 2) {
+    if (t->e1->triangles->data != t)
+      traverse_manifold (t->e1->triangles->data, s);
+    else
+      traverse_manifold (t->e1->triangles->next->data, s);
+  }
+  if (g_slist_length (t->e2->triangles) == 2) {
+    if (t->e2->triangles->data != t)
+      traverse_manifold (t->e2->triangles->data, s);
+    else
+      traverse_manifold (t->e2->triangles->next->data, s);
+  }
+  if (g_slist_length (t->e3->triangles) == 2) {
+    if (t->e3->triangles->data != t)
+      traverse_manifold (t->e3->triangles->data, s);
+    else
+      traverse_manifold (t->e3->triangles->next->data, s);
+  }
+}
+
+static void non_manifold_edges (GtsEdge * e, gpointer * data)
+{
+  GtsSurface * s = data[0];
+  GSList ** non_manifold = data[1];
+
+  if (gts_edge_face_number (e, s) > 2) {
+    GSList * i = e->triangles;
+
+    while (i) {
+      if (gts_face_has_parent_surface (i->data, s) &&
+	  !g_slist_find (*non_manifold, i->data))
+	*non_manifold = g_slist_prepend (*non_manifold, i->data);
+      i = i->next;
+    }
+  }
+}
+
+static void traverse_boundary (GtsEdge * e, gpointer * data)
+{
+  GtsSurface * orig = data[0];
+  GSList ** components = data[1];
+  GtsFace * f = gts_edge_is_boundary (e, orig);
+
+  if (f != NULL && g_slist_length (f->surfaces) == 1) {
+    GtsSurface * s = 
+      gts_surface_new (GTS_SURFACE_CLASS (GTS_OBJECT (orig)->klass),
+		       orig->face_class,
+		       orig->edge_class,
+		       orig->vertex_class);
+    GSList * non_manifold = NULL, * i;
+    gpointer data[2];
+
+    *components = g_slist_prepend (*components, s);
+    data[0] = s;
+    data[1] = &non_manifold;
+    traverse_manifold (GTS_TRIANGLE (f), s);
+
+    gts_surface_foreach_edge (s, (GtsFunc) non_manifold_edges, data);
+    i = non_manifold;
+    while (i) {
+      gts_surface_remove_face (s, i->data);
+      i = i->next;
+    }
+    g_slist_free (non_manifold);
+  }
+}
+
+static void traverse_remaining (GtsFace * f, gpointer * data)
+{
+  GtsSurface * orig = data[0];
+  GSList ** components = data[1];
+
+  if (g_slist_length (f->surfaces) == 1) {
+    GtsSurface * s = 
+      gts_surface_new (GTS_SURFACE_CLASS (GTS_OBJECT (orig)->klass),
+		       orig->face_class,
+		       orig->edge_class,
+		       orig->vertex_class);
+    GSList * non_manifold = NULL, * i;
+    gpointer data[2];
+
+    *components = g_slist_prepend (*components, s);
+    data[0] = s;
+    data[1] = &non_manifold;
+    traverse_manifold (GTS_TRIANGLE (f), s);
+
+    gts_surface_foreach_edge (s, (GtsFunc) non_manifold_edges, data);
+    i = non_manifold;
+    while (i) {
+      gts_surface_remove_face (s, i->data);
+      i = i->next;
+    }
+    g_slist_free (non_manifold);
+  }
+}
+
+/**
+ * gts_surface_split:
+ * @s: a #GtsSurface.
+ *
+ * Splits a surface into connected and manifold components.
+ * 
+ * Returns: a list of new #GtsSurface.
+ */
+GSList * gts_surface_split (GtsSurface * s)
+{
+  gpointer data[2];
+  GSList * components = NULL;
+
+  g_return_val_if_fail (s != NULL, NULL);
+
+  data[0] = s;
+  data[1] = &components;
+
+  /* boundary components */
+  gts_surface_foreach_edge (s, (GtsFunc) traverse_boundary, data);
+
+  /* remaining components */
+  gts_surface_foreach_face (s, (GtsFunc) traverse_remaining, data);
+
+  return components;
+}
diff --git a/src/triangle.c b/src/triangle.c
index 72c13e8..e286fd8 100644
--- a/src/triangle.c
+++ b/src/triangle.c
@@ -20,10 +20,6 @@
 #include <math.h>
 #include "gts.h"
 
-#ifndef PI
-#define PI 3.14159265359
-#endif
-
 static void triangle_destroy (GtsObject * object)
 {
   GtsTriangle * triangle = GTS_TRIANGLE (object);
@@ -244,8 +240,8 @@ gdouble gts_triangles_angle (GtsTriangle * t1,
   pvz = nx1*ny2 - ny1*nx2;
 
   theta = atan2 (sqrt (pvx*pvx + pvy*pvy + pvz*pvz), 
-		 nx1*nx2 + ny1*ny2 + nz1*nz2) - PI;
-  return theta < - PI ? theta + 2.*PI : theta;
+		 nx1*nx2 + ny1*ny2 + nz1*nz2) - M_PI;
+  return theta < - M_PI ? theta + 2.*M_PI : theta;
 }
 
 /**
diff --git a/src/vertex.c b/src/vertex.c
index 9767ea8..d312869 100644
--- a/src/vertex.c
+++ b/src/vertex.c
@@ -52,6 +52,7 @@ static void vertex_clone (GtsObject * clone, GtsObject * object)
 
 static void vertex_class_init (GtsVertexClass * klass)
 {
+  klass->intersection_attributes = NULL;
   GTS_OBJECT_CLASS (klass)->clone = vertex_clone;
   GTS_OBJECT_CLASS (klass)->destroy = vertex_destroy;
 }
@@ -171,6 +172,7 @@ GtsSegment * gts_vertices_are_connected (GtsVertex * v1, GtsVertex * v2)
   i = v1->segments;
   while (i) {
     GtsSegment * s = i->data;
+
     if (s->v1 == v2 || s->v2 == v2)
       return s;
     i = i->next;
@@ -347,16 +349,20 @@ gboolean gts_vertex_is_boundary (GtsVertex * v, GtsSurface * surface)
  * gts_vertices_merge:
  * @vertices: a list of #GtsVertex.
  * @epsilon: half the size of the bounding box to consider for each vertex.
+ * @check: function called for each pair of vertices about to be merged
+ * or %NULL.
  *
  * For each vertex v in @vertices look if there are any vertex of
  * @vertices contained in a box centered on v of size 2*@epsilon. If
- * there are, replace them with v (using gts_vertex_replace()),
- * destroy them and remove them from list.  This is done efficiently
- * using Kd-Trees.
+ * there are and if @check is not %NULL and returns %TRUE, replace
+ * them with v (using gts_vertex_replace()), destroy them and remove
+ * them from list.  This is done efficiently using Kd-Trees.
  *
  * Returns: the updated list of vertices.  
  */
-GList * gts_vertices_merge (GList * vertices, gdouble epsilon)
+GList * gts_vertices_merge (GList * vertices, 
+			    gdouble epsilon,
+			    gboolean (* check) (GtsVertex *, GtsVertex *))
 {
   GPtrArray * array;
   GList * i;
@@ -394,7 +400,7 @@ GList * gts_vertices_merge (GList * vertices, gdouble epsilon)
       j = selected = gts_kdtree_range (kdtree, bbox, NULL);
       while (j) {
 	GtsVertex * sv = j->data;
-	if (sv != v && !GTS_OBJECT (sv)->reserved) {
+	if (sv != v && !GTS_OBJECT (sv)->reserved && (!check || (*check) (sv, v))) {
 	  /* sv is not v and is active */
 	  gts_vertex_replace (sv, v);
 	  GTS_OBJECT (sv)->reserved = sv; /* mark sv as inactive */
@@ -646,3 +652,129 @@ guint gts_vertex_is_contact (GtsVertex * v, gboolean sever)
 
   return ncomponent;
 }
+
+/* GtsVertexNormal: Object */
+
+static void vertex_normal_attributes (GtsVertex * v,
+				      GtsObject * e,
+				      GtsObject * t)
+{
+  g_return_if_fail (GTS_IS_EDGE (e));
+  g_return_if_fail (GTS_IS_TRIANGLE (t));
+
+  if (GTS_IS_VERTEX_NORMAL (GTS_SEGMENT (e)->v1) &&
+      GTS_IS_VERTEX_NORMAL (GTS_SEGMENT (e)->v2)) {
+    GtsPoint * p1 = GTS_POINT (GTS_SEGMENT (e)->v1);
+    GtsPoint * p2 = GTS_POINT (GTS_SEGMENT (e)->v2);
+    GtsPoint * p = GTS_POINT (v);
+    gdouble a, b, lambda;
+    guint i;
+
+    a = p2->x - p1->x; b = p->x - p1->x;
+    if (fabs (p2->y - p1->y) > fabs (a)) {
+      a = p2->y - p1->y; b = p->y - p1->y;      
+    }
+    if (fabs (p2->z - p1->z) > fabs (a)) {
+      a = p2->z - p1->z; b = p->z - p1->z;      
+    }
+    lambda = a != 0. ? b/a : 0.;
+    for (i = 0; i < 3; i++)
+      GTS_VERTEX_NORMAL (v)->n[i] = 
+	(1. - lambda)*GTS_VERTEX_NORMAL (GTS_SEGMENT (e)->v1)->n[i] +
+	lambda*GTS_VERTEX_NORMAL (GTS_SEGMENT (e)->v2)->n[i];
+  }
+  else {
+    GtsVertex * v1, * v2, * v3;
+
+    gts_triangle_vertices (GTS_TRIANGLE (t), &v1, &v2, &v3);
+    if (GTS_IS_VERTEX_NORMAL (v1) && 
+	GTS_IS_VERTEX_NORMAL (v2) &&
+	GTS_IS_VERTEX_NORMAL (v3)) {
+      GtsVector a1, a2, a3, det;
+      guint i, j = 0;
+      gdouble l1, l2;
+
+      gts_vector_init (a1, GTS_POINT (v1), GTS_POINT (v));
+      gts_vector_init (a2, GTS_POINT (v1), GTS_POINT (v2));
+      gts_vector_init (a3, GTS_POINT (v1), GTS_POINT (v3));
+      gts_vector_cross (det, a2, a3);
+      if (fabs (det[1]) > fabs (det[0])) j = 1;
+      if (fabs (det[2]) > fabs (det[j])) j = 2;
+      if (det[j] == 0.) {
+	g_warning ("vertex_normal_attributes: det[%d] == 0.", j);
+	return;
+      }
+      switch (j) {
+      case 0: 
+	l1 = (a1[1]*a3[2] - a1[2]*a3[1])/det[0]; 
+	l2 = (a1[2]*a2[1] - a1[1]*a2[2])/det[0]; 
+	break;
+      case 1:
+	l1 = (a1[2]*a3[0] - a1[0]*a3[2])/det[1];
+	l2 = (a1[0]*a2[2] - a1[2]*a2[0])/det[1];
+	break;
+      case 2:
+	l1 = (a1[0]*a3[1] - a1[1]*a3[0])/det[2];
+	l2 = (a1[1]*a2[0] - a1[0]*a2[1])/det[2];
+	break;
+      default:
+	l1 = l2 = 0.;
+      }
+      for (i = 0; i < 3; i++)
+	GTS_VERTEX_NORMAL (v)->n[i] = 
+	  GTS_VERTEX_NORMAL (v1)->n[i]*(1. - l1 - l2) +
+	  GTS_VERTEX_NORMAL (v2)->n[i]*l1 +
+	  GTS_VERTEX_NORMAL (v3)->n[i]*l2;
+    }
+  }
+}
+
+static void gts_vertex_normal_class_init (GtsVertexClass * klass)
+{
+  klass->intersection_attributes = vertex_normal_attributes;
+}
+
+GtsVertexClass * gts_vertex_normal_class (void)
+{
+  static GtsVertexClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo gts_vertex_normal_info = {
+      "GtsVertexNormal",
+      sizeof (GtsVertexNormal),
+      sizeof (GtsVertexClass),
+      (GtsObjectClassInitFunc) gts_vertex_normal_class_init,
+      (GtsObjectInitFunc) NULL,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()),
+				  &gts_vertex_normal_info);
+  }
+
+  return klass;
+}
+
+/* GtsColorVertex: Object */
+
+GtsVertexClass * gts_color_vertex_class (void)
+{
+  static GtsVertexClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo gts_color_vertex_info = {
+      "GtsColorVertex",
+      sizeof (GtsColorVertex),
+      sizeof (GtsVertexClass),
+      (GtsObjectClassInitFunc) NULL,
+      (GtsObjectInitFunc) NULL,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_vertex_class ()),
+				  &gts_color_vertex_info);
+  }
+
+  return klass;
+}
+
diff --git a/src/vopt.c b/src/vopt.c
index 3cfe2f7..d772af9 100644
--- a/src/vopt.c
+++ b/src/vopt.c
@@ -259,8 +259,8 @@ GtsVertex * gts_volume_optimized_vertex (GtsEdge * edge,
   g_return_val_if_fail (klass != NULL, NULL);
   g_return_val_if_fail (params != NULL, NULL);
 
-  A = gts_matrix_new (0., 0., 0., 0., 0., 0., 0., 0., 0.);
-  Hb = gts_matrix_new (0., 0., 0., 0., 0., 0., 0., 0., 0.);
+  A = gts_matrix_zero (NULL);
+  Hb = gts_matrix_zero (NULL);
   v1 = GTS_SEGMENT (edge)->v1;
   v2 = GTS_SEGMENT (edge)->v2;
 
@@ -290,12 +290,15 @@ GtsVertex * gts_volume_optimized_vertex (GtsEdge * edge,
   }
   if (nb > 0) {
     GtsMatrix * H = gts_matrix_new (
-	       e1[2]*e1[2] + e1[1]*e1[1], - e1[0]*e1[1], - e1[0]*e1[2],
-	     - e1[0]*e1[1], e1[2]*e1[2] + e1[0]*e1[0], - e1[1]*e1[2],
-	     - e1[0]*e1[2], - e1[1]*e1[2], e1[1]*e1[1] + e1[0]*e1[0]);
-    GtsVector c = { e1[1]*e2[2] - e1[2]*e2[1],
-		    e1[2]*e2[0] - e1[0]*e2[2],
-		    e1[0]*e2[1] - e1[1]*e2[0] };
+	       e1[2]*e1[2] + e1[1]*e1[1], - e1[0]*e1[1], - e1[0]*e1[2], 0.,
+	       - e1[0]*e1[1], e1[2]*e1[2] + e1[0]*e1[0], - e1[1]*e1[2], 0.,
+	       - e1[0]*e1[2], - e1[1]*e1[2], e1[1]*e1[1] + e1[0]*e1[0], 0.,
+	       0., 0., 0., 0.);
+    GtsVector c;
+
+    c[0] = e1[1]*e2[2] - e1[2]*e2[1];
+    c[1] = e1[2]*e2[0] - e1[0]*e2[2];
+    c[2] = e1[0]*e2[1] - e1[1]*e2[0];
     n = gts_matrix_quadratic_optimization (A, b, n, H, c);
     gts_matrix_destroy (H);
   }
@@ -343,15 +346,17 @@ GtsVertex * gts_volume_optimized_vertex (GtsEdge * edge,
 #if 1 /* Weighted average of volume and boundary optimization */
   if (n < 3) {
     /* volume optimization and boundary optimization */
-    GtsMatrix * H = gts_matrix_new (sn11, sn12, sn13,
-				    sn12, sn22, sn23,
-				    sn13, sn23, sn33);
-    GtsVector c = { - stn1, - stn2, - stn3};
+    GtsMatrix * H = gts_matrix_new (sn11, sn12, sn13, 0.,
+				    sn12, sn22, sn23, 0.,
+				    sn13, sn23, sn33, 0.,
+				    0., 0., 0., 0.);
+    GtsVector c;
     gdouble le = 9.*params->boundary_weight*
       gts_point_distance2 (GTS_POINT (v1), 
 			   GTS_POINT (v2));
     guint i, j;
 
+    c[0] = - stn1; c[1] = - stn2; c[2] = - stn3;
     if (nb > 0)
       for (i = 0; i < 3; i++) {
 	for (j = 0; j < 3; j++)
@@ -394,9 +399,10 @@ GtsVertex * gts_volume_optimized_vertex (GtsEdge * edge,
     }
     g_slist_free (list);
     
-    H = gts_matrix_new (nv, 0., 0.,
-			0., nv, 0.,
-			0., 0., nv);
+    H = gts_matrix_new (nv, 0., 0., 0.,
+			0., nv, 0., 0.,
+			0., 0., nv, 0.,
+			0., 0., 0., 0.);
     n = gts_matrix_quadratic_optimization (A, b, n, H, c);
     gts_matrix_destroy (H);
   }
@@ -469,7 +475,7 @@ GtsVertex * gts_volume_optimized_vertex (GtsEdge * edge,
 #endif /* Weighted average of volume, boundary and shape optimization */
 
   g_assert (n == 3);
-  g_assert ((Ai = gts_matrix_inverse (A)));
+  g_assert ((Ai = gts_matrix3_inverse (A)));
 
   v = gts_vertex_new (klass,
 		      Ai[0][0]*b[0] + Ai[0][1]*b[1] + Ai[0][2]*b[2],
diff --git a/stamp-h.in b/stamp-h.in
deleted file mode 100644
index 9788f70..0000000
--- a/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/test/Makefile.in b/test/Makefile.in
index 8e260e2..570e802 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,44 +73,119 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
 SUBDIRS = boolean delaunay coarsen
+subdir = test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES = 
-DIST_COMMON =  Makefile.am Makefile.in
-
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
+	ps-recursive install-info-recursive uninstall-info-recursive \
+	all-recursive install-data-recursive install-exec-recursive \
+	installdirs-recursive install-recursive uninstall-recursive \
+	check-recursive installcheck-recursive
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+DIST_SUBDIRS = $(SUBDIRS)
+all: all-recursive
 
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = gtar
-GZIP_ENV = --best
-all: all-redirect
 .SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps test/Makefile
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  test/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+
+mostlyclean-libtool:
+	-rm -f *.lo
 
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+clean-libtool:
+	-rm -rf .libs _libs
 
+distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -118,13 +193,8 @@ Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
 # (1) if the variable is set in `config.status', edit `config.status'
 #     (which will cause the Makefiles to be regenerated when you run `make');
 # (2) otherwise, pass the desired values on the `make' command line.
-
- at SET_MAKE@
-
-all-recursive install-data-recursive install-exec-recursive \
-installdirs-recursive install-recursive uninstall-recursive  \
-check-recursive installcheck-recursive info-recursive dvi-recursive:
-	@set fnord $(MAKEFLAGS); amf=$$2; \
+$(RECURSIVE_TARGETS):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
 	dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -144,13 +214,18 @@ check-recursive installcheck-recursive info-recursive dvi-recursive:
 
 mostlyclean-recursive clean-recursive distclean-recursive \
 maintainer-clean-recursive:
-	@set fnord $(MAKEFLAGS); amf=$$2; \
+	@set fnord $$MAKEFLAGS; amf=$$2; \
 	dot_seen=no; \
-	rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
-	  rev="$$subdir $$rev"; \
-	  test "$$subdir" = "." && dot_seen=yes; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
 	done; \
-	test "$$dot_seen" = "no" && rev=". $$rev"; \
+	rev="$$rev ."; \
 	target=`echo $@ | sed s/-recursive//`; \
 	for subdir in $$rev; do \
 	  echo "Making $$target in $$subdir"; \
@@ -166,135 +241,213 @@ tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
 	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
+	if (etags --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	else \
+	  include_option=--include; \
+	fi; \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-   if test "$$subdir" = .; then :; else \
-	    test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
-   fi; \
+	  if test "$$subdir" = .; then :; else \
+	    test -f $$subdir/TAGS && \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
 	done; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = test
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-	for subdir in $(SUBDIRS); do \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test -d $(distdir)/$$subdir \
 	    || mkdir $(distdir)/$$subdir \
 	    || exit 1; \
-	    chmod 777 $(distdir)/$$subdir; \
-	    (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$(top_distdir)" \
+	        distdir=../$(distdir)/$$subdir \
+	        distdir) \
 	      || exit 1; \
 	  fi; \
 	done
-info-am:
-info: info-recursive
-dvi-am:
-dvi: dvi-recursive
 check-am: all-am
 check: check-recursive
-installcheck-am:
-installcheck: installcheck-recursive
-install-exec-am:
-install-exec: install-exec-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
 
-install-data-am:
+install: install-recursive
+install-exec: install-exec-recursive
 install-data: install-data-recursive
+uninstall: uninstall-recursive
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-recursive
-uninstall-am:
-uninstall: uninstall-recursive
-all-am: Makefile
-all-redirect: all-recursive
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs: installdirs-recursive
-installdirs-am:
-
 
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-tags mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
 
-mostlyclean: mostlyclean-recursive
+clean-am: clean-generic clean-libtool mostlyclean-am
 
-clean-am:  clean-tags clean-generic mostlyclean-am
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
 
-clean: clean-recursive
+dvi: dvi-recursive
 
-distclean-am:  distclean-tags distclean-generic clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-recursive
+info: info-recursive
 
-maintainer-clean-am:  maintainer-clean-tags maintainer-clean-generic \
-		distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
 
-.PHONY: install-data-recursive uninstall-data-recursive \
-install-exec-recursive uninstall-exec-recursive installdirs-recursive \
-uninstalldirs-recursive all-recursive check-recursive \
-installcheck-recursive info-recursive dvi-recursive \
-mostlyclean-recursive distclean-recursive clean-recursive \
-maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs-am \
-installdirs mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+uninstall-info: uninstall-info-recursive
 
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
+	clean-generic clean-libtool clean-recursive ctags \
+	ctags-recursive distclean distclean-generic distclean-libtool \
+	distclean-recursive distclean-tags distdir dvi dvi-am \
+	dvi-recursive info info-am info-recursive install install-am \
+	install-data install-data-am install-data-recursive \
+	install-exec install-exec-am install-exec-recursive \
+	install-info install-info-am install-info-recursive install-man \
+	install-recursive install-strip installcheck installcheck-am \
+	installdirs installdirs-am installdirs-recursive \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-libtool mostlyclean-recursive pdf pdf-am \
+	pdf-recursive ps ps-am ps-recursive tags tags-recursive \
+	uninstall uninstall-am uninstall-info-am \
+	uninstall-info-recursive uninstall-recursive
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/boolean/Makefile.am b/test/boolean/Makefile.am
index da3c974..fb6fd0c 100644
--- a/test/boolean/Makefile.am
+++ b/test/boolean/Makefile.am
@@ -5,69 +5,8 @@ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
 
-check_PROGRAMS = set boole
+check_PROGRAMS = set boole cubes
 
-## Basic tests
-TESTS = set_t1_t2.sh \
-	set_t1_t3.sh \
-	set_t1_t4.sh \
-	set_t1_t5.sh \
-	set_t1_t6.sh \
-	set_t1_t7.sh \
-	set_t1_t9.sh \
-	set_t1_t10.sh \
-	set_t1_t11.sh \
-	set_t1_t12.sh \
-	set_t1_t13.sh \
-	set_t14_t15.sh \
-	set_t11_t16.sh \
-	set_t17_t18.sh \
-	set_t19_t20.sh \
-	set_t19_t21.sh \
-## Various cubes
-	set_cube_cube2.sh \
-	set_cube_cube1.sh \
-	set_t1_t22.sh \
-	set_t1_t23.sh \
-	set_t1_t24.sh \
-	set_t27_t28.sh \
-## Boolean operations
-	boole_cube_cube1.sh \
-	boole_cube_cube5.sh \
-## Floating point problems
-	set_t25_t26.sh \
-## Coincident faces
-	set_cube_cube4.sh \
-## Rotated cube cube1 (touching faces)
-	set_cube6_cube7.sh \
-## Coincident faces (tetrahedra by T. Binder)
-	set_loc1_loc2.sh \
-## Coincident faces (again by T. Binder)
-	set_p1_p2.sh \
-## Menger sponge (by B. Petit)
-	set_sponge_cutter.sh \
-## cylinders (by Darie Aron)
-	set_1_2.sh
+TESTS = test.sh
 
-XFAIL_TESTS = set_t25_t26.sh set_cube_cube4.sh set_cube6_cube7.sh set_loc1_loc2.sh set_p1_p2.sh set_sponge_cutter.sh set_1_2.sh
-
-EXTRA_DIST = t1 t2 t3 t4 t5 t6 t7 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 \
-	t20 t21 t22 t23 t24 t25 t26 t27 t28 cube cube1 cube2 cube4 cube5 cube6 cube7 \
-	loc1 loc2 \
-	p1 p2 \
-	sponge cutter \
-	1.gts 2.gts \
-	$(TESTS) \
-	set_t1_t2 set_t1_t3 set_t1_t4 set_t1_t5 set_t1_t6 set_t1_t7 set_t1_t9 \
-	set_t1_t10 set_t1_t11 set_t1_t12 set_t1_t13 set_t14_t15 set_t11_t16 \
-	set_t17_t18 set_t19_t20 set_t19_t21 \
-	set_cube_cube2 set_cube_cube1 \
-	set_t1_t22 set_t1_t23 set_t1_t24 boole_cube_cube1 boole_cube_cube5 \
-	set.sh boole.sh \
-	set_t27_t28 set_loc1_loc2.sh set_p1_p2.sh set_sponge_cutter.sh \
-	set_1_2.sh
-
-test-cleanup:
-	rm -f errors
-
-check-TESTS: test-cleanup
+EXTRA_DIST = $(TESTS) tests surfaces
diff --git a/test/boolean/Makefile.in b/test/boolean/Makefile.in
index eee1a60..4ef68c6 100644
--- a/test/boolean/Makefile.in
+++ b/test/boolean/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ../..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,115 +73,203 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir) 	 -DG_LOG_DOMAIN=\"Gts-test\"
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
+	 -DG_LOG_DOMAIN=\"Gts-test\"
 
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
 
-check_PROGRAMS = set boole
-
-TESTS = set_t1_t2.sh 	set_t1_t3.sh 	set_t1_t4.sh 	set_t1_t5.sh 	set_t1_t6.sh 	set_t1_t7.sh 	set_t1_t9.sh 	set_t1_t10.sh 	set_t1_t11.sh 	set_t1_t12.sh 	set_t1_t13.sh 	set_t14_t15.sh 	set_t11_t16.sh 	set_t17_t18.sh 	set_t19_t20.sh 	set_t19_t21.sh 	set_cube_cube2.sh 	set_cube_cube1.sh 	set_t1_t22.sh 	set_t1_t23.sh 	set_t1_t24.sh 	set_t27_t28.sh 	boole_cube_cube1.sh 	boole_cube_cube5.sh 	set_t25_t26.sh 	set_cube_cube4.sh 	set_cube6_cube7.sh 	set_loc1_loc2.sh 	set_p1_p2.sh 	set_sponge_cutter. [...]
-
+check_PROGRAMS = set boole cubes
 
-XFAIL_TESTS = set_t25_t26.sh set_cube_cube4.sh set_cube6_cube7.sh set_loc1_loc2.sh set_p1_p2.sh set_sponge_cutter.sh set_1_2.sh
-
-EXTRA_DIST = t1 t2 t3 t4 t5 t6 t7 t9 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 	t20 t21 t22 t23 t24 t25 t26 t27 t28 cube cube1 cube2 cube4 cube5 cube6 cube7 	loc1 loc2 	p1 p2 	sponge cutter 	1.gts 2.gts 	$(TESTS) 	set_t1_t2 set_t1_t3 set_t1_t4 set_t1_t5 set_t1_t6 set_t1_t7 set_t1_t9 	set_t1_t10 set_t1_t11 set_t1_t12 set_t1_t13 set_t14_t15 set_t11_t16 	set_t17_t18 set_t19_t20 set_t19_t21 	set_cube_cube2 set_cube_cube1 	set_t1_t22 set_t1_t23 set_t1_t24 boole_cube_cube1 boole_cube_cube5 	set. [...]
+TESTS = test.sh
 
+EXTRA_DIST = $(TESTS) tests surfaces
+subdir = test/boolean
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../../config.h
-CONFIG_CLEAN_FILES = 
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I../..
-LIBS = @LIBS@
-set_SOURCES = set.c
-set_OBJECTS =  set.o
-set_LDADD = $(LDADD)
-set_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-set_LDFLAGS = 
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+check_PROGRAMS = set$(EXEEXT) boole$(EXEEXT) cubes$(EXEEXT)
 boole_SOURCES = boole.c
-boole_OBJECTS =  boole.o
+boole_OBJECTS = boole.$(OBJEXT)
 boole_LDADD = $(LDADD)
-boole_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-boole_LDFLAGS = 
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+boole_DEPENDENCIES = $(top_builddir)/src/libgts.la
+boole_LDFLAGS =
+cubes_SOURCES = cubes.c
+cubes_OBJECTS = cubes.$(OBJEXT)
+cubes_LDADD = $(LDADD)
+cubes_DEPENDENCIES = $(top_builddir)/src/libgts.la
+cubes_LDFLAGS =
+set_SOURCES = set.c
+set_OBJECTS = set.$(OBJEXT)
+set_LDADD = $(LDADD)
+set_DEPENDENCIES = $(top_builddir)/src/libgts.la
+set_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/boole.Po ./$(DEPDIR)/cubes.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/set.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON =  Makefile.am Makefile.in
-
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = boole.c cubes.c set.c
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+SOURCES = boole.c cubes.c set.c
 
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+all: all-am
 
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = set.c boole.c
-OBJECTS = set.o boole.o
-
-all: all-redirect
 .SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps test/boolean/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-checkPROGRAMS:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  test/boolean/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 
 clean-checkPROGRAMS:
-	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
-
-distclean-checkPROGRAMS:
-
-maintainer-clean-checkPROGRAMS:
-
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
-
-.S.o:
-	$(COMPILE) -c $<
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+boole$(EXEEXT): $(boole_OBJECTS) $(boole_DEPENDENCIES) 
+	@rm -f boole$(EXEEXT)
+	$(LINK) $(boole_LDFLAGS) $(boole_OBJECTS) $(boole_LDADD) $(LIBS)
+cubes$(EXEEXT): $(cubes_OBJECTS) $(cubes_DEPENDENCIES) 
+	@rm -f cubes$(EXEEXT)
+	$(LINK) $(cubes_LDFLAGS) $(cubes_OBJECTS) $(cubes_LDADD) $(LIBS)
+set$(EXEEXT): $(set_OBJECTS) $(set_DEPENDENCIES) 
+	@rm -f set$(EXEEXT)
+	$(LINK) $(set_LDFLAGS) $(set_OBJECTS) $(set_LDADD) $(LIBS)
 
 mostlyclean-compile:
-	-rm -f *.o core *.core
-
-clean-compile:
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
 
-maintainer-clean-compile:
-
-.c.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/boole.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cubes.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/set.Po at am__quote@
 
-.s.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 
-.S.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -190,170 +278,256 @@ clean-libtool:
 	-rm -rf .libs _libs
 
 distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 
-maintainer-clean-libtool:
+ETAGS = etags
+ETAGSFLAGS =
 
-set: $(set_OBJECTS) $(set_DEPENDENCIES)
-	@rm -f set
-	$(LINK) $(set_LDFLAGS) $(set_OBJECTS) $(set_LDADD) $(LIBS)
-
-boole: $(boole_OBJECTS) $(boole_DEPENDENCIES)
-	@rm -f boole
-	$(LINK) $(boole_LDFLAGS) $(boole_OBJECTS) $(boole_LDADD) $(LIBS)
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
-
-maintainer-clean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = test/boolean
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+	        xpass=`expr $$xpass + 1`; \
+	        failed=`expr $$failed + 1`; \
+	        echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+	        echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+	        xfail=`expr $$xfail + 1`; \
+	        echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+	        failed=`expr $$failed + 1`; \
+	        echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -n "$$skipped" && echo "$$skipped"; \
+	  test -n "$$report" && echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-boole.o: boole.c ../../src/gts.h ../../src/gtsconfig.h
-set.o: set.c ../../src/gts.h ../../src/gtsconfig.h
-
-check-TESTS: $(TESTS)
-	@failed=0; all=0; \
-	srcdir=$(srcdir); export srcdir; \
-	for tst in $(TESTS); do \
-	  if test -f $$tst; then dir=.; \
-	  else dir="$(srcdir)"; fi; \
-	  if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \
-	    all=`expr $$all + 1`; \
-	    echo "PASS: $$tst"; \
-	  elif test $$? -ne 77; then \
-	    all=`expr $$all + 1`; \
-	    failed=`expr $$failed + 1`; \
-	    echo "FAIL: $$tst"; \
-	  fi; \
-	done; \
-	if test "$$failed" -eq 0; then \
-	  banner="All $$all tests passed"; \
-	else \
-	  banner="$$failed of $$all tests failed"; \
-	fi; \
-	dashes=`echo "$$banner" | sed s/./=/g`; \
-	echo "$$dashes"; \
-	echo "$$banner"; \
-	echo "$$dashes"; \
-	test "$$failed" -eq 0
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am:
-install-exec: install-exec-am
+all-am: Makefile
 
-install-data-am:
+installdirs:
+install: install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-checkPROGRAMS mostlyclean-compile \
-		mostlyclean-libtool mostlyclean-tags \
-		mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool mostlyclean-am
 
-clean-am:  clean-checkPROGRAMS clean-compile clean-libtool clean-tags \
-		clean-generic mostlyclean-am
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-checkPROGRAMS distclean-compile \
-		distclean-libtool distclean-tags distclean-generic \
-		clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-checkPROGRAMS \
-		maintainer-clean-compile maintainer-clean-libtool \
-		maintainer-clean-tags maintainer-clean-generic \
-		distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
 
-.PHONY: mostlyclean-checkPROGRAMS distclean-checkPROGRAMS \
-clean-checkPROGRAMS maintainer-clean-checkPROGRAMS mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir check-TESTS info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+ps: ps-am
 
+ps-am:
 
-test-cleanup:
-	rm -f errors
+uninstall-am: uninstall-info-am
 
-check-TESTS: test-cleanup
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/boolean/boole.c b/test/boolean/boole.c
index 1abb429..3ed6aaf 100644
--- a/test/boolean/boole.c
+++ b/test/boolean/boole.c
@@ -19,6 +19,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <math.h>
 #include "gts.h"
 
 static void prepend_triangle_bbox (GtsTriangle * t, GSList ** bboxes)
@@ -27,15 +28,36 @@ static void prepend_triangle_bbox (GtsTriangle * t, GSList ** bboxes)
 			     gts_bbox_triangle (gts_bbox_class (), t));
 }
 
+static void check_edge (GtsEdge * e, gpointer * data)
+{
+  GtsSurface * s1 = data[0];
+  GtsSurface * s2 = data[1];
+  guint * nf = data[2];
+
+  if (gts_edge_is_boundary (e, s1) &&
+      !gts_edge_is_boundary (e, s2)) {
+    GtsPoint * p1 = GTS_POINT (GTS_SEGMENT (e)->v1);
+    GtsPoint * p2 = GTS_POINT (GTS_SEGMENT (e)->v2);
+
+    printf ("VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
+	    p1->x, p1->y, p1->z,
+	    p2->x, p2->y, p2->z);
+    (*nf)++;
+  }
+}
+
 int main (int argc, char * argv[])
 {
   GtsSurface * s1, * s2;
   GtsSurface * s1out2, * s1in2, * s2out1, * s2in1;
   GtsSurfaceInter * si;
   GNode * tree1, * tree2;
+  gboolean is_open1, is_open2;
   GSList * bboxes;
-  FILE * fp;
-  guint line;
+  FILE * fptr;
+  GtsFile * fp;
+  guint n;
+  gboolean closed = TRUE;
 
   if (argc != 3) {
     fprintf (stderr, 
@@ -46,7 +68,7 @@ int main (int argc, char * argv[])
   }
 
   /* open first file */
-  if ((fp = fopen (argv[1], "rt")) == NULL) {
+  if ((fptr = fopen (argv[1], "rt")) == NULL) {
     fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[2]);
     return 1;
   }
@@ -55,16 +77,18 @@ int main (int argc, char * argv[])
 			GTS_FACE_CLASS (gts_nface_class ()),
 			GTS_EDGE_CLASS (gts_nedge_class ()),
 			GTS_VERTEX_CLASS (gts_nvertex_class ()));
-  if ((line = gts_surface_read (s1, fp))) {
-    fprintf (stderr, "%s: `%s' is not a valid GTS surface file\n", 
-	     argv[0], argv[1]);
-    fprintf (stderr, "Format error at line %d\n", line);
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s1, fp)) {
+    fprintf (stderr, "boole: `%s' is not a valid GTS surface file\n", 
+	     argv[1]);
+    fprintf (stderr, "%s:%d:%d: %s\n", argv[1], fp->line, fp->pos, fp->error);
     return 1;
   }
-  fclose (fp);
+  gts_file_destroy (fp);
+  fclose (fptr);
 
  /* open second file */
-  if ((fp = fopen (argv[2], "rt")) == NULL) {
+  if ((fptr = fopen (argv[2], "rt")) == NULL) {
     fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[3]);
     return 1;
   }
@@ -73,13 +97,15 @@ int main (int argc, char * argv[])
 			GTS_FACE_CLASS (gts_nface_class ()),
 			GTS_EDGE_CLASS (gts_nedge_class ()),
 			GTS_VERTEX_CLASS (gts_nvertex_class ()));
-  if ((line = gts_surface_read (s2, fp))) {
-    fprintf (stderr, "%s: `%s' is not a valid GTS surface file\n", 
-	     argv[0], argv[2]);
-    fprintf (stderr, "Format error at line %d\n", line);
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s2, fp)) {
+    fprintf (stderr, "boole: `%s' is not a valid GTS surface file\n", 
+	     argv[2]);
+    fprintf (stderr, "%s:%d:%d: %s\n", argv[2], fp->line, fp->pos, fp->error);
     return 1;
   }
-  fclose (fp);
+  gts_file_destroy (fp);
+  fclose (fptr);
 
   /* display summary information about both surfaces */
 #if 0
@@ -87,6 +113,12 @@ int main (int argc, char * argv[])
   gts_surface_print_stats (s2, stderr);
 #endif
 
+  /* check surfaces */
+  g_assert (gts_surface_is_orientable (s1));
+  g_assert (gts_surface_is_orientable (s2));
+  g_assert (!gts_surface_is_self_intersecting (s1));
+  g_assert (!gts_surface_is_self_intersecting (s2));
+
   /* build bounding boxes for first surface */
   bboxes = NULL;
   gts_surface_foreach_face (s1, (GtsFunc) prepend_triangle_bbox, &bboxes);
@@ -94,6 +126,7 @@ int main (int argc, char * argv[])
   tree1 = gts_bb_tree_new (bboxes);
   /* free list of bboxes */
   g_slist_free (bboxes);
+  is_open1 = gts_surface_volume (s1) < 0. ? TRUE : FALSE;
 
   /* build bounding boxes for second surface */
   bboxes = NULL;
@@ -102,60 +135,133 @@ int main (int argc, char * argv[])
   tree2 = gts_bb_tree_new (bboxes);
   /* free list of bboxes */
   g_slist_free (bboxes);
+  is_open2 = gts_surface_volume (s2) < 0. ? TRUE : FALSE;
 
   si = gts_surface_inter_new (gts_surface_inter_class (), 
-			      s1, s2, tree1, tree2);
+			      s1, s2, tree1, tree2, is_open1, is_open2);
+  g_assert (gts_surface_inter_check (si, &closed));
 
   s1out2 = gts_surface_new (gts_surface_class (),
 			    gts_face_class (),
 			    gts_edge_class (),
 			    gts_vertex_class ());
-  gts_surface_inter_boolean (si, s1out2, GTS_1_OUT_2);
-  gts_surface_print_stats (s1out2, stderr);
-
   s1in2 = gts_surface_new (gts_surface_class (),
 			   gts_face_class (),
 			   gts_edge_class (),
 			   gts_vertex_class ());
-  gts_surface_inter_boolean (si, s1in2, GTS_1_IN_2);
-  gts_surface_print_stats (s1in2, stderr);
-
   s2out1 = gts_surface_new (gts_surface_class (),
 			    gts_face_class (),
 			    gts_edge_class (),
 			    gts_vertex_class ());
-  gts_surface_inter_boolean (si, s2out1, GTS_2_OUT_1);
-  gts_surface_print_stats (s2out1, stderr);
-
   s2in1 = gts_surface_new (gts_surface_class (),
 			   gts_face_class (),
 			   gts_edge_class (),
 			   gts_vertex_class ());
-  gts_surface_inter_boolean (si, s2in1, GTS_2_IN_1);
-  gts_surface_print_stats (s2in1, stderr);
+  if (closed) {
+    GtsSurfaceStats st1out2, st1in2, st2out1, st2in1;
+    gpointer data[3];
+    guint nf = 0;
+    gdouble a, ain, aout;
+
+    gts_surface_inter_boolean (si, s1out2, GTS_1_OUT_2);
+    gts_surface_inter_boolean (si, s1in2, GTS_1_IN_2);  
+    gts_surface_inter_boolean (si, s2out1, GTS_2_OUT_1);
+    gts_surface_inter_boolean (si, s2in1, GTS_2_IN_1);
+
+    gts_surface_stats (s1out2, &st1out2);
+    fprintf (stderr, "----------- 1 out 2 -----------\n");
+    gts_surface_print_stats (s1out2, stderr);
+    g_assert (st1out2.n_incompatible_faces == 0 &&
+    	      st1out2.n_non_manifold_edges == 0);
+    
+    gts_surface_stats (s1in2, &st1in2);
+    fprintf (stderr, "----------- 1 in  2 -----------\n");
+    gts_surface_print_stats (s1in2, stderr);
+    g_assert (st1in2.n_incompatible_faces == 0 &&
+    	      st1in2.n_non_manifold_edges == 0 &&
+    	      st1in2.n_boundary_edges == st1out2.n_boundary_edges);
+    a = gts_surface_area (s1);
+    aout = gts_surface_area (s1out2);
+    ain = gts_surface_area (s1in2);
+    if (a > 0.) {
+      a = fabs (a - aout - ain)/a;
+      g_assert (a < 1e-9);
+    }
+
+    gts_surface_stats (s2out1, &st2out1);
+    fprintf (stderr, "----------- 2 out 1 -----------\n");
+    gts_surface_print_stats (s2out1, stderr);
+    g_assert (st2out1.n_incompatible_faces == 0 &&
+    	      st2out1.n_non_manifold_edges == 0);
+    
+    gts_surface_stats (s2in1, &st2in1);
+    fprintf (stderr, "----------- 2 in  1 -----------\n");
+    gts_surface_print_stats (s2in1, stderr);
+    g_assert (st2in1.n_incompatible_faces == 0 &&
+    	      st2in1.n_non_manifold_edges == 0 &&
+   	      st2in1.n_boundary_edges == st2out1.n_boundary_edges);
+    a = gts_surface_area (s2);
+    aout = gts_surface_area (s2out1);
+    ain = gts_surface_area (s2in1);
+    if (a > 0.) {
+      a = fabs (a - aout - ain)/a;
+      g_assert (a < 1e-9);
+    }
+    
+    n = g_slist_length (si->edges);
+    g_assert (n == st1in2.n_boundary_edges &&
+    	      n == st2in1.n_boundary_edges);
+
+    data[0] = s1out2;
+    data[1] = s1in2;
+    data[2] = &nf;
+    printf ("(geometry \"s1 failed\" = LIST {\n");
+    gts_surface_foreach_edge (s1out2, (GtsFunc) check_edge, data);
+    printf ("})\n");
+
+    data[0] = s2out1;
+    data[1] = s2in1;
+    data[2] = &nf;
+    printf ("(geometry \"s2 failed\" = LIST {\n");
+    gts_surface_foreach_edge (s2out1, (GtsFunc) check_edge, data);
+    printf ("})\n");
+
+    g_assert (nf == 0);
+  }
+  else {
+    fprintf (stderr, "----------- 1 out 2 -----------\n");
+    gts_surface_print_stats (s1out2, stderr);
+    
+    fprintf (stderr, "----------- 1 in  2 -----------\n");
+    gts_surface_print_stats (s1in2, stderr);
+    
+    fprintf (stderr, "----------- 2 out 1 -----------\n");
+    gts_surface_print_stats (s2out1, stderr);
+    
+    fprintf (stderr, "----------- 2 in  1 -----------\n");
+    gts_surface_print_stats (s2in1, stderr);
+  }
 
   printf ("(geometry \"1out2\" { =\n");
   gts_surface_write_oogl (s1out2, stdout);
   printf ("})\n"
 	  "(normalization \"1out2\" none)\n");
-
+  
   printf ("(geometry \"1in2\" { =\n");
   gts_surface_write_oogl (s1in2, stdout);
   printf ("})\n"
 	  "(normalization \"1in2\" none)\n");
-
+  
   printf ("(geometry \"2out1\" { =\n");
   gts_surface_write_oogl (s2out1, stdout);
   printf ("})\n"
 	  "(normalization \"2out1\" none)\n");
-
+  
   printf ("(geometry \"2in1\" { =\n");
   gts_surface_write_oogl (s2in1, stdout);
   printf ("})\n"
 	  "(normalization \"2in1\" none)\n");
-
-  g_assert (gts_surface_inter_check (si));
-
+  
   /* destroy surfaces and intersection */
   gts_object_destroy (GTS_OBJECT (s1));
   gts_object_destroy (GTS_OBJECT (s2));
diff --git a/test/boolean/boole.sh b/test/boolean/boole.sh
deleted file mode 100755
index 3f55ddf..0000000
--- a/test/boolean/boole.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#! /bin/sh
-if ./boole $1 $2 2> log > /dev/null; then
-    :
-else
-    echo "======== boole $1 $2 ========" >> errors
-    cat log >> errors
-    rm -f log
-    exit 0
-fi
-if diff log boole_$1_$2 > /dev/null; then
-    :
-else
-    echo "======== boole $1 $2 ========" >> errors
-    cat log >> errors
-    rm -f log
-    exit 0
-fi
-rm -f log
-exit 1
diff --git a/test/boolean/boole_cube_cube1 b/test/boolean/boole_cube_cube1
deleted file mode 100644
index d520546..0000000
--- a/test/boolean/boole_cube_cube1
+++ /dev/null
@@ -1,52 +0,0 @@
-# vertices: 8 edges: 17 faces: 10
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 4
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 4 mean: 4.25 | 0.433013 max: 5
-#   faces per edge: min: 1 mean: 1.76471 | 0.424183 max: 2
-# Geometric statistics
-#   face quality: min: 0.940974 mean: 0.94162 | 0.00129156 max: 0.944203
-#   face area  : min: 2.66666 mean: 2.98563 | 0.159488 max: 3.06538
-#   edge length : min: 2.3094 mean: 2.73144 | 0.497814 max: 3.51863
-# vertices: 4 edges: 5 faces: 2
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 4
-#   duplicate edges: 1
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.5 | 0.5 max: 3
-#   faces per edge: min: 1 mean: 1.2 | 0.4 max: 2
-# Geometric statistics
-#   face quality: min: 0.944203 mean: 0.944203 | 6.08931e-09 max: 0.944203
-#   face area  : min: 2.66666 mean: 2.66666 | 8.78608e-09 max: 2.66666
-#   edge length : min: 2.3094 mean: 2.50071 | 0.382633 max: 3.26598
-# vertices: 8 edges: 17 faces: 10
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 4
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 4 mean: 4.25 | 0.433013 max: 5
-#   faces per edge: min: 1 mean: 1.76471 | 0.424183 max: 2
-# Geometric statistics
-#   face quality: min: 0.944163 mean: 0.944171 | 1.5889e-05 max: 0.944203
-#   face area  : min: 2.66666 mean: 2.69982 | 0.016583 max: 2.70811
-#   edge length : min: 2.3094 mean: 2.60519 | 0.439964 max: 3.29147
-# vertices: 4 edges: 5 faces: 2
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 4
-#   duplicate edges: 1
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.5 | 0.5 max: 3
-#   faces per edge: min: 1 mean: 1.2 | 0.4 max: 2
-# Geometric statistics
-#   face quality: min: 0.944203 mean: 0.944203 | 6.08931e-09 max: 0.944203
-#   face area  : min: 2.66666 mean: 2.66666 | 8.78608e-09 max: 2.66666
-#   edge length : min: 2.3094 mean: 2.50071 | 0.382633 max: 3.26598
diff --git a/test/boolean/boole_cube_cube1.sh b/test/boolean/boole_cube_cube1.sh
deleted file mode 100755
index 5a81fdf..0000000
--- a/test/boolean/boole_cube_cube1.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./boole.sh cube cube1; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/boole_cube_cube5 b/test/boolean/boole_cube_cube5
deleted file mode 100644
index 0041628..0000000
--- a/test/boolean/boole_cube_cube5
+++ /dev/null
@@ -1,52 +0,0 @@
-# vertices: 16 edges: 37 faces: 22
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 3 mean: 4.625 | 1.49478 max: 7
-#   faces per edge: min: 1 mean: 1.78378 | 0.411663 max: 2
-# Geometric statistics
-#   face quality: min: 0.683271 mean: 0.801034 | 0.12834 max: 0.944203
-#   face area  : min: 0.0891777 mean: 1.50862 | 1.35899 max: 3.06538
-#   edge length : min: 0.398478 mean: 1.74521 | 1.01006 max: 3.51863
-# vertices: 8 edges: 13 faces: 6
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 3.25 | 0.829156 max: 4
-#   faces per edge: min: 1 mean: 1.38462 | 0.486504 max: 2
-# Geometric statistics
-#   face quality: min: 0.584589 mean: 0.751386 | 0.118678 max: 0.85094
-#   face area  : min: 0.202374 mean: 0.333333 | 0.133073 max: 0.515859
-#   edge length : min: 0.398478 mean: 1.02472 | 0.522984 max: 2
-# vertices: 12 edges: 25 faces: 14
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 3 mean: 4.16667 | 1.06719 max: 6
-#   faces per edge: min: 1 mean: 1.68 | 0.466476 max: 2
-# Geometric statistics
-#   face quality: min: 0.85891 mean: 0.922849 | 0.0413042 max: 0.960353
-#   face area  : min: 0.168417 mean: 0.48441 | 0.266535 max: 1
-#   edge length : min: 0.398478 mean: 1.02875 | 0.381584 max: 2
-# vertices: 12 edges: 25 faces: 14
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 3 mean: 4.16667 | 1.06719 max: 6
-#   faces per edge: min: 1 mean: 1.68 | 0.466476 max: 2
-# Geometric statistics
-#   face quality: min: 0.629606 mean: 0.828704 | 0.130466 max: 0.944203
-#   face area  : min: 0.429301 mean: 1.01349 | 0.41683 max: 1.5236
-#   edge length : min: 0.398478 mean: 1.60904 | 0.707443 max: 2.38211
diff --git a/test/boolean/boole_cube_cube5.sh b/test/boolean/boole_cube_cube5.sh
deleted file mode 100755
index 7e7e13a..0000000
--- a/test/boolean/boole_cube_cube5.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./boole.sh cube cube5; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/cube b/test/boolean/cube
deleted file mode 100644
index c765694..0000000
--- a/test/boolean/cube
+++ /dev/null
@@ -1,39 +0,0 @@
-8 18 12
-0 -1.63299 -1.5
--1.63299 0 -1.5
-0 1.63299 -1.5
-1.63299 0 -1.5
-0 -1.63299 1.1547
--1.63299 0 1.1547
-0 1.63299 1.1547
-1.63299 0 1.1547
-3 1
-2 1
-6 1
-2 6
-2 7
-3 2
-3 7
-3 8
-4 3
-4 8
-5 1
-4 5
-1 4
-6 5
-7 6
-5 8
-7 5
-8 7
-9 13 1
-6 1 2
-4 2 3
-14 3 11
-4 15 5
-6 5 7
-7 18 8
-9 8 10
-10 16 12
-13 12 11
-15 14 17
-18 17 16
diff --git a/test/boolean/cubes.c b/test/boolean/cubes.c
new file mode 100644
index 0000000..2dbcb42
--- /dev/null
+++ b/test/boolean/cubes.c
@@ -0,0 +1,229 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include "gts.h"
+
+static void surface_add_box (GtsSurface * s,
+			     gdouble x1, gdouble y1, gdouble z1,
+			     gdouble x2, gdouble y2, gdouble z2)
+{
+  GtsVertex * v0 = gts_vertex_new (s->vertex_class, x1, y1, z1);
+  GtsVertex * v1 = gts_vertex_new (s->vertex_class, x1, y1, z2);
+  GtsVertex * v2 = gts_vertex_new (s->vertex_class, x1, y2, z2);
+  GtsVertex * v3 = gts_vertex_new (s->vertex_class, x1, y2, z1);
+  GtsVertex * v4 = gts_vertex_new (s->vertex_class, x2, y1, z1);
+  GtsVertex * v5 = gts_vertex_new (s->vertex_class, x2, y1, z2);
+  GtsVertex * v6 = gts_vertex_new (s->vertex_class, x2, y2, z2);
+  GtsVertex * v7 = gts_vertex_new (s->vertex_class, x2, y2, z1);
+
+  GtsEdge * e1 = gts_edge_new (s->edge_class, v0, v1);
+  GtsEdge * e2 = gts_edge_new (s->edge_class, v1, v2);
+  GtsEdge * e3 = gts_edge_new (s->edge_class, v2, v3);
+  GtsEdge * e4 = gts_edge_new (s->edge_class, v3, v0);
+  GtsEdge * e5 = gts_edge_new (s->edge_class, v0, v2);
+
+  GtsEdge * e6 = gts_edge_new (s->edge_class, v4, v5);
+  GtsEdge * e7 = gts_edge_new (s->edge_class, v5, v6);
+  GtsEdge * e8 = gts_edge_new (s->edge_class, v6, v7);
+  GtsEdge * e9 = gts_edge_new (s->edge_class, v7, v4);
+  GtsEdge * e10 = gts_edge_new (s->edge_class, v4, v6);
+  
+  GtsEdge * e11 = gts_edge_new (s->edge_class, v3, v7);
+  GtsEdge * e12 = gts_edge_new (s->edge_class, v2, v6);
+  GtsEdge * e13 = gts_edge_new (s->edge_class, v1, v5);
+  GtsEdge * e14 = gts_edge_new (s->edge_class, v0, v4);
+
+  GtsEdge * e15 = gts_edge_new (s->edge_class, v1, v6);
+  GtsEdge * e16 = gts_edge_new (s->edge_class, v2, v7);
+  GtsEdge * e17 = gts_edge_new (s->edge_class, v3, v4);
+  GtsEdge * e18 = gts_edge_new (s->edge_class, v0, v5);
+
+  GtsFaceClass * klass = gts_face_class ();
+
+  gts_surface_add_face (s, gts_face_new (klass, e1, e2, e5));
+  gts_surface_add_face (s, gts_face_new (klass, e5, e3, e4));
+  gts_surface_add_face (s, gts_face_new (klass, e6, e10, e7));
+  gts_surface_add_face (s, gts_face_new (klass, e10, e9, e8));
+  gts_surface_add_face (s, gts_face_new (klass, e2, e15, e12));
+  gts_surface_add_face (s, gts_face_new (klass, e15, e13, e7));
+  gts_surface_add_face (s, gts_face_new (klass, e3, e16, e11));
+  gts_surface_add_face (s, gts_face_new (klass, e16, e12, e8));
+  gts_surface_add_face (s, gts_face_new (klass, e17, e14, e4));
+  gts_surface_add_face (s, gts_face_new (klass, e17, e11, e9));
+  gts_surface_add_face (s, gts_face_new (klass, e18, e13, e1));
+  gts_surface_add_face (s, gts_face_new (klass, e18, e14, e6));
+}
+
+static void failed (GtsSurface * s, GtsSurface * cs, guint n)
+{
+  gchar name[80];
+  FILE * fp;
+  
+  sprintf (name, "cs.%u.gts", n);
+  fp = fopen (name, "wt");
+  gts_surface_write (cs, fp);
+  fclose (fp);
+  
+  sprintf (name, "s.%u.gts", n);
+  fp = fopen (name, "wt");
+  gts_surface_write (s, fp);
+  fclose (fp);
+}
+
+static void surface_inter (GtsSurface * s, 
+			   GNode * stree,
+			   gboolean is_open,
+			   gdouble x1, gdouble y1, gdouble z1,
+			   gdouble x2, gdouble y2, gdouble z2,
+			   guint depth, guint maxdepth)
+{
+  GtsSurface * cs; 
+  GNode * ctree;
+  GtsSurfaceInter * si;
+  gdouble size = (x2 - x1)/2.;
+  gboolean closed = TRUE;
+  static guint ncalls = 0, ninter = 0, nfailed = 0;
+
+  if (depth > maxdepth)
+    return;
+
+  cs = gts_surface_new (gts_surface_class (),
+			gts_face_class (),
+			gts_edge_class (),
+			gts_vertex_class ());
+  surface_add_box (cs, x1, y1, z1, x2, y2, z2);
+  ctree = gts_bb_tree_surface (cs);
+  si = gts_surface_inter_new (gts_surface_inter_class (),
+			      cs, s, ctree, stree, FALSE, is_open);
+  ncalls++;
+  if (!gts_surface_inter_check (si, &closed) ||
+      (si->edges && !closed)) {
+    failed (s, cs, nfailed++);
+    gts_object_destroy (GTS_OBJECT (si));
+    gts_object_destroy (GTS_OBJECT (cs));
+    gts_bb_tree_destroy (ctree, TRUE);
+    return;
+  }
+  else if (si->edges || depth < 4) {
+    if (si->edges) {
+      GtsSurface * sb;
+      gdouble a = gts_surface_volume (cs), a1;
+      
+      g_assert (closed);
+      sb = gts_surface_new (gts_surface_class (),
+			    gts_face_class (),
+			    gts_edge_class (),
+			    gts_vertex_class ());
+      gts_surface_inter_boolean (si, sb, GTS_1_OUT_2);
+      gts_object_destroy (GTS_OBJECT (sb));
+
+      sb = gts_surface_new (gts_surface_class (),
+			    gts_face_class (),
+			    gts_edge_class (),
+			    gts_vertex_class ());
+      gts_surface_inter_boolean (si, sb, GTS_1_IN_2);
+      gts_surface_inter_boolean (si, sb, GTS_2_IN_1);
+      a1 = gts_surface_volume (sb)/a;
+      gts_object_destroy (GTS_OBJECT (sb));
+
+      if (a1 > 1.001)
+	failed (s, cs, nfailed++);
+    }
+
+    gts_object_destroy (GTS_OBJECT (cs));
+    gts_bb_tree_destroy (ctree, TRUE);
+    gts_object_destroy (GTS_OBJECT (si));
+
+    ninter++;
+
+    surface_inter (s, stree, is_open, 
+		   x1, y1, z1, x1 + size, y1 + size, z1 + size,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1 + size, y1, z1, x2, y1 + size, z1 + size,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1, y1 + size, z1, x1 + size, y2, z1 + size,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1 + size, y1 + size, z1, x2, y2, z1 + size,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1, y1, z1 + size, x1 + size, y1 + size, z2,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1 + size, y1, z1 + size, x2, y1 + size, z2,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1, y1 + size, z1 + size, x1 + size, y2, z2,
+		   depth + 1, maxdepth);
+    surface_inter (s, stree,  is_open, 
+		   x1 + size, y1 + size, z1 + size, x2, y2, z2,
+		   depth + 1, maxdepth);
+  }
+  else {
+    gts_object_destroy (GTS_OBJECT (cs));
+    gts_bb_tree_destroy (ctree, TRUE);
+    gts_object_destroy (GTS_OBJECT (si));
+  }
+
+  printf ("\rncalls: %6u ninter: %6u nfailed: %6u",
+	  ncalls, ninter, nfailed);
+  fflush (stdout);
+}
+
+int main (int argc, char * argv[])
+{
+  GtsSurface * s;
+  GtsFile * fp;
+  GNode * stree;
+  gboolean is_open;
+
+  s = gts_surface_new (gts_surface_class (),
+		       GTS_FACE_CLASS (gts_face_class ()),
+		       GTS_EDGE_CLASS (gts_edge_class ()),
+		       GTS_VERTEX_CLASS (gts_vertex_class ()));
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fprintf (stderr, "cubes: file on standard input is not a valid GTS surface file\n");
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+    return 1;
+  }
+  gts_file_destroy (fp);
+
+  if (!gts_surface_is_orientable (s)) {
+    fprintf (stderr, "surface is not orientable\n");
+    return 1;
+  }
+  else if (!gts_surface_is_closed (s)) {
+    fprintf (stderr, "surface is not closed\n");
+    return 1;
+  }
+  else if (gts_surface_is_self_intersecting (s)) {
+    fprintf (stderr, "surface is self-intersecting\n");
+    return 1;
+  }
+
+  stree = gts_bb_tree_surface (s);
+  is_open = gts_surface_volume (s) < 0. ? TRUE : FALSE;
+  surface_inter (s, stree, is_open, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0, 9);
+  printf ("\n");
+  return 0;
+}
diff --git a/test/boolean/set.c b/test/boolean/set.c
index e0a6c55..8d36a29 100644
--- a/test/boolean/set.c
+++ b/test/boolean/set.c
@@ -31,7 +31,7 @@ static gboolean segment_is_ok (GtsSegment * s)
 {
   g_return_val_if_fail (s != NULL, FALSE);
   g_return_val_if_fail (s->v1 != s->v2, FALSE);
-  g_return_val_if_fail (GTS_OBJECT (s)->reserved == NULL, FALSE);
+  g_assert (GTS_OBJECT (s)->reserved == NULL);
   return TRUE;
 }
 
@@ -39,6 +39,7 @@ static gboolean vertex_is_ok (GtsVertex * v)
 {
   g_return_val_if_fail (v != NULL, FALSE);
   g_return_val_if_fail (GTS_OBJECT (v)->reserved == NULL, FALSE);
+  g_assert (GTS_OBJECT (v)->reserved == NULL);
   return TRUE;
 }
 
@@ -50,9 +51,8 @@ static gboolean triangle_is_ok (GtsTriangle * t)
   g_return_val_if_fail (t->e3 != NULL, FALSE);
   g_return_val_if_fail (t->e1 != t->e2 && t->e1 != t->e3 && t->e2 != t->e3, 
 			FALSE);
-  g_return_val_if_fail (gts_segments_touch (GTS_SEGMENT (t->e1), 
-					    GTS_SEGMENT (t->e2)),
-			FALSE);
+  g_assert (gts_segments_touch (GTS_SEGMENT (t->e1), 
+				GTS_SEGMENT (t->e2)));
   g_return_val_if_fail (gts_segments_touch (GTS_SEGMENT (t->e1), 
 					    GTS_SEGMENT (t->e3)), 
 			FALSE);
@@ -69,14 +69,32 @@ static gboolean triangle_is_ok (GtsTriangle * t)
   return TRUE;
 }
 
+static void write_segment (GtsSegment * s, FILE * fp)
+{
+  fprintf (fp, "# %p %p:%s->%p:%s\n"
+	   "VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
+	   s,
+	   s->v1,
+	   GTS_NVERTEX (s->v1)->name,
+	   s->v2,
+	   GTS_NVERTEX (s->v2)->name,
+	   GTS_POINT (s->v1)->x, 
+	   GTS_POINT (s->v1)->y, 
+	   GTS_POINT (s->v1)->z, 
+	   GTS_POINT (s->v2)->x, 
+	   GTS_POINT (s->v2)->y, 
+	   GTS_POINT (s->v2)->z);
+}
+
 int main (int argc, char * argv[])
 {
   GtsSurface * s1, * s2;
   GtsSurfaceInter * si;
   GNode * tree1, * tree2;
+  gboolean is_open1, is_open2;
   GSList * bboxes;
-  FILE * fp;
-  guint line;
+  FILE * fptr;
+  GtsFile * fp;
 
   if (argc != 3) {
     fprintf (stderr, 
@@ -87,8 +105,8 @@ int main (int argc, char * argv[])
   }
 
   /* open first file */
-  if ((fp = fopen (argv[1], "rt")) == NULL) {
-    fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[2]);
+  if ((fptr = fopen (argv[1], "rt")) == NULL) {
+    fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[1]);
     return 1;
   }
   /* reads in first surface file */
@@ -96,17 +114,19 @@ int main (int argc, char * argv[])
 			GTS_FACE_CLASS (gts_nface_class ()),
 			GTS_EDGE_CLASS (gts_nedge_class ()),
 			GTS_VERTEX_CLASS (gts_nvertex_class ()));
-  if ((line = gts_surface_read (s1, fp))) {
-    fprintf (stderr, "%s: `%s' is not a valid GTS surface file\n", 
-	     argv[0], argv[1]);
-    fprintf (stderr, "Format error at line %d\n", line);
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s1, fp)) {
+    fprintf (stderr, "set: `%s' is not a valid GTS surface file\n", 
+	     argv[1]);
+    fprintf (stderr, "%s:%d:%d: %s\n", argv[1], fp->line, fp->pos, fp->error);
     return 1;
   }
-  fclose (fp);
+  gts_file_destroy (fp);
+  fclose (fptr);
 
  /* open second file */
-  if ((fp = fopen (argv[2], "rt")) == NULL) {
-    fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[3]);
+  if ((fptr = fopen (argv[2], "rt")) == NULL) {
+    fprintf (stderr, "%s: can not open file `%s'\n", argv[0], argv[2]);
     return 1;
   }
   /* reads in second surface file */
@@ -114,13 +134,15 @@ int main (int argc, char * argv[])
 			GTS_FACE_CLASS (gts_nface_class ()),
 			GTS_EDGE_CLASS (gts_nedge_class ()),
 			GTS_VERTEX_CLASS (gts_nvertex_class ()));
-  if ((line = gts_surface_read (s2, fp))) {
-    fprintf (stderr, "%s: `%s' is not a valid GTS surface file\n", 
-	     argv[0], argv[2]);
-    fprintf (stderr, "Format error at line %d\n", line);
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s2, fp)) {
+    fprintf (stderr, "set: `%s' is not a valid GTS surface file\n", 
+	     argv[2]);
+    fprintf (stderr, "%s:%d:%d: %s\n", argv[2], fp->line, fp->pos, fp->error);
     return 1;
   }
-  fclose (fp);
+  gts_file_destroy (fp);
+  fclose (fptr);
 
   /* display summary information about both surfaces */
 #if 0
@@ -128,6 +150,12 @@ int main (int argc, char * argv[])
   gts_surface_print_stats (s2, stderr);
 #endif
 
+  /* check surfaces */
+  g_assert (gts_surface_is_orientable (s1));
+  g_assert (gts_surface_is_orientable (s2));
+  g_assert (!gts_surface_is_self_intersecting (s1));
+  g_assert (!gts_surface_is_self_intersecting (s2));
+
   /* build bounding boxes for first surface */
   bboxes = NULL;
   gts_surface_foreach_face (s1, (GtsFunc) prepend_triangle_bbox, &bboxes);
@@ -135,6 +163,7 @@ int main (int argc, char * argv[])
   tree1 = gts_bb_tree_new (bboxes);
   /* free list of bboxes */
   g_slist_free (bboxes);
+  is_open1 = gts_surface_volume (s1) < 0. ? TRUE : FALSE;
 
   /* build bounding boxes for second surface */
   bboxes = NULL;
@@ -143,38 +172,25 @@ int main (int argc, char * argv[])
   tree2 = gts_bb_tree_new (bboxes);
   /* free list of bboxes */
   g_slist_free (bboxes);
+  is_open2 = gts_surface_volume (s2) < 0. ? TRUE : FALSE;
 
+#if 1
   {
-    GSList * i;
     GtsSurface * s = gts_surface_new (gts_surface_class (),
 				      gts_face_class (),
 				      gts_edge_class (),
 				      gts_vertex_class ());
+    gboolean closed = TRUE;
 
     si = gts_surface_inter_new (gts_surface_inter_class (), 
-				s1, s2, tree1, tree2);
+				s1, s2, tree1, tree2, is_open1, is_open2);
 
     gts_surface_merge (s, si->s1);
     gts_surface_merge (s, si->s2);
     gts_surface_print_stats (s, stderr);
-    gts_object_destroy (GTS_OBJECT (s));
-
+#if 1
     printf ("(geometry \"inter\" { = LIST {\n");
-    i = si->edges;
-    while (i) {
-      GtsSegment * s = i->data;
-      printf ("# %s->%s\n"
-	      "VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
-	      GTS_NVERTEX (s->v1)->name,
-	      GTS_NVERTEX (s->v2)->name,
-	      GTS_POINT (s->v1)->x, 
-	      GTS_POINT (s->v1)->y, 
-	      GTS_POINT (s->v1)->z, 
-	      GTS_POINT (s->v2)->x, 
-	      GTS_POINT (s->v2)->y, 
-	      GTS_POINT (s->v2)->z);
-      i = i->next;
-    }
+    g_slist_foreach (si->edges, (GFunc) write_segment, stdout);
     printf ("}})\n"
 	    "(normalization \"inter\" none)\n");
     printf ("(geometry \"s1\" { =\n");
@@ -185,7 +201,26 @@ int main (int argc, char * argv[])
     gts_surface_write_oogl (si->s2, stdout);
     printf ("})\n"
 	    "(normalization \"s2\" none)\n");
+#else
+#if 1
+    {
+      GtsGraph * g;
 
+      g = gts_segments_graph_new (gts_graph_class (), si->edges);
+      gts_graph_write_dot (g, stdout);
+      gts_object_destroy (GTS_OBJECT (g));
+    }
+#else
+    {
+      GtsGraph * g = gts_surface_graph_new (gts_graph_class (), s);
+
+      gts_graph_write_dot (g, stdout);
+      gts_object_destroy (GTS_OBJECT (g));
+    }
+#endif
+#endif
+    gts_object_destroy (GTS_OBJECT (s));
+#if 1
     gts_surface_foreach_face (s1, (GtsFunc) triangle_is_ok, NULL);
     gts_surface_foreach_edge (s1, (GtsFunc) segment_is_ok, NULL);
     gts_surface_foreach_edge (s1, (GtsFunc) vertex_is_ok, NULL);
@@ -201,9 +236,13 @@ int main (int argc, char * argv[])
     gts_surface_foreach_face (si->s2, (GtsFunc) triangle_is_ok, NULL);
     gts_surface_foreach_edge (si->s2, (GtsFunc) segment_is_ok, NULL);
     gts_surface_foreach_edge (si->s2, (GtsFunc) vertex_is_ok, NULL);
-
-    g_assert (gts_surface_inter_check (si));
+#endif
+    g_assert (gts_surface_inter_check (si, &closed));
   }
+#else
+  si = gts_surface_inter_new (gts_surface_inter_class (), 
+			      s1, s2, tree1, tree2);
+#endif
 
   /* destroy surfaces and intersection */
   gts_object_destroy (GTS_OBJECT (s1));
@@ -214,5 +253,8 @@ int main (int argc, char * argv[])
   gts_bb_tree_destroy (tree1, TRUE);
   gts_bb_tree_destroy (tree2, TRUE);  
 
+  /* free GTS memory (for memory profiling) */
+  gts_finalize ();
+
   return 0;
 }
diff --git a/test/boolean/set.sh b/test/boolean/set.sh
deleted file mode 100755
index ac7b304..0000000
--- a/test/boolean/set.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /bin/sh
-if ./set $1 $2 2> log > /dev/null; then
-    :
-else
-    echo "======== set $1 $2 ========" >> errors
-    cat log >> errors
-    rm -f log
-    exit 0
-fi
-if diff log set_$1_$2 > /dev/null; then
-    :
-else
-    echo "======== set $1 $2 ========" >> errors
-    cat log >> errors
-    rm -f log
-    exit 0
-fi
-if ./set $2 $1 2> log > /dev/null; then
-    :
-else
-    echo "======== set $2 $1 ========" >> errors
-    cat log >> errors
-    rm -f log
-    exit 0
-fi
-if diff log set_$1_$2 > /dev/null; then
-    :
-else
-    echo "======== set $2 $1 ========" >> errors
-    cat log >> errors
-    rm -f log
-    exit 0
-fi
-rm -f log
-exit 1
diff --git a/test/boolean/set_1_2.sh b/test/boolean/set_1_2.sh
deleted file mode 100755
index 414ea07..0000000
--- a/test/boolean/set_1_2.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh 1.gts 2.gts; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_cube6_cube7.sh b/test/boolean/set_cube6_cube7.sh
deleted file mode 100755
index 296742e..0000000
--- a/test/boolean/set_cube6_cube7.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh cube6 cube7; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_cube_cube1 b/test/boolean/set_cube_cube1
deleted file mode 100644
index 8f42719..0000000
--- a/test/boolean/set_cube_cube1
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 12 edges: 30 faces: 20
-# Connectivity statistics
-#   incompatible faces: 12
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 2
-#   non-manifold edges: 4
-#   edges per vertex: min: 4 mean: 5 | 1.52753 max: 8
-#   faces per edge: min: 1 mean: 2 | 0.894427 max: 4
-# Geometric statistics
-#   face quality: min: 0.940974 mean: 0.942895 | 0.00156893 max: 0.944203
-#   face area  : min: 2.66666 mean: 2.84273 | 0.182422 max: 3.06538
-#   edge length : min: 2.3094 mean: 2.71617 | 0.484942 max: 3.51863
diff --git a/test/boolean/set_cube_cube1.sh b/test/boolean/set_cube_cube1.sh
deleted file mode 100755
index 07a74f1..0000000
--- a/test/boolean/set_cube_cube1.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh cube cube1; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_cube_cube2 b/test/boolean/set_cube_cube2
deleted file mode 100644
index 38200f5..0000000
--- a/test/boolean/set_cube_cube2
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 22 edges: 70 faces: 50
-# Connectivity statistics
-#   incompatible faces: 35
-#   duplicate faces: 0
-#   boundary edges: 10
-#   duplicate edges: 0
-#   non-manifold edges: 10
-#   edges per vertex: min: 4 mean: 6.36364 | 1.69345 max: 10
-#   faces per edge: min: 1 mean: 2.14286 | 0.832993 max: 4
-# Geometric statistics
-#   face quality: min: 0.178119 mean: 0.717724 | 0.242282 max: 0.98315
-#   face area  : min: 0.0286197 mean: 3.05059 | 7.79843 max: 36.8351
-#   edge length : min: 0.11547 mean: 3.24514 | 3.3883 max: 12.8062
diff --git a/test/boolean/set_cube_cube2.sh b/test/boolean/set_cube_cube2.sh
deleted file mode 100755
index 7477de2..0000000
--- a/test/boolean/set_cube_cube2.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh cube cube2; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_cube_cube4.sh b/test/boolean/set_cube_cube4.sh
deleted file mode 100755
index 40ae5e6..0000000
--- a/test/boolean/set_cube_cube4.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh cube cube4; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_loc1_loc2.sh b/test/boolean/set_loc1_loc2.sh
deleted file mode 100755
index 6f2cbeb..0000000
--- a/test/boolean/set_loc1_loc2.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh loc1 loc2; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_p1_p2.sh b/test/boolean/set_p1_p2.sh
deleted file mode 100755
index e0ad36b..0000000
--- a/test/boolean/set_p1_p2.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh p1 p2; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_sponge_cutter.sh b/test/boolean/set_sponge_cutter.sh
deleted file mode 100755
index b9d49fd..0000000
--- a/test/boolean/set_sponge_cutter.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh sponge cutter; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t11_t16 b/test/boolean/set_t11_t16
deleted file mode 100644
index 70fb5ad..0000000
--- a/test/boolean/set_t11_t16
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 8 edges: 14 faces: 7
-# Connectivity statistics
-#   incompatible faces: 4
-#   duplicate faces: 0
-#   boundary edges: 9
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.5 | 1.58114 max: 6
-#   faces per edge: min: 1 mean: 1.5 | 0.823754 max: 4
-# Geometric statistics
-#   face quality: min: 0.623756 mean: 0.831182 | 0.129567 max: 0.970117
-#   face area  : min: 0.282843 mean: 0.639395 | 0.235498 max: 1
-#   edge length : min: 0.34641 mean: 1.45588 | 0.506805 max: 2.29129
diff --git a/test/boolean/set_t11_t16.sh b/test/boolean/set_t11_t16.sh
deleted file mode 100755
index a71aec5..0000000
--- a/test/boolean/set_t11_t16.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t11 t16; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t14_t15 b/test/boolean/set_t14_t15
deleted file mode 100644
index 57ccc95..0000000
--- a/test/boolean/set_t14_t15
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 13 edges: 34 faces: 22
-# Connectivity statistics
-#   incompatible faces: 15
-#   duplicate faces: 0
-#   boundary edges: 10
-#   duplicate edges: 0
-#   non-manifold edges: 4
-#   edges per vertex: min: 3 mean: 5.23077 | 1.62452 max: 9
-#   faces per edge: min: 1 mean: 1.94118 | 0.872494 max: 4
-# Geometric statistics
-#   face quality: min: 0.00115904 mean: 0.573171 | 0.401589 max: 0.986184
-#   face area  : min: 2.84337e-12 mean: 0.662314 | 0.857899 max: 2.9282
-#   edge length : min: 1.65091e-06 mean: 1.63412 | 0.889055 max: 3.26599
diff --git a/test/boolean/set_t14_t15.sh b/test/boolean/set_t14_t15.sh
deleted file mode 100755
index 29a0ea0..0000000
--- a/test/boolean/set_t14_t15.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t14 t15; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t17_t18 b/test/boolean/set_t17_t18
deleted file mode 100644
index bc484e0..0000000
--- a/test/boolean/set_t17_t18
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 5 edges: 6 faces: 2
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 6
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.4 | 0.8 max: 4
-#   faces per edge: min: 1 mean: 1 | 0 max: 1
-# Geometric statistics
-#   face quality: min: 0.99004 mean: 0.990344 | 0.000303792 max: 0.990648
-#   face area  : min: 0.00100417 mean: 0.00981539 | 0.00881122 max: 0.0186266
-#   edge length : min: 0.0459561 mean: 0.129001 | 0.0811836 max: 0.23179
diff --git a/test/boolean/set_t17_t18.sh b/test/boolean/set_t17_t18.sh
deleted file mode 100755
index b9413bb..0000000
--- a/test/boolean/set_t17_t18.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t17 t18; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t19_t20 b/test/boolean/set_t19_t20
deleted file mode 100644
index 2ede4d4..0000000
--- a/test/boolean/set_t19_t20
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 8 edges: 15 faces: 8
-# Connectivity statistics
-#   incompatible faces: 4
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 2
-#   edges per vertex: min: 3 mean: 3.75 | 1.29904 max: 7
-#   faces per edge: min: 1 mean: 1.6 | 0.711805 max: 3
-# Geometric statistics
-#   face quality: min: 0.761015 mean: 0.861651 | 0.065395 max: 0.944203
-#   face area  : min: 0.25 mean: 0.375 | 0.125 max: 0.5
-#   edge length : min: 0.5 mean: 1.0867 | 0.468053 max: 2
diff --git a/test/boolean/set_t19_t20.sh b/test/boolean/set_t19_t20.sh
deleted file mode 100755
index 7743c7b..0000000
--- a/test/boolean/set_t19_t20.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t19 t20; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t19_t21 b/test/boolean/set_t19_t21
deleted file mode 100644
index cb2deab..0000000
--- a/test/boolean/set_t19_t21
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 8 edges: 13 faces: 6
-# Connectivity statistics
-#   incompatible faces: 2
-#   duplicate faces: 0
-#   boundary edges: 9
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.25 | 1.47902 max: 6
-#   faces per edge: min: 1 mean: 1.38462 | 0.624926 max: 3
-# Geometric statistics
-#   face quality: min: 0.751755 mean: 0.884037 | 0.0755302 max: 0.996181
-#   face area  : min: 0.25 mean: 0.333333 | 0.117851 max: 0.5
-#   edge length : min: 0.5 mean: 1.02312 | 0.261934 max: 1.41421
diff --git a/test/boolean/set_t19_t21.sh b/test/boolean/set_t19_t21.sh
deleted file mode 100755
index 0efe901..0000000
--- a/test/boolean/set_t19_t21.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t19 t21; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t10 b/test/boolean/set_t1_t10
deleted file mode 100644
index ffa3e78..0000000
--- a/test/boolean/set_t1_t10
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 7 edges: 10 faces: 4
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.85714 | 1.35526 max: 6
-#   faces per edge: min: 1 mean: 1.2 | 0.4 max: 2
-# Geometric statistics
-#   face quality: min: 0.944203 mean: 0.944203 | 4.96645e-09 max: 0.944203
-#   face area  : min: 0.5 mean: 0.5 | 0 max: 0.5
-#   edge length : min: 1 mean: 1.16569 | 0.202922 max: 1.41421
diff --git a/test/boolean/set_t1_t10.sh b/test/boolean/set_t1_t10.sh
deleted file mode 100755
index 0abdc59..0000000
--- a/test/boolean/set_t1_t10.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t10; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t11 b/test/boolean/set_t1_t11
deleted file mode 100644
index 03de123..0000000
--- a/test/boolean/set_t1_t11
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 6 edges: 8 faces: 3
-# Connectivity statistics
-#   incompatible faces: 0
-#   duplicate faces: 0
-#   boundary edges: 7
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.66667 | 1.10554 max: 5
-#   faces per edge: min: 1 mean: 1.125 | 0.330719 max: 2
-# Geometric statistics
-#   face quality: min: 0.924605 mean: 0.931138 | 0.00923825 max: 0.944203
-#   face area  : min: 0.707107 mean: 0.804738 | 0.138071 max: 1
-#   edge length : min: 1 mean: 1.46334 | 0.329587 max: 2
diff --git a/test/boolean/set_t1_t11.sh b/test/boolean/set_t1_t11.sh
deleted file mode 100755
index 6201273..0000000
--- a/test/boolean/set_t1_t11.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t11; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t12 b/test/boolean/set_t1_t12
deleted file mode 100644
index c5211ab..0000000
--- a/test/boolean/set_t1_t12
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 9 edges: 17 faces: 9
-# Connectivity statistics
-#   incompatible faces: 4
-#   duplicate faces: 0
-#   boundary edges: 9
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.77778 | 1.6178 max: 7
-#   faces per edge: min: 1 mean: 1.58824 | 0.771463 max: 4
-# Geometric statistics
-#   face quality: min: 0.630787 mean: 0.863666 | 0.129378 max: 0.979162
-#   face area  : min: 0.166667 mean: 0.346448 | 0.131603 max: 0.5
-#   edge length : min: 0.372678 mean: 1.07467 | 0.323877 max: 1.5
diff --git a/test/boolean/set_t1_t12.sh b/test/boolean/set_t1_t12.sh
deleted file mode 100755
index 691b2ec..0000000
--- a/test/boolean/set_t1_t12.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t12; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t13 b/test/boolean/set_t1_t13
deleted file mode 100644
index aec10d1..0000000
--- a/test/boolean/set_t1_t13
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 8 edges: 15 faces: 8
-# Connectivity statistics
-#   incompatible faces: 4
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.75 | 1.47902 max: 6
-#   faces per edge: min: 1 mean: 1.6 | 0.8 max: 4
-# Geometric statistics
-#   face quality: min: 0.613267 mean: 0.861469 | 0.143299 max: 0.944203
-#   face area  : min: 0.25 mean: 0.4375 | 0.108253 max: 0.5
-#   edge length : min: 0.5 mean: 1.23939 | 0.337513 max: 1.80278
diff --git a/test/boolean/set_t1_t13.sh b/test/boolean/set_t1_t13.sh
deleted file mode 100755
index 5c4ace9..0000000
--- a/test/boolean/set_t1_t13.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t13; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t2 b/test/boolean/set_t1_t2
deleted file mode 100644
index 40a8ad8..0000000
--- a/test/boolean/set_t1_t2
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 8 edges: 15 faces: 8
-# Connectivity statistics
-#   incompatible faces: 4
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 3 mean: 3.75 | 1.29904 max: 6
-#   faces per edge: min: 1 mean: 1.6 | 0.8 max: 4
-# Geometric statistics
-#   face quality: min: 0.751755 mean: 0.828837 | 0.0487075 max: 0.870694
-#   face area  : min: 0.25 mean: 0.3125 | 0.108253 max: 0.5
-#   edge length : min: 0.5 mean: 1.12707 | 0.360144 max: 1.80278
diff --git a/test/boolean/set_t1_t2.sh b/test/boolean/set_t1_t2.sh
deleted file mode 100755
index ce484a6..0000000
--- a/test/boolean/set_t1_t2.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t2; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t22 b/test/boolean/set_t1_t22
deleted file mode 100644
index 7bceddf..0000000
--- a/test/boolean/set_t1_t22
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 4 edges: 5 faces: 2
-# Connectivity statistics
-#   incompatible faces: 2
-#   duplicate faces: 0
-#   boundary edges: 4
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.5 | 0.5 max: 3
-#   faces per edge: min: 1 mean: 1.2 | 0.4 max: 2
-# Geometric statistics
-#   face quality: min: 0.944203 mean: 0.944203 | 4.96645e-09 max: 0.944203
-#   face area  : min: 1 mean: 1 | 0 max: 1
-#   edge length : min: 1.41421 mean: 1.53137 | 0.234315 max: 2
diff --git a/test/boolean/set_t1_t22.sh b/test/boolean/set_t1_t22.sh
deleted file mode 100755
index c67b298..0000000
--- a/test/boolean/set_t1_t22.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t22; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t23 b/test/boolean/set_t1_t23
deleted file mode 100644
index 4f5b8b5..0000000
--- a/test/boolean/set_t1_t23
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 5 edges: 7 faces: 3
-# Connectivity statistics
-#   incompatible faces: 2
-#   duplicate faces: 0
-#   boundary edges: 5
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 2.8 | 0.748331 max: 4
-#   faces per edge: min: 1 mean: 1.28571 | 0.451754 max: 2
-# Geometric statistics
-#   face quality: min: 0.613267 mean: 0.833891 | 0.156005 max: 0.944203
-#   face area  : min: 0.25 mean: 0.75 | 0.353553 max: 1
-#   edge length : min: 0.5 mean: 1.4228 | 0.435791 max: 2
diff --git a/test/boolean/set_t1_t23.sh b/test/boolean/set_t1_t23.sh
deleted file mode 100755
index 3a9cf0c..0000000
--- a/test/boolean/set_t1_t23.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t23; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t24 b/test/boolean/set_t1_t24
deleted file mode 100644
index 215a12c..0000000
--- a/test/boolean/set_t1_t24
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 6 edges: 9 faces: 4
-# Connectivity statistics
-#   incompatible faces: 2
-#   duplicate faces: 0
-#   boundary edges: 6
-#   duplicate edges: 0
-#   non-manifold edges: 0
-#   edges per vertex: min: 2 mean: 3 | 1 max: 4
-#   faces per edge: min: 1 mean: 1.33333 | 0.471405 max: 2
-# Geometric statistics
-#   face quality: min: 0.613267 mean: 0.778735 | 0.165468 max: 0.944203
-#   face area  : min: 0.25 mean: 0.625 | 0.375 max: 1
-#   edge length : min: 0.5 mean: 1.36249 | 0.504711 max: 2
diff --git a/test/boolean/set_t1_t24.sh b/test/boolean/set_t1_t24.sh
deleted file mode 100755
index 59f2f31..0000000
--- a/test/boolean/set_t1_t24.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t24; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t3 b/test/boolean/set_t1_t3
deleted file mode 100644
index 0336ee1..0000000
--- a/test/boolean/set_t1_t3
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 10 edges: 22 faces: 13
-# Connectivity statistics
-#   incompatible faces: 7
-#   duplicate faces: 0
-#   boundary edges: 9
-#   duplicate edges: 0
-#   non-manifold edges: 2
-#   edges per vertex: min: 2 mean: 4.4 | 1.74356 max: 7
-#   faces per edge: min: 1 mean: 1.77273 | 0.849161 max: 4
-# Geometric statistics
-#   face quality: min: 0.751755 mean: 0.85275 | 0.0674633 max: 0.944203
-#   face area  : min: 0.125 mean: 0.269231 | 0.107932 max: 0.5
-#   edge length : min: 0.5 mean: 1.02544 | 0.37637 max: 1.80278
diff --git a/test/boolean/set_t1_t3.sh b/test/boolean/set_t1_t3.sh
deleted file mode 100755
index 97de47c..0000000
--- a/test/boolean/set_t1_t3.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t3; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t4 b/test/boolean/set_t1_t4
deleted file mode 100644
index 40a96b8..0000000
--- a/test/boolean/set_t1_t4
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 9 edges: 20 faces: 12
-# Connectivity statistics
-#   incompatible faces: 8
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 2
-#   edges per vertex: min: 3 mean: 4.44444 | 1.34256 max: 6
-#   faces per edge: min: 1 mean: 1.8 | 0.87178 max: 4
-# Geometric statistics
-#   face quality: min: 0.751755 mean: 0.822966 | 0.0531924 max: 0.870694
-#   face area  : min: 0.25 mean: 0.291667 | 0.0931695 max: 0.5
-#   edge length : min: 0.5 mean: 1.12353 | 0.353807 max: 1.80278
diff --git a/test/boolean/set_t1_t4.sh b/test/boolean/set_t1_t4.sh
deleted file mode 100755
index ab3ecf5..0000000
--- a/test/boolean/set_t1_t4.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t4; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t5 b/test/boolean/set_t1_t5
deleted file mode 100644
index 0299431..0000000
--- a/test/boolean/set_t1_t5
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 10 edges: 22 faces: 13
-# Connectivity statistics
-#   incompatible faces: 7
-#   duplicate faces: 0
-#   boundary edges: 9
-#   duplicate edges: 0
-#   non-manifold edges: 2
-#   edges per vertex: min: 3 mean: 4.4 | 1.49666 max: 7
-#   faces per edge: min: 1 mean: 1.77273 | 0.849161 max: 4
-# Geometric statistics
-#   face quality: min: 0.693229 mean: 0.825106 | 0.0798649 max: 0.944203
-#   face area  : min: 0.125 mean: 0.301093 | 0.112731 max: 0.5
-#   edge length : min: 0.5 mean: 1.10154 | 0.415896 max: 1.80278
diff --git a/test/boolean/set_t1_t5.sh b/test/boolean/set_t1_t5.sh
deleted file mode 100755
index 3972a13..0000000
--- a/test/boolean/set_t1_t5.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t5; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t6 b/test/boolean/set_t1_t6
deleted file mode 100644
index fd56e10..0000000
--- a/test/boolean/set_t1_t6
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 7 edges: 13 faces: 7
-# Connectivity statistics
-#   incompatible faces: 4
-#   duplicate faces: 0
-#   boundary edges: 7
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.71429 | 1.38505 max: 6
-#   faces per edge: min: 1 mean: 1.61538 | 0.835598 max: 4
-# Geometric statistics
-#   face quality: min: 0.527186 mean: 0.620237 | 0.0812647 max: 0.719528
-#   face area  : min: 0.075 mean: 0.164286 | 0.116387 max: 0.4
-#   edge length : min: 0.15 mean: 1.06864 | 0.425992 max: 2
diff --git a/test/boolean/set_t1_t6.sh b/test/boolean/set_t1_t6.sh
deleted file mode 100755
index 9a16eee..0000000
--- a/test/boolean/set_t1_t6.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t6; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t7 b/test/boolean/set_t1_t7
deleted file mode 100644
index ceb8355..0000000
--- a/test/boolean/set_t1_t7
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 6 edges: 11 faces: 6
-# Connectivity statistics
-#   incompatible faces: 2
-#   duplicate faces: 0
-#   boundary edges: 5
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.66667 | 0.942809 max: 5
-#   faces per edge: min: 1 mean: 1.63636 | 0.642824 max: 3
-# Geometric statistics
-#   face quality: min: 0.444182 mean: 0.594293 | 0.140079 max: 0.751755
-#   face area  : min: 0.05 mean: 0.175 | 0.134629 max: 0.4
-#   edge length : min: 0.1 mean: 1.07667 | 0.465016 max: 2
diff --git a/test/boolean/set_t1_t7.sh b/test/boolean/set_t1_t7.sh
deleted file mode 100755
index 67b6b2a..0000000
--- a/test/boolean/set_t1_t7.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t7; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t1_t9 b/test/boolean/set_t1_t9
deleted file mode 100644
index 1d91d6d..0000000
--- a/test/boolean/set_t1_t9
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 8 edges: 17 faces: 10
-# Connectivity statistics
-#   incompatible faces: 8
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 2
-#   edges per vertex: min: 3 mean: 4.25 | 1.19896 max: 6
-#   faces per edge: min: 1 mean: 1.76471 | 0.941176 max: 4
-# Geometric statistics
-#   face quality: min: 0.751755 mean: 0.837209 | 0.0466718 max: 0.870694
-#   face area  : min: 0.25 mean: 0.3 | 0.1 max: 0.5
-#   edge length : min: 0.5 mean: 1.12601 | 0.338309 max: 1.80278
diff --git a/test/boolean/set_t1_t9.sh b/test/boolean/set_t1_t9.sh
deleted file mode 100755
index 3cfba63..0000000
--- a/test/boolean/set_t1_t9.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t1 t9; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t25_t26.sh b/test/boolean/set_t25_t26.sh
deleted file mode 100755
index d33b946..0000000
--- a/test/boolean/set_t25_t26.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t25 t26; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/set_t27_t28 b/test/boolean/set_t27_t28
deleted file mode 100644
index 1bdff4f..0000000
--- a/test/boolean/set_t27_t28
+++ /dev/null
@@ -1,13 +0,0 @@
-# vertices: 7 edges: 11 faces: 5
-# Connectivity statistics
-#   incompatible faces: 2
-#   duplicate faces: 0
-#   boundary edges: 8
-#   duplicate edges: 0
-#   non-manifold edges: 1
-#   edges per vertex: min: 2 mean: 3.14286 | 1.35526 max: 6
-#   faces per edge: min: 1 mean: 1.36364 | 0.642824 max: 3
-# Geometric statistics
-#   face quality: min: 0.397406 mean: 0.727301 | 0.192196 max: 0.941237
-#   face area  : min: 0.333332 mean: 1.45709 | 1.26757 max: 3.53626
-#   edge length : min: 0.288675 mean: 2.17848 | 1.21404 max: 4.04145
diff --git a/test/boolean/set_t27_t28.sh b/test/boolean/set_t27_t28.sh
deleted file mode 100755
index 62596b6..0000000
--- a/test/boolean/set_t27_t28.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-if ./set.sh t27 t28; then
-    exit 1
-fi
-exit 0
diff --git a/test/boolean/surfaces/.arch-ids/.cvsignore.id b/test/boolean/surfaces/.arch-ids/.cvsignore.id
new file mode 100644
index 0000000..0956815
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/.cvsignore.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:29:53 2004 15117.1
diff --git a/test/boolean/surfaces/.arch-ids/1.gts.id b/test/boolean/surfaces/.arch-ids/1.gts.id
new file mode 100644
index 0000000..11073b1
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/1.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.171
diff --git a/test/boolean/surfaces/.arch-ids/2.gts.id b/test/boolean/surfaces/.arch-ids/2.gts.id
new file mode 100644
index 0000000..eca0dcd
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/2.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.172
diff --git a/test/boolean/surfaces/.arch-ids/=id b/test/boolean/surfaces/.arch-ids/=id
new file mode 100644
index 0000000..5912964
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/=id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.170
diff --git a/test/boolean/surfaces/.arch-ids/a10.gts.id b/test/boolean/surfaces/.arch-ids/a10.gts.id
new file mode 100644
index 0000000..514b99f
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/a10.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.177
diff --git a/test/boolean/surfaces/.arch-ids/a23.gts.id b/test/boolean/surfaces/.arch-ids/a23.gts.id
new file mode 100644
index 0000000..b553db3
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/a23.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.178
diff --git a/test/boolean/surfaces/.arch-ids/a24.gts.id b/test/boolean/surfaces/.arch-ids/a24.gts.id
new file mode 100644
index 0000000..4e67aa7
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/a24.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.179
diff --git a/test/boolean/surfaces/.arch-ids/a25.gts.id b/test/boolean/surfaces/.arch-ids/a25.gts.id
new file mode 100644
index 0000000..3c69a4e
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/a25.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.180
diff --git a/test/boolean/surfaces/.arch-ids/a8.gts.id b/test/boolean/surfaces/.arch-ids/a8.gts.id
new file mode 100644
index 0000000..c0a196d
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/a8.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.181
diff --git a/test/boolean/surfaces/.arch-ids/a9.gts.id b/test/boolean/surfaces/.arch-ids/a9.gts.id
new file mode 100644
index 0000000..8bdccdb
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/a9.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.182
diff --git a/test/boolean/surfaces/.arch-ids/b10.gts.id b/test/boolean/surfaces/.arch-ids/b10.gts.id
new file mode 100644
index 0000000..512d93e
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/b10.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.183
diff --git a/test/boolean/surfaces/.arch-ids/b23.gts.id b/test/boolean/surfaces/.arch-ids/b23.gts.id
new file mode 100644
index 0000000..9d04cd2
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/b23.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.184
diff --git a/test/boolean/surfaces/.arch-ids/b24.gts.id b/test/boolean/surfaces/.arch-ids/b24.gts.id
new file mode 100644
index 0000000..8ff0087
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/b24.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.185
diff --git a/test/boolean/surfaces/.arch-ids/b25.gts.id b/test/boolean/surfaces/.arch-ids/b25.gts.id
new file mode 100644
index 0000000..3b9701e
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/b25.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.186
diff --git a/test/boolean/surfaces/.arch-ids/b8.gts.id b/test/boolean/surfaces/.arch-ids/b8.gts.id
new file mode 100644
index 0000000..5b101a8
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/b8.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.187
diff --git a/test/boolean/surfaces/.arch-ids/b9.gts.id b/test/boolean/surfaces/.arch-ids/b9.gts.id
new file mode 100644
index 0000000..9f55210
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/b9.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.188
diff --git a/test/boolean/surfaces/.arch-ids/cube.id b/test/boolean/surfaces/.arch-ids/cube.id
new file mode 100644
index 0000000..f4a3f39
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.189
diff --git a/test/boolean/surfaces/.arch-ids/cube1.id b/test/boolean/surfaces/.arch-ids/cube1.id
new file mode 100644
index 0000000..0429c70
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube1.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.190
diff --git a/test/boolean/surfaces/.arch-ids/cube10.id b/test/boolean/surfaces/.arch-ids/cube10.id
new file mode 100644
index 0000000..ee4a0c2
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube10.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.191
diff --git a/test/boolean/surfaces/.arch-ids/cube2.id b/test/boolean/surfaces/.arch-ids/cube2.id
new file mode 100644
index 0000000..877ab18
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube2.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.192
diff --git a/test/boolean/surfaces/.arch-ids/cube4.id b/test/boolean/surfaces/.arch-ids/cube4.id
new file mode 100644
index 0000000..683fb5a
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube4.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.193
diff --git a/test/boolean/surfaces/.arch-ids/cube5.id b/test/boolean/surfaces/.arch-ids/cube5.id
new file mode 100644
index 0000000..63804d0
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube5.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.194
diff --git a/test/boolean/surfaces/.arch-ids/cube6.id b/test/boolean/surfaces/.arch-ids/cube6.id
new file mode 100644
index 0000000..42b91d5
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube6.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.195
diff --git a/test/boolean/surfaces/.arch-ids/cube7.id b/test/boolean/surfaces/.arch-ids/cube7.id
new file mode 100644
index 0000000..3445fc9
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube7.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.196
diff --git a/test/boolean/surfaces/.arch-ids/cube8.id b/test/boolean/surfaces/.arch-ids/cube8.id
new file mode 100644
index 0000000..0b05976
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube8.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.197
diff --git a/test/boolean/surfaces/.arch-ids/cube9.id b/test/boolean/surfaces/.arch-ids/cube9.id
new file mode 100644
index 0000000..2388495
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cube9.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.198
diff --git a/test/boolean/surfaces/.arch-ids/cutter.id b/test/boolean/surfaces/.arch-ids/cutter.id
new file mode 100644
index 0000000..b5a2d99
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/cutter.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.199
diff --git a/test/boolean/surfaces/.arch-ids/gts-crash.gts.id b/test/boolean/surfaces/.arch-ids/gts-crash.gts.id
new file mode 100644
index 0000000..ac73197
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/gts-crash.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.200
diff --git a/test/boolean/surfaces/.arch-ids/gts-crash1.gts.id b/test/boolean/surfaces/.arch-ids/gts-crash1.gts.id
new file mode 100644
index 0000000..ebf8b89
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/gts-crash1.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.201
diff --git a/test/boolean/surfaces/.arch-ids/horse4.gts.id b/test/boolean/surfaces/.arch-ids/horse4.gts.id
new file mode 100644
index 0000000..82780de
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/horse4.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.202
diff --git a/test/boolean/surfaces/.arch-ids/horse5.gts.id b/test/boolean/surfaces/.arch-ids/horse5.gts.id
new file mode 100644
index 0000000..392b6f2
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/horse5.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.203
diff --git a/test/boolean/surfaces/.arch-ids/horse6.gts.id b/test/boolean/surfaces/.arch-ids/horse6.gts.id
new file mode 100644
index 0000000..983f842
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/horse6.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.204
diff --git a/test/boolean/surfaces/.arch-ids/loc1.id b/test/boolean/surfaces/.arch-ids/loc1.id
new file mode 100644
index 0000000..99f508b
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/loc1.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.205
diff --git a/test/boolean/surfaces/.arch-ids/loc2.id b/test/boolean/surfaces/.arch-ids/loc2.id
new file mode 100644
index 0000000..9bd1908
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/loc2.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.206
diff --git a/test/boolean/surfaces/.arch-ids/p1.id b/test/boolean/surfaces/.arch-ids/p1.id
new file mode 100644
index 0000000..20cec41
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/p1.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.207
diff --git a/test/boolean/surfaces/.arch-ids/p2.id b/test/boolean/surfaces/.arch-ids/p2.id
new file mode 100644
index 0000000..399b4e8
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/p2.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.208
diff --git a/test/boolean/surfaces/.arch-ids/sphere.gts.id b/test/boolean/surfaces/.arch-ids/sphere.gts.id
new file mode 100644
index 0000000..a18d8b8
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/sphere.gts.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.209
diff --git a/test/boolean/surfaces/.arch-ids/sponge.id b/test/boolean/surfaces/.arch-ids/sponge.id
new file mode 100644
index 0000000..86ece5a
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/sponge.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.210
diff --git a/test/boolean/surfaces/.arch-ids/t1.id b/test/boolean/surfaces/.arch-ids/t1.id
new file mode 100644
index 0000000..b78e337
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t1.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.211
diff --git a/test/boolean/surfaces/.arch-ids/t10.id b/test/boolean/surfaces/.arch-ids/t10.id
new file mode 100644
index 0000000..3776694
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t10.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.212
diff --git a/test/boolean/surfaces/.arch-ids/t11.id b/test/boolean/surfaces/.arch-ids/t11.id
new file mode 100644
index 0000000..622e0dc
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t11.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.213
diff --git a/test/boolean/surfaces/.arch-ids/t12.id b/test/boolean/surfaces/.arch-ids/t12.id
new file mode 100644
index 0000000..b7e17e4
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t12.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.214
diff --git a/test/boolean/surfaces/.arch-ids/t13.id b/test/boolean/surfaces/.arch-ids/t13.id
new file mode 100644
index 0000000..4f6a9b5
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t13.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.215
diff --git a/test/boolean/surfaces/.arch-ids/t14.id b/test/boolean/surfaces/.arch-ids/t14.id
new file mode 100644
index 0000000..fc77675
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t14.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.216
diff --git a/test/boolean/surfaces/.arch-ids/t15.id b/test/boolean/surfaces/.arch-ids/t15.id
new file mode 100644
index 0000000..e0540fc
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t15.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.217
diff --git a/test/boolean/surfaces/.arch-ids/t16.id b/test/boolean/surfaces/.arch-ids/t16.id
new file mode 100644
index 0000000..e062179
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t16.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.218
diff --git a/test/boolean/surfaces/.arch-ids/t17.id b/test/boolean/surfaces/.arch-ids/t17.id
new file mode 100644
index 0000000..8f5698d
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t17.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.219
diff --git a/test/boolean/surfaces/.arch-ids/t18.id b/test/boolean/surfaces/.arch-ids/t18.id
new file mode 100644
index 0000000..72a1ada
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t18.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.220
diff --git a/test/boolean/surfaces/.arch-ids/t19.id b/test/boolean/surfaces/.arch-ids/t19.id
new file mode 100644
index 0000000..a1842a6
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t19.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.221
diff --git a/test/boolean/surfaces/.arch-ids/t2.id b/test/boolean/surfaces/.arch-ids/t2.id
new file mode 100644
index 0000000..109f963
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t2.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.222
diff --git a/test/boolean/surfaces/.arch-ids/t20.id b/test/boolean/surfaces/.arch-ids/t20.id
new file mode 100644
index 0000000..9abe160
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t20.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.223
diff --git a/test/boolean/surfaces/.arch-ids/t21.id b/test/boolean/surfaces/.arch-ids/t21.id
new file mode 100644
index 0000000..999bcef
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t21.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.224
diff --git a/test/boolean/surfaces/.arch-ids/t22.id b/test/boolean/surfaces/.arch-ids/t22.id
new file mode 100644
index 0000000..4ab86c4
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t22.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.225
diff --git a/test/boolean/surfaces/.arch-ids/t23.id b/test/boolean/surfaces/.arch-ids/t23.id
new file mode 100644
index 0000000..197118f
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t23.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.226
diff --git a/test/boolean/surfaces/.arch-ids/t24.id b/test/boolean/surfaces/.arch-ids/t24.id
new file mode 100644
index 0000000..cb03432
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t24.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.227
diff --git a/test/boolean/surfaces/.arch-ids/t25.id b/test/boolean/surfaces/.arch-ids/t25.id
new file mode 100644
index 0000000..47e4019
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t25.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.228
diff --git a/test/boolean/surfaces/.arch-ids/t26.id b/test/boolean/surfaces/.arch-ids/t26.id
new file mode 100644
index 0000000..337f8b4
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t26.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.229
diff --git a/test/boolean/surfaces/.arch-ids/t27.id b/test/boolean/surfaces/.arch-ids/t27.id
new file mode 100644
index 0000000..62d01b4
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t27.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.230
diff --git a/test/boolean/surfaces/.arch-ids/t28.id b/test/boolean/surfaces/.arch-ids/t28.id
new file mode 100644
index 0000000..5862f18
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t28.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.231
diff --git a/test/boolean/surfaces/.arch-ids/t29.id b/test/boolean/surfaces/.arch-ids/t29.id
new file mode 100644
index 0000000..11aca52
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t29.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.232
diff --git a/test/boolean/surfaces/.arch-ids/t3.id b/test/boolean/surfaces/.arch-ids/t3.id
new file mode 100644
index 0000000..176808e
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t3.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.233
diff --git a/test/boolean/surfaces/.arch-ids/t30.id b/test/boolean/surfaces/.arch-ids/t30.id
new file mode 100644
index 0000000..b43ac24
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t30.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.234
diff --git a/test/boolean/surfaces/.arch-ids/t31.id b/test/boolean/surfaces/.arch-ids/t31.id
new file mode 100644
index 0000000..96e8370
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t31.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.235
diff --git a/test/boolean/surfaces/.arch-ids/t32.id b/test/boolean/surfaces/.arch-ids/t32.id
new file mode 100644
index 0000000..51164bd
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t32.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.236
diff --git a/test/boolean/surfaces/.arch-ids/t4.id b/test/boolean/surfaces/.arch-ids/t4.id
new file mode 100644
index 0000000..fe06431
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t4.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.237
diff --git a/test/boolean/surfaces/.arch-ids/t5.id b/test/boolean/surfaces/.arch-ids/t5.id
new file mode 100644
index 0000000..9d91283
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t5.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.238
diff --git a/test/boolean/surfaces/.arch-ids/t6.id b/test/boolean/surfaces/.arch-ids/t6.id
new file mode 100644
index 0000000..6c125d2
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t6.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.239
diff --git a/test/boolean/surfaces/.arch-ids/t7.id b/test/boolean/surfaces/.arch-ids/t7.id
new file mode 100644
index 0000000..d39ee19
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t7.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.240
diff --git a/test/boolean/surfaces/.arch-ids/t9.id b/test/boolean/surfaces/.arch-ids/t9.id
new file mode 100644
index 0000000..af22ee6
--- /dev/null
+++ b/test/boolean/surfaces/.arch-ids/t9.id
@@ -0,0 +1 @@
+Stephane Popinet <popinet at users.sourceforge.net> Mon Oct 11 11:04:28 2004 1558.241
diff --git a/test/boolean/1.gts b/test/boolean/surfaces/1.gts
similarity index 100%
rename from test/boolean/1.gts
rename to test/boolean/surfaces/1.gts
diff --git a/test/boolean/2.gts b/test/boolean/surfaces/2.gts
similarity index 100%
rename from test/boolean/2.gts
rename to test/boolean/surfaces/2.gts
diff --git a/test/boolean/surfaces/a10.gts b/test/boolean/surfaces/a10.gts
new file mode 100644
index 0000000..303b011
--- /dev/null
+++ b/test/boolean/surfaces/a10.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+2 0 0
+0 0 2
+0 2 0
+0 0 0
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/a23.gts b/test/boolean/surfaces/a23.gts
new file mode 100644
index 0000000..303b011
--- /dev/null
+++ b/test/boolean/surfaces/a23.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+2 0 0
+0 0 2
+0 2 0
+0 0 0
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/a24.gts b/test/boolean/surfaces/a24.gts
new file mode 100644
index 0000000..303b011
--- /dev/null
+++ b/test/boolean/surfaces/a24.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+2 0 0
+0 0 2
+0 2 0
+0 0 0
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/a25.gts b/test/boolean/surfaces/a25.gts
new file mode 100644
index 0000000..303b011
--- /dev/null
+++ b/test/boolean/surfaces/a25.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+2 0 0
+0 0 2
+0 2 0
+0 0 0
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/a8.gts b/test/boolean/surfaces/a8.gts
new file mode 100644
index 0000000..303b011
--- /dev/null
+++ b/test/boolean/surfaces/a8.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+2 0 0
+0 0 2
+0 2 0
+0 0 0
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/a9.gts b/test/boolean/surfaces/a9.gts
new file mode 100644
index 0000000..303b011
--- /dev/null
+++ b/test/boolean/surfaces/a9.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+2 0 0
+0 0 2
+0 2 0
+0 0 0
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/b10.gts b/test/boolean/surfaces/b10.gts
new file mode 100644
index 0000000..3cf2f0c
--- /dev/null
+++ b/test/boolean/surfaces/b10.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+-1 1 1
+0 0 2
+3 -3 1
+3 1 1
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/b23.gts b/test/boolean/surfaces/b23.gts
new file mode 100644
index 0000000..1411bf1
--- /dev/null
+++ b/test/boolean/surfaces/b23.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+0 3 1
+0 0 4
+0 0 1
+1 0 1
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/b24.gts b/test/boolean/surfaces/b24.gts
new file mode 100644
index 0000000..1411bf1
--- /dev/null
+++ b/test/boolean/surfaces/b24.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+0 3 1
+0 0 4
+0 0 1
+1 0 1
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/b25.gts b/test/boolean/surfaces/b25.gts
new file mode 100644
index 0000000..55f8649
--- /dev/null
+++ b/test/boolean/surfaces/b25.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+0 3 1
+0 0 2
+0 0 1
+1 0 1
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/b8.gts b/test/boolean/surfaces/b8.gts
new file mode 100644
index 0000000..2330323
--- /dev/null
+++ b/test/boolean/surfaces/b8.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+3 -3 1
+3 1 1
+-1 1 1
+-1 -1 4
+1 2
+3 1
+2 3
+3 4
+1 4
+2 4
+1 2 3
+4 2 5
+6 3 4
+5 1 6
diff --git a/test/boolean/surfaces/b9.gts b/test/boolean/surfaces/b9.gts
new file mode 100644
index 0000000..acb551a
--- /dev/null
+++ b/test/boolean/surfaces/b9.gts
@@ -0,0 +1,15 @@
+4 6 4 GtsSurface GtsFace GtsEdge GtsVertex
+-1 1 1
+0 0 4
+3 -3 1
+3 1 1
+1 2
+1 3
+3 2
+4 2
+4 1
+3 4
+1 2 3
+4 5 1
+3 6 4
+6 2 5
diff --git a/test/boolean/surfaces/cube b/test/boolean/surfaces/cube
new file mode 100644
index 0000000..77d3795
--- /dev/null
+++ b/test/boolean/surfaces/cube
@@ -0,0 +1,39 @@
+8 18 12
+0 -1.63299 -1.5 A
+-1.63299 0 -1.5 B
+0 1.63299 -1.5 C
+1.63299 0 -1.5 D
+0 -1.63299 1.1547 E
+-1.63299 0 1.1547 F
+0 1.63299 1.1547 G
+1.63299 0 1.1547 H
+3 1 CA
+2 1 BA
+6 1 FA
+2 6 BF
+2 7 BG
+3 2 CB
+3 7 CG
+3 8 CH
+4 3 DC
+4 8 DH
+5 1 EA
+4 5 DE
+1 4 AD
+6 5 FE
+7 6 GF
+5 8 EH
+7 5 GE
+8 7 HG
+9 13 1 ACD
+6 1 2 CBA
+4 2 3 ABE
+14 3 11 FAE
+4 15 5 BFG
+6 5 7 BCG
+7 18 8 CGH
+9 8 10 CHD
+10 16 12 DHE
+13 12 11 EAD
+15 14 17 GFE
+18 17 16 HGE
diff --git a/test/boolean/cube1 b/test/boolean/surfaces/cube1
similarity index 100%
rename from test/boolean/cube1
rename to test/boolean/surfaces/cube1
diff --git a/test/boolean/surfaces/cube10 b/test/boolean/surfaces/cube10
new file mode 100644
index 0000000..089a573
--- /dev/null
+++ b/test/boolean/surfaces/cube10
@@ -0,0 +1,39 @@
+8 18 12 GtsSurface GtsFace GtsEdge GtsVertex
+3.464094909 3.464094909 -1.5
+1.154698303 3.464094909 -1.5
+3.464094909 1.154698303 -1.5
+1.154698303 1.154698303 -1.5
+1.154698303 1.154698303 1.1547
+3.464094909 1.154698303 1.1547
+1.154698303 3.464094909 1.1547
+3.464094909 3.464094909 1.1547
+1 2
+3 1
+2 3
+2 4
+4 3
+4 5
+5 3
+5 6
+6 3
+7 5
+4 7
+2 7
+8 7
+2 8
+1 8
+6 8
+1 6
+7 6
+1 2 3
+4 3 5
+6 5 7
+8 7 9
+6 10 11
+4 11 12
+12 13 14
+1 14 15
+15 16 17
+2 17 9
+10 8 18
+13 18 16
diff --git a/test/boolean/cube2 b/test/boolean/surfaces/cube2
similarity index 100%
rename from test/boolean/cube2
rename to test/boolean/surfaces/cube2
diff --git a/test/boolean/cube4 b/test/boolean/surfaces/cube4
similarity index 100%
rename from test/boolean/cube4
rename to test/boolean/surfaces/cube4
diff --git a/test/boolean/cube5 b/test/boolean/surfaces/cube5
similarity index 100%
rename from test/boolean/cube5
rename to test/boolean/surfaces/cube5
diff --git a/test/boolean/cube6 b/test/boolean/surfaces/cube6
similarity index 100%
rename from test/boolean/cube6
rename to test/boolean/surfaces/cube6
diff --git a/test/boolean/cube7 b/test/boolean/surfaces/cube7
similarity index 100%
rename from test/boolean/cube7
rename to test/boolean/surfaces/cube7
diff --git a/test/boolean/surfaces/cube8 b/test/boolean/surfaces/cube8
new file mode 100644
index 0000000..1de0c5b
--- /dev/null
+++ b/test/boolean/surfaces/cube8
@@ -0,0 +1,39 @@
+8 18 12 GtsSurface GtsFace GtsEdge GtsVertex
+2.876285154e-07 -1.632989974 -1.500000029
+1.632990003 3.111904603e-07 -1.499999997
+2.829951898e-07 -1.63299002 1.154699971
+1.632989998 2.648572046e-07 1.154700003
+-2.823925276e-07 1.632990026 -1.499999971
+-2.870258532e-07 1.63298998 1.154700029
+-1.632989997 -2.588305827e-07 -1.500000003
+-1.632990002 -3.051638383e-07 1.154699997
+1 2
+2 3
+3 1
+2 4
+3 4
+2 5
+5 4
+5 6
+4 6
+5 7
+7 6
+7 8
+6 8
+8 3
+8 1
+7 1
+5 1
+6 3
+1 2 3
+4 5 2
+6 7 4
+8 9 7
+10 11 8
+12 13 11
+14 15 3
+12 16 15
+10 17 16
+6 1 17
+9 18 5
+13 14 18
diff --git a/test/boolean/surfaces/cube9 b/test/boolean/surfaces/cube9
new file mode 100644
index 0000000..930cb91
--- /dev/null
+++ b/test/boolean/surfaces/cube9
@@ -0,0 +1,39 @@
+8 18 12 GtsSurface GtsFace GtsEdge GtsVertex
+1.154698303 -1.154698303 -1.5
+1.154698303 1.154698303 -1.5
+1.154698303 -1.154698303 1.1547
+1.154698303 1.154698303 1.1547
+-1.154698303 1.154698303 -1.5
+-1.154698303 1.154698303 1.1547
+-1.154698303 -1.154698303 -1.5
+-1.154698303 -1.154698303 1.1547
+1 2
+2 3
+3 1
+2 4
+3 4
+2 5
+5 4
+5 6
+4 6
+5 7
+7 6
+7 8
+6 8
+8 3
+8 1
+7 1
+5 1
+6 3
+1 2 3
+4 5 2
+6 7 4
+8 9 7
+10 11 8
+12 13 11
+14 15 3
+12 16 15
+10 17 16
+6 1 17
+9 18 5
+13 14 18
diff --git a/test/boolean/cutter b/test/boolean/surfaces/cutter
similarity index 100%
rename from test/boolean/cutter
rename to test/boolean/surfaces/cutter
diff --git a/test/boolean/surfaces/gts-crash.gts b/test/boolean/surfaces/gts-crash.gts
new file mode 100644
index 0000000..60a252c
--- /dev/null
+++ b/test/boolean/surfaces/gts-crash.gts
@@ -0,0 +1,248 @@
+# object: Sphere Tessellation 1
+# num points [42] num edges [120] num triangles [80]
+42 120 80
+# points
+2.6 4.25325 2.62866
+2.6 5 0
+5.1 4.04508 1.54508
+-0.0286556 -0 -4.25325
+1.05492 -2.5 -4.04508
+-1.44508 -1.54508 -2.5
+-2.4 -0 0
+-1.44508 -1.54508 2.5
+-1.44508 1.54508 2.5
+0.1 4.04508 -1.54508
+2.6 4.25325 -2.62866
+6.64508 1.54508 -2.5
+4.14508 2.5 -4.04508
+5.1 4.04508 -1.54508
+5.22866 -0 4.25325
+6.64508 1.54508 2.5
+6.64508 -1.54508 2.5
+2.6 -4.25325 2.62866
+0.1 -4.04508 1.54508
+1.05492 -2.5 4.04508
+-1.65325 -2.62866 0
+6.85325 2.62866 0
+7.6 -0 0
+4.14508 -2.5 4.04508
+5.1 -4.04508 1.54508
+0.1 -4.04508 -1.54508
+2.6 -0 -5
+1.05492 2.5 4.04508
+2.6 -0 5
+-0.0286556 -0 4.25325
+0.1 4.04508 1.54508
+-1.65325 2.62866 0
+1.05492 2.5 -4.04508
+-1.44508 1.54508 -2.5
+5.22866 -0 -4.25325
+2.6 -4.25325 -2.62866
+4.14508 -2.5 -4.04508
+4.14508 2.5 4.04508
+6.64508 -1.54508 -2.5
+5.1 -4.04508 -1.54508
+2.6 -5 0
+6.85325 -2.62866 0
+# edges
+13 14
+13 27
+13 33
+13 35
+13 11
+13 12
+14 22
+14 11
+14 12
+14 2
+14 3
+15 16
+15 17
+15 24
+15 29
+15 38
+16 17
+16 22
+16 23
+16 38
+16 3
+17 23
+17 24
+17 25
+17 42
+18 19
+18 20
+18 24
+18 25
+18 41
+19 20
+19 21
+19 26
+19 8
+19 41
+20 24
+20 29
+20 30
+20 8
+21 26
+21 6
+21 7
+21 8
+22 23
+22 12
+22 3
+23 39
+23 12
+23 42
+24 25
+24 29
+25 40
+25 41
+25 42
+26 36
+26 6
+26 5
+26 41
+27 33
+27 35
+27 37
+27 4
+27 5
+28 29
+28 30
+28 31
+28 38
+28 9
+28 1
+29 30
+29 38
+30 8
+30 9
+31 32
+31 9
+31 10
+31 1
+31 2
+32 34
+32 7
+32 9
+32 10
+33 34
+33 10
+33 11
+33 4
+34 6
+34 7
+34 10
+34 4
+35 37
+35 39
+35 12
+36 37
+36 5
+36 40
+36 41
+37 39
+37 5
+37 40
+38 1
+38 3
+39 12
+39 40
+39 42
+6 7
+6 4
+6 5
+7 8
+7 9
+8 9
+10 11
+10 2
+11 2
+1 2
+1 3
+2 3
+4 5
+40 41
+40 42
+# triangles
+117 116 115 
+107 108 118 
+110 111 109 
+112 114 113 
+9 1 6 
+17 13 12 
+31 27 26 
+42 109 43 
+44 19 18 
+50 29 28 
+56 57 108 
+62 118 63 
+8 10 114 
+70 65 64 
+24 50 23 
+78 115 77 
+43 34 32 
+81 74 75 
+13 23 14 
+90 86 83 
+113 78 76 
+60 4 2 
+99 95 94 
+15 14 51 
+67 69 101 
+106 87 88 
+82 76 74 
+66 77 69 
+92 91 98 
+84 85 112 
+63 99 61 
+40 32 33 
+3 5 85 
+60 61 91 
+36 28 27 
+12 16 20 
+42 41 106 
+51 36 37 
+15 71 16 
+73 68 65 
+100 94 96 
+2 3 59 
+79 89 82 
+75 66 68 
+35 26 30 
+62 59 86 
+70 37 38 
+45 7 9 
+102 101 116 
+87 107 90 
+39 31 34 
+105 104 120 
+83 84 89 
+44 45 48 
+98 100 104 
+55 58 97 
+1 8 5 
+18 21 46 
+20 102 21 
+80 88 79 
+96 97 119 
+41 40 56 
+48 103 47 
+103 93 92 
+64 67 71 
+80 81 110 
+93 6 4 
+33 35 58 
+53 30 29 
+7 46 11 
+57 55 95 
+119 53 52 
+49 47 105 
+22 17 19 
+49 25 22 
+72 38 39 
+111 73 72 
+25 54 24 
+11 117 10 
+120 52 54
diff --git a/test/boolean/surfaces/gts-crash1.gts b/test/boolean/surfaces/gts-crash1.gts
new file mode 100644
index 0000000..483959c
--- /dev/null
+++ b/test/boolean/surfaces/gts-crash1.gts
@@ -0,0 +1,248 @@
+# object: Sphere Tessellation 2
+# num points [42] num edges [120] num triangles [80]
+42 120 80
+# points
+-0 4.25325 2.62866
+-1.54508 2.5 4.04508
+-2.5 4.04508 1.54508
+5 -0 0
+4.04508 -1.54508 -2.5
+4.04508 1.54508 -2.5
+4.04508 1.54508 2.5
+4.04508 -1.54508 2.5
+-4.04508 1.54508 2.5
+-5 -0 0
+-4.25325 2.62866 0
+1.54508 -2.5 4.04508
+-0 -0 5
+2.62866 -0 4.25325
+4.25325 2.62866 0
+2.5 4.04508 1.54508
+1.54508 2.5 -4.04508
+-0 -0 -5
+2.62866 -0 -4.25325
+-0 4.25325 -2.62866
+-2.5 4.04508 -1.54508
+-1.54508 2.5 -4.04508
+4.25325 -2.62866 0
+2.5 -4.04508 1.54508
+-2.62866 -0 4.25325
+2.5 -4.04508 -1.54508
+-0 -5 0
+2.5 4.04508 -1.54508
+-1.54508 -2.5 -4.04508
+-2.62866 -0 -4.25325
+-4.04508 -1.54508 2.5
+-4.04508 -1.54508 -2.5
+-2.5 -4.04508 -1.54508
+-0 -4.25325 2.62866
+-1.54508 -2.5 4.04508
+-4.04508 1.54508 -2.5
+-0 5 0
+-0 -4.25325 -2.62866
+1.54508 -2.5 -4.04508
+-4.25325 -2.62866 0
+-2.5 -4.04508 1.54508
+1.54508 2.5 4.04508
+# edges
+1 2
+1 3
+1 16
+1 37
+1 42
+2 3
+2 9
+2 13
+2 25
+2 42
+3 9
+3 11
+3 21
+3 37
+4 5
+4 6
+4 7
+4 8
+4 15
+4 23
+5 6
+5 19
+5 23
+5 26
+5 39
+6 15
+6 17
+6 19
+6 28
+7 8
+7 14
+7 15
+7 16
+7 42
+8 12
+8 14
+8 23
+8 24
+9 10
+9 11
+9 25
+9 31
+10 11
+10 31
+10 32
+10 36
+10 40
+11 21
+11 36
+12 13
+12 14
+12 24
+12 34
+12 35
+13 14
+13 25
+13 35
+13 42
+14 42
+15 16
+15 28
+16 28
+16 37
+16 42
+17 18
+17 19
+17 20
+17 22
+17 28
+18 19
+18 22
+18 29
+18 30
+18 39
+19 39
+20 21
+20 22
+20 28
+20 37
+21 22
+21 36
+21 37
+22 30
+22 36
+23 24
+23 26
+24 26
+24 27
+24 34
+25 31
+25 35
+26 27
+26 38
+26 39
+27 33
+27 34
+27 38
+27 41
+28 37
+29 30
+29 32
+29 33
+29 38
+29 39
+30 32
+30 36
+31 35
+31 40
+31 41
+32 33
+32 36
+32 40
+33 38
+33 40
+33 41
+34 35
+34 41
+35 41
+38 39
+40 41
+# triangles
+6 2 1 
+16 21 15 
+18 30 17 
+43 40 39 
+55 51 50 
+32 33 60 
+70 66 65 
+80 77 76 
+20 15 23 
+37 85 38 
+41 7 9 
+92 88 87 
+29 69 27 
+73 100 72 
+42 41 90 
+110 102 101 
+54 53 116 
+68 67 77 
+49 81 48 
+52 89 53 
+39 42 44 
+76 79 82 
+104 103 119 
+47 44 108 
+82 14 13 
+56 57 91 
+73 71 83 
+93 97 92 
+36 35 51 
+38 52 35 
+26 61 29 
+112 114 110 
+14 4 2 
+61 60 62 
+72 104 74 
+88 96 89 
+47 112 45 
+90 91 107 
+115 98 95 
+45 111 46 
+70 74 75 
+69 78 67 
+102 113 103 
+48 13 12 
+63 3 4 
+11 6 7 
+28 27 66 
+86 87 85 
+22 75 25 
+111 105 106 
+118 116 117 
+114 120 115 
+56 9 8 
+62 63 99 
+20 37 18 
+50 54 57 
+31 59 34 
+105 101 100 
+78 99 79 
+25 94 24 
+65 68 71 
+94 119 93 
+43 46 49 
+108 109 120 
+19 26 16 
+98 117 96 
+10 1 5 
+30 36 31 
+107 118 109 
+64 5 3 
+40 12 11 
+84 80 81 
+8 10 58 
+23 24 86 
+106 83 84 
+21 28 22 
+113 95 97 
+19 17 32 
+34 64 33 
+55 58 59 
diff --git a/test/boolean/surfaces/horse4.gts b/test/boolean/surfaces/horse4.gts
new file mode 100644
index 0000000..e8bd729
--- /dev/null
+++ b/test/boolean/surfaces/horse4.gts
@@ -0,0 +1,2007 @@
+336 1002 668 GtsSurface GtsFace GtsEdge GtsVertex
+-0.01399844229 0.08714155824 0.04634542729
+-0.00711987842 0.08387148715 0.05079067138
+-0.01484915813 0.08707045042 0.052732734
+0.003890404108 0.05849699409 0.0700365001
+0.007959841128 0.0666420409 0.06391255605
+-0.002364211965 0.06814407815 0.07196998721
+-0.007084975887 0.03564502823 -0.07638398126
+-0.008566254969 0.04348836336 -0.07621774345
+-0.006334225035 0.03421663608 -0.06865274325
+-0.003481999579 -0.09338589657 -0.05987325718
+-0.007296970267 -0.08559062083 -0.0568575243
+-0.005112701734 -0.08775951431 -0.0659067124
+0.02617092473 0.01742742163 -0.04948925255
+0.03007688392 0.0186819136 -0.04969921347
+0.03053088148 0.01669467781 -0.06497438538
+-0.003699615366 -0.03773206439 0.0004140635974
+-0.003694311514 -0.05121500318 -0.005660436663
+-0.01152666534 -0.04427419908 0.0003703522132
+-0.01647276144 0.08032673265 0.03979473132
+-0.0241074271 0.08716328735 0.04002151959
+0.02993896861 -0.0225902079 0.0289264007
+0.03125122341 -0.03424555946 0.03512951938
+0.02121353734 -0.01616180915 0.03032162282
+-0.002283742907 0.04949695201 0.05002630732
+-0.004647247523 0.05793580599 0.0501508864
+0.001175076852 0.04001949318 0.0354116709
+0.02361780271 -0.04800396124 0.0374424056
+0.02257567404 -0.0356194706 0.03710108862
+0.03475685296 0.02434326422 0.01044828414
+0.03647359373 0.02970877778 -0.0006738765686
+0.03366540667 0.0189834095 -0.003421256544
+-0.004896505228 0.08032285322 0.04168668366
+0.02435973 0.04343254026 0.02842791296
+0.02143822007 0.03524024138 0.03607030603
+0.0168151967 0.05487253241 0.04848803692
+-1.133624465e-05 0.009628037481 0.02569442716
+-0.008062334012 0.01985455819 0.01843265214
+-0.002059480584 0.01754622311 0.02880224592
+0.03074110932 -0.05976714313 -0.009365613364
+0.03160611111 -0.07136520853 0.01071152464
+0.0256840097 -0.05993459004 -0.005392309077
+0.03150927455 0.03558833219 -0.00863184788
+0.03185995615 0.0238672504 -0.01331491144
+0.03269792222 0.02774989759 -0.01366839704
+0.02634806345 0.01449165035 -0.005438173991
+0.02083515746 0.005365255409 -0.01568136967
+0.0299563286 0.01319879957 -0.0006074106943
+0.03115116512 0.04058153783 0.02212312693
+0.03169056601 0.02951051593 0.02358878886
+0.03391921826 0.03830840546 0.008442848484
+-0.009675364884 -0.06915111957 -0.01504997193
+-0.002391250926 -0.07540763245 -0.01631556228
+-0.00638884051 -0.07202659066 -0.02443576241
+0.01679960964 0.05761169639 0.03944815553
+0.02172982051 0.04819570618 0.02187952003
+0.009722401526 -0.05851502173 0.03502163022
+0.0008411117095 -0.05729739477 0.03315041141
+0.003084006513 -0.0698168516 0.02704991922
+0.002492545743 0.03294985798 0.0349215895
+-0.002755758754 0.03087046002 0.03143322861
+-0.003440614802 0.04280093238 0.02219813192
+0.0001767138343 -0.08591771321 -0.04352559771
+-0.004388945417 -0.08430576183 -0.03283925489
+-0.004839743341 -0.08332962169 -0.02309175696
+0.003538493068 -0.07621110012 -0.03155393353
+-0.000459732138 -0.06443761353 -0.0187098365
+0.003473270756 -0.06942969634 -0.01897812851
+0.009655517167 -0.01493999087 -0.01853352857
+0.004565238638 0.005566691215 -0.01827593749
+-0.0004664557674 -0.009668824751 -0.0159499761
+-0.009284226198 0.02826320978 0.02061215237
+-0.007961751305 0.03875842768 0.01987714668
+-0.002761246765 0.03563828626 -0.05333519383
+0.0004863460419 0.03481585426 -0.05326379319
+-0.001456809346 0.03913147733 -0.06532529443
+-0.006670700868 0.06448930681 0.03902538105
+-0.006651319782 0.06227275219 0.04997750063
+-0.01401774003 0.06173498751 0.04790265734
+-0.01113198258 0.03374382941 0.008188171626
+0.003900548106 -0.06923060902 -0.01040347769
+-0.0007965837085 -0.07317907688 -0.007817129971
+0.02993125635 0.006120185243 -0.05980834949
+0.03001190085 0.01043597942 -0.06707322577
+0.03388215701 0.008237893114 -0.0588829558
+0.0151653196 0.0554461067 0.05546856372
+0.01209020141 0.04935675339 0.06303871036
+0.01628595239 -0.06223912157 0.001304912739
+-0.01298597885 -0.01591953895 0.007914207622
+-0.00787816591 -0.03578858385 0.01502928543
+-0.01128431748 -0.02485025832 0.003081635188
+0.04041140904 -0.02226371263 0.00921738033
+0.0376869552 -0.03255417095 0.01573857871
+0.03954613476 -0.02033348977 0.01689782248
+0.002132921331 -0.08892912242 -0.05841814456
+0.02065671057 -0.006045458414 -0.01747898914
+0.03475144348 -0.01077434682 -0.007992116082
+0.02379096772 -0.01785136934 -0.01529725114
+-0.01491740549 0.07304073986 0.07161063817
+-0.01072489496 0.0686214311 0.07095112683
+-0.004947600696 0.02947770814 -0.06376310136
+-0.004525341745 0.03261305389 -0.0555263871
+0.0304225224 -0.06386113973 -0.0447780668
+0.03531077582 -0.05945582314 -0.03898966153
+0.02803420224 -0.06598871682 -0.05982690806
+-0.03566672209 0.09282838825 0.03718569086
+-0.04392893303 0.08677706777 0.03926546961
+-0.03831287376 0.09116868231 0.04139312977
+-0.004278987696 -0.07096315113 -0.02827644712
+-0.005150102585 -0.06225913771 -0.02061674121
+-0.008924081195 -0.0648333229 -0.01934112454
+-0.006212345181 -0.06029389058 0.02626956442
+0.0008625990786 0.02239651008 -0.0188979477
+0.003917435521 0.02926893163 -0.03318223099
+0.001165097696 0.02523404795 -0.03957571933
+0.001501002207 0.0346311759 -0.06648697818
+-0.0362262157 0.08879320386 0.03129639998
+-0.04048996553 0.08225953131 0.03671018489
+-0.03490373434 0.08345472823 0.03190892503
+-0.009654232028 -0.02344999804 0.01726110988
+-0.004843662898 -0.02796858005 0.02334474771
+-0.002828992141 -0.07521371765 -0.02355240768
+-0.007477737145 -0.07956910319 -0.03375142835
+0.02232944421 0.006181420528 0.02706577046
+0.03584123283 -0.01069953232 0.02182213768
+0.00165670685 0.04848824857 0.02429042206
+-0.002278817897 0.04512691368 0.02920987406
+0.03323516033 -0.0696968104 -0.07479897823
+0.02613215487 -0.06537345703 -0.07512262717
+0.03359441511 -0.06833744979 -0.06724944763
+0.02898733887 0.02593823058 -0.03466161818
+0.02265986124 0.02344448673 -0.03668562958
+0.0420629489 -0.05851416958 0.01116026513
+0.04168033704 -0.05204777665 0.0209339508
+0.03865003768 -0.06053974898 0.02329996396
+0.008366410486 0.001238644366 0.02839127225
+0.007973494393 0.01351472969 0.03593813441
+-0.01366402841 0.0656018167 0.06920549629
+0.008841105512 0.04466351021 0.06289649136
+0.02693931829 0.0150378853 -0.06642529973
+0.03082839672 0.02288107393 -0.07477957186
+-0.002383392301 0.0584039807 0.03884915064
+-0.004575304029 0.01398540841 0.0007998749037
+-0.009981563476 0.02340079672 -0.00952749589
+-0.0044611792 0.02240905956 -0.01404341893
+-0.02733044091 0.08787125685 0.04692096172
+-0.02776993131 0.08576265958 0.05271007172
+0.0002299200355 0.03008183833 -0.0526309113
+-0.003026203328 0.02746950392 -0.05451251374
+0.02885607787 -0.06561102264 -0.02705281966
+0.02607043067 -0.05659493813 -0.02903571987
+0.0290514753 -0.06030830567 -0.01344532212
+0.016535263 0.001520034093 0.02846598072
+-0.0142127531 0.07844232256 0.07013878158
+-0.01687207412 0.08904900377 0.06004457934
+0.009893776487 0.0665557599 0.05597267721
+0.03498720328 -0.02617293678 0.02506715326
+0.004684082046 0.02528867908 0.03737786199
+0.009992052885 0.02219208401 0.04155572752
+0.000920447746 0.03538649523 -0.07646800483
+0.03116264779 0.01487256179 -0.04662811365
+0.03463515774 0.01417484338 -0.06446167085
+-0.002370331495 -0.08901111448 -0.04957451068
+-0.004922251404 -0.08076710476 -0.04445656116
+0.0261407683 0.01358268674 -0.04746464093
+0.02284284179 0.01411253532 -0.03686133085
+0.005553172136 0.03385605141 -0.01447130927
+-0.002341662409 0.03672008729 -0.01536039013
+0.005619778363 0.0273488094 -0.01693030154
+0.02693418421 0.01067263783 -0.07605973612
+0.03409201833 0.01012579517 -0.07298440008
+-0.006915371086 -0.03078296843 -0.002586910331
+0.03863769628 -0.05899099525 -0.07447174678
+0.03143473302 -0.05482375544 -0.07441868477
+-0.01054150325 0.0722570871 0.03858308538
+0.004061066873 0.06586230475 0.04510892203
+-0.001399741117 0.07361001299 0.04738100056
+0.002319455815 -0.07963608615 -0.07542054604
+0.002796762896 -0.08724112263 -0.07508023968
+-0.001232417508 -0.08211026541 -0.06523884548
+0.0368712505 -0.05917104606 -0.03000689245
+0.03495924117 -0.04944465016 -0.02216753008
+-0.005805630637 -0.003626265852 -0.00963021862
+-0.008109981364 -0.01801818376 -0.008342221735
+0.0261096969 -0.060831167 0.0336130382
+-0.02085413804 0.06744624753 0.07715163492
+0.03284800892 0.01983050268 -0.03898553991
+-0.0005804874632 0.062495903 0.03890953818
+0.004094656528 0.06367572088 0.03985060416
+-0.004070312166 0.0228175281 -0.03633004507
+-0.007496283742 0.02974386012 -0.0410566637
+0.02914021095 0.01193216523 -0.04539427666
+0.002564033262 0.04219863759 -0.07594683424
+0.01412950153 0.005814326728 -0.01873187022
+0.01848125362 0.02479111458 -0.01782380559
+0.006787630338 0.01432430154 -0.01761951969
+0.02728853829 0.01662958381 -0.01924999477
+0.02296211985 0.01671259361 -0.02826914248
+0.0292752626 0.02485046982 -0.0252506365
+0.002980496664 0.01689075277 -0.01145058778
+-0.00359722522 0.02141793406 -0.01841095986
+0.007270895278 -0.05564184244 -0.006051714029
+-0.004169409686 -0.05856353576 -0.007981391539
+0.03839088979 -0.04442700391 0.03046808042
+0.03715237448 -0.05635639292 0.02967782004
+0.002310374186 -0.08240991916 -0.02230365523
+-0.002148773376 0.04685978554 -0.07646237571
+-0.006808147712 0.0102530595 0.01012052355
+-0.006884330461 0.01634939733 0.01539412606
+-0.005672235067 -0.07565346701 -0.07601496864
+0.02884883839 -0.04543220221 -0.01595892418
+0.02004838443 0.01736686842 -0.01887254326
+-0.008158632395 -0.08143711256 -0.07113356096
+-0.008542527791 -0.08918752358 -0.07601509842
+0.02614749515 0.009599596908 -0.06096653466
+-0.01132478153 -0.01218609307 -0.002186100825
+0.03888982709 -0.01987246085 0.0004670087456
+0.03885387738 -0.00695122816 0.002724188887
+-0.02502880127 0.06799393415 0.04745503692
+-0.01646520289 0.06427402463 0.0414589967
+-0.0009174014299 0.03548220296 -0.02699873271
+-0.009027940764 0.03649718065 -0.002926517474
+0.03062899728 -0.04693951478 0.03575676012
+-0.007282507511 -0.06987221325 -0.006670021251
+0.009496035115 -0.07158672631 0.002141757922
+0.006924606536 -0.07479078747 0.009704521799
+0.03503738856 -0.04087719266 -0.00653666502
+0.03786718137 -0.04772732709 -0.007151207163
+0.0406871343 -0.03832193275 0.002257106259
+0.0373963642 -0.07025166925 -0.05982143387
+0.03342689113 -0.07374168377 -0.06043882614
+0.03376829326 -0.0680057351 -0.03993240149
+-0.004601073848 -0.0818465615 -0.06469160281
+0.03407514477 -0.06279654249 -0.06444526593
+0.02890063801 -0.06474771453 -0.06585526225
+-0.008025358077 0.07798059656 0.07007021426
+0.02054447638 0.02928234328 -0.01665001172
+0.002137134592 0.03091677162 -0.06300335728
+0.03417909793 -0.03125967083 0.002049789333
+0.03313810301 -0.06996520102 0.01776579211
+0.04056274745 -0.05487161782 -0.000528401153
+-0.002297345317 0.07681965117 0.05878376191
+0.009730320368 0.06428147005 0.04998676121
+-0.007654379709 0.04387344493 0.007914241542
+0.002122977355 -0.08487991217 -0.06486130611
+0.02408960861 0.01974478703 -0.07571295453
+0.0272104653 0.01993601863 0.02976172699
+0.01959300146 0.02002558061 0.03629598928
+0.00177787414 -0.02261065258 0.02817529957
+-0.006375590952 -0.03524177171 0.02860184258
+0.0285790395 0.03201295799 -0.01605371484
+0.0372807478 -0.05656115517 -0.00933112696
+0.03928833829 -0.05042577034 -0.01658214102
+0.01491885407 0.02108116194 0.04064544898
+0.01666291404 0.02726485016 0.04306745286
+5.161503843e-05 -0.08188556331 -0.0451450487
+0.03664623741 -0.06517041717 -0.06518961357
+0.03877333899 -0.06645632773 -0.07434102214
+-0.03230861881 0.07814008053 0.03994364243
+0.01511915673 -0.07131425889 0.01896553282
+-0.02466016904 0.07791674071 0.03910843026
+0.0106529801 -0.02928021621 -0.0126164263
+-0.004392010676 0.03047932815 -0.02700661165
+0.01419289621 0.04113946652 0.05760338076
+0.02893786116 0.04571985057 0.01298922794
+0.0269241056 0.04613001236 0.005057242502
+-8.936638223e-06 0.001792401634 0.0236408831
+0.001253452763 -0.02335770137 -0.01301516756
+0.00656419785 -0.04534550755 0.03696259889
+0.02934068445 -0.06684118077 0.02767743708
+0.01340685411 -0.06886061027 0.02828482447
+0.02466972698 -0.07091009028 0.02289838491
+0.01520667495 -0.06872824335 0.01030192437
+-0.01253586797 0.02923703745 -0.001276685102
+-0.00325110376 -0.04475472172 0.03259457136
+0.03099281876 -0.06757293423 -0.04303978316
+0.03240255314 0.009406626921 0.01386685972
+0.03939802052 -0.00984027028 0.01233394599
+0.009616490074 -0.02111062615 0.03126912781
+0.009379632204 -0.009803279448 0.02879073652
+-0.01401066421 0.06516064955 0.06065412507
+-0.02537865571 0.06972701194 0.0620825513
+-0.005354712201 0.007333715298 0.0176978225
+-0.009991545682 -0.04221273906 0.02285774271
+-0.009338984735 0.02820470028 -0.01160543829
+0.02539828273 -0.05124035662 -0.004419107231
+0.01708338267 -0.05452455959 -0.004220712182
+0.04227321942 -0.04627008297 0.01045006902
+-0.001478319938 -0.07066753655 0.01717184206
+-0.01057849769 -0.06556629942 -0.004675531915
+-0.008507195898 -0.06675308621 0.01457695108
+0.0004350155671 0.04483442686 0.05185413571
+-0.001555241965 0.0762408942 0.06239571547
+-0.007109682667 0.08707795585 0.07453126048
+0.03642061186 -0.0635795551 -0.05102307018
+0.01233133511 -0.06726494699 0.005261355338
+0.02850758762 -0.03057174847 -0.006304851448
+0.003857393423 -0.03461488405 0.03564360642
+0.002212078263 -0.03921027502 -0.001852739236
+0.03203009338 0.01227204933 0.007437079355
+-0.008898983178 0.081208568 0.07430731458
+-0.001641562141 0.04310732308 -0.004222516263
+0.03298334235 0.0006368355536 -0.005490227895
+0.004906402343 0.04862710208 0.01579711003
+-0.01257525031 -0.06035378877 0.005883008384
+-0.01121943914 -0.05358239428 0.02156663285
+0.02144798984 0.04116418781 -0.009018964492
+0.01279789151 -0.04137035725 -0.002019514067
+0.03873481409 -0.03341328307 0.02676452889
+0.003041942912 0.04735702725 0.06188822852
+-0.01974764252 0.06860381172 0.06408669745
+-0.02022883791 0.06525760891 0.06903949268
+0.01892151042 -0.03339884181 -0.008679177829
+0.03714695465 -0.06008615314 -0.005949443772
+0.03668912226 0.01706806481 -0.07522448594
+0.03012666842 -0.07243359184 -0.06048618727
+-0.008583038398 -0.05594815058 -0.006610375457
+-0.006363901332 -0.01268806292 0.02091961482
+-0.01076210902 -0.007639524678 0.01423515672
+0.02834053546 -0.04107717478 -0.004366795612
+-0.01131460587 -0.003756188948 0.005049758604
+-0.007811584756 0.003877097243 -0.001241609223
+0.01375425889 0.04887377348 0.01723621068
+0.01885037706 0.04529570703 0.00183968582
+-0.003094447591 -0.06889170009 0.004888867191
+-0.0004866945918 -0.07383535978 0.003278961381
+0.002670417794 0.03376751743 -0.03673941633
+-0.01300874897 -0.0501702459 0.003431561165
+-0.009637715747 0.08377917013 0.06480688005
+0.00459014768 -0.07475441232 0.01767730275
+0.008422114131 0.04062022127 -0.00733508274
+0.02969725442 0.00744103775 0.02020554316
+0.03287485075 -0.06627468814 -0.02506122897
+-0.02857306018 0.07398569233 0.05112764747
+0.02995439492 0.03830247904 -0.002353862053
+-0.0340305291 0.08361439294 0.05006689511
+-0.009088887017 0.03245015141 -0.01435685853
+1 2
+1 3
+3 2
+4 5
+6 5
+6 4
+7 8
+7 9
+9 8
+10 11
+11 12
+10 12
+13 14
+14 15
+13 15
+16 17
+17 18
+18 16
+1 19
+20 19
+20 1
+21 22
+21 23
+22 23
+24 25
+26 25
+26 24
+22 27
+28 22
+28 27
+29 30
+29 31
+31 30
+1 32
+2 32
+33 34
+35 33
+35 34
+36 37
+36 38
+37 38
+39 40
+40 41
+41 39
+42 43
+43 44
+42 44
+45 46
+45 47
+47 46
+48 49
+49 50
+48 50
+51 52
+51 53
+53 52
+54 33
+55 33
+54 55
+56 57
+57 58
+56 58
+59 60
+59 61
+60 61
+62 63
+62 64
+63 64
+65 66
+67 66
+65 67
+68 69
+68 70
+70 69
+71 72
+71 60
+72 60
+73 74
+75 74
+73 75
+76 77
+78 77
+76 78
+79 71
+72 79
+80 52
+80 81
+52 81
+82 83
+83 84
+84 82
+5 85
+5 86
+86 85
+41 87
+40 87
+88 89
+90 88
+90 89
+91 92
+93 91
+92 93
+18 89
+89 16
+94 10
+94 62
+62 10
+95 96
+97 96
+95 97
+98 99
+6 99
+98 6
+100 8
+101 100
+101 8
+102 103
+104 103
+102 104
+105 106
+107 106
+107 105
+108 109
+110 108
+110 109
+111 58
+111 57
+112 113
+112 114
+113 114
+115 100
+100 9
+9 115
+116 117
+116 118
+118 117
+119 120
+89 119
+89 120
+121 122
+63 122
+63 121
+123 124
+123 21
+21 124
+61 125
+61 126
+126 125
+127 128
+127 129
+129 128
+130 14
+14 131
+131 130
+132 133
+133 134
+134 132
+75 115
+115 74
+135 136
+136 38
+38 135
+4 137
+138 137
+4 138
+139 140
+139 15
+15 140
+141 76
+25 141
+76 25
+142 143
+143 144
+142 144
+145 107
+107 146
+145 146
+147 148
+147 114
+148 114
+149 150
+149 151
+151 150
+152 23
+23 123
+123 152
+153 154
+154 146
+153 146
+155 85
+155 5
+93 124
+124 156
+156 93
+157 59
+60 157
+158 157
+157 38
+38 158
+159 7
+9 159
+20 145
+1 145
+25 126
+26 126
+14 160
+161 160
+14 161
+162 163
+162 122
+122 163
+164 165
+13 165
+164 13
+166 167
+168 166
+167 168
+83 169
+170 169
+83 170
+171 89
+90 171
+128 172
+128 173
+173 172
+174 175
+176 174
+176 175
+177 178
+177 179
+179 178
+103 180
+103 181
+181 180
+182 70
+183 70
+182 183
+184 27
+27 56
+56 184
+185 98
+99 185
+130 186
+186 14
+187 188
+187 174
+174 188
+189 148
+190 189
+148 190
+84 191
+191 82
+182 142
+69 142
+182 69
+192 159
+192 115
+115 159
+193 194
+193 195
+195 194
+196 197
+197 165
+196 165
+196 198
+43 198
+43 196
+195 199
+199 200
+200 195
+201 202
+202 66
+201 66
+95 68
+97 68
+203 133
+203 204
+204 133
+205 67
+80 67
+205 80
+206 192
+206 75
+75 192
+207 208
+142 208
+142 207
+86 138
+4 86
+34 48
+48 33
+189 112
+114 189
+64 121
+209 179
+209 177
+181 210
+210 103
+196 211
+197 211
+212 209
+213 209
+212 213
+214 139
+164 214
+139 164
+215 90
+215 183
+90 183
+216 96
+217 96
+216 217
+78 218
+219 218
+78 219
+167 220
+220 221
+221 167
+32 19
+204 184
+222 204
+222 184
+81 51
+223 81
+51 223
+81 224
+224 225
+81 225
+226 227
+226 228
+228 227
+229 230
+229 231
+231 230
+232 179
+163 232
+179 163
+104 233
+234 233
+234 104
+235 6
+98 235
+166 236
+168 236
+74 237
+74 147
+147 237
+194 236
+168 194
+55 188
+54 188
+238 216
+91 216
+91 238
+132 239
+240 239
+240 132
+241 155
+242 155
+241 242
+243 221
+221 79
+79 243
+179 244
+178 244
+139 245
+245 169
+139 169
+49 246
+49 247
+247 246
+248 249
+248 120
+249 120
+250 198
+250 44
+44 198
+227 251
+251 252
+252 227
+242 35
+35 54
+242 54
+247 253
+247 254
+253 254
+210 102
+102 150
+210 150
+163 255
+179 255
+105 20
+116 20
+105 116
+172 256
+256 257
+172 257
+83 161
+170 161
+258 118
+258 117
+145 3
+146 3
+224 80
+259 224
+259 225
+172 127
+122 108
+163 108
+20 260
+260 116
+261 97
+68 261
+189 262
+262 190
+138 263
+253 138
+253 263
+264 55
+265 264
+265 55
+52 205
+64 52
+205 64
+232 209
+135 36
+266 36
+266 135
+68 267
+267 70
+57 268
+268 56
+269 270
+271 270
+269 271
+272 224
+272 259
+221 273
+273 79
+168 112
+113 168
+57 274
+274 111
+108 255
+66 108
+66 255
+149 102
+275 102
+275 149
+83 139
+276 277
+124 276
+277 124
+204 269
+134 269
+204 134
+217 91
+277 217
+277 91
+278 23
+23 279
+279 278
+280 78
+280 281
+78 281
+282 36
+282 266
+182 215
+10 163
+10 162
+220 168
+220 113
+24 77
+77 25
+283 120
+283 249
+273 143
+284 273
+284 143
+41 285
+41 286
+286 285
+253 158
+158 152
+253 152
+195 168
+195 112
+287 240
+133 287
+240 133
+288 289
+290 288
+289 290
+259 270
+271 259
+291 137
+137 280
+291 280
+220 73
+190 73
+190 220
+292 241
+241 293
+293 292
+235 5
+294 229
+256 229
+256 294
+123 253
+247 123
+158 136
+136 152
+34 254
+34 263
+263 254
+295 224
+295 272
+296 228
+238 296
+238 228
+264 50
+264 48
+278 297
+248 278
+297 248
+284 221
+119 88
+69 193
+69 195
+298 17
+298 16
+237 148
+276 217
+299 217
+276 299
+72 61
+61 243
+243 72
+279 135
+279 266
+160 84
+160 191
+300 235
+235 292
+300 292
+260 118
+260 258
+301 243
+221 301
+34 49
+30 42
+43 30
+96 46
+302 46
+302 96
+282 208
+282 207
+153 235
+98 153
+243 303
+61 303
+304 283
+304 305
+283 305
+250 166
+306 166
+250 306
+290 305
+290 111
+305 111
+116 106
+160 186
+245 140
+307 298
+286 307
+298 286
+308 133
+287 308
+32 174
+176 32
+65 62
+205 65
+205 62
+31 47
+29 47
+254 49
+180 252
+251 180
+101 190
+148 101
+158 309
+309 291
+158 291
+161 84
+310 311
+311 98
+98 310
+93 277
+139 13
+308 203
+272 40
+87 272
+211 131
+211 194
+131 194
+296 97
+312 296
+97 312
+198 130
+250 130
+46 95
+313 239
+240 313
+169 314
+245 314
+230 315
+315 129
+230 129
+85 263
+86 263
+110 316
+109 316
+119 317
+318 317
+119 318
+226 210
+210 319
+226 319
+211 193
+303 188
+187 303
+19 260
+19 174
+174 260
+186 191
+62 162
+59 126
+285 319
+307 285
+307 319
+88 318
+318 320
+88 320
+321 215
+321 182
+215 320
+215 88
+161 15
+140 161
+251 39
+251 313
+313 39
+301 167
+186 196
+198 186
+240 228
+287 228
+322 265
+323 265
+322 323
+284 144
+92 156
+279 152
+242 175
+241 175
+274 268
+320 142
+321 142
+320 321
+214 83
+56 270
+184 270
+286 87
+87 201
+286 201
+297 23
+324 325
+288 325
+324 288
+138 158
+76 219
+53 121
+122 53
+317 282
+282 318
+268 297
+274 297
+48 55
+288 58
+58 290
+216 296
+154 3
+22 203
+308 22
+261 267
+261 298
+298 267
+270 58
+141 187
+141 303
+113 147
+326 147
+326 113
+302 217
+327 304
+289 327
+289 304
+153 300
+300 328
+153 328
+69 199
+141 125
+125 25
+280 77
+257 129
+257 127
+46 196
+193 46
+196 193
+325 329
+325 225
+225 329
+316 17
+109 17
+59 24
+59 291
+24 291
+312 226
+319 312
+284 262
+262 144
+244 10
+244 12
+226 252
+255 62
+255 65
+110 51
+53 110
+171 298
+171 267
+314 170
+314 161
+217 47
+302 47
+315 102
+315 275
+295 201
+202 295
+316 18
+289 316
+289 18
+31 43
+101 73
+45 31
+45 43
+27 268
+140 314
+81 325
+29 276
+49 29
+49 276
+129 229
+164 191
+191 165
+255 244
+35 85
+155 35
+167 330
+301 330
+250 42
+154 328
+280 310
+311 280
+301 303
+239 134
+207 318
+124 331
+123 331
+8 159
+171 16
+297 28
+23 28
+76 187
+269 184
+322 55
+188 322
+320 207
+131 13
+218 281
+258 281
+258 218
+222 27
+22 222
+29 50
+213 12
+12 212
+29 299
+330 323
+306 323
+330 306
+292 155
+292 5
+327 18
+105 145
+82 214
+281 153
+98 281
+313 40
+305 249
+274 305
+249 274
+261 307
+104 294
+233 294
+268 28
+37 71
+37 79
+310 281
+332 149
+275 332
+283 327
+259 329
+329 270
+220 326
+326 73
+151 41
+285 151
+333 106
+258 106
+258 333
+317 120
+30 334
+42 334
+233 256
+196 191
+76 260
+219 260
+334 265
+334 323
+289 324
+325 289
+332 151
+197 131
+165 131
+80 202
+80 66
+233 172
+142 199
+38 60
+71 38
+129 234
+234 315
+223 325
+300 293
+328 293
+96 296
+303 322
+223 316
+289 223
+228 92
+92 287
+323 250
+42 323
+208 273
+208 143
+11 163
+210 285
+326 74
+146 335
+335 107
+250 236
+137 185
+137 99
+322 330
+330 303
+39 180
+312 261
+307 312
+246 276
+137 6
+183 171
+131 250
+236 131
+59 26
+135 152
+294 103
+230 275
+329 288
+94 244
+180 332
+231 332
+180 231
+240 251
+249 297
+137 311
+311 185
+262 220
+40 259
+157 291
+275 231
+39 332
+317 248
+12 178
+73 8
+335 106
+173 233
+39 151
+68 193
+330 166
+283 89
+8 75
+151 210
+37 208
+37 273
+51 316
+11 232
+266 248
+317 266
+87 295
+193 95
+50 334
+30 50
+219 258
+92 238
+329 58
+333 335
+333 281
+281 335
+278 266
+188 242
+175 188
+303 125
+296 226
+304 290
+201 298
+262 336
+336 220
+227 240
+199 144
+200 144
+104 315
+36 208
+2 241
+32 241
+144 189
+294 231
+103 231
+8 206
+85 34
+40 271
+63 162
+308 21
+173 234
+234 128
+24 280
+82 164
+47 299
+224 202
+178 213
+177 213
+17 201
+201 109
+335 153
+246 331
+123 246
+189 200
+221 336
+336 284
+237 100
+237 115
+2 328
+328 241
+109 66
+21 156
+256 129
+276 331
+176 241
+267 183
+12 232
+148 100
+327 89
+265 50
+45 196
+255 94
+252 181
+226 181
+112 200
+174 76
+232 212
+239 269
+309 138
+309 137
+52 121
+203 222
+192 8
+239 271
+40 239
+53 108
+3 328
+92 308
+156 308
+106 117
+1 2 3
+4 5 6
+7 8 9
+10 11 12
+13 14 15
+16 17 18
+19 20 21
+22 23 24
+25 26 27
+28 29 30
+31 32 33
+34 1 35
+36 37 38
+39 40 41
+42 43 44
+45 46 47
+48 49 50
+51 52 53
+54 55 56
+57 58 59
+60 61 62
+63 64 65
+66 67 68
+69 70 71
+72 73 74
+75 76 77
+78 79 80
+81 82 83
+84 75 85
+86 87 88
+89 90 91
+92 93 94
+95 43 96
+97 98 99
+100 101 102
+18 103 104
+105 106 107
+108 109 110
+111 112 113
+114 115 116
+117 118 119
+120 121 122
+123 124 125
+126 61 127
+128 129 130
+131 132 133
+134 135 136
+137 138 139
+140 141 142
+143 144 145
+146 147 148
+149 150 151
+152 153 154
+155 156 157
+158 79 159
+160 161 162
+163 164 165
+166 167 168
+169 170 171
+172 173 174
+175 176 177
+178 179 180
+181 182 183
+184 185 186
+187 188 189
+190 191 92
+192 193 194
+195 63 196
+197 198 199
+200 201 8
+202 203 21
+26 204 205
+206 207 208
+209 210 211
+212 213 214
+215 216 217
+218 219 220
+221 99 222
+223 224 225
+226 227 228
+229 230 231
+232 233 234
+235 236 237
+238 239 240
+241 242 111
+243 244 152
+245 246 247
+248 249 250
+91 251 252
+253 254 255
+256 257 258
+259 260 261
+262 263 264
+265 266 267
+268 269 270
+271 272 273
+274 110 275
+276 277 278
+279 280 281
+282 283 284
+285 286 287
+288 289 165
+36 290 291
+292 293 129
+142 68 294
+295 230 296
+297 233 298
+299 300 262
+301 302 303
+304 305 306
+307 308 309
+310 311 312
+313 314 315
+316 317 318
+319 19 34
+320 321 322
+323 324 325
+326 327 328
+329 330 331
+332 333 334
+335 336 337
+338 339 340
+113 341 342
+343 344 216
+345 346 347
+348 349 344
+59 350 351
+352 353 354
+355 356 357
+358 359 360
+361 362 363
+364 365 231
+366 367 368
+369 370 371
+372 373 374
+375 376 377
+378 379 380
+381 382 383
+384 385 386
+387 388 389
+390 391 337
+392 393 394
+395 396 397
+398 220 399
+400 401 136
+402 177 403
+326 87 404
+327 405 406
+149 223 407
+211 408 409
+410 411 393
+412 413 275
+249 414 415
+416 417 418
+419 420 421
+422 423 424
+335 295 425
+426 427 428
+73 429 430
+431 60 432
+433 434 435
+405 436 437
+438 439 362
+440 128 441
+442 443 127
+444 445 446
+447 448 449
+450 368 218
+451 452 453
+454 455 456
+457 458 459
+460 461 462
+463 464 465
+427 466 467
+2 203 402
+237 308 468
+469 470 209
+471 441 472
+25 473 474
+475 476 374
+477 478 479
+480 481 482
+483 484 485
+486 487 440
+488 489 490
+158 257 284
+491 492 493
+494 495 434
+496 497 498
+499 500 501
+502 503 504
+341 5 505
+506 507 508
+509 510 384
+484 511 512
+513 514 515
+516 517 436
+518 519 520
+53 521 522
+523 524 525
+438 526 478
+97 138 527
+528 529 260
+530 16 531
+347 178 532
+533 534 535
+536 537 538
+539 428 540
+541 542 251
+543 544 545
+400 546 547
+361 548 549
+546 135 411
+248 180 293
+550 51 290
+551 552 45
+553 554 555
+556 285 557
+342 558 559
+560 537 561
+562 563 564
+565 566 567
+133 201 258
+568 569 570
+120 394 571
+572 206 244
+573 366 166
+574 575 576
+577 489 578
+227 579 580
+581 582 583
+584 32 585
+513 586 550
+587 379 588
+250 589 590
+591 592 593
+594 207 541
+595 596 597
+459 598 101
+599 15 167
+577 600 276
+601 602 96
+594 90 398
+603 604 605
+606 607 608
+375 609 610
+553 108 611
+266 377 46
+356 612 613
+614 367 615
+616 617 618
+619 94 620
+125 621 622
+623 624 625
+81 171 474
+626 627 628
+629 259 604
+630 631 245
+632 633 634
+86 422 281
+542 572 635
+636 470 107
+147 64 637
+638 639 640
+298 117 387
+641 642 643
+468 644 645
+643 646 647
+168 648 649
+650 651 652
+549 653 318
+265 654 655
+656 657 488
+658 659 660
+479 661 173
+579 633 319
+307 98 647
+662 102 194
+184 663 461
+664 665 360
+536 77 65
+666 442 431
+667 668 669
+304 450 670
+240 671 672
+673 674 675
+676 460 523
+677 678 679
+417 680 483
+315 681 83
+140 682 683
+684 685 624
+686 687 666
+688 522 419
+492 689 690
+352 519 691
+188 692 403
+693 600 694
+390 409 444
+695 696 697
+671 62 698
+699 631 700
+701 702 703
+555 704 311
+705 706 707
+708 709 710
+217 471 316
+529 711 268
+170 712 713
+463 82 714
+715 150 716
+717 718 719
+720 721 722
+723 724 622
+725 726 727
+728 628 729
+661 730 731
+732 12 733
+329 380 734
+735 736 581
+737 738 55
+179 701 130
+739 740 697
+399 741 742
+743 704 744
+448 745 746
+747 748 271
+749 750 751
+17 723 749
+33 752 552
+500 753 589
+752 754 755
+239 756 432
+649 742 757
+721 758 328
+759 760 761
+332 618 762
+212 763 764
+364 391 765
+114 9 132
+190 766 767
+768 653 769
+47 376 770
+771 187 710
+595 772 773
+548 560 774
+355 157 775
+776 685 557
+777 778 143
+200 7 779
+221 780 104
+781 782 676
+699 169 783
+433 784 672
+350 785 786
+454 320 784
+787 642 776
+788 153 13
+789 790 791
+792 793 28
+52 760 794
+303 795 796
+797 759 535
+798 799 800
+191 801 802
+751 706 803
+392 804 202
+89 805 670
+559 806 807
+652 808 42
+809 810 811
+696 812 574
+813 814 338
+30 815 756
+816 84 817
+807 818 597
+819 449 820
+705 562 821
+736 446 69
+822 494 823
+824 825 499
+186 509 485
+826 480 827
+828 829 830
+831 623 137
+832 551 833
+834 814 508
+772 818 464
+764 835 264
+836 681 837
+659 838 839
+677 840 841
+842 182 819
+843 844 263
+272 845 846
+306 214 599
+834 395 847
+848 711 254
+849 76 850
+851 617 852
+853 324 758
+854 855 709
+856 310 691
+630 786 857
+750 858 859
+860 861 657
+770 862 863
+864 477 865
+469 866 10
+627 867 638
+825 868 78
+869 176 870
+261 486 349
+871 343 565
+582 71 279
+299 719 629
+872 873 242
+857 874 875
+588 650 876
+181 388 447
+877 878 812
+429 413 695
+635 654 835
+369 879 761
+163 6 880
+386 515 418
+222 309 881
+871 882 883
+112 873 880
+481 95 673
+725 27 884
+512 160 885
+813 118 886
+887 746 616
+888 678 720
+105 732 889
+890 891 892
+651 893 613
+811 687 894
+895 872 896
+312 457 353
+744 554 50
+415 897 501
+601 898 437
+504 854 545
+502 801 358
+451 458 533
+195 899 726
+891 820 900
+890 876 901
+863 839 833
+373 902 831
+733 903 365
+753 904 116
+841 859 853
+357 490 155
+121 905 870
+906 847 225
+907 842 901
+908 72 528
+215 768 909
+910 475 139
+288 416 620
+911 904 80
+615 573 757
+827 867 912
+482 575 639
+913 914 864
+858 915 325
+909 800 566
+544 505 802
+397 716 407
+336 916 866
+902 917 918
+919 602 517
+920 274 908
+161 511 199
+921 922 832
+856 606 109
+547 837 923
+100 924 354
+689 888 925
+926 927 928
+462 540 929
+930 931 664
+561 146 932
+443 810 570
+41 850 816
+767 381 359
+933 728 607
+934 568 563
+576 675 935
+926 905 828
+897 936 937
+219 614 741
+253 645 668
+938 331 656
+939 940 269
+941 745 119
+882 610 154
+378 938 893
+208 648 14
+556 466 942
+608 877 412
+35 943 944
+731 414 945
+506 946 333
+611 920 718
+892 947 232
+948 911 283
+619 514 949
+54 88 323
+898 950 495
+636 66 951
+688 58 291
+334 900 887
+952 22 694
+878 729 640
+953 224 954
+498 955 727
+956 305 805
+922 794 31
+141 210 951
+156 278 456
+593 899 197
+947 946 886
+939 848 174
+743 957 534
+958 748 516
+708 558 543
+229 959 960
+961 962 724
+363 85 538
+806 963 928
+339 906 953
+778 964 965
+840 679 491
+852 941 340
+940 945 966
+605 348 883
+527 625 641
+967 968 526
+351 930 383
+789 313 465
+74 235 255
+969 131 970
+943 971 972
+973 962 273
+145 974 193
+975 715 396
+226 931 247
+40 426 162
+773 497 895
+915 621 737
+777 452 976
+690 126 569
+849 198 196
+302 296 960
+389 183 912
+370 586 385
+944 977 580
+978 740 881
+916 979 11
+739 531 780
+798 874 660
+520 924 860
+590 115 980
+797 957 585
+44 826 907
+148 204 713
+280 70 846
+382 37 57
+754 584 49
+532 980 969
+445 123 973
+803 981 103
+936 730 968
+838 982 921
+717 983 48
+472 703 824
+766 949 38
+769 774 875
+791 923 314
+300 603 843
+735 106 984
+964 976 879
+985 986 734
+487 270 987
+958 404 845
+795 959 903
+4 289 93
+965 371 510
+144 185 23
+836 634 988
+755 983 267
+626 986 297
+796 979 989
+192 598 453
+241 596 896
+775 455 990
+991 164 992
+804 122 175
+294 423 993
+292 987 966
+530 935 961
+56 682 993
+972 855 503
+151 851 954
+592 992 496
+669 644 646
+637 884 205
+977 665 228
+39 913 942
+919 747 674
+862 567 799
+994 693 793
+914 817 439
+632 410 20
+256 779 995
+910 981 821
+868 702 346
+967 317 937
+790 927 830
+918 467 684
+680 991 591
+655 243 609
+996 950 997
+425 301 989
+763 956 252
+408 683 998
+934 707 493
+236 430 978
+765 984 889
+282 995 948
+521 982 420
+808 612 997
+518 330 933
+975 507 762
+286 865 172
+932 712 700
+435 996 990
+345 970 159
+322 792 238
+583 424 67
+788 213 844
+663 885 539
+999 692 771
+1000 662 1001
+783 988 246
+869 963 189
+823 698 925
+952 1001 974
+999 971 3
+861 1000 578
+29 24 782
+571 134 1002
+473 955 714
+1002 401 829
+234 985 587
+815 781 686
+998 738 124
+809 476 564
+525 372 894
+785 421 658
+321 277 994
+524 929 917
+787 287 667
+822 722 406
diff --git a/test/boolean/surfaces/horse5.gts b/test/boolean/surfaces/horse5.gts
new file mode 100644
index 0000000..5cb5327
--- /dev/null
+++ b/test/boolean/surfaces/horse5.gts
@@ -0,0 +1,4005 @@
+669 2001 1334 GtsSurface GtsFace GtsEdge GtsVertex
+0.02013525264 0.005521520773 -0.01645887924
+0.02333620894 0.0097112427 -0.01259505902
+0.02606830455 0.01511701064 -0.01880906215
+-0.01399844229 0.08714155824 0.04634542729
+-0.00711987842 0.08387148715 0.05079067138
+-0.01484915813 0.08707045042 0.052732734
+0.006631433813 0.05681551256 0.06800902765
+0.008961319248 0.06379068286 0.06370982547
+0.0008962294736 0.06568851865 0.07053914405
+-0.007084975887 0.03564502823 -0.07638398126
+-0.009172878857 0.0426602785 -0.07630253726
+-0.00810029672 0.03778262601 -0.07154683697
+-0.004494363814 0.02123015411 -0.01233401657
+-0.003960858681 0.02707806625 -0.02147412545
+-0.004658667059 0.02285017266 -0.01654065256
+-0.004536715458 -0.09172039218 -0.059632203
+-0.007296970267 -0.08559062083 -0.0568575243
+-0.005904853747 -0.08527784461 -0.0646592393
+-0.008881955779 -0.06046197822 -0.007183686667
+-0.008292398598 -0.05433988926 -0.006032399448
+-0.006699209669 -0.05844466781 -0.01313674117
+0.02653152048 -0.05926800669 -0.007858035345
+0.02491401896 -0.06004584644 -0.005078008904
+0.02808881242 -0.05700977972 -0.0103748159
+0.02617092473 0.01742742163 -0.04948925255
+0.0287065213 0.01875291256 -0.04929715227
+0.03053088148 0.01669467781 -0.06497438538
+-0.004447444209 -0.03858960018 0.0002918748357
+-0.002812829299 -0.04959414896 -0.005055102313
+-0.01118923222 -0.04589732893 -0.0006047646092
+-0.01647276144 0.08032673265 0.03979473132
+-0.02491707499 0.08466822148 0.03876307887
+0.03065041014 -0.02268958153 0.02819790612
+0.03311963555 -0.03397986637 0.03337640349
+0.02458857837 -0.0211553759 0.03120368181
+3.11253916e-06 0.02298208248 -0.02714141419
+-0.003436569527 0.02305241201 -0.02816495009
+-0.001901268135 0.02151438626 -0.01957978321
+-0.007202305565 0.02872295073 -0.04064789673
+-0.005084001823 0.03298650586 -0.0393762965
+-0.00526972853 0.03041893047 -0.05020452016
+-0.0008855536692 0.04548663335 0.04725890381
+-0.003648872987 0.05421244516 0.04604823812
+0.001175076852 0.04001949318 0.0354116709
+0.03684824176 -0.009360017287 -0.003452463635
+0.03284843459 -0.00573587904 -0.008116460255
+0.03449232873 -0.01447523884 -0.007084876245
+0.02980485659 -0.03487625097 0.03569073712
+0.02338492 -0.04382609693 0.03750896151
+0.02257567404 -0.0356194706 0.03710108862
+0.008245700987 0.03986539798 -0.008370410631
+0.02063481043 0.0418213754 -0.007424038412
+0.007372361265 0.04348170001 0.000976005425
+0.03454064586 0.02451531618 0.01138119969
+0.03578281178 0.02627464307 0.003598266601
+0.03390077249 0.01962938431 -0.001280082309
+-0.007811584756 0.003877097243 -0.001241609223
+2.840412583e-05 0.01228274967 -0.007247409149
+-0.004998371694 0.01270036211 0.001089300752
+0.0121464787 -0.06892107607 0.004943298672
+0.01100764784 -0.06564655 0.003296401762
+0.01520667495 -0.06872824335 0.01030192437
+0.03474758083 -0.0688897661 0.01430985135
+0.03034737778 -0.07102256952 0.01163716872
+0.03302710541 -0.06941605296 0.01982940739
+0.005842172145 0.03256712548 -0.01503639799
+-0.001854450108 0.0363080054 -0.01720728338
+-0.003023179537 0.03689851239 -0.01428110042
+-0.009376286633 0.08251530928 0.04162907527
+0.02141389742 0.04032830872 0.03497685942
+0.01997353967 0.03818065632 0.04077929212
+0.01775912058 0.05097634457 0.04600341765
+-1.133624465e-05 0.009628037481 0.02569442716
+-0.00725237453 0.01814871364 0.01917561027
+-0.003123197135 0.01808229195 0.02809276316
+0.02748292046 -0.01004179714 0.02769915384
+0.03160832077 -0.06026964828 -0.008433655781
+0.03055712595 -0.06752777067 0.003519932692
+0.02154114812 0.0321282552 0.03647471816
+-0.004811635778 0.0306760496 -0.02964832067
+-0.00464337141 0.02572433389 -0.03396805803
+-0.01045468225 -0.0008386500385 0.007235840067
+-0.01112577594 -0.005315965197 0.002302405937
+0.0326015439 0.03338224889 -0.006524502723
+0.03294319838 0.02428580733 -0.01060243943
+0.03269792222 0.02774989759 -0.01366839704
+0.02634806345 0.01449165035 -0.005438173991
+0.02451895292 0.003543658217 -0.01258120218
+0.02877373375 0.01379864406 -0.001824338814
+-0.01189840845 0.06800316185 0.03881161131
+-0.01700471567 0.06435747477 0.04119042082
+-0.02369603052 0.07095822088 0.04107925642
+0.03135893952 0.03945922576 0.0211675824
+0.03219511639 0.02763813212 0.02156752155
+0.03346637823 0.03911131024 0.01113470448
+-0.0322105105 0.08044723121 0.05103451248
+-0.04146608905 0.08773853503 0.0418181091
+-0.03888015861 0.08243044851 0.04378008749
+-0.008066673575 -0.07056706839 -0.01423360887
+-0.002391250926 -0.07540763245 -0.01631556228
+-0.005650160233 -0.0725733818 -0.02353782249
+0.008946998866 -0.05390044486 -0.005403076493
+0.004182731471 -0.0561687558 -0.008281162232
+-0.005354712201 0.007333715298 0.0176978225
+-0.01044048676 -0.01220771039 0.01559657304
+-0.009958289474 -0.003240540696 0.0132272352
+0.01754588752 0.05625845007 0.04012688329
+0.02402767861 0.04461186713 0.02681588892
+0.02238696773 0.04734445665 0.02228504444
+0.0008411117095 -0.05729739477 0.03315041141
+0.009489536535 -0.06099024937 0.03356346167
+0.001386571668 -0.065167744 0.02915297053
+0.001368982574 0.03568888191 0.03226578605
+-0.003857633711 0.03529492392 0.02770085432
+-0.002643215803 0.04094858484 0.02455153722
+-0.009338984735 0.02820470028 -0.01160543829
+-0.006193568167 0.02897164443 -0.0219964481
+0.0008969939628 0.03530577174 -0.07179588296
+0.0009715887473 0.03702926338 -0.06647196397
+-0.0003805415216 0.03369734896 -0.06599021152
+0.001368930329 -0.08394677569 -0.03381738735
+-0.00374555464 -0.08396286572 -0.03135024014
+-0.001462525141 -0.08315564023 -0.02223458256
+0.04016153206 -0.01733716975 0.007964266416
+0.03972065976 -0.02491509667 0.01076602273
+0.03954613476 -0.02033348977 0.01689782248
+0.01137796703 0.01941733257 0.0395698287
+0.007768512673 0.02140764366 0.03914937102
+0.007973494393 0.01351472969 0.03593813441
+0.002249413556 -0.07553092507 -0.03267150461
+-0.0002004769125 -0.06977751468 -0.0257171946
+0.003118415553 -0.07216066065 -0.02278653853
+0.009531422121 -0.01174763178 -0.01879270726
+0.004642152863 -0.001390584841 -0.01845200774
+0.002260254027 -0.01489936657 -0.0162405874
+-0.006638416945 0.02789731502 0.02529742936
+-0.007801900425 0.03558136321 0.02156038109
+-0.002920941839 0.02952341828 0.03115640724
+0.00386006762 0.03050293135 -0.03796592196
+0.002670417794 0.03376751743 -0.03673941633
+0.003715864776 0.02819359248 -0.02732089558
+-0.002761246765 0.03563828626 -0.05333519383
+0.001334173692 0.03635105193 -0.05916559877
+-0.001456809346 0.03913147733 -0.06532529443
+0.02842052878 -0.04709967892 -0.01318113309
+0.02912742464 -0.04328902761 -0.009502788519
+0.02822368311 -0.04933917537 -0.01920662046
+-0.008099106674 0.06392051452 0.0411553607
+-0.007803006315 0.06226298866 0.04773677273
+-0.01401774003 0.06173498751 0.04790265734
+0.02427892493 0.04126456708 0.02968454017
+-0.01008564718 0.0306212666 0.01720870481
+-0.01110471093 0.03471967459 0.009169866621
+0.001232604591 -0.07343148591 -0.01375939733
+0.000920072081 -0.0725204683 -0.008174017663
+0.0315063146 0.01091557834 -0.06595768826
+0.02993125635 0.006120185243 -0.05980834949
+0.03388215701 0.008237893114 -0.0588829558
+4.216061268e-05 -0.06239096809 -0.01755570335
+-0.0001397346183 -0.06436644441 -0.01783531426
+0.004803052334 -0.05657747344 -0.006239395585
+0.01427776927 0.05723708964 0.0565766556
+0.01209020141 0.04935675339 0.06303871036
+0.001684769803 0.05917858204 0.07005227417
+0.01628595239 -0.06223912157 0.001304912739
+0.02063623406 -0.06844235604 0.009434368044
+0.03059354444 -0.06355303207 -0.0652642166
+0.02906012238 -0.0650694116 -0.06619492674
+0.02809082836 -0.06822200057 -0.06005049424
+0.02662045672 0.01283235843 -0.04325473514
+0.02632033584 0.01369144364 -0.05461731154
+0.02790821511 0.009447650631 -0.05445462793
+0.002781203175 0.03142322415 0.03540666761
+-0.01298597885 -0.01591953895 0.007914207622
+-0.01022752129 -0.02782242993 0.01210091593
+-0.01128431748 -0.02485025832 0.003081635188
+0.03716989507 -0.03005062152 0.01924080141
+-0.0110576949 -0.04249649855 0.004064996969
+-0.007189824994 -0.03780978911 0.008069604044
+0.002132921331 -0.08892912242 -0.05841814456
+-0.001967876306 -0.09249719443 -0.05993431507
+-0.0001478523326 -0.08700064728 -0.04689355518
+0.02150238878 -0.003203442666 -0.01664761693
+0.02860891328 -0.00794281963 -0.01241843167
+0.02535101604 -0.01471005535 -0.01470732778
+-0.01263718706 0.07311926828 0.07115058838
+-0.01136077083 0.06864246139 0.07064307988
+-0.00634763803 0.07076383691 0.07207555004
+-0.004947600696 0.02947770814 -0.06376310136
+-0.00653606251 0.03548727746 -0.06267927768
+-0.004768313435 0.03301141807 -0.05682850472
+-0.002559523239 -0.07696914055 -0.07503049445
+0.001368792513 -0.08058704528 -0.0756365883
+-0.007157226439 -0.07673899499 -0.07620027157
+0.02962655239 -0.06641816023 -0.05375091131
+0.03335175126 -0.06107789389 -0.04461387017
+0.03016472427 -0.06494730026 -0.0564471706
+-0.03784905283 0.09182356906 0.0354779574
+-0.04282507852 0.08763088955 0.03843798247
+-0.03780231307 0.091656083 0.04150096945
+-0.004278987696 -0.07096315113 -0.02827644712
+-0.005150102585 -0.06225913771 -0.02061674121
+-0.008924081195 -0.0648333229 -0.01934112454
+-0.004930167798 -0.06275903768 0.02547583765
+0.001165097696 0.02523404795 -0.03957571933
+-0.008852045606 0.02332088653 0.0171473632
+-0.004459721071 0.03497725791 -0.06866035029
+-0.03953646102 0.08780210501 0.03347779468
+-0.04048996553 0.08225953131 0.03671018489
+-0.03490373434 0.08345472823 0.03190892503
+-0.009654232028 -0.02344999804 0.01726110988
+-0.006927415054 -0.03178192302 0.01912757966
+0.01605012073 0.003031310522 0.02936799277
+0.008895604619 -0.002047950409 0.02823159445
+0.008494244241 0.001799083616 0.02879528979
+-0.003961821714 -0.07871961197 -0.0281961272
+-0.007477737145 -0.07956910319 -0.03375142835
+0.02477633515 0.00435515277 0.02561294995
+0.03327869175 -0.01056420909 0.02397197402
+0.004567323158 0.06995713598 0.06469146997
+-0.00183702543 0.04442440161 0.01992806507
+0.00165670685 0.04848824857 0.02429042206
+-0.001669243162 0.04538749837 0.0272053198
+0.03323516033 -0.0696968104 -0.07479897823
+0.02830816126 -0.06727547745 -0.07485372705
+0.03359441511 -0.06833744979 -0.06724944763
+0.02898733887 0.02593823058 -0.03466161818
+0.0246309752 0.02431943624 -0.03652165518
+0.04030552522 -0.06054316911 0.01674424681
+0.04164739073 -0.05139940822 0.0217050045
+0.03911517512 -0.06043171631 0.02293000667
+-0.01016921971 0.02477592438 -0.009559566753
+-0.007410313098 0.01930565156 -0.006409125658
+-0.009099460307 0.02070551701 0.003923295553
+-0.006901567776 0.06061189508 0.06856950357
+0.007695408381 0.04774322646 0.06466878455
+0.02628487045 -0.05770978385 -0.02765797082
+0.02786368037 -0.05500327435 -0.02916861836
+0.02960128852 -0.0631862634 -0.04099157187
+0.02693931829 0.0150378853 -0.06642529973
+0.03082839672 0.02288107393 -0.07477957186
+0.01673602462 0.05296176187 0.02799127872
+0.01999274631 0.04838788616 0.01771232083
+-0.002383392301 0.0584039807 0.03884915064
+-0.005144924484 0.06159163841 0.04104793704
+-0.003379529562 0.05727490581 0.0462431367
+-0.002237697221 0.01601216358 -0.005054907819
+0.02778627998 -0.05772247586 -0.02054760577
+-0.02733044091 0.08787125685 0.04692096172
+-0.03381940763 0.08842015408 0.04616950141
+-0.0266954696 0.08488412478 0.05445010955
+0.0002299200355 0.03008183833 -0.0526309113
+-0.001578908545 0.02695998198 -0.04953028374
+0.02885607787 -0.06561102264 -0.02705281966
+0.0287422346 -0.06043955401 -0.01464466098
+0.01670507196 0.05031094078 0.05116161752
+0.01854079105 -0.002602673502 0.02863708186
+0.02106386951 -0.01061903517 0.02950687991
+0.02149631234 0.00350152551 0.02754017274
+0.03595921609 -0.06440025829 -0.06383023776
+0.03768470615 -0.06636455426 -0.05822902156
+0.03632472658 -0.06500480385 -0.05143240344
+-0.02300277796 0.07968365662 0.06135589776
+-0.0183455243 0.08677332893 0.06096485036
+0.02996228773 0.0431793068 0.01885056969
+0.01189031623 0.06343583392 0.05467359339
+0.0349177613 0.03295247043 0.005743035569
+0.03209842921 0.04093256324 0.00616488062
+0.03741995673 -0.01167617015 0.01925249319
+0.03498720328 -0.02617293678 0.02506715326
+0.004510045712 -0.04726412932 0.03617114895
+0.007834213447 -0.03802712274 0.03648668217
+0.001320006211 -0.03473731743 0.03429713572
+0.004684082046 0.02528867908 0.03737786199
+0.0009013665479 0.02189336462 0.03311220182
+-0.000269046979 0.03518634678 -0.07654122663
+-0.005465593469 0.0334314065 -0.07113323109
+0.03794729885 -0.07030992224 -0.05881809189
+-0.02369893798 0.08733940468 0.04185147774
+0.03406462322 0.01411369258 -0.06575141393
+0.03599477985 0.01623325042 -0.06930767862
+-0.001654786277 0.04403194829 0.03136525892
+0.02655670532 0.02996324089 -0.02032467924
+0.02910560475 0.02795436388 -0.02108319158
+0.03118268561 0.03516852465 -0.01003145645
+0.03085956534 0.01771842101 -0.04856808053
+0.03272381441 0.01249286986 -0.05317331614
+0.03420853302 0.013833191 -0.06039523497
+-0.002370331495 -0.08901111448 -0.04957451068
+-0.005624307261 -0.08197370267 -0.04260908709
+0.02514411334 0.01494908579 -0.04392440225
+0.02230639765 0.01715601009 -0.03682721726
+0.02063163886 -0.06160615252 0.0335902371
+0.02893566101 -0.05840060783 0.0334684692
+0.02204870418 -0.05208696926 0.03657381482
+-0.008923380825 -0.04880887603 0.02527943796
+-0.005284751963 -0.05559750383 0.02864053061
+-0.009920769984 -0.05856095302 0.0207895361
+0.003926573915 0.02956410991 -0.01833436713
+0.02693418421 0.01067263783 -0.07605973612
+0.03409201833 0.01012579517 -0.07298440008
+-0.008371860285 -0.02901436397 -0.0009715576959
+-0.007576344076 -0.03502228042 0.01157323203
+0.02767465419 -0.06096876474 -0.07505858591
+0.03863769628 -0.05899099525 -0.07447174678
+0.03350950614 -0.05556284399 -0.07453207962
+-0.005333174395 0.0690660383 0.04005469768
+0.002235741842 0.06845919478 0.04597629264
+-0.001399741117 0.07361001299 0.04738100056
+0.03518948666 0.03211046788 -0.00197183499
+0.03198401111 0.02261329315 -0.03630390816
+0.03240181453 0.02010971195 -0.03448508613
+0.02937417424 0.02528103863 -0.02472801015
+0.001611540967 -0.08067383724 -0.07140604344
+0.001953187201 -0.08707899486 -0.07110537245
+-0.001232417508 -0.08211026541 -0.06523884548
+0.03136665361 0.01638393806 -0.04241414392
+0.02815923377 0.01329423952 -0.03581550346
+0.02916886598 0.01231133623 -0.04517439549
+0.03562536987 -0.05958327634 -0.03641685688
+0.03786374846 -0.05828439284 -0.03027596892
+0.03445573015 -0.05147392138 -0.02485193482
+-0.005805630637 -0.003626265852 -0.00963021862
+-0.002087063821 -0.007981644005 -0.01432247362
+-0.008123697854 -0.01295953787 -0.008011985054
+0.01057347949 -0.05438027627 0.0360043044
+-0.0191484997 0.06984407921 0.07583152676
+-0.01582507048 0.06802185785 0.0746396716
+-0.009991545682 -0.04221273906 0.02285774271
+-0.01129511985 -0.0511791196 0.0201472641
+-0.03218714045 0.08911683858 0.03413977255
+-0.002963456991 0.06460328827 0.03914478388
+0.002775681161 0.0631757371 0.03893232187
+0.006787630338 0.01432430154 -0.01761951969
+0.003506700761 0.006572410528 -0.01632570557
+-0.003312208303 0.02325685899 -0.03921277274
+-0.00326808019 0.02807999441 -0.05530421046
+-0.01978473007 0.07459091766 0.03922325566
+-0.02635916519 0.07915376855 0.03807573823
+0.03555798906 -0.06295653825 -0.03148452621
+0.03550536749 -0.06289381135 -0.04451557082
+-0.01365223107 0.06472234988 0.06687534299
+-0.0001382817325 0.05077543876 0.06274224514
+-0.019577947 0.06858345575 0.06484539093
+-0.02085556168 0.06712083646 0.06118947298
+-0.01894522016 0.06607629188 0.05789886839
+0.002564033262 0.04219863759 -0.07594683424
+0.01114569775 0.002452488546 -0.01896313365
+0.01178099453 0.02162454311 -0.01766817181
+-0.00354017736 -0.0874175003 -0.06611629017
+0.027080073 0.01518590473 -0.02805848056
+0.02296211985 0.01671259361 -0.02826914248
+0.0235176257 0.0140533891 -0.03579376611
+-0.005449679997 -0.07289582257 -0.02785291734
+0.0281752516 0.01827919566 -0.01994736665
+0.02875003798 0.02365186069 -0.02450317989
+0.03004266102 0.02085349558 -0.0113473141
+0.003804610071 0.0160560555 -0.01380773009
+-0.0004818261599 0.01835395577 -0.01799694224
+-0.004193119545 -0.05857021412 -0.008123197106
+-0.002201113446 -0.06138315115 -0.01335911449
+-0.005276675901 0.02217353896 0.02483485312
+0.01775159824 -0.008968360528 -0.01788598327
+0.0219733604 -0.01938347779 -0.01518461096
+0.0398734842 -0.04569508536 0.02707997246
+0.03734622762 -0.05298408149 0.03031482296
+-0.004930474013 0.07717007493 0.06743742678
+-0.001872942231 0.07648973376 0.06195418308
+-0.006202547496 0.0847748346 0.07263600347
+0.004849282814 -0.06654078831 0.001598486289
+-0.02334935507 0.07296056774 0.06392326228
+0.002176868143 -0.07981624797 -0.01992225748
+0.003800816747 -0.06906648327 -0.01870599595
+0.003231230811 -0.07112129716 -0.01418680473
+-0.008025358077 0.07798059656 0.07007021426
+0.00231006835 0.03222334759 -0.06183539386
+-0.005546689215 0.01526847627 0.002527019816
+-0.002148773376 0.04685978554 -0.07646237571
+-0.01469709675 0.08448429655 0.06361546345
+-0.009205145259 0.08364986486 0.06652824875
+-0.01391437278 0.07857860048 0.07025393953
+-0.008729891897 -0.08521930845 -0.07244919448
+0.0008615721356 0.04513060711 0.002194219599
+6.611089891e-05 0.04139438171 -0.007297840756
+-0.02066662235 0.06616042811 0.07401673102
+-0.003331529417 -0.02627143771 0.02464305433
+0.003987723678 0.07210855672 0.05870447819
+0.03078263484 -0.04619026605 -0.01805086649
+-0.006808147712 0.0102530595 0.01012052355
+-0.006865216013 0.01645753361 0.01255757241
+0.03088907854 -0.05786733046 -0.03540469045
+0.002987680217 -0.06667490534 -0.007353766141
+0.004232971254 -0.06975681823 -0.009903585432
+0.02887959996 0.03476373004 0.02733773936
+0.00361427673 -0.05867833781 -0.003723108446
+0.009116435743 -0.05832069126 -0.003807955405
+-0.01258115659 -0.06036201103 0.005622889208
+-0.0114024565 -0.05302184451 0.01325105043
+-0.01285898929 -0.05447078597 0.00255479056
+-0.007746443632 -0.03740216766 0.02691148295
+-0.003819301373 -0.03366266213 0.0301720788
+-0.01558061221 0.07237531331 0.07110804996
+0.01694610166 -0.03267628957 -0.009547022118
+0.02611753699 -0.0317371729 -0.006920390488
+0.02614492902 -0.03555663226 -0.007779706299
+-0.004615267993 -0.08135612334 -0.02321671994
+0.03453322494 -0.06495686288 0.02344119201
+0.03604964819 -0.06553705968 0.01514178387
+-0.02688171056 0.07019769011 0.06127657806
+-0.02836978054 0.07547062352 0.05724614332
+-0.02857306018 0.07398569233 0.05112764747
+0.002149115851 0.01640335688 -0.00939153187
+0.03680343391 -0.05478277041 -0.02365749944
+0.02581892801 0.01216562667 0.02653159388
+0.03349197988 -0.05630694041 -0.03348361319
+0.03431457445 -0.07333305333 -0.06052821753
+0.03244789369 -0.07142986524 -0.05349659864
+0.03376829326 -0.0680057351 -0.03993240149
+0.02004838443 0.01736686842 -0.01887254326
+-0.008158632395 -0.08143711256 -0.07113356096
+-0.005642855918 -0.07825312176 -0.07223639623
+0.02614749515 0.009599596908 -0.06096653466
+-0.01177248692 -0.01407353336 -0.0002687046773
+-0.009800132465 -0.01979108775 -0.003830321057
+0.03854806382 -0.01826114917 -0.0007610163351
+0.03931722386 -0.01024749357 0.003332200891
+0.01482834943 -0.05037367321 -0.003617778294
+0.02539828273 -0.05124035662 -0.004419107231
+0.01679325978 -0.05562626944 -0.003708518059
+-0.02247070523 0.06647621898 0.04844780787
+-0.004868680275 0.03368435333 -0.02253317884
+-0.006915406511 0.03611473008 -0.01205081465
+0.02542776009 0.01909108763 0.03106312925
+0.02871429086 0.01115973163 0.02218106763
+0.03062899728 -0.04693951478 0.03575676012
+-0.003540154017 -0.07196131107 -0.008331912231
+-0.007670277131 -0.06822000914 -0.007884776398
+0.03351038253 0.03148217844 0.01630943786
+0.01040311744 -0.07209147319 0.005460248469
+0.004701971932 -0.07433486589 0.004068455159
+-0.03919251268 0.08479366736 0.03976328611
+0.03471431254 -0.04207016414 -0.009057396467
+0.03786718137 -0.04772732709 -0.007151207163
+0.03990106634 -0.04474406031 -0.002161231288
+0.03484466696 -0.07041469609 -0.05216657025
+0.02637508427 0.0342719822 -0.0143612476
+-0.004601073848 -0.0818465615 -0.06469160281
+-0.003951655198 -0.080900582 -0.04879799115
+0.001684747414 0.02228999589 -0.01852992968
+0.01972090626 -0.01973865747 0.03149731012
+0.009379632204 -0.009803279448 0.02879073652
+0.03407514477 -0.06279654249 -0.06444526593
+0.009732562967 0.03864777151 0.05758422655
+-0.0275897363 0.07128743481 0.045091929
+-0.02477656926 0.06909607727 0.05262891486
+0.03412843848 -0.06376026874 -0.05431693996
+0.02054447638 0.02928234328 -0.01665001172
+0.007991961887 0.02684998692 -0.01690110255
+0.02979788323 -0.05747483005 -0.0728332453
+-0.009675962225 -0.007598915016 -0.004054289858
+-0.001194270986 -0.006120763216 0.02382184038
+0.00177787414 -0.02261065258 0.02817529957
+0.003824037537 -0.007414918614 0.0266806906
+0.01385897798 0.05949119073 0.04023236849
+0.007075990948 0.06160589787 0.03797952168
+0.02463453421 0.04688362255 0.008253351838
+0.0177962488 0.04555271299 0.002714985075
+0.02775607476 0.04445792255 0.003040916399
+0.007628322582 0.03634256561 -0.01242806777
+0.03417909793 -0.03125967083 0.002049789333
+0.03841943537 -0.02335505819 0.003086974088
+0.0400737564 -0.06016149505 0.00885820756
+0.03607440466 -0.06211043687 0.004535989099
+0.04031262255 -0.0566076406 0.002408966104
+-0.0007704298113 0.07453069992 0.05641528612
+0.009730320368 0.06428147005 0.04998676121
+0.04221054477 -0.04585273175 0.00865360927
+0.04103402798 -0.03840864648 0.005149700638
+0.02237652387 0.02528242372 -0.02853163549
+-0.009082787121 0.04093551222 0.007618916617
+-0.009230909487 0.03646217442 -4.063057443e-05
+0.03265862055 0.0207476215 -0.008216724456
+0.03484858607 0.02539398898 -0.006000790047
+0.0007249321567 -0.08553314372 -0.06623554195
+0.02531794235 0.01492099103 -0.07298685061
+0.02169570611 0.02095246201 -0.02990159364
+0.0185515761 0.02510568524 -0.01789235543
+-0.02523934203 0.06717179512 0.05758260487
+0.02841332794 0.02811910259 0.02765045637
+0.02887051775 0.02348062667 0.02777677531
+0.01959300146 0.02002558061 0.03629598928
+0.03715346203 -0.05644440349 -0.009046994397
+0.03928833829 -0.05042577034 -0.01658214102
+0.01478680897 0.05822757747 0.0486685627
+0.03211054658 0.01217809689 0.01599337028
+0.03364187548 0.006670920846 0.01264749662
+0.03203009338 0.01227204933 0.007437079355
+-0.02423261385 0.08643013843 0.05259741083
+0.004332733015 0.05150435678 0.02030094017
+0.01208254161 0.05201439155 0.02247814755
+0.003427659183 0.04802000834 0.01398963721
+0.02276338391 0.02125320131 -0.0387861643
+0.01491885407 0.02108116194 0.04064544898
+0.01666291404 0.02726485016 0.04306745286
+-0.001018808053 -0.0816290291 -0.05049897682
+-0.03217163688 0.0914800111 0.03789393191
+-0.009625967766 -0.04059750481 0.01360883545
+0.0362850179 -0.06643744318 -0.06571373017
+0.0377877708 -0.06681060887 -0.07045588148
+0.03405713172 -0.0393960876 -0.006694255561
+-0.03230861881 0.07814008053 0.03994364243
+-0.003326044529 -0.05337583948 -0.008162075272
+0.03383924432 0.01813990517 0.01100532233
+0.00854138322 -0.07081447164 0.0009923519691
+0.002632627199 -0.08255290043 -0.0241261269
+0.02300547731 0.03936665629 -0.01065454794
+-0.01477734009 0.08898867496 0.0597609461
+-0.00984042259 -0.06724991191 -0.01545101335
+0.0001923265552 -0.08373358181 -0.04743993057
+2.513262563e-06 -0.07848538849 -0.03904623652
+0.01088755043 -0.07350076626 0.01540502391
+0.01511915673 -0.07131425889 0.01896553282
+-0.004157373086 -0.07691653792 -0.0372788596
+-0.004037231423 0.03791358167 -0.007085547926
+0.02535144973 0.0383309043 -0.004951972256
+0.0225406976 0.04149474164 -0.002957108147
+0.0106529801 -0.02928021621 -0.0126164263
+0.01009676021 -0.0200015286 -0.01669189333
+0.01351343662 0.03795680192 0.05575444382
+-0.01218404463 0.07373458055 0.03843900307
+0.01893746489 0.008940651537 0.03115681528
+0.02893786116 0.04571985057 0.01298922794
+-0.001406748829 0.002753994988 0.02238331562
+0.005407932207 0.06523526016 0.04700172911
+0.001253452763 -0.02335770137 -0.01301516756
+0.02934068445 -0.06684118077 0.02767743708
+0.01595828459 -0.06792264145 0.02903357539
+0.02466972698 -0.07091009028 0.02289838491
+-0.01177937781 0.03170546778 -0.002757062391
+-0.01111654612 0.03096107962 0.005494974883
+0.004528858958 0.02622993727 -0.01780596166
+-0.00325110376 -0.04475472172 0.03259457136
+0.03060548362 -0.06659840014 -0.04295046113
+0.02814862415 0.0120546648 -0.06713734158
+-0.006957264812 -0.0704541734 -0.003726317713
+0.02840158747 -0.04003698958 -0.005090230725
+0.03939802052 -0.00984027028 0.01233394599
+0.001021304353 -0.08584516795 -0.07578358644
+-0.004956968977 -0.08915771768 -0.07544225422
+0.03633277305 -0.05791146313 0.02922742537
+0.01048760814 -0.0206307606 0.03129861391
+-0.01083069387 0.06358168532 0.05593104713
+-0.005587849738 -0.08426589174 -0.05186009449
+0.007066967839 -0.02104443296 0.03027300186
+0.0312582213 0.003380912391 0.01998650609
+0.001008045559 0.03349864569 -0.02825704011
+3.661520848e-05 0.03454218566 -0.05378659143
+-0.0064328794 0.06141651478 0.05043143056
+-0.002574920744 0.03420021241 -0.02964764453
+0.00726023862 0.03220416149 0.04897879227
+0.03228022562 0.03663473383 0.001770487161
+0.02942847951 0.0381523442 -0.003044309621
+-0.004492712345 -0.01632682256 -0.01144269021
+0.04090796853 -0.05048764789 0.002478422307
+0.0417337194 -0.05045283922 0.01690368707
+0.003720276611 -0.04180075383 -0.002429966509
+0.01574727942 -0.04389713385 -0.002366399407
+0.01004292325 -0.03952650712 -0.003465637748
+-0.006972657113 -0.02228912544 -0.007252393419
+0.03708495665 -0.003474163452 0.001054834314
+0.01053156023 -0.03198153987 0.03529987402
+-0.001478319938 -0.07066753655 0.01717184206
+-0.009088118904 -0.06659307566 -0.0025364611
+-0.006715411706 -0.06804090152 0.01295472813
+0.003520664036 -0.07698190391 -0.03005720669
+0.01281741749 -0.06966746615 0.02623765768
+-0.002804053005 0.04978383461 0.05599226721
+-0.01395709718 0.06493507252 0.0619430284
+0.03670793132 -0.0575529164 -0.02221021923
+0.03358852325 -0.06056481407 -0.02261843006
+-0.00552876951 0.08038754691 0.06084138607
+-0.007373440855 0.08594156316 0.07094686569
+0.03832707255 -0.0380213827 -0.0008488705719
+0.01484949465 0.04125355278 0.05596568125
+0.03040736766 -0.03015246206 -0.003727252623
+0.04217725998 -0.05544716276 0.01150225049
+-0.009581352486 0.03444424727 -0.005699797726
+0.03728354991 -0.002519393758 0.006673224089
+0.03693619057 -0.03240324339 0.01255925407
+-0.009399446838 0.08513021803 0.07767486427
+-0.0002230001794 0.02975037493 -0.06316179432
+-0.008106727935 0.03959931043 0.0181454912
+-0.006747571421 0.04340989941 0.01183529112
+-0.009868135427 0.08008693763 0.07192459661
+-0.004554678204 0.04261888195 -0.00202813239
+0.02542501201 -0.07004327163 0.01061972446
+0.02633920546 -0.07175781884 0.01595731936
+0.002048301014 0.03844650545 0.04646234884
+0.03219097988 0.01710942098 0.003970731497
+0.03061901225 0.01334672101 0.002002129752
+0.03582180127 0.01517716782 -0.07519256422
+0.03432969703 0.02061370706 -0.07509313011
+0.03298334235 0.0006368355536 -0.005490227895
+-0.007364367764 -0.06559003803 0.01843905517
+0.03012666842 -0.07243359184 -0.06048618727
+0.02528701122 0.02055819288 -0.07560641379
+0.03980713969 -0.03592090634 0.02018381706
+0.04129951578 -0.04417419611 0.01656568437
+-0.00791172242 0.07417977575 0.04069010875
+-0.003826944369 0.0789092005 0.04285381288
+0.03144704734 -0.06693406635 -0.03619997637
+0.03632585179 -0.0434862492 0.03222635813
+0.03734668241 -0.05743027839 -0.01645191669
+-0.004915767055 0.04488387161 0.006994735342
+-0.004604314256 0.05293489041 0.05217844972
+0.004422426172 0.04442174762 0.06024242343
+-0.02022883791 0.06525760891 0.06903949268
+0.03852784586 -0.03472705683 0.02776445481
+-0.01337951199 -0.04918758512 0.003440111313
+0.03714695465 -0.06008615314 -0.005949443772
+-0.006363901332 -0.01268806292 0.02091961482
+0.001928426726 -0.08385648026 -0.05860244766
+0.01529011036 0.005998854826 -0.01844092634
+0.0004055329701 0.06048980803 0.03581080895
+-0.01151244643 -0.04770375519 0.01170635032
+0.03062465914 0.01701389411 -0.03471886339
+-0.004903712608 -0.08437278291 -0.03488322902
+-0.009088887017 0.03245015141 -0.01435685853
+0.02710870968 -0.04428714411 -0.003944894994
+0.0290734332 -0.02405020739 -0.008689193401
+0.01926026339 0.05211161831 0.04170040517
+0.0308906377 -0.06050144665 -0.01307546946
+0.01246963011 0.04730235435 0.0122802104
+0.01764929753 -0.04035024092 -0.002802932332
+0.007365151452 -0.06724242445 0.0293734764
+0.03852854102 -0.06468575227 -0.07476054166
+0.00189818729 -0.06241064441 -0.003906940507
+-0.01176245213 0.0272913191 0.001812605098
+-0.003094447591 -0.06889170009 0.004888867191
+-0.0004866945918 -0.07383535978 0.003278961381
+0.0300305614 -0.05644658877 -0.01822453283
+0.003196336193 -0.0711485919 0.02474581909
+0.002887556068 -0.03095199626 -0.008724627583
+-0.01127770596 -0.06361515573 -0.003448711297
+0.004212269933 -0.07475184697 0.01191939452
+-0.006909876038 0.04279313544 -0.07134292673
+-0.005202348202 0.0390509625 -0.06659169161
+0.03985959728 -0.05288672269 -0.003212918687
+-0.004147585125 -0.02945833986 -0.005629237818
+0.01337845903 -0.04478248831 0.03739311574
+-0.00450044646 -0.03541216421 -0.0001090139374
+-0.0004868297542 0.0353548159 -0.03992408516
+-0.03736807997 0.08124875032 0.04326537752
+-0.004207044997 0.01318205175 0.02035661421
+0.03395718719 -0.06758867602 0.005172508996
+0.002336525491 -0.03664099157 -0.003563410629
+-0.03338266552 0.09117715709 0.04225830173
+0.03287485075 -0.06627468814 -0.02506122897
+0.006379793022 -0.07366487381 0.02021869667
+-0.01058619571 -0.06438440647 0.009245721948
+-0.008558872929 -0.08429199527 -0.07612810025
+-0.03332078802 0.0845351043 0.05015094394
+-0.03564272671 0.08936385183 0.0394080329
+0.0006759096634 -0.07365013568 0.01331403022
+0.03942777986 -0.03667271975 0.01137931053
+-0.0103508598 0.08472449689 0.06104104239
+-0.002121405726 -0.05986981045 -0.004786758587
+-0.002313980885 -0.0750421817 -0.02257371498
+0.03624358562 -0.0465668457 -0.01755012638
+1 2
+3 1
+2 3
+4 5
+4 6
+6 5
+7 8
+9 8
+9 7
+10 11
+10 12
+12 11
+13 14
+14 15
+13 15
+16 17
+17 18
+16 18
+19 20
+20 21
+19 21
+22 23
+24 23
+22 24
+25 26
+27 26
+25 27
+28 29
+29 30
+30 28
+4 31
+32 31
+32 4
+33 34
+35 33
+34 35
+36 37
+36 38
+37 38
+39 40
+41 40
+39 41
+42 43
+44 43
+44 42
+45 46
+45 47
+46 47
+48 49
+50 48
+50 49
+51 52
+51 53
+53 52
+54 55
+54 56
+55 56
+57 58
+57 59
+58 59
+60 61
+61 62
+62 60
+63 64
+65 63
+64 65
+66 67
+68 67
+66 68
+4 69
+69 5
+70 71
+72 70
+72 71
+73 74
+73 75
+75 74
+33 76
+76 35
+77 78
+78 23
+23 77
+71 79
+70 79
+14 80
+81 80
+81 14
+82 83
+57 82
+83 57
+84 85
+85 86
+84 86
+87 88
+87 89
+89 88
+90 91
+91 92
+90 92
+93 94
+94 95
+93 95
+96 97
+98 97
+96 98
+99 100
+99 101
+101 100
+102 29
+102 103
+29 103
+104 105
+104 106
+105 106
+107 108
+109 108
+107 109
+110 111
+110 112
+111 112
+113 114
+113 115
+114 115
+116 14
+117 116
+117 14
+118 119
+119 120
+120 118
+121 122
+121 123
+123 122
+124 125
+126 124
+126 125
+127 128
+128 129
+127 129
+130 131
+131 132
+132 130
+133 134
+135 133
+135 134
+136 137
+136 138
+138 137
+139 140
+140 141
+139 141
+142 143
+144 143
+142 144
+145 146
+146 147
+147 145
+148 149
+150 149
+148 150
+151 70
+151 72
+152 153
+152 137
+137 153
+154 100
+154 155
+100 155
+156 157
+156 158
+158 157
+159 160
+159 161
+161 160
+8 162
+8 163
+163 162
+164 9
+164 7
+23 165
+166 23
+166 165
+167 168
+168 169
+169 167
+170 171
+172 171
+172 170
+173 44
+113 44
+173 113
+174 175
+176 174
+176 175
+177 125
+177 126
+178 28
+178 179
+28 179
+180 181
+180 182
+182 181
+151 79
+183 184
+185 184
+185 183
+186 187
+188 187
+186 188
+189 190
+191 189
+191 190
+192 193
+194 193
+194 192
+195 196
+197 196
+195 197
+198 199
+200 199
+198 200
+201 202
+203 201
+203 202
+204 112
+204 110
+36 141
+36 205
+141 205
+206 152
+206 136
+152 136
+120 189
+189 207
+207 120
+208 209
+208 210
+210 209
+211 212
+175 211
+212 175
+213 214
+215 213
+214 215
+216 217
+122 217
+122 216
+218 219
+218 76
+76 219
+220 8
+220 9
+221 222
+221 223
+223 222
+224 225
+224 226
+226 225
+26 227
+26 228
+228 227
+229 230
+230 231
+231 229
+144 119
+119 143
+232 233
+234 233
+232 234
+24 147
+24 145
+215 129
+129 75
+75 215
+164 235
+236 235
+236 164
+237 238
+239 238
+239 237
+240 241
+240 27
+27 241
+242 243
+242 109
+243 109
+244 245
+246 244
+245 246
+247 233
+233 13
+247 13
+248 24
+248 22
+249 250
+250 251
+249 251
+252 253
+252 205
+253 205
+254 237
+254 255
+255 237
+256 162
+256 163
+257 258
+258 259
+259 257
+260 261
+260 262
+262 261
+263 264
+251 264
+263 251
+108 93
+265 93
+265 108
+266 162
+266 8
+95 267
+267 268
+95 268
+126 269
+269 270
+270 126
+271 272
+273 272
+273 271
+274 173
+173 138
+138 274
+128 274
+274 275
+275 128
+276 10
+277 276
+277 10
+261 278
+262 278
+279 249
+4 249
+4 279
+280 281
+281 27
+280 27
+43 282
+44 282
+283 284
+285 283
+284 285
+286 287
+288 287
+286 288
+289 290
+289 217
+217 290
+291 292
+25 292
+291 25
+293 294
+294 295
+295 293
+296 297
+298 296
+297 298
+299 66
+67 299
+156 300
+301 300
+156 301
+302 303
+176 303
+176 302
+304 305
+304 306
+306 305
+307 308
+307 309
+309 308
+267 55
+55 310
+310 267
+311 312
+313 311
+313 312
+40 191
+191 41
+138 113
+314 315
+314 316
+316 315
+317 318
+319 318
+317 319
+320 321
+320 322
+322 321
+323 324
+325 324
+323 325
+295 326
+326 293
+186 327
+328 327
+186 328
+329 330
+330 296
+329 296
+208 331
+208 198
+198 331
+227 311
+311 286
+227 286
+332 333
+332 307
+307 333
+134 334
+335 134
+335 334
+336 337
+39 336
+337 39
+129 275
+275 75
+338 339
+338 92
+92 339
+340 341
+320 341
+320 340
+235 342
+343 342
+235 343
+344 345
+346 345
+344 346
+158 319
+319 157
+323 58
+335 58
+323 335
+347 118
+347 119
+259 218
+259 76
+348 349
+348 334
+334 349
+181 16
+350 16
+181 350
+351 352
+353 352
+351 353
+101 354
+217 354
+217 101
+355 356
+357 356
+355 357
+334 358
+358 359
+359 334
+161 360
+360 361
+161 361
+136 275
+136 362
+275 362
+363 133
+363 364
+364 133
+365 230
+365 366
+366 230
+367 368
+369 368
+369 367
+60 370
+370 61
+344 371
+345 371
+372 373
+374 373
+372 374
+375 9
+375 188
+188 9
+119 376
+120 376
+247 59
+377 59
+377 247
+118 276
+347 276
+378 347
+378 144
+144 347
+259 213
+257 213
+131 159
+159 373
+131 373
+379 380
+379 381
+381 380
+350 382
+350 18
+382 18
+383 51
+51 384
+384 383
+328 385
+327 385
+329 212
+329 386
+386 212
+367 387
+368 387
+147 388
+388 146
+389 390
+377 390
+389 377
+391 238
+239 391
+163 236
+7 163
+7 236
+361 392
+392 393
+361 393
+79 394
+394 151
+395 396
+396 370
+395 370
+30 178
+397 398
+399 398
+397 399
+336 36
+205 336
+400 386
+400 401
+401 386
+402 327
+385 402
+403 404
+405 404
+405 403
+122 406
+406 216
+65 407
+65 408
+407 408
+409 410
+411 410
+411 409
+335 358
+335 412
+358 412
+413 322
+413 321
+192 316
+192 314
+218 414
+259 414
+322 388
+415 322
+388 415
+155 393
+393 154
+416 417
+416 418
+418 417
+3 419
+352 419
+3 352
+420 421
+382 421
+420 382
+422 240
+171 422
+240 171
+423 176
+423 424
+176 424
+425 45
+426 45
+425 426
+427 428
+429 428
+429 427
+150 430
+91 430
+150 91
+67 431
+431 432
+432 67
+433 414
+434 414
+434 433
+69 31
+366 294
+435 366
+435 294
+436 99
+436 437
+99 437
+95 438
+267 438
+155 439
+439 440
+155 440
+199 98
+199 441
+441 98
+442 443
+442 444
+444 443
+445 416
+445 418
+446 285
+283 446
+357 3
+3 355
+447 316
+448 447
+316 448
+449 38
+449 36
+258 450
+451 258
+450 451
+197 452
+167 452
+167 197
+127 453
+453 128
+430 454
+430 455
+454 455
+456 262
+456 260
+186 375
+66 457
+458 457
+458 66
+459 167
+459 168
+147 237
+147 238
+456 196
+196 262
+423 83
+460 83
+460 423
+143 376
+143 252
+252 376
+457 349
+458 349
+461 462
+462 463
+463 461
+242 464
+242 465
+464 465
+466 467
+466 468
+467 468
+446 66
+469 66
+469 446
+470 471
+125 471
+125 470
+472 473
+474 473
+474 472
+475 387
+387 476
+475 476
+477 478
+477 444
+444 478
+228 479
+457 479
+228 457
+480 481
+153 481
+153 480
+482 483
+56 483
+56 482
+90 148
+245 90
+148 245
+316 484
+315 484
+240 485
+485 300
+240 300
+298 397
+298 330
+397 330
+486 479
+487 486
+479 487
+345 409
+488 409
+345 488
+371 263
+410 263
+371 410
+489 490
+489 491
+491 490
+462 401
+462 386
+284 313
+284 86
+86 313
+443 492
+493 492
+493 443
+476 494
+494 107
+476 107
+495 496
+496 497
+495 497
+251 498
+249 498
+499 500
+501 500
+499 501
+502 228
+502 479
+491 503
+491 504
+503 504
+388 391
+388 238
+448 505
+316 505
+506 279
+279 331
+506 331
+507 178
+507 179
+305 508
+508 509
+305 509
+510 146
+442 510
+146 442
+156 280
+301 280
+511 210
+511 209
+512 103
+512 29
+495 54
+513 495
+54 513
+340 321
+249 6
+498 6
+155 514
+514 393
+132 372
+372 515
+132 515
+516 52
+51 516
+517 264
+264 379
+517 379
+101 518
+354 518
+505 519
+505 520
+520 519
+521 439
+522 439
+522 521
+225 305
+305 224
+217 523
+217 201
+523 201
+32 339
+339 331
+331 32
+524 432
+524 68
+68 432
+525 446
+446 526
+526 525
+527 364
+528 527
+364 528
+39 81
+80 39
+409 371
+529 453
+503 453
+503 529
+307 530
+332 530
+531 259
+531 213
+243 532
+532 466
+466 243
+454 91
+100 372
+123 100
+372 123
+447 192
+215 73
+533 73
+533 215
+534 308
+475 308
+534 475
+528 135
+528 535
+535 135
+110 271
+326 110
+271 326
+536 537
+538 537
+536 538
+93 394
+151 93
+62 439
+62 522
+539 481
+539 540
+481 540
+278 416
+445 278
+541 449
+449 141
+541 141
+110 542
+542 297
+110 297
+201 520
+131 201
+131 520
+254 239
+543 239
+543 254
+544 240
+544 300
+157 544
+156 544
+545 436
+437 545
+72 256
+72 162
+194 421
+421 192
+146 546
+546 510
+496 547
+269 496
+547 269
+461 215
+461 533
+498 517
+264 498
+548 549
+548 315
+315 549
+550 536
+407 536
+550 407
+426 124
+547 426
+547 124
+15 38
+15 37
+551 450
+451 551
+552 150
+552 346
+150 346
+104 73
+104 533
+236 529
+453 236
+55 483
+196 341
+262 341
+460 325
+323 460
+16 553
+16 289
+289 553
+554 551
+554 451
+555 434
+495 555
+434 495
+556 299
+141 299
+556 141
+174 83
+174 82
+252 557
+557 143
+42 558
+558 43
+559 67
+559 431
+184 47
+184 46
+324 134
+324 335
+329 400
+539 232
+116 539
+116 232
+23 428
+23 429
+128 560
+560 274
+268 561
+561 562
+268 562
+506 198
+503 127
+127 213
+503 213
+334 541
+334 449
+135 324
+135 563
+563 324
+477 564
+565 477
+564 565
+566 567
+566 568
+567 568
+424 302
+569 424
+302 569
+570 45
+570 426
+273 571
+554 571
+273 554
+81 336
+29 20
+21 29
+175 303
+303 212
+398 330
+572 573
+572 574
+573 574
+130 575
+519 575
+130 519
+522 576
+538 522
+538 576
+577 342
+342 578
+577 578
+579 580
+580 340
+579 340
+277 12
+277 207
+207 12
+559 142
+40 142
+40 559
+368 581
+581 582
+582 368
+375 220
+308 333
+308 465
+465 333
+391 195
+195 239
+287 319
+317 287
+444 583
+583 478
+231 407
+231 408
+260 278
+531 503
+491 531
+129 213
+71 504
+71 584
+504 584
+518 99
+439 60
+297 204
+585 583
+470 585
+470 583
+472 586
+586 474
+265 95
+532 95
+532 265
+361 160
+351 3
+462 554
+273 462
+209 441
+98 209
+587 539
+116 587
+588 426
+588 570
+211 174
+134 348
+406 100
+123 406
+125 589
+177 589
+590 582
+590 369
+582 369
+566 29
+566 28
+252 591
+253 591
+474 564
+564 586
+496 588
+497 588
+592 221
+221 593
+593 592
+594 590
+375 594
+590 375
+451 214
+463 214
+451 463
+287 158
+375 367
+590 367
+339 210
+339 511
+595 480
+481 595
+532 109
+596 522
+597 596
+522 597
+331 210
+253 336
+79 489
+489 394
+598 577
+42 577
+42 598
+423 325
+89 599
+599 600
+89 600
+310 84
+85 310
+601 602
+602 281
+281 601
+359 15
+38 359
+46 88
+603 88
+46 603
+558 149
+245 149
+245 558
+104 390
+104 389
+381 375
+381 186
+593 501
+221 501
+384 595
+595 383
+398 329
+437 518
+401 542
+400 542
+391 196
+415 320
+516 469
+446 516
+97 199
+118 207
+604 298
+604 204
+298 204
+262 445
+118 277
+416 605
+417 605
+208 199
+311 317
+286 317
+606 241
+240 606
+427 567
+566 427
+607 565
+565 608
+608 607
+358 15
+412 15
+485 606
+309 609
+610 609
+309 610
+78 596
+23 596
+169 197
+195 169
+611 543
+417 543
+611 417
+34 612
+48 34
+48 612
+2 88
+87 2
+575 121
+515 575
+515 121
+599 56
+599 54
+596 166
+79 504
+504 489
+579 493
+613 493
+613 579
+337 41
+464 107
+476 464
+614 480
+595 614
+42 615
+615 558
+563 325
+84 562
+84 561
+535 569
+569 563
+535 563
+442 583
+154 374
+393 374
+413 579
+579 321
+280 288
+288 158
+280 158
+560 616
+616 598
+560 598
+153 540
+540 152
+501 614
+614 593
+344 617
+617 402
+402 344
+126 547
+393 160
+374 160
+240 25
+230 618
+365 618
+619 398
+619 399
+62 166
+165 62
+536 293
+536 294
+172 422
+419 486
+419 487
+404 364
+364 403
+313 227
+284 227
+58 247
+412 247
+58 412
+553 290
+580 613
+88 184
+88 183
+148 91
+313 85
+52 467
+526 467
+52 526
+620 473
+620 474
+300 601
+606 300
+606 601
+541 458
+334 458
+605 226
+416 226
+550 231
+256 584
+584 163
+203 21
+202 21
+211 621
+105 621
+211 105
+558 246
+415 341
+449 359
+180 484
+622 484
+622 180
+442 388
+414 531
+480 593
+480 592
+419 623
+623 487
+499 333
+624 499
+624 333
+279 32
+31 338
+31 530
+530 338
+550 294
+366 550
+625 619
+625 398
+154 372
+317 626
+626 318
+182 289
+181 289
+627 217
+122 627
+282 223
+282 246
+223 246
+432 628
+628 587
+587 432
+115 282
+113 282
+629 428
+567 428
+567 629
+391 415
+174 106
+106 82
+57 460
+57 323
+425 585
+630 585
+630 425
+423 174
+483 310
+483 85
+241 281
+492 77
+492 620
+620 77
+494 631
+631 107
+384 524
+384 68
+613 632
+492 613
+492 632
+355 626
+356 626
+564 444
+633 466
+633 467
+507 303
+179 303
+541 66
+541 299
+403 634
+568 634
+568 403
+75 362
+212 507
+116 13
+13 232
+72 494
+631 72
+74 362
+69 530
+177 270
+285 86
+285 84
+353 292
+352 292
+102 427
+429 102
+451 257
+370 392
+393 370
+111 635
+112 635
+636 509
+305 636
+476 534
+592 115
+592 114
+637 360
+392 637
+392 360
+94 267
+438 94
+592 137
+592 153
+30 619
+399 30
+542 271
+82 59
+422 544
+203 19
+293 111
+111 537
+293 537
+501 222
+222 499
+429 165
+165 396
+429 396
+571 450
+551 571
+524 595
+232 638
+638 539
+639 640
+572 640
+639 572
+464 109
+641 24
+641 147
+216 101
+621 104
+542 273
+265 109
+604 572
+572 642
+642 604
+470 425
+283 227
+616 236
+343 236
+616 343
+304 225
+517 6
+439 514
+618 612
+618 34
+421 447
+523 520
+527 535
+527 643
+643 535
+537 635
+336 37
+37 81
+244 624
+244 499
+139 252
+140 252
+292 502
+292 486
+502 486
+196 415
+603 45
+603 570
+644 399
+644 397
+381 594
+594 380
+67 556
+170 291
+170 353
+291 353
+244 222
+222 246
+552 149
+509 226
+509 224
+623 1
+3 623
+425 471
+425 125
+640 645
+640 440
+440 645
+512 21
+202 512
+173 42
+173 598
+588 547
+405 510
+546 405
+313 356
+312 356
+484 181
+484 350
+442 493
+117 431
+431 80
+80 117
+12 646
+12 647
+646 647
+519 182
+575 182
+648 444
+444 474
+474 648
+203 518
+354 203
+139 205
+585 404
+630 404
+488 411
+649 643
+649 535
+301 281
+601 301
+570 600
+603 600
+543 195
+605 195
+605 543
+61 396
+193 314
+193 315
+20 30
+644 20
+644 30
+49 295
+49 650
+295 650
+85 482
+191 142
+482 357
+87 482
+87 357
+326 650
+634 567
+629 634
+186 402
+402 381
+520 130
+241 602
+155 640
+94 54
+94 495
+226 278
+170 318
+318 353
+188 164
+622 316
+505 622
+285 562
+302 651
+649 302
+649 651
+559 652
+652 142
+190 207
+653 98
+209 653
+162 494
+266 494
+68 51
+381 264
+343 577
+616 577
+578 344
+617 578
+383 614
+383 501
+641 248
+229 408
+133 528
+389 106
+219 555
+218 555
+468 532
+585 510
+404 510
+390 74
+390 654
+74 654
+11 276
+356 85
+303 651
+655 78
+64 655
+64 78
+50 571
+450 50
+244 332
+332 245
+500 242
+465 500
+82 389
+102 396
+25 228
+187 342
+235 187
+511 455
+511 454
+532 268
+269 555
+219 269
+607 618
+618 565
+556 559
+49 435
+48 435
+608 478
+477 608
+54 267
+18 420
+513 497
+53 467
+387 220
+367 220
+185 630
+364 630
+185 364
+643 568
+568 656
+643 656
+657 279
+657 249
+157 422
+381 371
+402 371
+35 48
+620 655
+77 655
+370 637
+296 400
+542 296
+527 568
+197 456
+452 456
+650 50
+206 540
+658 254
+611 254
+611 658
+329 625
+481 524
+432 481
+522 659
+659 576
+333 500
+349 623
+349 487
+574 660
+604 574
+660 604
+90 332
+140 652
+140 142
+428 24
+642 204
+112 642
+411 653
+511 653
+511 411
+220 266
+387 266
+549 661
+548 661
+621 386
+211 386
+310 561
+452 260
+662 96
+97 662
+346 578
+351 318
+90 338
+526 468
+562 468
+562 526
+573 639
+640 573
+658 255
+246 43
+352 486
+124 425
+558 552
+171 25
+305 260
+452 305
+64 596
+218 434
+275 138
+395 637
+226 168
+168 605
+545 640
+436 640
+5 610
+69 610
+424 325
+502 25
+506 663
+663 657
+506 657
+594 582
+380 582
+47 630
+425 47
+202 159
+202 131
+659 664
+664 645
+659 645
+573 19
+437 19
+437 573
+549 382
+661 382
+610 530
+478 665
+665 608
+64 597
+65 597
+285 525
+382 194
+306 459
+304 459
+523 505
+523 448
+390 638
+234 638
+390 234
+17 553
+453 560
+145 428
+428 146
+140 557
+142 557
+251 662
+662 250
+446 457
+303 28
+633 243
+500 633
+243 500
+631 151
+629 146
+546 629
+540 638
+575 132
+332 624
+68 469
+470 478
+566 656
+656 28
+198 663
+200 663
+642 635
+537 642
+342 385
+342 328
+501 633
+633 53
+53 501
+632 580
+396 161
+102 161
+403 527
+325 569
+100 436
+155 436
+626 351
+94 490
+490 495
+235 188
+529 504
+137 114
+168 304
+168 225
+283 457
+228 283
+581 475
+5 475
+5 581
+376 591
+490 433
+434 490
+591 120
+405 634
+138 114
+573 644
+19 644
+586 229
+230 586
+489 94
+656 651
+28 651
+664 572
+640 664
+92 454
+340 658
+418 658
+340 418
+298 660
+648 492
+648 620
+401 273
+342 617
+617 385
+89 603
+435 295
+80 40
+80 559
+666 380
+379 666
+166 522
+350 549
+621 533
+621 461
+470 665
+589 470
+665 589
+121 182
+289 121
+368 475
+274 598
+611 418
+580 658
+632 658
+461 214
+255 22
+255 248
+521 440
+562 525
+508 278
+508 260
+621 462
+350 315
+142 190
+573 545
+346 430
+346 455
+219 270
+171 291
+576 537
+634 546
+219 33
+565 586
+97 200
+662 200
+452 306
+632 255
+133 348
+513 599
+51 469
+88 1
+329 507
+649 656
+163 529
+647 144
+647 142
+615 552
+578 615
+578 552
+607 270
+270 618
+653 96
+510 583
+606 602
+74 638
+526 516
+518 19
+636 224
+17 447
+17 448
+1 183
+165 61
+363 348
+377 233
+632 77
+561 267
+185 47
+147 248
+92 511
+183 623
+183 363
+623 363
+609 530
+307 609
+76 258
+258 35
+161 103
+660 573
+644 660
+587 481
+664 642
+151 108
+472 229
+411 96
+410 96
+554 463
+465 476
+534 465
+348 623
+571 272
+362 206
+319 170
+319 172
+60 514
+476 266
+397 660
+102 566
+117 628
+628 431
+185 363
+453 616
+263 381
+395 161
+666 581
+380 581
+257 214
+443 648
+615 577
+169 605
+286 280
+286 27
+104 654
+73 654
+85 357
+200 250
+290 523
+290 448
+105 174
+637 667
+667 360
+647 190
+207 647
+610 475
+15 81
+450 35
+262 418
+652 556
+159 103
+491 433
+341 418
+584 529
+383 53
+223 115
+115 221
+406 668
+216 668
+388 669
+669 322
+646 378
+646 144
+256 71
+597 538
+289 122
+365 612
+612 366
+496 555
+412 13
+618 33
+576 642
+619 178
+59 389
+157 172
+312 626
+312 317
+455 411
+455 488
+199 209
+459 452
+627 289
+366 231
+569 649
+56 89
+482 89
+667 395
+132 373
+600 497
+497 570
+514 370
+193 548
+193 661
+515 123
+103 202
+662 263
+410 662
+408 63
+531 433
+206 74
+638 206
+487 457
+642 659
+628 116
+408 472
+346 488
+355 351
+187 328
+101 668
+591 189
+5 666
+655 63
+655 408
+377 234
+33 270
+508 226
+111 326
+394 94
+373 160
+661 194
+248 237
+309 475
+18 447
+337 191
+337 189
+408 473
+497 599
+22 77
+77 255
+253 337
+591 337
+108 631
+26 286
+473 655
+619 507
+468 268
+87 3
+556 140
+650 271
+272 50
+519 180
+669 493
+442 669
+646 11
+530 90
+625 507
+447 420
+666 517
+230 565
+65 536
+250 657
+100 668
+650 272
+665 177
+177 607
+607 665
+11 378
+161 667
+200 657
+612 435
+32 338
+347 11
+521 645
+65 538
+354 201
+519 622
+448 553
+521 659
+493 322
+6 666
+450 48
+493 413
+1 2 3
+4 5 6
+7 8 9
+10 11 12
+13 14 15
+16 17 18
+19 20 21
+22 23 24
+25 26 27
+28 29 30
+31 32 33
+34 35 36
+37 38 39
+40 41 42
+43 44 45
+46 47 48
+49 50 51
+52 53 54
+55 56 57
+58 59 60
+61 62 63
+64 65 66
+67 68 69
+70 4 71
+72 73 74
+75 76 77
+78 79 35
+80 81 82
+72 83 84
+85 86 87
+88 89 90
+91 92 93
+94 95 96
+97 98 99
+100 101 102
+103 104 105
+106 107 108
+109 110 111
+112 113 114
+115 116 117
+118 119 120
+121 122 123
+124 125 126
+127 128 129
+130 131 132
+133 134 135
+136 137 138
+139 140 141
+142 143 144
+145 146 147
+148 149 150
+151 152 153
+154 155 156
+157 158 159
+160 161 73
+162 163 164
+165 166 167
+168 169 170
+171 172 173
+174 175 176
+177 178 9
+179 180 181
+182 183 184
+185 186 187
+188 189 190
+191 192 193
+194 135 195
+196 197 198
+199 200 201
+202 160 84
+203 204 205
+206 207 208
+209 210 211
+212 213 214
+215 216 217
+218 219 220
+221 222 223
+224 119 225
+226 227 228
+229 230 231
+232 233 234
+235 236 237
+238 239 240
+241 242 243
+244 245 246
+247 248 249
+250 251 8
+252 253 254
+255 256 257
+258 259 260
+261 262 263
+264 152 265
+266 267 268
+156 269 270
+271 272 273
+274 275 276
+277 278 279
+280 281 282
+283 284 285
+286 287 288
+289 290 291
+24 292 293
+294 295 296
+297 298 299
+300 301 302
+303 176 304
+305 306 307
+308 309 310
+311 312 313
+314 315 316
+317 318 174
+319 320 321
+322 323 324
+325 326 327
+328 329 330
+331 332 333
+334 335 336
+337 310 338
+339 340 341
+342 343 344
+44 345 346
+347 348 349
+350 351 352
+353 354 355
+356 357 358
+359 360 361
+362 363 364
+67 365 366
+367 368 369
+370 371 372
+373 374 375
+376 377 378
+379 380 381
+382 383 384
+41 385 386
+329 190 387
+388 389 390
+391 392 393
+394 395 396
+397 398 399
+361 400 401
+402 403 404
+405 406 407
+408 409 410
+411 412 413
+414 415 416
+417 418 419
+420 421 422
+423 424 272
+425 426 427
+428 429 430
+431 432 433
+434 435 436
+170 437 438
+439 440 441
+442 443 127
+248 444 445
+446 447 448
+449 450 451
+452 453 454
+455 456 457
+458 459 460
+461 462 463
+464 465 466
+467 468 469
+470 471 472
+473 474 475
+476 477 478
+61 479 480
+434 481 482
+483 484 485
+486 487 488
+128 489 490
+491 492 493
+442 494 495
+496 497 498
+499 500 307
+501 502 503
+504 505 506
+507 508 509
+510 511 512
+513 403 514
+515 516 517
+476 518 519
+520 155 521
+522 523 524
+525 526 278
+527 528 529
+530 531 532
+202 533 534
+535 536 537
+196 30 538
+539 540 541
+542 543 227
+544 545 546
+514 547 548
+549 550 551
+246 552 553
+554 555 556
+557 558 559
+560 561 562
+563 564 396
+565 389 566
+444 567 568
+569 570 571
+572 166 573
+574 575 576
+577 578 579
+580 581 582
+583 584 585
+586 587 588
+589 590 591
+592 593 594
+595 596 597
+598 599 600
+601 602 603
+604 31 70
+605 606 607
+608 609 610
+319 611 612
+613 614 615
+616 617 618
+619 620 621
+622 623 575
+624 348 625
+626 627 460
+628 629 630
+631 38 632
+633 634 635
+636 637 638
+639 640 136
+641 642 643
+644 309 645
+208 487 646
+647 648 649
+650 651 182
+652 653 277
+654 655 644
+656 657 658
+659 660 661
+662 663 648
+664 665 666
+667 668 669
+670 671 672
+673 674 675
+676 677 678
+679 680 681
+682 683 684
+685 686 687
+688 689 690
+691 692 693
+694 695 696
+697 698 699
+700 701 390
+702 703 704
+705 706 707
+708 709 710
+711 712 713
+714 715 716
+717 718 719
+720 721 546
+722 723 724
+725 726 727
+728 729 730
+731 732 733
+296 734 735
+736 737 738
+688 739 740
+741 742 743
+744 525 745
+746 747 630
+748 749 750
+197 751 752
+753 754 755
+756 757 758
+759 369 760
+761 762 237
+111 763 764
+765 766 767
+768 430 394
+769 735 770
+771 572 772
+773 774 775
+52 776 777
+778 779 780
+781 782 455
+783 784 785
+786 787 788
+255 789 790
+791 792 793
+794 795 796
+797 798 799
+800 801 802
+803 804 805
+806 86 807
+711 482 808
+809 810 811
+812 415 813
+499 814 815
+816 817 818
+641 819 596
+820 821 822
+628 565 823
+824 825 826
+827 828 829
+830 831 832
+833 834 835
+836 837 838
+534 839 840
+787 841 842
+843 844 845
+622 846 847
+848 849 850
+851 852 853
+854 855 856
+857 858 859
+860 704 861
+862 863 168
+609 864 865
+303 866 867
+214 868 869
+870 871 756
+872 873 874
+875 826 876
+778 877 878
+879 880 881
+882 883 884
+885 886 887
+888 889 39
+745 653 520
+890 635 891
+892 893 894
+825 895 896
+5 340 769
+809 897 898
+899 57 695
+900 901 655
+399 902 903
+904 905 906
+907 891 908
+909 910 911
+912 913 914
+915 916 88
+917 660 918
+43 919 920
+598 921 922
+923 924 48
+418 925 926
+516 927 544
+928 929 930
+931 932 593
+331 933 934
+935 936 937
+938 750 410
+939 940 941
+942 943 848
+944 945 946
+947 948 949
+950 951 952
+264 443 498
+953 954 955
+956 957 590
+958 959 960
+806 421 961
+962 963 20
+964 965 240
+539 707 966
+967 968 969
+970 971 972
+973 974 975
+976 977 978
+979 980 981
+982 983 984
+985 986 987
+988 989 990
+486 251 991
+992 993 994
+526 995 996
+393 997 998
+999 1000 687
+1001 556 1002
+337 1003 308
+1004 1005 741
+940 138 1006
+1007 1008 1009
+107 1010 781
+1011 63 841
+1012 225 853
+1013 1014 1015
+1016 681 1017
+1018 1019 1020
+466 1021 173
+579 452 1022
+960 1023 1024
+1025 1026 618
+1027 1028 929
+1029 957 1030
+191 239 1031
+1032 417 447
+821 1033 1034
+1035 194 1036
+1037 1038 1039
+1040 28 1041
+1042 297 1043
+1044 1045 1017
+1046 1047 732
+1048 1049 1050
+1051 1052 1053
+1054 1055 1056
+1057 997 437
+1053 1058 1059
+761 1060 1061
+691 1062 1063
+285 1064 816
+1065 1066 1067
+1060 1068 795
+1069 299 543
+1070 1071 533
+1072 1073 1074
+902 1075 658
+1076 1077 1078
+1079 1080 91
+1081 1082 1083
+1084 888 1085
+1086 1087 1088
+1089 1090 1091
+1092 522 1093
+646 1094 1095
+1096 1049 1097
+1098 1099 512
+1100 966 405
+1101 1010 610
+1102 545 1103
+215 995 1104
+1105 570 395
+675 1106 1107
+104 1108 616
+234 1109 129
+1110 1111 1112
+847 338 1113
+1114 1109 983
+1115 574 1116
+218 409 1117
+1118 1119 412
+1120 1121 280
+950 1122 1123
+1124 1125 1126
+1127 562 1128
+1121 1129 702
+1130 1131 1132
+81 1133 1134
+1135 1136 217
+1137 1138 1139
+1140 1141 1142
+1143 1144 94
+1145 1146 1147
+1148 56 1149
+1150 180 1134
+1151 1152 1070
+1153 1154 1155
+422 42 1156
+1157 1158 730
+1159 1160 1062
+1161 1162 919
+946 1163 398
+1164 936 1165
+1166 1167 1168
+1169 999 620
+1170 1171 573
+1172 1173 564
+1174 1175 1176
+1177 1178 1179
+1180 1181 162
+1096 1182 1183
+1175 351 1057
+1184 1185 1186
+887 1187 134
+1188 1171 1189
+1190 27 281
+1191 1192 473
+540 1193 1194
+1195 1196 181
+359 1197 1198
+186 584 1199
+1176 169 759
+1200 1201 709
+1202 549 1203
+722 1204 1205
+1206 1207 1208
+906 353 1209
+1210 979 1155
+1211 203 1212
+97 697 1213
+1214 724 92
+1215 1216 1217
+680 1218 1219
+1220 1221 1222
+1223 1224 942
+1115 1225 1226
+1227 884 1001
+1228 304 1229
+964 193 371
+223 1230 1231
+1232 1233 1234
+1091 288 1235
+1236 1105 429
+1085 631 1237
+1238 1239 1240
+1241 521 758
+557 808 716
+568 1242 814
+1050 1243 1244
+1245 1246 1201
+1247 1248 1249
+1211 1086 924
+1250 796 749
+1251 1252 1253
+1254 1255 605
+1256 1193 1257
+165 820 1258
+391 1259 1260
+1261 1262 201
+245 1263 1264
+1265 1266 1267
+1268 1269 1270
+1271 122 1272
+1273 1274 1275
+571 1276 744
+1277 1278 916
+903 1279 1280
+1281 1282 1283
+915 656 1284
+1285 1286 1080
+282 343 1287
+1288 1289 1290
+729 1291 1292
+1293 1294 798
+1295 1296 1297
+458 1298 1299
+1300 686 947
+1301 670 1302
+1303 1304 752
+1305 1306 365
+1307 1308 1309
+424 469 1310
+1303 1311 965
+930 1312 1313
+1291 1314 1315
+1310 1316 77
+1317 1252 604
+586 192 1284
+1318 195 324
+93 1319 1320
+1321 453 1322
+1323 594 1324
+305 1325 634
+1326 1327 531
+1328 120 1329
+1330 1331 755
+1332 829 684
+1333 1334 123
+1335 1336 1337
+276 529 178
+1338 612 1339
+1340 1341 164
+1194 1342 1343
+1344 851 833
+1345 59 89
+583 860 1346
+1230 1347 21
+1348 1349 1350
+738 1351 1352
+1353 1354 1355
+1356 890 1357
+1293 1358 1098
+928 1359 1360
+1361 1362 1363
+117 1364 1157
+810 639 939
+597 1213 159
+1365 269 1366
+244 1367 457
+1368 112 1233
+327 1369 1344
+1370 1020 1064
+1371 1372 1373
+1374 1014 1281
+1375 347 1205
+1376 1377 1378
+789 1379 373
+877 1380 770
+1180 692 845
+613 771 1381
+1140 1382 1383
+290 266 1313
+869 1384 823
+1385 793 854
+1386 1387 1388
+1349 1328 1389
+961 1390 1391
+1392 1248 1393
+1394 1395 148
+1396 1397 1398
+900 1399 1236
+1400 1401 956
+541 1402 1403
+1404 1405 506
+366 912 1406
+1407 1408 1409
+419 560 461
+287 1410 1411
+892 158 1412
+312 878 734
+1413 256 1414
+2 1415 1416
+1417 1418 677
+1419 1420 1421
+1422 1423 1231
+1424 1425 1074
+1029 1426 886
+1427 871 1428
+1429 1430 384
+1312 124 13
+1431 451 1432
+619 727 1433
+1434 1435 1436
+1437 1438 1439
+1440 971 1441
+1442 1443 1444
+1445 1446 782
+298 1394 1447
+1282 1448 1449
+559 1450 712
+1451 1452 1388
+1453 1454 1083
+1455 1401 1456
+1457 1458 1459
+1460 480 536
+1461 388 1462
+1463 1464 1465
+1466 1467 1468
+29 962 1463
+694 1469 1286
+1457 858 996
+986 1470 385
+1471 1472 1473
+1021 532 1188
+400 1468 1474
+1275 1475 1476
+1477 1095 1478
+785 1479 972
+1287 1082 1480
+1420 1481 615
+765 1482 1483
+1114 335 494
+846 1226 1484
+1408 1485 1486
+177 488 1487
+1488 747 1489
+1320 1490 1164
+1491 1492 1493
+1494 1495 985
+209 1496 233
+1497 1026 1498
+317 1499 1500
+1501 1294 511
+1319 723 349
+779 1502 505
+1499 867 1314
+1378 1503 1504
+1184 1505 1506
+1507 1182 1508
+1365 1509 292
+1510 263 1002
+143 1511 830
+1512 113 1093
+1513 1514 247
+671 817 1515
+1448 1516 1517
+11 336 982
+1518 1519 1520
+1447 150 228
+334 10 1521
+1429 1214 1522
+370 1491 1523
+1524 1525 1526
+1527 1528 1356
+1529 286 1530
+836 1197 1350
+668 1531 1532
+882 1254 1198
+1533 1278 1512
+1355 1534 1324
+1535 259 25
+1536 431 1537
+643 1538 1539
+1019 321 1540
+1541 1513 1542
+1124 1543 1544
+1545 921 1406
+1477 547 402
+1546 1547 49
+685 1548 1549
+1338 1482 1550
+582 509 1551
+1552 766 733
+1553 1215 54
+1554 518 1555
+144 944 925
+1556 1557 1558
+1559 1560 1561
+1465 1402 1343
+1562 1563 339
+862 1564 1346
+356 1409 1321
+1478 1565 1566
+36 1567 1141
+1290 1568 1569
+1570 1326 1336
+1571 1572 1103
+1387 1573 1559
+1574 1575 636
+51 1576 1467
+229 1181 1577
+1566 481 1186
+1578 1579 1580
+1257 1100 1581
+1582 797 1583
+1479 856 139
+1584 973 1585
+1586 994 1532
+1246 1587 1588
+1589 1590 1591
+1592 1530 698
+1593 1594 1495
+815 1004 941
+23 931 1595
+1596 1597 224
+1598 1599 1600
+1554 1601 1602
+879 1603 1604
+1605 1232 1606
+1607 1079 1165
+1608 1575 645
+103 1609 1610
+1505 436 1611
+1486 1612 454
+1613 99 426
+1614 1615 1616
+1361 1617 1618
+1619 301 1578
+1620 920 1235
+1621 1397 1322
+465 1337 530
+133 1418 1622
+1412 1089 1623
+585 1624 1190
+1608 1625 1626
+1627 1133 1526
+1208 561 440
+567 1628 602
+1629 146 467
+1630 537 1570
+1631 1225 1632
+33 1250 341
+1633 864 1634
+71 1635 1636
+1637 587 1075
+1638 739 1535
+1639 1640 1641
+1642 1643 1405
+1644 1645 1283
+1247 1586 736
+1646 501 1647
+1648 1649 1650
+1645 47 589
+1651 1652 1653
+1603 1654 1655
+1656 1317 1636
+1657 1658 1548
+1659 66 1660
+624 800 1661
+1662 581 868
+1663 374 1664
+1665 746 1666
+1667 1668 1669
+904 1670 16
+1671 933 640
+154 1672 1673
+1594 1674 1675
+1676 295 1677
+448 1224 663
+1678 647 673
+1304 1679 198
+1680 1681 1682
+1315 161 1683
+1684 1685 870
+844 1360 1686
+1146 1687 775
+250 318 1601
+414 1249 1688
+674 69 1689
+577 1416 1245
+1690 1000 1015
+1691 1041 1692
+1693 220 1694
+1389 1695 1696
+1697 1698 513
+1699 1700 1701
+1210 1295 1702
+300 279 857
+1534 1703 1704
+1705 1309 1573
+831 804 1386
+954 1637 1706
+1707 167 1708
+1260 1709 1612
+1710 1711 1483
+274 1487 1712
+363 406 706
+743 1713 811
+1714 1334 1340
+1715 1379 1716
+372 588 953
+1717 1718 690
+1719 1720 1721
+1722 661 1042
+1723 603 1724
+1722 1725 490
+207 1537 1712
+551 1726 1307
+932 179 1353
+1392 1529 1688
+1424 45 188
+387 121 1727
+1504 1072 1178
+1728 1729 1651
+667 1364 284
+261 1730 1731
+1006 271 242
+717 1710 1732
+1733 1692 1734
+1574 216 654
+1138 1459 1116
+1735 1362 1736
+199 1431 1238
+649 1223 1305
+1737 98 819
+1738 1739 1740
+1110 1741 1591
+1289 1742 1743
+1102 1369 1744
+1745 1697 1746
+591 885 1622
+1747 1087 96
+1466 1748 1546
+1749 1750 987
+504 1751 1752
+1195 1753 842
+478 1038 1059
+1754 507 1654
+1755 1756 876
+1757 1758 1759
+1760 1761 1261
+1762 519 682
+872 1426 1046
+328 1763 1425
+1739 1580 1764
+1765 1702 1766
+1055 1767 666
+1768 293 1769
+614 786 1770
+1661 1771 1490
+1772 1773 1003
+721 1774 1605
+1432 1775 701
+1470 1776 211
+1037 1642 1051
+1618 1777 1633
+642 1778 1779
+1780 323 1542
+1407 1781 185
+1782 975 837
+1481 1634 1708
+1099 1160 1507
+19 1729 1464
+1783 1685 1476
+249 78 1784
+1045 949 1785
+1786 1610 1787
+1788 1626 375
+1789 1619 1766
+1790 142 1032
+767 1791 1149
+1689 1501 1792
+1143 1793 1
+1794 515 1311
+1306 850 913
+1795 1451 1561
+1620 1266 345
+527 897 1796
+1797 1798 153
+1799 1800 1801
+1802 1803 1543
+1129 1221 703
+1497 1804 105
+757 1805 1169
+226 849 632
+1806 1120 1480
+472 805 1511
+1595 1672 270
+592 1122 1274
+517 1606 238
+1518 1807 1667
+776 1217 1808
+1652 1809 1101
+1792 777 1106
+1058 991 1555
+1331 1810 790
+629 1811 1812
+1793 1212 1813
+1774 664 1756
+1814 1196 62
+1815 470 1790
+1765 1738 980
+1816 289 493
+1288 1817 1297
+83 1007 1151
+423 137 333
+1449 1202 1557
+1818 381 1607
+1644 1556 1819
+1734 1679 1523
+1366 1820 1509
+1061 427 1821
+1822 1823 1824
+812 1825 1826
+79 1827 1828
+1035 1758 678
+1704 1829 110
+1728 1830 1831
+1832 1583 1270
+1372 1735 1833
+314 1834 840
+1016 1730 1835
+1836 558 1837
+908 1056 1838
+1839 1840 1332
+1097 252 1351
+852 1572 362
+1841 446 1587
+1842 958 326
+1843 468 230
+1081 1222 1806
+1844 187 1845
+1011 1381 1846
+1500 728 1847
+893 1801 1611
+1517 1427 550
+1848 1741 705
+1123 1323 1849
+1836 1804 1598
+1434 1850 1851
+368 1220 1454
+1374 1417 676
+205 1852 1823
+1853 898 1376
+439 1280 58
+311 1854 1502
+1855 1703 535
+1856 1751 1857
+18 508 450
+500 241 1858
+827 1840 993
+1743 1444 1219
+1859 621 1442
+1161 1073 1860
+1127 1084 462
+1861 1458 1136
+1718 1375 260
+725 1859 1742
+1862 344 1863
+1624 1781 358
+1864 895 1865
+1522 1866 459
+1677 1867 1787
+1868 1666 1869
+1277 1870 114
+1203 1705 803
+243 875 1767
+1137 1579 859
+1339 611 101
+1871 1335 1872
+1873 1874 1496
+1635 1720 1875
+14 87 1876
+1828 633 1877
+1113 1878 623
+1879 1494 1545
+126 1436 85
+172 1880 1829
+1881 1723 719
+1560 951 1691
+1813 1822 1415
+1740 1882 428
+1796 1883 1229
+1884 53 510
+1885 253 1886
+1887 1888 553
+1889 1890 569
+1891 1892 497
+791 1868 355
+1228 1008 1893
+106 1707 608
+1067 1894 974
+1761 130 1895
+474 1896 1897
+910 1898 731
+1899 15 1128
+1441 1145 1760
+1370 116 316
+1892 1439 1797
+1488 1239 700
+576 1764 1139
+1359 268 1668
+1900 34 1383
+1726 1428 1783
+1696 1901 1782
+651 1664 1715
+978 1800 1860
+1342 1902 538
+492 1903 524
+1904 1199 1564
+46 1088 1400
+1905 1259 1906
+1907 1908 1450
+379 1550 55
+1847 683 1602
+342 760 1453
+1025 617 1909
+1910 1788 1663
+1565 1854 714
+1263 354 1911
+1027 843 1832
+380 899 1285
+1443 1300 1044
+1905 1430 1299
+1750 1435 922
+262 475 1912
+748 1641 1562
+1179 1763 934
+1882 1878 901
+1913 1492 955
+1866 1469 1471
+1899 1207 291
+1747 1078 1456
+1009 1883 1713
+1914 1915 696
+969 1589 1830
+1048 1333 1886
+1871 1916 1630
+483 773 1917
+1649 1736 1419
+1455 1918 1919
+1920 479 1846
+1549 1125 948
+80 1569 1524
+1404 1094 1052
+1921 1604 1922
+1923 774 822
+763 1924 1423
+693 1341 1244
+1357 907 959
+715 1925 1926
+1927 555 65
+637 1910 650
+1242 601 1928
+1617 1363 967
+1174 1862 352
+1150 1065 1753
+1929 1930 1807
+1632 1861 183
+889 1876 1391
+710 1931 689
+1385 784 1665
+1031 1234 1870
+1932 1833 1648
+1329 1597 1695
+1269 1933 1028
+1699 737 1681
+669 1839 1158
+1778 595 894
+926 397 441
+740 1398 708
+1777 1653 865
+1510 1934 1835
+1779 1935 1908
+1936 627 1022
+404 1937 206
+799 68 600
+1265 1885 1271
+1938 1367 1888
+408 1068 236
+1276 1399 1104
+1939 232 1725
+1308 1475 952
+1721 1940 1856
+1927 1941 1942
+1330 1414 1810
+768 1173 981
+1943 267 1816
+320 1818 935
+1646 1924 1880
+1784 1944 1780
+163 231 145
+1945 1413 754
+401 1946 1348
+100 839 1947
+315 102 1018
+376 992 416
+1948 502 171
+76 824 273
+1506 977 1745
+1809 1347 1445
+1727 1714 147
+1541 873 1898
+1798 1873 1776
+1373 1596 1111
+1629 332 330
+1949 213 1922
+652 1950 1820
+718 1152 742
+1875 1951 1132
+1166 1452 1913
+1154 726 1296
+1811 1952 17
+1795 1733 1493
+1531 283 1682
+1553 1700 1302
+40 807 1749
+1844 392 1485
+1690 1757 1657
+1953 210 1954
+1934 1955 679
+1678 625 1717
+863 861 367
+1552 1956 1791
+1957 1768 1958
+254 1267 1411
+1959 1960 1043
+484 1948 1189
+963 764 1422
+1292 1961 115
+477 990 1039
+1472 1915 95
+1935 435 713
+1960 1954 1939
+1863 26 1962
+1963 1955 1942
+855 221 1647
+1902 1964 751
+1850 125 1933
+1615 1965 937
+3 1966 1144
+1962 258 413
+1687 970 141
+914 149 1967
+866 1893 74
+1474 1968 835
+82 22 1957
+1969 1527 1842
+1884 1508 1701
+1786 219 1108
+1558 471 1852
+1539 1821 1737
+578 1200 1621
+1525 1941 64
+1440 200 1970
+1724 911 1711
+1639 938 1693
+1971 1972 1433
+672 1614 1216
+1437 1973 12
+943 463 1237
+1030 1919 1047
+1920 772 1327
+1754 881 1775
+7 528 175
+1928 1881 1005
+445 306 1827
+1613 1253 1974
+1092 1864 1519
+1473 1966 626
+1975 1964 1256
+638 184 1135
+1241 1972 1889
+1551 1952 1976
+1752 1977 780
+1953 1156 386
+322 1187 874
+1170 1258 485
+1273 1684 1673
+132 1034 552
+1789 1817 1958
+1956 1918 1077
+1191 1978 1544
+548 1185 1746
+1255 1227 1912
+554 883 1979
+1377 275 433
+1563 1980 294
+1887 1033 1981
+1358 1582 1063
+542 37 1390
+1040 1849 109
+108 1938 1981
+1982 325 1968
+1857 1643 989
+1656 1131 1825
+257 1631 1716
+1503 432 976
+1983 1984 1985
+1709 1298 1936
+90 1279 657
+1066 1627 1659
+1973 1891 1986
+1769 1950 302
+1593 1879 1967
+464 1987 1872
+1272 189 346
+1951 828 378
+1694 1988 1640
+75 1520 1865
+1911 1895 1264
+1814 1460 1354
+801 1107 1808
+1675 918 151
+1989 1142 1547
+1930 1577 1686
+1931 1588 662
+1841 1824 1815
+1251 1990 32
+495 1521 1991
+1514 909 1628
+1992 1421 1770
+1867 1980 1988
+1874 1438 984
+1794 1975 1581
+1674 1395 917
+1268 599 1851
+1538 1907 1600
+1755 896 1368
+1671 1853 1177
+383 411 1204
+1371 1590 968
+1118 382 1906
+1993 1894 1660
+1926 1609 1837
+1384 580 1976
+1845 1904 438
+1929 1316 1843
+699 1090 157
+1706 1163 1167
+1916 1987 1855
+350 1119 998
+792 456 1994
+1848 1403 1831
+945 832 1168
+753 1625 1773
+1995 1970 1240
+420 1959 1069
+496 1991 1986
+1540 1965 1515
+204 923 1819
+1568 1218 1963
+1013 1805 1516
+1945 1772 1484
+1812 1670 1996
+523 1669 1943
+1352 1410 1393
+1130 377 1826
+1662 1949 1655
+1076 1914 1148
+838 1993 1979
+659 489 265
+607 1748 360
+1147 1923 131
+1638 357 1396
+1834 1961 1683
+566 1461 212
+1650 1992 1997
+1325 1858 1054
+1971 1998 1890
+1999 1380 1977
+1983 1759 1036
+1984 1318 1802
+425 794 1990
+140 503 1917
+1592 1974 813
+1937 1698 1536
+1676 1925 313
+1382 1896 1192
+1585 1901 1932
+1900 1803 1944
+1999 1940 6
+1658 1985 1126
+50 2000 1528
+1995 1489 783
+1117 235 1909
+1162 1799 1623
+1762 1719 988
+1462 880 1921
+1498 762 1599
+1946 834 118
+1172 2001 1153
+563 1998 2001
+1206 60 491
+1576 1969 1982
+1262 905 449
+1996 1209 1869
+1994 1446 222
+1571 927 407
+1616 1771 802
+1024 720 1744
+1567 1877 2000
+1012 364 1112
+1071 1732 1947
+1680 818 1301
+606 1897 1989
+1023 1838 665
+1533 1903 1345
+1584 1997 788
+1731 1785 1978
+1159 1243 1183
diff --git a/test/boolean/surfaces/horse6.gts b/test/boolean/surfaces/horse6.gts
new file mode 100644
index 0000000..f90831f
--- /dev/null
+++ b/test/boolean/surfaces/horse6.gts
@@ -0,0 +1,4005 @@
+669 2001 1334 GtsSurface GtsFace GtsEdge GtsVertex
+0.02962649335 -0.06641720658 -0.05375212223
+0.03335170537 -0.06107709776 -0.04461499438
+0.03016465976 -0.06494629927 -0.05644835678
+-0.007085127866 0.03564635767 -0.07638334676
+-0.009173034367 0.04266160542 -0.07630177668
+-0.008100441376 0.03778387049 -0.07154616339
+0.02535142102 0.038331004 -0.004951347501
+0.02637504126 0.03427224666 -0.01436069547
+0.02254067071 0.04149480505 -0.002956423267
+-0.004536771511 -0.09171935376 -0.0596337959
+-0.005587896129 -0.08426498952 -0.05186155545
+-0.007297024687 -0.08558963229 -0.05685900539
+-0.005805645546 -0.003626100812 -0.009630271776
+-0.009675965322 -0.007598849321 -0.004054405596
+-0.007811588953 0.003877114822 -0.001241527921
+0.03040737694 -0.03015238108 -0.003727831953
+0.03832709098 -0.03802134781 -0.0008496010631
+0.03405714066 -0.03939595292 -0.006695002592
+-0.001406711205 0.002753603588 0.02238336614
+-1.129644064e-05 0.009627589021 0.02569459522
+-0.005354685152 0.007333403608 0.01769795984
+-0.01189837632 0.06800247822 0.03881281895
+-0.01700467748 0.06435674695 0.04119157374
+-0.008099068313 0.06391979197 0.04115649045
+-0.009376257181 0.08251457779 0.04163053179
+-0.01218401615 0.07373390327 0.03844031124
+-0.01647273404 0.08032602946 0.03979616203
+0.002309943555 0.03222442803 -0.06183483548
+-0.0002231259948 0.02975147719 -0.06316127468
+0.0002298124264 0.03008275703 -0.05263038667
+0.03716994439 -0.03005093787 0.01924021205
+0.03980719373 -0.03592123776 0.02018312064
+0.03498726073 -0.02617335596 0.02506663539
+0.03209841854 0.04093247244 0.006165539005
+0.03228020953 0.03663471983 0.001771070218
+0.02942845422 0.03815241274 -0.003043695099
+-0.008924081005 -0.06483299 -0.01934224052
+-0.006699201995 -0.05844444203 -0.01313774953
+-0.008881936659 -0.06046185748 -0.007184726425
+0.00799191833 0.02685028608 -0.01690064788
+0.005842128849 0.03256739097 -0.01503583978
+0.004528814147 0.02623025041 -0.01780551176
+0.0368034213 -0.05478233823 -0.02365851981
+0.03445571373 -0.05147346958 -0.02485289334
+0.03928833575 -0.05042546035 -0.01658308968
+0.02830806584 -0.06727415617 -0.07485495062
+0.03863759719 -0.05898967523 -0.07447284379
+0.02767455511 -0.06096744022 -0.07505969831
+-0.009088088463 -0.06659303614 -0.002537607506
+-0.00671535347 -0.06804113113 0.01295355231
+-0.01058614586 -0.06438457337 0.009244616703
+0.007768569793 0.02140696444 0.03914973109
+0.004684134042 0.02528802916 0.03737829518
+0.0009014128763 0.02189278717 0.03311258235
+0.003506668826 0.006572697301 -0.01632559698
+0.006787592086 0.01432461261 -0.01761928153
+0.003804577565 0.01605629848 -0.0138074565
+-0.009082795257 0.04093537448 0.007619646928
+-0.009230928649 0.03646217029 -3.99780785e-05
+-0.004554704059 0.04261891496 -0.0020273806
+0.002781248518 0.03142260764 0.03540721119
+-0.002920902919 0.02952287296 0.03115692761
+0.001369020202 0.03568831948 0.03226640654
+-0.009840414345 -0.06724964738 -0.01545216991
+-0.005449690441 -0.07289533929 -0.0278541801
+0.03471431876 -0.04206998787 -0.009058191316
+0.02996229802 0.04317899348 0.01885127101
+0.0313589558 0.03945887273 0.02116821636
+0.03346637719 0.03911113342 0.01113532869
+-0.002148931364 0.04686111893 -0.07646155409
+0.002563878615 0.04219996445 -0.0759461022
+-0.001456943849 0.0391326167 -0.0653246089
+0.004422508056 0.0444206985 0.06024319101
+-0.0001381988126 0.05077434362 0.06274313157
+-0.002803981347 0.04978285588 0.05599314099
+0.007372340201 0.04348168683 0.0009767514566
+0.01779622969 0.04555267492 0.002715749059
+0.01246962678 0.04730214654 0.01228101422
+-0.01914840392 0.06984274566 0.07583277918
+-0.02066652781 0.06615912544 0.0740179218
+-0.015580526 0.07237406407 0.07110934033
+0.01673604574 0.05296128209 0.02799217386
+0.007076024978 0.0616052387 0.03798058455
+0.01208255361 0.05201400555 0.02247903428
+-0.005202484873 0.03905212201 -0.06659100095
+-0.002761358513 0.03563921568 -0.053334567
+0.02871432373 0.01115935953 0.02218121229
+0.02887055394 0.02348015699 0.02777713473
+0.03211056812 0.01217783457 0.01599352678
+-0.003268191417 0.02808095794 -0.05530371466
+-0.004768429904 0.03301240741 -0.05682792023
+-0.005269832081 0.03041980394 -0.05020398004
+-0.009920703037 -0.05856132105 0.02078853133
+-0.01258111517 -0.06036211575 0.005621857649
+-0.01129505789 -0.05117947714 0.02014639057
+0.008947017658 -0.05390034587 -0.005404032848
+-0.002812812154 -0.0495940622 -0.005055962984
+0.004182746428 -0.05616860907 -0.008282149861
+0.039901086 -0.04474400169 -0.002162081859
+-0.02857300968 0.07398478501 0.05112898863
+-0.03221046355 0.08044632361 0.05103597276
+-0.037368047 0.08124797562 0.04326686079
+-0.01176246326 0.0272912813 0.00181310195
+-0.008852027889 0.02332058261 0.01714778567
+-0.01111655274 0.03096097789 0.005495534657
+-0.004930090474 -0.06275948489 0.0254747509
+0.001386656671 -0.06516825208 0.02915183071
+0.0008411995687 -0.0572979729 0.03314940991
+0.02910555332 0.02795474709 -0.02108275448
+0.02937411784 0.02528148559 -0.02472762018
+0.02898726479 0.02593885071 -0.03466121606
+0.0200483424 0.0173672083 -0.01887227514
+0.01529007503 0.005999184686 -0.01844084832
+0.01855153173 0.02510600723 -0.01789194963
+0.0308594713 0.01771928484 -0.04856782514
+0.03406450107 0.01411485799 -0.06575122704
+0.03053075934 0.01669582781 -0.06497414728
+-0.005642941021 -0.07825186394 -0.07223775214
+-0.004601143901 -0.08184543482 -0.06469302326
+-0.008158713906 -0.0814358753 -0.07113496806
+0.02693919448 0.01503905874 -0.06642508428
+0.03082825422 0.02288239522 -0.0747792263
+0.0348485623 0.02539411196 -0.006000407659
+0.03518946641 0.03211052072 -0.001971335973
+0.03294316716 0.02428600962 -0.01060207306
+-0.006910022961 0.04279437698 -0.07134216778
+-0.01391429131 0.07857736702 0.07025533526
+-0.0233492817 0.07295943983 0.06392457642
+-0.0230027126 0.0796825737 0.06135732864
+-0.01177939922 0.03170550973 -0.002756488467
+0.03474764188 -0.06888999765 0.01430858835
+0.03034743528 -0.07102275673 0.01163587617
+0.03302717636 -0.06941638174 0.01982813821
+0.003720294257 -0.04180070946 -0.002430702563
+0.002336538457 -0.03664092815 -0.003564054212
+-0.004447423494 -0.0385896076 0.0002912090823
+0.02906004092 -0.06506824105 -0.06619611312
+0.03012660078 -0.07243252037 -0.06048750405
+0.02809075927 -0.06822093777 -0.06005173396
+-0.005650163315 -0.07257297394 -0.02353907927
+-0.002313980992 -0.07504178891 -0.02257502067
+-0.003961829708 -0.07871912192 -0.0281974942
+-0.01365214824 0.06472117553 0.06687649643
+-0.01395702307 0.06493398409 0.06194418608
+-0.00187287415 0.07648865146 0.06195552134
+-0.0007703703722 0.07452971487 0.05641658826
+0.003987788381 0.07210753421 0.05870572975
+0.02893785989 0.04571963901 0.01298997539
+0.0008615523349 0.04513056926 0.002195005773
+-0.004915778348 0.04488374695 0.006995527292
+-0.006193621728 0.02897202509 -0.02199593164
+-0.009088929065 0.03245039722 -0.0143562763
+-0.009339019758 0.02820489794 -0.01160492972
+0.03388204993 0.008238938556 -0.05888287115
+0.02993114876 0.006121244768 -0.0598082949
+0.02916878069 0.01231213994 -0.04517423152
+-0.01140240561 -0.05302208175 0.01325014492
+-0.009991483685 -0.04221314323 0.02285702339
+0.02204879529 -0.05208759604 0.03657286724
+0.0105735708 -0.05438089912 0.03600333683
+0.01337854774 -0.04478313393 0.03739231078
+0.03358851548 -0.06056440171 -0.02261954573
+0.03287484171 -0.06627423351 -0.02506244305
+0.03555796707 -0.06295597011 -0.03148568706
+0.03055716745 -0.06752781609 0.003518700777
+0.02491404154 -0.06004574476 -0.005079100384
+0.02542506722 -0.07004344366 0.0106184576
+0.04007380336 -0.06016162866 0.008857087601
+0.04217730909 -0.05544734142 0.01150120914
+0.04030558614 -0.06054344024 0.01674311978
+0.03420842037 0.01383426301 -0.06039505323
+-0.002383355077 0.0584033014 0.03885017414
+-0.002963422497 0.0646026035 0.03914591659
+-0.005144885091 0.06159091928 0.04104902099
+-0.01401768875 0.0617341441 0.04790375928
+-0.02247065548 0.06647536163 0.04844900731
+0.004567399436 0.06995600928 0.06469268297
+-0.004930396719 0.07716889533 0.06743878225
+-0.01263710116 0.07311801984 0.0711518866
+-0.006347549286 0.07076257562 0.07207679617
+-0.008025276612 0.07797936939 0.07007158927
+-0.004037263641 0.03791370322 -0.007084879162
+-0.006915446453 0.03611493678 -0.01205017226
+0.03376825917 -0.06800502046 -0.03993364734
+0.03550532273 -0.06289301581 -0.04451673049
+-0.01978470067 0.07459022271 0.03922459204
+-0.02369599598 0.07095749149 0.04108053623
+0.007834297039 -0.03802775544 0.03648600479
+0.00451013359 -0.04726475826 0.03617031616
+-0.01008563318 0.03062096097 0.01720925685
+-0.0111047131 0.03471950873 0.009170491974
+-0.007801881425 0.03558098282 0.02156101572
+0.03628493799 -0.06643627725 -0.06571495304
+0.03778768281 -0.06680935939 -0.07045711349
+-0.009800128788 -0.01979102603 -0.003830649372
+-0.008123705052 -0.01295940229 -0.008012197061
+-0.01177248002 -0.01407353483 -0.00026892976
+3.650324692e-05 0.03454312443 -0.05378598861
+0.001334051395 0.03635208526 -0.05916496664
+-0.004494396457 0.02123036702 -0.01233363819
+-0.003960910338 0.02707843897 -0.02147364593
+-0.004658707892 0.02285045891 -0.01654024562
+0.01065297341 -0.02927999043 -0.01261695593
+0.02197334405 -0.01938320126 -0.01518498761
+0.01009674155 -0.02000123198 -0.01669226004
+-0.03784903899 0.09182293002 0.03547962608
+-0.04282505732 0.08763019624 0.03843958666
+-0.03780228863 0.09165533886 0.04150263512
+0.009732643234 0.03864677157 0.05758488409
+0.007260307242 0.03220331045 0.04897934166
+-0.003251023438 -0.0447552923 0.03259379591
+-0.005284672865 -0.05559800646 0.02863956947
+0.03854807205 -0.0182611157 -0.0007614023309
+0.02907343063 -0.02405004051 -0.008689663897
+0.03359433352 -0.06833625846 -0.06725069897
+0.03794723301 -0.07030887579 -0.05881938525
+-0.01399840703 0.08714074202 0.04634697262
+-0.01484911168 0.08706952227 0.05273427957
+-0.02733040503 0.0878704236 0.04692254306
+0.03269788383 0.02775015327 -0.01366796978
+-0.01128429909 -0.02485031801 0.003081221163
+-0.0129859567 -0.01591968388 0.007913952437
+0.02542780431 0.01909055879 0.03106341807
+-0.02635914018 0.07915309019 0.03807716572
+-0.02491705167 0.08466753188 0.03876460009
+-0.03217161864 0.09147933287 0.03789558468
+-0.03218712753 0.08911622586 0.0341413841
+0.02063172974 -0.06160672797 0.03358912586
+0.009489627049 -0.06099083018 0.03356238062
+0.01595837083 -0.06792313981 0.02903236206
+-0.02758969493 0.07128663335 0.04509322135
+2.838504548e-05 0.01228287617 -0.007247194823
+-0.002237714427 0.01601225063 -0.005054624448
+-0.004998376443 0.01270034048 0.001089531139
+-0.0242325673 0.08642920773 0.05259896161
+-0.01477728238 0.08898762418 0.05976252503
+-0.008106716999 0.03959898948 0.01814619648
+-0.00183701391 0.04442405283 0.01992884363
+-0.002643194393 0.04094815494 0.02455225652
+-0.0002691989922 0.03518768253 -0.07654061203
+-0.005465735125 0.03343264514 -0.07113263805
+-0.003379478842 0.05727409694 0.04624414223
+0.001656723856 0.04848782548 0.02429126544
+0.001611458581 -0.08067259011 -0.07140745427
+0.001953108693 -0.0870777528 -0.07110689566
+-0.001232488378 -0.08210912741 -0.06524027641
+0.01999275189 0.04838758748 0.01771313046
+0.02238698184 0.04734407942 0.02228583168
+0.001165015411 0.02523473928 -0.03957528094
+0.003859985386 0.030503596 -0.03796539631
+3.053135066e-06 0.02298255619 -0.02714101308
+0.00371580233 0.02819407126 -0.02732040999
+0.001684703402 0.02229032018 -0.01852954358
+0.02477637757 0.004354718713 0.02561298272
+0.02748297406 -0.01004226619 0.02769893061
+0.02149635857 0.003501056099 0.02754019633
+-0.005333140649 0.06906533641 0.04005591241
+0.002235786241 0.0684583935 0.04597748357
+0.002775716032 0.06317505905 0.03893341964
+0.0160501704 0.003030806358 0.02936801766
+0.01854084239 -0.002603163604 0.02863700407
+-0.01957786973 0.06858231372 0.0648466221
+-0.02022875158 0.06525639334 0.06904066694
+-0.007202391548 0.02872365639 -0.04064738284
+-0.005084087819 0.03298719044 -0.0393757119
+-0.004811703586 0.03067656454 -0.02964777687
+0.01694610211 -0.03267611406 -0.009547622002
+0.02611754153 -0.03173703844 -0.006920989989
+0.02614493406 -0.03555648278 -0.007780372509
+0.03633285438 -0.05791195421 0.02922635121
+0.02934076775 -0.06684164846 0.02767621927
+0.02893575 -0.0584011768 0.03346739941
+-0.004604250904 0.05293397731 0.05217938164
+-0.01083062954 0.06358070346 0.05593217573
+-0.03564270472 0.08936314535 0.0394096548
+0.0395461749 -0.02033376398 0.01689739857
+0.03741999645 -0.01167648657 0.01925222409
+0.0393980472 -0.009840464917 0.01233370548
+0.02169564295 0.02095299525 -0.02990126581
+0.02237646084 0.0252829334 -0.02853123328
+-0.01044045315 -0.01220798807 0.01559637819
+-0.009958264691 -0.003240776769 0.01322719602
+0.02874224069 -0.06043928335 -0.01464576601
+0.02885606501 -0.06561053536 -0.02705401515
+0.001232619025 -0.07343124511 -0.0137606811
+0.003231243289 -0.07112104785 -0.01418805167
+0.004232990494 -0.06975664315 -0.009904810305
+-0.00486873724 0.03368474405 -0.02253258244
+0.02054443199 0.02928264463 -0.0166495365
+0.01178095237 0.02162485764 -0.01766781495
+0.002149090871 0.01640352192 -0.009391249327
+0.004332741479 0.05150400472 0.02030183153
+0.0004055637994 0.06048918322 0.03581186398
+0.02632023335 0.01369241067 -0.05461711851
+0.02617082923 0.01742829908 -0.04948899405
+0.02514402885 0.01494986558 -0.04392418522
+0.02790811512 0.009448615656 -0.05445451174
+0.03599465039 0.01623447891 -0.06930745811
+0.001928368353 -0.08385545643 -0.05860391459
+0.0007248613389 -0.0855319873 -0.06623703604
+-0.004903729313 -0.08437217664 -0.03488469304
+-0.00747775439 -0.07956851802 -0.03375280404
+-0.002370371413 -0.08901025047 -0.04957606007
+-0.001854499151 0.03630830475 -0.01720664645
+-0.003023223782 0.03689876005 -0.01428045114
+0.03484461278 -0.07041376736 -0.05216786003
+0.03431450721 -0.07333197893 -0.06052955731
+-0.003436630754 0.02305290178 -0.02816454175
+-0.004643444165 0.02572492431 -0.03396760095
+-0.03953644856 0.0878015 0.03347939611
+-0.03490372235 0.08345415302 0.0319104425
+0.02708001608 0.01518640862 -0.02805826278
+0.02296206176 0.01671309902 -0.02826889086
+0.02351755587 0.01405402613 -0.03579356187
+0.03670792269 -0.05755250953 -0.02221128778
+0.03364189406 0.00667071772 0.01264755433
+0.03728356288 -0.002519490705 0.006673115045
+0.004803071068 -0.05657736202 -0.00624039143
+-0.002201104622 -0.06138291913 -0.01336018198
+-0.0001397320446 -0.06436613319 -0.01783643742
+-0.008292380674 -0.05433978831 -0.006033333384
+-0.01127767867 -0.06361510143 -0.003449801907
+0.02775605679 0.044457884 0.003041643892
+-0.007670255173 -0.06821987553 -0.007885953674
+-0.008066661468 -0.07056682418 -0.01423482642
+0.01574729827 -0.0438970843 -0.00236719304
+0.02710872598 -0.04428706106 -0.003945715263
+0.01764931377 -0.04035018275 -0.00280366738
+-0.005546692799 0.01526842926 0.002527295982
+-0.007410334392 0.01930575954 -0.006408775776
+-0.02836972014 0.07546960952 0.05724751004
+0.002048361976 0.0384456956 0.04646301628
+0.002260233483 -0.01489908193 -0.01624085139
+0.004642121386 -0.001390260362 -0.01845204011
+-0.002087084639 -0.007981395122 -0.01432260928
+2.486208878e-06 -0.07848470699 -0.03904760635
+0.002249396081 -0.07553035366 -0.03267282679
+-0.0002004852621 -0.06977706592 -0.02571841209
+0.01209028559 0.04935565948 0.06303955069
+0.01351351406 0.03795583589 0.0557550827
+0.01484957073 0.04125258376 0.05596637533
+-0.009205072944 0.08364869889 0.06652972477
+-0.005528705413 0.08038648212 0.06084279874
+-0.007373362028 0.08594032103 0.07094837851
+0.02912743072 -0.0432888465 -0.00950359489
+-0.002391239919 -0.07540734893 -0.01631687422
+0.0009200957863 -0.07252032514 -0.008175284989
+0.02276330509 0.02125389017 -0.03878583309
+0.02463089872 0.02432008656 -0.03652127371
+0.0363259308 -0.04348679263 0.03222553575
+0.03062908426 -0.04694012281 0.03575588741
+0.02980493714 -0.03487685828 0.03569007639
+-0.005904921947 -0.08527671917 -0.06466071736
+0.02842053044 -0.04709943398 -0.01318200474
+0.02539830185 -0.05124026618 -0.004420045871
+-0.004278999891 -0.07096265984 -0.02827767819
+-0.003951698007 -0.08089973237 -0.04879939623
+0.007695496251 0.0477421018 0.06466960439
+0.02063477557 0.04182151577 -0.007423344504
+-0.0003806743401 0.0336985005 -0.06598962272
+0.003118413566 -0.07216026131 -0.02278780341
+0.003800820262 -0.06906615479 -0.01870720802
+0.01491891397 0.02108046035 0.04064579087
+0.01137802593 0.0194166479 0.03957014773
+0.003427658456 0.04801976596 0.01399046933
+0.02257575744 -0.03562010631 0.03710042754
+0.001898213149 -0.06241057522 -0.003908033091
+-0.002121382733 -0.05986972801 -0.004787799809
+0.003614300956 -0.05867827093 -0.003724138884
+0.03768463927 -0.06636351823 -0.0582302456
+0.03632467085 -0.06500388715 -0.05143360138
+-0.007802955599 0.0622621514 0.04773787304
+0.031366571 0.01638469475 -0.0424139127
+0.0281591643 0.01329487936 -0.03581532057
+0.01511922717 -0.07131458197 0.01896426176
+0.02633927088 -0.07175808354 0.01595602098
+0.0252868685 0.0205595257 -0.0756060991
+0.03432955517 0.02061503566 -0.07509283024
+0.01114566337 0.002452825351 -0.0189631103
+4.216264003e-05 -0.06239066165 -0.01755679235
+0.02662037451 0.0128331273 -0.04325455763
+-0.003745565394 -0.0839623205 -0.03135169903
+-0.004615265916 -0.08135572054 -0.02321813181
+-0.01045466918 -0.000838781802 0.007235843675
+-0.006808135417 0.0102528793 0.01012071438
+0.0385279125 -0.03472752123 0.02776378146
+0.03624357937 -0.04656652041 -0.01755100238
+0.002176875164 -0.07981589911 -0.01992365433
+0.0175459281 0.0562577589 0.04012783456
+0.02402770205 0.04461141168 0.0268166256
+-0.02085549003 0.06711975757 0.06119068085
+-0.02688164037 0.07019660655 0.06127785015
+-0.0252392767 0.06717077689 0.05758382128
+-0.003648821003 0.05421163955 0.04604919067
+-0.006432823538 0.06141563121 0.0504325137
+0.03409188565 0.01012708684 -0.07298428284
+0.02693404587 0.01067397942 -0.07605959684
+0.03582166209 0.01517849893 -0.07519236184
+0.01775157172 -0.008968039062 -0.01788617078
+-0.0066383874 0.02789687002 0.02529792784
+0.02451892911 0.003543890639 -0.01258118312
+0.02860889576 -0.007942587906 -0.01241862023
+0.03284842343 -0.00573572018 -0.008116617695
+-0.00420701637 0.01318169426 0.02035685162
+-0.007252350565 0.01814837516 0.01917593968
+-0.005276644166 0.02217310274 0.02483524933
+0.03715347579 -0.05644422613 -0.009048044381
+0.03160833761 -0.06026948452 -0.00843476285
+0.03714697573 -0.06008602984 -0.005950557306
+0.03244783772 -0.07142891455 -0.05349790195
+0.03144701921 -0.06693341806 -0.03620119947
+6.607648773e-05 0.04139450911 -0.007297118402
+-0.009581380469 0.03444434173 -0.005699179837
+-0.01016924937 0.0247760859 -0.009559116582
+0.03708496031 -0.003474162443 0.001054708953
+0.03061900876 0.0133467021 0.002002309256
+0.03203009993 0.0122719363 0.007437237639
+-0.007119833689 0.08387059694 0.05079214763
+0.007365237926 -0.06724293325 0.02937228994
+0.003196416636 -0.07114902211 0.02474457173
+0.03088904705 -0.05786669635 -0.03540575433
+0.03349195092 -0.05630633846 -0.03348465438
+-0.00445985922 0.03497845392 -0.06865973203
+0.02606826381 0.01511735257 -0.0188088438
+0.02840159955 -0.04003688586 -0.005090979071
+0.02333618187 0.009711474743 -0.01259493025
+0.02634804637 0.01449175906 -0.005437967049
+-0.003819231087 -0.03366319073 0.03017149794
+-0.007746377079 -0.0374026414 0.02691084367
+0.0008968501693 0.03530702528 -0.07179526831
+0.0009714533434 0.03703042404 -0.06647131937
+0.03089064656 -0.06050120226 -0.01307657932
+0.03060544353 -0.06659763448 -0.0429516769
+0.007067031694 -0.02104495762 0.03027262223
+0.009379687586 -0.009803777028 0.02879054905
+0.003824087986 -0.007415382276 0.02668055451
+0.02581896795 0.01216517712 0.02653176114
+0.02535099807 -0.01470978538 -0.01470762876
+0.02979778621 -0.05747354326 -0.07283430042
+0.03059346381 -0.06355187697 -0.0652653792
+0.006379866881 -0.07366522334 0.02021739984
+0.01281749976 -0.06966791736 0.02623641938
+0.008245665504 0.03986554838 -0.008369729239
+-0.003094402987 -0.06889178703 0.004887670204
+-0.0004866502088 -0.07383541725 0.00327767356
+-0.003826910892 0.07890845054 0.04285519678
+-0.007911690243 0.07417906142 0.04069141723
+0.03150619377 0.01091674601 -0.06595755273
+-0.03338263951 0.09117640205 0.04225995133
+0.002670335991 0.03376816005 -0.03673883163
+0.02960125006 -0.06318553245 -0.04099272634
+-0.006865202713 0.01645731084 0.01255787163
+-0.009099464301 0.02070544377 0.003923672813
+0.0357828043 0.026274599 0.003598662727
+0.03390075998 0.0196294244 -0.001279798879
+0.04031265639 -0.05660766153 0.002407907755
+0.0360744451 -0.06211049714 0.004534842105
+0.03260151503 0.03338237983 -0.006523976992
+0.03118264969 0.03516871605 -0.01003089707
+-0.01136068348 0.06864122248 0.07064429773
+-0.006901479836 0.06061069469 0.06857057348
+0.01679328243 -0.05562619591 -0.00370951823
+0.01628598726 -0.06223913581 0.001303798037
+0.009116459633 -0.05832062002 -0.003808989204
+-0.007364301239 -0.0655903637 0.01843792326
+-0.00196793248 -0.0924961494 -0.05993592601
+0.0008963181932 0.06568728797 0.07054028896
+0.01040316472 -0.07209156303 0.005458972078
+0.00854142203 -0.07081448448 0.0009911011157
+-0.02369891067 0.08733866181 0.04185304346
+-0.02669541901 0.08488316045 0.05445163764
+-0.01834546333 0.08677225527 0.06096639685
+0.03562533751 -0.05958262208 -0.03641795898
+0.03786372614 -0.05828384459 -0.03027705225
+0.009531395473 -0.01174729879 -0.01879292893
+-0.003540246983 -0.08741634819 -0.0661178097
+-0.003123157572 0.0180818 0.0280930842
+0.008494293556 0.001798585491 0.02879530636
+-0.01469702996 0.08448317854 0.06361696362
+0.03003055915 -0.05644625496 -0.01822557042
+0.02808882416 -0.05700958393 -0.01037585993
+0.02778627434 -0.05772210268 -0.02054866171
+0.03417911788 -0.0312596887 0.002049184095
+0.04103405708 -0.03840871487 0.005148958662
+0.03942781892 -0.03667289771 0.01137860165
+0.03453329986 -0.06495725391 0.02343999802
+0.03604970893 -0.06553730507 0.01514057711
+0.02531780715 0.01492227815 -0.07298663437
+0.02230632439 0.01715666452 -0.03682695676
+0.03841945299 -0.02335509195 0.003086499411
+-0.004947727418 0.02947881842 -0.06376257823
+0.02874998283 0.0236523034 -0.02450281726
+0.0300426303 0.02085370936 -0.01134700257
+0.01478686342 0.05822673578 0.04866955315
+0.01926030889 0.05211090058 0.04170128107
+-0.008729973724 -0.08521804853 -0.07245066659
+-0.007157319253 -0.07673766878 -0.07620159841
+-0.008558961662 -0.08429067105 -0.07612955647
+-0.008923311148 -0.0488093219 0.02527860165
+-0.002559613891 -0.07696783235 -0.07503183334
+0.004849320445 -0.06654081366 0.001597316469
+0.01214652341 -0.06892115598 0.004942074572
+0.02141393735 0.04032770947 0.0349775259
+0.01997359085 0.03817995504 0.04077992363
+0.01775917418 0.05097555095 0.04600427635
+-0.01582497583 0.06802054685 0.07464088641
+-0.004157397876 -0.07691588945 -0.03728019479
+-0.001018853449 -0.08162814825 -0.05050039973
+0.02817520721 0.01827955856 -0.01994709679
+-0.002574990396 0.03420072851 -0.02964704313
+0.001320084259 -0.03473791533 0.03429652713
+0.001777935154 -0.0226111434 0.02817490183
+0.03327873912 -0.01056461005 0.02397173155
+0.03065047123 -0.02269005762 0.02819745661
+0.02870642544 0.01875378799 -0.04929687506
+0.0001922875997 -0.08373275371 -0.04744139233
+0.02154119496 0.03212762987 0.0364752413
+0.01666297493 0.02726410721 0.04306789963
+0.03311971159 -0.03398043155 0.03337575262
+0.009730373954 0.0642806027 0.04998786614
+0.005407980083 0.06523444265 0.04700285823
+-0.006747573494 0.04340968931 0.01183606054
+0.002887557047 -0.03095184247 -0.008725172836
+0.0100429379 -0.03952644137 -0.003466345143
+0.02822367542 -0.04933882536 -0.01920753085
+0.02628485239 -0.05770928736 -0.02765902392
+0.02786365826 -0.05500275066 -0.02916962697
+-0.001669219445 0.04538702267 0.02720611487
+-0.03230859001 0.07813936645 0.03994506261
+-0.04048994453 0.08225886938 0.03671169125
+-0.009868051828 0.08008567713 0.0719260116
+0.0265315378 -0.05926785564 -0.007859116072
+-0.03332074475 0.08453421154 0.0501524775
+-0.03381937335 0.08841933055 0.04617110365
+0.02814850066 0.01205585131 -0.0671371803
+-0.004492723768 -0.0163266252 -0.01144296732
+0.01053163859 -0.03198215045 0.03529929745
+0.01972097157 -0.01973919687 0.03149693119
+0.01048767357 -0.02063130137 0.03129823553
+0.03985961936 -0.05288664573 -0.003213911302
+-0.005624338707 -0.08197296193 -0.04261050798
+0.0006759714639 -0.07365036769 0.0133127436
+0.004212329876 -0.07475205279 0.0119180825
+0.03323506627 -0.0696954875 -0.07480025266
+-0.001579009108 0.02696084562 -0.04952981044
+-0.003312288919 0.02325754164 -0.03921236104
+-0.004147579526 -0.02945824378 -0.005629744723
+0.001253442277 -0.02335747355 -0.01301557741
+0.03911524678 -0.06043209602 0.02292888367
+0.03491775407 0.03295238847 0.005743549755
+0.03351039451 0.03148191133 0.01630992884
+-0.03888012536 0.08242966403 0.04378159402
+-0.001462520407 -0.08315525292 -0.02223603134
+0.02841336148 0.02811863487 0.02765089755
+0.01959305432 0.02002495738 0.03629630459
+-0.003857603844 0.03529443842 0.02770147706
+-0.004193103055 -0.05857007453 -0.00812421203
+0.002987702293 -0.06667477542 -0.007354935051
+0.03062458964 0.0170145161 -0.03471861989
+0.0215023614 -0.003203140851 -0.01664771037
+-0.0069726581 -0.02228900251 -0.007252770267
+0.02877372334 0.01379869097 -0.001824148201
+0.03219097785 0.01710936853 0.003970973929
+-0.001478252966 -0.07066783702 0.01717061126
+0.04090799929 -0.05048766972 0.002477469733
+0.04221058388 -0.04585286067 0.008652735317
+0.04129956782 -0.0441744636 0.0165648413
+0.04173377532 -0.05045311238 0.01690273366
+-0.009654189623 -0.02345030435 0.01726071745
+-0.0004818671806 0.01835426962 -0.01799662106
+0.03125825441 0.003380579928 0.01998651054
+-0.03919248768 0.08479295282 0.03976483444
+0.003520651884 -0.07698137746 -0.03005855642
+0.007973550041 0.01351410662 0.03593835636
+0.03272371506 0.01249381504 -0.0531731552
+0.03734630827 -0.05298459102 0.03031383303
+-0.01118920924 -0.04589732423 -0.0006055461399
+-0.01285895631 -0.05447083728 0.002553862308
+0.03412837706 -0.06375930285 -0.05431811234
+0.008961397042 0.0637895756 0.06371092318
+0.01427783805 0.05723610966 0.05657762965
+-0.003326030827 -0.05337569876 -0.00816300105
+0.03449232394 -0.01447509712 -0.007085189085
+-0.001399696964 0.07360918529 0.04738228773
+0.01482836949 -0.0503736023 -0.00361868336
+0.001175117703 0.04001887574 0.03541236732
+-0.001654754589 0.04403139999 0.03136603031
+0.02013522102 0.005521818577 -0.01645881801
+0.02887962947 0.03476326802 0.02733829569
+0.004702017954 -0.07433493442 0.004067149564
+-0.003331472651 -0.02627186955 0.02464260162
+0.04016155504 -0.01733728772 0.007963893729
+0.0397206916 -0.02491526377 0.01076551855
+-0.01112576914 -0.005316011207 0.002302332574
+-0.006927365029 -0.03178226048 0.01912703705
+-0.0102274856 -0.02782264648 0.01210044819
+0.03734668377 -0.05742997169 -0.01645298422
+0.02466980407 -0.070910477 0.02289710424
+0.01385901705 0.05949049579 0.04023338261
+0.03240174381 0.02011033079 -0.0344847917
+0.03395723161 -0.06758874851 0.005171270084
+0.02458864391 -0.02115590763 0.03120326966
+-0.01035079762 0.08472342609 0.06104253917
+0.001684861081 0.05917736027 0.07005330408
+-0.006536190487 0.03548836799 -0.06267864689
+0.008895654965 -0.002048438485 0.02823154318
+-0.001194226204 -0.00612117961 0.02382173563
+-0.041466062 0.08773778344 0.04181971279
+0.001007978701 0.03349913939 -0.0282564572
+0.007628281862 0.03634278651 -0.01242744678
+0.0230054381 0.03936685429 -0.01065390101
+0.001368915261 -0.08394618474 -0.03381885488
+0.002632628316 -0.08255247796 -0.02412757231
+-0.00354013088 -0.07196116749 -0.008333162013
+0.03078262752 -0.04618993488 -0.01805172639
+0.006631522763 0.05681432904 0.06801000768
+0.03454065289 0.02451513562 0.01138156728
+0.03383925403 0.01813973081 0.01100557987
+0.01893751459 0.008940117663 0.03115693827
+-0.006957234426 -0.070454112 -0.003727535227
+0.02106392657 -0.01061953913 0.02950665781
+0.03987355539 -0.04569553711 0.02707910533
+0.02655665416 0.02996360952 -0.02032420263
+-0.0008854950036 0.04548580806 0.04725969924
+0.03298333243 0.0006369486471 -0.005490274346
+-0.02477651358 0.06909514574 0.05263016405
+0.0108876158 -0.07350102942 0.01540372207
+-0.01151240102 -0.04770396553 0.01170553782
+-0.01337948023 -0.04918765216 0.003439276179
+0.03931723504 -0.01024753114 0.003331953417
+0.03407506517 -0.06279539986 -0.0644464214
+0.03350940515 -0.0555615256 -0.07453310785
+0.01670513491 0.05031005658 0.05116246645
+0.03219513956 0.02763777255 0.02156794773
+0.02614738372 0.009600674665 -0.06096641274
+0.02063628636 -0.06844250988 0.009433137481
+-0.005150105969 -0.06225878057 -0.02061781885
+0.02463452407 0.04688349139 0.008254127115
+-0.007189791113 -0.03780993371 0.008068956686
+-0.007576305539 -0.03502248637 0.011572634
+0.03786719388 -0.04772718244 -0.007152106251
+0.04164745552 -0.05139976523 0.02170403472
+0.001368702698 -0.08058572444 -0.07563799719
+0.001021217034 -0.08584384473 -0.07578508649
+0.03852844441 -0.06468442727 -0.07476173787
+-0.0004869179466 0.03535551245 -0.03992346725
+-0.008371846789 -0.02901435139 -0.0009720494804
+0.01100768797 -0.06564660176 0.003295236801
+-0.004957053966 -0.08915640355 -0.07544380165
+0.03595913841 -0.0643991254 -0.06383142451
+-0.004500428108 -0.03541216466 -0.0001096241416
+0.03684824064 -0.009359937734 -0.00345269131
+-0.001901313573 0.02151472699 -0.01957940439
+0.02427895513 0.04126406169 0.02968521799
+0.003926526436 0.02956443196 -0.01833385799
+0.02338500841 -0.04382673933 0.03750815578
+0.03198393591 0.02261394352 -0.0363035693
+-0.009625922757 -0.04059774736 0.01360814369
+-0.0001478886239 -0.0869998289 -0.04689507336
+-0.01105766555 -0.04249657528 0.004064274564
+-0.00620246511 0.0847735636 0.07263749388
+-0.006363858177 -0.01268843137 0.02091940448
+-0.0189451537 0.06607527142 0.0579000547
+0.03693622946 -0.03240344324 0.01255862406
+-0.009399355844 0.08512885741 0.07767636647
+0.002132865935 -0.0889281017 -0.05841970038
+0.01520672892 -0.06872841518 0.01030069829
+0.03265859535 0.02074778201 -0.00821641934
+0.01189037844 0.0634348859 0.05467467979
+1 2
+3 2
+1 3
+4 5
+4 6
+6 5
+7 8
+8 9
+9 7
+10 11
+12 11
+10 12
+13 14
+15 14
+15 13
+16 17
+18 17
+16 18
+19 20
+21 20
+21 19
+22 23
+22 24
+24 23
+25 26
+27 26
+25 27
+28 29
+30 28
+30 29
+31 32
+31 33
+32 33
+34 35
+35 36
+34 36
+37 38
+37 39
+39 38
+40 41
+42 40
+42 41
+43 44
+45 44
+45 43
+46 47
+48 46
+48 47
+49 50
+50 51
+51 49
+52 53
+53 54
+54 52
+55 56
+55 57
+56 57
+58 59
+60 58
+59 60
+61 62
+61 63
+62 63
+37 64
+65 37
+65 64
+66 18
+66 17
+67 68
+68 69
+67 69
+70 71
+70 72
+72 71
+73 74
+74 75
+73 75
+76 77
+78 76
+78 77
+79 80
+81 79
+80 81
+82 83
+84 82
+83 84
+85 72
+85 86
+86 72
+87 88
+87 89
+88 89
+90 91
+90 92
+91 92
+93 94
+93 95
+94 95
+96 97
+96 98
+97 98
+99 17
+66 99
+100 101
+102 101
+100 102
+103 104
+104 105
+105 103
+106 107
+108 107
+106 108
+109 110
+110 111
+109 111
+112 113
+113 114
+112 114
+115 116
+116 117
+115 117
+118 119
+120 118
+119 120
+121 122
+121 117
+117 122
+123 124
+123 125
+125 124
+126 72
+126 85
+127 128
+129 127
+128 129
+130 59
+130 105
+59 105
+131 132
+133 131
+132 133
+134 135
+134 136
+135 136
+137 138
+139 138
+137 139
+140 141
+142 140
+142 141
+75 143
+143 144
+75 144
+145 146
+145 147
+146 147
+148 69
+148 67
+60 149
+60 150
+149 150
+151 152
+151 153
+152 153
+154 155
+154 156
+156 155
+157 158
+157 95
+158 95
+159 160
+159 161
+160 161
+162 163
+164 163
+162 164
+165 166
+165 167
+166 167
+168 169
+169 170
+168 170
+116 171
+171 154
+116 154
+172 173
+172 174
+173 174
+175 176
+23 176
+175 23
+147 177
+178 147
+178 177
+179 180
+181 180
+179 181
+59 182
+182 183
+183 59
+164 184
+185 184
+164 185
+22 186
+22 187
+186 187
+161 188
+189 188
+161 189
+190 191
+190 192
+192 191
+47 193
+193 194
+47 194
+195 196
+197 195
+197 196
+86 198
+198 199
+86 199
+200 201
+201 202
+200 202
+203 204
+205 203
+204 205
+206 207
+208 207
+206 208
+209 210
+52 210
+209 52
+108 211
+211 212
+108 212
+213 16
+214 16
+214 213
+193 215
+193 216
+215 216
+217 218
+217 219
+219 218
+110 125
+220 110
+125 220
+197 221
+221 222
+197 222
+88 223
+87 223
+186 224
+225 224
+225 186
+226 206
+226 227
+206 227
+228 229
+229 230
+228 230
+187 231
+23 187
+231 23
+232 233
+232 234
+233 234
+235 236
+236 218
+235 218
+237 238
+237 239
+239 238
+240 4
+241 240
+241 4
+242 172
+172 243
+243 242
+244 245
+244 246
+246 245
+247 248
+148 248
+247 148
+30 249
+250 30
+250 249
+251 252
+253 252
+253 251
+254 255
+256 254
+256 255
+257 258
+258 259
+257 259
+256 260
+261 260
+256 261
+262 263
+144 262
+263 144
+264 265
+266 264
+266 265
+267 268
+269 268
+269 267
+270 271
+270 272
+271 272
+273 274
+144 273
+144 274
+226 275
+206 275
+276 277
+276 278
+278 277
+279 280
+114 279
+280 114
+21 281
+21 282
+281 282
+163 283
+284 283
+163 284
+215 46
+215 137
+137 46
+285 286
+287 286
+287 285
+151 288
+152 288
+114 289
+290 114
+289 290
+291 233
+232 291
+251 249
+252 249
+292 259
+293 292
+293 259
+294 295
+294 296
+296 295
+156 297
+155 297
+82 247
+82 248
+298 117
+122 298
+299 246
+299 300
+246 300
+301 302
+303 302
+301 303
+41 304
+305 304
+41 305
+306 307
+216 307
+306 216
+208 275
+202 308
+202 309
+308 309
+310 227
+227 311
+310 311
+312 313
+314 313
+312 314
+315 162
+315 164
+316 278
+317 278
+316 317
+318 319
+319 320
+318 320
+39 321
+39 322
+322 321
+36 323
+323 34
+13 232
+55 232
+13 55
+324 64
+64 325
+325 324
+326 327
+328 326
+327 328
+329 330
+233 330
+329 233
+139 3
+1 139
+100 331
+331 101
+210 73
+73 332
+210 332
+304 288
+288 183
+183 304
+333 334
+333 335
+335 334
+41 289
+40 289
+336 337
+338 336
+337 338
+339 340
+341 340
+341 339
+9 323
+36 9
+342 343
+342 344
+343 344
+18 345
+345 66
+285 346
+285 347
+346 347
+348 295
+348 349
+295 349
+350 351
+352 350
+352 351
+264 309
+309 266
+12 353
+10 353
+354 345
+354 355
+355 345
+356 336
+338 356
+12 357
+357 11
+340 209
+358 340
+209 358
+359 77
+9 77
+359 9
+31 276
+33 276
+29 360
+360 28
+338 361
+338 362
+361 362
+363 364
+364 260
+363 260
+292 365
+365 243
+243 292
+184 163
+161 366
+188 366
+191 105
+191 59
+367 368
+368 369
+369 367
+370 216
+371 370
+371 216
+274 175
+175 372
+274 372
+373 374
+156 374
+373 156
+167 375
+376 167
+375 376
+16 268
+214 268
+377 378
+377 122
+122 378
+379 290
+379 56
+56 290
+362 320
+380 362
+380 320
+338 380
+365 150
+149 365
+156 381
+381 374
+382 142
+382 383
+383 142
+384 385
+282 384
+385 282
+33 386
+32 386
+387 45
+66 387
+66 45
+285 388
+388 286
+389 390
+248 390
+389 248
+391 392
+393 392
+391 393
+242 394
+395 394
+395 242
+74 143
+396 397
+397 398
+398 396
+379 113
+113 399
+399 379
+104 190
+104 400
+190 400
+401 402
+403 401
+402 403
+21 404
+20 404
+104 405
+405 406
+406 104
+174 242
+407 408
+407 409
+409 408
+184 410
+411 184
+411 410
+412 182
+182 60
+412 60
+413 130
+413 59
+330 200
+414 330
+200 414
+415 416
+416 417
+417 415
+217 25
+217 418
+25 418
+42 253
+42 252
+230 419
+420 419
+230 420
+289 280
+421 422
+2 422
+421 2
+140 65
+302 65
+302 140
+241 6
+241 423
+423 6
+53 61
+53 332
+61 332
+424 313
+312 424
+328 425
+425 327
+426 424
+427 424
+427 426
+428 211
+429 428
+429 211
+71 430
+71 431
+430 431
+179 81
+127 179
+81 127
+432 408
+407 432
+411 433
+410 433
+434 435
+435 436
+434 436
+105 190
+223 437
+87 437
+438 214
+204 214
+438 204
+439 440
+439 137
+440 137
+375 441
+375 442
+441 442
+149 76
+443 76
+149 443
+444 445
+49 444
+445 49
+446 26
+446 447
+447 26
+448 116
+448 396
+396 116
+448 155
+448 154
+275 449
+226 449
+391 128
+392 128
+321 38
+450 86
+450 198
+284 451
+433 451
+433 284
+329 452
+452 453
+329 453
+454 123
+454 455
+455 123
+456 457
+409 457
+409 456
+458 220
+459 220
+459 458
+180 460
+461 460
+461 180
+22 173
+26 22
+173 26
+56 42
+56 253
+462 463
+463 464
+462 464
+465 93
+93 51
+51 465
+466 303
+10 303
+466 10
+181 467
+177 467
+181 177
+347 468
+347 469
+468 469
+388 362
+361 388
+470 219
+217 470
+471 472
+472 235
+471 235
+473 474
+473 44
+44 474
+224 311
+224 227
+100 392
+393 100
+204 475
+475 205
+476 10
+466 476
+20 477
+478 20
+477 478
+479 342
+479 127
+127 342
+480 481
+480 482
+482 481
+483 484
+483 485
+484 485
+133 486
+133 487
+486 487
+96 464
+462 96
+488 377
+377 397
+488 397
+77 323
+327 355
+327 345
+108 229
+229 107
+331 129
+128 331
+313 279
+489 279
+313 489
+485 31
+32 485
+483 213
+213 490
+483 490
+27 186
+225 27
+360 491
+491 423
+423 360
+470 225
+227 225
+470 227
+492 125
+125 493
+493 492
+24 174
+174 372
+24 372
+233 200
+494 389
+494 495
+495 389
+496 497
+498 497
+498 496
+414 103
+414 453
+453 103
+130 414
+103 130
+454 124
+499 429
+158 429
+158 499
+118 500
+119 500
+469 501
+502 501
+502 469
+503 504
+505 503
+505 504
+143 80
+143 506
+506 80
+507 336
+508 336
+507 508
+29 491
+509 492
+509 493
+510 86
+265 86
+265 510
+411 163
+511 434
+512 434
+511 512
+255 513
+514 255
+513 514
+515 115
+515 111
+111 115
+421 1
+336 516
+337 516
+504 517
+504 518
+517 518
+519 350
+352 519
+83 520
+521 83
+520 521
+522 365
+150 522
+217 27
+523 524
+524 135
+523 135
+525 526
+525 527
+526 527
+259 84
+83 259
+528 239
+238 528
+529 311
+529 530
+311 530
+380 318
+531 344
+531 342
+532 166
+481 166
+532 481
+363 209
+363 340
+471 533
+534 471
+533 534
+535 121
+121 397
+535 397
+172 292
+2 185
+371 185
+2 371
+377 398
+314 489
+269 328
+267 328
+460 506
+460 143
+333 536
+536 335
+537 538
+539 538
+539 537
+540 407
+540 409
+11 541
+541 357
+258 83
+386 350
+386 519
+542 543
+445 542
+445 543
+116 298
+194 215
+544 215
+194 544
+13 335
+196 335
+13 196
+545 546
+545 249
+249 546
+547 523
+547 548
+523 548
+355 481
+481 354
+143 263
+476 496
+476 353
+496 353
+170 487
+549 170
+549 487
+91 491
+90 491
+392 331
+515 349
+295 515
+69 550
+69 551
+550 551
+102 552
+101 552
+6 126
+126 5
+553 382
+553 383
+554 88
+554 555
+555 88
+63 556
+63 239
+556 239
+557 319
+558 557
+319 558
+559 312
+509 559
+509 312
+438 560
+438 399
+560 399
+71 240
+5 240
+71 5
+310 530
+26 186
+208 534
+533 208
+196 561
+536 196
+561 536
+482 532
+412 305
+182 305
+562 563
+455 562
+563 455
+386 514
+514 519
+564 445
+444 564
+99 456
+565 99
+456 565
+36 7
+507 356
+566 567
+568 567
+568 566
+20 405
+477 405
+365 78
+76 365
+569 222
+569 281
+281 222
+524 328
+326 524
+57 570
+570 56
+277 571
+277 316
+316 571
+145 343
+344 145
+432 162
+432 163
+530 572
+552 530
+572 552
+565 169
+565 568
+568 169
+573 361
+337 573
+361 337
+422 473
+422 44
+378 298
+574 54
+52 574
+426 401
+427 401
+238 365
+238 243
+171 575
+575 154
+576 272
+351 576
+351 272
+322 577
+322 578
+578 577
+579 2
+579 371
+290 113
+383 141
+580 581
+580 339
+339 581
+582 98
+582 97
+583 214
+213 583
+117 515
+295 117
+257 26
+173 257
+56 40
+40 290
+155 535
+448 535
+584 447
+257 584
+257 447
+14 196
+96 585
+462 585
+166 462
+166 463
+533 129
+129 471
+566 565
+211 511
+428 511
+65 356
+37 356
+451 421
+1 451
+586 394
+394 587
+586 587
+424 588
+113 588
+424 113
+517 554
+554 589
+517 589
+159 228
+160 228
+396 298
+298 398
+585 355
+585 326
+326 355
+64 39
+443 412
+412 149
+333 475
+205 333
+487 168
+487 457
+168 457
+55 291
+57 291
+461 143
+468 590
+347 590
+253 570
+432 283
+408 283
+512 428
+512 591
+428 591
+153 201
+151 201
+592 593
+213 593
+592 213
+594 15
+14 594
+209 73
+73 358
+254 571
+571 87
+254 87
+569 595
+596 569
+595 596
+576 270
+541 507
+507 357
+318 368
+369 318
+219 534
+219 471
+597 432
+407 597
+271 598
+133 598
+133 271
+425 269
+599 248
+599 389
+600 559
+600 492
+492 559
+203 548
+203 523
+408 165
+408 601
+601 165
+255 602
+602 514
+162 597
+420 441
+542 420
+441 542
+418 343
+418 603
+603 343
+318 557
+604 467
+180 467
+180 604
+85 605
+86 605
+436 606
+607 606
+436 607
+153 413
+153 130
+608 208
+608 533
+609 252
+450 252
+609 450
+610 8
+611 610
+8 611
+445 590
+347 445
+268 204
+573 612
+613 573
+613 612
+211 499
+499 212
+263 81
+81 262
+464 318
+369 464
+614 325
+614 324
+449 470
+449 219
+606 478
+607 478
+197 594
+14 197
+465 50
+615 387
+387 44
+44 615
+604 616
+467 616
+89 617
+618 89
+617 618
+292 84
+136 97
+97 577
+577 136
+619 256
+619 260
+8 289
+8 41
+620 614
+324 620
+303 11
+307 138
+138 215
+307 215
+261 621
+435 261
+435 621
+172 293
+173 293
+622 350
+622 386
+134 326
+134 524
+263 80
+575 156
+373 575
+623 109
+459 623
+109 459
+593 490
+179 79
+506 79
+179 506
+332 75
+624 75
+624 332
+625 415
+625 416
+591 595
+569 591
+465 106
+93 106
+62 556
+192 556
+62 192
+21 385
+623 8
+623 289
+43 474
+231 626
+529 626
+529 231
+207 552
+207 572
+317 415
+417 317
+417 563
+563 416
+109 220
+431 360
+360 430
+395 372
+395 274
+132 167
+132 376
+381 294
+297 294
+297 381
+347 287
+469 287
+15 232
+627 543
+590 543
+627 590
+260 606
+478 260
+628 629
+629 157
+628 157
+222 282
+115 575
+115 373
+30 545
+199 28
+431 28
+431 199
+442 420
+442 230
+364 209
+266 510
+288 266
+510 288
+602 352
+538 602
+538 352
+229 419
+127 531
+127 181
+181 531
+166 408
+284 526
+451 526
+107 419
+107 420
+487 131
+601 131
+601 487
+400 54
+400 406
+54 406
+246 508
+508 299
+420 465
+420 106
+283 532
+283 482
+317 630
+415 630
+631 632
+631 47
+632 47
+505 633
+633 504
+552 608
+608 207
+634 617
+634 89
+35 550
+124 550
+124 35
+617 455
+563 617
+278 592
+276 592
+603 342
+155 635
+635 535
+411 284
+199 30
+174 22
+126 70
+164 474
+473 164
+636 166
+636 463
+637 380
+637 338
+225 217
+148 638
+638 247
+639 640
+640 136
+136 639
+633 581
+505 581
+205 548
+434 539
+435 539
+270 549
+270 486
+549 486
+501 558
+287 501
+558 287
+61 624
+586 624
+61 586
+72 431
+213 630
+630 592
+17 484
+99 484
+115 171
+95 499
+433 1
+138 1
+138 433
+452 405
+405 103
+452 103
+371 306
+381 314
+374 314
+158 595
+158 591
+513 571
+254 513
+448 397
+500 246
+500 244
+69 34
+148 34
+66 641
+99 641
+82 599
+599 83
+642 386
+642 568
+386 568
+612 382
+612 553
+641 407
+45 407
+45 641
+121 294
+121 295
+5 70
+63 586
+388 613
+361 613
+129 472
+127 472
+534 449
+208 449
+142 302
+382 302
+346 388
+204 267
+267 203
+302 356
+283 526
+566 99
+351 159
+272 159
+48 439
+137 48
+24 175
+642 549
+576 642
+576 549
+212 106
+212 93
+309 546
+546 308
+643 644
+644 498
+643 498
+503 517
+228 272
+96 318
+152 413
+645 194
+645 544
+399 475
+399 204
+459 36
+458 36
+54 62
+62 53
+627 468
+222 596
+189 160
+619 223
+555 223
+555 619
+430 423
+430 241
+430 240
+438 583
+167 636
+537 188
+511 537
+511 188
+287 320
+286 320
+296 489
+296 314
+551 634
+634 69
+450 646
+646 86
+302 507
+302 541
+329 234
+234 385
+385 329
+219 235
+139 440
+441 543
+176 231
+519 602
+78 247
+84 78
+247 84
+458 125
+497 500
+497 118
+561 195
+89 571
+633 341
+633 339
+514 33
+195 647
+647 561
+562 625
+625 401
+562 401
+303 541
+582 38
+637 582
+637 38
+310 206
+562 416
+648 464
+501 648
+464 501
+611 359
+9 611
+178 145
+638 323
+323 148
+618 417
+618 563
+254 437
+256 437
+513 277
+306 184
+307 184
+476 649
+245 649
+476 245
+638 77
+276 593
+520 494
+520 389
+631 650
+47 650
+482 526
+443 359
+443 611
+221 596
+423 85
+6 85
+373 559
+559 374
+94 51
+322 94
+322 51
+78 638
+613 553
+273 75
+481 525
+480 525
+226 470
+554 634
+589 634
+388 553
+201 266
+309 201
+93 499
+524 267
+203 524
+365 84
+315 474
+622 642
+622 576
+647 651
+547 647
+547 651
+497 643
+459 7
+334 379
+334 56
+475 379
+475 334
+532 408
+621 256
+255 621
+136 651
+640 651
+518 554
+261 606
+81 128
+367 557
+368 557
+607 512
+512 436
+619 363
+504 341
+297 635
+652 583
+213 652
+251 308
+251 653
+308 653
+553 346
+495 505
+654 505
+495 654
+434 537
+427 562
+345 425
+425 18
+346 614
+347 614
+609 655
+252 655
+596 640
+221 640
+47 645
+218 603
+218 418
+415 652
+630 652
+656 159
+656 351
+650 216
+650 370
+300 476
+245 300
+295 489
+111 657
+657 115
+124 458
+643 244
+643 245
+324 39
+307 410
+410 138
+525 615
+345 525
+615 345
+268 18
+615 422
+32 568
+8 459
+616 580
+616 339
+610 41
+89 316
+316 417
+89 417
+364 52
+364 574
+132 165
+646 609
+236 472
+472 479
+236 479
+31 593
+158 658
+628 658
+158 628
+177 580
+467 580
+659 303
+659 466
+548 333
+548 536
+658 640
+658 639
+489 348
+624 394
+624 395
+577 629
+629 660
+577 660
+210 53
+450 30
+250 450
+98 637
+384 594
+15 384
+655 41
+304 655
+520 599
+453 330
+661 145
+661 178
+510 646
+525 482
+193 650
+383 346
+366 537
+315 45
+597 45
+597 315
+398 378
+521 258
+626 100
+529 100
+605 423
+166 355
+325 346
+652 403
+403 625
+625 652
+49 39
+324 49
+92 265
+264 92
+119 246
+331 533
+550 34
+312 374
+222 594
+222 384
+37 637
+521 146
+146 520
+49 322
+485 567
+567 32
+555 363
+91 86
+91 605
+278 630
+173 259
+321 577
+443 610
+310 207
+385 452
+528 243
+528 242
+609 510
+510 304
+304 609
+493 424
+424 509
+593 483
+486 271
+140 64
+660 136
+660 639
+30 198
+382 301
+644 649
+644 245
+650 371
+42 655
+654 390
+390 495
+662 21
+281 662
+371 184
+350 576
+348 279
+191 58
+237 191
+58 237
+663 176
+175 663
+502 648
+491 605
+555 518
+319 287
+662 512
+662 591
+593 664
+31 664
+305 610
+305 443
+21 452
+452 404
+224 529
+187 224
+187 529
+90 264
+578 157
+629 578
+456 540
+662 19
+409 601
+418 446
+418 146
+446 146
+376 598
+598 375
+600 373
+649 498
+649 496
+19 478
+607 19
+277 33
+634 88
+49 620
+569 662
+237 556
+366 352
+538 366
+264 546
+479 603
+574 260
+665 344
+531 665
+269 18
+55 334
+570 202
+202 653
+653 570
+656 161
+181 178
+657 373
+421 527
+451 527
+405 404
+545 90
+29 90
+545 29
+357 119
+246 357
+456 168
+74 358
+358 461
+461 74
+63 587
+666 466
+666 659
+508 516
+183 152
+544 46
+587 528
+587 242
+516 299
+516 666
+299 666
+500 643
+402 583
+403 583
+634 550
+511 189
+211 189
+561 547
+422 185
+647 640
+221 647
+335 55
+380 98
+262 391
+262 128
+530 102
+584 146
+584 446
+654 517
+589 654
+665 661
+344 661
+401 588
+588 426
+427 493
+560 113
+468 502
+667 636
+463 667
+641 540
+540 99
+501 367
+558 367
+529 102
+303 612
+303 382
+626 393
+25 446
+146 258
+440 631
+439 631
+604 461
+174 395
+170 642
+642 169
+97 321
+38 97
+636 375
+667 375
+518 341
+620 445
+110 492
+110 600
+546 90
+47 544
+121 377
+664 483
+339 358
+616 358
+250 252
+286 362
+424 112
+313 112
+352 656
+253 653
+3 579
+631 579
+3 631
+147 520
+400 192
+400 62
+349 280
+348 280
+584 258
+654 503
+375 468
+375 627
+349 111
+413 183
+390 68
+67 390
+54 477
+477 406
+627 441
+237 192
+67 248
+125 668
+668 493
+384 234
+48 632
+513 33
+669 581
+581 494
+669 494
+548 561
+369 501
+134 97
+595 658
+629 658
+150 58
+520 669
+271 228
+624 273
+110 657
+621 602
+621 538
+177 669
+147 669
+550 454
+617 550
+617 454
+567 484
+366 656
+669 580
+437 619
+663 626
+663 393
+473 185
+358 604
+478 574
+207 530
+640 595
+665 178
+325 140
+176 626
+153 200
+574 477
+668 123
+12 119
+134 585
+318 98
+496 118
+120 496
+566 484
+538 435
+458 35
+346 141
+363 518
+560 402
+438 402
+239 587
+435 606
+429 591
+465 564
+564 420
+291 200
+94 578
+266 151
+440 3
+455 668
+273 395
+274 663
+663 144
+294 635
+57 202
+564 50
+133 376
+76 359
+108 189
+160 108
+564 49
+340 518
+94 157
+667 502
+667 468
+238 522
+522 237
+300 466
+401 560
+588 560
+635 121
+349 289
+579 650
+615 421
+615 527
+72 199
+179 460
+632 439
+153 414
+221 195
+483 16
+353 119
+663 391
+169 456
+547 135
+112 279
+66 615
+68 634
+657 600
+291 202
+271 230
+598 230
+666 300
+135 651
+343 146
+662 607
+381 296
+457 601
+665 181
+265 91
+353 120
+101 608
+533 101
+546 251
+357 508
+525 354
+505 494
+349 623
+603 236
+462 355
+15 234
+542 564
+229 160
+623 111
+58 522
+516 659
+516 573
+573 659
+132 601
+612 659
+68 589
+654 68
+305 183
+485 664
+483 17
+598 442
+356 637
+427 668
+463 648
+648 667
+121 488
+668 562
+262 663
+96 134
+614 445
+43 315
+140 346
+658 660
+1 2 3
+4 5 6
+7 8 9
+10 11 12
+13 14 15
+16 17 18
+19 20 21
+22 23 24
+25 26 27
+28 29 30
+31 32 33
+34 35 36
+37 38 39
+40 41 42
+43 44 45
+46 47 48
+49 50 51
+52 53 54
+55 56 57
+58 59 60
+61 62 63
+64 65 66
+67 17 68
+69 70 71
+72 73 74
+75 76 77
+78 79 80
+81 82 83
+84 85 86
+87 88 89
+90 91 92
+93 94 95
+96 97 98
+99 100 101
+68 102 103
+104 105 106
+107 108 109
+110 111 112
+113 114 115
+116 117 118
+119 120 121
+122 123 124
+125 126 127
+128 129 130
+131 132 87
+133 134 135
+136 137 138
+139 140 141
+142 143 144
+145 146 147
+148 149 150
+151 152 153
+154 155 156
+71 157 158
+159 160 161
+162 163 164
+165 166 167
+168 169 170
+171 172 173
+174 175 176
+177 178 179
+180 181 182
+183 184 185
+186 187 188
+189 190 191
+192 193 194
+195 196 197
+198 199 200
+201 202 203
+204 205 206
+207 208 209
+210 211 212
+213 214 215
+216 217 218
+219 220 221
+222 223 224
+225 226 227
+228 229 230
+231 232 233
+234 235 236
+237 238 239
+240 241 242
+243 244 245
+246 247 248
+249 250 251
+252 253 90
+254 255 256
+257 258 259
+260 261 262
+263 264 265
+266 267 268
+269 270 271
+272 273 274
+275 276 277
+278 279 280
+281 282 283
+284 285 286
+287 288 289
+290 291 292
+293 294 295
+296 297 298
+299 300 301
+302 303 304
+305 306 307
+308 309 310
+311 312 313
+314 315 316
+317 257 318
+319 320 321
+322 323 324
+325 326 327
+328 329 330
+331 332 333
+334 335 336
+337 162 338
+339 340 341
+266 342 343
+290 344 345
+346 347 348
+349 350 351
+352 353 167
+354 355 284
+127 356 357
+358 359 360
+361 362 363
+364 365 366
+367 368 369
+318 230 370
+371 372 373
+374 375 376
+377 378 379
+380 176 381
+382 383 384
+385 386 387
+388 389 390
+391 392 36
+393 394 395
+396 397 398
+399 400 401
+402 403 404
+405 406 3
+104 407 408
+409 410 411
+412 413 414
+415 416 417
+418 419 40
+420 421 422
+423 424 425
+426 391 427
+428 429 430
+431 67 432
+433 434 435
+436 437 438
+439 440 441
+442 443 306
+12 444 445
+446 447 448
+449 450 421
+451 11 452
+453 454 455
+456 457 458
+32 459 460
+28 461 462
+463 464 465
+466 467 468
+469 470 471
+175 472 201
+473 474 207
+475 476 138
+477 478 479
+480 481 482
+483 484 485
+486 487 488
+489 490 491
+238 492 493
+494 495 496
+497 498 499
+500 501 502
+503 501 464
+161 504 505
+506 487 507
+508 509 510
+511 512 513
+33 514 515
+516 517 518
+334 519 520
+521 522 523
+524 525 526
+527 528 529
+76 530 151
+531 532 533
+534 535 536
+537 538 539
+540 541 542
+543 20 544
+545 546 547
+187 278 548
+549 550 551
+552 553 554
+555 556 557
+558 136 559
+560 561 562
+563 564 565
+566 567 568
+569 291 570
+571 572 573
+324 339 574
+575 576 577
+578 579 580
+581 582 583
+584 585 586
+587 377 588
+589 590 401
+591 592 593
+594 595 596
+597 598 599
+600 601 602
+549 603 604
+605 606 554
+607 608 609
+475 610 210
+611 612 253
+613 614 615
+616 617 618
+619 620 621
+622 623 624
+625 626 627
+628 629 630
+631 632 633
+634 635 165
+317 636 637
+524 638 639
+388 640 39
+641 642 219
+643 644 645
+646 647 648
+649 650 651
+652 653 654
+655 656 657
+658 659 660
+661 662 663
+664 665 569
+666 667 668
+669 670 671
+672 673 674
+675 676 677
+678 679 680
+681 682 465
+683 244 684
+685 686 687
+688 689 690
+691 375 692
+693 694 525
+695 227 696
+674 697 698
+699 700 701
+702 703 704
+705 706 707
+708 709 710
+711 712 713
+668 714 715
+716 717 718
+719 426 457
+720 721 448
+722 111 723
+135 724 725
+726 727 728
+729 31 730
+731 732 733
+734 256 735
+736 737 738
+739 740 741
+742 743 744
+745 746 747
+403 560 748
+749 750 751
+752 753 754
+755 756 757
+758 755 759
+760 649 128
+761 762 763
+764 122 765
+766 767 768
+769 770 771
+772 773 774
+775 776 777
+778 736 461
+779 744 780
+781 782 783
+472 784 553
+785 786 787
+788 789 790
+791 792 793
+1 794 577
+795 420 796
+797 798 799
+800 801 440
+802 803 804
+805 504 806
+27 807 566
+808 809 810
+811 812 813
+814 815 86
+816 817 274
+818 819 820
+502 821 387
+822 429 823
+824 825 826
+453 827 828
+829 830 831
+832 833 834
+471 279 835
+836 837 838
+532 717 839
+840 378 728
+310 841 842
+843 773 844
+416 845 846
+847 848 849
+550 850 851
+452 852 853
+297 854 815
+800 855 856
+857 858 859
+860 356 120
+861 862 863
+864 865 866
+867 868 869
+870 871 872
+873 447 874
+304 152 875
+876 877 878
+879 880 881
+93 882 883
+884 407 693
+438 885 886
+887 888 889
+890 105 891
+892 893 6
+894 895 509
+896 897 898
+899 900 901
+902 903 904
+905 906 907
+908 909 910
+911 912 913
+914 376 820
+734 26 915
+831 916 917
+918 919 920
+826 707 921
+555 922 923
+924 925 926
+927 928 856
+625 929 930
+931 932 933
+427 934 9
+775 935 449
+936 937 938
+939 699 940
+941 79 942
+943 944 945
+946 400 947
+57 948 949
+950 951 952
+953 430 954
+174 955 956
+957 958 959
+960 961 962
+963 964 965
+966 967 689
+357 968 496
+969 970 54
+971 593 972
+973 974 470
+184 975 976
+977 978 979
+980 981 982
+983 838 984
+117 985 340
+986 150 510
+987 988 989
+101 990 991
+992 993 239
+886 994 995
+996 997 663
+499 998 999
+1000 1001 634
+1002 1003 1004
+866 1005 13
+41 998 664
+1006 1007 715
+1008 1009 666
+829 1010 1011
+1012 938 961
+594 1013 1014
+1015 65 1016
+1017 794 1018
+1019 1020 1021
+1022 1023 1024
+1025 1026 1027
+1028 171 1029
+1030 533 1031
+1032 1033 1034
+1035 38 64
+624 1036 1037
+1038 696 1039
+1040 1041 1042
+56 1043 1044
+844 1045 659
+678 1046 1047
+665 949 1048
+1049 603 1050
+1051 1052 1053
+1054 163 1055
+1056 1057 1058
+1059 14 1060
+1061 455 1062
+1063 1064 1065
+1066 1067 1068
+312 1069 977
+1070 1071 853
+478 1072 1073
+1074 830 1075
+1076 1077 604
+1078 1079 1080
+841 1081 589
+523 1082 1083
+1084 1085 1086
+787 1051 1014
+22 264 205
+1087 1088 872
+1089 1090 1091
+789 1092 1093
+1094 1076 955
+1095 1096 1097
+1098 1099 1100
+1101 902 385
+1102 1103 1104
+88 1105 1106
+1107 1108 1109
+558 1110 1111
+1112 1113 917
+1114 1115 1116
+1117 1118 1119
+1120 1121 1047
+493 1122 614
+1123 1124 1125
+235 1126 1127
+302 1128 1129
+1073 1130 1131
+1132 1133 398
+1134 1135 683
+1136 1137 1108
+1138 1060 1139
+50 1140 671
+1141 1142 1143
+1102 1144 1145
+1146 1147 1148
+346 814 1149
+1150 1151 1152
+299 1153 1154
+1155 418 1156
+1133 1157 1158
+10 673 1159
+1160 1161 1162
+1163 1164 1165
+1166 186 1167
+855 1168 1169
+1170 1171 947
+875 772 1172
+488 1173 1174
+1175 1176 1177
+732 1057 1178
+1179 1180 1181
+1182 1183 1184
+563 1185 1186
+1187 1188 1066
+669 1189 1190
+1191 1192 1193
+774 1180 81
+513 326 1194
+1155 1195 1196
+43 1197 690
+1198 1199 1200
+1201 1202 959
+1203 565 1204
+1205 564 1206
+113 1207 247
+599 1208 1209
+485 1210 1211
+490 1212 1213
+1214 1215 1216
+679 1217 1218
+393 15 1219
+1220 1221 1222
+1223 1224 1136
+1225 1226 1227
+1228 945 327
+1229 1230 1174
+1231 287 868
+779 906 1086
+1232 1233 1234
+573 1235 1236
+827 1237 466
+1238 1239 1240
+1241 1242 1243
+261 1244 571
+1245 1246 1247
+1089 177 1248
+1249 1250 643
+1251 1252 572
+1253 1254 1255
+1256 1257 1258
+358 1259 1260
+1261 1262 1189
+1263 921 1264
+1265 1266 1203
+1267 1268 1269
+1270 1271 771
+1272 1273 1201
+1146 1274 1275
+1276 1277 1278
+926 1279 1280
+534 497 985
+1281 320 1282
+1100 1283 428
+1000 1284 1285
+605 1286 645
+1232 1287 29
+661 188 1288
+1289 131 73
+1290 1291 688
+1009 1292 1293
+1294 503 1295
+807 735 1296
+286 1297 1298
+1299 1300 1301
+1302 1270 1303
+1304 226 1087
+1305 1306 607
+1307 1308 1309
+1310 1311 1312
+1313 1314 1315
+621 1235 1095
+1316 598 74
+1317 1318 1058
+102 1319 1320
+1229 975 1321
+859 1120 1221
+170 1322 763
+1005 218 1139
+1323 1324 1325
+1326 1327 1328
+369 482 1329
+1330 507 1331
+1332 1333 1187
+1334 1063 1335
+1001 834 1336
+1337 282 1338
+157 1339 1340
+1341 103 1342
+766 1218 1311
+1343 84 1344
+1345 1346 1347
+1348 1349 894
+1350 1351 1352
+1353 349 1354
+893 1289 1355
+1315 1356 62
+682 1357 1358
+1359 134 1360
+916 1361 1362
+1363 1364 508
+433 1365 519
+1366 1367 225
+1368 579 1015
+1249 329 1369
+932 1370 1012
+979 1371 1372
+617 1373 1374
+191 24 1375
+1376 1377 1378
+1379 1380 1190
+1381 1382 373
+1383 1384 1385
+769 797 1386
+1387 1372 1028
+714 1130 1388
+1389 164 1110
+1390 863 1391
+1392 1393 695
+657 1394 1395
+1396 53 1397
+1046 1398 1222
+1399 1067 943
+1049 328 956
+173 209 1400
+1401 1402 1403
+738 1404 1209
+1405 276 1406
+992 613 1407
+1408 1292 179
+1409 1410 1411
+1412 335 1413
+445 877 697
+1414 1415 840
+1416 888 1417
+341 999 419
+1418 641 1419
+1420 1070 1421
+1422 1423 1424
+245 1425 271
+618 147 1426
+1097 857 1427
+1428 265 190
+928 1093 1429
+1430 1431 1432
+1433 248 655
+1434 1435 764
+1436 216 918
+1064 1437 91
+1438 1439 425
+1244 723 1251
+63 899 1191
+927 514 1440
+1441 1436 1442
+1443 1444 1445
+1309 713 881
+1446 362 1421
+1447 1448 1449
+374 1450 259
+924 1206 1451
+1452 1453 1454
+1455 458 1456
+1405 1404 582
+1457 193 155
+1458 1297 1459
+1460 1205 1461
+294 1462 1463
+950 1334 1464
+367 1465 1466
+1467 1468 1469
+1470 1458 719
+83 1128 1172
+1056 1282 1471
+1472 749 1473
+1474 1475 1268
+1264 1476 1369
+1477 1455 1478
+1399 250 1479
+1480 1481 583
+1335 293 788
+486 1482 1483
+1484 1485 1486
+1302 989 1439
+1487 1470 80
+1125 1488 1349
+153 315 1489
+705 1490 1491
+1492 637 1134
+1026 1493 1494
+1166 347 835
+1488 1357 1495
+1496 443 1497
+1127 1498 1380
+1367 1499 1500
+941 1501 1431
+1290 1502 381
+1503 1504 1377
+1505 1506 1507
+753 1508 1385
+1509 934 1394
+1510 1511 498
+1512 1513 1510
+1248 824 1514
+295 1515 1516
+368 1162 242
+1517 1300 1518
+799 1519 1025
+547 1257 538
+1354 995 126
+300 1223 1520
+602 133 1521
+477 1522 1523
+1524 1525 1109
+1154 1526 468
+1438 1527 1271
+353 1528 1284
+993 1529 1530
+1531 1532 1533
+1365 1534 1495
+1535 1536 1537
+849 1305 1538
+972 1539 1445
+1540 1541 431
+1542 435 1543
+1544 1545 1114
+1546 1479 1547
+1390 1548 215
+77 1182 410
+1549 1099 1550
+1551 1266 1552
+1553 1371 1554
+480 1555 1556
+1557 1469 1558
+1414 1559 351
+1313 586 1184
+1560 1561 793
+1562 130 1433
+1563 281 1564
+1565 1035 396
+1160 1566 1567
+1568 1569 1570
+492 18 1571
+1514 1263 1050
+1143 967 1572
+1573 515 1347
+1574 1176 1195
+1575 1576 988
+1156 1577 1117
+1069 1307 1378
+1578 1579 1580
+1581 970 1582
+1212 178 1583
+1418 1584 1116
+1585 1586 1587
+1588 1471 459
+1589 1590 1591
+1592 676 1593
+1594 672 1595
+845 1596 1597
+1163 1515 301
+1598 1299 1599
+436 1559 1600
+1601 1602 528
+1603 1604 1605
+1363 149 580
+411 585 1606
+1430 1298 1487
+288 1607 1608
+990 1609 1448
+1610 1611 1059
+364 1612 1613
+1344 802 1614
+648 1615 402
+1457 1616 1617
+1618 1419 781
+811 1476 1619
+241 1620 1555
+1534 1621 895
+1148 1461 1280
+474 1622 1409
+204 915 662
+1491 1619 706
+1623 1624 1625
+1626 839 494
+1345 1169 1503
+1627 803 854
+1199 1628 1629
+1429 1241 801
+1105 1480 1630
+825 1631 873
+1632 1542 1132
+1633 1634 1635
+1636 1565 1637
+305 1638 1639
+1640 1337 765
+721 590 1540
+724 1010 1641
+887 1642 1339
+382 951 321
+1483 905 1643
+1644 1645 1610
+1646 37 1449
+804 1647 1648
+1649 389 1636
+1650 730 1651
+1410 1538 785
+307 1238 783
+1526 1403 1652
+1653 1106 1654
+1265 383 1655
+1626 968 1031
+1656 997 298
+1657 390 980
+1658 1478 1118
+228 1450 1659
+1660 646 1424
+5 277 581
+1661 1662 280
+1217 434 336
+1663 1664 1665
+1666 1667 780
+761 1126 596
+733 1178 1668
+711 1669 1080
+1075 687 1425
+422 463 965
+343 1043 394
+1101 1072 1523
+1670 66 578
+1671 1672 1301
+642 1607 1673
+974 817 1661
+1364 361 1674
+213 1475 1620
+1675 1676 1468
+1556 1677 481
+42 1678 1612
+1679 1680 1537
+412 1664 1240
+1681 325 1682
+202 1683 837
+978 1684 439
+1600 727 1685
+1686 1687 1688
+1336 531 632
+1689 189 1690
+1642 1276 34
+1691 767 1453
+1692 1630 737
+897 1519 1693
+904 1312 1694
+1052 1695 1696
+1697 1588 1698
+1699 1700 1658
+622 505 942
+1701 543 1702
+1703 1704 1705
+1706 1639 94
+506 1216 352
+1707 1226 1708
+851 1709 654
+1710 21 1681
+551 1711 1090
+1712 1713 1714
+1262 1252 110
+491 1715 1716
+1084 1482 1717
+1718 1719 754
+1601 1019 1314
+700 19 1720
+137 759 109
+1253 712 140
+1137 1720 1721
+319 1722 460
+1723 92 1275
+1724 1637 1158
+1673 1287 220
+1725 1682 944
+273 1726 901
+1343 1082 355
+1727 1243 1728
+442 1729 1381
+702 1283 1730
+467 1582 1731
+1732 822 1733
+1734 1541 1081
+1511 1735 55
+1736 1737 1738
+1553 1739 172
+1740 677 194
+1741 1230 1561
+1742 1017 1743
+1326 1702 1744
+1745 1746 1747
+1566 1466 552
+600 82 1179
+1640 1748 1749
+1088 1500 808
+1042 652 1750
+1675 1718 1384
+1751 1752 1753
+1149 1501 469
+1513 1038 415
+1462 1065 612
+1754 1356 1021
+1755 1756 1595
+1757 776 795
+1758 413 338
+1759 862 331
+1760 1761 1662
+1762 1763 1764
+311 1669 1308
+1359 685 1011
+842 946 1499
+1338 1563 1765
+1766 542 1767
+1768 889 1416
+1769 1013 1770
+1771 1506 1442
+786 609 1525
+836 576 1772
+1773 1547 1774
+1775 864 395
+1294 1609 1776
+1777 1778 638
+890 958 1779
+1714 1780 1781
+1782 1027 1783
+1732 1784 1785
+971 1786 1787
+1112 229 1273
+1788 592 1666
+1789 910 535
+1083 1614 1473
+1790 680 768
+1791 1792 1293
+1793 1342 1794
+231 1061 409
+1795 1310 1796
+223 1497 372
+106 1797 1629
+1798 1348 1799
+1628 1800 694
+628 25 1801
+1633 1529 1767
+1627 1802 1647
+1124 963 1358
+1803 1804 616
+1585 269 686
+208 1411 1769
+1805 1104 660
+879 1040 182
+1806 548 529
+1522 1796 903
+1807 181 1808
+1762 1260 1757
+1809 1810 640
+1791 1811 1812
+798 1527 1813
+627 1724 1814
+1815 1085 1816
+1817 1729 1706
+541 1444 1634
+1151 1809 1657
+1548 1391 1818
+495 1819 125
+1697 1820 1668
+1821 1576 1822
+289 1823 345
+1824 500 1413
+1825 1826 587
+1554 441 1827
+1828 1532 292
+1829 1830 1831
+156 1832 1648
+1696 1725 1188
+1135 1361 1074
+1833 1834 1193
+1835 437 1836
+1396 1834 1256
+1780 1802 1837
+1782 1838 1386
+1398 1839 1840
+1574 7 1509
+792 885 1841
+1758 1389 1842
+1817 1745 867
+1318 1655 1281
+1843 69 1844
+1845 1258 1846
+1427 1220 1847
+1735 417 1775
+1848 1687 212
+1849 158 285
+743 1850 1851
+511 1423 1852
+1635 1185 1551
+48 1853 1269
+1836 1685 322
+790 1440 1854
+681 1824 520
+1855 1856 1857
+1858 871 1771
+1131 1454 1859
+1860 1150 143
+1589 1332 1861
+615 1393 909
+1590 1862 1225
+58 476 1686
+996 630 1004
+1863 160 59
+1857 1472 1864
+1387 1865 313
+1866 1183 1489
+1867 1560 114
+1868 1869 1242
+192 1870 1871
+1504 1168 1684
+1872 1873 1874
+710 1650 1875
+1039 1304 1596
+1827 1727 1876
+1592 1877 1870
+1878 611 1401
+584 61 1397
+1498 1322 97
+1879 1880 1800
+1772 966 1881
+1882 1822 1144
+1731 1883 1224
+1659 914 1884
+1546 1885 1068
+1617 1784 1886
+1887 397 1670
+1888 1689 1879
+1746 883 778
+1889 1054 222
+969 1845 1890
+1210 746 1806
+1891 1850 129
+1748 1892 451
+1170 1033 1893
+1388 1894 100
+275 4 912
+1810 991 1447
+123 1895 1896
+1897 1875 936
+1869 1165 1898
+1876 473 1739
+1897 1370 1320
+1278 1562 1899
+986 1621 1900
+1608 1115 1823
+1652 1693 1901
+479 1859 1795
+370 1362 636
+1759 46 1818
+1902 1903 908
+752 1895 1435
+1807 1376 880
+1904 900 1754
+72 913 1355
+1855 1877 987
+1737 371 1533
+1598 1861 1885
+1164 1520 1905
+1333 762 1906
+1708 1603 982
+1907 1908 1261
+1909 342 748
+619 1847 1840
+1910 981 1485
+296 1003 1837
+1905 1107 608
+337 1239 1911
+211 539 1833
+675 196 1103
+1700 922 1036
+1624 1351 1077
+1671 1152 1605
+30 1231 1747
+1678 570 1545
+1200 1705 263
+1912 1426 405
+1891 651 1913
+1092 1516 1868
+1866 1914 1602
+1915 316 1916
+1215 1917 1528
+1918 1736 948
+1907 1140 1919
+1329 1683 1465
+1437 952 1578
+1864 1832 1871
+1213 141 1920
+1477 623 1921
+1922 1923 1400
+1656 348 1167
+626 930 1924
+1901 1925 828
+907 1667 588
+1738 1828 1048
+896 1723 1493
+1914 314 1211
+1926 98 169
+1467 876 1719
+1790 1927 1928
+1854 1722 1464
+121 994 791
+272 1929 1930
+1931 698 1557
+254 206 1704
+1701 1660 1194
+1323 644 1018
+1786 1932 1933
+1573 937 1651
+1649 51 1486
+1815 246 742
+751 1680 521
+1934 1917 1353
+1768 1274 1873
+1831 1803 1912
+537 610 108
+821 1776 1894
+1835 574 1935
+1474 1830 1936
+556 198 60
+1937 1742 1938
+221 1939 89
+332 1161 145
+939 1744 544
+1420 1368 935
+1940 658 195
+1787 1022 591
+1941 1853 1373
+1316 1939 1234
+720 1034 399
+1340 392 1459
+1938 812 1568
+1159 1446 852
+1942 1889 562
+1774 1943 1441
+516 44 1142
+758 1111 1942
+1770 234 1922
+731 1944 237
+1443 1451 1186
+1808 962 1346
+1245 823 704
+1872 760 1277
+976 1173 166
+892 1481 132
+240 861 214
+1208 1233 462
+656 1207 1177
+1892 1945 444
+1926 1707 1910
+1880 1946 526
+933 960 1947
+1948 870 810
+1826 1949 726
+1950 517 1141
+1951 1417 70
+23 1288 745
+846 919 865
+1571 1734 309
+185 635 631
+884 639 725
+146 1324 406
+1741 1952 1717
+1883 1890 701
+1584 1618 1663
+1909 224 1953
+860 633 1030
+1874 1279 650
+1954 1955 1078
+1577 366 1699
+183 119 1321
+1192 1726 1848
+1181 843 1940
+1956 359 1764
+1957 144 1517
+154 1958 953
+1924 1919 49
+1710 1959 1721
+1379 112 236
+1960 350 1214
+1961 1041 1255
+1733 1247 1962
+1341 1352 518
+197 1246 601
+203 1881 1291
+782 1653 1963
+1695 1524 1959
+1918 1044 1953
+559 200 1842
+1773 1505 1518
+1616 954 1785
+249 217 1943
+1896 878 1964
+1237 233 1581
+1521 1778 1129
+1402 252 898
+1965 1966 1113
+1967 1531 1382
+1968 1259 1749
+446 1569 1969
+1296 739 684
+363 1799 1674
+255 692 740
+1692 882 1654
+567 243 1550
+777 1968 1071
+561 1615 756
+1572 575 1937
+1903 1766 1407
+848 1898 1306
+1094 380 1625
+750 1970 1535
+1196 1971 1935
+1549 270 1972
+1631 1008 1973
+1852 1974 1611
+1975 929 858
+1976 1923 722
+1977 1175 115
+1813 424 1925
+1863 1978 806
+1613 1544 1665
+1952 1867 1816
+1962 1740 1886
+1979 1980 1981
+1029 1976 260
+268 1422 404
+1586 1360 703
+1948 1957 1507
+1967 869 344
+384 1204 1579
+527 1761 1020
+1982 1254 139
+1964 1945 124
+1965 1272 891
+360 1558 283
+1395 35 1899
+1484 670 96
+1949 118 323
+1463 1878 1153
+1971 1977 1841
+1079 1715 1920
+1805 1752 1882
+1055 1911 1496
+1981 1123 1983
+957 1202 1884
+1219 1974 267
+1783 1984 1985
+1825 1024 116
+1408 489 1811
+1374 47 333
+1986 365 414
+1950 1570 432
+1829 2 983
+1564 1676 1383
+964 1980 796
+709 1820 1987
+16 1944 1988
+1236 1989 1955
+450 1990 1295
+805 1929 973
+1045 530 1753
+1851 1991 1788
+1992 1792 1993
+1819 716 1994
+1908 1975 1096
+1091 1982 1583
+1991 1995 1539
+1530 1552 1317
+1460 1147 1580
+1428 1888 1198
+330 1286 784
+809 1171 142
+303 1996 1916
+1860 1997 99
+1492 741 258
+747 484 1375
+1814 1157 1998
+1992 1452 667
+1765 1508 1434
+1575 1593 1145
+199 923 1986
+1328 757 647
+1969 1490 874
+1228 512 1645
+1711 653 1961
+483 1915 1690
+540 1902 1932
+1846 546 940
+1958 1713 1098
+729 1987 1698
+52 232 1606
+1934 832 1285
+1755 1931 1956
+1999 45 1623
+1062 1751 75
+925 1995 1913
+1960 1330 1415
+1638 1963 95
+818 691 1703
+1794 931 1709
+1951 1984 1494
+597 1406 911
+1856 1303 1970
+85 354 1432
+1906 595 1053
+1954 1865 262
+1821 454 423
+1979 1756 1763
+1730 1972 1587
+1994 718 833
+1632 1887 2000
+1858 920 1597
+1893 1006 1997
+1990 1016 1646
+1122 308 1366
+1930 1978 1688
+1350 1793 850
+1641 1966 408
+813 1743 1250
+1644 1138 251
+1849 522 1844
+1804 1267 1941
+1691 1993 1927
+1839 1928 1812
+708 1319 1988
+545 107 1327
+1760 816 1904
+606 1325 1567
+1779 819 1797
+620 1716 1989
+1983 1798 1594
+180 1750 1947
+1121 1998 1543
+1604 1862 2001
+1777 1946 1996
+557 159 1037
+386 1694 1412
+536 1392 1512
+1002 629 1781
+1843 1679 1985
+1999 1502 1197
+1622 1728 847
+1032 1973 1007
+78 456 1921
+984 1677 1936
+1227 168 1591
+1933 1789 1023
+1331 1643 379
+2000 148 1900
+1838 1536 770
+1672 2001 1599
+568 1712 1801
+8 1119 1456
diff --git a/test/boolean/loc1 b/test/boolean/surfaces/loc1
similarity index 100%
rename from test/boolean/loc1
rename to test/boolean/surfaces/loc1
diff --git a/test/boolean/loc2 b/test/boolean/surfaces/loc2
similarity index 100%
rename from test/boolean/loc2
rename to test/boolean/surfaces/loc2
diff --git a/test/boolean/p1 b/test/boolean/surfaces/p1
similarity index 100%
rename from test/boolean/p1
rename to test/boolean/surfaces/p1
diff --git a/test/boolean/p2 b/test/boolean/surfaces/p2
similarity index 100%
rename from test/boolean/p2
rename to test/boolean/surfaces/p2
diff --git a/test/boolean/surfaces/sphere.gts b/test/boolean/surfaces/sphere.gts
new file mode 100644
index 0000000..aff57b4
--- /dev/null
+++ b/test/boolean/surfaces/sphere.gts
@@ -0,0 +1,867 @@
+146 432 288
+0.05111 1.11177 1.5
+0.14496 1.02165 1.06982
+0 1.5 1.5
+0.20096 0.75 1.5
+0.05111 1.5 1.11177
+0.14496 1.02165 1.93018
+0.05111 1.5 1.88823
+0.37939 0.60236 1.06585
+0.05111 1.88823 1.5
+0.20096 1.5 0.75
+0.43934 0.43934 1.5
+0.36046 0.97447 0.67825
+0.37939 0.60236 1.93415
+0.14496 1.97835 1.06982
+0.20096 1.5 2.25
+0.36046 0.97447 2.32175
+0.14496 1.97835 1.93018
+0.43934 1.5 0.43934
+0.71275 0.29386 1.08111
+0.20096 2.25 1.5
+0.67842 0.55132 0.67842
+0.75 0.20096 1.5
+0.71275 0.29386 1.91889
+0.36046 2.02553 0.67825
+0.67825 0.97447 0.36046
+0.67842 0.55132 2.32158
+0.43934 1.5 2.56066
+0.36046 2.02553 2.32175
+0.37939 2.39764 1.06585
+0.67825 0.97447 2.63954
+0.37939 2.39764 1.93415
+0.75 1.5 0.20096
+0.43934 2.56066 1.5
+1.09911 0.11127 1.09911
+1.08111 0.29386 0.71275
+0.67825 2.02553 0.36046
+1.11177 0.05111 1.5
+1.06585 0.60236 0.37939
+1.09911 0.11127 1.90089
+1.08111 0.29386 2.28725
+0.75 1.5 2.79904
+0.67842 2.44868 0.67842
+1.06982 1.02165 0.14496
+0.67825 2.02553 2.63954
+1.06585 0.60236 2.6206
+0.67842 2.44868 2.32158
+0.71275 2.70614 1.08111
+1.11177 1.5 0.05111
+1.06982 1.02165 2.85504
+0.71275 2.70614 1.91889
+0.75 2.79904 1.5
+1.06982 1.97835 0.14496
+1.5 0.05111 1.11177
+1.5 0 1.5
+1.5 0.20096 0.75
+1.5 0.05111 1.88823
+1.5 0.43934 0.43934
+1.11177 1.5 2.94889
+1.06585 2.39764 0.37939
+1.5 0.20096 2.25
+1.5 0.75 0.20096
+1.06982 1.97835 2.85504
+1.5 0.43934 2.56066
+1.5 1.11177 0.05111
+1.08111 2.70614 0.71275
+1.06585 2.39764 2.6206
+1.5 0.75 2.79904
+1.5 1.5 0
+1.09911 2.88873 1.09911
+1.08111 2.70614 2.28725
+1.09911 2.88873 1.90089
+1.11177 2.94889 1.5
+1.5 1.11177 2.94889
+1.5 1.88823 0.05111
+1.88823 0.05111 1.5
+1.90089 0.11127 1.09911
+1.91889 0.29386 0.71275
+1.90089 0.11127 1.90089
+1.5 1.5 3
+1.5 2.25 0.20096
+1.93415 0.60236 0.37939
+1.91889 0.29386 2.28725
+1.5 1.88823 2.94889
+1.5 2.56066 0.43934
+1.93018 1.02165 0.14496
+1.5 2.25 2.79904
+1.5 2.79904 0.75
+1.93415 0.60236 2.6206
+1.88823 1.5 0.05111
+1.5 2.56066 2.56066
+1.5 2.94889 1.11177
+1.5 2.79904 2.25
+1.5 3 1.5
+1.5 2.94889 1.88823
+1.93018 1.02165 2.85504
+2.25 0.20096 1.5
+2.28725 0.29386 1.08111
+1.93018 1.97835 0.14496
+1.88823 1.5 2.94889
+2.28725 0.29386 1.91889
+2.32158 0.55132 0.67842
+1.93415 2.39764 0.37939
+2.32175 0.97447 0.36046
+1.93018 1.97835 2.85504
+2.32158 0.55132 2.32158
+2.25 1.5 0.20096
+1.91889 2.70614 0.71275
+1.90089 2.88873 1.09911
+1.93415 2.39764 2.6206
+1.88823 2.94889 1.5
+2.32175 0.97447 2.63954
+1.91889 2.70614 2.28725
+1.90089 2.88873 1.90089
+2.56066 0.43934 1.5
+2.25 1.5 2.79904
+2.6206 0.60236 1.06585
+2.32175 2.02553 0.36046
+2.6206 0.60236 1.93415
+2.63954 0.97447 0.67825
+2.56066 1.5 0.43934
+2.32158 2.44868 0.67842
+2.32175 2.02553 2.63954
+2.63954 0.97447 2.32175
+2.28725 2.70614 1.08111
+2.25 2.79904 1.5
+2.32158 2.44868 2.32158
+2.79904 0.75 1.5
+2.28725 2.70614 1.91889
+2.56066 1.5 2.56066
+2.85504 1.02165 1.06982
+2.63954 2.02553 0.67825
+2.79904 1.5 0.75
+2.85504 1.02165 1.93018
+2.6206 2.39764 1.06585
+2.63954 2.02553 2.32175
+2.56066 2.56066 1.5
+2.79904 1.5 2.25
+2.94889 1.11177 1.5
+2.6206 2.39764 1.93415
+2.94889 1.5 1.11177
+2.85504 1.97835 1.06982
+2.94889 1.5 1.88823
+2.79904 2.25 1.5
+3 1.5 1.5
+2.85504 1.97835 1.93018
+2.94889 1.88823 1.5
+68 64
+64 48
+48 68
+68 74
+74 89
+89 68
+48 74
+89 64
+48 43
+43 32
+32 48
+61 43
+43 64
+64 61
+74 52
+52 80
+80 74
+85 64
+89 85
+48 52
+32 52
+106 85
+89 106
+74 98
+98 89
+85 61
+80 98
+98 106
+38 25
+25 43
+43 38
+61 38
+117 106
+98 117
+102 117
+98 102
+25 32
+80 102
+59 80
+52 59
+106 103
+103 85
+81 61
+85 81
+52 36
+36 59
+103 81
+32 36
+120 103
+106 120
+59 84
+84 80
+84 102
+117 120
+81 57
+57 61
+57 38
+25 18
+18 32
+18 36
+18 24
+24 36
+21 12
+12 25
+25 21
+131 120
+117 131
+121 131
+117 121
+12 18
+101 81
+103 101
+103 119
+119 101
+24 42
+42 36
+120 119
+102 121
+42 59
+38 21
+57 35
+35 38
+35 21
+107 121
+102 107
+84 107
+77 57
+81 77
+101 77
+65 84
+59 65
+42 65
+10 24
+18 10
+87 107
+84 87
+77 55
+55 57
+65 87
+132 119
+120 132
+12 10
+131 132
+55 35
+116 101
+119 116
+29 42
+24 29
+130 116
+119 130
+132 130
+14 29
+24 14
+10 14
+131 134
+134 141
+141 131
+121 134
+2 10
+12 2
+12 8
+8 2
+141 132
+21 8
+124 134
+121 124
+35 19
+19 21
+19 8
+107 124
+47 65
+42 47
+29 47
+97 77
+101 97
+116 97
+76 55
+77 76
+87 108
+108 107
+97 76
+55 34
+34 35
+108 124
+69 87
+65 69
+47 69
+34 19
+140 130
+132 140
+76 53
+53 55
+91 108
+87 91
+141 140
+69 91
+53 34
+5 14
+10 5
+2 5
+14 20
+20 29
+4 2
+8 4
+130 127
+127 116
+19 11
+11 8
+11 4
+134 136
+136 143
+143 134
+33 47
+29 33
+124 136
+143 141
+114 97
+116 114
+127 114
+20 33
+4 1
+1 2
+9 20
+14 9
+5 9
+140 138
+138 130
+138 127
+1 5
+143 146
+146 141
+146 140
+19 22
+22 11
+96 76
+97 96
+51 69
+47 51
+124 125
+125 136
+33 51
+34 22
+108 125
+114 96
+75 53
+76 75
+72 91
+69 72
+34 37
+37 22
+53 37
+91 110
+110 108
+110 125
+51 72
+96 75
+53 54
+54 37
+91 93
+93 110
+146 144
+144 140
+72 93
+1 3
+3 5
+144 138
+75 54
+3 9
+145 146
+143 145
+139 145
+143 139
+39 22
+37 39
+142 144
+146 142
+145 142
+23 11
+22 23
+138 142
+142 133
+133 138
+39 23
+56 37
+54 56
+23 13
+13 11
+127 133
+133 118
+118 127
+72 94
+94 93
+51 71
+71 72
+118 100
+100 114
+114 118
+136 139
+136 128
+128 139
+71 94
+56 39
+33 50
+50 51
+50 71
+125 128
+125 113
+113 128
+9 17
+17 20
+17 31
+31 20
+100 78
+78 96
+96 100
+110 113
+110 94
+94 113
+13 4
+13 6
+6 4
+78 56
+56 75
+75 78
+31 50
+33 31
+3 7
+7 9
+1 7
+6 7
+1 6
+7 17
+71 92
+92 94
+145 137
+137 142
+15 17
+7 15
+78 60
+60 56
+92 113
+6 15
+137 133
+60 39
+60 40
+40 39
+40 23
+92 112
+112 113
+112 128
+82 60
+78 82
+100 82
+50 70
+70 71
+70 92
+112 126
+126 128
+26 13
+23 26
+40 26
+126 139
+46 70
+50 46
+105 82
+100 105
+118 105
+31 46
+15 28
+28 17
+137 123
+123 133
+28 31
+123 118
+135 137
+145 135
+16 15
+6 16
+139 135
+13 16
+26 16
+123 105
+28 46
+126 135
+129 123
+137 129
+90 112
+92 90
+16 27
+27 15
+135 129
+63 40
+60 63
+70 90
+27 28
+82 63
+46 66
+66 70
+45 26
+40 45
+88 63
+82 88
+90 109
+109 112
+63 45
+66 90
+109 126
+105 88
+44 66
+46 44
+45 30
+30 26
+122 135
+126 122
+109 122
+111 88
+105 111
+123 111
+30 16
+28 44
+122 129
+30 27
+129 111
+27 44
+30 41
+41 27
+41 44
+66 86
+86 90
+67 45
+63 67
+115 111
+129 115
+122 115
+86 109
+88 67
+44 62
+62 66
+104 122
+109 104
+86 104
+49 30
+45 49
+111 95
+95 88
+62 86
+95 67
+67 49
+104 115
+115 95
+41 62
+49 41
+104 99
+99 115
+99 95
+62 83
+83 86
+95 73
+73 67
+49 58
+58 41
+83 104
+58 62
+73 49
+83 99
+99 73
+58 83
+73 58
+58 79
+79 83
+99 79
+79 73
+1 2 3 
+4 5 6 
+7 4 3 
+8 1 6 
+9 10 11 
+12 13 14 
+15 16 17 
+18 8 19 
+15 7 20 
+21 20 11 
+22 19 23 
+5 24 25 
+18 26 14 
+27 24 17 
+25 28 23 
+2 13 9 
+29 30 31 
+12 32 31 
+33 28 34 
+35 34 36 
+37 10 30 
+27 38 36 
+39 16 40 
+22 41 42 
+43 26 44 
+45 46 40 
+42 47 44 
+21 48 45 
+49 41 50 
+39 51 52 
+53 38 52 
+33 54 50 
+43 55 56 
+57 32 56 
+37 58 59 
+60 48 59 
+60 61 62 
+63 64 65 
+66 54 67 
+68 67 69 
+70 58 64 
+71 47 72 
+73 74 72 
+62 75 76 
+49 77 73 
+35 78 69 
+79 46 76 
+29 80 65 
+57 81 82 
+83 80 82 
+84 78 85 
+53 86 85 
+87 55 88 
+71 89 88 
+90 51 91 
+79 92 91 
+93 61 94 
+95 86 96 
+87 97 98 
+90 99 96 
+100 77 101 
+70 102 94 
+66 103 101 
+104 81 98 
+105 74 106 
+107 75 108 
+109 106 110 
+100 111 110 
+112 108 113 
+93 114 113 
+115 116 117 
+68 118 115 
+119 102 120 
+121 122 120 
+123 103 117 
+63 124 121 
+125 118 126 
+83 127 128 
+129 124 128 
+84 130 126 
+131 92 132 
+107 133 132 
+134 89 135 
+105 136 135 
+137 97 138 
+95 139 140 
+134 141 138 
+104 142 143 
+144 130 140 
+145 99 146 
+131 147 146 
+148 127 143 
+149 111 150 
+137 151 152 
+153 139 154 
+123 155 150 
+145 156 154 
+157 142 152 
+158 114 159 
+119 160 159 
+112 161 162 
+163 122 164 
+109 165 166 
+129 167 168 
+168 169 164 
+170 171 172 
+173 133 174 
+125 175 170 
+176 116 172 
+177 136 178 
+179 178 166 
+180 174 162 
+163 181 182 
+183 161 184 
+158 185 184 
+149 186 187 
+188 165 187 
+189 160 182 
+176 190 191 
+192 155 191 
+193 194 167 
+195 141 196 
+197 147 198 
+199 200 175 
+201 198 173 
+148 202 193 
+144 203 199 
+204 196 177 
+205 151 206 
+207 156 208 
+209 210 202 
+157 211 209 
+153 212 213 
+213 214 203 
+215 208 197 
+216 206 195 
+217 218 211 
+219 220 212 
+192 221 222 
+223 219 207 
+189 224 225 
+226 186 222 
+227 217 205 
+228 185 225 
+229 190 230 
+231 230 232 
+233 210 234 
+235 221 236 
+237 236 229 
+238 194 239 
+240 241 242 
+226 235 240 
+233 243 239 
+244 218 245 
+238 246 247 
+248 249 250 
+188 242 248 
+223 251 252 
+215 253 254 
+255 256 257 
+232 171 258 
+259 260 258 
+261 251 254 
+244 262 234 
+179 250 257 
+201 263 264 
+265 253 264 
+259 200 266 
+267 268 266 
+183 269 270 
+270 271 272 
+273 274 275 
+267 214 276 
+277 278 276 
+279 169 247 
+277 220 252 
+204 256 275 
+280 281 279 
+282 283 284 
+285 263 286 
+228 287 288 
+216 274 284 
+227 283 245 
+287 224 289 
+290 289 291 
+180 272 286 
+291 181 281 
+288 292 269 
+261 293 294 
+237 295 296 
+297 292 298 
+282 299 300 
+301 278 294 
+290 302 298 
+303 241 296 
+304 262 300 
+304 305 306 
+307 243 306 
+301 308 309 
+310 268 309 
+311 299 312 
+273 313 312 
+265 314 315 
+316 293 315 
+310 317 318 
+319 246 320 
+307 321 320 
+322 260 318 
+323 314 324 
+325 313 326 
+255 327 326 
+285 328 324 
+297 329 330 
+303 331 332 
+333 271 330 
+334 249 332 
+335 295 336 
+337 302 338 
+231 339 336 
+280 340 338 
+319 341 340 
+342 327 334 
+343 328 333 
+322 344 339 
+345 331 346 
+347 308 348 
+337 349 350 
+335 351 346 
+352 305 353 
+316 354 348 
+355 329 350 
+311 356 353 
+323 357 358 
+359 321 360 
+361 356 362 
+347 363 364 
+352 365 360 
+366 354 358 
+367 317 364 
+325 368 362 
+369 357 370 
+359 371 372 
+373 344 374 
+367 375 374 
+376 368 377 
+342 378 377 
+379 341 372 
+343 380 370 
+381 351 373 
+382 349 379 
+345 383 378 
+355 384 380 
+382 385 386 
+387 384 386 
+366 388 389 
+390 365 391 
+392 383 393 
+381 394 393 
+395 363 389 
+361 396 391 
+369 397 398 
+399 375 400 
+395 401 400 
+402 371 403 
+376 404 405 
+406 388 398 
+407 396 405 
+390 408 403 
+409 394 399 
+392 410 404 
+387 411 397 
+412 385 402 
+409 413 414 
+415 410 414 
+406 416 417 
+407 418 419 
+412 420 421 
+422 401 417 
+423 411 421 
+424 408 419 
+425 413 422 
+415 426 418 
+423 427 416 
+428 420 424 
+427 429 430 
+426 431 432 
+429 428 432 
+431 425 430 
diff --git a/test/boolean/sponge b/test/boolean/surfaces/sponge
similarity index 100%
rename from test/boolean/sponge
rename to test/boolean/surfaces/sponge
diff --git a/test/boolean/t1 b/test/boolean/surfaces/t1
similarity index 100%
rename from test/boolean/t1
rename to test/boolean/surfaces/t1
diff --git a/test/boolean/t10 b/test/boolean/surfaces/t10
similarity index 100%
rename from test/boolean/t10
rename to test/boolean/surfaces/t10
diff --git a/test/boolean/t11 b/test/boolean/surfaces/t11
similarity index 100%
rename from test/boolean/t11
rename to test/boolean/surfaces/t11
diff --git a/test/boolean/t9 b/test/boolean/surfaces/t12
similarity index 53%
copy from test/boolean/t9
copy to test/boolean/surfaces/t12
index d2ddf99..d71ceac 100644
--- a/test/boolean/t9
+++ b/test/boolean/surfaces/t12
@@ -1,12 +1,12 @@
 4 5 2
 0 -1 0 D
-0 0.5 -1 E
-0 0.5 1 F
-0 1 0 G
+0 0 -1 E
+0 0 1 F
+1 0.5 0 G
 1 2 DE
-2 3 EF
+2 3 EF 
 3 1 FD
 4 2 GE
 4 3 GF
 1 2 3 DEF
-5 2 4 EGF
+5 2 4 GEF
diff --git a/test/boolean/t9 b/test/boolean/surfaces/t13
similarity index 60%
copy from test/boolean/t9
copy to test/boolean/surfaces/t13
index d2ddf99..05bce9b 100644
--- a/test/boolean/t9
+++ b/test/boolean/surfaces/t13
@@ -1,12 +1,12 @@
 4 5 2
 0 -1 0 D
-0 0.5 -1 E
-0 0.5 1 F
-0 1 0 G
+0 0 -1 E
+0 0 1 F
+0 1.5 0 G
 1 2 DE
 2 3 EF
 3 1 FD
 4 2 GE
 4 3 GF
 1 2 3 DEF
-5 2 4 EGF
+5 2 4 GEF
diff --git a/test/boolean/t14 b/test/boolean/surfaces/t14
similarity index 100%
rename from test/boolean/t14
rename to test/boolean/surfaces/t14
diff --git a/test/boolean/t15 b/test/boolean/surfaces/t15
similarity index 100%
rename from test/boolean/t15
rename to test/boolean/surfaces/t15
diff --git a/test/boolean/t16 b/test/boolean/surfaces/t16
similarity index 100%
rename from test/boolean/t16
rename to test/boolean/surfaces/t16
diff --git a/test/boolean/t17 b/test/boolean/surfaces/t17
similarity index 100%
rename from test/boolean/t17
rename to test/boolean/surfaces/t17
diff --git a/test/boolean/t18 b/test/boolean/surfaces/t18
similarity index 100%
rename from test/boolean/t18
rename to test/boolean/surfaces/t18
diff --git a/test/boolean/t19 b/test/boolean/surfaces/t19
similarity index 100%
rename from test/boolean/t19
rename to test/boolean/surfaces/t19
diff --git a/test/boolean/surfaces/t2 b/test/boolean/surfaces/t2
new file mode 100644
index 0000000..0c76302
--- /dev/null
+++ b/test/boolean/surfaces/t2
@@ -0,0 +1,8 @@
+3 3 1
+0 -1 0 E
+0 0.5 -1 F
+0 0.5 1 G
+1 2 EF
+2 3 FG
+3 1 GE
+1 2 3 EFG
diff --git a/test/boolean/t20 b/test/boolean/surfaces/t20
similarity index 100%
rename from test/boolean/t20
rename to test/boolean/surfaces/t20
diff --git a/test/boolean/t21 b/test/boolean/surfaces/t21
similarity index 100%
rename from test/boolean/t21
rename to test/boolean/surfaces/t21
diff --git a/test/boolean/t22 b/test/boolean/surfaces/t22
similarity index 100%
rename from test/boolean/t22
rename to test/boolean/surfaces/t22
diff --git a/test/boolean/t23 b/test/boolean/surfaces/t23
similarity index 100%
rename from test/boolean/t23
rename to test/boolean/surfaces/t23
diff --git a/test/boolean/t24 b/test/boolean/surfaces/t24
similarity index 100%
rename from test/boolean/t24
rename to test/boolean/surfaces/t24
diff --git a/test/boolean/t25 b/test/boolean/surfaces/t25
similarity index 100%
rename from test/boolean/t25
rename to test/boolean/surfaces/t25
diff --git a/test/boolean/t26 b/test/boolean/surfaces/t26
similarity index 100%
rename from test/boolean/t26
rename to test/boolean/surfaces/t26
diff --git a/test/boolean/t27 b/test/boolean/surfaces/t27
similarity index 100%
rename from test/boolean/t27
rename to test/boolean/surfaces/t27
diff --git a/test/boolean/t28 b/test/boolean/surfaces/t28
similarity index 100%
rename from test/boolean/t28
rename to test/boolean/surfaces/t28
diff --git a/test/boolean/surfaces/t29 b/test/boolean/surfaces/t29
new file mode 100644
index 0000000..97c101f
--- /dev/null
+++ b/test/boolean/surfaces/t29
@@ -0,0 +1,12 @@
+4 5 2
+-1 0 0 A
+0 0 0 B
+0 -1 0 C
+0 0 1 D
+1 2 AB
+2 4 BD
+4 1 DA
+2 3 BC
+3 4 CD
+1 2 3 ABD
+4 5 2 BCD
diff --git a/test/boolean/t3 b/test/boolean/surfaces/t3
similarity index 100%
rename from test/boolean/t3
rename to test/boolean/surfaces/t3
diff --git a/test/boolean/surfaces/t30 b/test/boolean/surfaces/t30
new file mode 100644
index 0000000..24078c0
--- /dev/null
+++ b/test/boolean/surfaces/t30
@@ -0,0 +1,12 @@
+4 5 2
+1 0 0 F
+0 0 0 G
+0 1 0 E
+0 0 1 H
+1 2 FG
+2 4 GH
+4 1 HF
+2 3 GE
+3 4 EH
+1 2 3 FGH
+4 5 2 GEH
diff --git a/test/boolean/surfaces/t31 b/test/boolean/surfaces/t31
new file mode 100644
index 0000000..50b173b
--- /dev/null
+++ b/test/boolean/surfaces/t31
@@ -0,0 +1,12 @@
+4 5 2
+-1 0 0 A
+1 0 0 B
+0 1 0 C
+0 -1 0 D
+1 2 AB
+2 3 BC
+3 1 CA
+1 4 AD
+4 2 DB
+1 2 3 ABC
+4 5 1 ADB
diff --git a/test/boolean/surfaces/t32 b/test/boolean/surfaces/t32
new file mode 100644
index 0000000..15f3e83
--- /dev/null
+++ b/test/boolean/surfaces/t32
@@ -0,0 +1,8 @@
+3 3 1
+-0.5 0 -1 E
+0.5 0 -1 F
+0 0 1 G
+1 2 EF
+2 3 FG
+3 1 GE
+1 2 3 EFG
diff --git a/test/boolean/t9 b/test/boolean/surfaces/t4
similarity index 80%
copy from test/boolean/t9
copy to test/boolean/surfaces/t4
index d2ddf99..4246db8 100644
--- a/test/boolean/t9
+++ b/test/boolean/surfaces/t4
@@ -2,11 +2,11 @@
 0 -1 0 D
 0 0.5 -1 E
 0 0.5 1 F
-0 1 0 G
+0 1.5 0 G
 1 2 DE
 2 3 EF
 3 1 FD
 4 2 GE
 4 3 GF
 1 2 3 DEF
-5 2 4 EGF
+5 2 4 GEF
diff --git a/test/boolean/t5 b/test/boolean/surfaces/t5
similarity index 100%
rename from test/boolean/t5
rename to test/boolean/surfaces/t5
diff --git a/test/boolean/t7 b/test/boolean/surfaces/t6
similarity index 70%
copy from test/boolean/t7
copy to test/boolean/surfaces/t6
index 1addfd9..2b2f428 100644
--- a/test/boolean/t7
+++ b/test/boolean/surfaces/t6
@@ -1,8 +1,8 @@
 3 3 1
 0 0.4 0 D
 0 0.6 -1 E
-0 0.5 0 F
+0 0.5 1 F
 1 2 DE
 2 3 EF
 3 1 FD
-1 2 3 EFD
+1 2 3 DEF
diff --git a/test/boolean/t7 b/test/boolean/surfaces/t7
similarity index 100%
rename from test/boolean/t7
rename to test/boolean/surfaces/t7
diff --git a/test/boolean/t9 b/test/boolean/surfaces/t9
similarity index 100%
rename from test/boolean/t9
rename to test/boolean/surfaces/t9
diff --git a/test/boolean/t12 b/test/boolean/t12
deleted file mode 100644
index f0ba8bc..0000000
--- a/test/boolean/t12
+++ /dev/null
@@ -1,12 +0,0 @@
-4 5 2
-0 -1 0
-0 0 -1
-0 0 1
-1 0.5 0
-1 2
-2 3
-3 1
-4 2
-4 3
-1 2 3
-5 2 4
diff --git a/test/boolean/t13 b/test/boolean/t13
deleted file mode 100644
index 50dba54..0000000
--- a/test/boolean/t13
+++ /dev/null
@@ -1,12 +0,0 @@
-4 5 2
-0 -1 0
-0 0 -1
-0 0 1
-0 1.5 0
-1 2
-2 3
-3 1
-4 2
-4 3
-1 2 3
-5 2 4
diff --git a/test/boolean/t2 b/test/boolean/t2
deleted file mode 100644
index 9417788..0000000
--- a/test/boolean/t2
+++ /dev/null
@@ -1,8 +0,0 @@
-3 3 1
-0 -1 0
-0 0.5 -1
-0 0.5 1
-1 2
-2 3
-3 1
-1 2 3
diff --git a/test/boolean/t4 b/test/boolean/t4
deleted file mode 100644
index e156042..0000000
--- a/test/boolean/t4
+++ /dev/null
@@ -1,12 +0,0 @@
-4 5 2
-0 -1 0
-0 0.5 -1
-0 0.5 1
-0 1.5 0
-1 2
-2 3
-3 1
-4 2
-4 3
-1 2 3
-5 2 4
diff --git a/test/boolean/t6 b/test/boolean/t6
deleted file mode 100644
index c0bc7f4..0000000
--- a/test/boolean/t6
+++ /dev/null
@@ -1,8 +0,0 @@
-3 3 1
-0 0.4 0
-0 0.6 -1
-0 0.5 1
-1 2
-2 3
-3 1
-1 2 3
diff --git a/test/boolean/test.sh b/test/boolean/test.sh
new file mode 100755
index 0000000..bd8220b
--- /dev/null
+++ b/test/boolean/test.sh
@@ -0,0 +1,100 @@
+#! /bin/sh
+
+rm -f errors
+if awk '{
+    if (NF >= 2 && NF <= 3 && substr ($1, 1, 1) != "#") {
+	summary = $1 " " $2;
+	command = "./set surfaces/" $1 " surfaces/" $2;
+	if (NF == 3 && $3 == "XFAIL")
+	    xfailed = 1;
+	else
+	    xfailed = 0;
+	setfailed = 0;
+	if (system (command " > /dev/null 2> log")) {
+	    system ("echo \"======== set " summary " ========\" >> errors; cat log >> errors");
+	    if (xfailed)
+		print "XFAIL: set " summary;
+	    else {
+		print "FAIL: set " summary;
+		failed++;
+	    }
+	    setfailed = 1;
+	}
+	else {
+	    if (system ("grep CRITICAL log > /dev/null") &&
+		!system ("grep \"duplicate edges: 0\" log > /dev/null")) {
+		if (xfailed)
+		    print "XPASS: set " summary;
+		else
+		    print "PASS: set " summary;
+	    }
+	    else {
+		system ("echo \"======== set " summary " ========\" >> errors; cat log >> errors");
+		if (xfailed)
+		    print "XFAIL: set " summary;
+		else {
+		    print "FAIL: set " summary;
+		    failed++;
+		}
+		setfailed = 1;
+	    }
+	}
+	total++;
+	if (!setfailed &&
+	    !system ("../../tools/gtscheck -v 2> log < surfaces/" $1) &&
+	    !system ("grep \"boundary edges: 0\" log > /dev/null") &&
+	    !system ("../../tools/gtscheck -v 2> log < surfaces/" $2) &&
+	    !system ("grep \"boundary edges: 0\" log > /dev/null")) {
+	    command = "./boole surfaces/" $1 " surfaces/" $2;
+	    if (system (command " > /dev/null 2> log")) {
+		system ("echo \"======== boole " summary " ========\" >> errors; cat log >> errors");
+		if (xfailed)
+		    print "XFAIL: boole " summary;
+		else {
+		    print "FAIL: boole " summary;
+		    failed++;
+		}
+	    }
+	    else {
+		if (system ("grep CRITICAL log > /dev/null") &&
+		    !system ("grep \"duplicate edges: 0\" log > /dev/null")) {
+		    if (xfailed)
+			print "XPASS: boole " summary;
+		    else
+			print "PASS: boole " summary;
+		}
+		else {
+		    system ("echo \"======== boole " summary " ========\" >> errors; cat log >> errors");
+		    if (xfailed)
+			print "XFAIL: boole " summary;
+		    else {
+			print "FAIL: boole " summary;
+			failed++;
+		    }
+		}
+	    }
+	    total++;
+        }
+    }
+}
+END {
+    if (failed > 0)
+	msg = failed " of " total " tests failed";
+    else
+	msg = "All " total " tests passed";
+    line = msg;
+    gsub (".", "=", line);
+    print line;
+    print msg;
+    print line;
+    if (failed > 0)
+	exit (1);
+    else
+	exit (0);
+}' < tests; then
+    ret=0;
+else
+    ret=1;
+fi
+rm -f log
+exit $ret;
diff --git a/test/boolean/tests b/test/boolean/tests
new file mode 100644
index 0000000..25b9f04
--- /dev/null
+++ b/test/boolean/tests
@@ -0,0 +1,112 @@
+# simple degenerate cases
+t1 t2
+t1 t3
+t1 t4
+t1 t5
+t1 t6
+t1 t7
+t1 t9
+t1 t10
+t1 t11
+t1 t12
+t1 t13
+t14 t15
+t11 t16
+t17 t18
+t19 t20
+t19 t21
+t31 t32
+
+# Various cubes
+t1 t22
+t1 t23
+t1 t24
+t27 t28
+cube cube1
+cube cube2
+cube cube5
+
+# touching corner
+t29 t30
+
+# cube and sligthly rotated cube
+cube cube8
+
+# cubes just touching through one edge (like t29 t30)
+cube9 cube10
+
+# Floating point problems
+t25 t26
+
+# Coincident faces
+cube cube4
+
+# Rotated cube cube1 (touching faces)
+cube6 cube7
+
+# Coincident faces (tetrahedra by T. Binder)
+loc1 loc2
+
+# Coincident faces (again by T. Binder)
+p1 p2
+
+# Menger sponge (by B. Petit)
+sponge cutter
+
+# cylinders (by Darie Aron)
+1.gts 2.gts
+
+# horse and sligthly rotated horse
+horse5.gts horse6.gts
+
+# simplified horse
+horse4.gts horse5.gts XFAIL
+
+# identical surfaces
+horse5.gts horse5.gts XFAIL
+sphere.gts sphere.gts
+
+# tetrahedra by Wayne Gramlich
+# looks like it works but visual inspection shows it doesn't
+# (now it should work: Sept 2003)
+a8.gts b8.gts
+a9.gts b9.gts
+a10.gts b10.gts
+a23.gts b23.gts
+a24.gts b24.gts
+a25.gts b25.gts
+
+# Spheres by Romain Behar
+gts-crash.gts gts-crash1.gts
+
+# Big tests
+
+# DTM and buildings
+# illustrates problems with interior loops
+buildings wcc3
+buildings wcc2
+buildings wcc1
+buildings wcc
+
+# gerris failed test cases
+gerris.gts gerris.1
+gerris.gts gerris.2
+gerris.gts gerris.3
+gerris.gts gerris.4
+gerris.gts gerris.5
+gerris.gts gerris.6
+gerris.gts gerris.7
+gerris.gts gerris.8
+gerris.gts gerris.9
+gerris.gts gerris.10
+gerris.gts gerris.11
+gerris.gts gerris.12
+gerris.gts gerris.13
+gerris.gts gerris.14
+gerris.gts gerris.15
+gerris.gts gerris.16
+gerris.gts gerris.17
+gerris.gts gerris.18
+gerris.gts gerris.19
+gerris.gts gerris.20
+gerris.gts gerris.21
diff --git a/test/coarsen/Makefile.in b/test/coarsen/Makefile.in
index 80bb1fd..4311fa1 100644
--- a/test/coarsen/Makefile.in
+++ b/test/coarsen/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ../..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,25 +73,88 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir) 	 -DG_LOG_DOMAIN=\"Gts-test\"
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
+	 -DG_LOG_DOMAIN=\"Gts-test\"
 
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
@@ -101,98 +164,132 @@ check_PROGRAMS = cartesian c1 c2 c3 double_prism
 TESTS = flat.sh flat1.sh
 
 EXTRA_DIST = flat.sh flat1.sh
+subdir = test/coarsen
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../../config.h
-CONFIG_CLEAN_FILES = 
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I../..
-LIBS = @LIBS@
-cartesian_SOURCES = cartesian.c
-cartesian_OBJECTS =  cartesian.o
-cartesian_LDADD = $(LDADD)
-cartesian_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-cartesian_LDFLAGS = 
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+check_PROGRAMS = cartesian$(EXEEXT) c1$(EXEEXT) c2$(EXEEXT) c3$(EXEEXT) \
+	double_prism$(EXEEXT)
 c1_SOURCES = c1.c
-c1_OBJECTS =  c1.o
+c1_OBJECTS = c1.$(OBJEXT)
 c1_LDADD = $(LDADD)
-c1_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-c1_LDFLAGS = 
+c1_DEPENDENCIES = $(top_builddir)/src/libgts.la
+c1_LDFLAGS =
 c2_SOURCES = c2.c
-c2_OBJECTS =  c2.o
+c2_OBJECTS = c2.$(OBJEXT)
 c2_LDADD = $(LDADD)
-c2_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-c2_LDFLAGS = 
+c2_DEPENDENCIES = $(top_builddir)/src/libgts.la
+c2_LDFLAGS =
 c3_SOURCES = c3.c
-c3_OBJECTS =  c3.o
+c3_OBJECTS = c3.$(OBJEXT)
 c3_LDADD = $(LDADD)
-c3_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-c3_LDFLAGS = 
+c3_DEPENDENCIES = $(top_builddir)/src/libgts.la
+c3_LDFLAGS =
+cartesian_SOURCES = cartesian.c
+cartesian_OBJECTS = cartesian.$(OBJEXT)
+cartesian_LDADD = $(LDADD)
+cartesian_DEPENDENCIES = $(top_builddir)/src/libgts.la
+cartesian_LDFLAGS =
 double_prism_SOURCES = double_prism.c
-double_prism_OBJECTS =  double_prism.o
+double_prism_OBJECTS = double_prism.$(OBJEXT)
 double_prism_LDADD = $(LDADD)
-double_prism_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-double_prism_LDFLAGS = 
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+double_prism_DEPENDENCIES = $(top_builddir)/src/libgts.la
+double_prism_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/c1.Po ./$(DEPDIR)/c2.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/c3.Po ./$(DEPDIR)/cartesian.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/double_prism.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON =  Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = c1.c c2.c c3.c cartesian.c double_prism.c
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+SOURCES = c1.c c2.c c3.c cartesian.c double_prism.c
 
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = cartesian.c c1.c c2.c c3.c double_prism.c
-OBJECTS = cartesian.o c1.o c2.o c3.o double_prism.o
+all: all-am
 
-all: all-redirect
 .SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps test/coarsen/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-checkPROGRAMS:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  test/coarsen/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 
 clean-checkPROGRAMS:
-	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
-
-distclean-checkPROGRAMS:
-
-maintainer-clean-checkPROGRAMS:
-
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
-
-.S.o:
-	$(COMPILE) -c $<
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+c1$(EXEEXT): $(c1_OBJECTS) $(c1_DEPENDENCIES) 
+	@rm -f c1$(EXEEXT)
+	$(LINK) $(c1_LDFLAGS) $(c1_OBJECTS) $(c1_LDADD) $(LIBS)
+c2$(EXEEXT): $(c2_OBJECTS) $(c2_DEPENDENCIES) 
+	@rm -f c2$(EXEEXT)
+	$(LINK) $(c2_LDFLAGS) $(c2_OBJECTS) $(c2_LDADD) $(LIBS)
+c3$(EXEEXT): $(c3_OBJECTS) $(c3_DEPENDENCIES) 
+	@rm -f c3$(EXEEXT)
+	$(LINK) $(c3_LDFLAGS) $(c3_OBJECTS) $(c3_LDADD) $(LIBS)
+cartesian$(EXEEXT): $(cartesian_OBJECTS) $(cartesian_DEPENDENCIES) 
+	@rm -f cartesian$(EXEEXT)
+	$(LINK) $(cartesian_LDFLAGS) $(cartesian_OBJECTS) $(cartesian_LDADD) $(LIBS)
+double_prism$(EXEEXT): $(double_prism_OBJECTS) $(double_prism_DEPENDENCIES) 
+	@rm -f double_prism$(EXEEXT)
+	$(LINK) $(double_prism_LDFLAGS) $(double_prism_OBJECTS) $(double_prism_LDADD) $(LIBS)
 
 mostlyclean-compile:
-	-rm -f *.o core *.core
-
-clean-compile:
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
 
-maintainer-clean-compile:
-
-.c.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/c1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/c2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/c3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cartesian.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/double_prism.Po at am__quote@
 
-.s.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 
-.S.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -201,180 +298,256 @@ clean-libtool:
 	-rm -rf .libs _libs
 
 distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 
-maintainer-clean-libtool:
-
-cartesian: $(cartesian_OBJECTS) $(cartesian_DEPENDENCIES)
-	@rm -f cartesian
-	$(LINK) $(cartesian_LDFLAGS) $(cartesian_OBJECTS) $(cartesian_LDADD) $(LIBS)
-
-c1: $(c1_OBJECTS) $(c1_DEPENDENCIES)
-	@rm -f c1
-	$(LINK) $(c1_LDFLAGS) $(c1_OBJECTS) $(c1_LDADD) $(LIBS)
-
-c2: $(c2_OBJECTS) $(c2_DEPENDENCIES)
-	@rm -f c2
-	$(LINK) $(c2_LDFLAGS) $(c2_OBJECTS) $(c2_LDADD) $(LIBS)
-
-c3: $(c3_OBJECTS) $(c3_DEPENDENCIES)
-	@rm -f c3
-	$(LINK) $(c3_LDFLAGS) $(c3_OBJECTS) $(c3_LDADD) $(LIBS)
+ETAGS = etags
+ETAGSFLAGS =
 
-double_prism: $(double_prism_OBJECTS) $(double_prism_DEPENDENCIES)
-	@rm -f double_prism
-	$(LINK) $(double_prism_LDFLAGS) $(double_prism_OBJECTS) $(double_prism_LDADD) $(LIBS)
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
-
-maintainer-clean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = test/coarsen
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+	        xpass=`expr $$xpass + 1`; \
+	        failed=`expr $$failed + 1`; \
+	        echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+	        echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+	        xfail=`expr $$xfail + 1`; \
+	        echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+	        failed=`expr $$failed + 1`; \
+	        echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -n "$$skipped" && echo "$$skipped"; \
+	  test -n "$$report" && echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-c1.o: c1.c ../../src/gts.h ../../src/gtsconfig.h
-c2.o: c2.c ../../src/gts.h ../../src/gtsconfig.h
-c3.o: c3.c ../../src/gts.h ../../src/gtsconfig.h
-cartesian.o: cartesian.c ../../src/gts.h ../../src/gtsconfig.h
-double_prism.o: double_prism.c ../../src/gts.h ../../src/gtsconfig.h
-
-check-TESTS: $(TESTS)
-	@failed=0; all=0; \
-	srcdir=$(srcdir); export srcdir; \
-	for tst in $(TESTS); do \
-	  if test -f $$tst; then dir=.; \
-	  else dir="$(srcdir)"; fi; \
-	  if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \
-	    all=`expr $$all + 1`; \
-	    echo "PASS: $$tst"; \
-	  elif test $$? -ne 77; then \
-	    all=`expr $$all + 1`; \
-	    failed=`expr $$failed + 1`; \
-	    echo "FAIL: $$tst"; \
-	  fi; \
-	done; \
-	if test "$$failed" -eq 0; then \
-	  banner="All $$all tests passed"; \
-	else \
-	  banner="$$failed of $$all tests failed"; \
-	fi; \
-	dashes=`echo "$$banner" | sed s/./=/g`; \
-	echo "$$dashes"; \
-	echo "$$banner"; \
-	echo "$$dashes"; \
-	test "$$failed" -eq 0
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am:
-install-exec: install-exec-am
+all-am: Makefile
 
-install-data-am:
+installdirs:
+install: install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-checkPROGRAMS mostlyclean-compile \
-		mostlyclean-libtool mostlyclean-tags \
-		mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool mostlyclean-am
 
-clean-am:  clean-checkPROGRAMS clean-compile clean-libtool clean-tags \
-		clean-generic mostlyclean-am
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-checkPROGRAMS distclean-compile \
-		distclean-libtool distclean-tags distclean-generic \
-		clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-checkPROGRAMS \
-		maintainer-clean-compile maintainer-clean-libtool \
-		maintainer-clean-tags maintainer-clean-generic \
-		distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
 
-.PHONY: mostlyclean-checkPROGRAMS distclean-checkPROGRAMS \
-clean-checkPROGRAMS maintainer-clean-checkPROGRAMS mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir check-TESTS info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+uninstall-am: uninstall-info-am
 
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/test/delaunay/Makefile.in b/test/delaunay/Makefile.in
index 3108e95..a539dc8 100644
--- a/test/delaunay/Makefile.in
+++ b/test/delaunay/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ../..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,25 +73,88 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir) 	 -DG_LOG_DOMAIN=\"Gts-test\"
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir) \
+	 -DG_LOG_DOMAIN=\"Gts-test\"
 
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
@@ -100,85 +163,109 @@ check_PROGRAMS = cartesian random
 
 TESTS = cartesian.sh two_segments.sh too_close.sh
 
-EXTRA_DIST =  	cartesian.sh 	cartesian_speed.sh 	random_speed.sh 	two_segments.gts two_segments.sh 	too_close.gts too_close.sh
+EXTRA_DIST = \
+	cartesian.sh \
+	cartesian_speed.sh \
+	random_speed.sh \
+	two_segments.gts two_segments.sh \
+	too_close.gts too_close.sh
 
+subdir = test/delaunay
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../../config.h
-CONFIG_CLEAN_FILES = 
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I../..
-LIBS = @LIBS@
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+check_PROGRAMS = cartesian$(EXEEXT) random$(EXEEXT)
 cartesian_SOURCES = cartesian.c
-cartesian_OBJECTS =  cartesian.o
+cartesian_OBJECTS = cartesian.$(OBJEXT)
 cartesian_LDADD = $(LDADD)
-cartesian_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-cartesian_LDFLAGS = 
+cartesian_DEPENDENCIES = $(top_builddir)/src/libgts.la
+cartesian_LDFLAGS =
 random_SOURCES = random.c
-random_OBJECTS =  random.o
+random_OBJECTS = random.$(OBJEXT)
 random_LDADD = $(LDADD)
-random_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-random_LDFLAGS = 
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+random_DEPENDENCIES = $(top_builddir)/src/libgts.la
+random_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cartesian.Po ./$(DEPDIR)/random.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON =  Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = gtar
-GZIP_ENV = --best
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = cartesian.c random.c
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
 SOURCES = cartesian.c random.c
-OBJECTS = cartesian.o random.o
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps test/delaunay/Makefile
 
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+all: all-am
 
-
-mostlyclean-checkPROGRAMS:
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  test/delaunay/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 
 clean-checkPROGRAMS:
-	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
-
-distclean-checkPROGRAMS:
-
-maintainer-clean-checkPROGRAMS:
-
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
-
-.S.o:
-	$(COMPILE) -c $<
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+cartesian$(EXEEXT): $(cartesian_OBJECTS) $(cartesian_DEPENDENCIES) 
+	@rm -f cartesian$(EXEEXT)
+	$(LINK) $(cartesian_LDFLAGS) $(cartesian_OBJECTS) $(cartesian_LDADD) $(LIBS)
+random$(EXEEXT): $(random_OBJECTS) $(random_DEPENDENCIES) 
+	@rm -f random$(EXEEXT)
+	$(LINK) $(random_LDFLAGS) $(random_OBJECTS) $(random_LDADD) $(LIBS)
 
 mostlyclean-compile:
-	-rm -f *.o core *.core
-
-clean-compile:
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
 
-maintainer-clean-compile:
-
-.c.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cartesian.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/random.Po at am__quote@
 
-.s.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 
-.S.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -187,165 +274,256 @@ clean-libtool:
 	-rm -rf .libs _libs
 
 distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 
-maintainer-clean-libtool:
+ETAGS = etags
+ETAGSFLAGS =
 
-cartesian: $(cartesian_OBJECTS) $(cartesian_DEPENDENCIES)
-	@rm -f cartesian
-	$(LINK) $(cartesian_LDFLAGS) $(cartesian_OBJECTS) $(cartesian_LDADD) $(LIBS)
-
-random: $(random_OBJECTS) $(random_DEPENDENCIES)
-	@rm -f random
-	$(LINK) $(random_LDFLAGS) $(random_OBJECTS) $(random_LDADD) $(LIBS)
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
-
-maintainer-clean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = test/delaunay
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; \
+	srcdir=$(srcdir); export srcdir; \
+	list='$(TESTS)'; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+	        xpass=`expr $$xpass + 1`; \
+	        failed=`expr $$failed + 1`; \
+	        echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+	        echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *" $$tst "*) \
+	        xfail=`expr $$xfail + 1`; \
+	        echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+	        failed=`expr $$failed + 1`; \
+	        echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -n "$$skipped" && echo "$$skipped"; \
+	  test -n "$$report" && echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ../..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-cartesian.o: cartesian.c ../../src/gts.h ../../src/gtsconfig.h
-random.o: random.c ../../src/gts.h ../../src/gtsconfig.h
-
-check-TESTS: $(TESTS)
-	@failed=0; all=0; \
-	srcdir=$(srcdir); export srcdir; \
-	for tst in $(TESTS); do \
-	  if test -f $$tst; then dir=.; \
-	  else dir="$(srcdir)"; fi; \
-	  if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \
-	    all=`expr $$all + 1`; \
-	    echo "PASS: $$tst"; \
-	  elif test $$? -ne 77; then \
-	    all=`expr $$all + 1`; \
-	    failed=`expr $$failed + 1`; \
-	    echo "FAIL: $$tst"; \
-	  fi; \
-	done; \
-	if test "$$failed" -eq 0; then \
-	  banner="All $$all tests passed"; \
-	else \
-	  banner="$$failed of $$all tests failed"; \
-	fi; \
-	dashes=`echo "$$banner" | sed s/./=/g`; \
-	echo "$$dashes"; \
-	echo "$$banner"; \
-	echo "$$dashes"; \
-	test "$$failed" -eq 0
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
 check-am: all-am
 	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
 	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am:
-install-exec: install-exec-am
+all-am: Makefile
 
-install-data-am:
+installdirs:
+install: install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-checkPROGRAMS mostlyclean-compile \
-		mostlyclean-libtool mostlyclean-tags \
-		mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool mostlyclean-am
 
-clean-am:  clean-checkPROGRAMS clean-compile clean-libtool clean-tags \
-		clean-generic mostlyclean-am
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-checkPROGRAMS distclean-compile \
-		distclean-libtool distclean-tags distclean-generic \
-		clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-checkPROGRAMS \
-		maintainer-clean-compile maintainer-clean-libtool \
-		maintainer-clean-tags maintainer-clean-generic \
-		distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
 
-.PHONY: mostlyclean-checkPROGRAMS distclean-checkPROGRAMS \
-clean-checkPROGRAMS maintainer-clean-checkPROGRAMS mostlyclean-compile \
-distclean-compile clean-compile maintainer-clean-compile \
-mostlyclean-libtool distclean-libtool clean-libtool \
-maintainer-clean-libtool tags mostlyclean-tags distclean-tags \
-clean-tags maintainer-clean-tags distdir check-TESTS info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+uninstall-am: uninstall-info-am
 
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tools/Makefile.am b/tools/Makefile.am
index baec9b0..b7199ab 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -5,4 +5,7 @@ INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
 
-bin_PROGRAMS = gts2oogl gtscompare
+bin_PROGRAMS = gts2oogl gtscompare gtscheck stl2gts gts2dxf gts2stl
+bin_SCRIPTS = gtstemplate
+
+EXTRA_DIST = gtstemplate
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 9fd4ee9..714207e 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
 
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -10,61 +12,59 @@
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
-
-SHELL = @SHELL@
+ at SET_MAKE@
 
 srcdir = @srcdir@
 top_srcdir = @top_srcdir@
 VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
 pkgdatadir = $(datadir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
-
 top_builddir = ..
 
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
 NORMAL_INSTALL = :
 PRE_INSTALL = :
 POST_INSTALL = :
 NORMAL_UNINSTALL = :
 PRE_UNINSTALL = :
 POST_UNINSTALL = :
-host_alias = @host_alias@
 host_triplet = @host@
-AS = @AS@
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
 AWK = @AWK@
 CC = @CC@
+CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
+CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
-DLLTOOL = @DLLTOOL@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
 GLIB_CFLAGS = @GLIB_CFLAGS@
 GLIB_CONFIG = @GLIB_CONFIG@
 GLIB_DEPLIBS = @GLIB_DEPLIBS@
@@ -73,125 +73,278 @@ GTS_MAJOR_VERSION = @GTS_MAJOR_VERSION@
 GTS_MICRO_VERSION = @GTS_MICRO_VERSION@
 GTS_MINOR_VERSION = @GTS_MINOR_VERSION@
 GTS_VERSION = @GTS_VERSION@
+HAS_NETPBM_FALSE = @HAS_NETPBM_FALSE@
+HAS_NETPBM_TRUE = @HAS_NETPBM_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
 LT_AGE = @LT_AGE@
 LT_CURRENT = @LT_CURRENT@
 LT_RELEASE = @LT_RELEASE@
 LT_REVISION = @LT_REVISION@
 MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
 MAKEINFO = @MAKEINFO@
-OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
 VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
 glib_cflags = @glib_cflags@
 glib_libs = @glib_libs@
+glib_module_cflags = @glib_module_cflags@
+glib_module_libs = @glib_module_libs@
 glib_thread_cflags = @glib_thread_cflags@
 glib_thread_libs = @glib_thread_libs@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
 
-INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir) 	 -DG_LOG_DOMAIN=\"Gts-tools\"
+INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/src -I$(includedir)\
+	 -DG_LOG_DOMAIN=\"Gts-tools\"
 
 LDADD = $(top_builddir)/src/libgts.la -lm
 DEPS = $(top_builddir)/src/libgts.la
 
-bin_PROGRAMS = gts2oogl gtscompare
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES = 
-PROGRAMS =  $(bin_PROGRAMS)
-
+bin_PROGRAMS = gts2oogl gtscompare gtscheck stl2gts gts2dxf gts2stl
+bin_SCRIPTS = gtstemplate
 
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-LIBS = @LIBS@
+EXTRA_DIST = gtstemplate
+subdir = tools
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = gts2oogl$(EXEEXT) gtscompare$(EXEEXT) gtscheck$(EXEEXT) \
+	stl2gts$(EXEEXT) gts2dxf$(EXEEXT) gts2stl$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+gts2dxf_SOURCES = gts2dxf.c
+gts2dxf_OBJECTS = gts2dxf.$(OBJEXT)
+gts2dxf_LDADD = $(LDADD)
+gts2dxf_DEPENDENCIES = $(top_builddir)/src/libgts.la
+gts2dxf_LDFLAGS =
 gts2oogl_SOURCES = gts2oogl.c
-gts2oogl_OBJECTS =  gts2oogl.o
+gts2oogl_OBJECTS = gts2oogl.$(OBJEXT)
 gts2oogl_LDADD = $(LDADD)
-gts2oogl_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-gts2oogl_LDFLAGS = 
+gts2oogl_DEPENDENCIES = $(top_builddir)/src/libgts.la
+gts2oogl_LDFLAGS =
+gts2stl_SOURCES = gts2stl.c
+gts2stl_OBJECTS = gts2stl.$(OBJEXT)
+gts2stl_LDADD = $(LDADD)
+gts2stl_DEPENDENCIES = $(top_builddir)/src/libgts.la
+gts2stl_LDFLAGS =
+gtscheck_SOURCES = gtscheck.c
+gtscheck_OBJECTS = gtscheck.$(OBJEXT)
+gtscheck_LDADD = $(LDADD)
+gtscheck_DEPENDENCIES = $(top_builddir)/src/libgts.la
+gtscheck_LDFLAGS =
 gtscompare_SOURCES = gtscompare.c
-gtscompare_OBJECTS =  gtscompare.o
+gtscompare_OBJECTS = gtscompare.$(OBJEXT)
 gtscompare_LDADD = $(LDADD)
-gtscompare_DEPENDENCIES =  $(top_builddir)/src/libgts.la
-gtscompare_LDFLAGS = 
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+gtscompare_DEPENDENCIES = $(top_builddir)/src/libgts.la
+gtscompare_LDFLAGS =
+stl2gts_SOURCES = stl2gts.c
+stl2gts_OBJECTS = stl2gts.$(OBJEXT)
+stl2gts_LDADD = $(LDADD)
+stl2gts_DEPENDENCIES = $(top_builddir)/src/libgts.la
+stl2gts_LDFLAGS =
+SCRIPTS = $(bin_SCRIPTS)
+
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/gts2dxf.Po ./$(DEPDIR)/gts2oogl.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/gts2stl.Po ./$(DEPDIR)/gtscheck.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/gtscompare.Po ./$(DEPDIR)/stl2gts.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
+	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON =  Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = gts2dxf.c gts2oogl.c gts2stl.c gtscheck.c gtscompare.c \
+	stl2gts.c
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+SOURCES = gts2dxf.c gts2oogl.c gts2stl.c gtscheck.c gtscompare.c stl2gts.c
 
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = gts2oogl.c gtscompare.c
-OBJECTS = gts2oogl.o gtscompare.o
+all: all-am
 
-all: all-redirect
 .SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
-	cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps tools/Makefile
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-	cd $(top_builddir) \
-	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-binPROGRAMS:
-
-clean-binPROGRAMS:
-	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-
-distclean-binPROGRAMS:
-
-maintainer-clean-binPROGRAMS:
-
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.in $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tools/Makefile
+Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	$(mkinstalldirs) $(DESTDIR)$(bindir)
 	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    echo " $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
-	    $(LIBTOOL)  --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \
 	  else :; fi; \
 	done
 
 uninstall-binPROGRAMS:
 	@$(NORMAL_UNINSTALL)
-	list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
 	done
 
-.c.o:
-	$(COMPILE) -c $<
-
-.s.o:
-	$(COMPILE) -c $<
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+gts2dxf$(EXEEXT): $(gts2dxf_OBJECTS) $(gts2dxf_DEPENDENCIES) 
+	@rm -f gts2dxf$(EXEEXT)
+	$(LINK) $(gts2dxf_LDFLAGS) $(gts2dxf_OBJECTS) $(gts2dxf_LDADD) $(LIBS)
+gts2oogl$(EXEEXT): $(gts2oogl_OBJECTS) $(gts2oogl_DEPENDENCIES) 
+	@rm -f gts2oogl$(EXEEXT)
+	$(LINK) $(gts2oogl_LDFLAGS) $(gts2oogl_OBJECTS) $(gts2oogl_LDADD) $(LIBS)
+gts2stl$(EXEEXT): $(gts2stl_OBJECTS) $(gts2stl_DEPENDENCIES) 
+	@rm -f gts2stl$(EXEEXT)
+	$(LINK) $(gts2stl_LDFLAGS) $(gts2stl_OBJECTS) $(gts2stl_LDADD) $(LIBS)
+gtscheck$(EXEEXT): $(gtscheck_OBJECTS) $(gtscheck_DEPENDENCIES) 
+	@rm -f gtscheck$(EXEEXT)
+	$(LINK) $(gtscheck_LDFLAGS) $(gtscheck_OBJECTS) $(gtscheck_LDADD) $(LIBS)
+gtscompare$(EXEEXT): $(gtscompare_OBJECTS) $(gtscompare_DEPENDENCIES) 
+	@rm -f gtscompare$(EXEEXT)
+	$(LINK) $(gtscompare_LDFLAGS) $(gtscompare_OBJECTS) $(gtscompare_LDADD) $(LIBS)
+stl2gts$(EXEEXT): $(stl2gts_OBJECTS) $(stl2gts_DEPENDENCIES) 
+	@rm -f stl2gts$(EXEEXT)
+	$(LINK) $(stl2gts_LDFLAGS) $(stl2gts_OBJECTS) $(stl2gts_LDADD) $(LIBS)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f $$d$$p; then \
+	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	    echo " $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f"; \
+	    $(binSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
 
-.S.o:
-	$(COMPILE) -c $<
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
 
 mostlyclean-compile:
-	-rm -f *.o core *.core
-
-clean-compile:
+	-rm -f *.$(OBJEXT) core *.core
 
 distclean-compile:
 	-rm -f *.tab.c
 
-maintainer-clean-compile:
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gts2dxf.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gts2oogl.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gts2stl.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gtscheck.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gtscompare.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stl2gts.Po at am__quote@
 
-.c.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.s.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.o:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 
-.S.lo:
-	$(LIBTOOL) --mode=compile $(COMPILE) -c $<
+.c.lo:
+ at am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -200,139 +353,184 @@ clean-libtool:
 	-rm -rf .libs _libs
 
 distclean-libtool:
+	-rm -f libtool
+uninstall-info-am:
 
-maintainer-clean-libtool:
-
-gts2oogl: $(gts2oogl_OBJECTS) $(gts2oogl_DEPENDENCIES)
-	@rm -f gts2oogl
-	$(LINK) $(gts2oogl_LDFLAGS) $(gts2oogl_OBJECTS) $(gts2oogl_LDADD) $(LIBS)
+ETAGS = etags
+ETAGSFLAGS =
 
-gtscompare: $(gtscompare_OBJECTS) $(gtscompare_DEPENDENCIES)
-	@rm -f gtscompare
-	$(LINK) $(gtscompare_LDFLAGS) $(gtscompare_OBJECTS) $(gtscompare_LDADD) $(LIBS)
+CTAGS = ctags
+CTAGSFLAGS =
 
 tags: TAGS
 
-ID: $(HEADERS) $(SOURCES) $(LISP)
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	here=`pwd` && cd $(srcdir) \
-	  && mkid -f$$here/ID $$unique $(LISP)
+	mkid -fID $$unique
 
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) $(LISP)
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
 	tags=; \
 	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)'; \
-	unique=`for i in $$list; do echo $$i; done | \
-	  awk '    { files[$$0] = 1; } \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
 	       END { for (i in files) print i; }'`; \
-	test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
-	  || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags  $$unique $(LISP) -o $$here/TAGS)
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
 
-mostlyclean-tags:
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
 
-clean-tags:
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
 
 distclean-tags:
-	-rm -f TAGS ID
-
-maintainer-clean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = tools
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 
 distdir: $(DISTFILES)
-	@for file in $(DISTFILES); do \
-	  d=$(srcdir); \
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
 	  if test -d $$d/$$file; then \
-	    cp -pr $$d/$$file $(distdir)/$$file; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 	  else \
 	    test -f $(distdir)/$$file \
-	    || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
-	    || cp -p $$d/$$file $(distdir)/$$file || :; \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
 	  fi; \
 	done
-gts2oogl.o: gts2oogl.c ../config.h ../src/gts.h ../src/gtsconfig.h
-gtscompare.o: gtscompare.c ../config.h ../src/gts.h ../src/gtsconfig.h
-srf2oogl.o: srf2oogl.c ../config.h ../src/gts.h ../src/gtsconfig.h
-
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
 check-am: all-am
 check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-exec-am: install-binPROGRAMS
-install-exec: install-exec-am
+all-am: Makefile $(PROGRAMS) $(SCRIPTS)
 
-install-data-am:
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(bindir)
+install: install-am
+install-exec: install-exec-am
 install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am: uninstall-binPROGRAMS
-uninstall: uninstall-am
-all-am: Makefile $(PROGRAMS)
-all-redirect: all-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-	$(mkinstalldirs)  $(DESTDIR)$(bindir)
-
 
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
-	-rm -f Makefile $(CONFIG_CLEAN_FILES)
-	-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+	-rm -f $(CONFIG_CLEAN_FILES)
 
 maintainer-clean-generic:
-mostlyclean-am:  mostlyclean-binPROGRAMS mostlyclean-compile \
-		mostlyclean-libtool mostlyclean-tags \
-		mostlyclean-generic
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-mostlyclean: mostlyclean-am
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
 
-clean-am:  clean-binPROGRAMS clean-compile clean-libtool clean-tags \
-		clean-generic mostlyclean-am
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-libtool distclean-tags
 
-clean: clean-am
+dvi: dvi-am
 
-distclean-am:  distclean-binPROGRAMS distclean-compile distclean-libtool \
-		distclean-tags distclean-generic clean-am
-	-rm -f libtool
+dvi-am:
 
-distclean: distclean-am
+info: info-am
 
-maintainer-clean-am:  maintainer-clean-binPROGRAMS \
-		maintainer-clean-compile maintainer-clean-libtool \
-		maintainer-clean-tags maintainer-clean-generic \
-		distclean-am
-	@echo "This command is intended for maintainers to use;"
-	@echo "it deletes files that may require special tools to rebuild."
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
 
-.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
-maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+	uninstall-info-am
 
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libtool ctags distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am info info-am install install-am install-binPROGRAMS \
+	install-binSCRIPTS install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
+	pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-info-am
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/tools/gts2dxf.c b/tools/gts2dxf.c
new file mode 100644
index 0000000..9a62a95
--- /dev/null
+++ b/tools/gts2dxf.c
@@ -0,0 +1,81 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gts.h"
+
+static void write_vertex (GtsVertex * v, guint * nv)
+{
+  printf ("  0\nVERTEX\n  8\n0\n 10\n%g\n 20\n%g\n 30\n%g\n 70\n192\n",
+	  GTS_POINT (v)->x, GTS_POINT (v)->y, GTS_POINT (v)->z); 
+  GTS_OBJECT (v)->reserved = GUINT_TO_POINTER ((*nv)++);
+}
+
+static void write_face (GtsTriangle * t)
+{
+  GtsVertex * v1, * v2, * v3;
+
+  gts_triangle_vertices (t, &v1, &v2, &v3);
+  printf ("  0\nVERTEX\n  8\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 70\n128\n"
+	  " 71\n%u\n 72\n%u\n 73\n%u\n",
+	  GPOINTER_TO_UINT (GTS_OBJECT (v1)->reserved),
+	  GPOINTER_TO_UINT (GTS_OBJECT (v2)->reserved),
+	  GPOINTER_TO_UINT (GTS_OBJECT (v3)->reserved));
+}
+
+int main (int argc, char * argv[])
+{
+  GtsSurface * s;
+  GtsFile * fp;
+  guint nv = 1;
+  GtsSurfaceStats st;
+
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("gts2dxf: file on standard input is not a valid GTS file\n", 
+	   stderr);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
+    return 1; /* failure */
+  }
+
+  gts_surface_stats (s, &st);
+  printf ("  0\nSECTION\n  2\nHEADER\n  9\n$ACADVER\n  1\n"
+	  "AC1009\n  0\nENDSEC\n  0\n"
+	  "SECTION\n"
+	  "  2\n"
+	  "ENTITIES\n"
+	  "  0\n"
+	  "POLYLINE\n"
+          "  8\n0\n"
+	  " 66\n1\n"
+	  " 10\n0.0\n"
+	  " 20\n0.0\n"
+	  " 30\n0.0\n"
+	  " 70\n64\n"
+	  " 71\n%u\n"
+	  " 72\n%u\n",
+	  st.edges_per_vertex.n, st.n_faces);
+  gts_surface_foreach_vertex (s, (GtsFunc) write_vertex, &nv);
+  gts_surface_foreach_face (s, (GtsFunc) write_face, NULL);
+  printf ("  0\nSEQEND\n  0\nENDSEC\n  0\nEOF\n");
+  return 0;
+}
diff --git a/tools/gts2oogl.c b/tools/gts2oogl.c
index b5d6b83..69b906c 100644
--- a/tools/gts2oogl.c
+++ b/tools/gts2oogl.c
@@ -28,13 +28,33 @@
 #endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
-typedef enum { NONE, QUALITY, AREA, EPV, INCOMP, FOLD, HEIGHT } ColorOptions;
+#ifndef PI
+# define PI 3.14159265359
+#endif
+
+typedef enum { NONE, 
+	       QUALITY, 
+	       AREA, 
+	       EPV, 
+	       INCOMP, 
+	       FOLD, 
+	       HEIGHT, 
+	       CURVATURE, 
+	       GAUSSIAN,
+               COMPONENT } ColorOptions;
 
 ColorOptions color = NONE;
 gboolean autoscale = TRUE;
 gboolean boundary = FALSE;
+gboolean non_manifold = FALSE;
+gboolean duplicate = FALSE;
+gint flatten = -1;
+guint height = 0;
+gdouble avg = 0.;
 gdouble min = 0.0, max = 1.0;
 gdouble maxcosine2 = 1.0;
+gboolean verbose = FALSE;
+gboolean faces = FALSE;
 
 typedef struct {
   gdouble r, g, b;
@@ -125,14 +145,22 @@ static Color colormap_color (Colormap * cmap, gdouble val)
   return c;
 }
 
+static void write_point (GtsPoint * p, FILE * fp)
+{
+  fprintf (fp, "%g %g %g", 
+	   flatten == 0 ? avg : p->x,
+	   flatten == 1 ? avg : p->y,
+	   flatten == 2 ? avg : p->z);
+}
+
 static void foreach_vertex (GtsVertex * v, gpointer * info) 
 {
   FILE * fp = info[0];
   GHashTable * hash = info[1];
   guint * nv = info[2];
+  GtsSurface * s = info[4];
 
-  fprintf (fp, "%g %g %g", 
-	   GTS_POINT (v)->x, GTS_POINT (v)->y, GTS_POINT (v)->z);
+  write_point (GTS_POINT (v), fp);
   switch (color) {
   case EPV: {
     Color c = colormap_color (colormap,
@@ -142,34 +170,95 @@ static void foreach_vertex (GtsVertex * v, gpointer * info)
   }
   case HEIGHT: {
     Color c = colormap_color (colormap,
-			      (GTS_POINT (v)->z - min)/(max - min));
+	       ((&GTS_POINT (v)->x)[height] - avg - min)/(max - min));
     fprintf (fp, " %g %g %g 1.0\n", c.r, c.g, c.b);
     break;
   }
+  case CURVATURE: {
+    gdouble c = 0.;
+    Color color;
+    GtsVector n;
+
+    if (!gts_vertex_is_boundary (v, s) &&
+	gts_vertex_mean_curvature_normal (v, s, n)) 
+      c = gts_vector_norm (n)/2.;
+    color = colormap_color (colormap, (c - min)/(max - min));
+    fprintf (fp, " %g %g %g 1.0\n", color.r, color.g, color.b);
+    break;
+  }
+  case GAUSSIAN: {
+    gdouble gc = 0.;
+    Color color;
+
+    if (!gts_vertex_is_boundary (v, s))
+      gts_vertex_gaussian_curvature (v, s, &gc);
+    color = colormap_color (colormap, (gc - min)/(max - min));
+    fprintf (fp, " %g %g %g 1.0\n", color.r, color.g, color.b);
+    break;
+  }
   default:
     fprintf (fp, "\n");
   }
   g_hash_table_insert (hash, v, GUINT_TO_POINTER (++(*nv)));
 }
 
-static void foreach_edge (GtsEdge * e, gpointer info)
+static void foreach_boundary_edge (GtsEdge * e, gpointer info)
 {
   FILE * fp = info;
 
-  if (gts_edge_is_boundary (e, NULL))
-    fprintf (fp, "VECT 1 2 0 2 0 %g %g %g %g %g %g\n",
-	     GTS_POINT (GTS_SEGMENT (e)->v1)->x, 
-	     GTS_POINT (GTS_SEGMENT (e)->v1)->y, 
-	     GTS_POINT (GTS_SEGMENT (e)->v1)->z,
-	     GTS_POINT (GTS_SEGMENT (e)->v2)->x, 
-	     GTS_POINT (GTS_SEGMENT (e)->v2)->y, 
-	     GTS_POINT (GTS_SEGMENT (e)->v2)->z);
+  if (gts_edge_is_boundary (e, NULL)) {
+    fputs ("VECT 1 2 0 2 0 ", fp);
+    write_point (GTS_POINT (GTS_SEGMENT (e)->v1), fp);
+    fputc (' ', fp);
+    write_point (GTS_POINT (GTS_SEGMENT (e)->v2), fp);
+    fputc ('\n', fp);
+  }
+}
+
+static void foreach_feature_edge (GtsEdge * e, gdouble * angle)
+{
+  if (g_slist_length (e->triangles) == 2 &&
+      fabs (gts_triangles_angle (e->triangles->data, e->triangles->next->data))
+      < *angle) {
+    fputs ("VECT 1 2 0 2 0 ", stdout);
+    write_point (GTS_POINT (GTS_SEGMENT (e)->v1), stdout);
+    fputc (' ', stdout);
+    write_point (GTS_POINT (GTS_SEGMENT (e)->v2), stdout);
+    fputc ('\n', stdout);
+  }
+}
+
+static void foreach_non_manifold_edge (GtsEdge * e, gpointer info)
+{
+  FILE * fp = info;
+
+  if (g_slist_length (e->triangles) > 2) {
+    fputs ("VECT 1 2 0 2 0 ", fp);
+    write_point (GTS_POINT (GTS_SEGMENT (e)->v1), fp);
+    fputc (' ', fp);
+    write_point (GTS_POINT (GTS_SEGMENT (e)->v2), fp);
+    fputc ('\n', fp);
+  }
+}
+
+static void foreach_duplicate_edge (GtsSegment * s, gpointer info)
+{
+  FILE * fp = info;
+
+  if (gts_segment_is_duplicate (s)) {
+    fputs ("VECT 1 2 0 2 0 ", fp);
+    write_point (GTS_POINT (s->v1), fp);
+    fputc (' ', fp);
+    write_point (GTS_POINT (s->v2), fp);
+    fputc ('\n', fp);
+  }
 }
 
 static void foreach_triangle (GtsTriangle * t, gpointer * info)
 {
   FILE * fp = info[0];
   GHashTable * hash = info[1];
+  guint * nfold = info[3];
   guint p1 = 0, p2 = 0, p3 = 0;
 
   p1 = GPOINTER_TO_UINT (g_hash_table_lookup (hash, GTS_SEGMENT (t->e1)->v1));
@@ -260,8 +349,10 @@ static void foreach_triangle (GtsTriangle * t, gpointer * info)
 				       GTS_SEGMENT (e3)->v1,
 				       GTS_SEGMENT (e3)->v2,
 				       maxcosine2);      
-    if (fold)
+    if (fold) {
+      (*nfold)++;
       fputs (" 1. 0. 0.", fp);
+    }
     fputc ('\n', fp);
   }
   default:
@@ -269,12 +360,40 @@ static void foreach_triangle (GtsTriangle * t, gpointer * info)
   }
 }
 
+static void min_max_curvature (GtsVertex * v, gpointer * data)
+{
+  gdouble * min = data[0];
+  gdouble * max = data[1];
+  GtsSurface * s = data[2];
+  GtsVector n;
+  gdouble c = 0.;
+
+  if (!gts_vertex_is_boundary (v, s) && 
+      gts_vertex_mean_curvature_normal (v, s, n)) 
+    c = gts_vector_norm (n)/2.;
+  if (c < *min) *min = c;
+  if (c > *max) *max = c;
+}
+
+static void min_max_gaussian (GtsVertex * v, gpointer * data)
+{
+  gdouble * min = data[0];
+  gdouble * max = data[1];
+  GtsSurface * s = data[2];
+  gdouble gc = 0.;
+
+  if (!gts_vertex_is_boundary (v, s))
+    gts_vertex_gaussian_curvature (v, s, &gc);
+  if (gc < *min) *min = gc;
+  if (gc > *max) *max = gc;
+}
+
 static void oogl_surface (GtsSurface * s, FILE * fptr)
 {
-  gpointer info[3];
+  gpointer info[5];
   GtsSurfaceStats stats;
   GtsSurfaceQualityStats qstats;
-  guint np = 0;
+  guint np = 0, nfold = 0;
 
   g_return_if_fail (s != NULL);
   g_return_if_fail (fptr != NULL);
@@ -282,6 +401,8 @@ static void oogl_surface (GtsSurface * s, FILE * fptr)
   info[0] = fptr;
   info[1] = g_hash_table_new (NULL, NULL);
   info[2] = &np;
+  info[3] = &nfold;
+  info[4] = s;
 
   gts_surface_stats (s, &stats);
   switch (color) {
@@ -308,16 +429,45 @@ static void oogl_surface (GtsSurface * s, FILE * fptr)
   case HEIGHT:
     if (autoscale) {
       GtsBBox * bbox = gts_bbox_surface (gts_bbox_class (), s);
-      min = bbox->z1;
-      max = bbox->z2;
+
+      min = (&bbox->x1)[height] - avg;
+      max = (&bbox->x2)[height] - avg;
       gts_object_destroy (GTS_OBJECT (bbox));
     }
     break;
+  case CURVATURE:
+    if (autoscale) {
+      gpointer data[3];
+
+      min = G_MAXDOUBLE;
+      max = - G_MAXDOUBLE;
+      data[0] = &min;
+      data[1] = &max;
+      data[2] = s;
+      gts_surface_foreach_vertex (s, (GtsFunc) min_max_curvature, data);
+    }
+    break;
+  case GAUSSIAN:
+    if (autoscale) {
+      gpointer data[3];
+
+      min = G_MAXDOUBLE;
+      max = - G_MAXDOUBLE;
+      data[0] = &min;
+      data[1] = &max;
+      data[2] = s;
+      gts_surface_foreach_vertex (s, (GtsFunc) min_max_gaussian, data);
+    }
+    break;
   default:
+    ;
   }
+  if (verbose)
+    fprintf (stderr, "scalar min: %g max: %g\n", min, max);
   if (max == min)
     max = min + 1.;
-  if (color == EPV || color == HEIGHT)
+  if (color == EPV || color == HEIGHT || 
+      color == CURVATURE || color == GAUSSIAN)
     fputs ("COFF ", fptr);
   else
     fputs ("OFF ", fptr);
@@ -325,8 +475,10 @@ static void oogl_surface (GtsSurface * s, FILE * fptr)
 	   stats.edges_per_vertex.n, 
 	   stats.n_faces,
 	   stats.faces_per_edge.n);
-  gts_surface_foreach_vertex (s, (GtsFunc)foreach_vertex, info);
-  gts_surface_foreach_face (s, (GtsFunc)foreach_triangle, info);
+  gts_surface_foreach_vertex (s, (GtsFunc) foreach_vertex, info);
+  gts_surface_foreach_face (s, (GtsFunc) foreach_triangle, info);
+  if (verbose && color == FOLD)
+    fprintf (stderr, "# Number of folds: %u\n", nfold);
 
   g_hash_table_destroy (info[1]);
 }
@@ -382,13 +534,13 @@ static GSList * chain_segments (GSList * segments)
 static void write_isolines (GtsSurface * surface, 
 			    GNode * stree,
 			    gdouble level,
-			    FILE * fp)
+			    FILE * fp,
+			    gboolean gnuplot)
 {
   GNode * ptree;
   GtsSurface * plane;
   GtsVertex * v1, * v2, * v3;
-  GtsSurfaceInter * si;
-  GSList * chains, * i;
+  GSList * inter, * chains, * i;
   guint nvertices = 0;
 
   g_return_if_fail (surface != NULL);
@@ -407,9 +559,8 @@ static void write_isolines (GtsSurface * surface,
 			       gts_edge_new (gts_edge_class (), v2, v3),
 			       gts_edge_new (gts_edge_class (), v3, v1)));
   ptree = gts_bb_tree_surface (plane);
-  si = gts_surface_inter_new (gts_surface_inter_class (),
-			      surface, plane, stree, ptree);
-  chains = chain_segments (si->edges);
+  inter = gts_surface_intersection (surface, plane, stree, ptree);
+  chains = chain_segments (inter);
 
   i = chains;
   while (i) {
@@ -418,20 +569,22 @@ static void write_isolines (GtsSurface * surface,
     i = i->next;
   }
 
-  fprintf (fp, "VECT %d %d 0\n", g_slist_length (chains), nvertices);
-  i = chains;
-  while (i) {
-    GSList * chain = i->data;
-
-    fprintf (fp, "%d ", g_slist_length (chain));
-    i = i->next;
-  }
-  i = chains;
-  while (i) {
-    fprintf (fp, "0 ");
-    i = i->next;
+  if (!gnuplot) {
+    fprintf (fp, "VECT %d %d 0\n", g_slist_length (chains), nvertices);
+    i = chains;
+    while (i) {
+      GSList * chain = i->data;
+      
+      fprintf (fp, "%d ", g_slist_length (chain));
+      i = i->next;
+    }
+    i = chains;
+    while (i) {
+      fprintf (fp, "0 ");
+      i = i->next;
+    }
+    fprintf (fp, "\n");
   }
-  fprintf (fp, "\n");
   i = chains;
   while (i) {
     GSList * chain = i->data;
@@ -440,38 +593,84 @@ static void write_isolines (GtsSurface * surface,
     while (j) {
       GtsPoint * p = j->data;
 
-      fprintf (fp, "%g %g %g\n", p->x, p->y, p->z);
+      write_point (p, fp);
+      fputc ('\n', fp);
       j = j->next;
     }
+    if (gnuplot)
+      fputc ('\n', fp);
     g_slist_free (chain);
     i = i->next;
   }
   g_slist_free (chains);
-  gts_object_destroy (GTS_OBJECT (si));
+  g_slist_free (inter);
   gts_bb_tree_destroy (ptree, TRUE);
   gts_object_destroy (GTS_OBJECT (plane));
 }
 
+static void sum_flatten (GtsPoint * p)
+{
+  avg += (&p->x)[flatten];
+}
+
+static void write_face (GtsTriangle * t)
+{
+  GtsVertex * v1, * v2, * v3;
+  GtsPoint o;
+ 
+  gts_triangle_vertices (t, &v1, &v2, &v3);
+  o.x = (GTS_POINT (v1)->x + GTS_POINT (v2)->x + GTS_POINT (v3)->x)/3.;
+  o.y = (GTS_POINT (v1)->y + GTS_POINT (v2)->y + GTS_POINT (v3)->y)/3.;
+  o.z = (GTS_POINT (v1)->z + GTS_POINT (v2)->z + GTS_POINT (v3)->z)/3.;
+  printf ("OFF 3 1 3\n"
+	  "%g %g %g\n"
+	  "%g %g %g\n"
+	  "%g %g %g\n"
+	  "3 0 1 2\n",
+	  o.x + 0.9*(GTS_POINT (v1)->x - o.x),
+	  o.y + 0.9*(GTS_POINT (v1)->y - o.y),
+	  o.z + 0.9*(GTS_POINT (v1)->z - o.z),
+	  o.x + 0.9*(GTS_POINT (v2)->x - o.x),
+	  o.y + 0.9*(GTS_POINT (v2)->y - o.y),
+	  o.z + 0.9*(GTS_POINT (v2)->z - o.z),
+	  o.x + 0.9*(GTS_POINT (v3)->x - o.x),
+	  o.y + 0.9*(GTS_POINT (v3)->y - o.y),
+	  o.z + 0.9*(GTS_POINT (v3)->z - o.z));
+}
+
 int main (int argc, char * argv[])
 {
   GtsSurface * surface;
-  gboolean verbose = FALSE;
   gboolean nosurface = FALSE;
   int c = 0;
-  guint line;
   guint isolines = 0;
+  GtsFile * fp;
+  gdouble feature = 0.;
+  gdouble isoline[256];
+  guint niso = 0;
+  gboolean gnuplot = FALSE;
 
   colormap = colormap_jet (); /* default */
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"gnuplot", no_argument, NULL, 'G'},
+      {"faces", no_argument, NULL, 't'},
+      {"isoline", required_argument, NULL, 'I'},
+      {"gaussian", no_argument, NULL, 'g'},
+      {"curvature", no_argument, NULL, 'C'},
+      {"feature", required_argument, NULL, 'e'},
+      {"flatten", required_argument, NULL, 'F'},
+      {"component", no_argument, (int *)&color, COMPONENT},
       {"quality", no_argument, (int *)&color, QUALITY},
       {"area", no_argument, (int *)&color, AREA},
       {"incomp", no_argument, (int *)&color, INCOMP},
       {"fold", required_argument, NULL, 'f'},
       {"epv", no_argument, (int *)&color, EPV},
-      {"height", no_argument, (int *)&color, HEIGHT},
+      {"height", required_argument, NULL, 'H'},
       {"boundary", no_argument, &boundary, TRUE},
+      {"non-manifold", no_argument, &non_manifold, TRUE},
+      {"duplicate", no_argument, &duplicate, TRUE},
       {"isolines", required_argument, NULL, 'i'},
       {"cmap", required_argument, NULL, 'c'},
       {"help", no_argument, NULL, 'h'},
@@ -482,11 +681,40 @@ int main (int argc, char * argv[])
       {"verbose", no_argument, NULL, 'v'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "c:hm:M:rvf:i:n",
+    switch ((c = getopt_long (argc, argv, "c:hm:M:rvf:i:nF:e:H:CgI:tG",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "c:hm:M:rvf:i:n"))) {
+    switch ((c = getopt (argc, argv, "c:hm:M:rvf:i:nF:e:H:CgI:tG"))) {
 #endif /* not HAVE_GETOPT_LONG */
+    case 'G': /* gnuplot */
+      gnuplot = TRUE;
+      break;
+    case 't': /* faces */
+      faces = TRUE;
+      break;
+    case 'I': /* isoline */
+      isoline[niso++] = atof (optarg);
+      break;
+    case 'g': /* gaussian */
+      color = GAUSSIAN;
+      break;
+    case 'C': /* curvature */
+      color = CURVATURE;
+      break;
+    case 'H': /* height */
+      color = HEIGHT;
+      height = atoi (optarg);
+      if (height > 2)
+	height = 2;
+      break;
+    case 'e': /* feature */
+      feature = atof (optarg)*PI/180.;
+      break;
+    case 'F': /* flatten */
+      flatten = atoi (optarg);
+      if (flatten < 0.) flatten = 0;
+      else if (flatten > 2) flatten = 2;
+      break;
     case 'c': { /* colormap file */
       FILE * fptr = fopen (optarg, "rt");
       if (!fptr) {
@@ -503,7 +731,7 @@ int main (int argc, char * argv[])
       break;
     case 'f': /* fold */
       color = FOLD;
-      maxcosine2 = cos (atof (optarg)*3.14159265359/180.);
+      maxcosine2 = cos (atof (optarg)*PI/180.);
       maxcosine2 *= maxcosine2;
       break;
     case 'm': /* minimum value */
@@ -526,20 +754,31 @@ int main (int argc, char * argv[])
 	     "Convert a GTS file (surface file format generated by the Gts Library)\n"
 	     "to OOGL file format (Geomview).\n"
 	     "\n"
+             "  -G      --gnuplot      writes isolines in gnuplot format\n"   
+             "          --component    color faces according to the component\n"
+             "                         they belong too\n"
 	     "          --quality      color faces according to their quality\n"
 	     "          --area         color faces according to their area\n"
 	     "          --incomp       color incompatible faces\n"
 	     "  -f VAL  --fold=VAL     color faces which make an angle smaller\n" 
 	     "                         than VAL degrees with any of their neighbors\n"
+             "  -t      --faces        output individual faces\n"
 	     "          --epv          color vertices according to number of edges per vertex\n"
-	     "          --height       color vertices according to their height\n"
+	     "  -H C    --height=C     color vertices according to their C coordinate\n"
+	     "  -g      --gaussian     color vertices according to Gaussian curvature\n"
+	     "  -C      --curvature    color vertices according to mean curvature\n"
 	     "          --boundary     output boundary edges\n"
+             "  -e A    --feature=A    output `feature' edges defined by angle A\n"
+             "          --non-manifold output non-manifold edges\n"
+             "          --duplicate    output duplicate edges\n"
 	     "  -i N    --isolines=N   draw N isolines (levels of constant altitude)\n"
+             "  -I L    --isolines=L   draw isoline at level L\n"
 	     "          --cmap=FILE    load FILE as colormap\n"
 	     "  -m VAL, --min=VAL      use VAL as minimum scaling value\n"
 	     "  -M VAL, --max=VAL      use VAL as maximum scaling value\n"
 	     "  -r,     --reverse      reverse colormap\n"
              "  -n      --nosurface    do not output surface\n"
+	     "  -F C    --flatten=C    set C coordinate to average value\n"
 	     "  -v,     --verbose      display surface statistics\n"
 	     "  -h,     --help         display this help and exit\n"
 	     "\n"
@@ -560,31 +799,68 @@ int main (int argc, char * argv[])
 			     gts_face_class (),
 			     gts_edge_class (),
 			     gts_vertex_class ());
-  line = gts_surface_read (surface, stdin);
-
-  if (line) {
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (surface, fp)) {
     fputs ("gts2oogl: the file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1;
   }
   
   if (verbose)
     gts_surface_print_stats (surface, stderr);
 
-  if (boundary || isolines) {
+  if (flatten >= 0) {
+    gts_surface_foreach_vertex (surface, (GtsFunc) sum_flatten, NULL);
+    if (avg != 0.)
+      avg /= gts_surface_vertex_number (surface);
+  }
+
+  if (boundary || non_manifold || duplicate || 
+      isolines || feature > 0. || niso > 0) {
     if (!nosurface) {
       puts ("(geometry \"surface\" { = ");
       oogl_surface (surface, stdout);
       puts ("})");
     }
     if (boundary) {
-      if (!nosurface || isolines)
+      if (!nosurface || isolines || niso > 0 || non_manifold || duplicate)
 	puts ("(geometry \"boundary\" { = ");
       puts ("LIST {");
-      gts_surface_foreach_edge (surface, (GtsFunc) foreach_edge, stdout);
+      gts_surface_foreach_edge (surface, (GtsFunc) foreach_boundary_edge, 
+				stdout);
+      puts ("}");
+      if (!nosurface || isolines || niso > 0 || non_manifold || duplicate)
+	puts ("})");
+    }
+    if (feature > 0.) {
+      if (!nosurface || isolines || niso > 0 || non_manifold || duplicate)
+	puts ("(geometry \"feature\" { = ");
+      puts ("LIST {");
+      gts_surface_foreach_edge (surface, (GtsFunc) foreach_feature_edge, 
+				&feature);
       puts ("}");
-      if (!nosurface || isolines)
+      if (!nosurface || isolines || niso > 0 || non_manifold || duplicate)
+	puts ("})");
+    }
+    if (non_manifold) {
+      if (!nosurface || isolines || niso > 0 || boundary || duplicate)
+	puts ("(geometry \"non-manifold\" { = ");
+      puts ("LIST {");
+      gts_surface_foreach_edge (surface, (GtsFunc) foreach_non_manifold_edge, 
+				stdout);
+      puts ("}");
+      if (!nosurface || isolines || niso > 0 || boundary || duplicate)
+	puts ("})");
+    }
+    if (duplicate) {
+      if (!nosurface || isolines || niso > 0 || boundary || non_manifold)
+	puts ("(geometry \"duplicate\" { = ");
+      puts ("LIST {");
+      gts_surface_foreach_edge (surface, (GtsFunc) foreach_duplicate_edge, 
+				stdout);
+      puts ("}");
+      if (!nosurface || isolines || niso > 0 || boundary || non_manifold)
 	puts ("})");
     }
     if (isolines > 0) {
@@ -599,19 +875,70 @@ int main (int argc, char * argv[])
       z = bbox->z1 + dz;
       if (!nosurface || boundary)
 	puts ("(geometry \"isolines\" { = ");
-      puts ("LIST {");
+      if (!gnuplot)
+	puts ("LIST {");
       for (i = 0; i < isolines; i++, z += dz)
-	write_isolines (surface, stree, z, stdout);
-      puts ("}");
+	write_isolines (surface, stree, z, stdout, gnuplot);
+      if (!gnuplot)
+	puts ("}");
+      if (!nosurface || boundary)
+	puts ("})\n");
+      gts_bb_tree_destroy (stree, TRUE);
+    }
+    else if (niso > 0) {
+      GNode * stree;
+      GtsBBox * bbox;
+      guint i;
+
+      stree = gts_bb_tree_surface (surface);
+      bbox = stree->data;
+      if (!nosurface || boundary)
+	puts ("(geometry \"isolines\" { = ");
+      if (!gnuplot)
+	puts ("LIST {");
+      for (i = 0; i < niso; i++)
+	write_isolines (surface, stree, isoline[i], stdout, gnuplot);
+      if (!gnuplot)
+	puts ("}");
       if (!nosurface || boundary)
 	puts ("})\n");
       gts_bb_tree_destroy (stree, TRUE);
     }
   }
+  else if (color == COMPONENT) {
+    GSList * i = gts_surface_split (surface);
+
+    if (verbose)
+      fprintf (stderr, "%u components\n", g_slist_length (i));
+
+    printf ("LIST {\n");
+    while (i) {
+      gdouble 
+	r = rand()/(gdouble)RAND_MAX, 
+	g = rand()/(gdouble)RAND_MAX, 
+	b = rand()/(gdouble)RAND_MAX;
+
+      printf ("geom { appearance { material {\n"
+	      "  ambient %g %g %g\n"
+	      "  diffuse %g %g %g\n"
+	      "}}\n", 
+	      r, g, b, r, g, b);
+      gts_surface_write_oogl (i->data, stdout);
+      printf ("}\n");
+      i = i->next;
+    }
+    printf ("}\n");
+  }
   else if (!nosurface) {
     if (min == max) 
       max = min + 1.;
-    oogl_surface (surface, stdout);
+    if (faces) {
+      printf ("LIST {\n");
+      gts_surface_foreach_face (surface, (GtsFunc) write_face, NULL);
+      printf ("}\n");
+    }      
+    else	
+      oogl_surface (surface, stdout);
   }
 
   return 0;
diff --git a/examples/volume.c b/tools/gts2stl.c
similarity index 51%
copy from examples/volume.c
copy to tools/gts2stl.c
index ba0fc34..957dd38 100644
--- a/examples/volume.c
+++ b/tools/gts2stl.c
@@ -17,7 +17,9 @@
  * Boston, MA 02111-1307, USA.
  */
 
+#include <math.h>
 #include <stdlib.h>
+#include <string.h>
 #include "config.h"
 #ifdef HAVE_GETOPT_H
 #  include <getopt.h>
@@ -27,76 +29,90 @@
 #endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
-/* volume - compute the volume of a given surface if it is a closed and
-   orientable manifold */
+static void write_face (GtsTriangle * t)
+{
+  GtsVertex * v1, * v2, * v3;
+  GtsVector n;
+
+  gts_triangle_vertices (t, &v1, &v2, &v3);
+  gts_triangle_normal (t, &n[0], &n[1], &n[2]);
+  gts_vector_normalize (n);
+  printf ("facet normal %g %g %g\nouter loop\n", n[0], n[1], n[2]);
+  printf ("vertex %g %g %g\n", 
+	  GTS_POINT (v1)->x, GTS_POINT (v1)->y, GTS_POINT (v1)->z);
+  printf ("vertex %g %g %g\n", 
+	  GTS_POINT (v2)->x, GTS_POINT (v2)->y, GTS_POINT (v2)->z);
+  printf ("vertex %g %g %g\n", 
+	  GTS_POINT (v3)->x, GTS_POINT (v3)->y, GTS_POINT (v3)->z);
+  puts ("endloop\nendfacet");
+}
+
 int main (int argc, char * argv[])
 {
-  GtsSurface * s;
-  gboolean verbose = FALSE;
   int c = 0;
-  guint line;
+  gboolean verbose = FALSE;
+  gboolean revert  = FALSE;  
+  GtsSurface * s;
+  GtsFile * fp;
 
-  /* parse options using getopt */
   while (c != EOF) {
 #ifdef HAVE_GETOPT_LONG
     static struct option long_options[] = {
+      {"revert", no_argument, NULL, 'r'},
       {"help", no_argument, NULL, 'h'},
       {"verbose", no_argument, NULL, 'v'}
     };
     int option_index = 0;
-    switch ((c = getopt_long (argc, argv, "hv", 
+    switch ((c = getopt_long (argc, argv, "hvr",
 			      long_options, &option_index))) {
 #else /* not HAVE_GETOPT_LONG */
-    switch ((c = getopt (argc, argv, "hv"))) {
+    switch ((c = getopt (argc, argv, "hvr"))) {
 #endif /* not HAVE_GETOPT_LONG */
-    case 'v': /* verbose */
-      verbose = TRUE;
+    case 'r': /* revert */
+      revert = TRUE;
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: volume [OPTION] < file.gts\n"
-	     "Compute the volume of the domain bounded by the surface defined by file.srf.\n"
-	     "Print the volume and exit successfully if the surface is a closed orientable\n"
-	     "manifold. Exit unsuccessfully otherwise.\n"
+             "Usage: gts2stl [OPTION]... < input.gts > output.stl\n"
+	     "Convert a GTS file to STL format.\n"
 	     "\n"
-	     "  -v    --verbose  print statistics about the surface\n"
-	     "  -h    --help     display this help and exit\n"
+	     "  -r,     --revert       revert face normals\n"
+	     "  -v,     --verbose      display surface statistics\n"
+	     "  -h,     --help         display this help and exit\n"
 	     "\n"
-	     "Reports bugs to %s\n",
+	     "Report bugs to %s\n",
 	     GTS_MAINTAINER);
-      return 0; /* success */
+      return 0;
+      break;
+    case 'v':
+      verbose = TRUE;
       break;
     case '?': /* wrong options */
-      fprintf (stderr, "Try `volume --help' for more information.\n");
-      return 1; /* failure */
+      fprintf (stderr, "Try `gts2stl --help' for more information.\n");
+      return 1;
     }
   }
-  
-  /* read surface in */
+
   s = gts_surface_new (gts_surface_class (),
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
-    fputs ("volume: the file on standard input is not a valid GTS file\n", 
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("gts2stl: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
-  /* if verbose on print stats */
+  if (revert)
+    gts_surface_foreach_face (s, (GtsFunc) gts_triangle_revert, NULL);
   if (verbose)
-    gts_surface_print_stats (s, stdout);
+    gts_surface_print_stats (s, stderr);
 
-  /* test if surface is a closed and orientable manifold.
-     we don't need to test if s is a manifold since both tests below
-     implies that. */
-  if (!gts_surface_is_closed (s) || !gts_surface_is_orientable (s))
-    return 1; /* failure */
-  
-  /* print volume */
-  printf ("%g\n", gts_surface_volume (s));
+  puts ("solid");
+  gts_surface_foreach_face (s, (GtsFunc) write_face, NULL);
+  puts ("endsolid");
 
-  return 0; /* success */
+  return 0;
 }
diff --git a/examples/volume.c b/tools/gtscheck.c
similarity index 54%
copy from examples/volume.c
copy to tools/gtscheck.c
index ba0fc34..f969b94 100644
--- a/examples/volume.c
+++ b/tools/gtscheck.c
@@ -27,14 +27,17 @@
 #endif /* HAVE_UNISTD_H */
 #include "gts.h"
 
-/* volume - compute the volume of a given surface if it is a closed and
-   orientable manifold */
 int main (int argc, char * argv[])
 {
-  GtsSurface * s;
+  GtsSurface * s, * self_intersects;
   gboolean verbose = FALSE;
   int c = 0;
-  guint line;
+  GtsFile * fp;
+
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
 
   /* parse options using getopt */
   while (c != EOF) {
@@ -54,49 +57,64 @@ int main (int argc, char * argv[])
       break;
     case 'h': /* help */
       fprintf (stderr,
-             "Usage: volume [OPTION] < file.gts\n"
-	     "Compute the volume of the domain bounded by the surface defined by file.srf.\n"
-	     "Print the volume and exit successfully if the surface is a closed orientable\n"
-	     "manifold. Exit unsuccessfully otherwise.\n"
+             "Usage: gtscheck [OPTION] < FILE\n"
+	     "Checks that a surface defines a closed, orientable\n"
+	     "non self-intersecting manifold.\n"
+	     "\n"
+             "If the surface is self-intersecting, the set of intersected faces\n"
+	     "is written on standard output as a GTS surface file.\n"
 	     "\n"
-	     "  -v    --verbose  print statistics about the surface\n"
-	     "  -h    --help     display this help and exit\n"
+	     "  -v      --verbose  print statistics about the surface\n"
+	     "  -h      --help     display this help and exit\n"
+	     "\n"
+	     "The return status reflects the error encountered:\n"
+	     "  0: none\n"
+             "  1: the input file is not a valid GTS file\n"
+             "  2: the surface is not an orientable manifold\n"
+             "  3: the surface is an orientable manifold but is self-intersecting\n"
 	     "\n"
 	     "Reports bugs to %s\n",
 	     GTS_MAINTAINER);
       return 0; /* success */
       break;
     case '?': /* wrong options */
-      fprintf (stderr, "Try `volume --help' for more information.\n");
+      fprintf (stderr, "Try `gtscheck --help' for more information.\n");
       return 1; /* failure */
     }
   }
-  
+
   /* read surface in */
   s = gts_surface_new (gts_surface_class (),
 		       gts_face_class (),
 		       gts_edge_class (),
 		       gts_vertex_class ());
-  line = gts_surface_read (s, stdin);
-  if (line) {
-    fputs ("volume: the file on standard input is not a valid GTS file\n", 
+  fp = gts_file_new (stdin);
+  if (gts_surface_read (s, fp)) {
+    fputs ("gtscheck: file on standard input is not a valid GTS file\n", 
 	   stderr);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "stdin:%d:%d: %s\n", fp->line, fp->pos, fp->error);
     return 1; /* failure */
   }
 
   /* if verbose on print stats */
-  if (verbose)
-    gts_surface_print_stats (s, stdout);
+  if (verbose) 
+    gts_surface_print_stats (s, stderr);
+ 
+  if (!gts_surface_is_orientable (s)) {
+    if (verbose)
+      fprintf (stderr, "gtscheck: the surface on standard input is not an orientable manifold\n");
+    return 2; /* failure */
+  }
 
-  /* test if surface is a closed and orientable manifold.
-     we don't need to test if s is a manifold since both tests below
-     implies that. */
-  if (!gts_surface_is_closed (s) || !gts_surface_is_orientable (s))
-    return 1; /* failure */
-  
-  /* print volume */
-  printf ("%g\n", gts_surface_volume (s));
+  self_intersects = gts_surface_is_self_intersecting (s);
+  if (self_intersects != NULL) {
+    if (verbose) {
+      fprintf (stderr, "gtscheck: the surface on standard input is self-intersecting\n");
+      gts_surface_print_stats (self_intersects, stderr);
+    }
+    gts_surface_write (self_intersects, stdout);
+    return 3; /* failure */
+  }
 
   return 0; /* success */
 }
diff --git a/tools/gtscompare.c b/tools/gtscompare.c
index 90c4538..6162473 100644
--- a/tools/gtscompare.c
+++ b/tools/gtscompare.c
@@ -218,8 +218,8 @@ int main (int argc, char * argv[])
   gboolean image = FALSE;
   gboolean symmetric = FALSE;
   int c = 0;
-  guint line;
   FILE * fptr;
+  GtsFile * fp;
   GtsRange fd1, fd2, bd1, bd2;
   gdouble delta, v1, v2, l1, l2;
   GtsBBox * bbox;
@@ -319,14 +319,17 @@ int main (int argc, char * argv[])
 			gts_face_class (),
 			gts_edge_class (),
 			gts_vertex_class ());
-  line = gts_surface_read (s1, fptr);
-  fclose (fptr);
-  if (line) {
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s1, fp)) {
     fprintf (stderr, "gtscompare: file `%s' is not a valid GTS file\n", 
 	     argv[optind]);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "%s:%d:%d: %s\n", 
+	     argv[optind], fp->line, fp->pos, fp->error);
+    gts_file_destroy (fp);
     return 1;
   }
+  gts_file_destroy (fp);
+  fclose (fptr);
 
   if ((fptr = fopen (argv[optind + 1], "rt")) == NULL) {
     fprintf (stderr, "gtscompare: %s: No such file or directory\n", 
@@ -337,14 +340,17 @@ int main (int argc, char * argv[])
 			gts_face_class (),
 			gts_edge_class (),
 			gts_vertex_class ());
-  line = gts_surface_read (s2, fptr);
-  fclose (fptr);
-  if (line) {
+  fp = gts_file_new (fptr);
+  if (gts_surface_read (s2, fp)) {
     fprintf (stderr, "gtscompare: file `%s' is not a valid GTS file\n", 
 	     argv[optind + 1]);
-    fprintf (stderr, "Format error at line %d\n", line);
+    fprintf (stderr, "%s:%d:%d: %s\n", 
+	     argv[optind + 1], fp->line, fp->pos, fp->error);
+    gts_file_destroy (fp);
     return 1;
   }
+  gts_file_destroy (fp);
+  fclose (fptr);
 
   gts_surface_stats (s1, &ss1);
   gts_surface_stats (s2, &ss2);
diff --git a/tools/gtstemplate b/tools/gtstemplate
new file mode 100755
index 0000000..ac39eca
--- /dev/null
+++ b/tools/gtstemplate
@@ -0,0 +1,322 @@
+#! /bin/sh
+
+usage()
+{
+    cat <<EOF
+Usage: gtstemplate [OPTIONS] Class ParentClass
+Options:
+	[--no-extra-data]
+	[--no-extra-method]
+	[--overload=METHOD]
+EOF
+    exit $1
+}
+
+form_name()
+{
+    echo $1 | sed 's/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_&/g' | awk '{ 
+	if (substr ($1, 1, 1) == "_") 
+	    print tolower(substr ($1, 2)); 
+	else 
+	    print tolower($1);}'
+}
+
+if test $# -lt 2; then
+	usage 1 1>&2
+fi
+
+while test $# -gt 0; do
+  case "$1" in
+  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  case $1 in
+    --no-extra-data)
+      no_extra_data=yes
+      ;;
+    --no-extra-method)
+      no_extra_method=yes
+      ;;
+    --overload=*)
+      methods="$methods $optarg"
+      ;;
+    --*)
+      usage 1 1>&2
+      ;;
+      *)
+      if test -z "$Object"; then
+	Object=$1
+      elif test -z "$ParentObject"; then
+	ParentObject=$1
+      else
+	usage 1 1>&2
+      fi
+      ;;
+  esac
+  shift
+done
+
+if test -z "$Object" -o -z "$ParentObject"; then
+    usage 1 1>&2
+fi
+
+object=`form_name $Object`
+ObjectName=$Object
+if test "$no_extra_data" = "yes"; then
+    Object=$ParentObject
+fi
+OBJECT=`echo $object | awk '{print toupper ($1)}'`
+
+if test "$no_extra_method" = "yes"; then
+    ObjectClass=$ParentObject"Class"
+else
+    ObjectClass=$ObjectName"Class"
+    OBJECT_CLASS=$OBJECT"_CLASS"
+fi
+ 
+parent_object=`form_name $ParentObject`
+parent_object_class=$parent_object"_class"
+ParentObjectClass=$ParentObject"Class"
+object_class=$object"_class"
+
+cat <<EOF
+/* $ObjectName: Header */
+
+EOF
+if test "$no_extra_data" != "yes"; then
+    cat <<EOF
+typedef struct _$Object         $Object;
+
+struct _$Object {
+  /*< private >*/
+  $ParentObject parent;
+
+  /*< public >*/
+  /* add extra data here (if public) */
+};
+
+EOF
+fi
+if test "$no_extra_method" != "yes"; then
+    cat <<EOF
+typedef struct _$ObjectClass    $ObjectClass;
+
+struct _$ObjectClass {
+  /*< private >*/
+  $ParentObjectClass parent_class;
+
+  /*< public >*/
+  /* add extra methods here */
+};
+
+EOF
+fi
+if test "$no_extra_data" != "yes"; then
+    cat <<EOF
+#define $OBJECT(obj)            GTS_OBJECT_CAST (obj,\\
+					         $Object,\\
+					         $object_class ())
+EOF
+fi
+if test "$no_extra_method" != "yes"; then
+    cat <<EOF
+#define $OBJECT_CLASS(klass)    GTS_OBJECT_CLASS_CAST (klass,\\
+						 $ObjectClass,\\
+						 $object_class())
+EOF
+fi
+cat <<EOF
+#define IS_$OBJECT(obj)         (gts_object_is_from_class (obj,\\
+						 $object_class ()))
+
+$ObjectClass * $object_class  (void);
+EOF
+if test "$no_extra_data" != "yes"; then
+    object_new=$object"_new"
+    cat <<EOF
+$Object * $object_new    ($ObjectClass * klass);
+EOF
+fi
+cat <<EOF
+
+/* $ObjectName: Object */
+
+EOF
+
+for method in $methods; do
+    case $method in
+	destroy)
+	object_destroy=$object"_destroy"
+	cat <<EOF
+static void $object_destroy (GtsObject * object)
+{
+  /* do object-specific cleanup here */
+  
+  /* do not forget to call destroy method of the parent */
+  (* GTS_OBJECT_CLASS ($object_class ())->parent_class->destroy) 
+    (object);
+}
+
+EOF
+	;;
+	read)
+	object_read=$object"_read"
+	cat <<EOF
+static void $object_read (GtsObject ** o, GtsFile * fp)
+{
+  /* call read method of parent */
+  if (GTS_OBJECT_CLASS ($object_class ())->parent_class->read)
+    (* GTS_OBJECT_CLASS ($object_class ())->parent_class->read) 
+      (o, fp);
+  if (fp->type == GTS_ERROR)
+    return;
+
+  /* do object-specific read here */
+
+  /* do not forget to prepare for next read */
+  gts_file_next_token (fp);
+}
+
+EOF
+	;;
+	write)
+	object_write=$object"_write"
+	cat <<EOF
+static void $object_write (GtsObject * o, FILE * fp)
+{
+  /* call write method of parent */
+  if (GTS_OBJECT_CLASS ($object_class ())->parent_class->write)
+    (* GTS_OBJECT_CLASS ($object_class ())->parent_class->write) 
+      (o, fp);
+
+  /* do object specific write here */
+}
+
+EOF
+	;;
+	color)
+	object_color=$object"_color"
+	cat <<EOF
+static GtsColor $object_color (GtsObject * o)
+{
+  GtsColor c = { 1., 1., 1. }; /* white */
+
+  return c;
+}
+
+EOF
+	;;
+	event)
+	object_event=$object"_event"
+	cat <<EOF
+static gboolean $object_event (GfsEvent * event, GfsSimulation * sim)
+{
+  if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS ($object_class ())->parent_class)->event) (event, sim)) {
+    /* do object-specific event here */
+
+    return TRUE;
+  }
+  return FALSE;
+}
+
+EOF
+	;;
+	*)
+	echo "gtstemplate: unknown method '$method'"
+	exit 1;
+	;;
+    esac
+done
+
+if test -n "$methods" -o "$no_extra_method" != "yes"; then
+    object_class_init=$object_class"_init"
+    cat <<EOF
+static void $object_class_init ($ObjectClass * klass)
+{
+  /* define new methods and overload inherited methods here */
+
+EOF
+    if test -n "$object_event"; then
+	cat <<EOF
+  GFS_EVENT_CLASS (klass)->event = $object_event;
+EOF
+    fi
+    if test -n "$object_read"; then
+	cat <<EOF
+  GTS_OBJECT_CLASS (klass)->read = $object_read;
+EOF
+    fi
+    if test -n "$object_write"; then
+	cat <<EOF
+  GTS_OBJECT_CLASS (klass)->write = $object_write;
+EOF
+    fi
+    if test -n "$object_color"; then
+	cat <<EOF
+  GTS_OBJECT_CLASS (klass)->color = $object_color;
+EOF
+    fi
+    if test -n "$object_destroy"; then
+	cat <<EOF
+  GTS_OBJECT_CLASS (klass)->destroy = $object_destroy;
+EOF
+    fi
+    cat <<EOF
+}
+
+EOF
+else
+    object_class_init=NULL
+fi
+
+if test "$no_extra_data" != "yes"; then
+    object_init=$object"_init"
+    cat <<EOF
+static void $object_init ($Object * object)
+{
+  /* initialize object here */
+}
+
+EOF
+else
+    object_init=NULL
+fi    
+
+object_info=$object"_info"
+cat <<EOF
+$ObjectClass * $object_class (void)
+{
+  static $ObjectClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo $object_info = {
+      "$ObjectName",
+      sizeof ($Object),
+      sizeof ($ObjectClass),
+      (GtsObjectClassInitFunc) $object_class_init,
+      (GtsObjectInitFunc) $object_init,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS ($parent_object_class ()),
+				  &$object_info);
+  }
+
+  return klass;
+}
+
+EOF
+
+if test -n "$object_new"; then
+    cat <<EOF
+$Object * $object_new ($ObjectClass * klass)
+{
+  $Object * object;
+
+  object = $OBJECT (gts_object_new (GTS_OBJECT_CLASS (klass)));
+
+  return object;
+}
+EOF
+fi
diff --git a/tools/stl2gts.c b/tools/stl2gts.c
new file mode 100644
index 0000000..41ae99b
--- /dev/null
+++ b/tools/stl2gts.c
@@ -0,0 +1,312 @@
+/* GTS - Library for the manipulation of triangulated surfaces
+ * Copyright (C) 1999 St�phane Popinet
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#  include <getopt.h>
+#endif /* HAVE_GETOPT_H */
+#ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+#include "gts.h"
+
+static GPtrArray * stl_read (FILE * fp)
+{
+  GPtrArray * a = g_ptr_array_new ();
+  char tag[6];
+
+  fgets (tag, 6, fp);
+  rewind (fp);
+  if (!strcmp (tag, "solid")) { /* ASCII file */
+    GtsFile * f = gts_file_new (fp);
+
+    while (f->type == GTS_STRING) {
+      if (!strcmp (f->token->str, "vertex")) {
+	gdouble x, y, z;
+
+	gts_file_next_token (f);
+	if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+	  fprintf (stderr, 
+		   "Input file is not a valid STL file\n"
+		   "stdin:%d:%d: expecting a number (x-coordinate)\n",
+		   f->line, f->pos);
+	  exit (1);
+	}
+	x = atof (f->token->str);
+
+	gts_file_next_token (f);
+	if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+	  fprintf (stderr, 
+		   "Input file is not a valid STL file\n"
+		   "stdin:%d:%d: expecting a number (y-coordinate)\n",
+		   f->line, f->pos);
+	  exit (1);
+	}
+	y = atof (f->token->str);
+
+	gts_file_next_token (f);
+	if (f->type != GTS_INT && f->type != GTS_FLOAT) {
+	  fprintf (stderr, 
+		   "Input file is not a valid STL file\n"
+		   "stdin:%d:%d: expecting a number (z-coordinate)\n",
+		   f->line, f->pos);
+	  exit (1);
+	}
+	z = atof (f->token->str);
+
+	g_ptr_array_add (a, gts_vertex_new (gts_vertex_class (), x, y, z));
+      }
+      else if (!strcmp (f->token->str, "endsolid"))
+	break;
+      gts_file_first_token_after (f, '\n');
+    }
+    gts_file_destroy (f);
+  }
+  else { /* binary file */
+    guint32 nf;
+    gchar header[80];
+    guint i;
+
+    if (fread (header, sizeof (gchar), 80, fp) != 80) {
+      fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: incomplete header\n");
+      exit (1);
+    }
+    if (fread (&nf, sizeof (guint32), 1, fp) != 1) {
+      fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: missing number of facets\n");
+      exit (1);
+    }
+    i = nf;
+    while (i > 0) {
+      gfloat x, y, z;
+      guint j;
+      guint16 attbytecount;
+
+      if (fread (&x, sizeof (gfloat), 1, fp) != 1) {
+	fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: missing normal x-coordinate\n");
+	exit (1);
+      }
+      if (fread (&y, sizeof (gfloat), 1, fp) != 1) {
+	fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: missing normal y-coordinate\n");
+	exit (1);
+      }
+      if (fread (&z, sizeof (gfloat), 1, fp) != 1) {
+	fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: missing normal z-coordinate\n");
+	exit (1);
+      }
+
+      for (j = 0; j < 3; j++) {
+	if (fread (&x, sizeof (gfloat), 1, fp) != 1) {
+	  fprintf (stderr, "Input file is not a valid STL file\n"
+		   "stdin: missing vertex x-coordinate\n");
+	  exit (1);
+	}
+	if (fread (&y, sizeof (gfloat), 1, fp) != 1) {
+	  fprintf (stderr, "Input file is not a valid STL file\n"
+		   "stdin: missing vertex y-coordinate\n");
+	  exit (1);
+	}
+	if (fread (&z, sizeof (gfloat), 1, fp) != 1) {
+	  fprintf (stderr, "Input file is not a valid STL file\n"
+		   "stdin: missing vertex z-coordinate\n");
+	  exit (1);
+	}
+	g_ptr_array_add (a, gts_vertex_new (gts_vertex_class (), x, y, z));
+      }
+
+      if (fread (&attbytecount, sizeof (guint16), 1, fp) != 1) {
+	fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: missing attribute byte count\n");
+	exit (1);
+      }
+      if (attbytecount != 0) {
+	fprintf (stderr, "Input file is not a valid STL file\n"
+	       "stdin: attribute byte count is not zero\n");
+	exit (1);
+      }
+      
+      i--;
+    }
+  }
+
+  return a;
+}
+
+static void vertices_merge (GPtrArray * stl, gdouble epsilon)
+{
+  GPtrArray * array;
+  GNode * kdtree;
+  guint i;
+
+  array = g_ptr_array_new ();
+  for (i = 0; i < stl->len; i++)
+    g_ptr_array_add (array, stl->pdata[i]);
+  kdtree = gts_kdtree_new (array, NULL);
+  g_ptr_array_free (array, TRUE);
+
+  for (i = 0; i < stl->len; i++) {
+    GtsVertex * v = stl->pdata[i];
+
+    if (!GTS_OBJECT (v)->reserved) { /* Do something only if v is active */
+      GtsBBox * bbox;
+      GSList * selected, * j;
+
+      /* build bounding box */
+      bbox = gts_bbox_new (gts_bbox_class (),
+			   v, 
+			   GTS_POINT (v)->x - epsilon,
+			   GTS_POINT (v)->y - epsilon,
+			   GTS_POINT (v)->z - epsilon,
+			   GTS_POINT (v)->x + epsilon,
+			   GTS_POINT (v)->y + epsilon,
+			   GTS_POINT (v)->z + epsilon);
+
+      /* select vertices which are inside bbox using kdtree */
+      j = selected = gts_kdtree_range (kdtree, bbox, NULL);
+      while (j) {
+	GtsVertex * sv = j->data;
+
+	if (sv != v && !GTS_OBJECT (sv)->reserved)
+	  GTS_OBJECT (sv)->reserved = v; /* mark sv as inactive */
+	j = j->next;
+      }
+      g_slist_free (selected);
+      gts_object_destroy (GTS_OBJECT (bbox));
+    }
+  }
+
+  gts_kdtree_destroy (kdtree);
+
+  /* destroy inactive vertices */
+
+  /* we want to control vertex destruction */
+  gts_allow_floating_vertices = TRUE;
+
+  for (i = 0; i < stl->len; i++) {
+    GtsVertex * v = stl->pdata[i];
+
+    if (GTS_OBJECT (v)->reserved) { /* v is inactive */
+      stl->pdata[i] = GTS_OBJECT (v)->reserved;
+      gts_object_destroy (GTS_OBJECT (v));
+    }
+  }
+
+  gts_allow_floating_vertices = FALSE; 
+}
+
+static void add_stl (GtsSurface * s, GPtrArray * stl)
+{
+  guint i;
+
+  for (i = 0; i < stl->len/3; i++) {
+    GtsEdge * e1 = GTS_EDGE (gts_vertices_are_connected (stl->pdata[3*i],
+							 stl->pdata[3*i + 1]));
+    GtsEdge * e2 = GTS_EDGE (gts_vertices_are_connected (stl->pdata[3*i + 1],
+							 stl->pdata[3*i + 2]));
+    GtsEdge * e3 = GTS_EDGE (gts_vertices_are_connected (stl->pdata[3*i + 2],
+							 stl->pdata[3*i]));
+
+    if (e1 == NULL)
+      e1 = gts_edge_new (s->edge_class, 
+			 stl->pdata[3*i], stl->pdata[3*i + 1]);
+    if (e2 == NULL)
+      e2 = gts_edge_new (s->edge_class, 
+			 stl->pdata[3*i + 1], stl->pdata[3*i + 2]);
+    if (e3 == NULL)
+      e3 = gts_edge_new (s->edge_class, 
+			 stl->pdata[3*i + 2], stl->pdata[3*i]);
+    gts_surface_add_face (s, gts_face_new (s->face_class, e1, e2, e3));
+  }    
+}
+
+int main (int argc, char * argv[])
+{
+  int c = 0;
+  gboolean verbose = FALSE;
+  gboolean nomerge = FALSE;
+  gboolean revert  = FALSE;
+  GPtrArray * stl;
+  GtsSurface * s;
+
+  while (c != EOF) {
+#ifdef HAVE_GETOPT_LONG
+    static struct option long_options[] = {
+      {"revert", no_argument, NULL, 'r'},
+      {"nomerge", no_argument, NULL, 'n'},
+      {"help", no_argument, NULL, 'h'},
+      {"verbose", no_argument, NULL, 'v'}
+    };
+    int option_index = 0;
+    switch ((c = getopt_long (argc, argv, "hvnr",
+			      long_options, &option_index))) {
+#else /* not HAVE_GETOPT_LONG */
+    switch ((c = getopt (argc, argv, "hvnr"))) {
+#endif /* not HAVE_GETOPT_LONG */
+    case 'r': /* revert */
+      revert = TRUE;
+      break;
+    case 'n': /* nomerge */
+      nomerge = TRUE;
+      break;
+    case 'h': /* help */
+      fprintf (stderr,
+             "Usage: stl2gts [OPTION]... < input.stl > output.gts\n"
+	     "Convert an STL file to GTS format.\n"
+	     "\n"
+	     "  -r,     --revert       revert face normals\n"
+	     "  -n,     --nomerge      do not merge vertices\n"
+	     "  -v,     --verbose      display surface statistics\n"
+	     "  -h,     --help         display this help and exit\n"
+	     "\n"
+	     "Report bugs to %s\n",
+	     GTS_MAINTAINER);
+      return 0;
+      break;
+    case 'v':
+      verbose = TRUE;
+      break;
+    case '?': /* wrong options */
+      fprintf (stderr, "Try `stl2gts --help' for more information.\n");
+      return 1;
+    }
+  }
+
+  stl = stl_read (stdin);
+  if (!nomerge)
+    vertices_merge (stl, 0.);
+  s = gts_surface_new (gts_surface_class (),
+		       gts_face_class (),
+		       gts_edge_class (),
+		       gts_vertex_class ());
+  add_stl (s, stl);
+  if (revert)
+    gts_surface_foreach_face (s, (GtsFunc) gts_triangle_revert, NULL);
+  if (verbose)
+    gts_surface_print_stats (s, stderr);
+  gts_surface_write (s, stdout);
+
+  return 0;
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/gts.git



More information about the debian-science-commits mailing list