From 784f04c8702393b0d25c07515a449ff7b7adaca1 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sat, 13 Sep 2008 00:19:23 -0300 Subject: Remove GH and its traces. --- NEWS | 2 + doc/ref/Makefile.am | 1 - doc/ref/gh.texi | 1201 ------------------------------------- doc/ref/guile.texi | 2 - guile-readline/readline.c | 1 - libguile/ChangeLog-gh | 256 -------- libguile/Makefile.am | 5 +- libguile/environments.c | 1 - libguile/gh.h | 243 -------- libguile/gh_data.c | 659 -------------------- libguile/gh_eval.c | 109 ---- libguile/gh_funcs.c | 157 ----- libguile/gh_init.c | 94 --- libguile/gh_io.c | 50 -- libguile/gh_list.c | 181 ------ libguile/gh_predicates.c | 124 ---- libguile/script.c | 11 +- test-suite/standalone/Makefile.am | 7 - test-suite/standalone/test-gh.c | 95 --- 19 files changed, 11 insertions(+), 3188 deletions(-) delete mode 100644 doc/ref/gh.texi delete mode 100644 libguile/ChangeLog-gh delete mode 100644 libguile/gh.h delete mode 100644 libguile/gh_data.c delete mode 100644 libguile/gh_eval.c delete mode 100644 libguile/gh_funcs.c delete mode 100644 libguile/gh_init.c delete mode 100644 libguile/gh_io.c delete mode 100644 libguile/gh_list.c delete mode 100644 libguile/gh_predicates.c delete mode 100644 test-suite/standalone/test-gh.c diff --git a/NEWS b/NEWS index c83e2d675..ec976cc28 100644 --- 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 2001) was removed + ** Internal `scm_i_' functions now have "hidden" linkage with GCC/ELF This makes these internal functions technically not callable from diff --git a/doc/ref/Makefile.am b/doc/ref/Makefile.am index ba24ad100..19458cfee 100644 --- a/doc/ref/Makefile.am +++ b/doc/ref/Makefile.am @@ -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 index 95dfd9291..000000000 --- a/doc/ref/gh.texi +++ /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 } instead of @code{#include -}. - -@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 -@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 -#include - -/* 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 - diff --git a/doc/ref/guile.texi b/doc/ref/guile.texi index a56f95cf8..2ae3d6332 100644 --- a/doc/ref/guile.texi +++ b/doc/ref/guile.texi @@ -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 diff --git a/guile-readline/readline.c b/guile-readline/readline.c index 9178ebdd2..58599cacc 100644 --- a/guile-readline/readline.c +++ b/guile-readline/readline.c @@ -27,7 +27,6 @@ #ifdef HAVE_RL_GETC_FUNCTION #include "libguile.h" -#include "libguile/gh.h" #include "libguile/iselect.h" #include diff --git a/libguile/ChangeLog-gh b/libguile/ChangeLog-gh deleted file mode 100644 index 52dbc58e4..000000000 --- a/libguile/ChangeLog-gh +++ /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 - - 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 - - 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 - - * 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 - - * configure.in: Added AM_MAINTAINER_MODE - -Wed Feb 12 16:34:42 1997 Mark Galassi - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * scsh: new directory. - -Mon Dec 2 17:33:04 1996 Tom Tromey - - * configure.in: Generate doc/guile-programmer/Makefile and - doc/guile-user/Makefile. - -Sat Nov 30 23:45:54 1996 Tom Tromey - - * 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 - - * lgh: directory renamed to gh, along with all prefixes of the - high level library procedures. - -Thu Oct 10 14:37:43 1996 Jim Blandy - - * Makefile.in (TAGS tags): Find the source files in $srcdir. - -Wed Oct 9 19:37:14 1996 Jim Blandy - - * Makefile.in (DISTFILES): Add AUTHORS and aclocal.m4. - -Tue Oct 1 00:13:55 1996 Mikael Djurfeldt - - * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * Makefile.in (tags): New name for `TAGS' target, which will - always run the commands. - -Thu Sep 5 09:56:50 1996 Jim Blandy - - * README: Doc fixes. - -Fri Aug 30 16:56:27 1996 Jim Blandy - - * Makefile.in (TAGS): Produce a single tags file for all of Guile. - -Thu Aug 15 19:03:03 1996 Jim Blandy - - * configure.in: Check for -ldl, so the check for Tcl won't fail - spuriously. - -Thu Aug 15 01:29:29 1996 Jim Blandy - - 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 - - * NEWS: Fix bug reporting address. - -Fri Aug 9 15:58:42 1996 Jim Blandy - - * AUTHORS: New file, in accordance with the GNU maintainers' - standards. - -Tue Aug 6 14:40:44 1996 Jim Blandy - - * 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 - - * 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. diff --git a/libguile/Makefile.am b/libguile/Makefile.am index b53056587..ece2afa3f 100644 --- a/libguile/Makefile.am +++ b/libguile/Makefile.am @@ -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 -pkginclude_HEADERS = gh.h +pkginclude_HEADERS = # These are headers visible as . modincludedir = $(includedir)/libguile diff --git a/libguile/environments.c b/libguile/environments.c index 13d63c035..b81527eef 100644 --- a/libguile/environments.c +++ b/libguile/environments.c @@ -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 index ea5513799..000000000 --- a/libguile/gh.h +++ /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 - */ - - -#ifndef __GH_H -#define __GH_H - -/* This needs to be included outside of the extern "C" block. - */ -#include - -#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 index 101d0fbb3..000000000 --- a/libguile/gh_data.c +++ /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 - */ - - -/* data initialization and C<->Scheme data conversion */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "libguile/gh.h" -#ifdef HAVE_STRING_H -#include -#endif - -#include - -#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 index 737975ec5..000000000 --- a/libguile/gh_eval.c +++ /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 - */ - - -/* routines to evaluate Scheme code */ - -#ifdef HAVE_CONFIG_H -# include -#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 index ea4dd9b0a..000000000 --- a/libguile/gh_funcs.c +++ /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 - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - - -/* 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; -} - - -/* 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 index b3cb77117..000000000 --- a/libguile/gh_init.c +++ /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 - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -/* Guile high level (gh_) interface, initialization-related stuff */ - -#include - -#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 index ccf3ff216..000000000 --- a/libguile/gh_io.c +++ /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 - */ - -#ifdef HAVE_CONFIG_H -# include -#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 index b36043552..000000000 --- a/libguile/gh_list.c +++ /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 - */ - -#ifdef HAVE_CONFIG_H -# include -#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 index 120567476..000000000 --- a/libguile/gh_predicates.c +++ /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 - */ - -#ifdef HAVE_CONFIG_H -# include -#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: -*/ diff --git a/libguile/script.c b/libguile/script.c index 7dba09543..a040f0e6c 100644 --- a/libguile/script.c +++ b/libguile/script.c @@ -26,12 +26,15 @@ #include #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 diff --git a/test-suite/standalone/Makefile.am b/test-suite/standalone/Makefile.am index 212fbca89..2b5a5da12 100644 --- a/test-suite/standalone/Makefile.am +++ b/test-suite/standalone/Makefile.am @@ -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 index 9f1601a8e..000000000 --- a/test-suite/standalone/test-gh.c +++ /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 */ - -#ifndef HAVE_CONFIG_H -# include -#endif - -#include -#include - -#include -#include - -#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 */ -- cgit v1.2.1