Remove GH and its traces.
authorHan-Wen Nienhuys <hanwen@lilypond.org>
Sat, 13 Sep 2008 03:19:23 +0000 (00:19 -0300)
committerHan-Wen Nienhuys <hanwen@lilypond.org>
Sun, 28 Sep 2008 21:42:02 +0000 (18:42 -0300)
19 files changed:
NEWS
doc/ref/Makefile.am
doc/ref/gh.texi [deleted file]
doc/ref/guile.texi
guile-readline/readline.c
libguile/ChangeLog-gh [deleted file]
libguile/Makefile.am
libguile/environments.c
libguile/gh.h [deleted file]
libguile/gh_data.c [deleted file]
libguile/gh_eval.c [deleted file]
libguile/gh_funcs.c [deleted file]
libguile/gh_init.c [deleted file]
libguile/gh_io.c [deleted file]
libguile/gh_list.c [deleted file]
libguile/gh_predicates.c [deleted file]
libguile/script.c
test-suite/standalone/Makefile.am
test-suite/standalone/test-gh.c [deleted file]

diff --git a/NEWS b/NEWS
index baa1768..2c3e226 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -32,6 +32,8 @@ See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
 
 * Changes to the C interface
 
+** The GH interface (deprecated in version 1.6, 2001) was removed.
+
 ** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF
 
 This makes these internal functions technically not callable from
index ba24ad1..19458cf 100644 (file)
@@ -55,7 +55,6 @@ guile_TEXINFOS = preface.texi                 \
                 scsh.texi                      \
                 tcltk.texi                     \
                 scheme-scripts.texi            \
-                gh.texi                        \
                 api-overview.texi              \
                 scheme-debugging.texi          \
                 scheme-using.texi              \
diff --git a/doc/ref/gh.texi b/doc/ref/gh.texi
deleted file mode 100644 (file)
index 95dfd92..0000000
+++ /dev/null
@@ -1,1201 +0,0 @@
-@c -*-texinfo-*-
-@c This is part of the GNU Guile Reference Manual.
-@c Copyright (C)  1996, 1997, 2000, 2001, 2002, 2003, 2004
-@c   Free Software Foundation, Inc.
-@c See the file guile.texi for copying conditions.
-
-@page
-@node GH
-@section GH: A Portable C to Scheme Interface
-@cindex libguile - gh
-@cindex gh
-@cindex gh - reference manual
-
-This chapter shows how to use the GH interface to call Guile from your
-application's C code, and to add new Scheme level procedures to Guile
-whose behaviour is specified by application specific code written in C.
-
-Note, however, that the GH interface is now deprecated, and developers
-are encouraged to switch to using the scm interface instead.  Therefore,
-for each GH feature, this chapter also documents how to achieve
-the same result using the scm interface.
-
-@menu
-* GH deprecation::              Why the GH interface is now deprecated.
-* Transitioning away from GH::
-* GH preliminaries::            
-* Data types and constants defined by GH::  
-* Starting and controlling the interpreter::  
-* Error messages::              
-* Executing Scheme code::       
-* Defining new Scheme procedures in C::  
-* Converting data between C and Scheme::  
-* Type predicates::             
-* Equality predicates::         
-* Memory allocation and garbage collection::  
-* Calling Scheme procedures from C::  
-@end menu
-
-
-@node GH deprecation
-@subsection Why the GH Interface is Now Deprecated
-
-Historically, the GH interface was the product of a practical problem
-and a neat idea.  The practical problem was that the interface of the
-@code{scm_} functions with which Guile itself was written (inherited
-from Aubrey Jaffer's SCM) was so closely tied to the (rather arcane)
-details of the internal data representation that it was extremely
-difficult to write a Guile extension using these functions.  The neat
-idea was to define a high level language extension interface in such a
-way that other extension language projects, not just Guile, would be
-able to provide an implementation of that interface; then applications
-using this interface could be compiled with whichever of the various
-available implementations they chose.  So the GH interface was created,
-and advertised both as the recommended interface for application
-developers wishing to use Guile, and as a portable high level interface
-that could theoretically be implemented by other extension language
-projects.
-
-Time passed, and various things changed.  Crucially, an enormous number
-of improvements were made to the @code{scm_} interface that Guile itself
-uses in its implementation, with the result that it is now both easy and
-comfortable to write a Guile extension with this interface.  At the same
-time, the contents of the GH interface were somewhat neglected by the
-core Guile developers, such that some key operations --- such as smob
-creation and management --- are simply not possible using GH alone.
-Finally, the idea of multiple implementations of the GH interface did
-not really crystallize (apart, I believe, from a short lived
-implementation by the MzScheme project).
-
-For all these reasons, the Guile developers have decided to deprecate
-the GH interface --- which means that support for GH will be completely
-removed after the next few releases --- and to focus only on the
-@code{scm_} interface, with additions to ensure that it is as easy to
-use in all respects as GH was.
-
-It remains an open question whether a deep kind of interface portability
-would be useful for extension language-based applications, and it may
-still be an interesting project to attempt to define a corresponding
-GH-like interface, but the Guile developers no longer plan to try to do
-this as part of the core Guile project.
-
-@node Transitioning away from GH
-@subsection Transitioning away from GH
-
-The following table summarizes how to transition from the GH to the
-scm interface.  The replacements that are recommended are not always
-completely equivalent to the GH functionality that they should
-replace.  Therefore, you should read the reference documentation of
-the replacements carefully if you are not yet familiar with them.
-
-@table @asis
-@item Header file
-Use @code{#include <libguile.h>} instead of @code{#include
-<guile/gh.h>}.
-
-@item Compiling and Linking
-Use @code{guile-config} to pick up the flags required to compile C or
-C++ code that uses @code{libguile}, like so
-
-@smallexample
-$(CC) -o prog.o -c prog.c `guile-config compile`
-@end smallexample
-
-If you are using libtool to link your executables, just use
-@code{-lguile} in your link command.  Libtool will expand this into
-the needed linker options automatically.  If you are not using
-libtool, use the @code{guile-config} program to query the needed
-options explicitly.  A linker command like
-
-@smallexample
-$(CC) -o prog prog.o `guile-config link`
-@end smallexample
-
-should be all that is needed.  To link shared libraries that will be
-used as Guile Extensions, use libtool to control both the compilation
-and the link stage.
-
-@item The @code{SCM} type
-No change: the scm interface also uses this type to represent an
-arbitrary Scheme value.
-
-@item @code{SCM_BOOL_F} and @code{SCM_BOOL_T}
-No change.
-
-@item @code{SCM_UNSPECIFIED} and @code{SCM_UNDEFINED}
-No change.
-
-@item @code{gh_enter}
-Use @code{scm_boot_guile} instead, but note that @code{scm_boot_guile}
-has a slightly different calling convention from @code{gh_enter}:
-@code{scm_boot_guile}, and the main program function that you specify
-for @code{scm_boot_guile} to call, both take an additional @var{closure}
-parameter.  @ref{Guile Initialization Functions} for more details.
-
-@item @code{gh_repl}
-Use @code{scm_shell} instead.
-
-@item @code{gh_init}
-Use @code{scm_init_guile} instead.
-
-@item @code{gh_catch}
-Use @code{scm_internal_catch} instead.
-
-@item @code{gh_eval_str}
-Use @code{scm_c_eval_string} instead.
-
-@item @code{gh_eval_str_with_catch}
-Use @code{scm_c_eval_string} together with @code{scm_internal_catch}
-instead.
-
-@item @code{gh_eval_str_with_standard_handler}
-Use @code{scm_c_eval_string} together with @code{scm_internal_catch}
-and @code{scm_handle_by_message_no_exit} instead.
-
-@item @code{gh_eval_str_with_stack_saving_handler}
-Use @code{scm_c_eval_string} together with
-@code{scm_internal_stack_catch} and
-@code{scm_handle_by_message_no_exit} instead.
-
-@item @code{gh_eval_file} or @code{gh_load}
-Use @code{scm_c_primitive_load} instead.
-
-@item @code{gh_eval_file_with_catch}
-Use @code{scm_c_primitive_load} together with
-@code{scm_internal_catch} instead.
-
-@item @code{gh_eval_file_with_standard_handler}
-Use @code{scm_c_primitive_load} together with
-@code{scm_internal_catch} and @code{scm_handle_by_message_no_exit}
-instead.
-
-@item  @code{gh_new_procedure}
-@itemx @code{gh_new_procedure0_0}
-@itemx @code{gh_new_procedure0_1}
-@itemx @code{gh_new_procedure0_2}
-@itemx @code{gh_new_procedure1_0}
-@itemx @code{gh_new_procedure1_1}
-@itemx @code{gh_new_procedure1_2}
-@itemx @code{gh_new_procedure2_0}
-@itemx @code{gh_new_procedure2_1}
-@itemx @code{gh_new_procedure2_2}
-@itemx @code{gh_new_procedure3_0} 
-@itemx @code{gh_new_procedure4_0} 
-@itemx @code{gh_new_procedure5_0} 
-Use @code{scm_c_define_gsubr} instead, but note that the arguments are
-in a different order: for @code{scm_c_define_gsubr} the C function
-pointer is the last argument.  @ref{A Sample Guile Extension} for an
-example.
-
-@item @code{gh_defer_ints} and @code{gh_allow_ints}
-Use @code{SCM_CRITICAL_SECTION_START} and
-@code{SCM_CRITICAL_SECTION_END} instead.  Note that these macros are
-used without parentheses, as in @code{SCM_DEFER_INTS;}.
-
-@item @code{gh_bool2scm}
-Use @code{scm_from_bool} instead.
-
-@item @code{gh_int2scm}
-Use @code{scm_from_int} instead.
-
-@item @code{gh_ulong2scm}
-Use @code{scm_from_ulong} instead.
-
-@item @code{gh_long2scm}
-Use @code{scm_from_long} instead.
-
-@item @code{gh_double2scm}
-Use @code{scm_make_real} instead.
-
-@item @code{gh_char2scm}
-Use @code{SCM_MAKE_CHAR} instead.
-
-@item @code{gh_str2scm}
-Use @code{scm_from_locale_stringn} instead.
-
-@item @code{gh_str02scm}
-Use @code{scm_from_locale_string} instead.
-
-@item @code{gh_set_substr}
-Use @code{scm_string_copy_x}.
-
-@item @code{gh_symbol2scm}
-Use @code{scm_from_locale_symbol} instead.
-
-@item  @code{gh_ints2scm}
-@itemx @code{gh_doubles2scm}
-@itemx @code{gh_chars2byvect}
-@itemx @code{gh_shorts2svect}
-@itemx @code{gh_longs2ivect}
-@itemx @code{gh_ulongs2uvect}
-@itemx @code{gh_floats2fvect}
-@itemx @code{gh_doubles2dvect}
-Use the uniform numeric vector function, @xref{Uniform Numeric
-Vectors}.
-
-@item @code{gh_scm2bool}
-Use @code{scm_is_true} or @code{scm_to_bool} instead.
-
-@item @code{gh_scm2int}
-Use @code{scm_to_int} instead.
-
-@item @code{gh_scm2ulong}
-Use @code{scm_to_ulong} instead.
-
-@item @code{gh_scm2long}
-Use @code{scm_to_long} instead.
-
-@item @code{gh_scm2double}
-Use @code{scm_to_double} instead.
-
-@item @code{gh_scm2char}
-Use @code{scm_to_char} instead.
-
-@item @code{gh_scm2newstr}
-Use @code{scm_to_locale_string} or similar instead.
-
-@item @code{gh_get_substr}
-Use @code{scm_c_substring} together with @code{scm_to_locale_string}
-or similar instead.
-
-@item @code{gh_symbol2newstr}
-Use @code{scm_symbol_to_string} together with @code{scm_to_locale_string} or similar instead.
-
-@item @code{gh_scm2chars}
-Use @code{scm_from_locale_string} (or similar) or the uniform numeric
-vector functions (@pxref{Uniform Numeric Vectors}) instead.
-
-@item  @code{gh_scm2shorts}
-@itemx @code{gh_scm2longs}
-@itemx @code{gh_scm2floats}
-@itemx @code{gh_scm2doubles}
-Use the uniform numeric vector function, @xref{Uniform Numeric
-Vectors}.
-
-@item @code{gh_boolean_p}
-Use @code{scm_is_bool} instead.
-
-@item @code{gh_symbol_p}
-Use @code{scm_is_symbol} instead.
-
-@item @code{gh_char_p}
-Replace @code{gh_char_p (@var{obj})} with
-@example
-scm_is_true (scm_char_p (@var{obj}))
-@end example
-
-@item @code{gh_vector_p}
-Replace @code{gh_vector_p (@var{obj})} with
-@example
-scm_is_true (scm_vector_p (@var{obj}))
-@end example
-
-@item @code{gh_pair_p}
-Replace @code{gh_pair_p (@var{obj})} with
-@example
-scm_is_true (scm_pair_p (@var{obj}))
-@end example
-
-@item @code{gh_number_p}
-Use @code{scm_is_number} instead.
-
-@item @code{gh_string_p}
-Use @code{scm_is_string} instead.
-
-@item @code{gh_procedure_p}
-Replace @code{gh_procedure_p (@var{obj})} by
-@example
-scm_is_true (scm_procedure_p (@var{obj}))
-@end example
-
-@item @code{gh_list_p}
-Replace @code{gh_list_p (@var{obj})} with
-@example
-scm_is_true (scm_list_p (@var{obj}))
-@end example
-
-@item @code{gh_inexact_p}
-Replace @code{gh_inexact_p (@var{obj})} with
-@example
-scm_is_true (scm_inexact_p (@var{obj}))
-@end example
-
-@item @code{gh_exact_p}
-Replace @code{gh_exact_p (@var{obj})} with
-@example
-scm_is_true (scm_exact_p (@var{obj}))
-@end example
-
-@item @code{gh_eq_p}
-Use @code{scm_is_eq} instead.
-
-@item @code{gh_eqv_p}
-Replace @code{gh_eqv_p (@var{x}, @var{y})} with
-@example
-scm_is_true (scm_eqv_p (@var{x}, @var{y}))
-@end example
-
-@item @code{gh_equal_p}
-Replace @code{gh_equal_p (@var{x}, @var{y})} with
-@example
-scm_is_true (scm_equal_p (@var{x}, @var{y}))
-@end example
-
-@item @code{gh_string_equal_p}
-Replace @code{gh_string_equal_p (@var{x}, @var{y})} with
-@example
-scm_is_true (scm_string_equal_p (@var{x}, @var{y}))
-@end example
-
-@item @code{gh_null_p}
-Use @code{scm_is_null} instead.
-
-@item @code{gh_not}
-Use @code{scm_not} instead.
-
-@item @code{gh_make_string}
-Use @code{scm_make_string} instead.
-
-@item @code{gh_string_length}
-Use @code{scm_string_length} instead.
-
-@item @code{gh_string_ref}
-Use @code{scm_string_ref} instead.
-
-@item @code{gh_string_set_x}
-Use @code{scm_string_set_x} instead.
-
-@item @code{gh_substring}
-Use @code{scm_substring} instead.
-
-@item @code{gh_string_append}
-Use @code{scm_string_append} instead.
-
-@item @code{gh_cons}
-Use @code{scm_cons} instead.
-
-@item @code{gh_car} and @code{gh_cdr}
-Use @code{scm_car} and @code{scm_cdr} instead.
-
-@item @code{gh_cxxr} and @code{gh_cxxxr}
-(Where each x is either @samp{a} or @samp{d}.)  Use the corresponding
-@code{scm_cxxr} or @code{scm_cxxxr} function instead.
-
-@item @code{gh_set_car_x} and @code{gh_set_cdr_x}
-Use @code{scm_set_car_x} and @code{scm_set_cdr_x} instead.
-
-@item @code{gh_list}
-Use @code{scm_list_n} instead.
-
-@item @code{gh_length}
-Replace @code{gh_length (@var{lst})} with
-@example
-scm_to_size_t (scm_length (@var{lst}))
-@end example
-
-@item @code{gh_append}
-Use @code{scm_append} instead.
-
-@item @code{gh_append2}, @code{gh_append3}, @code{gh_append4}
-Replace @code{gh_append@var{N} (@var{l1}, @dots{}, @var{lN})} by
-@example
-scm_append (scm_list_n (@var{l1}, @dots{}, @var{lN}, SCM_UNDEFINED))
-@end example
-
-@item @code{gh_reverse}
-Use @code{scm_reverse} instead.
-
-@item @code{gh_list_tail} and @code{gh_list_ref}
-Use @code{scm_list_tail} and @code{scm_list_ref} instead.
-
-@item @code{gh_memq}, @code{gh_memv} and @code{gh_member}
-Use @code{scm_memq}, @code{scm_memv} and @code{scm_member} instead.
-
-@item @code{gh_assq}, @code{gh_assv} and @code{gh_assoc}
-Use @code{scm_assq}, @code{scm_assv} and @code{scm_assoc} instead.
-
-@item @code{gh_make_vector}
-Use @code{scm_make_vector} instead.
-
-@item @code{gh_vector} or @code{gh_list_to_vector}
-Use @code{scm_vector} instead.
-
-@item @code{gh_vector_ref} and @code{gh_vector_set_x}
-Use @code{scm_vector_ref} and @code{scm_vector_set_x} instead.
-
-@item @code{gh_vector_length}
-Use @code{scm_c_vector_length} instead.
-
-@item @code{gh_uniform_vector_length}
-Use @code{scm_c_uniform_vector_length} instead.
-
-@item @code{gh_uniform_vector_ref}
-Use @code{scm_c_uniform_vector_ref} instead.
-
-@item @code{gh_vector_to_list}
-Use @code{scm_vector_to_list} instead.
-
-@item @code{gh_apply}
-Use @code{scm_apply_0} instead.
-
-@item  @code{gh_call0}
-@itemx @code{gh_call1}
-@itemx @code{gh_call2}
-@itemx @code{gh_call3}
-Use @code{scm_call_0}, @code{scm_call_1}, etc instead.
-
-@item  @code{gh_display}
-@itemx @code{gh_write}
-@itemx @code{gh_newline}
-Use @code{scm_display (obj, scm_current_output_port ())} instead, etc.
-
-@item @code{gh_lookup}
-Use @code{scm_variable_ref (scm_c_lookup (name))} instead.
-
-@item @code{gh_module_lookup}
-Use @code{scm_variable_ref (scm_c_module_lookup (module, name))} instead.
-
-@end table
-
-@node GH preliminaries
-@subsection GH preliminaries
-
-To use gh, you must have the following toward the beginning of your C
-source:
-@smallexample
-#include <guile/gh.h>
-@end smallexample
-@cindex gh - headers
-
-When you link, you will have to add at least @code{-lguile} to the list
-of libraries.  If you are using more of Guile than the basic Scheme
-interpreter, you will have to add more libraries.
-@cindex gh - linking
-
-
-@node Data types and constants defined by GH
-@subsection Data types and constants defined by GH
-
-The following C constants and data types are defined in gh:
-
-@code{SCM} is a C data type used to store all Scheme data, no matter what the
-Scheme type.  Values are converted between C data types and the SCM type
-with utility functions described below (@pxref{Converting data between C
-and Scheme}).  [FIXME: put in references to Jim's essay and so forth.]
-
-@defvr Constant SCM_BOOL_T
-@defvrx Constant SCM_BOOL_F
-The @emph{Scheme} values returned by many boolean procedures in
-libguile.
-
-This can cause confusion because they are different from 0 and 1.  In
-testing a boolean function in libguile programming, you must always make
-sure that you check the spec: @code{gh_} and @code{scm_} functions will
-usually return @code{SCM_BOOL_T} and @code{SCM_BOOL_F}, but other C
-functions usually can be tested against 0 and 1, so programmers' fingers
-tend to just type @code{if (boolean_function()) @{ ... @}}
-@end defvr
-
-@defvr Constant SCM_UNSPECIFIED
-This is a SCM value that is not the same as any legal Scheme value.  It
-is the value that a Scheme function returns when its specification says
-that its return value is unspecified.
-@end defvr
-
-@defvr Constant SCM_UNDEFINED
-This is another SCM value that is not the same as any legal Scheme
-value.  It is the value used to mark variables that do not yet have a
-value, and it is also used in C to terminate functions with variable
-numbers of arguments, such as @code{gh_list()}.
-@end defvr
-
-
-@node Starting and controlling the interpreter
-@subsection Starting and controlling the interpreter
-@cindex libguile - start interpreter
-
-In almost every case, your first @code{gh_} call will be:
-
-@deftypefun void gh_enter (int @var{argc}, char *@var{argv}[], void (*@var{main_prog})())
-Starts up a Scheme interpreter with all the builtin Scheme primitives.
-@code{gh_enter()} never exits, and the user's code should all be in the
-@code{@var{main_prog}()} function.  @code{argc} and @code{argv} will be
-passed to @var{main_prog}.
-
-@deftypefun void main_prog (int @var{argc}, char *@var{argv}[])
-This is the user's main program.  It will be invoked by
-@code{gh_enter()} after Guile has been started up.
-@end deftypefun
-
-Note that you can use @code{gh_repl} inside @code{gh_enter} (in other
-words, inside the code for @code{main-prog}) if you want the program to
-be controlled by a Scheme read-eval-print loop.
-@end deftypefun
-
-@cindex read eval print loop -- from the gh_ interface
-@cindex REPL -- from the gh_ interface
-A convenience routine which enters the Guile interpreter with the
-standard Guile read-eval-print loop (@dfn{REPL}) is:
-
-@deftypefun void gh_repl (int @var{argc}, char *@var{argv}[])
-Enters the Scheme interpreter giving control to the Scheme REPL.
-Arguments are processed as if the Guile program @file{guile} were being
-invoked.
-
-Note that @code{gh_repl} should be used @emph{inside} @code{gh_enter},
-since any Guile interpreter calls are meaningless unless they happen in
-the context of the interpreter.
-
-Also note that when you use @code{gh_repl}, your program will be
-controlled by Guile's REPL (which is written in Scheme and has many
-useful features).  Use straight C code inside @code{gh_enter} if you
-want to maintain execution control in your C program.
-@end deftypefun
-
-You will typically use @code{gh_enter} and @code{gh_repl} when you
-want a Guile interpreter enhanced by your own libraries, but otherwise
-quite normal.  For example, to build a Guile--derived program that
-includes some random number routines @dfn{GSL} (GNU Scientific Library),
-you would write a C program that looks like this:
-
-@smallexample
-#include <guile/gh.h>
-#include <gsl_ran.h>
-
-/* random number suite */
-SCM gw_ran_seed(SCM s)
-@{
-  gsl_ran_seed(gh_scm2int(s));
-  return SCM_UNSPECIFIED;
-@}
-
-SCM gw_ran_random()
-@{
-  SCM x;
-
-  x = gh_ulong2scm(gsl_ran_random());
-  return x;
-@}
-
-SCM gw_ran_uniform()
-@{
-  SCM x;
-
-  x = gh_double2scm(gsl_ran_uniform());
-  return x;
-@}
-SCM gw_ran_max()
-@{
-  return gh_double2scm(gsl_ran_max());
-@}
-
-void
-init_gsl()
-@{
-  /* random number suite */
-  gh_new_procedure("gsl-ran-seed", gw_ran_seed, 1, 0, 0);
-  gh_new_procedure("gsl-ran-random", gw_ran_random, 0, 0, 0);
-  gh_new_procedure("gsl-ran-uniform", gw_ran_uniform, 0, 0, 0);
-  gh_new_procedure("gsl-ran-max", gw_ran_max, 0, 0, 0);
-@}
-
-void
-main_prog (int argc, char *argv[])
-@{
-  init_gsl();
-
-  gh_repl(argc, argv);
-@}
-
-int
-main (int argc, char *argv[])
-@{
-  gh_enter (argc, argv, main_prog);
-@}
-@end smallexample
-
-Then, supposing the C program is in @file{guile-gsl.c}, you could
-compile it with @kbd{gcc -o guile-gsl guile-gsl.c -lguile -lgsl}.
-
-The resulting program @file{guile-gsl} would have new primitive
-procedures @code{gsl-ran-random}, @code{gsl-ran-gaussian} and so forth.
-
-
-@node Error messages
-@subsection Error messages
-@cindex libguile - error messages
-@cindex error messages in libguile
-
-[FIXME: need to fill this based on Jim's new mechanism]
-
-
-@node Executing Scheme code
-@subsection Executing Scheme code
-@cindex libguile - executing Scheme
-@cindex executing Scheme
-
-Once you have an interpreter running, you can ask it to evaluate Scheme
-code.  There are two calls that implement this:
-
-@deftypefun SCM gh_eval_str (char *@var{scheme_code})
-This asks the interpreter to evaluate a single string of Scheme code,
-and returns the result of the last expression evaluated.
-
-Note that the line of code in @var{scheme_code} must be a well formed
-Scheme expression.  If you have many lines of code before you balance
-parentheses, you must either concatenate them into one string, or use
-@code{gh_eval_file()}.
-@end deftypefun
-
-@deftypefun SCM gh_eval_file (char *@var{fname})
-@deftypefunx SCM gh_load (char *@var{fname})
-@code{gh_eval_file} is completely analogous to @code{gh_eval_str()},
-except that a whole file is evaluated instead of a string.
-@code{gh_eval_file} returns @code{SCM_UNSPECIFIED}.
-
-@code{gh_load} is identical to @code{gh_eval_file} (it's a macro that
-calls @code{gh_eval_file} on its argument).  It is provided to start
-making the @code{gh_} interface match the R5RS Scheme procedures
-closely.
-@end deftypefun
-
-
-@node Defining new Scheme procedures in C
-@subsection Defining new Scheme procedures in C
-@cindex libguile - new procedures
-@cindex new procedures
-@cindex procedures, new
-@cindex new primitives
-@cindex primitives, new
-
-The real interface between C and Scheme comes when you can write new
-Scheme procedures in C.  This is done through the routine
-
-
-@deftypefn {Libguile high} SCM gh_new_procedure (char *@var{proc_name}, SCM (*@var{fn})(), int @var{n_required_args}, int @var{n_optional_args}, int @var{restp})
-@code{gh_new_procedure} defines a new Scheme procedure.  Its Scheme name
-will be @var{proc_name}, it will be implemented by the C function
-(*@var{fn})(), it will take at least @var{n_required_args} arguments,
-and at most @var{n_optional_args} extra arguments.
-
-When the @var{restp} parameter is 1, the procedure takes a final
-argument: a list of remaining parameters.
-
-@code{gh_new_procedure} returns an SCM value representing the procedure.
-
-The C function @var{fn} should have the form
-@deftypefn {Libguile high} SCM fn (SCM @var{req1}, SCM @var{req2}, ..., SCM @var{opt1},  SCM @var{opt2}, ...,  SCM @var{rest_args})
-The arguments are all passed as SCM values, so the user will have to use
-the conversion functions to convert to standard C types.
-
-Examples of C functions used as new Scheme primitives can be found in
-the sample programs @code{learn0} and @code{learn1}.
-@end deftypefn
-
-@end deftypefn
-
-@strong{Rationale:} this is the correct way to define new Scheme
-procedures in C.  The ugly mess of arguments is required because of how
-C handles procedures with variable numbers of arguments.
-
-@strong{NB:} what about documentation strings?
-
-@cartouche
-There are several important considerations to be made when writing the C
-routine @code{(*fn)()}.
-
-First of all the C routine has to return type @code{SCM}.
-
-Second, all arguments passed to the C function will be of type
-@code{SCM}.
-
-Third: the C routine is now subject to Scheme flow control, which means
-that it could be interrupted at any point, and then reentered.  This
-means that you have to be very careful with operations such as
-allocating memory, modifying static data @dots{}
-
-Fourth: to get around the latter issue, you can use
-@code{GH_DEFER_INTS} and @code{GH_ALLOW_INTS}.
-@end cartouche
-
-@defmac GH_DEFER_INTS
-@defmacx GH_ALLOW_INTS
-These macros disable and re-enable Scheme's flow control.  They 
-@end defmac
-
-
-@c [??? have to do this right; maybe using subsections, or maybe creating a
-@c section called Flow control issues...]
-
-@c [??? Go into exhaustive detail with examples of the various possible
-@c combinations of required and optional args...]
-
-
-@node Converting data between C and Scheme
-@subsection Converting data between C and Scheme
-@cindex libguile - converting data
-@cindex data conversion
-@cindex converting data
-
-Guile provides mechanisms to convert data between C and Scheme.  This
-allows new builtin procedures to understand their arguments (which are
-of type @code{SCM}) and return values of type @code{SCM}.
-
-
-@menu
-* C to Scheme::                 
-* Scheme to C::                 
-@end menu
-
-@node C to Scheme
-@subsubsection C to Scheme
-
-@deftypefun SCM gh_bool2scm (int @var{x})
-Returns @code{#f} if @var{x} is zero, @code{#t} otherwise.
-@end deftypefun
-
-@deftypefun SCM gh_ulong2scm (unsigned long @var{x})
-@deftypefunx SCM gh_long2scm (long @var{x})
-@deftypefunx SCM gh_double2scm (double @var{x})
-@deftypefunx SCM gh_char2scm (char @var{x})
-Returns a Scheme object with the value of the C quantity @var{x}.
-@end deftypefun
-
-@deftypefun SCM gh_str2scm (char *@var{s}, int @var{len})
-Returns a new Scheme string with the (not necessarily null-terminated) C
-array @var{s} data.
-@end deftypefun
-
-@deftypefun SCM gh_str02scm (char *@var{s})
-Returns a new Scheme string with the null-terminated C string @var{s}
-data.
-@end deftypefun
-
-@deftypefun SCM gh_set_substr (char *@var{src}, SCM @var{dst}, int @var{start}, int @var{len})
-Copy @var{len} characters at @var{src} into the @emph{existing} Scheme
-string @var{dst}, starting at @var{start}.  @var{start} is an index into
-@var{dst}; zero means the beginning of the string.
-
-If @var{start} + @var{len} is off the end of @var{dst}, signal an
-out-of-range error.
-@end deftypefun
-
-@deftypefun SCM gh_symbol2scm (char *@var{name})
-Given a null-terminated string @var{name}, return the symbol with that
-name.
-@end deftypefun
-
-@deftypefun SCM gh_ints2scm (int *@var{dptr}, int @var{n})
-@deftypefunx SCM gh_doubles2scm (double *@var{dptr}, int @var{n})
-Make a scheme vector containing the @var{n} ints or doubles at memory
-location @var{dptr}.
-@end deftypefun
-
-@deftypefun SCM gh_chars2byvect (char *@var{dptr}, int @var{n})
-@deftypefunx SCM gh_shorts2svect (short *@var{dptr}, int @var{n})
-@deftypefunx SCM gh_longs2ivect (long *@var{dptr}, int @var{n})
-@deftypefunx SCM gh_ulongs2uvect (ulong *@var{dptr}, int @var{n})
-@deftypefunx SCM gh_floats2fvect (float *@var{dptr}, int @var{n})
-@deftypefunx SCM gh_doubles2dvect (double *@var{dptr}, int @var{n})
-Make a scheme uniform vector containing the @var{n} chars, shorts,
-longs, unsigned longs, floats or doubles at memory location @var{dptr}.
-@end deftypefun
-
-
-
-@node Scheme to C
-@subsubsection Scheme to C
-
-@deftypefun int gh_scm2bool (SCM @var{obj})
-@deftypefunx {unsigned long} gh_scm2ulong (SCM @var{obj})
-@deftypefunx long gh_scm2long (SCM @var{obj})
-@deftypefunx double gh_scm2double (SCM @var{obj})
-@deftypefunx int gh_scm2char (SCM @var{obj})
-These routines convert the Scheme object to the given C type.
-@end deftypefun
-
-@deftypefun {char *} gh_scm2newstr (SCM @var{str}, size_t *@var{lenp})
-Given a Scheme string @var{str}, return a pointer to a new copy of its
-contents, followed by a null byte.  If @var{lenp} is non-null, set
-@code{*@var{lenp}} to the string's length.
-
-This function uses malloc to obtain storage for the copy; the caller is
-responsible for freeing it.
-
-Note that Scheme strings may contain arbitrary data, including null
-characters.  This means that null termination is not a reliable way to
-determine the length of the returned value.  However, the function
-always copies the complete contents of @var{str}, and sets @var{*lenp}
-to the true length of the string (when @var{lenp} is non-null).
-@end deftypefun
-
-
-@deftypefun void gh_get_substr (SCM str, char *return_str, int *lenp)
-Copy @var{len} characters at @var{start} from the Scheme string
-@var{src} to memory at @var{dst}.  @var{start} is an index into
-@var{src}; zero means the beginning of the string.  @var{dst} has
-already been allocated by the caller.
-
-If @var{start} + @var{len} is off the end of @var{src}, signal an
-out-of-range error.
-@end deftypefun
-
-@deftypefun {char *} gh_symbol2newstr (SCM @var{sym}, int *@var{lenp})
-Takes a Scheme symbol and returns a string of the form
-@code{"'symbol-name"}.  If @var{lenp} is non-null, the string's length
-is returned in @code{*@var{lenp}}.
-
-This function uses malloc to obtain storage for the returned string; the
-caller is responsible for freeing it.
-@end deftypefun
-
-@deftypefun {char *} gh_scm2chars (SCM @var{vector}, chars *@var{result})
-@deftypefunx {short *} gh_scm2shorts (SCM @var{vector}, short *@var{result})
-@deftypefunx {long *} gh_scm2longs (SCM @var{vector}, long *@var{result})
-@deftypefunx {float *} gh_scm2floats (SCM @var{vector}, float *@var{result})
-@deftypefunx {double *} gh_scm2doubles (SCM @var{vector}, double *@var{result})
-Copy the numbers in @var{vector} to the array pointed to by @var{result}
-and return it.  If @var{result} is NULL, allocate a double array large
-enough.
-
-@var{vector} can be an ordinary vector, a weak vector, or a signed or
-unsigned uniform vector of the same type as the result array.  For
-chars, @var{vector} can be a string or substring.  For floats and
-doubles, @var{vector} can contain a mix of inexact and integer values.
-
-If @var{vector} is of unsigned type and contains values too large to fit
-in the signed destination array, those values will be wrapped around,
-that is, data will be copied as if the destination array was unsigned.
-@end deftypefun
-
-
-@node Type predicates
-@subsection Type predicates
-
-These C functions mirror Scheme's type predicate procedures with one
-important difference.  The C routines return C boolean values (0 and 1)
-instead of @code{SCM_BOOL_T} and @code{SCM_BOOL_F}.
-
-The Scheme notational convention of putting a @code{?} at the end of
-predicate procedure names is mirrored in C by placing @code{_p} at the
-end of the procedure.  For example, @code{(pair? ...)} maps to
-@code{gh_pair_p(...)}.
-
-@deftypefun int gh_boolean_p (SCM @var{val})
-Returns 1 if @var{val} is a boolean, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_symbol_p (SCM @var{val})
-Returns 1 if @var{val} is a symbol, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_char_p (SCM @var{val})
-Returns 1 if @var{val} is a char, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_vector_p (SCM @var{val})
-Returns 1 if @var{val} is a vector, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_pair_p (SCM @var{val})
-Returns 1 if @var{val} is a pair, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_procedure_p (SCM @var{val})
-Returns 1 if @var{val} is a procedure, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_list_p (SCM @var{val})
-Returns 1 if @var{val} is a list, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_inexact_p (SCM @var{val})
-Returns 1 if @var{val} is an inexact number, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_exact_p (SCM @var{val})
-Returns 1 if @var{val} is an exact number, 0 otherwise.
-@end deftypefun
-
-
-@node Equality predicates
-@subsection Equality predicates
-
-These C functions mirror Scheme's equality predicate procedures with one
-important difference.  The C routines return C boolean values (0 and 1)
-instead of @code{SCM_BOOL_T} and @code{SCM_BOOL_F}.
-
-The Scheme notational convention of putting a @code{?} at the end of
-predicate procedure names is mirrored in C by placing @code{_p} at the
-end of the procedure.  For example, @code{(equal? ...)} maps to
-@code{gh_equal_p(...)}.
-
-@deftypefun int gh_eq_p (SCM x, SCM y)
-Returns 1 if @var{x} and @var{y} are equal in the sense of Scheme's
-@code{eq?} predicate, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_eqv_p (SCM x, SCM y)
-Returns 1 if @var{x} and @var{y} are equal in the sense of Scheme's
-@code{eqv?} predicate, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_equal_p (SCM x, SCM y)
-Returns 1 if @var{x} and @var{y} are equal in the sense of Scheme's
-@code{equal?} predicate, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_string_equal_p (SCM @var{s1}, SCM @var{s2})
-Returns 1 if the strings @var{s1} and @var{s2} are equal, 0 otherwise.
-@end deftypefun
-
-@deftypefun int gh_null_p (SCM @var{l})
-Returns 1 if @var{l} is an empty list or pair; 0 otherwise.
-@end deftypefun
-
-
-@node Memory allocation and garbage collection
-@subsection Memory allocation and garbage collection
-
-@c [FIXME: flesh this out with some description of garbage collection in
-@c scm/guile]
-
-@c @deftypefun SCM gh_mkarray (int size)
-@c Allocate memory for a Scheme object in a garbage-collector-friendly
-@c manner.
-@c @end deftypefun
-
-
-@node Calling Scheme procedures from C
-@subsection Calling Scheme procedures from C
-
-Many of the Scheme primitives are available in the @code{gh_}
-interface; they take and return objects of type SCM, and one could
-basically use them to write C code that mimics Scheme code.
-
-I will list these routines here without much explanation, since what
-they do is the same as documented in @ref{Standard procedures, R5RS, ,
-r5rs, R5RS}.  But I will point out that when a procedure takes a
-variable number of arguments (such as @code{gh_list}), you should pass
-the constant @var{SCM_UNDEFINED} from C to signify the end of the list.
-
-@deftypefun SCM gh_define (char *@var{name}, SCM @var{val})
-Corresponds to the Scheme @code{(define name val)}: it binds a value to
-the given name (which is a C string).  Returns the new object.
-@end deftypefun
-
-@heading Pairs and lists
-
-@deftypefun SCM gh_cons (SCM @var{a}, SCM @var{b})
-@deftypefunx SCM gh_list (SCM l0, SCM l1, ... , SCM_UNDEFINED)
-These correspond to the Scheme @code{(cons a b)} and @code{(list l0 l1
-...)} procedures.  Note that @code{gh_list()} is a C macro that invokes
-@code{scm_list_n()}.
-@end deftypefun
-
-@deftypefun SCM gh_car (SCM @var{obj})
-@deftypefunx SCM gh_cdr (SCM @var{obj})
-@dots{}
-
-@deftypefunx SCM gh_c[ad][ad][ad][ad]r (SCM @var{obj})
-These correspond to the Scheme @code{(caadar ls)} procedures etc @dots{}
-@end deftypefun
-
-@deftypefun SCM gh_set_car_x (SCM @var{pair}, SCM @var{value})
-Modifies the CAR of @var{pair} to be @var{value}.  This is equivalent to
-the Scheme procedure @code{(set-car! ...)}.
-@end deftypefun
-
-@deftypefun SCM gh_set_cdr_x (SCM @var{pair}, SCM @var{value})
-Modifies the CDR of @var{pair} to be @var{value}.  This is equivalent to
-the Scheme procedure @code{(set-cdr! ...)}.
-@end deftypefun
-
-@deftypefun {unsigned long} gh_length (SCM @var{ls})
-Returns the length of the list.
-@end deftypefun
-
-@deftypefun SCM gh_append (SCM @var{args})
-@deftypefunx SCM gh_append2 (SCM @var{l1}, SCM @var{l2})
-@deftypefunx SCM gh_append3 (SCM @var{l1}, SCM @var{l2}, @var{l3})
-@deftypefunx SCM gh_append4 (SCM @var{l1}, SCM @var{l2}, @var{l3}, @var{l4})
-@code{gh_append()} takes @var{args}, which is a list of lists
-@code{(list1 list2 ...)}, and returns a list containing all the elements
-of the individual lists.
-
-A typical invocation of @code{gh_append()} to append 5 lists together
-would be
-@smallexample
-  gh_append(gh_list(l1, l2, l3, l4, l5, SCM_UNDEFINED));
-@end smallexample
-
-The functions @code{gh_append2()}, @code{gh_append2()},
-@code{gh_append3()} and @code{gh_append4()} are convenience routines to
-make it easier for C programs to form the list of lists that goes as an
-argument to @code{gh_append()}.
-@end deftypefun
-
-@deftypefun SCM gh_reverse (SCM @var{ls})
-Returns a new list that has the same elements as @var{ls} but in the
-reverse order.  Note that this is implemented as a macro which calls
-@code{scm_reverse()}.
-@end deftypefun
-
-@deftypefun SCM gh_list_tail (SCM @var{ls}, SCM @var{k})
-Returns the sublist of @var{ls} with the last @var{k} elements.
-@end deftypefun
-
-@deftypefun SCM gh_list_ref (SCM @var{ls}, SCM @var{k})
-Returns the @var{k}th element of the list @var{ls}.
-@end deftypefun
-
-@deftypefun SCM gh_memq (SCM @var{x}, SCM @var{ls})
-@deftypefunx SCM gh_memv (SCM @var{x}, SCM @var{ls})
-@deftypefunx SCM gh_member (SCM @var{x}, SCM @var{ls})
-These functions return the first sublist of @var{ls} whose CAR is
-@var{x}.  They correspond to @code{(memq x ls)}, @code{(memv x ls)} and
-@code{(member x ls)}, and hence use (respectively) @code{eq?},
-@code{eqv?} and @code{equal?} to do comparisons.
-
-If @var{x} does not appear in @var{ls}, the value @code{SCM_BOOL_F} (not
-the empty list) is returned.
-
-Note that these functions are implemented as macros which call
-@code{scm_memq()}, @code{scm_memv()} and @code{scm_member()}
-respectively.
-@end deftypefun
-
-@deftypefun SCM gh_assq (SCM @var{x}, SCM @var{alist})
-@deftypefunx SCM gh_assv (SCM @var{x}, SCM @var{alist})
-@deftypefunx SCM gh_assoc (SCM @var{x}, SCM @var{alist})
-These functions search an @dfn{association list} (list of pairs)
-@var{alist} for the first pair whose CAR is @var{x}, and they return
-that pair.
-
-If no pair in @var{alist} has @var{x} as its CAR, the value
-@code{SCM_BOOL_F} (not the empty list) is returned.
-
-Note that these functions are implemented as macros which call
-@code{scm_assq()}, @code{scm_assv()} and @code{scm_assoc()}
-respectively.
-@end deftypefun
-
-
-@heading Symbols
-
-@c @deftypefun SCM gh_symbol (SCM str, SCM len)
-@c @deftypefunx SCM gh_tmp_symbol (SCM str, SCM len)
-@c Takes the given string @var{str} of length @var{len} and returns a
-@c symbol corresponding to that string.
-@c @end deftypefun
-
-
-@heading Vectors
-
-@deftypefun SCM gh_make_vector (SCM @var{n}, SCM @var{fill})
-@deftypefunx SCM gh_vector (SCM @var{ls})
-@deftypefunx SCM gh_vector_ref (SCM @var{v}, SCM @var{i})
-@deftypefunx SCM gh_vector_set (SCM @var{v}, SCM @var{i}, SCM @var{val})
-@deftypefunx {unsigned long} gh_vector_length (SCM @var{v})
-@deftypefunx SCM gh_list_to_vector (SCM @var{ls})
-These correspond to the Scheme @code{(make-vector n fill)},
-@code{(vector a b c ...)} @code{(vector-ref v i)} @code{(vector-set v i
-value)} @code{(vector-length v)} @code{(list->vector ls)} procedures.
-
-The correspondence is not perfect for @code{gh_vector}: this routine
-takes a list @var{ls} instead of the individual list elements, thus
-making it identical to @code{gh_list_to_vector}.
-
-There is also a difference in gh_vector_length: the value returned is a
-C @code{unsigned long} instead of an SCM object.
-@end deftypefun
-
-
-@heading Procedures
-
-@c @deftypefun SCM gh_make_subr (SCM (*@var{fn})(), int @var{req}, int @var{opt}, int @var{restp}, char *@var{sym})
-@c Make the C function @var{fn} available to Scheme programs.  The function
-@c will be bound to the symbol @var{sym}.  The arguments @var{req},
-@c @var{opt} and @var{restp} describe @var{fn}'s calling conventions.  The
-@c function must take @var{req} required arguments and may take @var{opt}
-@c optional arguments.  Any optional arguments which are not supplied by
-@c the caller will be bound to @var{SCM_UNSPECIFIED}.  If @var{restp} is
-@c non-zero, it means that @var{fn} may be called with an arbitrary number
-@c of arguments, and that any extra arguments supplied by the caller will
-@c be passed to @var{fn} as a list.  The @var{restp} argument is exactly
-@c like Scheme's @code{(lambda (arg1 arg2 . arglist))} calling convention.
-@c 
-@c For example, the procedure @code{read-line}, which takes optional
-@c @var{port} and @var{handle-delim} arguments, would be declared like so:
-@c 
-@c @example
-@c SCM scm_read_line (SCM port, SCM handle_delim);
-@c gh_make_subr (scm_read_line, 0, 2, 0, "read-line");
-@c @end example
-@c 
-@c The @var{req} argument to @code{gh_make_subr} is 0 to indicate that
-@c there are no required arguments, so @code{read-line} may be called
-@c without any arguments at all.  The @var{opt} argument is 2, to indicate
-@c that both the @var{port} and @var{handle_delim} arguments to
-@c @code{scm_read_line} are optional, and will be bound to
-@c @code{SCM_UNSPECIFIED} if the calling program does not supply them.
-@c Because the @var{restp} argument is 0, this function may not be called
-@c with more than two arguments.
-@c @end deftypefun
-
-@deftypefun SCM gh_apply (SCM proc, SCM args)
-Call the Scheme procedure @var{proc}, with the elements of @var{args} as
-arguments.  @var{args} must be a proper list.  
-@end deftypefun
-
-@deftypefun SCM gh_call0 (SCM proc)
-@deftypefunx SCM gh_call1 (SCM proc, SCM arg)
-@deftypefunx SCM gh_call2 (SCM proc, SCM arg1, SCM arg2)
-@deftypefunx SCM gh_call3 (SCM proc, SCM arg1, SCM arg2, SCM arg3)
-Call the Scheme procedure @var{proc} with no arguments
-(@code{gh_call0}), one argument (@code{gh_call1}), and so on.  You can
-get the same effect by wrapping the arguments up into a list, and
-calling @code{gh_apply}; Guile provides these functions for convenience.
-@end deftypefun
-
-
-@deftypefun SCM gh_catch (SCM key, SCM thunk, SCM handler)
-@deftypefunx SCM gh_throw (SCM key, SCM args)
-Corresponds to the Scheme @code{catch} and @code{throw} procedures,
-which in Guile are provided as primitives.
-@end deftypefun
-
-@c [FIXME: must add the I/O section in gscm.h]
-
-@deftypefun SCM gh_is_eq (SCM a, SCM b)
-@deftypefunx SCM gh_is_eqv (SCM a, SCM b)
-@deftypefunx SCM gh_is_equal (SCM a, SCM b)
-These correspond to the Scheme @code{eq?}, @code{eqv?} and @code{equal?}
-predicates.
-@end deftypefun
-
-@deftypefun int gh_obj_length (SCM @var{obj})
-Returns the raw object length.
-@end deftypefun
-
-@heading Data lookup
-
-For now I just include Tim Pierce's comments from the @file{gh_data.c}
-file; it should be organized into a documentation of the two functions
-here.
-
-@smallexample
-/* Data lookups between C and Scheme
-
-   Look up a symbol with a given name, and return the object to which
-   it is bound.  gh_lookup examines the Guile top level, and
-   gh_module_lookup checks the module name space specified by the
-   `vec' argument.
-
-   The return value is the Scheme object to which SNAME is bound, or
-   SCM_UNDEFINED if SNAME is not bound in the given context. [FIXME:
-   should this be SCM_UNSPECIFIED?  Can a symbol ever legitimately be
-   bound to SCM_UNDEFINED or SCM_UNSPECIFIED?  What is the difference?
-   -twp] */
-@end smallexample
-
index a56f95c..2ae3d63 100644 (file)
@@ -307,7 +307,6 @@ available through both Scheme and C interfaces.
 * Translation::                 Support for translating other languages.
 * Internationalization::        Support for gettext, etc.
 * Debugging::                   Debugging infrastructure and Scheme interface.
-* GH::                          The deprecated GH interface.
 @end menu
 
 @include api-overview.texi
@@ -331,7 +330,6 @@ available through both Scheme and C interfaces.
 @include api-translation.texi
 @include api-i18n.texi
 @include api-debug.texi
-@include gh.texi
 
 @node Guile Modules
 @chapter Guile Modules
index 9178ebd..58599ca 100644 (file)
@@ -27,7 +27,6 @@
 
 #ifdef HAVE_RL_GETC_FUNCTION
 #include "libguile.h"
-#include "libguile/gh.h"
 #include "libguile/iselect.h"
 
 #include <stdio.h>
diff --git a/libguile/ChangeLog-gh b/libguile/ChangeLog-gh
deleted file mode 100644 (file)
index 52dbc58..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-The gh implementation (gh_data.c, gh.h, etc.) used to live in a
-separate directory called gh.  In April 1997, that dir was merged with
-libguile; this is the ChangeLog from the old directory.
-
-Please put new entries in the ordinary ChangeLog.
-
-Thu Apr 10 16:14:43 1997  Jim Blandy  <jimb@floss.cyclic.com>
-
-       Let the test programs build even when we're not using threads.
-       * configure.in: Use CY_AC_WITH_THREADS to decide whether to build
-       with threads.
-       * Makefile.am (check_PROGRAMS_LDADD): Remove -lthreads -lqt.  The
-       configure script will stick them in LIBS if they're needed.
-       * Makefile.in, aclocal.m4, configure: Rebuilt.
-
-       * gh_funcs.c (gh_apply, gh_call0, gh_call1, gh_call2, gh_call3):
-       New functions.
-       * gh.h: Prototypes for above.
-       * gh_test_c.c (main_prog): Added test cases for above.
-       
-       * gh.h (gh_display, gh_newline): Added prototypes.
-
-       * gh_test_c.c (main_prog): Remove bizarre single quote from test
-       of gh_symbol2scm, and from "test" of (display "hello world").
-
-       * gh.c: Removed; its guts have been redistributed to the other
-       gh-mumble.c files.
-
-       * gh.c, gh_data.c, gh_eval.c, gh_funcs.c, gh_init.c, gh_io.c,
-       gh_list.c, gh_predicates.c, gh_test_c.c, gh_test_repl.c:
-       Re-indented, according to the GNU coding standards.  (Put function
-       names at beginning of lines, basically.)
-
-Wed Apr  9 17:56:34 1997  Jim Blandy  <jimb@floss.cyclic.com>
-
-       Changes to work with automake-1.1n, which has better libtool support.
-       * Makefile.am: Use lib_LTLIBRARIES, not lib_PROGRAMS.
-       * Makefile.in: Regenerated.
-
-Sat Mar  8 06:37:23 1997  Gary Houston  <ghouston@actrix.gen.nz>
-
-       * gh_eval.c (gh_eval_file): remove case_i, sharp arguments from
-       scm_primitive_load call.
-
-Mon Feb 24 21:45:32 1997  Mikael Djurfeldt  <mdj@mdj.nada.kth.se>
-
-       * configure.in: Added AM_MAINTAINER_MODE
-
-Wed Feb 12 16:34:42 1997  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * gh_data.c (gh_symbol2newstr): added this conversion from SCM
-       symbol to C string.
-       (gh_set_substr): more data conversion: from part of a (possibly
-       large) C string to an existing SCM string.
-       (gh_get_substr): more data conversion: from part of a (possibly
-       large) SCM string to an existing C char array.
-
-Mon Feb 10 14:03:09 1997  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * gh_funcs.c (gh_define): added this function.
-
-       * gh_init.c (gh_catch): fixed stupid bug, gh_catch() was not
-       returning anything.
-
-       * gh_data.c (gh_scm2newstr): Renamed gh_scm2str0() to
-       gh_scm2newstr(), and did away with the str0 convention (it doesn't
-       seem to belong in gh_).
-       (gh_scm2str): this function now copies Scheme data to a
-       pre-allocated C string.
-
-Fri Feb  7 15:12:30 1997  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * gh_data.c (gh_scm2str0): On Sascha Ziemann and Jim Blandy's
-       suggestion I changed gh_scm2str0() so that it returns a malloc-ed
-       string, rather than taking a pre-allocated string with a maximum
-       length...
-
-Fri Jan 24 08:18:28 1997  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * gh_eval.c (gh_eval_str): gh_eval_str() now returns an SCM object
-       with the result of the evaluation.  It has also been simplified to
-       just call scm_eval_0str().  gh_eval_file() has been similarly
-       altered.
-
-Sat Jan 11 14:40:17 1997  Marius Vollmer  <mvo@zagadka.ping.de>
-
-       * ltconfig, ltmain.sh: New files for libtool support. libguile,
-       rx, gh and gtcltk-lib can now be build as shared libraries.
-       * Makefile.am (EXTRA_DIST): Added ltconfig and ltmain.sh
-
-Sun Jan  5 16:57:10 1997  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * Guile 1.0 released.  This is the first release by the Free
-       Software Foundation; Cygnus has also released earlier versions of
-       Guile.
-       
-       * GUILE-VERSION: Updated version number.
-       * NEWS: Added comments for all the user-visible changes marked in
-       the ChangeLogs.
-       * README: Updated for release.
-
-Thu Dec 12 00:14:32 1996  Gary Houston  <ghouston@actrix.gen.nz>
-
-       * scsh: new directory.
-
-Mon Dec  2 17:33:04 1996  Tom Tromey  <tromey@cygnus.com>
-
-       * configure.in: Generate doc/guile-programmer/Makefile and
-       doc/guile-user/Makefile.
-
-Sat Nov 30 23:45:54 1996  Tom Tromey  <tromey@cygnus.com>
-
-       * aclocal.m4: Now automatically generated by aclocal.
-       * threads.m4: New file.
-       * guile.m4: New file.
-       * Makefile.am, doc/Makefile.am: New files.
-       * configure.in: Updated for Automake.  Avoid excessively verbose
-       "greet" messages.
-
-Wed Oct 16 07:32:14 1996  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * lgh: directory renamed to gh, along with all prefixes of the
-       high level library procedures.
-
-Thu Oct 10 14:37:43 1996  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * Makefile.in (TAGS tags): Find the source files in $srcdir. 
-
-Wed Oct  9 19:37:14 1996  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * Makefile.in (DISTFILES): Add AUTHORS and aclocal.m4.
-
-Tue Oct  1 00:13:55 1996  Mikael Djurfeldt  <mdj@woody.nada.kth.se>
-
-       * configure.in: Added some configuration magic from the Cygnus
-       distribution.
-
-       * aclocal.m4: New file.  For now used for thread support
-       configuration.
-       
-Fri Sep 13 14:39:30 1996  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * Makefile.in (DISTFILES): added mkinstalldirs to the DISTFILES
-
-       * PLUGIN: changed the PLUGIN/REQ files in the ice-9 and lgh
-       directories, to arrange for lgh to the last thing
-       configured/built.
-
-Wed Sep 11 21:11:33 1996  Mark Galassi  <rosalia@nis.lanl.gov>
-
-       * lgh/: added the directory in which I implement the high level
-       libguile library (lgh_) for this release of Guile.  See the
-       ChangeLog in there for further details.
-
-Wed Sep 11 16:12:53 1996  Mark Galassi  <rosalia@sarastro.lanl.gov>
-
-       * doc/ (guile-user and guile-programmer): added the guile-user and
-       guile-programmer directories which contain the user and programmer
-       manuals.  See the ChangeLog entries there for detail.
-
-Wed Sep 11 14:33:49 1996  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * Makefile.in (distclean): Don't forget to delete doc/Makefile.
-
-       * Makefile.in (distclean): Don't forget to delete
-       config.build-subdirs.
-
-Thu Sep  5 17:36:15 1996  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * Makefile.in (tags): New name for `TAGS' target, which will
-       always run the commands.
-
-Thu Sep  5 09:56:50 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       * README: Doc fixes.
-
-Fri Aug 30 16:56:27 1996  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * Makefile.in (TAGS): Produce a single tags file for all of Guile.
-
-Thu Aug 15 19:03:03 1996  Jim Blandy  <jimb@floss.cyclic.com>
-
-       * configure.in: Check for -ldl, so the check for Tcl won't fail
-       spuriously.
-
-Thu Aug 15 01:29:29 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       Change the way we decide whether to build gtcltk-lib, so that it's
-       omitted from the build process when appropriate, but never from
-       the dist process.
-       * configure.in: Don't edit all_subdirs depending on the
-       availability of Tk; let that be the list of all PLUGIN
-       subdirectories present, as it used to be.  Instead, edit a new
-       variable, build_subdirs; write its final value, the list of
-       subdirs we do want to compile in, to config.build-subdirs.
-       Substitute that into the top-level Makefile too.
-       * Makefile.in (subdirs): Set this to @build_subdirs@, so we only
-       recurse on the subdirectories we should build.
-       (distdirs): Set this to @existingdirs@, so it includes the subdirs
-       we decided not to build.
-
-       * doc/gtcltk.texi: File resurrected from old Guile releases.
-       * doc/Makefile.in (info): Build the gtcltk documentation.
-       (DIST_FILES): Include it in the distribution.
-
-       * configure.in: If we can find the library for tcl7.5, build
-       gtcltk-lib.  Call AC_PROG_CC, to help run that test with the right
-       compiler (not sure this is necessary).
-
-Mon Aug 12 15:09:37 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       * NEWS: Fix bug reporting address.
-
-Fri Aug  9 15:58:42 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       * AUTHORS: New file, in accordance with the GNU maintainers'
-       standards.
-
-Tue Aug  6 14:40:44 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       * README: Renamed from ANNOUNCE; include bug report address,
-       description, and short tour.
-       * INSTALL: Renamed from BUILDING.
-       * NEWS: New file.
-       * Makefile.in (DISTFILES): Update appropriately.
-
-Thu Aug  1 02:31:53 1996  Jim Blandy  <jimb@totoro.cyclic.com>
-
-       * doc/Makefile.in: Added pattern targets for creating DVI and
-       PostScript files.
-       (%.ps, %.dvi, %.txt): New targets.
-       (DVIPS, TEXI2DVI): New variables.
-
-       * GUILE-VERSION: Updated to 1.0b3.
-
-       Rehashed distribution system, in preparation for nightly
-       snapshots.  Other changes in subdirectories.
-       * Makefile.in (dist): Rewritten --- the old target was out of
-       date, dependent on files that we don't have, and relied on GNU
-       tar.  The new target is simpler.
-       (VERSION, srcdir, dist_dirs): New variables.
-       (DISTFILES): Renamed from localfiles.  Added GUILE-VERSION and
-       TODO.
-       (localtreats): Variable removed.  We don't have this file.
-       (info): cd to doc and make info there; don't make info in every
-       ${subdir}; those Makefiles don't know what to do.
-       (distname, distdir, treats, announcefile): Variables removed.
-       (manifest-file): Target removed.
-       (dist-dir): New target, responsible for distributable files in
-       this directory.
-       (GZIP, GZIP_EXT, TAR_VERBOSE, DIST_NAME): New variables,
-       controlling the 'dist' target.
-       * configure.in: Substitute GUILE-VERSION into the top-level
-       Makefile.  Build doc/Makefile from doc/Makefile.in.
-
-       * doc/Makefile.in: New file.
index b530565..39b4016 100644 (file)
@@ -111,8 +111,7 @@ libguile_la_SOURCES = alist.c arbiters.c async.c backtrace.c boolean.c      \
     eval.c evalext.c extensions.c feature.c fluids.c fports.c          \
     futures.c gc.c gc-mark.c gc-segment.c gc-malloc.c gc-card.c                \
     gc-freelist.c gc_os_dep.c gdbint.c gettext.c gc-segment-table.c     \
-    gh_data.c gh_eval.c gh_funcs.c                                     \
-    gh_init.c gh_io.c gh_list.c gh_predicates.c goops.c gsubr.c                \
+    goops.c gsubr.c            \
     guardians.c hash.c hashtab.c hooks.c init.c inline.c               \
     ioext.c keywords.c lang.c list.c load.c macros.c mallocs.c         \
     modules.c numbers.c objects.c objprop.c options.c pairs.c ports.c  \
@@ -205,7 +204,7 @@ libguile_la_LIBADD = @LIBLOBJS@ $(gnulib_library)
 libguile_la_LDFLAGS = @LTLIBINTL@ -version-info @LIBGUILE_INTERFACE_CURRENT@:@LIBGUILE_INTERFACE_REVISION@:@LIBGUILE_INTERFACE_AGE@ -export-dynamic -no-undefined
 
 # These are headers visible as <guile/mumble.h>
-pkginclude_HEADERS = gh.h
+pkginclude_HEADERS = 
 
 # These are headers visible as <libguile/mumble.h>.
 modincludedir = $(includedir)/libguile
@@ -235,7 +234,7 @@ bin_SCRIPTS = guile-snarf
 # and people feel like maintaining them.  For now, this is not the case.
 noinst_SCRIPTS = guile-doc-snarf guile-snarf-docs guile-func-name-check
 
-EXTRA_DIST = ChangeLog-gh ChangeLog-scm ChangeLog-threads              \
+EXTRA_DIST = ChangeLog-scm ChangeLog-threads           \
     ChangeLog-1996-1999 ChangeLog-2000 ChangeLog-2008 cpp_signal.c     \
     cpp_errno.c cpp_err_symbols.in cpp_err_symbols.c                   \
     cpp_sig_symbols.c cpp_sig_symbols.in cpp_cnvt.awk                  \
index 13d63c0..b81527e 100644 (file)
@@ -23,7 +23,6 @@
 #include "libguile/_scm.h"
 #include "libguile/alist.h"
 #include "libguile/eval.h"
-#include "libguile/gh.h"
 #include "libguile/hash.h"
 #include "libguile/list.h"
 #include "libguile/ports.h"
diff --git a/libguile/gh.h b/libguile/gh.h
deleted file mode 100644 (file)
index ea55137..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/* Copyright (C) 1995,1996,1997,1998,2000,2001, 2005, 2006 Free Software Foundation, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-
-#ifndef __GH_H
-#define __GH_H
-
-/* This needs to be included outside of the extern "C" block.
- */
-#include <libguile.h>
-
-#if SCM_ENABLE_DEPRECATED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* gcc has extern inline functions that are basically as fast as macros */
-#ifdef __GNUC__
-# define INL inline
-# define EXTINL extern inline
-#else
-# define INL
-#define EXTINL
-#endif /* __GNUC__ */
-
-SCM_API void gh_enter(int argc, char *argv[], 
-                     void (*c_main_prog)(int, char **));
-#define gh_init () scm_init_guile ()
-SCM_API void gh_repl(int argc, char *argv[]);
-SCM_API SCM gh_catch(SCM tag, scm_t_catch_body body, void *body_data,
-                    scm_t_catch_handler handler, void *handler_data);
-
-SCM_API SCM gh_standard_handler(void *data, SCM tag, SCM throw_args);
-
-SCM_API SCM gh_eval_str(const char *scheme_code);
-SCM_API SCM gh_eval_str_with_catch(const char *scheme_code, scm_t_catch_handler handler);
-SCM_API SCM gh_eval_str_with_standard_handler(const char *scheme_code);
-SCM_API SCM gh_eval_str_with_stack_saving_handler(const char *scheme_code);
-
-SCM_API SCM gh_eval_file(const char *fname);
-#define gh_load(fname) gh_eval_file(fname)
-SCM_API SCM gh_eval_file_with_catch(const char *scheme_code, scm_t_catch_handler handler);
-SCM_API SCM gh_eval_file_with_standard_handler(const char *scheme_code);
-
-#define gh_defer_ints() SCM_CRITICAL_SECTION_START
-#define gh_allow_ints() SCM_CRITICAL_SECTION_END
-
-SCM_API SCM gh_new_procedure(const char *proc_name, SCM (*fn)(),
-                            int n_required_args, int n_optional_args, 
-                            int varp);
-SCM_API SCM gh_new_procedure0_0(const char *proc_name, SCM (*fn)(void));
-SCM_API SCM gh_new_procedure0_1(const char *proc_name, SCM (*fn)(SCM));
-SCM_API SCM gh_new_procedure0_2(const char *proc_name, SCM (*fn)(SCM, SCM));
-SCM_API SCM gh_new_procedure1_0(const char *proc_name, SCM (*fn)(SCM));
-SCM_API SCM gh_new_procedure1_1(const char *proc_name, SCM (*fn)(SCM, SCM));
-SCM_API SCM gh_new_procedure1_2(const char *proc_name, SCM (*fn)(SCM, SCM, SCM));
-SCM_API SCM gh_new_procedure2_0(const char *proc_name, SCM (*fn)(SCM, SCM));
-SCM_API SCM gh_new_procedure2_1(const char *proc_name, SCM (*fn)(SCM, SCM, SCM));
-SCM_API SCM gh_new_procedure2_2(const char *proc_name, SCM (*fn)(SCM, SCM, SCM, SCM));
-SCM_API SCM gh_new_procedure3_0(const char *proc_name, SCM (*fn)(SCM, SCM, SCM));
-SCM_API SCM gh_new_procedure4_0(const char *proc_name, SCM (*fn)(SCM, SCM, SCM, SCM));
-SCM_API SCM gh_new_procedure5_0(const char *proc_name, SCM (*fn)(SCM, SCM, SCM, SCM, SCM));
-
-/* C to Scheme conversion */
-SCM_API SCM gh_bool2scm(int x);
-SCM_API SCM gh_int2scm(int x);
-SCM_API SCM gh_ulong2scm(unsigned long x);
-SCM_API SCM gh_long2scm(long x);
-SCM_API SCM gh_double2scm(double x);
-SCM_API SCM gh_char2scm(char c);
-SCM_API SCM gh_str2scm(const char *s, size_t len);
-SCM_API SCM gh_str02scm(const char *s);
-SCM_API void gh_set_substr(const char *src, SCM dst, long start, size_t len);
-SCM_API SCM gh_symbol2scm(const char *symbol_str);
-SCM_API SCM gh_ints2scm(const int *d, long n);
-
-SCM_API SCM gh_chars2byvect(const char *d, long n);
-SCM_API SCM gh_shorts2svect(const short *d, long n);
-SCM_API SCM gh_longs2ivect(const long *d, long n);
-SCM_API SCM gh_ulongs2uvect(const unsigned long *d, long n);
-SCM_API SCM gh_floats2fvect(const float *d, long n);
-SCM_API SCM gh_doubles2dvect(const double *d, long n);
-
-SCM_API SCM gh_doubles2scm(const double *d, long n);
-
-/* Scheme to C conversion */
-SCM_API int gh_scm2bool(SCM obj);
-SCM_API int gh_scm2int(SCM obj);
-SCM_API unsigned long gh_scm2ulong(SCM obj);
-SCM_API long gh_scm2long(SCM obj);
-SCM_API char gh_scm2char(SCM obj);
-SCM_API double gh_scm2double(SCM obj);
-SCM_API char *gh_scm2newstr(SCM str, size_t *lenp);
-SCM_API void gh_get_substr(SCM src, char *dst, long start, size_t len);
-SCM_API char *gh_symbol2newstr(SCM sym, size_t *lenp);
-SCM_API char *gh_scm2chars(SCM vector, char *result);
-SCM_API short *gh_scm2shorts(SCM vector, short *result);
-SCM_API long *gh_scm2longs(SCM vector, long *result);
-SCM_API float *gh_scm2floats(SCM vector, float *result);
-SCM_API double *gh_scm2doubles(SCM vector, double *result);
-
-/* type predicates: tell you if an SCM object has a given type */
-SCM_API int gh_boolean_p(SCM val);
-SCM_API int gh_symbol_p(SCM val);
-SCM_API int gh_char_p(SCM val);
-SCM_API int gh_vector_p(SCM val);
-SCM_API int gh_pair_p(SCM val);
-SCM_API int gh_number_p(SCM val);
-SCM_API int gh_string_p(SCM val);
-SCM_API int gh_procedure_p(SCM val);
-SCM_API int gh_list_p(SCM val);
-SCM_API int gh_inexact_p(SCM val);
-SCM_API int gh_exact_p(SCM val);
-
-/* more predicates */
-SCM_API int gh_eq_p(SCM x, SCM y);
-SCM_API int gh_eqv_p(SCM x, SCM y);
-SCM_API int gh_equal_p(SCM x, SCM y);
-SCM_API int gh_string_equal_p(SCM s1, SCM s2);
-SCM_API int gh_null_p(SCM l);
-
-/* standard Scheme procedures available from C */
-
-#define gh_not(x) scm_not(x)
-
-SCM_API SCM gh_define(const char *name, SCM val);
-
-/* string manipulation routines */
-#define gh_make_string(k, chr)       scm_make_string(k, chr)
-#define gh_string_length(str)        scm_string_length(str)
-#define gh_string_ref(str, k)        scm_string_ref(str, k)
-#define gh_string_set_x(str, k, chr) scm_string_set_x(str, k, chr)
-#define gh_substring(str, start, end) scm_substring(str, start, end)
-#define gh_string_append(args)       scm_string_append(args)
-
-
-/* vector manipulation routines */
-/* note that gh_vector() does not behave quite like the Scheme (vector
-   obj1 obj2 ...), because the interpreter engine does not pass the
-   data element by element, but rather as a list.  thus, gh_vector()
-   ends up being identical to gh_list_to_vector() */
-#define gh_vector(ls) scm_vector(ls)
-SCM_API SCM gh_make_vector(SCM length, SCM val);
-SCM_API SCM gh_vector_set_x(SCM vec, SCM pos, SCM val);
-SCM_API SCM gh_vector_ref(SCM vec, SCM pos);
-SCM_API unsigned long gh_vector_length (SCM v);
-SCM_API unsigned long gh_uniform_vector_length (SCM v);
-SCM_API SCM gh_uniform_vector_ref (SCM v, SCM ilist);
-#define gh_list_to_vector(ls) scm_vector(ls)
-#define gh_vector_to_list(v) scm_vector_to_list(v)
-
-SCM_API SCM gh_lookup (const char *sname);
-SCM_API SCM gh_module_lookup (SCM module, const char *sname);
-
-SCM_API SCM gh_cons(SCM x, SCM y);
-#define gh_list scm_list_n
-SCM_API unsigned long gh_length(SCM l);
-SCM_API SCM gh_append(SCM args);
-SCM_API SCM gh_append2(SCM l1, SCM l2);
-SCM_API SCM gh_append3(SCM l1, SCM l2, SCM l3);
-SCM_API SCM gh_append4(SCM l1, SCM l2, SCM l3, SCM l4);
-#define gh_reverse(ls) scm_reverse(ls)
-#define gh_list_tail(ls, k) scm_list_tail(ls, k)
-#define gh_list_ref(ls, k) scm_list_ref(ls, k)
-#define gh_memq(x, ls) scm_memq(x, ls)
-#define gh_memv(x, ls) scm_memv(x, ls)
-#define gh_member(x, ls) scm_member(x, ls)
-#define gh_assq(x, alist) scm_assq(x, alist)
-#define gh_assv(x, alist) scm_assv(x, alist)
-#define gh_assoc(x, alist) scm_assoc(x, alist)
-
-SCM_API SCM gh_car(SCM x);
-SCM_API SCM gh_cdr(SCM x);
-
-SCM_API SCM gh_caar(SCM x);
-SCM_API SCM gh_cadr(SCM x);
-SCM_API SCM gh_cdar(SCM x);
-SCM_API SCM gh_cddr(SCM x);
-
-SCM_API SCM gh_caaar(SCM x);
-SCM_API SCM gh_caadr(SCM x);
-SCM_API SCM gh_cadar(SCM x);
-SCM_API SCM gh_caddr(SCM x);
-SCM_API SCM gh_cdaar(SCM x);
-SCM_API SCM gh_cdadr(SCM x);
-SCM_API SCM gh_cddar(SCM x);
-SCM_API SCM gh_cdddr(SCM x);
-
-SCM_API SCM gh_set_car_x(SCM pair, SCM value);
-SCM_API SCM gh_set_cdr_x(SCM pair, SCM value);
-
-
-/* Calling Scheme functions from C.  */
-SCM_API SCM gh_apply (SCM proc, SCM ls);
-SCM_API SCM gh_call0 (SCM proc);
-SCM_API SCM gh_call1 (SCM proc, SCM arg);
-SCM_API SCM gh_call2 (SCM proc, SCM arg1, SCM arg2);
-SCM_API SCM gh_call3 (SCM proc, SCM arg1, SCM arg2, SCM arg3);
-
-/* reading and writing Scheme objects.  */
-SCM_API void gh_display (SCM x);
-SCM_API void gh_write (SCM x);
-SCM_API void gh_newline (void);
-
-/* void  gh_gc_mark(SCM)              : mark an SCM as in use. */
-/* void  gh_defer_ints()              : don't interrupt code section. */
-/* void  gh_allow_ints()              : see gh_defer_ints(). */
-/* void  gh_new_cell(SCM, int tag)    : initialize SCM to be of type 'tag' */
-/* int   gh_type_p(SCM, tag)          : test if SCM is of type 'tag' */
-/* SCM   gh_intern(char*)             : get symbol corresponding to c-string.*/
-/* void  gh_set_ext_data(SCM, void*)  : set extension data on SCM */
-/* void *gh_get_ext_data(SCM)         : return extension data from SCM. */
-
-/* void  gh_assert(int cond, char *msg, SCM obj); */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-#endif /* __GH_H */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_data.c b/libguile/gh_data.c
deleted file mode 100644 (file)
index 101d0fb..0000000
+++ /dev/null
@@ -1,659 +0,0 @@
-/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2004, 2006 Free Software Foundation, Inc.
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-
-/* data initialization and C<->Scheme data conversion */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include "libguile/gh.h"
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include <assert.h>
-
-#if SCM_ENABLE_DEPRECATED
-
-/* data conversion C->scheme */
-
-SCM 
-gh_bool2scm (int x)
-{
-  return scm_from_bool(x);
-}
-SCM 
-gh_int2scm (int x)
-{
-  return scm_from_long ((long) x);
-}
-SCM 
-gh_ulong2scm (unsigned long x)
-{
-  return scm_from_ulong (x);
-}
-SCM 
-gh_long2scm (long x)
-{
-  return scm_from_long (x);
-}
-SCM 
-gh_double2scm (double x)
-{
-  return scm_from_double (x);
-}
-SCM 
-gh_char2scm (char c)
-{
- return SCM_MAKE_CHAR (c);
-}
-SCM 
-gh_str2scm (const char *s, size_t len)
-{
-  return scm_from_locale_stringn (s, len);
-}
-SCM 
-gh_str02scm (const char *s)
-{
-  return scm_from_locale_string (s);
-}
-/* Copy LEN characters at SRC into the *existing* Scheme string DST,
-   starting at START.  START is an index into DST; zero means the
-   beginning of the string.
-
-   If START + LEN is off the end of DST, signal an out-of-range
-   error.  */
-void 
-gh_set_substr (const char *src, SCM dst, long start, size_t len)
-{
-  char *dst_ptr;
-  size_t dst_len;
-
-  SCM_ASSERT (scm_is_string (dst), dst, SCM_ARG3, "gh_set_substr");
-
-  dst_len = scm_i_string_length (dst);
-  SCM_ASSERT (start + len <= dst_len, dst, SCM_ARG4, "gh_set_substr");
-
-  dst_ptr = scm_i_string_writable_chars (dst);
-  memmove (dst_ptr + start, src, len);
-  scm_i_string_stop_writing ();
-  scm_remember_upto_here_1 (dst);
-}
-
-/* Return the symbol named SYMBOL_STR.  */
-SCM 
-gh_symbol2scm (const char *symbol_str)
-{
-  return scm_from_locale_symbol(symbol_str);
-}
-
-SCM
-gh_ints2scm (const int *d, long n)
-{
-  long i;
-  SCM v = scm_c_make_vector (n, SCM_UNSPECIFIED);
-  for (i = 0; i < n; ++i)
-    SCM_SIMPLE_VECTOR_SET (v, i, scm_from_int (d[i]));
-
-  return v;
-}
-
-SCM
-gh_doubles2scm (const double *d, long n)
-{
-  long i;
-  SCM v = scm_c_make_vector (n, SCM_UNSPECIFIED);
-
-  for(i = 0; i < n; i++) 
-    SCM_SIMPLE_VECTOR_SET (v, i, scm_from_double (d[i]));
-  return v;
-}
-
-
-SCM
-gh_chars2byvect (const char *d, long n)
-{
-  char *m = scm_malloc (n);
-  memcpy (m, d, n * sizeof (char));
-  return scm_take_s8vector ((scm_t_int8 *)m, n);
-}
-
-SCM
-gh_shorts2svect (const short *d, long n)
-{
-  char *m = scm_malloc (n * sizeof (short));
-  memcpy (m, d, n * sizeof (short));
-  assert (sizeof (scm_t_int16) == sizeof (short));
-  return scm_take_s16vector ((scm_t_int16 *)m, n);
-}
-
-SCM
-gh_longs2ivect (const long *d, long n)
-{
-  char *m = scm_malloc (n * sizeof (long));
-  memcpy (m, d, n * sizeof (long));
-  assert (sizeof (scm_t_int32) == sizeof (long));
-  return scm_take_s32vector ((scm_t_int32 *)m, n);
-}
-
-SCM
-gh_ulongs2uvect (const unsigned long *d, long n)
-{
-  char *m = scm_malloc (n * sizeof (unsigned long));
-  memcpy (m, d, n * sizeof (unsigned long));
-  assert (sizeof (scm_t_uint32) == sizeof (unsigned long));
-  return scm_take_u32vector ((scm_t_uint32 *)m, n);
-}
-
-SCM
-gh_floats2fvect (const float *d, long n)
-{
-  char *m = scm_malloc (n * sizeof (float));
-  memcpy (m, d, n * sizeof (float));
-  return scm_take_f32vector ((float *)m, n);
-}
-
-SCM
-gh_doubles2dvect (const double *d, long n)
-{
-  char *m = scm_malloc (n * sizeof (double));
-  memcpy (m, d, n * sizeof (double));
-  return scm_take_f64vector ((double *)m, n);
-}
-
-/* data conversion scheme->C */
-int 
-gh_scm2bool (SCM obj)
-{
-  return (scm_is_false (obj)) ? 0 : 1;
-}
-unsigned long 
-gh_scm2ulong (SCM obj)
-{
-  return scm_to_ulong (obj);
-}
-long 
-gh_scm2long (SCM obj)
-{
-  return scm_to_long (obj);
-}
-int 
-gh_scm2int (SCM obj)
-{
-  return scm_to_int (obj);
-}
-double 
-gh_scm2double (SCM obj)
-{
-  return scm_to_double (obj);
-}
-char 
-gh_scm2char (SCM obj)
-#define FUNC_NAME "gh_scm2char"
-{
-  SCM_VALIDATE_CHAR (SCM_ARG1, obj);
-  return SCM_CHAR (obj);
-}
-#undef FUNC_NAME
-
-/* Convert a vector, weak vector, string, substring or uniform vector
-   into an array of chars.  If result array in arg 2 is NULL, malloc a
-   new one.  If out of memory, return NULL.  */
-char *
-gh_scm2chars (SCM obj, char *m)
-{
-  long i, n;
-  long v;
-  SCM val;
-  if (SCM_IMP (obj))
-    scm_wrong_type_arg (0, 0, obj);
-  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))
-           {
-             v = SCM_I_INUM (val);
-             if (v < -128 || v > 255)
-               scm_out_of_range (0, obj);
-           }
-         else
-           scm_wrong_type_arg (0, 0, obj);
-       }
-      if (m == 0)
-       m = (char *) malloc (n * sizeof (char));
-      if (m == NULL)
-       return NULL;
-      for (i = 0; i < n; ++i)
-       m[i] = SCM_I_INUM (SCM_SIMPLE_VECTOR_REF (obj, i));
-      break;
-    case scm_tc7_smob:
-      if (scm_is_true (scm_s8vector_p (obj)))
-       {
-         scm_t_array_handle handle;
-         size_t len;
-         ssize_t inc;
-         const scm_t_int8 *elts;
-
-         elts = scm_s8vector_elements (obj, &handle, &len, &inc);
-         if (inc != 1)
-           scm_misc_error (NULL, "only contiguous vectors are supported: ~a",
-                           scm_list_1 (obj));
-         if (m == 0)
-           m = (char *) malloc (len);
-         if (m != NULL)
-           memcpy (m, elts, len);
-         scm_array_handle_release (&handle);
-         if (m == NULL)
-           return NULL;
-         break;
-       }
-      else
-       goto wrong_type;
-    case scm_tc7_string:
-      n = scm_i_string_length (obj);
-      if (m == 0)
-       m = (char *) malloc (n * sizeof (char));
-      if (m == NULL)
-       return NULL;
-      memcpy (m, scm_i_string_chars (obj), n * sizeof (char));
-      break;
-    default:
-    wrong_type:
-      scm_wrong_type_arg (0, 0, obj);
-    }
-  return m;
-}
-
-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
-   shorts.  If result array in arg 2 is NULL, malloc a new one.  If
-   out of memory, return NULL.  */
-short *
-gh_scm2shorts (SCM obj, short *m)
-{
-  long i, n;
-  long v;
-  SCM val;
-  if (SCM_IMP (obj))
-    scm_wrong_type_arg (0, 0, obj);
-
-  SCM2WHATEVER (obj, scm_s16vector_p, scm_t_int16, short)
-
-  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))
-           {
-             v = SCM_I_INUM (val);
-             if (v < -32768 || v > 65535)
-               scm_out_of_range (0, obj);
-           }
-         else
-           scm_wrong_type_arg (0, 0, obj);
-       }
-      if (m == 0)
-       m = (short *) malloc (n * sizeof (short));
-      if (m == NULL)
-       return NULL;
-      for (i = 0; i < n; ++i)
-       m[i] = SCM_I_INUM (SCM_SIMPLE_VECTOR_REF (obj, i));
-      break;
-    default:
-      scm_wrong_type_arg (0, 0, obj);
-    }
-  return m;
-}
-
-/* Convert a vector, weak vector or uniform vector into an array of
-   longs.  If result array in arg 2 is NULL, malloc a new one.  If out
-   of memory, return NULL.  */
-long *
-gh_scm2longs (SCM obj, long *m)
-{
-  long i, n;
-  SCM val;
-  if (SCM_IMP (obj))
-    scm_wrong_type_arg (0, 0, obj);
-
-  SCM2WHATEVER (obj, scm_s32vector_p, scm_t_int32, long)
-
-  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_wrong_type_arg (0, 0, obj);
-       }
-      if (m == 0)
-       m = (long *) malloc (n * sizeof (long));
-      if (m == NULL)
-       return NULL;
-      for (i = 0; i < n; ++i)
-       {
-         val = SCM_SIMPLE_VECTOR_REF (obj, i);
-         m[i] = SCM_I_INUMP (val) 
-           ? SCM_I_INUM (val) 
-           : scm_to_long (val);
-       }
-      break;
-    default:
-      scm_wrong_type_arg (0, 0, obj);
-    }
-  return m;
-}
-
-/* Convert a vector, weak vector or uniform vector into an array of
-   floats.  If result array in arg 2 is NULL, malloc a new one.  If
-   out of memory, return NULL.  */
-float *
-gh_scm2floats (SCM obj, float *m)
-{
-  long i, n;
-  SCM val;
-  if (SCM_IMP (obj))
-    scm_wrong_type_arg (0, 0, obj);
-
-  /* XXX - f64vectors are rejected now.
-   */
-  SCM2WHATEVER (obj, scm_f32vector_p, float, float)
-
-  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 = (float *) malloc (n * sizeof (float));
-      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;
-}
-
-/* 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;
-}
-
-/* string conversions between C and Scheme */
-
-/* gh_scm2newstr() -- Given a Scheme string STR, return a pointer to a
-   new copy of its contents, followed by a null byte.  If lenp is
-   non-null, set *lenp to the string's length.
-
-   This function uses malloc to obtain storage for the copy; the
-   caller is responsible for freeing it.  If out of memory, NULL is
-   returned.
-
-   Note that Scheme strings may contain arbitrary data, including null
-   characters.  This means that null termination is not a reliable way
-   to determine the length of the returned value.  However, the
-   function always copies the complete contents of STR, and sets
-   *LEN_P to the true length of the string (when LEN_P is non-null).  */
-char *
-gh_scm2newstr (SCM str, size_t *lenp)
-{
-  char *ret_str;
-
-  /* We can't use scm_to_locale_stringn directly since it does not
-     guarantee null-termination when lenp is non-NULL.
-   */
-
-  ret_str = scm_to_locale_string (str);
-  if (lenp)
-    *lenp = scm_i_string_length (str);
-  return ret_str;
-}
-
-/* Copy LEN characters at START from the Scheme string SRC to memory
-   at DST.  START is an index into SRC; zero means the beginning of
-   the string.  DST has already been allocated by the caller.
-
-   If START + LEN is off the end of SRC, silently truncate the source
-   region to fit the string.  If truncation occurs, the corresponding
-   area of DST is left unchanged.  */
-void 
-gh_get_substr (SCM src, char *dst, long start, size_t len)
-{
-  size_t src_len, effective_length;
-  SCM_ASSERT (scm_is_string (src), src, SCM_ARG3, "gh_get_substr");
-
-  src_len = scm_i_string_length (src);
-  effective_length = (len < src_len) ? len : src_len;
-  memcpy (dst + start, scm_i_string_chars (src), effective_length * sizeof (char));
-  /* FIXME: must signal an error if len > src_len */
-  scm_remember_upto_here_1 (src);
-}
-
-
-/* gh_scm2newsymbol() -- Given a Scheme symbol 'identifier, return a
-   pointer to a string with the symbol characters "identifier",
-   followed by a null byte.  If lenp is non-null, set *lenp to the
-   string's length.
-
-   This function uses malloc to obtain storage for the copy; the
-   caller is responsible for freeing it.  If out of memory, NULL is
-   returned.*/
-char *
-gh_symbol2newstr (SCM sym, size_t *lenp)
-{
-  return gh_scm2newstr (scm_symbol_to_string (sym), lenp);
-}
-
-
-/* create a new vector of the given length, all initialized to the
-   given value */
-SCM
-gh_make_vector (SCM len, SCM fill)
-{
-  return scm_make_vector (len, fill);
-}
-
-/* set the given element of the given vector to the given value */
-SCM 
-gh_vector_set_x (SCM vec, SCM pos, SCM val)
-{
-  return scm_vector_set_x (vec, pos, val);
-}
-
-/* retrieve the given element of the given vector */
-SCM 
-gh_vector_ref (SCM vec, SCM pos)
-{
-  return scm_vector_ref (vec, pos);
-}
-
-/* returns the length of the given vector */
-unsigned long 
-gh_vector_length (SCM v)
-{
-  return (unsigned long) scm_c_vector_length (v);
-}
-
-/* uniform vector support */
-
-/* returns the length as a C unsigned long integer */
-unsigned long
-gh_uniform_vector_length (SCM v)
-{
-  return (unsigned long) scm_c_uniform_vector_length (v);
-}
-
-/* gets the given element from a uniform vector; ilist is a list (or
-   possibly a single integer) of indices, and its length is the
-   dimension of the uniform vector */
-SCM
-gh_uniform_vector_ref (SCM v, SCM ilist)
-{
-  return scm_uniform_vector_ref (v, ilist);
-}
-
-/* sets an individual element in a uniform vector */
-/* SCM */
-/* gh_list_to_uniform_array ( */
-
-/* Data lookups between C and Scheme
-
-   Look up a symbol with a given name, and return the object to which
-   it is bound.  gh_lookup examines the Guile top level, and
-   gh_module_lookup checks the module namespace specified by the
-   `vec' argument.
-
-   The return value is the Scheme object to which SNAME is bound, or
-   SCM_UNDEFINED if SNAME is not bound in the given context.
- */
-
-SCM
-gh_lookup (const char *sname)
-{
-  return gh_module_lookup (scm_current_module (), sname);
-}
-
-
-SCM
-gh_module_lookup (SCM module, const char *sname)
-#define FUNC_NAME "gh_module_lookup"
-{
-  SCM sym, var;
-
-  SCM_VALIDATE_MODULE (SCM_ARG1, module);
-
-  sym = scm_from_locale_symbol (sname);
-  var = scm_sym2var (sym, scm_module_lookup_closure (module), SCM_BOOL_F);
-  if (var != SCM_BOOL_F)
-    return SCM_VARIABLE_REF (var);
-  else
-    return SCM_UNDEFINED;
-}
-#undef FUNC_NAME
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_eval.c b/libguile/gh_eval.c
deleted file mode 100644 (file)
index 737975e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*      Copyright (C) 1995,1996,1997,1998, 2000, 2001, 2006, 2008 Free Software Foundation, Inc.
-
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-
-/* routines to evaluate Scheme code */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libguile/gh.h"
-
-#if SCM_ENABLE_DEPRECATED
-
-typedef SCM (*gh_eval_t) (void *data, SCM jmpbuf);
-
-/* Evaluate the string; toss the value.  */
-SCM
-gh_eval_str (const char *scheme_code)
-{
-  return scm_c_eval_string (scheme_code);
-}
-
-/* evaluate the file by passing it to the lower level scm_primitive_load() */
-SCM
-gh_eval_file (const char *fname)
-{
-  return scm_primitive_load (gh_str02scm (fname));
-}
-
-static SCM
-eval_str_wrapper (void *data)
-{
-/*   gh_eval_t real_eval_proc = (gh_eval_t) (* ((gh_eval_t *) data)); */
-
-  char *scheme_code = (char *) data;
-  return gh_eval_str (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_str_with_standard_handler (const char *scheme_code)
-{
-  return gh_eval_str_with_catch (scheme_code, gh_standard_handler);
-}
-
-SCM
-gh_eval_str_with_stack_saving_handler (const char *scheme_code)
-{
-  return scm_internal_stack_catch (SCM_BOOL_T,
-                                  (scm_t_catch_body) eval_str_wrapper,
-                                  (void *) scheme_code,
-                                  (scm_t_catch_handler)
-                                  gh_standard_handler,
-                                  (void *) 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_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);
-}
-
-SCM
-gh_eval_file_with_standard_handler (const char *scheme_code)
-{
-  return gh_eval_file_with_catch (scheme_code, gh_standard_handler);
-}
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_funcs.c b/libguile/gh_funcs.c
deleted file mode 100644 (file)
index ea4dd9b..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*      Copyright (C) 1995,1996,1997,1998, 2000, 2001, 2006, 2008 Free Software Foundation, Inc.
-
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-\f
-/* Defining Scheme functions implemented by C functions --- subrs.  */
-
-#include "libguile/gh.h"
-
-#if SCM_ENABLE_DEPRECATED
-
-/* allows you to define new scheme primitives written in C */
-SCM
-gh_new_procedure (const char *proc_name, SCM (*fn) (),
-                 int n_required_args, int n_optional_args, int varp)
-{
-  return scm_c_define_gsubr (proc_name, n_required_args, n_optional_args,
-                            varp, fn);
-}
-
-SCM
-gh_new_procedure0_0 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 0, 0, 0);
-}
-
-SCM
-gh_new_procedure0_1 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 0, 1, 0);
-}
-
-SCM
-gh_new_procedure0_2 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 0, 2, 0);
-}
-
-SCM
-gh_new_procedure1_0 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 1, 0, 0);
-}
-
-SCM
-gh_new_procedure1_1 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 1, 1, 0);
-}
-
-SCM
-gh_new_procedure1_2 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 1, 2, 0);
-}
-
-SCM
-gh_new_procedure2_0 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 2, 0, 0);
-}
-
-SCM
-gh_new_procedure2_1 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 2, 1, 0);
-}
-
-SCM
-gh_new_procedure2_2 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 2, 2, 0);
-}
-
-SCM
-gh_new_procedure3_0 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 3, 0, 0);
-}
-
-SCM
-gh_new_procedure4_0 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 4, 0, 0);
-}
-
-SCM
-gh_new_procedure5_0 (const char *proc_name, SCM (*fn) ())
-{
-  return gh_new_procedure (proc_name, fn, 5, 0, 0);
-}
-
-/* some (possibly most) Scheme functions available from C */
-SCM
-gh_define (const char *name, SCM val)
-{
-  scm_c_define (name, val);
-  return SCM_UNSPECIFIED;
-}
-
-\f
-/* Calling Scheme functions from C.  */
-
-SCM
-gh_apply (SCM proc, SCM args)
-{
-  return scm_apply (proc, args, SCM_EOL);
-}
-
-SCM
-gh_call0 (SCM proc)
-{
-  return scm_apply (proc, SCM_EOL, SCM_EOL);
-}
-
-SCM
-gh_call1 (SCM proc, SCM arg)
-{
-  return scm_apply (proc, arg, scm_listofnull);
-}
-
-SCM
-gh_call2 (SCM proc, SCM arg1, SCM arg2)
-{
-  return scm_apply (proc, arg1, scm_cons (arg2, scm_listofnull));
-}
-
-SCM
-gh_call3 (SCM proc, SCM arg1, SCM arg2, SCM arg3)
-{
-  return scm_apply (proc, arg1, scm_cons2 (arg2, arg3, scm_listofnull));
-}
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_init.c b/libguile/gh_init.c
deleted file mode 100644 (file)
index b3cb771..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/* Copyright (C) 1995,1996,1997,2000,2001, 2006, 2008 Free Software Foundation, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* Guile high level (gh_) interface, initialization-related stuff */
-
-#include <stdio.h>
-
-#include "libguile/gh.h"
-
-#if SCM_ENABLE_DEPRECATED
-
-typedef void (*main_prog_t) (int argc, char **argv);
-typedef void (*repl_prog_t) (int argc, char **argv);
-
-/* 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 */
-}
-
-/* offer a REPL to the C programmer; for now I just invoke the ice-9
-   REPL that is written in Scheme */
-void 
-gh_repl (int argc, char *argv[])
-{
-/*   gh_eval_str ("(top-repl)"); */
-  scm_shell (argc, argv);
-}
-
-/* libguile programmers need exception handling mechanisms; here is
-   the recommended way of doing it with the gh_ interface */
-
-/* gh_catch() -- set up an exception handler for a particular type of
-   error (or any thrown error if tag is SCM_BOOL_T); see
-   ../libguile/throw.c for the comments explaining scm_internal_catch */
-SCM 
-gh_catch (SCM tag, scm_t_catch_body body, void *body_data,
-         scm_t_catch_handler handler, void *handler_data)
-{
-  return scm_internal_catch (tag, body, body_data, handler, handler_data);
-}
-
-SCM 
-gh_standard_handler (void *data SCM_UNUSED, SCM tag, SCM throw_args SCM_UNUSED)
-{
-  fprintf (stderr, "\nJust got an error; tag is\n        ");
-  scm_display (tag, scm_current_output_port ());
-  scm_newline (scm_current_output_port ());
-  scm_newline (scm_current_output_port ());
-
-  return SCM_BOOL_F;
-}
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_io.c b/libguile/gh_io.c
deleted file mode 100644 (file)
index ccf3ff2..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*      Copyright (C) 1995,1996,1997, 2000, 2001, 2006, 2008 Free Software Foundation, Inc.
-
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "libguile/gh.h"
-
-#if SCM_ENABLE_DEPRECATED
-
-void 
-gh_display (SCM x)
-{
-  scm_display (x, scm_current_output_port ());
-}
-
-void 
-gh_write (SCM x)
-{
-  scm_write (x, scm_current_output_port ());
-}
-
-void 
-gh_newline ()
-{
-  scm_newline (scm_current_output_port ());
-}
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_list.c b/libguile/gh_list.c
deleted file mode 100644 (file)
index b360435..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*      Copyright (C) 1995,1996,1997, 2000, 2001, 2004, 2006, 2008 Free Software Foundation, Inc.
-
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-
-/* list manipulation */
-
-#include "libguile/gh.h"
-
-#if SCM_ENABLE_DEPRECATED
-
-/* returns the length of a list */
-unsigned long 
-gh_length (SCM l)
-{
-  return gh_scm2ulong (scm_length (l));
-}
-
-/* list operations */
-
-/* gh_list(SCM elt, ...) is implemented as a macro in gh.h. */
-
-/* gh_append() takes a args, which is a list of lists, and appends
-   them all together into a single list, which is returned.  This is
-   equivalent to the Scheme procedure (append list1 list2 ...) */
-SCM
-gh_append (SCM args)
-{
-  return scm_append (args);
-}
-
-SCM
-gh_append2 (SCM l1, SCM l2)
-{
-  return scm_append (scm_list_2 (l1, l2));
-}
-
-SCM
-gh_append3(SCM l1, SCM l2, SCM l3)
-{
-  return scm_append (scm_list_3 (l1, l2, l3));
-}
-
-SCM
-gh_append4 (SCM l1, SCM l2, SCM l3, SCM l4)
-{
-  return scm_append (scm_list_4 (l1, l2, l3, l4));
-}
-
-/* gh_reverse() is defined as a macro in gh.h */
-/* gh_list_tail() is defined as a macro in gh.h */
-/* gh_list_ref() is defined as a macro in gh.h */
-/* gh_memq() is defined as a macro in gh.h */
-/* gh_memv() is defined as a macro in gh.h */
-/* gh_member() is defined as a macro in gh.h */
-/* gh_assq() is defined as a macro in gh.h */
-/* gh_assv() is defined as a macro in gh.h */
-/* gh_assoc() is defined as a macro in gh.h */
-
-/* analogous to the Scheme cons operator */
-SCM 
-gh_cons (SCM x, SCM y)
-{
-  return scm_cons (x, y);
-}
-
-/* analogous to the Scheme car operator */
-SCM 
-gh_car (SCM x)
-{
-  return scm_car (x);
-}
-
-/* analogous to the Scheme cdr operator */
-SCM 
-gh_cdr (SCM x)
-{
-  return scm_cdr (x);
-}
-
-/* now for the multiple car/cdr utility procedures */
-SCM 
-gh_caar (SCM x)
-{
-  return scm_caar (x);
-}
-SCM 
-gh_cadr (SCM x)
-{
-  return scm_cadr (x);
-}
-SCM 
-gh_cdar (SCM x)
-{
-  return scm_cdar (x);
-}
-SCM 
-gh_cddr (SCM x)
-{
-  return scm_cddr (x);
-}
-
-SCM 
-gh_caaar (SCM x)
-{
-  return scm_caaar (x);
-}
-SCM 
-gh_caadr (SCM x)
-{
-  return scm_caadr (x);
-}
-SCM 
-gh_cadar (SCM x)
-{
-  return scm_cadar (x);
-}
-SCM 
-gh_caddr (SCM x)
-{
-  return scm_caddr (x);
-}
-SCM 
-gh_cdaar (SCM x)
-{
-  return scm_cdaar (x);
-}
-SCM 
-gh_cdadr (SCM x)
-{
-  return scm_cdadr (x);
-}
-SCM 
-gh_cddar (SCM x)
-{
-  return scm_cddar (x);
-}
-SCM 
-gh_cdddr (SCM x)
-{
-  return scm_cdddr (x);
-}
-
-/* equivalent to (set-car! pair value) */
-SCM
-gh_set_car_x(SCM pair, SCM value)
-{
-  return scm_set_car_x(pair, value);
-}
-
-/* equivalent to (set-cdr! pair value) */
-SCM
-gh_set_cdr_x(SCM pair, SCM value)
-{
-  return scm_set_cdr_x(pair, value);
-}
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
diff --git a/libguile/gh_predicates.c b/libguile/gh_predicates.c
deleted file mode 100644 (file)
index 1205674..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-/*      Copyright (C) 1995,1996,1997, 2000, 2001, 2006, 2008 Free Software Foundation, Inc.
-
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-\f
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-/* type predicates and equality predicates */
-
-#include "libguile/gh.h"
-
-#if SCM_ENABLE_DEPRECATED
-
-/* type predicates: tell you if an SCM object has a given type */
-int 
-gh_boolean_p (SCM val)
-{
-  return (scm_is_true (scm_boolean_p (val)));
-}
-int 
-gh_symbol_p (SCM val)
-{
-  return (scm_is_true (scm_symbol_p (val)));
-}
-int 
-gh_char_p (SCM val)
-{
-  return (scm_is_true (scm_char_p (val)));
-}
-int 
-gh_vector_p (SCM val)
-{
-  return (scm_is_true (scm_vector_p (val)));
-}
-int 
-gh_pair_p (SCM val)
-{
-  return (scm_is_true (scm_pair_p (val)));
-}
-int 
-gh_number_p (SCM val)
-{
-  return (scm_is_true (scm_number_p (val)));
-}
-int 
-gh_string_p (SCM val)
-{
-  return (scm_is_true (scm_string_p (val)));
-}
-int 
-gh_procedure_p (SCM val)
-{
-  return (scm_is_true (scm_procedure_p (val)));
-}
-int 
-gh_list_p (SCM val)
-{
-  return (scm_is_true (scm_list_p (val)));
-}
-int 
-gh_inexact_p (SCM val)
-{
-  return (scm_is_true (scm_inexact_p (val)));
-}
-int 
-gh_exact_p (SCM val)
-{
-  return (scm_is_true (scm_exact_p (val)));
-}
-
-/* the three types of equality */
-int 
-gh_eq_p (SCM x, SCM y)
-{
-  return (scm_is_true (scm_eq_p (x, y)));
-}
-int 
-gh_eqv_p (SCM x, SCM y)
-{
-  return (scm_is_true (scm_eqv_p (x, y)));
-}
-int 
-gh_equal_p (SCM x, SCM y)
-{
-  return (scm_is_true (scm_equal_p (x, y)));
-}
-
-/* equivalent to (string=? ...), but returns 0 or 1 rather than Scheme
-   booleans */
-int
-gh_string_equal_p(SCM s1, SCM s2)
-{
-  return (scm_is_true (scm_string_equal_p(s1, s2)));
-}
-
-/* equivalent to (null? ...), but returns 0 or 1 rather than Scheme
-   booleans */
-int
-gh_null_p(SCM l)
-{
-  return (scm_is_true(scm_null_p(l)));
-}
-
-#endif /* SCM_ENABLE_DEPRECATED */
-
-/*
-  Local Variables:
-  c-file-style: "gnu"
-  End:
-*/
index 7dba095..a040f0e 100644 (file)
 #include <ctype.h>
 
 #include "libguile/_scm.h"
-#include "libguile/gh.h"
+#include "libguile/eval.h"
+#include "libguile/feature.h"
 #include "libguile/load.h"
-#include "libguile/version.h"
-
-#include "libguile/validate.h"
+#include "libguile/read.h"
 #include "libguile/script.h"
+#include "libguile/strings.h"
+#include "libguile/strports.h"
+#include "libguile/validate.h"
+#include "libguile/version.h"
 
 #ifdef HAVE_STRING_H
 #include <string.h>
index 212fbca..2b5a5da 100644 (file)
@@ -72,13 +72,6 @@ test_round_LDADD = ${top_builddir}/libguile/libguile.la
 check_PROGRAMS += test-round
 TESTS += test-round
 
-# test-gh
-test_gh_SOURCES = test-gh.c
-test_gh_CFLAGS = ${test_cflags}
-test_gh_LDADD = ${top_builddir}/libguile/libguile.la
-check_PROGRAMS += test-gh
-TESTS += test-gh
-
 # test-asmobs
 noinst_LTLIBRARIES += libtest-asmobs.la
 libtest_asmobs_la_SOURCES = test-asmobs-lib.c test-asmobs-lib.x
diff --git a/test-suite/standalone/test-gh.c b/test-suite/standalone/test-gh.c
deleted file mode 100644 (file)
index 9f1601a..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright (C) 1999,2000,2001,2003, 2006, 2008 Free Software Foundation, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/* some bits originally by Jim Blandy <jimb@red-bean.com> */
-
-#ifndef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <libguile.h>
-#include <libguile/gh.h>
-
-#include <assert.h>
-#include <string.h>
-
-#if SCM_ENABLE_DEPRECATED
-
-static int
-string_equal (SCM str, char *lit)
-{
-  int len = strlen (lit);
-  int result;
-  result = ((scm_c_string_length (str) == len)
-            && (!memcmp (scm_i_string_chars (str), lit, len)));
-  scm_remember_upto_here_1 (str);
-  return result;
-}
-
-static void
-test_gh_set_substr ()
-{
-  SCM string;
-
-  string = gh_str02scm ("Free, darnit!");
-  assert (gh_string_p (string));
-
-  gh_set_substr ("dammit", string, 6, 6);
-  assert (string_equal (string, "Free, dammit!"));
-  
-  /* Make sure that we can use the string itself as a source.
-
-     I guess this behavior isn't really visible, since the GH API
-     doesn't provide any direct access to the string contents.  But I
-     think it should, eventually.  You can't write efficient string
-     code if you have to copy the string just to look at it.  */
-
-  /* Copy a substring to an overlapping region to its right.  */
-  gh_set_substr (scm_i_string_chars (string), string, 4, 6);
-  assert (string_equal (string, "FreeFree, it!"));
-  
-  string = gh_str02scm ("Free, darnit!");
-  assert (gh_string_p (string));
-
-  /* Copy a substring to an overlapping region to its left.  */
-  gh_set_substr (scm_i_string_chars (string) + 6, string, 2, 6);
-  assert (string_equal (string, "Frdarnitrnit!"));
-}
-
-static void
-tests (void *data, int argc, char **argv)
-{
-  test_gh_set_substr ();
-}
-
-int
-main (int argc, char *argv[])
-{
-  scm_boot_guile (argc, argv, tests, NULL);
-  return 0;
-}
-
-#else
-
-int 
-main (int argc, char *argv[])
-{
-  return 0;
-}
-
-#endif /* !SCM_ENABLE_DEPRECATED */