changeset 17777:ae8905fbf1f8

move usage and options strings and funtions to separate file * options-usage.h: New file. * libinterp/Makefile.am: Update lists. * octave.cc (usage_string, short_opts, long_opts): Move variable definitions to options-usage.h. (BUILT_IN_DOCSTRINGS_FILE_OPTION, DOC_CACHE_FILE_OPTION, EVAL_OPTION, EXEC_PATH_OPTION, FORCE_GUI_OPTION, IMAGE_PATH_OPTION, INFO_FILE_OPTION, INFO_PROG_OPTION, DEBUG_JIT_OPTION, LINE_EDITING_OPTION, NO_FORK_OPTION, NO_GUI_OPTION, NO_INIT_FILE_OPTION, NO_INIT_PATH_OPTION, NO_JIT_COMPILER_OPTION, NO_LINE_EDITING_OPTION, NO_SITE_FILE_OPTION, PERSIST_OPTION, TEXI_MACROS_FILE_OPTION, TRADITIONAL_OPTION): Move macro definitions to options-usage.h. (print_version_and_exit): Move to options-usage.h. (verbose_usage): Move to options-usage.h and rename to octave_print_verbose_usage_and_exit. Change all uses. (usage): Move to options-usage.h and rename to octave_print_terse_usage_and_exit. Change all uses.
author John W. Eaton <jwe@octave.org>
date Sun, 27 Oct 2013 08:40:54 -0400
parents 8402768afd2d
children b5d58667d32d
files libinterp/Makefile.am libinterp/octave.cc libinterp/options-usage.h
diffstat 3 files changed, 188 insertions(+), 154 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/Makefile.am	Sun Oct 27 22:05:50 2013 +0100
+++ b/libinterp/Makefile.am	Sun Oct 27 08:40:54 2013 -0400
@@ -120,6 +120,7 @@
   corefcn/defaults.h \
   corefcn/graphics.h \
   oct-conf.h \
+  options-usage.h \
   version.h
 
 DIST_SRC = \
--- a/libinterp/octave.cc	Sun Oct 27 22:05:50 2013 +0100
+++ b/libinterp/octave.cc	Sun Oct 27 08:40:54 2013 -0400
@@ -65,6 +65,7 @@
 #include "oct-mutex.h"
 #include "oct-obj.h"
 #include "ops.h"
+#include "options-usage.h"
 #include "ov.h"
 #include "ov-range.h"
 #include "toplev.h"
@@ -159,23 +160,6 @@
 // (--no-window-system, -W)
 static bool no_window_system = false;
 
-// Usage message
-static const char *usage_string =
-  "octave [-HVWdfhiqvx] [--debug] [--debug-jit] [--doc-cache-file file]\n\
-       [--echo-commands] [--eval CODE] [--exec-path path]\n\
-       [--force-gui] [--help] [--image-path path]\n\
-       [--info-file file] [--info-program prog] [--interactive]\n\
-       [--line-editing] [--no-fork] [--no-gui] [--no-history]\n\
-       [--no-init-file] [--no-init-path] [--no-jit-compiler]\n\
-       [--no-line-editing] [--no-site-file] [--no-window-system]\n\
-       [--norc] [-p path] [--path path] [--persist] [--silent]\n\
-       [--traditional] [--verbose] [--version] [file]";
-
-// This is here so that it's more likely that the usage message and
-// the real set of options will agree.  Note: the '+' must come first
-// to prevent getopt from permuting arguments!
-static const char *short_opts = "+HWVdfhip:qvx";
-
 // The code to evaluate at startup (--eval CODE)
 static std::string code_to_eval;
 
@@ -188,65 +172,6 @@
 // If TRUE use traditional settings (--traditional)
 static bool traditional = false;
 
-// Long options.  See the comments in getopt.h for the meanings of the
-// fields in this structure.
-#define BUILT_IN_DOCSTRINGS_FILE_OPTION 1
-#define DOC_CACHE_FILE_OPTION 2
-#define EVAL_OPTION 3
-#define EXEC_PATH_OPTION 4
-#define FORCE_GUI_OPTION 5
-#define IMAGE_PATH_OPTION 6
-#define INFO_FILE_OPTION 7
-#define INFO_PROG_OPTION 8
-#define DEBUG_JIT_OPTION 9
-#define LINE_EDITING_OPTION 10
-#define NO_FORK_OPTION 11
-#define NO_GUI_OPTION 12
-#define NO_INIT_FILE_OPTION 13
-#define NO_INIT_PATH_OPTION 14
-#define NO_JIT_COMPILER_OPTION 15
-#define NO_LINE_EDITING_OPTION 16
-#define NO_SITE_FILE_OPTION 17
-#define PERSIST_OPTION 18
-#define TEXI_MACROS_FILE_OPTION 19
-#define TRADITIONAL_OPTION 20
-struct option long_opts[] = {
-  { "braindead",                no_argument,       0, TRADITIONAL_OPTION },
-  { "built-in-docstrings-file", required_argument, 0, BUILT_IN_DOCSTRINGS_FILE_OPTION },
-  { "debug",                    no_argument,       0, 'd' },
-  { "debug-jit",                no_argument,       0, DEBUG_JIT_OPTION },
-  { "doc-cache-file",           required_argument, 0, DOC_CACHE_FILE_OPTION },
-  { "echo-commands",            no_argument,       0, 'x' },
-  { "eval",                     required_argument, 0, EVAL_OPTION },
-  { "exec-path",                required_argument, 0, EXEC_PATH_OPTION },
-  { "force-gui",                no_argument,       0, FORCE_GUI_OPTION },
-  { "help",                     no_argument,       0, 'h' },
-  { "image-path",               required_argument, 0, IMAGE_PATH_OPTION },
-  { "info-file",                required_argument, 0, INFO_FILE_OPTION },
-  { "info-program",             required_argument, 0, INFO_PROG_OPTION },
-  { "interactive",              no_argument,       0, 'i' },
-  { "line-editing",             no_argument,       0, LINE_EDITING_OPTION },
-  { "no-fork",                  no_argument,       0, NO_FORK_OPTION },
-  { "no-gui",                   no_argument,       0, NO_GUI_OPTION },
-  { "no-history",               no_argument,       0, 'H' },
-  { "no-init-file",             no_argument,       0, NO_INIT_FILE_OPTION },
-  { "no-init-path",             no_argument,       0, NO_INIT_PATH_OPTION },
-  { "no-jit-compiler",          no_argument,       0, NO_JIT_COMPILER_OPTION },
-  { "no-line-editing",          no_argument,       0, NO_LINE_EDITING_OPTION },
-  { "no-site-file",             no_argument,       0, NO_SITE_FILE_OPTION },
-  { "no-window-system",         no_argument,       0, 'W' },
-  { "norc",                     no_argument,       0, 'f' },
-  { "path",                     required_argument, 0, 'p' },
-  { "persist",                  no_argument,       0, PERSIST_OPTION },
-  { "quiet",                    no_argument,       0, 'q' },
-  { "silent",                   no_argument,       0, 'q' },
-  { "texi-macros-file",         required_argument, 0, TEXI_MACROS_FILE_OPTION },
-  { "traditional",              no_argument,       0, TRADITIONAL_OPTION },
-  { "verbose",                  no_argument,       0, 'V' },
-  { "version",                  no_argument,       0, 'v' },
-  { 0,                          0,                 0, 0 }
-};
-
 // Store the command-line options for later use.
 
 static void
@@ -519,80 +444,6 @@
   safe_source_file (fname, context, verbose, require_file, "octave");
 }
 
-// Usage message with extra help.
-
-static void
-verbose_usage (void)
-{
-  std::cout << octave_name_version_copyright_copying_and_warranty ()
-            << "\n\
-\n\
-Usage: octave [options] [FILE]\n\
-\n\
-Options:\n\
-\n\
-  --built-in-docstrings-file FILE Use docs for built-ins from FILE.\n\
-  --debug, -d             Enter parser debugging mode.\n\
-  --debug-jit             Enable JIT compiler debugging/tracing.\n\
-  --doc-cache-file FILE   Use doc cache file FILE.\n\
-  --echo-commands, -x     Echo commands as they are executed.\n\
-  --eval CODE             Evaluate CODE.  Exit when done unless --persist.\n\
-  --exec-path PATH        Set path for executing subprograms.\n\
-  --force-gui             Force graphical user interface to start.\n\
-  --help, -h,             Print short help message and exit.\n\
-  --image-path PATH       Add PATH to head of image search path.\n\
-  --info-file FILE        Use top-level info file FILE.\n\
-  --info-program PROGRAM  Use PROGRAM for reading info files.\n\
-  --interactive, -i       Force interactive behavior.\n\
-  --line-editing          Force readline use for command-line editing.\n\
-  --no-fork               Don't fork when starting the graphical user interface.\n\
-  --no-gui                Disable the graphical user interface.\n\
-  --no-history, -H        Don't save commands to the history list\n\
-  --no-init-file          Don't read the ~/.octaverc or .octaverc files.\n\
-  --no-init-path          Don't initialize function search path.\n\
-  --no-jit-compiler       Disable the JIT compiler.\n\
-  --no-line-editing       Don't use readline for command-line editing.\n\
-  --no-site-file          Don't read the site-wide octaverc file.\n\
-  --no-window-system, -W  Disable window system, including graphics.\n\
-  --norc, -f              Don't read any initialization files.\n\
-  --path PATH, -p PATH    Add PATH to head of function search path.\n\
-  --persist               Go interactive after --eval or reading from FILE.\n\
-  --silent, --quiet, -q   Don't print message at startup.\n\
-  --texi-macros-file FILE Use Texinfo macros in FILE for makeinfo command.\n\
-  --traditional           Set variables for closer MATLAB compatibility.\n\
-  --verbose, -V           Enable verbose output in some cases.\n\
-  --version, -v           Print version number and exit.\n\
-\n\
-  FILE                    Execute commands from FILE.  Exit when done\n\
-                          unless --persist is also specified.\n\
-\n"
-            << octave_www_statement ()
-            << "\n\n"
-            << octave_contrib_statement ()
-            << "\n\n"
-            << octave_bugs_statement ()
-            << "\n";
-
-  exit (0);
-}
-
-// Terse usage messsage.
-
-static void
-usage (void)
-{
-  std::cerr << "\nusage: " << usage_string << "\n\n";
-  exit (1);
-}
-
-static void
-print_version_and_exit (void)
-{
-  std::cout << octave_name_version_copyright_copying_warranty_and_bugs ()
-            << "\n";
-  exit (0);
-}
-
 static void
 lo_error_handler (const char *fmt, ...)
 {
@@ -690,7 +541,7 @@
           // Unrecognized option.  getopt_long already printed a
           // message about that, so we will just print the usage string
           // and exit.
-          usage ();
+          octave_print_terse_usage_and_exit ();
           break;
 
         case 'H':
@@ -717,7 +568,7 @@
           break;
 
         case 'h':
-          verbose_usage ();
+          octave_print_verbose_usage_and_exit ();
           break;
 
         case 'i':
@@ -741,7 +592,7 @@
           break;
 
         case 'v':
-          print_version_and_exit ();
+          octave_print_version_and_exit ();
           break;
 
         case BUILT_IN_DOCSTRINGS_FILE_OPTION:
@@ -850,7 +701,8 @@
   if (force_gui_option && no_gui_option)
     {
       error ("error: only one of --force-gui and --no-gui may be used");
-      usage ();
+
+      octave_print_terse_usage_and_exit ();
     }
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libinterp/options-usage.h	Sun Oct 27 08:40:54 2013 -0400
@@ -0,0 +1,181 @@
+/*
+
+Copyright (C) 1993-2013 John W. Eaton
+
+This file is part of Octave.
+
+Octave 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 3 of the License, or (at your
+option) any later version.
+
+Octave 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 Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if !defined (octave_options_usage_h)
+#define octave_options_usage_h 1
+
+#include <iosfwd>
+
+#include "version.h"
+
+// Usage message
+static const char *usage_string =
+  "octave [-HVWdfhiqvx] [--debug] [--debug-jit] [--doc-cache-file file]\n\
+       [--echo-commands] [--eval CODE] [--exec-path path]\n\
+       [--force-gui] [--help] [--image-path path]\n\
+       [--info-file file] [--info-program prog] [--interactive]\n\
+       [--line-editing] [--no-fork] [--no-gui] [--no-history]\n\
+       [--no-init-file] [--no-init-path] [--no-jit-compiler]\n\
+       [--no-line-editing] [--no-site-file] [--no-window-system]\n\
+       [--norc] [-p path] [--path path] [--persist] [--silent]\n\
+       [--traditional] [--verbose] [--version] [file]";
+
+// This is here so that it's more likely that the usage message and
+// the real set of options will agree.  Note: the '+' must come first
+// to prevent getopt from permuting arguments!
+static const char *short_opts = "+HWVdfhip:qvx";
+
+// Long options.  See the comments in getopt.h for the meanings of the
+// fields in this structure.
+#define BUILT_IN_DOCSTRINGS_FILE_OPTION 1
+#define DOC_CACHE_FILE_OPTION 2
+#define EVAL_OPTION 3
+#define EXEC_PATH_OPTION 4
+#define FORCE_GUI_OPTION 5
+#define IMAGE_PATH_OPTION 6
+#define INFO_FILE_OPTION 7
+#define INFO_PROG_OPTION 8
+#define DEBUG_JIT_OPTION 9
+#define LINE_EDITING_OPTION 10
+#define NO_FORK_OPTION 11
+#define NO_GUI_OPTION 12
+#define NO_INIT_FILE_OPTION 13
+#define NO_INIT_PATH_OPTION 14
+#define NO_JIT_COMPILER_OPTION 15
+#define NO_LINE_EDITING_OPTION 16
+#define NO_SITE_FILE_OPTION 17
+#define PERSIST_OPTION 18
+#define TEXI_MACROS_FILE_OPTION 19
+#define TRADITIONAL_OPTION 20
+struct option long_opts[] = {
+  { "braindead",                no_argument,       0, TRADITIONAL_OPTION },
+  { "built-in-docstrings-file", required_argument, 0, BUILT_IN_DOCSTRINGS_FILE_OPTION },
+  { "debug",                    no_argument,       0, 'd' },
+  { "debug-jit",                no_argument,       0, DEBUG_JIT_OPTION },
+  { "doc-cache-file",           required_argument, 0, DOC_CACHE_FILE_OPTION },
+  { "echo-commands",            no_argument,       0, 'x' },
+  { "eval",                     required_argument, 0, EVAL_OPTION },
+  { "exec-path",                required_argument, 0, EXEC_PATH_OPTION },
+  { "force-gui",                no_argument,       0, FORCE_GUI_OPTION },
+  { "help",                     no_argument,       0, 'h' },
+  { "image-path",               required_argument, 0, IMAGE_PATH_OPTION },
+  { "info-file",                required_argument, 0, INFO_FILE_OPTION },
+  { "info-program",             required_argument, 0, INFO_PROG_OPTION },
+  { "interactive",              no_argument,       0, 'i' },
+  { "line-editing",             no_argument,       0, LINE_EDITING_OPTION },
+  { "no-fork",                  no_argument,       0, NO_FORK_OPTION },
+  { "no-gui",                   no_argument,       0, NO_GUI_OPTION },
+  { "no-history",               no_argument,       0, 'H' },
+  { "no-init-file",             no_argument,       0, NO_INIT_FILE_OPTION },
+  { "no-init-path",             no_argument,       0, NO_INIT_PATH_OPTION },
+  { "no-jit-compiler",          no_argument,       0, NO_JIT_COMPILER_OPTION },
+  { "no-line-editing",          no_argument,       0, NO_LINE_EDITING_OPTION },
+  { "no-site-file",             no_argument,       0, NO_SITE_FILE_OPTION },
+  { "no-window-system",         no_argument,       0, 'W' },
+  { "norc",                     no_argument,       0, 'f' },
+  { "path",                     required_argument, 0, 'p' },
+  { "persist",                  no_argument,       0, PERSIST_OPTION },
+  { "quiet",                    no_argument,       0, 'q' },
+  { "silent",                   no_argument,       0, 'q' },
+  { "texi-macros-file",         required_argument, 0, TEXI_MACROS_FILE_OPTION },
+  { "traditional",              no_argument,       0, TRADITIONAL_OPTION },
+  { "verbose",                  no_argument,       0, 'V' },
+  { "version",                  no_argument,       0, 'v' },
+  { 0,                          0,                 0, 0 }
+};
+
+// Usage message with extra help.
+
+static void
+octave_print_verbose_usage_and_exit (void)
+{
+  std::cout << octave_name_version_copyright_copying_and_warranty ()
+            << "\n\
+\n\
+Usage: octave [options] [FILE]\n\
+\n\
+Options:\n\
+\n\
+  --built-in-docstrings-file FILE Use docs for built-ins from FILE.\n\
+  --debug, -d             Enter parser debugging mode.\n\
+  --debug-jit             Enable JIT compiler debugging/tracing.\n\
+  --doc-cache-file FILE   Use doc cache file FILE.\n\
+  --echo-commands, -x     Echo commands as they are executed.\n\
+  --eval CODE             Evaluate CODE.  Exit when done unless --persist.\n\
+  --exec-path PATH        Set path for executing subprograms.\n\
+  --force-gui             Force graphical user interface to start.\n\
+  --help, -h,             Print short help message and exit.\n\
+  --image-path PATH       Add PATH to head of image search path.\n\
+  --info-file FILE        Use top-level info file FILE.\n\
+  --info-program PROGRAM  Use PROGRAM for reading info files.\n\
+  --interactive, -i       Force interactive behavior.\n\
+  --line-editing          Force readline use for command-line editing.\n\
+  --no-fork               Don't fork when starting the graphical user interface.\n\
+  --no-gui                Disable the graphical user interface.\n\
+  --no-history, -H        Don't save commands to the history list\n\
+  --no-init-file          Don't read the ~/.octaverc or .octaverc files.\n\
+  --no-init-path          Don't initialize function search path.\n\
+  --no-jit-compiler       Disable the JIT compiler.\n\
+  --no-line-editing       Don't use readline for command-line editing.\n\
+  --no-site-file          Don't read the site-wide octaverc file.\n\
+  --no-window-system, -W  Disable window system, including graphics.\n\
+  --norc, -f              Don't read any initialization files.\n\
+  --path PATH, -p PATH    Add PATH to head of function search path.\n\
+  --persist               Go interactive after --eval or reading from FILE.\n\
+  --silent, --quiet, -q   Don't print message at startup.\n\
+  --texi-macros-file FILE Use Texinfo macros in FILE for makeinfo command.\n\
+  --traditional           Set variables for closer MATLAB compatibility.\n\
+  --verbose, -V           Enable verbose output in some cases.\n\
+  --version, -v           Print version number and exit.\n\
+\n\
+  FILE                    Execute commands from FILE.  Exit when done\n\
+                          unless --persist is also specified.\n\
+\n"
+            << octave_www_statement ()
+            << "\n\n"
+            << octave_contrib_statement ()
+            << "\n\n"
+            << octave_bugs_statement ()
+            << "\n";
+
+  exit (0);
+}
+
+// Terse usage messsage.
+
+static void
+octave_print_terse_usage_and_exit (void)
+{
+  std::cerr << "\nusage: " << usage_string << "\n\n";
+
+  exit (1);
+}
+
+static void
+octave_print_version_and_exit (void)
+{
+  std::cout << octave_name_version_copyright_copying_warranty_and_bugs ()
+            << "\n";
+  exit (0);
+}
+
+#endif