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 +#include #include #include #include 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 #include #include -#include #include #include @@ -36,6 +35,7 @@ #include "drgeo_scm_interface.h" #include "drgenius_help.h" +#include #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 +#include #include 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 +#include #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 -#include +#include #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 +#include #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 +#include #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 +#include #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 +#if SCM_MAJOR_VERSION >= 2 +#include + +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 + +#if SCM_MAJOR_VERSION < 2 +#include + +#elif SCM_MAJOR_VERSION == 2 +#include + +#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