Continue reforming error message support. In this phase, get rid of
authorBen Pfaff <blp@gnu.org>
Mon, 24 Apr 2006 05:09:59 +0000 (05:09 +0000)
committerBen Pfaff <blp@gnu.org>
Mon, 24 Apr 2006 05:09:59 +0000 (05:09 +0000)
message "titles" and put the message text in `struct error'.  Now
`struct error' encapsulates a message more properly.

15 files changed:
src/ChangeLog
src/data/ChangeLog
src/data/casefile.c
src/data/data-in.c
src/data/por-file-reader.c
src/data/sys-file-reader.c
src/language/data-io/ChangeLog
src/language/data-io/data-list.c
src/language/expressions/ChangeLog
src/language/expressions/helpers.c
src/libpspp/ChangeLog
src/libpspp/message.h
src/message.c
src/ui/gui/ChangeLog
src/ui/gui/message-dialog.c

index 8f3b355fb5923f081680ada0c1651727ed1d50b5..2930c220824490d9feee9d11c27cea89e1d16843 100644 (file)
@@ -1,3 +1,15 @@
+Sun Apr 23 22:00:23 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+
+       * message.c: (tmsg) Removed.
+       (msg) Use err_msg() instead of err_vmsg().  Format message
+       ourselves.
+       (err_vmsg) Renamed err_msg().  Changed interface, dropping message
+       and va_list args which are now in the error struct.
+               
 Sun Apr 23 20:35:28 2006  Ben Pfaff  <blp@gnu.org>
 
        Continue reforming error message support.
index 2c0a6a66867612459f97d721e211143992ef7ad6..38510757495a9eae8b5276f175aa134b8cc0ad4b 100644 (file)
@@ -1,3 +1,18 @@
+Sun Apr 23 22:04:45 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+       
+       * casefile.c: (io_error) Use err_msg() instead of err_vmsg().
+       Format message ourselves.
+
+       * data-in.c: (vdls_error) Ditto.
+
+       * por-file-reader.c: (error) Ditto.
+
+       * sys-file-reader.c: (corrupt_msg) Ditto.
+
 Sun Apr 16 18:49:51 2006  Ben Pfaff  <blp@gnu.org>
 
        GNU standards require "file name" instead of "filename" in
index cf2d4f8dc8b212f17e90efdd420e59202f85821a..66baba96b918e13d83ec4e53c96bd4963e16b611 100644 (file)
@@ -740,11 +740,11 @@ io_error (struct casefile *cf, const char *format, ...)
       e.severity = MSG_ERROR;
       e.where.file_name = NULL;
       e.where.line_number = -1;
-      e.title = NULL;
-
       va_start (args, format);
-      err_vmsg (&e, format, args);
+      e.text = xvasprintf (format, args);
       va_end (args);
+      
+      err_msg (&e);
     }
   cf->ok = false;
 }
index 1180b32b0ab0ea4c3d8b3a02ee608ceabccb62be..9da8db8025c6a06b8b251848b422cdd1e4fb5593 100644 (file)
@@ -49,26 +49,25 @@ static void
 vdls_error (const struct data_in *i, const char *format, va_list args)
 {
   struct error e;
-  struct string title;
+  struct string text;
 
   if (i->flags & DI_IGNORE_ERROR)
     return;
 
-  ds_init (&title, 64);
+  ds_init (&text, 64);
   if (i->f1 == i->f2)
-    ds_printf (&title, _("(column %d"), i->f1);
+    ds_printf (&text, _("(column %d"), i->f1);
   else
-    ds_printf (&title, _("(columns %d-%d"), i->f1, i->f2);
-  ds_printf (&title, _(", field type %s) "), fmt_to_string (&i->format));
+    ds_printf (&text, _("(columns %d-%d"), i->f1, i->f2);
+  ds_printf (&text, _(", field type %s) "), fmt_to_string (&i->format));
+  ds_vprintf (&text, format, args);
 
   e.category = MSG_DATA;
   e.severity = MSG_ERROR;
   err_location (&e.where);
-  e.title = ds_c_str (&title);
+  e.text = ds_c_str (&text);
 
-  err_vmsg (&e, format, args);
-
-  ds_destroy (&title);
+  err_msg (&e);
 }
 
 static void
index 5b49fa5aa90632e41d013f581b538debad13bb5a..c137a0507778d0df8085f158b20f2219148dc467 100644 (file)
@@ -86,22 +86,23 @@ static void
 error (struct pfm_reader *r, const char *msg, ...)
 {
   struct error e;
-  const char *file_name;
-  char *title;
+  struct string text;
   va_list args;
 
+  ds_init (&text, 64);
+  ds_printf (&text, _("portable file %s corrupt at offset %ld: "),
+             fh_get_file_name (r->fh), ftell (r->file));
+  va_start (args, msg);
+  ds_vprintf (&text, msg, args);
+  va_end (args);
+
   e.category = MSG_GENERAL;
   e.severity = MSG_ERROR;
   e.where.file_name = NULL;
   e.where.line_number = 0;
-  file_name = fh_get_file_name (r->fh);
-  e.title = title = pool_alloc (r->pool, strlen (file_name) + 80);
-  sprintf (title, _("portable file %s corrupt at offset %ld: "),
-           file_name, ftell (r->file));
-
-  va_start (args, msg);
-  err_vmsg (&e, msg, args);
-  va_end (args);
+  e.text = ds_c_str (&text);
+  
+  err_msg (&e);
 
   r->ok = false;
 
index ebf0a7b1bb7194f1cf1ea9ecaac61bbe7c4699fa..6c104cb33d61f531bf290becaac8a872dd21d71c 100644 (file)
@@ -125,16 +125,20 @@ corrupt_msg (int class, const char *format,...)
 {
   struct error e;
   va_list args;
+  struct string text;
+
+  ds_create (&text, _("corrupt system file: "));
+  va_start (args, format);
+  ds_vprintf (&text, format, args);
+  va_end (args);
 
   e.category = msg_class_to_category (class);
   e.severity = msg_class_to_severity (class);
   e.where.file_name = NULL;
   e.where.line_number = 0;
-  e.title = _("corrupt system file: ");
+  e.text = ds_c_str (&text);
 
-  va_start (args, format);
-  err_vmsg (&e, format, args);
-  va_end (args);
+  err_msg (&e);
 }
 
 /* Closes a system file after we're done with it. */
index bfbe4043a4c9e34cda0680762afb99243c46ef4b..d6c0ba3c80e066a500e418f1baab5a7ab10efe08 100644 (file)
@@ -1,3 +1,13 @@
+Sun Apr 23 22:05:58 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+       
+       * data-list.c: (macro RPD_ERR) Removed.
+       (rpd_msg) New function.  Updated all references to tmsg() to call
+       this function instead.
+
 Sat Apr 15 19:38:13 2006  Ben Pfaff  <blp@gnu.org>
 
        Remove last users of struct file_ext so we can get rid of it
index 6609e32b91b120badaac966fae443cd76b5fcbe0..04c9319a4f320c4ee8c11f7d9d3d1b80432d60d8 100644 (file)
@@ -98,6 +98,7 @@ struct data_list_pgm
 
 static const struct case_source_class data_list_source_class;
 
+static void rpd_msg (enum msg_class, const char *format, ...);
 static int parse_fixed (struct data_list_pgm *);
 static int parse_free (struct dls_var_spec **, struct dls_var_spec **);
 static void dump_fixed_table (const struct dls_var_spec *,
@@ -108,9 +109,6 @@ static void destroy_dls_var_spec (struct dls_var_spec *);
 static trns_free_func data_list_trns_free;
 static trns_proc_func data_list_trns_proc;
 
-/* Message title for REPEATING DATA. */
-#define RPD_ERR "REPEATING DATA: "
-
 int
 cmd_data_list (void)
 {
@@ -1814,9 +1812,10 @@ rpd_parse_record (const struct rpd_parse_info *info)
          data_out (actual_str, &t->id_var->print, id_temp);
           actual_str[t->id_var->print.w] = '\0';
            
-         tmsg (SE, RPD_ERR, 
-               _("Encountered mismatched record ID \"%s\" expecting \"%s\"."),
-               actual_str, expected_str);
+         rpd_msg (SE, 
+                   _("Encountered mismatched record ID \"%s\" "
+                     "expecting \"%s\"."),
+                   actual_str, expected_str);
 
          return 0;
        }
@@ -1846,10 +1845,10 @@ rpd_parse_record (const struct rpd_parse_info *info)
                {
                  warned = 1;
 
-                 tmsg (SW, RPD_ERR,
-                       _("Variable %s starting in column %d extends "
-                         "beyond physical record length of %d."),
-                       var_spec->v->name, fc, info->len);
+                 rpd_msg (SW,
+                           _("Variable %s starting in column %d extends "
+                             "beyond physical record length of %d."),
+                           var_spec->v->name, fc, info->len);
                }
              
              {
@@ -1914,46 +1913,45 @@ repeating_data_trns_proc (void *trns_, struct ccase *c, int case_num UNUSED)
   occurs_left = occurs = realize_value (&t->occurs, c);
   if (occurs <= 0)
     {
-      tmsg (SE, RPD_ERR, _("Invalid value %d for OCCURS."), occurs);
+      rpd_msg (SE, _("Invalid value %d for OCCURS."), occurs);
       return TRNS_NEXT_CASE;
     }
   starts_beg = realize_value (&t->starts_beg, c);
   if (starts_beg <= 0)
     {
-      tmsg (SE, RPD_ERR, _("Beginning column for STARTS (%d) must be "
-                           "at least 1."),
-            starts_beg);
+      rpd_msg (SE, _("Beginning column for STARTS (%d) must be at least 1."),
+               starts_beg);
       return TRNS_NEXT_CASE;
     }
   starts_end = realize_value (&t->starts_end, c);
   if (starts_end < starts_beg)
     {
-      tmsg (SE, RPD_ERR, _("Ending column for STARTS (%d) is less than "
-                           "beginning column (%d)."),
-            starts_end, starts_beg);
+      rpd_msg (SE, _("Ending column for STARTS (%d) is less than "
+                     "beginning column (%d)."),
+               starts_end, starts_beg);
       skip_first_record = 1;
     }
   length = realize_value (&t->length, c);
   if (length < 0)
     {
-      tmsg (SE, RPD_ERR, _("Invalid value %d for LENGTH."), length);
+      rpd_msg (SE, _("Invalid value %d for LENGTH."), length);
       length = 1;
       occurs = occurs_left = 1;
     }
   cont_beg = realize_value (&t->cont_beg, c);
   if (cont_beg < 0)
     {
-      tmsg (SE, RPD_ERR, _("Beginning column for CONTINUED (%d) must be "
-                           "at least 1."),
-            cont_beg);
+      rpd_msg (SE, _("Beginning column for CONTINUED (%d) must be "
+                     "at least 1."),
+               cont_beg);
       return TRNS_DROP_CASE;
     }
   cont_end = realize_value (&t->cont_end, c);
   if (cont_end < cont_beg)
     {
-      tmsg (SE, RPD_ERR, _("Ending column for CONTINUED (%d) is less than "
-                           "beginning column (%d)."),
-            cont_end, cont_beg);
+      rpd_msg (SE, _("Ending column for CONTINUED (%d) is less than "
+                     "beginning column (%d)."),
+               cont_end, cont_beg);
       return TRNS_DROP_CASE;
     }
 
@@ -1982,11 +1980,11 @@ repeating_data_trns_proc (void *trns_, struct ccase *c, int case_num UNUSED)
      continuation records. */
   if (occurs_left > 0 && cont_beg == 0)
     {
-      tmsg (SE, RPD_ERR,
-            _("Number of repetitions specified on OCCURS (%d) "
-              "exceed number of repetitions available in "
-              "space on STARTS (%d), and CONTINUED not specified."),
-            occurs, (starts_end - starts_beg + 1) / length);
+      rpd_msg (SE,
+               _("Number of repetitions specified on OCCURS (%d) "
+                 "exceed number of repetitions available in "
+                 "space on STARTS (%d), and CONTINUED not specified."),
+               occurs, (starts_end - starts_beg + 1) / length);
       return TRNS_DROP_CASE;
     }
 
@@ -2000,10 +1998,10 @@ repeating_data_trns_proc (void *trns_, struct ccase *c, int case_num UNUSED)
       /* Read in another record. */
       if (dfm_eof (t->reader))
         {
-          tmsg (SE, RPD_ERR,
-                _("Unexpected end of file with %d repetitions "
-                  "remaining out of %d."),
-                occurs_left, occurs);
+          rpd_msg (SE,
+                   _("Unexpected end of file with %d repetitions "
+                     "remaining out of %d."),
+                   occurs_left, occurs);
           return TRNS_DROP_CASE;
         }
       dfm_expand_tabs (t->reader);
@@ -2060,3 +2058,27 @@ repeating_data_set_write_case (struct transformation *trns_,
   t->write_case = write_case;
   t->wc_data = wc_data;
 }
+
+/* Reports a message in CLASS with the given FORMAT as text,
+   prefixing the message with "REPEATING DATA: " to make the
+   cause clear. */
+static void
+rpd_msg (enum msg_class class, const char *format, ...)
+{
+  struct error e;
+  va_list args;
+  struct string text;
+
+  ds_create (&text, "REPEATING DATA: ");
+  va_start (args, format);
+  ds_vprintf (&text, format, args);
+  va_end (args);
+
+  e.category = msg_class_to_category (class);
+  e.severity = msg_class_to_severity (class);
+  e.where.file_name = NULL;
+  e.where.line_number = 0;
+  e.text = ds_c_str (&text);
+
+  err_msg (&e);
+}
index 4a96aeb941a9479876c7386203e97d30fc102f8b..5b04f9ffdb49806ca7b1b92c47a371708da4ba56 100644 (file)
@@ -1,3 +1,12 @@
+Sun Apr 23 22:06:45 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+       
+       * helpers.c: (expr_error) Use err_msg() instead of err_vmsg().
+       Format message ourselves.
+
 Thu Mar  2 08:40:33 WST 2006 John Darrington <john@darrington.wattle.id.au>
        
        * Moved files from src directory
index 9d0d18cab134185f5d5b4d308e21a7a5be12fef4..3e28d8fe6129dc2f78f8ccd00cdcb4453b45f4c1 100644 (file)
@@ -18,11 +18,11 @@ expr_error (void *aux UNUSED, const char *format, ...)
   e.category = MSG_SYNTAX;
   e.severity = MSG_ERROR;
   err_location (&e.where);
-  e.title = NULL;
-
   va_start (args, format);
-  err_vmsg (&e, format, args);
+  e.text = xvasprintf (format, args);
   va_end (args);
+
+  err_msg (&e);
 }
 
 double
index 88955ac42ca3797e2f3e8197f9921cc02c59f754..2e2cad225a960ac9318146e709d66cc8d7acd040 100644 (file)
@@ -1,3 +1,12 @@
+Sun Apr 23 22:07:06 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+       
+       * message.h: (struct error) Remove `title' member.  Add `text'
+       member.
+       
 Sun Apr 16 20:43:35 2006  Ben Pfaff  <blp@gnu.org>
 
        Continue reforming error message support.  In this phase, we
index 9dae1e40ac98396fcfa3d834a17c2346e21c68d0..56ded21c5f3be1877c72ebd9f0ccb12732c052a0 100644 (file)
@@ -81,7 +81,7 @@ struct error
     enum msg_category category; /* Message category. */
     enum msg_severity severity; /* Message severity. */
     struct file_locator where; /* File location, or (NULL, -1). */
-    const char *title;         /* Special text inserted if not null. */
+    char *text;                 /* Error text. */
   };
 
 /* Number of errors, warnings reported. */
@@ -96,11 +96,10 @@ extern int err_already_flagged;
 /* Nonnegative verbosity level.  Higher value == more verbose. */
 extern int err_verbosity;
 
-/* Functions. */
+/* Emitting messages. */
 void msg (enum msg_class, const char *format, ...)
      PRINTF_FORMAT (2, 3);
-void tmsg (enum msg_class, const char *title, const char *format, ...)
-     PRINTF_FORMAT (3, 4);
+void err_msg (const struct error *);
 
 void verbose_msg (int level, const char *format, ...)
      PRINTF_FORMAT (2, 3);
@@ -114,7 +113,6 @@ void err_location (struct file_locator *);
 void err_set_command_name (const char *);
 void err_done (void);
 void err_check_count (void);
-void err_vmsg (const struct error *, const char *, va_list);
 
 /* Used in panic situations only */
 void request_bug_report_and_abort(const char *msg );
index 8c4c447393131391b2d6a8ec5fb03ef1ca216b61..35debc7f6eec0e13cb35195a34c4469717ea6f36 100644 (file)
@@ -48,24 +48,6 @@ static char *command_name;
 \f
 /* Public functions. */
 
-/* Writes error message in CLASS, with title TITLE and text FORMAT,
-   formatted with printf, to the standard places. */
-void
-tmsg (enum msg_class class, const char *title, const char *format, ...)
-{
-  struct error e;
-  va_list args;
-
-  e.category = msg_class_to_category (class);
-  e.severity = msg_class_to_severity (class);
-  err_location (&e.where);
-  e.title = title;
-
-  va_start (args, format);
-  err_vmsg (&e, format, args);
-  va_end (args);
-}
-
 /* Writes error message in CLASS, with text FORMAT, formatted with
    printf, to the standard places. */
 void
@@ -77,11 +59,11 @@ msg (enum msg_class class, const char *format, ...)
   e.category = msg_class_to_category (class);
   e.severity = msg_class_to_severity (class);
   err_location (&e.where);
-  e.title = NULL;
-
   va_start (args, format);
-  err_vmsg (&e, format, args);
+  e.text = xvasprintf (format, args);
   va_end (args);
+
+  err_msg (&e);
 }
 
 /* Writes MESSAGE formatted with printf, to stderr, if the
@@ -143,8 +125,10 @@ err_done (void)
   readln_uninitialize();
 }
 
+/* Emits E as an error message.
+   Frees `text' member in E. */
 void
-err_vmsg (const struct error *e, const char *format, va_list args)
+err_msg (const struct error *e)
 {
   struct category 
     {
@@ -193,16 +177,14 @@ err_vmsg (const struct error *e, const char *format, va_list args)
   if (category->show_command_name && command_name != NULL)
     ds_printf (&msg, "%s: ", command_name);
 
-  if (e->title)
-    ds_puts (&msg, e->title);
-
-  ds_vprintf (&msg, format, args);
+  ds_puts (&msg, e->text);
 
   /* FIXME: Check set_messages and set_errors to determine where to
      send errors and messages. */
   dump_message (ds_c_str (&msg), puts_stdout, get_viewwidth (), 8);
 
   ds_destroy (&msg);
+  free (e->text);
 }
 \f
 /* Private functions. */
index c60dee15cb6580848ab7812bf3d5291c3220f2ca..6692d9aa633318ba16f3516cf4a7d81ba367c234 100644 (file)
@@ -1,3 +1,12 @@
+Sun Apr 23 22:07:49 2006  Ben Pfaff  <blp@gnu.org>
+
+       Continue reforming error message support.  In this phase, get rid
+       of message "titles" and put the message text in `struct error'.
+       Now `struct error' encapsulates a message more properly.
+       
+       * message-dialog.c: (err_vmsg) Rename err_msg().  Updated
+       interface.
+
 Sun Apr 16 20:45:35 2006  Ben Pfaff  <blp@gnu.org>
 
        Continue reforming error message support.  In this phase, we
index c5928d357306b1928e0230081614c460fafdbfc3..0af7693694b21b4f33fec8c8cd197fbf8b9d80a4 100644 (file)
@@ -113,10 +113,10 @@ msg(enum msg_class klass, const char *fmt, ...)
 
 
 void
-err_vmsg (const struct error *e, const char *format, va_list args)
+err_msg (const struct error *e)
 {
   vmsg(msg_class_from_category_and_severity (e->category, e->severity),
-       format, args);
+       "%s", e->text);
 }