X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Flily-guile.hh;h=cde9d412a3059c509c8dbd63366e5fb6cd23e754;hb=a2991295b2c1fb36bec19de207161855ca3c1756;hp=ffe7c21c53d8173e6bbcbe884584be038c315abd;hpb=d7416352b825c3e9b4858e1ddcf14f0c00e26d89;p=lilypond.git diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh index ffe7c21c53..cde9d412a3 100644 --- a/lily/include/lily-guile.hh +++ b/lily/include/lily-guile.hh @@ -3,41 +3,60 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2000 Jan Nieuwenhuizen + (c) 1998--2001 Jan Nieuwenhuizen */ #ifndef LILY_GUILE_HH #define LILY_GUILE_HH -#include "string.hh" - #include #include + +#define fix_guile_1_3_4_scm_puts(scm_data, port) scm_puts ((char*)scm_data, port) +#define scm_puts(scm_data, port) fix_guile_1_3_4_scm_puts (scm_data, port) + #include "direction.hh" +#include "flower-proto.hh" + +#ifndef SCM_PACK +#define SCM_PACK(x) ((SCM) x) + +#endif +#ifndef SCM_UNPACK +#define SCM_UNPACK(x) ( x) +#endif /* conversion functions follow the GUILE naming convention, i.e. A ly_B2A (B b); */ + +SCM ly_last (SCM list); SCM ly_str02scm (char const*c); +SCM ly_write2scm (SCM s); +SCM ly_deep_copy (SCM); SCM ly_symbol2scm (char const *); String ly_scm2string (SCM s); String ly_symbol2string (SCM); SCM ly_offset2scm (Offset); Offset ly_scm2offset (SCM); - +SCM ly_assoc_chain (SCM key, SCM achain); Interval ly_scm2interval (SCM); SCM ly_interval2scm (Interval); SCM ly_parse_scm (char const* s, int* n); SCM ly_quote_scm (SCM s); SCM ly_type (SCM); +bool type_check_assignment (SCM val, SCM sym, SCM type_symbol) ; +SCM ly_number2string (SCM s); /* display and print newline. */ +extern "C" { void ly_display_scm (SCM s); +} #include "array.hh" @@ -64,7 +83,36 @@ SCM index_set_cell (SCM cellp, Direction d, SCM val); /* snarfing. */ -void add_scm_init_func (void (*)()); +void add_scm_init_func (void (*) ()); + + +typedef SCM (*Scheme_function_unknown) (); + +#if __GNUC_MINOR__ >= 96 +typedef SCM (*Scheme_function_0) (); +typedef SCM (*Scheme_function_1) (SCM); +typedef SCM (*Scheme_function_2) (SCM,SCM); +#else +typedef SCM (*Scheme_function_0) (...); +typedef SCM (*Scheme_function_1) (...); +typedef SCM (*Scheme_function_2) (...); +#endif + +#define DECLARE_SCHEME_CALLBACK(NAME,ARGS) \ + static SCM NAME ARGS; \ + static SCM NAME ## _proc + +#define MAKE_SCHEME_CALLBACK(TYPE, FUNC, ARGCOUNT) \ +SCM TYPE :: FUNC ## _proc;\ +void \ +TYPE ## _ ## FUNC ## _init_functions () \ +{ \ + TYPE :: FUNC ## _proc = gh_new_procedure ## ARGCOUNT ## _0 (#TYPE "::" #FUNC, \ + ((Scheme_function_ ## ARGCOUNT)TYPE :: FUNC)); \ +} \ + \ +ADD_SCM_INIT_FUNC (TYPE ## _ ## FUNC ## _callback, TYPE ## _ ## FUNC ## _init_functions); \ + #define ADD_SCM_INIT_FUNC(name, func)\ class name ## _scm_initter { \