SET: Improve error messages for SET CCx.
[pspp] / src / language / data-io / save-translate.c
index 72b6e3ae7226e0441ef7d75a4e15a5c5b450bb07..c157701e6cbd21fbc36fda554cf5bde173d9d9e6 100644 (file)
@@ -33,7 +33,6 @@
 #include "language/lexer/lexer.h"
 #include "libpspp/message.h"
 
-#include "xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -50,8 +49,6 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   struct casewriter *writer;
   struct file_handle *handle;
 
-  struct csv_writer_options csv_opts;
-
   bool replace;
 
   bool retain_unselected;
@@ -80,7 +77,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   include_var_names = false;
   use_value_labels = false;
   use_print_formats = false;
-  decimal = settings_get_decimal_char (FMT_F);
+  decimal = settings_get_fmt_settings ()->decimal;
   delimiter = 0;
   qualifier = '"';
 
@@ -96,7 +93,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
        {
           if (handle != NULL)
             {
-              lex_sbc_only_once ("OUTFILE");
+              lex_sbc_only_once (lexer, "OUTFILE");
               goto error;
             }
 
@@ -110,7 +107,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
         {
           if (type != 0)
             {
-              lex_sbc_only_once ("TYPE");
+              lex_sbc_only_once (lexer, "TYPE");
               goto error;
             }
 
@@ -168,8 +165,8 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
                   /* XXX should support multibyte UTF-8 delimiters */
                   if (ss_length (lex_tokss (lexer)) != 1)
                     {
-                      msg (SE, _("The %s string must contain exactly one "
-                                 "character."), "DELIMITER");
+                      lex_error (lexer, _("The %s string must contain exactly "
+                                          "one character."), "DELIMITER");
                       goto error;
                     }
                   delimiter = ss_first (lex_tokss (lexer));
@@ -183,8 +180,8 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
                   /* XXX should support multibyte UTF-8 qualifiers */
                   if (ss_length (lex_tokss (lexer)) != 1)
                     {
-                      msg (SE, _("The %s string must contain exactly one "
-                                 "character."), "QUALIFIER");
+                      lex_error (lexer, _("The %s string must contain exactly "
+                                          "one character."), "QUALIFIER");
                       goto error;
                     }
                   qualifier = ss_first (lex_tokss (lexer));
@@ -239,12 +236,12 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
 
   if (type == 0)
     {
-      lex_sbc_missing ("TYPE");
+      lex_sbc_missing (lexer, "TYPE");
       goto error;
     }
   else if (handle == NULL)
     {
-      lex_sbc_missing ("OUTFILE");
+      lex_sbc_missing (lexer, "OUTFILE");
       goto error;
     }
   else if (!replace && fn_exists (handle))
@@ -257,17 +254,18 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   dict_delete_scratch_vars (dict);
   dict_compact_values (dict);
 
-  csv_opts.recode_user_missing = recode_user_missing;
-  csv_opts.include_var_names = include_var_names;
-  csv_opts.use_value_labels = use_value_labels;
-  csv_opts.use_print_formats = use_print_formats;
-  csv_opts.decimal = decimal;
-  csv_opts.delimiter = (delimiter ? delimiter
-                        : type == TAB_FILE ? '\t'
-                        : decimal == '.' ? ','
-                        : ';');
-  csv_opts.qualifier = qualifier;
-
+  struct csv_writer_options csv_opts = {
+    .recode_user_missing = recode_user_missing,
+    .include_var_names = include_var_names,
+    .use_value_labels = use_value_labels,
+    .use_print_formats = use_print_formats,
+    .decimal = decimal,
+    .delimiter = (delimiter ? delimiter
+                  : type == TAB_FILE ? '\t'
+                  : decimal == '.' ? ','
+                  : ';'),
+    .qualifier = qualifier,
+  };
   writer = csv_writer_open (handle, dict, &csv_opts);
   if (writer == NULL)
     goto error;