Commit | Line | Data |
---|---|---|
e81d98ec DH |
1 | /* Copyright (C) 1995,1996,1997,2000,2001 Free Software Foundation, Inc. |
2 | * | |
73be1d9e MV |
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. | |
ee2a8b9b | 7 | * |
73be1d9e MV |
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. | |
ee2a8b9b | 12 | * |
73be1d9e MV |
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 | |
92205699 | 15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
73be1d9e | 16 | */ |
ee2a8b9b JB |
17 | \f |
18 | ||
19 | /* Guile high level (gh_) interface, initialization-related stuff */ | |
20 | ||
21 | #include <stdio.h> | |
22 | ||
a0599745 | 23 | #include "libguile/gh.h" |
ee2a8b9b | 24 | |
5c56ebe1 MV |
25 | #if SCM_ENABLE_DEPRECATED |
26 | ||
ee2a8b9b JB |
27 | typedef void (*main_prog_t) (int argc, char **argv); |
28 | typedef void (*repl_prog_t) (int argc, char **argv); | |
29 | ||
30 | /* This function takes care of all real GH initialization. Since it's | |
31 | called by scm_boot_guile, it can safely work with heap objects, or | |
32 | call functions that do so. */ | |
33 | static void | |
34 | gh_launch_pad (void *closure, int argc, char **argv) | |
35 | { | |
36 | main_prog_t c_main_prog = (main_prog_t) closure; | |
37 | ||
ee2a8b9b JB |
38 | c_main_prog (argc, argv); |
39 | exit (0); | |
40 | } | |
41 | ||
ee2a8b9b JB |
42 | /* starts up the Scheme interpreter, and stays in it. c_main_prog() |
43 | is the address of the user's main program, since gh_enter() never | |
44 | returns. */ | |
45 | void | |
46 | gh_enter (int argc, char *argv[], main_prog_t c_main_prog) | |
47 | { | |
524dfbcc | 48 | scm_boot_guile (argc, argv, gh_launch_pad, (void *) c_main_prog); |
ee2a8b9b JB |
49 | /* never returns */ |
50 | } | |
51 | ||
52 | /* offer a REPL to the C programmer; for now I just invoke the ice-9 | |
53 | REPL that is written in Scheme */ | |
54 | void | |
ef5d3ae1 | 55 | gh_repl (int argc, char *argv[]) |
ee2a8b9b | 56 | { |
ef5d3ae1 MG |
57 | /* gh_eval_str ("(top-repl)"); */ |
58 | scm_shell (argc, argv); | |
ee2a8b9b JB |
59 | } |
60 | ||
61 | /* libguile programmers need exception handling mechanisms; here is | |
62 | the recommended way of doing it with the gh_ interface */ | |
63 | ||
64 | /* gh_catch() -- set up an exception handler for a particular type of | |
65 | error (or any thrown error if tag is SCM_BOOL_T); see | |
66 | ../libguile/throw.c for the comments explaining scm_internal_catch */ | |
67 | SCM | |
92c2555f MV |
68 | gh_catch (SCM tag, scm_t_catch_body body, void *body_data, |
69 | scm_t_catch_handler handler, void *handler_data) | |
ee2a8b9b JB |
70 | { |
71 | return scm_internal_catch (tag, body, body_data, handler, handler_data); | |
72 | } | |
73 | ||
74 | SCM | |
e81d98ec | 75 | gh_standard_handler (void *data SCM_UNUSED, SCM tag, SCM throw_args SCM_UNUSED) |
ee2a8b9b JB |
76 | { |
77 | fprintf (stderr, "\nJust got an error; tag is\n "); | |
78 | scm_display (tag, scm_current_output_port ()); | |
79 | scm_newline (scm_current_output_port ()); | |
80 | scm_newline (scm_current_output_port ()); | |
81 | ||
82 | return SCM_BOOL_F; | |
83 | } | |
89e00824 | 84 | |
5c56ebe1 MV |
85 | #endif /* SCM_ENABLE_DEPRECATED */ |
86 | ||
89e00824 ML |
87 | /* |
88 | Local Variables: | |
89 | c-file-style: "gnu" | |
90 | End: | |
91 | */ |