This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Mark Galassi wrote:
>
> I can answer some of your questions, but not all.
>
> Rob> 2) To do a sort, I used something like:
>
> >> (require 'sort)
> >> (sort! '("hello" "there" "testing" "one") string<?)
>
> slib used to be bundled with Guile, but it is not anymore. To use
> slib you must install slib separately (I install it in
> $(prefix)/share/guile/site/slib), and then go through the module
> system, which you can currently do with
>
> (use-modules (ice-9 slib))
>
> after which your (sort! '("hello" "there" "testing" "one") string<?)
> should work (it does for me).
I found "slib2c0.tar.gz" and stuck it in
"~/guile-1.2/share/guile/site/slib" (I haven't "installed" guile yet).
After a little digging, I set
SCHEME_LIBRARY_PATH=/usr/spi/grenoble/guile-1.2/share/guile/site/slib/
and
SCHEME_LOAD_PATH=/usr/spi/grenoble/guile-1.2:/usr/spi/grenoble/guile-1.2/share/guile/site
(possibly being supersticious).
Just running "(use-modules (ice-9 slib))" didn't work...
(no routine "identity")
I have done the following:
> (use-modules (ice-9 slib))
> (load "/usr/spi/grenoble/guile-1.2/ice-9/slib.scm")
> (define home-vicinity
> (let ((home-path (getenv "HOME")))
> (lambda () home-path)))
> (require 'sort)
> (sort #(6 7 3 2 0) <)
and it seems to loop forever... Any hints on the "correct" way to get
this going? I cannot find any real mention of guile in the slib docs
and the only slib info I can find is in "slib.scm".
> Rob> 4) I have some C++ code which writes to a scheme port. I
> Rob> used to use "gscm_fwrite" which would return the number of
> Rob> chars written. The only public routine I can find to do the
> Rob> same thing is "scm_gen_write" which does not return the char
> Rob> count. Is there some other routine I should use?
>
> How about writing your own wrapper which first gets the length, then
> prints it, and then returns the length?
I *could* do that, but my point was that the "write" routines are
supposed to return an exit code which indicates success or failure
(using a count of bytes written). Since the port routines return this
info, but the only publically visible function (scm_gen_write) does not,
I cannot determine if the write succeeded.
Thanks for the other replies!
Oh, my question regarding registering a C++ dispatch routine.... I have
slightly changed my strategy. Any comments on this approach?
> // TODO: const cast
> char *cmdName = (char *)cmd->getName();
>
> SCM dispatch_proc = scm_make_subr( cmdName, scm_tc7_lsubr, (SCM (*)())dispatch );
> SCM cclo = scm_makcclo( dispatch_proc, 2 );
> DISPATCH_CCLO_CMD(cclo) = SCM_MAKINUM(((long)cmd) >> 2);
> SCM symbol = scm_sysintern( cmdName, cclo );
> #ifdef DEBUG_EXTENSIONS
> if (SCM_REC_PROCNAMES_P)
> scm_set_procedure_property_x(cclo, scm_i_name, SCM_CAR(symbol));
> #endif
The big difference is that now I create the "dispatch_proc" every time
and using the name of the C++ command (so that the debug backtraces look
okay) and then create the closure using the same name (so the internal
routine is inaccessible).
-rob
--
------------------------------------------------------------------------
Rob Engle grenoble@spimageworks.com
Sony Pictures Imageworks voice: 310-840-8203
9050 West Washington Boulevard fax: 310-840-8567
Culver City, CA 90232
------------------------------------------------------------------------