gh_init.c 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* Copyright (C) 1995,1996,1997,2000,2001, 2006, 2008 Free Software Foundation, Inc.
  2. *
  3. * This library is free software; you can redistribute it and/or
  4. * modify it under the terms of the GNU Lesser General Public
  5. * License as published by the Free Software Foundation; either
  6. * version 2.1 of the License, or (at your option) any later version.
  7. *
  8. * This library is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. * Lesser General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU Lesser General Public
  14. * License along with this library; if not, write to the Free Software
  15. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  16. */
  17. #ifdef HAVE_CONFIG_H
  18. # include <config.h>
  19. #endif
  20. /* Guile high level (gh_) interface, initialization-related stuff */
  21. #include <stdio.h>
  22. #include "libguile/gh.h"
  23. #if SCM_ENABLE_DEPRECATED
  24. typedef void (*main_prog_t) (int argc, char **argv);
  25. typedef void (*repl_prog_t) (int argc, char **argv);
  26. /* This function takes care of all real GH initialization. Since it's
  27. called by scm_boot_guile, it can safely work with heap objects, or
  28. call functions that do so. */
  29. static void
  30. gh_launch_pad (void *closure, int argc, char **argv)
  31. {
  32. main_prog_t c_main_prog = (main_prog_t) closure;
  33. c_main_prog (argc, argv);
  34. exit (0);
  35. }
  36. /* starts up the Scheme interpreter, and stays in it. c_main_prog()
  37. is the address of the user's main program, since gh_enter() never
  38. returns. */
  39. void
  40. gh_enter (int argc, char *argv[], main_prog_t c_main_prog)
  41. {
  42. scm_boot_guile (argc, argv, gh_launch_pad, (void *) c_main_prog);
  43. /* never returns */
  44. }
  45. /* offer a REPL to the C programmer; for now I just invoke the ice-9
  46. REPL that is written in Scheme */
  47. void
  48. gh_repl (int argc, char *argv[])
  49. {
  50. /* gh_eval_str ("(top-repl)"); */
  51. scm_shell (argc, argv);
  52. }
  53. /* libguile programmers need exception handling mechanisms; here is
  54. the recommended way of doing it with the gh_ interface */
  55. /* gh_catch() -- set up an exception handler for a particular type of
  56. error (or any thrown error if tag is SCM_BOOL_T); see
  57. ../libguile/throw.c for the comments explaining scm_internal_catch */
  58. SCM
  59. gh_catch (SCM tag, scm_t_catch_body body, void *body_data,
  60. scm_t_catch_handler handler, void *handler_data)
  61. {
  62. return scm_internal_catch (tag, body, body_data, handler, handler_data);
  63. }
  64. SCM
  65. gh_standard_handler (void *data SCM_UNUSED, SCM tag, SCM throw_args SCM_UNUSED)
  66. {
  67. fprintf (stderr, "\nJust got an error; tag is\n ");
  68. scm_display (tag, scm_current_output_port ());
  69. scm_newline (scm_current_output_port ());
  70. scm_newline (scm_current_output_port ());
  71. return SCM_BOOL_F;
  72. }
  73. #endif /* SCM_ENABLE_DEPRECATED */
  74. /*
  75. Local Variables:
  76. c-file-style: "gnu"
  77. End:
  78. */