aboutsummaryrefslogtreecommitdiff
path: root/src/guile.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-07-25 16:21:55 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2011-07-25 16:21:55 +0300
commit39e1ad85f7fb63156621112a28a876265d9fa1f0 (patch)
tree3607cb92f570680bb6c2016018e373834edd8b3d /src/guile.c
parentc6230a46e93e9fb1525d5a036074aa7b5ff8a76e (diff)
downloadidest-39e1ad85f7fb63156621112a28a876265d9fa1f0.tar.gz
idest-39e1ad85f7fb63156621112a28a876265d9fa1f0.tar.bz2
Implement --batch option (a generalization of --format).
* NEWS: Update * doc/idest.texi: Update. * scheme/Makefile.am (EXTRA_DIST,site_DATA): Add batch.scm (dist-hook): Exclude backup files. * scheme/batch.scm: New file. * scheme/idest/batch/help.scm: New file. * scheme/idest/format/help.scm: Use list-modules. * scheme/idest/format/shortlist.scm: Fix typo. * scheme/idest/list-modules.scm: New file (from scheme/idest/format/help.scm). * src/cmdline.opt: Remove the --function option. New option --batch. * src/guile.c (guile_function,guile_script): Remove. (load_closure): Remove struct. (load_handler,load_handler_path): data points to char **. (guile_load): Change signature: filename is superfluous, use argv[0] instead. All callers updated. * src/idest.h (ed_list,guile_script,guile_function): Remove. * src/main.c (dry_run_option,batch_name): New variables. (set_guile_argv): New function. (main): Handle batch_name and dry_run_option.
Diffstat (limited to 'src/guile.c')
-rw-r--r--src/guile.c55
1 files changed, 15 insertions, 40 deletions
diff --git a/src/guile.c b/src/guile.c
index b75b674..2de2fe2 100644
--- a/src/guile.c
+++ b/src/guile.c
@@ -22,8 +22,6 @@
int guile_inited = 0;
int guile_debug = 1;
-char *guile_script;
-char *guile_function;
char **guile_argv;
SCM_GLOBAL_VARIABLE_INIT(sym_idest_main, "idest-main", SCM_EOL);
@@ -81,49 +79,31 @@ guile_safe_exec(SCM (*handler)(void *data), void *data, SCM *result)
return 0;
}
-struct load_closure {
- char *filename;
- int argc;
- char **argv;
-};
-
static SCM
load_handler(void *data)
{
- struct load_closure *lp = data;
+ char **argv = data;
- scm_set_program_arguments(lp->argc, lp->argv, lp->filename);
- scm_primitive_load(scm_from_locale_string(lp->filename));
+ scm_set_program_arguments(-1, argv, NULL);
+ scm_primitive_load(scm_from_locale_string(argv[0]));
return SCM_UNDEFINED;
}
static SCM
load_handler_path(void *data)
{
- struct load_closure *lp = data;
-
- scm_set_program_arguments(lp->argc, lp->argv, lp->filename);
- scm_primitive_load_path(scm_from_locale_string(lp->filename));
+ char **argv = data;
+
+ scm_set_program_arguments(-1, argv, NULL);
+ scm_primitive_load_path(scm_from_locale_string(argv[0]));
return SCM_UNDEFINED;
}
static int
-guile_load(char *filename, int use_path, char **argv)
+guile_load(char **argv, int use_path)
{
- struct load_closure lc;
- if (argv) {
- lc.argc = -1;
- lc.argv = argv;
- } else {
- char *s_argv[2];
- s_argv[0] = filename;
- s_argv[1] = NULL;
- lc.argc = 1;
- lc.argv = s_argv;
- }
- lc.filename = filename;
if (guile_safe_exec(use_path ? load_handler_path : load_handler,
- &lc, NULL))
+ argv, NULL))
exit(1);
}
@@ -639,7 +619,7 @@ load_startup_file()
for (i = 0; argv[i]; i++) {
if (access(argv[i], R_OK) == 0) {
- if (guile_load(argv[i], 0, argv + i + 1))
+ if (guile_load(argv + i, 0))
error(1, 0, "cannot load startup script %s",
argv[i]);
break;
@@ -658,7 +638,7 @@ guile_init(int *pargc, char ***pargv)
int argc, i;
char **argv;
- if (!guile_script)
+ if (!guile_argv)
return;
scm_init_guile();
@@ -678,7 +658,7 @@ guile_init(int *pargc, char ***pargv)
load_startup_file();
- guile_load(guile_script, !strchr(guile_script, '/'), guile_argv);
+ guile_load(guile_argv, !strchr(guile_argv[0], '/'));
/* Read command line arguments */
args = scm_program_arguments();
@@ -696,13 +676,8 @@ guile_init(int *pargc, char ***pargv)
*pargv = argv;
proc = SCM_VARIABLE_REF(sym_idest_main);
- if (proc == SCM_EOL) {
- if (guile_function) {
- proc = SCM_VARIABLE_REF(scm_c_lookup(guile_function));
- SCM_VARIABLE_SET(sym_idest_main, proc);
- } else
- error(1, 0, "idest-main not defined");
- }
+ if (proc == SCM_EOL)
+ error(1, 0, "idest-main not defined");
if (scm_procedure_p(proc) != SCM_BOOL_T)
error(1, 0,
@@ -716,7 +691,7 @@ guile_init(int *pargc, char ***pargv)
else
error(1, 0,
"script %s set non-boolean value of idest-readonly",
- guile_script);
+ guile_argv[0]);
guile_inited = 1;
}
#else

Return to:

Send suggestions and report system problems to the System administrator.