DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(guile.info.gz) Starting and controlling the interpreter

Info Catalog (guile.info.gz) Data types and constants defined by gh (guile.info.gz) GH (guile.info.gz) Error messages
 
 19.4 Starting and controlling the interpreter
 =============================================
 
 In almost every case, your first `gh_' call will be:
 
  -- Function: void gh_enter (int ARGC, char *ARGV[], void
           (*MAIN_PROG)())
      Starts up a Scheme interpreter with all the builtin Scheme
      primitives.  `gh_enter()' never exits, and the user's code should
      all be in the `MAIN_PROG()' function.  `argc' and `argv' will be
      passed to MAIN_PROG.
 
       -- Function: void main_prog (int ARGC, char *ARGV[])
           This is the user's main program.  It will be invoked by
           `gh_enter()' after Guile has been started up.
 
      Note that you can use `gh_repl' inside `gh_enter' (in other words,
      inside the code for `main-prog') if you want the program to be
      controlled by a Scheme read-eval-print loop.
 
    A convenience routine which enters the Guile interpreter with the
 standard Guile read-eval-print loop ("REPL") is:
 
  -- Function: void gh_repl (int ARGC, char *ARGV[])
      Enters the Scheme interpreter giving control to the Scheme REPL.
      Arguments are processed as if the Guile program `guile' were being
      invoked.
 
      Note that `gh_repl' should be used _inside_ `gh_enter', since any
      Guile interpreter calls are meaningless unless they happen in the
      context of the interpreter.
 
      Also note that when you use `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 `gh_enter' if you
      want to maintain execution control in your C program.
 
    You will typically use `gh_enter' and `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 "GSL" (GNU Scientific Library), you would
 write a C program that looks like this:
 
      #include <guile/gh.h>
      #include <gsl_ran.h>
 
      /* random number suite */
      SCM gw_ran_seed(SCM s)
      {
        gsl_ran_seed(gh_scm2int(s));
        return SCM_UNSPECIFIED;
      }
 
      SCM gw_ran_random()
      {
        SCM x;
 
        x = gh_ulong2scm(gsl_ran_random());
        return x;
      }
 
      SCM gw_ran_uniform()
      {
        SCM x;
 
        x = gh_double2scm(gsl_ran_uniform());
        return x;
      }
      SCM gw_ran_max()
      {
        return gh_double2scm(gsl_ran_max());
      }
 
      void
      init_gsl()
      {
        /* random number suite */
        gh_new_procedure("gsl-ran-seed", gw_ran_seed, 1, 0, 0);
        gh_new_procedure("gsl-ran-random", gw_ran_random, 0, 0, 0);
        gh_new_procedure("gsl-ran-uniform", gw_ran_uniform, 0, 0, 0);
        gh_new_procedure("gsl-ran-max", gw_ran_max, 0, 0, 0);
      }
 
      void
      main_prog (int argc, char *argv[])
      {
        init_gsl();
 
        gh_repl(argc, argv);
      }
 
      int
      main (int argc, char *argv[])
      {
        gh_enter (argc, argv, main_prog);
      }
 
    Then, supposing the C program is in `guile-gsl.c', you could compile
 it with `gcc -o guile-gsl guile-gsl.c -lguile -lgsl'.
 
    The resulting program `guile-gsl' would have new primitive
 procedures `gsl-ran-random', `gsl-ran-gaussian' and so forth.
 
Info Catalog (guile.info.gz) Data types and constants defined by gh (guile.info.gz) GH (guile.info.gz) Error messages
automatically generated byinfo2html