diff -Naur drgeo-1.1.0-dist/drgenius_config.cc drgeo-1.1.0/drgenius_config.cc
--- drgeo-1.1.0-dist/drgenius_config.cc 2003-11-24 22:24:11.000000000 +0100
+++ drgeo-1.1.0/drgenius_config.cc 2012-04-19 11:12:30.738659533 +0200
@@ -80,7 +80,11 @@
ret = gh_eval_str (scm);
g_free (scm);
g_free(value);
+#if SCM_MAJOR_VERSION < 2
value = gh_scm2newstr (ret, NULL);
+#else
+ value = (gchar *) gh_scm2newstr ((const char *) ret, NULL);
+#endif
return value;
}
diff -Naur drgeo-1.1.0-dist/drgenius_config.h drgeo-1.1.0/drgenius_config.h
--- drgeo-1.1.0-dist/drgenius_config.h 2004-04-29 22:05:20.000000000 +0200
+++ drgeo-1.1.0/drgenius_config.h 2012-04-19 11:10:34.877671093 +0200
@@ -25,7 +25,7 @@
#ifndef DRGENIUS_CONFIG_H
#define DRGENIUS_CONFIG_H
-#include <guile/gh.h>
+#include <guile_fixups.h>
#include <glade/glade.h>
#include <gtk/gtk.h>
#include <gmodule.h>
diff -Naur drgeo-1.1.0-dist/drgenius_main.cc drgeo-1.1.0/drgenius_main.cc
--- drgeo-1.1.0-dist/drgenius_main.cc 2004-04-09 22:00:04.000000000 +0200
+++ drgeo-1.1.0/drgenius_main.cc 2012-04-19 11:10:34.879671093 +0200
@@ -25,7 +25,6 @@
#include <config.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
-#include <guile/gh.h>
#include <libintl.h>
#include <string.h>
@@ -36,6 +35,7 @@
#include "drgeo_scm_interface.h"
#include "drgenius_help.h"
+#include <guile_fixups.h>
#define _(x) gettext (x)
#define N_(x) x
diff -Naur drgeo-1.1.0-dist/drgeo_init.cc drgeo-1.1.0/drgeo_init.cc
--- drgeo-1.1.0-dist/drgeo_init.cc 2004-01-20 23:14:46.000000000 +0100
+++ drgeo-1.1.0/drgeo_init.cc 2012-04-19 11:10:34.880671092 +0200
@@ -22,7 +22,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <guile/gh.h>
+#include <guile_fixups.h>
#include <glib.h>
void
diff -Naur drgeo-1.1.0-dist/geo/drgeo_scm_api.h drgeo-1.1.0/geo/drgeo_scm_api.h
--- drgeo-1.1.0-dist/geo/drgeo_scm_api.h 2003-09-23 22:21:47.000000000 +0200
+++ drgeo-1.1.0/geo/drgeo_scm_api.h 2012-04-19 11:10:34.881671091 +0200
@@ -24,7 +24,7 @@
#ifndef DRGEO_SCM_API_H
#define DRGEO_SCM_API_H
-#include <guile/gh.h>
+#include <guile_fixups.h>
#ifdef __cplusplus
diff -Naur drgeo-1.1.0-dist/geo/drgeo_scm_helper.h drgeo-1.1.0/geo/drgeo_scm_helper.h
--- drgeo-1.1.0-dist/geo/drgeo_scm_helper.h 2003-08-16 21:11:55.000000000 +0200
+++ drgeo-1.1.0/geo/drgeo_scm_helper.h 2012-04-19 11:10:34.882671091 +0200
@@ -25,7 +25,7 @@
#define DRGEO_SCM_HELPER_H
#include <gtk/gtk.h>
-#include <guile/gh.h>
+#include <guile_fixups.h>
#include "drgeo_drgeoVector.h"
drgeoPoint & scmCoord2drgeoPoint (SCM x, SCM y);
diff -Naur drgeo-1.1.0-dist/geo/drgeo_scm_interface.cc drgeo-1.1.0/geo/drgeo_scm_interface.cc
--- drgeo-1.1.0-dist/geo/drgeo_scm_interface.cc 2004-10-17 10:50:11.000000000 +0200
+++ drgeo-1.1.0/geo/drgeo_scm_interface.cc 2012-04-19 11:13:45.705652054 +0200
@@ -789,7 +789,11 @@
{
gchar *str;
+#if SCM_MAJOR_VERSION < 2
str = gh_scm2newstr (name, NULL);
+#else
+ str = (gchar *) gh_scm2newstr ((const char *) name, NULL);
+#endif
item->setName (str);
g_free (str);
item->initName ();
@@ -807,7 +811,11 @@
mdi->newGeometricDocument (NULL);
figure = ((geoView *) mdi->activeView ())->figure ();
+#if SCM_MAJOR_VERSION < 2
str = gh_scm2newstr (name, NULL);
+#else
+ str = (gchar *) gh_scm2newstr ((const char *) name, NULL);
+#endif
mdi->renameView (((drgeoGtkDrawable *) figure->getDrawable())->getGeoView (), str);
g_free (str);
diff -Naur drgeo-1.1.0-dist/geo/drgeo_scm_interface.h drgeo-1.1.0/geo/drgeo_scm_interface.h
--- drgeo-1.1.0-dist/geo/drgeo_scm_interface.h 2003-10-06 13:42:00.000000000 +0200
+++ drgeo-1.1.0/geo/drgeo_scm_interface.h 2012-04-19 11:10:34.885671091 +0200
@@ -24,7 +24,7 @@
#ifndef DRGEO_SCM_INTERFACE_H
#define DRGEO_SCM_INTERFACE_H
-#include <guile/gh.h>
+#include <guile_fixups.h>
#include "drgeo_figure.h"
/* define scm_interface into a class */
diff -Naur drgeo-1.1.0-dist/geo/drgeo_script.cc drgeo-1.1.0/geo/drgeo_script.cc
--- drgeo-1.1.0-dist/geo/drgeo_script.cc 2004-08-25 21:27:03.000000000 +0200
+++ drgeo-1.1.0/geo/drgeo_script.cc 2012-04-19 11:14:44.169646221 +0200
@@ -21,7 +21,7 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <guile/gh.h>
+#include <guile_fixups.h>
#include "config.h"
#include "drgeo_script.h"
#include "drgeo_drawable.h"
@@ -153,7 +153,11 @@
}
}
else if (gh_string_p (ret))
+#if SCM_MAJOR_VERSION < 2
setString (gh_scm2newstr (ret, NULL));
+#else
+ setString ((char *) gh_scm2newstr ((const char *) ret, NULL));
+#endif
else
setString (g_strdup (_("Unprintable result")));
}
diff -Naur drgeo-1.1.0-dist/geo/drgeo_script.h drgeo-1.1.0/geo/drgeo_script.h
--- drgeo-1.1.0-dist/geo/drgeo_script.h 2003-09-22 18:38:19.000000000 +0200
+++ drgeo-1.1.0/geo/drgeo_script.h 2012-04-19 11:10:34.887671091 +0200
@@ -24,7 +24,7 @@
#ifndef DRGEO_SCRIPT_H
#define DRGEO_SCRIPT_H
-#include <guile/gh.h>
+#include <libguile.h>
#include "drgeo_value.h"
class script:public value
diff -Naur drgeo-1.1.0-dist/geo/Makefile.in drgeo-1.1.0/geo/Makefile.in
--- drgeo-1.1.0-dist/geo/Makefile.in 2005-07-27 09:36:22.000000000 +0200
+++ drgeo-1.1.0/geo/Makefile.in 2012-04-19 11:10:34.919671089 +0200
@@ -192,7 +192,8 @@
-DDRGEO_GLADEDIR=\""$(gladedir)"\" \
-DDRGEO_ENCODEDIR=\""$(encodedir)"\" \
-I$(includedir) \
- $(DRGEO_CFLAGS)
+ $(DRGEO_CFLAGS) \
+ $(GUILE_CFLAGS)
noinst_LIBRARIES = libgeo.a
@@ -247,7 +248,8 @@
drgeo_scm_interface.h drgeo_scm_interface.cc \
drgeo_scm_api.h drgeo_scm_api.cc \
drgeo_scm_helper.h drgeo_scm_helper.cc \
- drgeo_gtkhelpers.h drgeo_gtkhelpers.cc
+ drgeo_gtkhelpers.h drgeo_gtkhelpers.cc \
+ ../guile-fixups.h ../guile-fixups.cc
CLEANFILES = $(BUILT_SOURCES)
diff -Naur drgeo-1.1.0-dist/guile_fixups.cc drgeo-1.1.0/guile_fixups.cc
--- drgeo-1.1.0-dist/guile_fixups.cc 1970-01-01 01:00:00.000000000 +0100
+++ drgeo-1.1.0/guile_fixups.cc 2012-04-19 11:10:34.891671091 +0200
@@ -0,0 +1,140 @@
+#include <guile_fixups.h>
+#if SCM_MAJOR_VERSION >= 2
+#include <assert.h>
+
+static SCM
+eval_str_wrapper (void *data)
+{
+ char *scheme_code = (char *) data;
+ return gh_eval_str (scheme_code);
+}
+
+static SCM
+eval_file_wrapper (void *data)
+{
+/* gh_eval_t real_eval_proc = (gh_eval_t) (* ((gh_eval_t *) data)); */
+
+ char *scheme_code = (char *) data;
+ return gh_eval_file (scheme_code);
+}
+
+SCM
+gh_eval_str_with_catch (const char *scheme_code, scm_t_catch_handler handler)
+{
+ /* FIXME: not there yet */
+ return gh_catch (SCM_BOOL_T, (scm_t_catch_body) eval_str_wrapper, (void *) scheme_code,
+ (scm_t_catch_handler) handler, (void *) scheme_code);
+}
+
+SCM
+gh_eval_file_with_catch (const char *scheme_code, scm_t_catch_handler handler)
+{
+ /* FIXME: not there yet */
+ return gh_catch (SCM_BOOL_T, (scm_t_catch_body) eval_file_wrapper,
+ (void *) scheme_code, (scm_t_catch_handler) handler,
+ (void *) scheme_code);
+}
+
+/* This function takes care of all real GH initialization. Since it's
+ called by scm_boot_guile, it can safely work with heap objects, or
+ call functions that do so. */
+static void
+gh_launch_pad (void *closure, int argc, char **argv)
+{
+ main_prog_t c_main_prog = (main_prog_t) closure;
+
+ c_main_prog (argc, argv);
+ exit (0);
+}
+
+/* starts up the Scheme interpreter, and stays in it. c_main_prog()
+ is the address of the user's main program, since gh_enter() never
+ returns. */
+void
+gh_enter (int argc, char *argv[], main_prog_t c_main_prog)
+{
+ scm_boot_guile (argc, argv, gh_launch_pad, (void *) c_main_prog);
+ /* never returns */
+}
+
+static void *
+scm2whatever (SCM obj, void *m, size_t size)
+{
+ scm_t_array_handle handle;
+ size_t len;
+ ssize_t inc;
+ const void *elts;
+
+ elts = scm_uniform_vector_elements (obj, &handle, &len, &inc);
+
+ if (inc != 1)
+ scm_misc_error (NULL, "only contiguous vectors can be converted: ~a",
+ scm_list_1 (obj));
+
+ if (m == 0)
+ m = malloc (len * sizeof (size));
+ if (m != NULL)
+ memcpy (m, elts, len * size);
+
+ scm_array_handle_release (&handle);
+
+ return m;
+}
+
+#define SCM2WHATEVER(obj,pred,utype,mtype) \
+ if (scm_is_true (pred (obj))) \
+ { \
+ assert (sizeof (utype) == sizeof (mtype)); \
+ return (mtype *)scm2whatever (obj, m, sizeof (utype)); \
+ }
+
+/* Convert a vector, weak vector or uniform vector into an array of
+ doubles. If result array in arg 2 is NULL, malloc a new one. If
+ out of memory, return NULL. */
+double *
+gh_scm2doubles (SCM obj, double *m)
+{
+ long i, n;
+ SCM val;
+ if (SCM_IMP (obj))
+ scm_wrong_type_arg (0, 0, obj);
+
+ /* XXX - f32vectors are rejected now.
+ */
+ SCM2WHATEVER (obj, scm_f64vector_p, double, double)
+
+ switch (SCM_TYP7 (obj))
+ {
+ case scm_tc7_vector:
+ case scm_tc7_wvect:
+ n = SCM_SIMPLE_VECTOR_LENGTH (obj);
+ for (i = 0; i < n; ++i)
+ {
+ val = SCM_SIMPLE_VECTOR_REF (obj, i);
+ if (!SCM_I_INUMP (val)
+ && !(SCM_BIGP (val) || SCM_REALP (val)))
+ scm_wrong_type_arg (0, 0, val);
+ }
+ if (m == 0)
+ m = (double *) malloc (n * sizeof (double));
+ if (m == NULL)
+ return NULL;
+ for (i = 0; i < n; ++i)
+ {
+ val = SCM_SIMPLE_VECTOR_REF (obj, i);
+ if (SCM_I_INUMP (val))
+ m[i] = SCM_I_INUM (val);
+ else if (SCM_BIGP (val))
+ m[i] = scm_to_long (val);
+ else
+ m[i] = SCM_REAL_VALUE (val);
+ }
+ break;
+
+ default:
+ scm_wrong_type_arg (0, 0, obj);
+ }
+ return m;
+}
+
+#endif /* SCM_MAJOR_VERSION */
diff -Naur drgeo-1.1.0-dist/guile_fixups.h drgeo-1.1.0/guile_fixups.h
--- drgeo-1.1.0-dist/guile_fixups.h 1970-01-01 01:00:00.000000000 +0100
+++ drgeo-1.1.0/guile_fixups.h 2012-04-19 11:10:34.890671091 +0200
@@ -0,0 +1,42 @@
+#ifndef _GUILE_FIXUPS_
+#define _GUILE_FIXUPS_
+
+#include <libguile/version.h>
+
+#if SCM_MAJOR_VERSION < 2
+#include <guile/gh.h>
+
+#elif SCM_MAJOR_VERSION == 2
+#include <libguile.h>
+
+#define gh_scm2int scm_to_int
+#define gh_scm2double scm_to_double
+#define gh_string_p scm_is_string
+#define gh_scm2newstr(a, b) scm_str2string((a))
+#define gh_scm2ulong scm_to_ulong
+#define gh_car scm_car
+#define gh_cdr scm_cdr
+#define gh_cadr scm_cadr
+#define gh_null_p(l) scm_is_true(scm_null_p((l)))
+#define gh_ulong2scm scm_from_ulong
+#define gh_double2scm scm_from_double
+#define gh_list scm_list_n
+#define gh_new_procedure(p, f, nr, no, v) scm_c_define_gsubr((p), (size_t)(f), (nr), (no), (v))
+#define gh_load(fname) gh_eval_file(fname)
+#define gh_eval_str scm_c_eval_string
+#define gh_catch scm_internal_catch
+#define gh_str02scm scm_from_locale_string
+#define gh_eval_file(f) scm_primitive_load(gh_str02scm((f)));
+
+double *gh_scm2doubles (SCM obj, double *m);
+
+SCM gh_eval_file_with_catch (const char *scheme_code, scm_t_catch_handler handler);
+SCM gh_eval_str_with_catch (const char *scheme_code, scm_t_catch_handler handler);
+
+typedef void (*main_prog_t) (int argc, char **argv);
+typedef void (*repl_prog_t) (int argc, char **argv);
+void gh_enter (int argc, char *argv[], main_prog_t c_main_prog);
+
+#endif // SCM_MAJOR_VERSION
+
+#endif // _GUILE_FIXUPS_
diff -Naur drgeo-1.1.0-dist/Makefile.am drgeo-1.1.0/Makefile.am
--- drgeo-1.1.0-dist/Makefile.am 2005-07-11 22:26:46.000000000 +0200
+++ drgeo-1.1.0/Makefile.am 2012-04-19 11:10:34.888671091 +0200
@@ -36,7 +36,8 @@
drgeo_init.h \
drgeo_init.cc \
drgeo_printer.h \
- drgeo_printer.cc
+ drgeo_printer.cc \
+ guile_fixups.cc
drgeo_LDFLAGS = -export-dynamic
diff -Naur drgeo-1.1.0-dist/Makefile.in drgeo-1.1.0/Makefile.in
--- drgeo-1.1.0-dist/Makefile.in 2005-07-27 09:36:20.000000000 +0200
+++ drgeo-1.1.0/Makefile.in 2012-04-19 11:10:34.920671088 +0200
@@ -217,7 +217,9 @@
drgeo_init.h \
drgeo_init.cc \
drgeo_printer.h \
- drgeo_printer.cc
+ drgeo_printer.cc \
+ guile_fixups.cc \
+ guile_fixups.h
drgeo_LDFLAGS = -export-dynamic
@@ -253,7 +255,7 @@
drgenius_config.$(OBJEXT) drgeo_adaptDialog.$(OBJEXT) \
drgenius_view.$(OBJEXT) geo_view.$(OBJEXT) \
editor_view.$(OBJEXT) drgeo_init.$(OBJEXT) \
- drgeo_printer.$(OBJEXT)
+ drgeo_printer.$(OBJEXT) guile_fixups.$(OBJEXT)
drgeo_OBJECTS = $(am_drgeo_OBJECTS)
drgeo_DEPENDENCIES = $(top_builddir)/geo/libgeo.a