From 190169693791fb9bdf759586baf23c0bf430f58e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 4 Sep 2009 09:08:20 +0200 Subject: [PATCH] add gst-browser, handle gst-blox similarly 2009-09-04 Paolo Bonzini * gst-tool.c: Add gst-browser, support passing multiple implicit arguments. * scripts/Browser: Delete. packages/blox/browser: 2009-09-04 Paolo Bonzini * package.xml: Add tag. --- ChangeLog | 6 +++ Makefile.am | 2 +- gst-tool.c | 62 ++++++++++++++++++++----------- packages.xml | 1 - packages/blox/browser/ChangeLog | 4 ++ packages/blox/browser/package.xml | 2 + scripts/Browser.st | 47 ----------------------- 7 files changed, 54 insertions(+), 70 deletions(-) delete mode 100644 scripts/Browser.st diff --git a/ChangeLog b/ChangeLog index db71dad6..4d158c0d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-09-04 Paolo Bonzini + + * gst-tool.c: Add gst-browser, support passing multiple implicit + arguments. + * scripts/Browser: Delete. + 2009-09-03 Paolo Bonzini * scripts/Load.st: Save image before starting packages. diff --git a/Makefile.am b/Makefile.am index 7e3806d0..5fd10de9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -133,7 +133,7 @@ EXTRA_PROGRAMS = winewrapper winewrapper_SOURCES = winewrapper.c GST_EXTRA_TOOLS = gst-reload gst-sunit gst-blox gst-package gst-convert \ - gst-doc gst-remote gst-profile + gst-doc gst-remote gst-profile gst-browser uninstall-local:: @for i in gst-load $(GST_EXTRA_TOOLS); do \ diff --git a/gst-tool.c b/gst-tool.c index f4ff3bbf..c13b8f1f 100644 --- a/gst-tool.c +++ b/gst-tool.c @@ -79,29 +79,30 @@ struct tool { const char *script; const char *options; const char *force_opt; + mst_Boolean allow_other_arguments; }; -struct tool tools[] = { +const struct tool tools[] = { { "gst-convert", "scripts/Convert.st", "-h|--help --version -q|--quiet -v|-V|--verbose -C|--class: -r|--rule: \ -c|--category: -f|--format: -o|--output: -I|--image-file: \ -F|--output-format: --kernel-directory:", - NULL + NULL, true }, { "gst-load", "scripts/Load.st", "-h|--help --version -q|--quiet -v|-V|--verbose -n|--dry-run -f|--force \ --start:: -t|--test -I|--image-file: --kernel-directory: \ -i|--rebuild-image", - NULL + NULL, true }, { "gst-reload", "scripts/Load.st", "-h|--help --version -q|--quiet -v|-V|--verbose -n|--dry-run -f|--force \ --start:: -t|--test -I|--image-file: --kernel-directory: \ -i|--rebuild-image", - "--force" + "--force\0", true }, { "gst-package", "scripts/Package.st", @@ -109,40 +110,45 @@ struct tool tools[] = { --prepare --test -t|--target-directory: --list-files: --list-packages \ --srcdir: --distdir|--destdir: --copy --all-files --vpath \ -n|--dry-run -I|--image-file: --kernel-directory:", - NULL + NULL, true }, { "gst-sunit", "scripts/Test.st", "-h|--help --version -q|--quiet -v|-V|--verbose -f|--file: -p|--package: \ -I|--image-file: --kernel-directory:", - NULL + NULL, true }, { - "gst-blox", "scripts/Browser.st", + "gst-browser", "scripts/Load.st", "-I|--image-file: --kernel-directory:", - NULL + "--start\0Browser\0", false + }, + { + "gst-blox", "scripts/Load.st", + "-I|--image-file: --kernel-directory:", + "--start\0BLOXBrowser\0", false }, { "gst-doc", "scripts/GenDoc.st", "-h|--help --version -p|--package: -f|--file: -I|--image-file: \ -n|--namespace: -o|--output: --kernel-directory: -F|--output-format:", - NULL + NULL, true }, { "gst-remote", "scripts/Remote.st", "-h|--help --version --daemon --server -p|--port: -f|--file: -e|--eval: \ -l|--login: --package: --start: --stop: --pid --kill --snapshot:: \ -I|--image-file: --kernel-directory:", - NULL + NULL, true }, { "gst-profile", "scripts/Profile.st", "-f|--file: -e|--eval: -o|--output: -h|--help --version \ --no-separate-blocks", - NULL + NULL, true }, - { NULL, NULL, NULL, NULL } + { NULL, NULL, NULL, NULL, false } }; /* An option parser compatible with the one in the Getopt class. @@ -161,6 +167,7 @@ struct long_option { char short_opts[1 << (sizeof (char) * 8)]; struct long_option *long_opts; +const struct tool *tool; void option_error (const char *s, ...) @@ -251,6 +258,12 @@ setup_options (const char *str) void parse_option (int short_opt, const char *long_opt, const char *arg) { + if (!short_opt && !long_opt && !tool->allow_other_arguments) + { + option_error ("invalid argument '%s'", arg); + return; + } + if (short_opt == 'I' || (long_opt && !strcmp (long_opt, "image-file"))) { @@ -481,7 +494,8 @@ main(int argc, const char **argv) else if (!strcmp (tools[i].name, program_name)) break; - setup_options (tools[i].options); + tool = &tools[i]; + setup_options (tool->options); parse_options (&argv[1]); #ifdef HAVE_FORK @@ -489,17 +503,23 @@ main(int argc, const char **argv) fork_daemon (); #endif - if (tools[i].force_opt) + if (tool->force_opt) { - smalltalk_argv = alloca (sizeof (const char *) * (argc + 1)); - smalltalk_argc = argc; - smalltalk_argv[0] = tools[i].force_opt; - memcpy (&smalltalk_argv[1], &argv[1], argc * sizeof (char *)); + const char *p; + int n; + for (p = tool->force_opt, n = 0; *p; p += strlen (p) + 1) + n++; + + smalltalk_argc = argc + n - 1; + smalltalk_argv = alloca (sizeof (char *) * smalltalk_argc); + for (p = tool->force_opt, n = 0; *p; p += strlen (p) + 1) + smalltalk_argv[n++] = p; + memcpy (&smalltalk_argv[n], &argv[1], argc * sizeof (char *)); } else { - smalltalk_argv = argv + 1; smalltalk_argc = argc - 1; + smalltalk_argv = argv + 1; } #ifdef CMD_LN_S @@ -522,9 +542,9 @@ main(int argc, const char **argv) if (result != 0) exit (result < 0 ? 1 : result); - if (!gst_process_file (tools[i].script, GST_DIR_KERNEL_SYSTEM)) + if (!gst_process_file (tool->script, GST_DIR_KERNEL_SYSTEM)) fprintf (stderr, "%s: Couldn't open kernel file `%s': %s\n", - executable_name, tools[i].script, strerror (errno)); + executable_name, tool->script, strerror (errno)); gst_invoke_hook (GST_ABOUT_TO_QUIT); exit (0); diff --git a/packages.xml b/packages.xml index c37888f6..270bd6d5 100644 --- a/packages.xml +++ b/packages.xml @@ -215,7 +215,6 @@ Test.st Load.st Package.st - Browser.st GenDoc.st Convert.st Remote.st diff --git a/packages/blox/browser/ChangeLog b/packages/blox/browser/ChangeLog index 391fda75..0212b39e 100644 --- a/packages/blox/browser/ChangeLog +++ b/packages/blox/browser/ChangeLog @@ -1,3 +1,7 @@ +2009-09-04 Paolo Bonzini + + * package.xml: Add tag. + 2008-04-07 Paolo Bonzini * ClassHierBrow.st: Use #name after accessing variables. diff --git a/packages/blox/browser/package.xml b/packages/blox/browser/package.xml index fa0135e0..2f880444 100644 --- a/packages/blox/browser/package.xml +++ b/packages/blox/browser/package.xml @@ -4,6 +4,8 @@ BLOX.BLOXBrowser + BLOX.BLOXBrowser.BrowserMain new initialize + Blox Parser DebugTools diff --git a/scripts/Browser.st b/scripts/Browser.st deleted file mode 100644 index 90de3a83..00000000 --- a/scripts/Browser.st +++ /dev/null @@ -1,47 +0,0 @@ -"====================================================================== -| -| Smalltalk GUI launching script -| -| - ======================================================================" - - -"====================================================================== -| -| Copyright 1992,94,95,99,2000,2001,2002 Free Software Foundation, Inc. -| Written by Brad Diller. -| -| This file is part of GNU Smalltalk. -| -| GNU Smalltalk is free software; you can redistribute it and/or modify it -| under the terms of the GNU General Public License as published by the Free -| Software Foundation; either version 2, or (at your option) any later version. -| -| GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT -| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -| FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -| details. -| -| You should have received a copy of the GNU General Public License along with -| GNU Smalltalk; see the file COPYING. If not, write to the Free Software -| Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -| - ====================================================================== - - -" -(Smalltalk includesKey: #BLOX) ifFalse: [ - PackageLoader fileInPackage: 'BLOXBrowser'. - ObjectMemory snapshot -]! - -(Smalltalk includesKey: #BLOX) - ifFalse: [ - stdout nextPutAll: 'BLOX not loaded, is Tcl/Tk installed?'; nl - ] - ifTrue: [ - stdout nextPutAll: 'Starting window environment...'; nl. - BLOX.BLOXBrowser.BrowserMain new initialize - ]! - -ObjectMemory quit!