cast: New macro NULL_SENTINEL.
[pspp] / src / ui / terminal / terminal-opts.c
index d1296a36252ac449734bb6bd15875a23febd3e3f..d885cd0ef627a0b400c0c911d671a8d8f440dcad 100644 (file)
@@ -28,6 +28,7 @@
 #include "language/syntax-file.h"
 #include "libpspp/argv-parser.h"
 #include "libpspp/assertion.h"
+#include "libpspp/cast.h"
 #include "libpspp/compiler.h"
 #include "libpspp/getl.h"
 #include "libpspp/llx.h"
@@ -68,6 +69,7 @@ enum
     OPT_ERROR_FILE,
     OPT_OUTPUT,
     OPT_OUTPUT_OPTION,
+    OPT_NO_OUTPUT,
     OPT_INTERACTIVE,
     OPT_NO_STATRC,
     OPT_HELP,
@@ -81,6 +83,7 @@ static struct argv_option terminal_argv_options[N_TERMINAL_OPTIONS] =
     {"error-file", 'e', required_argument, OPT_ERROR_FILE},
     {"output", 'o', required_argument, OPT_OUTPUT},
     {NULL, 'O', required_argument, OPT_OUTPUT_OPTION},
+    {"no-output", 0, no_argument, OPT_NO_OUTPUT},
     {"interactive", 'i', no_argument, OPT_INTERACTIVE},
     {"no-statrc", 'r', no_argument, OPT_NO_STATRC},
     {"help", 'h', no_argument, OPT_HELP},
@@ -183,7 +186,7 @@ usage (void)
   char *supported_formats = get_supported_formats ();
   char *default_include_path = get_default_include_path ();
 
-  printf ("\
+  printf (_("\
 PSPP, a program for statistical analysis of sample data.\n\
 Usage: %s [OPTION]... FILE...\n\
 \n\
@@ -195,6 +198,7 @@ Output options:\n\
   -O OPTION=VALUE           set output option to customize previous -o\n\
   -O device={terminal|listing}  override device type for previous -o\n\
   -e, --error-file=FILE     append errors, warnings, and notes to FILE\n\
+  --no-output               disable default output driver\n\
 Supported output formats: %s\n\
 \n\
 Language options:\n\
@@ -214,7 +218,7 @@ Informative output:\n\
   -h, --help                display this help and exit\n\
   -V, --version             output version information and exit\n\
 \n\
-Non-option arguments are interpreted as syntax files to execute.\n",
+Non-option arguments are interpreted as syntax files to execute.\n"),
           program_name, supported_formats, default_include_path);
 
   free (supported_formats);
@@ -249,6 +253,12 @@ terminal_option_callback (int id, void *to_)
       parse_output_option (to, optarg);
       break;
 
+    case OPT_NO_OUTPUT:
+      /* Pretend that we already have an output driver, which disables adding
+         one in terminal_opts_done() when we don't already have one. */
+      to->has_output_driver = true;
+      break;
+
     case OPT_INTERACTIVE:
       to->syntax_mode = GETL_INTERACTIVE;
       break;
@@ -264,7 +274,7 @@ terminal_option_callback (int id, void *to_)
     case OPT_VERSION:
       version_etc (stdout, "pspp", PACKAGE_NAME, PACKAGE_VERSION,
                    "Ben Pfaff", "John Darrington", "Jason Stover",
-                   (char *) NULL);
+                   NULL_SENTINEL);
       exit (EXIT_SUCCESS);
 
     default:
@@ -277,7 +287,7 @@ terminal_opts_init (struct argv_parser *ap, struct source_stream *ss)
 {
   struct terminal_opts *to;
 
-  to = xmalloc (sizeof *to);
+  to = xzalloc (sizeof *to);
   to->source_stream = ss;
   to->syntax_mode = GETL_BATCH;
   string_map_init (&to->options);