Blob Blame History Raw
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