Committed patch #5524, which allows the message destination to be
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 7 Nov 2006 12:59:59 +0000 (12:59 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 7 Nov 2006 12:59:59 +0000 (12:59 +0000)
set on the command line.

25 files changed:
src/ui/terminal/ChangeLog
src/ui/terminal/command-line.c
src/ui/terminal/main.c
src/ui/terminal/msg-ui.c
src/ui/terminal/msg-ui.h
tests/bugs/agg_crash.sh
tests/bugs/big-input-2.sh
tests/bugs/big-input.sh
tests/bugs/curtailed.sh
tests/bugs/data-crash.sh
tests/bugs/examine-missing.sh
tests/bugs/if_crash.sh
tests/bugs/input-crash.sh
tests/bugs/print-crash.sh
tests/bugs/t-test.sh
tests/bugs/terminate.sh
tests/bugs/val-labs.sh
tests/command/aggregate.sh
tests/command/erase.sh
tests/command/loop.sh
tests/command/match-files.sh
tests/command/missing-values.sh
tests/command/print.sh
tests/command/rank.sh
tests/command/very-long-strings.sh

index db86245e73683715a972281617c1a12703075c78..4bc7b3619f6153a22de3d4713638194f90ced9b8 100644 (file)
@@ -1,3 +1,8 @@
+Tue Nov  7 20:54:32 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * command-line.c msg-ui.c msg-ui.h main.c: Added an -e
+       option to set the file for error messages.
+
 Sat Nov  4 15:48:04 2006  Ben Pfaff  <blp@gnu.org>
 
        * msg-ui.c (handle_msg): Only write message to terminal if
index 8511f290efab920d06d8a4bd33360f1e18723c72..54e4a7c2d90c51ce58bddbd7644275b90e4b65a3 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <config.h>
 #include "command-line.h"
+#include "msg-ui.h"
 #include <libpspp/message.h>
 #include <ctype.h>
 #include <stdio.h>
@@ -62,6 +63,7 @@ parse_command_line (int argc, char **argv)
     {"device", required_argument, NULL, 'o'},
     {"dry-run", no_argument, NULL, 'n'},
     {"edit", no_argument, NULL, 'n'},
+    {"error-file", required_argument, NULL, 'e'},
     {"help", no_argument, NULL, 'h'},
     {"include-directory", required_argument, NULL, 'I'},
     {"interactive", no_argument, NULL, 'i'},
@@ -89,7 +91,7 @@ parse_command_line (int argc, char **argv)
 
   for (;;)
     {
-      c = getopt_long (argc, argv, "a:x:B:c:f:hiI:lno:prsvV", long_options, NULL);
+      c = getopt_long (argc, argv, "a:x:B:c:e:f:hiI:lno:prsvV", long_options, NULL);
       if (c == -1)
        break;
 
@@ -119,7 +121,9 @@ parse_command_line (int argc, char **argv)
               return false;
            }
          break;
-
+       case 'e':
+         msg_ui_set_error_file (optarg);
+         break;
        case 'B':
          config_path = optarg;
          break;
@@ -223,6 +227,7 @@ N_("PSPP, a program for statistical analysis of sample data.\n"
 "  -B, --config-dir=DIR      set configuration directory to DIR\n"
 "  -o, --device=DEVICE       select output driver DEVICE and disable defaults\n"
 "\nInput and output:\n"
+"  -e, --error-file=FILE     send error messages to FILE (appended)\n"
 "  -f, --out-file=FILE       send output to FILE (overwritten)\n"
 "  -p, --pipe                read script from stdin, send output to stdout\n"
 "  -I-, --no-include         clear include path\n"
index 6998f773d9fb12ddbf7f7250e581a515746a46bf..b52fd941098ad899717dab11b09b69a60ff0d5bf 100644 (file)
@@ -90,7 +90,6 @@ main (int argc, char **argv)
 
   fmt_init ();
   outp_init ();
-  msg_ui_init ();
   fn_init ();
   fh_init ();
   getl_initialize ();
@@ -101,6 +100,7 @@ main (int argc, char **argv)
 
   if (parse_command_line (argc, argv)) 
     {
+      msg_ui_init ();
       outp_read_devices ();
       lex_init (do_read_line);
 
index bcfe1ea6dcda81b54f9b49b9bc37162ded66a36e..7d5cf72f84ff89fb689136ad820eb68c96477106 100644 (file)
@@ -27,6 +27,7 @@
 #include <language/line-buffer.h>
 #include <data/settings.h>
 #include <libpspp/message.h>
+#include <errno.h>
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 /* Number of errors, warnings reported. */
 static int error_count;
 static int warning_count;
+static const char *error_file;
 
 static void handle_msg (const struct msg *);
 
+static FILE *msg_file;
+
+void 
+msg_ui_set_error_file (const char *filename)
+{
+  error_file = filename;
+}
+
 void
 msg_ui_init (void) 
 {
+  msg_file = stdout;
+
+  if ( error_file ) 
+    {
+      msg_file = fopen (error_file, "a");
+      if ( NULL == msg_file ) 
+       {
+         int err = errno;
+         printf ( _("Cannot open %s (%s). "
+                    "Writing errors to stdout instead.\n"), 
+                  error_file, strerror(err) );
+         msg_file = stdout;
+       }
+    }
   msg_init (handle_msg, get_msg_location);
 }
 
@@ -48,6 +72,7 @@ void
 msg_ui_done (void) 
 {
   msg_done ();
+  fclose (msg_file);
 }
 
 
@@ -141,8 +166,8 @@ handle_msg (const struct msg *m)
 
   ds_put_cstr (&string, m->text);
 
-  if (get_error_routing_to_terminal ())
-    dump_message (ds_cstr (&string), get_viewwidth (), 8, stdout);
+  if (msg_file != stdout || get_error_routing_to_terminal ())
+    dump_message (ds_cstr (&string), get_viewwidth (), 8, msg_file);
 
   ds_destroy (&string);
 }
index fc9dcd95939e9e2b6499008889972aa520531688..4eeec2789ecaff638e8891a4a8971f12c2b1711c 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <stdbool.h>
 
+void msg_ui_set_error_file (const char *filename);
 void msg_ui_init (void);
 void msg_ui_done (void);
 void check_msg_count (void);
index ec202db769a6b01fc1b7898585d66d75cd3281dc..469cde7cf4dec57c7eeb5e4eabd8e131c5eb0de9 100755 (executable)
@@ -72,7 +72,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 # So this will have a non zero error status.
 # But it shouldn't crash!
 activity="run_program"
-$SUPERVISOR $PSPP $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -e /dev/null $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 
index 1fe9b60e29ff3dcfce275d764dd5c14b32e71586..32b5bcfd3e9bff611c554f43b227ce835899b8d5 100755 (executable)
@@ -79,7 +79,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program"
-$SUPERVISOR $PSPP -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 0 ] ; then fail ; fi
 
 activity="appending to data"
@@ -88,7 +88,7 @@ $PERL -e 'for ($i=0; $i<25000; $i++) { print "AB04\nAB12\n" };' >> $TEMPDIR/larg
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program"
-$SUPERVISOR $PSPP -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 0 ] ; then fail ; fi
 
 pass;
index bcafa788870fac581ffdc86cf715a8192351d64e..10f31e2f604b1af4f1e323d60ffa6c3f1b592d3b 100755 (executable)
@@ -71,7 +71,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program"
-$SUPERVISOR $PSPP -o raw-ascii $TEMPDIR/foo.sps > /dev/null
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TEMPDIR/foo.sps 
 if [ $? -ne 0 ] ; then fail ; fi
 
 pass;
index 93c45b594d8c8d93a7e9de2f0609301cb07fa00c..86acddf5c92c094758753d671472c2ce83115ece 100755 (executable)
@@ -70,7 +70,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 #This must fail
 activity="run program"
-$SUPERVISOR $PSPP $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -e /dev/null $TESTFILE
 if [ $? -ne 1 ] ; then fail ; fi
 
 
index 315555237efe7d7c1bafa418a943ed54bbc88e29..dd86502847bdf1d39bd89027e6f2d7ec00d5a9ae 100755 (executable)
@@ -63,8 +63,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 #This must fail
 activity="run program"
-$SUPERVISOR $PSPP $TEMPDIR/ct.stat > /dev/null
+$SUPERVISOR $PSPP -e /dev/null $TEMPDIR/ct.stat 
 if [ $? -ne 1 ] ; then fail ; fi
 
-
 pass;
index 31164d9b96dfa7307bf1d0dde07ef8ad459555d4..78b6be5f2fd3b99e9b740e3d1f582da4af78245c 100755 (executable)
@@ -70,7 +70,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program"
-$SUPERVISOR $PSPP -o raw-ascii $TESTFILE > /dev/null 2>&1
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TESTFILE 2> /dev/null
 if [ $? -ne 0 ] ; then fail ; fi
 
 pass;
index 4e414eb1642dac15ef211ad96029cff67631b3e1..ef059e955b3ab56c3310bbef03a9a74e6d448b7c 100755 (executable)
@@ -76,7 +76,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 # So this will have a non zero error status.
 # But it shouldn't crash!
 activity="run_program"
-$SUPERVISOR $PSPP $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -e /dev/null $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 
index 03dd961cd922bd1914eed37c94d0567ee4644a71..2336c867e5b5ef1fb1a34e7cafdcc946cb6a69c3 100755 (executable)
@@ -73,7 +73,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 # The above syntax is invalid, so this program should fail to parse
 activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 
index d362ede1dd63ed20795d2691e218db21e5ee4101..ba1630f5b69c0d1cee7264dcb2d748b3876107b9 100755 (executable)
@@ -68,7 +68,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 
 activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 
index d2c92ecce83ce79bbf1ad39a18178da29897d7db..9fac7dfc8be33dcc76cdc033fcac33105769ae4e 100755 (executable)
@@ -73,7 +73,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 #The syntax was invalid.  Therefore pspp must return non zero.
 activity="run program"
-$SUPERVISOR $PSPP -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 pass;
index 669a308d3f9ac8cbc3f949be823c9f18d74d1b3d..ee3ffa878be161d3bc37a05275282d6b6f10c2a7 100755 (executable)
@@ -66,7 +66,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program"
 # This must exit with non zero status
-$SUPERVISOR $here/../src/pspp -o raw-ascii $TEMPDIR/foo.sps > /dev/null 2> $TEMPDIR/stderr
+$SUPERVISOR $here/../src/pspp -o raw-ascii -e /dev/null $TEMPDIR/foo.sps 2> $TEMPDIR/stderr
 if [ $? -eq 0 ] ; then fail ; fi
 
 activity="compare stderr"
index 0e7d3a47bbee4d89cfecd9fcbcad53f7dee5441e..b27683b6c21f1e11844d91727047c7c0f7cfbe7e 100755 (executable)
@@ -73,7 +73,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 #Invalid syntax --- return value is non zero.
 activity="run program"
-$SUPERVISOR $PSPP -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 pass;
index b85edba304dc7c32c21c2c4f921833a000b2cb30..3cdd84dbe77a03f27e8cd9f365a33d5fdb230c00 100755 (executable)
@@ -206,7 +206,7 @@ for outfile in scratch active external; do
            if [ $? -ne 0 ] ; then no_result ; fi
            
            activity="run $name.pspp"
-           $SUPERVISOR $PSPP --testing-mode -o raw-ascii $name.pspp >/dev/null 2>&1
+           $SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $name.pspp 
            if [ $? -ne 0 ] ; then no_result ; fi
 
            activity="check $name output"
index 8b06c42c8f62bf348bee3e55a0b6ee2b0ef7a1ee..bbb094e14e0ad16e49ac8402645335f1329f0c97 100755 (executable)
@@ -77,7 +77,7 @@ if [ ! -f $TEMPDIR/foobar ] ; then fail ; fi
 
 # This command must fail
 activity="run prog 1"
-$SUPERVISOR $PSPP $TESTFILE > /dev/null
+$SUPERVISOR $PSPP -e /dev/null $TESTFILE 
 if [ $? -eq 0 ] ; then fail ; fi
 
 
index 7c7e493aa3767ece748ac3e16bd1c978c4cb1583..e2b42426bf3c92325e79bb9781f63795128d8493 100755 (executable)
@@ -73,7 +73,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TEMPDIR/loop.stat > $TEMPDIR/stdout
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e $TEMPDIR/stdout $TEMPDIR/loop.stat 
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="compare stdout"
index 65d0f4571af54b8e3829c82018b55ec10a8b23e0..367c6ddc6dc3ebd3f38d341fef97ce634d8003f0 100755 (executable)
@@ -165,7 +165,7 @@ EOF
        if [ $? -ne 0 ] ; then no_result ; fi
 
        activity="run $name.pspp"
-       $SUPERVISOR $PSPP -o raw-ascii $name.pspp >/dev/null 2>&1
+       $SUPERVISOR $PSPP -o raw-ascii -e /dev/null $name.pspp 
        if [ $? -ne 0 ] ; then no_result ; fi
 
        activity="check $name output"
@@ -190,7 +190,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run $name.pspp"
-$SUPERVISOR $PSPP -o raw-ascii $name.pspp >/dev/null 2>&1
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $name.pspp 
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="check $name output"
@@ -239,7 +239,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run $name.pspp"
-$SUPERVISOR $PSPP -o raw-ascii $name.pspp >/dev/null 2>&1
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $name.pspp 
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="check $name output"
index 56edebece98b56d2476a3f9224c79a3b8affc3a2..ecef99df83deb6f2f993daf8cffd4527c2074ac2 100755 (executable)
@@ -109,7 +109,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 
 activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii --testing-mode $TEMPDIR/missing-values.stat > $TEMPDIR/errs
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii --testing-mode --error-file=$TEMPDIR/errs $TEMPDIR/missing-values.stat 
 # Note   vv   --- there are errors in input.  Therefore, the  command must FAIL
 if [ $? -eq 0 ] ; then fail ; fi
 
index 44273ece20fd3832ef1f96d8ad335de10354ac9d..8d7a6160a1d96ed752a633607aef2594f475cfb9 100755 (executable)
@@ -101,7 +101,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 
 activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii --testing-mode $TEMPDIR/print.stat > $TEMPDIR/errs
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii --testing-mode --error-file=$TEMPDIR/errs $TEMPDIR/print.stat 
 if [ $? -ne 0 ] ; then fail ; fi
 
 activity="compare print.out"
index aac20882562b89c8663f83ba80cace54dd56896f..c827a5207850fb7a5fc84949d7b3a42892e54d41 100755 (executable)
@@ -81,7 +81,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 # Check that it properly handles failed transformations.
 activity="run program 1"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE > $TEMPDIR/err
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e $TEMPDIR/err $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 activity="diff 1"
@@ -135,7 +135,7 @@ if [ $? -ne 0 ] ; then no_result ; fi
 
 
 activity="run program (syntax errors)"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE > $TEMPDIR/errs
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e $TEMPDIR/errs $TESTFILE 
 if [ $? -ne 1 ] ; then fail ; fi
 
 activity="compare errors"
@@ -534,7 +534,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program 4"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 0 ] ; then fail ; fi
 
 
index 23bb85f216ecca949e73841d059be3f8753097dd..020c2ffa4143e3aee49d63f80622a6266d8b2916 100755 (executable)
@@ -71,7 +71,7 @@ EOF
 if [ $? -ne 0 ] ; then no_result ; fi
 
 activity="run program 0"
-$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE > /dev/null
+$SUPERVISOR $PSPP --testing-mode -o raw-ascii -e /dev/null $TESTFILE 
 if [ $? -ne 0 ] ; then fail ; fi
 
 activity="compare variable display 0"