From: "Peter S. Christopher" <peterc@midway.uchicago.edu>
Cc: guile-user@gnu.org
Subject: Re: primitive inclusion
Date: Sat, 26 Jul 2003 13:03:17 -0500 (CDT) [thread overview]
Message-ID: <Pine.GSO.4.21.0307261255410.14168-100000@harper.uchicago.edu> (raw)
In-Reply-To: <Pine.LNX.4.21.0307260006030.31372-100000@ariel.lan.telltronics.org>
Hi there,
Thanks for the help Steve, worked like a charm. For the benefit
of anyone who is interested: here is how one defines primitives in the
(guile) module (rather than the (guile-user) module which seems to be
standard).
<CODE>
SCM slab_write_sloppy();
SCM slab_read_sloppy();
SCM map_globals();
SCM dvect_p();
void init_my_proc(void *data){
scm_c_define_gsubr("slab-write-sloppy", 5, 0 ,0, slab_write_sloppy);
scm_c_define_gsubr("slab-read-sloppy", 4, 0 ,0, slab_read_sloppy);
scm_c_define_gsubr("map-globals", 1, 0 ,0, map_globals);
scm_c_define_gsubr("dvect?", 1, 0 ,0, dvect_p);
return;
}
static void
inner_main (void *closure, int argc, char **argv){
/*VARIABLES AND WHAT NO*/
// This call makes the "guile" module the current-module for the
// duration of the call to init_my_proc
scm_c_define_module("guile", init_my_proc, NULL);
/*Etcetera*/
}
</CODE>
Thanks again.
Pete
On Sat, 26 Jul 2003, Steve Tell wrote:
> On Fri, 25 Jul 2003, Peter S. Christopher wrote:
>
> > Hi listers,
> >
> > I'm having a problem finding a primitive function in one of my
> > modules. Here is the setup. I have a C program which (after
> > booting guile) defines a routine a-la:
> >
> > scm_c_define_gsubr("dvect?", 1, 0 ,0, dvect_p);
> >
> > Then the program loads a file using
> >
> > scm_c_primitive_load("root.scm");
> >
> >
> > At the top of root.scm I include a module via: (use-modules (slab)) Now
> > within the text of the slab.scm I expect to use dcect?. However, the guile
> > cannot reference dvect? -- it can't find it. The problem is that dvect? is
> > being put in the (guile-user) module. And the slab module can't see it.
> > I've tried to (use-modules (guile-user)) and this seems to have no effect.
> >
> > Does anyone have any ideas how I can get it so that the slab module can
> > see dvect? ?
>
> I had similar problems trying to make a program compatible with both
> guile-1.5/1.6 and guile-1.4 - one of the differences between the two is
> which module C primitives end up in vs. the default module that scheme
> code runs in.
>
> I came up with this hack, placed immediately after initializing guile and
> before defining primitives to make guile-1.6 behave enough like 1.4:
>
> #ifdef HAVE_SCM_C_READ_STRING
> { SCM exp = scm_c_read_string("(define-module (guile))");
> scm_primitive_eval_x(exp); }
> #endif
>
> While this works, making guile 1.6 behave like 1.4 isn't really the way to
> go any longer.
>
> I see that the guile-1.6.4 reference manual has a nice section "Accessing
> Modules from C." (thanks authors!)
>
> When writing a program for guile >= 1.6 only, it appears that one should
> use scm_c_define_module() to place their C primitives into the desired
> application-specfic module.
>
> Steve
>
>
> > Thanks for any help,
> >
> > Pete
> >
> > _______________________________________________
> > Guile-user mailing list
> > Guile-user@gnu.org
> > http://mail.gnu.org/mailman/listinfo/guile-user
> >
>
> --
> --
> Steve Tell tell@telltronics.org
>
>
_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-user
prev parent reply other threads:[~2003-07-26 18:03 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-07-25 20:08 primitive inclusion Peter S. Christopher
2003-07-26 4:23 ` Steve Tell
2003-07-26 18:03 ` Peter S. Christopher [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.GSO.4.21.0307261255410.14168-100000@harper.uchicago.edu \
--to=peterc@midway.uchicago.edu \
--cc=guile-user@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).