Correct packing properties of sort cases dialog.
[pspp] / src / language / utilities / set.q
index ce358ae8a4a7e1a21ee4f1246addd1012dbeb7c8..ed6a08519ed7418e33ac6af1cb267f3bc5db94e6 100644 (file)
@@ -59,8 +59,8 @@ int tgetnum (const char *);
 /* (specification)
    "SET" (stc_):
      blanks=custom;
-     block=string "x==1" "one character long";
-     boxstring=string "x==3 || x==11" "3 or 11 characters long";
+     block=string;
+     boxstring=string;
      case=size:upper/uplow;
      cca=string;
      ccb=string;
@@ -68,29 +68,29 @@ int tgetnum (const char *);
      ccd=string;
      cce=string;
      compression=compress:on/off;
-     cpi=integer "x>0" "%s must be greater than 0";
+     cpi=integer;
      decimal=dec:dot/comma;
      epoch=custom;
      errors=custom;
      format=custom;
      headers=headers:no/yes/blank;
      highres=hires:on/off;
-     histogram=string "x==1" "one character long";
+     histogram=string;
      include=inc:on/off;
      journal=custom;
      log=custom;
      length=custom;
      locale=custom;
      lowres=lores:auto/on/off;
-     lpi=integer "x>0" "%s must be greater than 0";
+     lpi=integer;
      menus=menus:standard/extended;
      messages=custom;
      mexpand=mexp:on/off;
-     miterate=integer "x>0" "%s must be greater than 0";
-     mnest=integer "x>0" "%s must be greater than 0";
+     miterate=integer;
+     mnest=integer;
      mprint=mprint:on/off;
-     mxerrs=integer "x >= 1" "%s must be at least 1";
-     mxloops=integer "x >=1" "%s must be at least 1";
+     mxerrs=integer;
+     mxloops=integer;
      mxmemory=integer;
      mxwarns=integer;
      printback=custom;
@@ -99,15 +99,16 @@ int tgetnum (const char *);
      rrb=rrb:native/isl/isb/idl/idb/vf/vd/vg/zs/zl;
      safer=safe:on;
      scompression=scompress:on/off;
-     scripttab=string "x==1" "one character long";
+     scripttab=string;
      seed=custom;
-     tb1=string "x==3 || x==11" "3 or 11 characters long";
+     tnumbers=custom;
+     tb1=string;
      tbfonts=string;
      undefined=undef:warn/nowarn;
      wib=wib:msbfirst/lsbfirst/vax/native;
      wrb=wrb:native/isl/isb/idl/idb/vf/vd/vg/zs/zl;
      width=custom;
-     workspace=integer "x>0" "%s must be positive";
+     workspace=integer;
      xsort=xsort:yes/no.
 */
 
@@ -148,9 +149,26 @@ cmd_set (struct lexer *lexer, struct dataset *ds)
   if (cmd.sbc_include)
     settings_set_include (cmd.inc == STC_ON);
   if (cmd.sbc_mxerrs)
-    settings_set_max_messages (MSG_S_ERROR, cmd.n_mxerrs[0]);
+    {
+      if (cmd.n_mxerrs[0] >= 1)
+        settings_set_max_messages (MSG_S_ERROR, cmd.n_mxerrs[0]);
+      else
+        msg (SE, _("%s must be at least 1."), "MXERRS");
+    }
+  if (cmd.sbc_mxloops)
+    {
+      if (cmd.n_mxloops[0] >= 1)
+        settings_set_mxloops (cmd.n_mxloops[0]);
+      else
+        msg (SE, _("%s must be at least 1."), "MXLOOPS");
+    }
   if (cmd.sbc_mxwarns)
-    settings_set_max_messages (MSG_S_WARNING, cmd.n_mxwarns[0]);
+    {
+      if (cmd.n_mxwarns[0] >= 0)
+        settings_set_max_messages (MSG_S_WARNING, cmd.n_mxwarns[0]);
+      else
+        msg (SE, _("%s must not be negative."), "MXWARNS");
+    }
   if (cmd.sbc_rib)
     settings_set_input_integer_format (stc_to_integer_format (cmd.rib));
   if (cmd.sbc_rrb)
@@ -169,6 +187,8 @@ cmd_set (struct lexer *lexer, struct dataset *ds)
     {
       if ( cmd.n_workspace[0] < 1024 && ! settings_get_testing_mode ())
        msg (SE, _("WORKSPACE must be at least 1MB"));
+      else if (cmd.n_workspace[0] <= 0)
+       msg (SE, _("WORKSPACE must be positive"));
       else
        settings_set_workspace (cmd.n_workspace[0] * 1024L);
     }
@@ -177,8 +197,12 @@ cmd_set (struct lexer *lexer, struct dataset *ds)
     msg (SW, _("%s is obsolete."), "BLOCK");
   if (cmd.sbc_boxstring)
     msg (SW, _("%s is obsolete."), "BOXSTRING");
+  if (cmd.sbc_cpi)
+    msg (SW, _("%s is obsolete."), "CPI");
   if (cmd.sbc_histogram)
     msg (SW, _("%s is obsolete."), "HISTOGRAM");
+  if (cmd.sbc_lpi)
+    msg (SW, _("%s is obsolete."), "LPI");
   if (cmd.sbc_menus)
     msg (SW, _("%s is obsolete."), "MENUS");
   if (cmd.sbc_xsort)
@@ -298,6 +322,35 @@ stc_custom_blanks (struct lexer *lexer,
   return 1;
 }
 
+static int
+stc_custom_tnumbers (struct lexer *lexer,
+                  struct dataset *ds UNUSED,
+                  struct cmd_set *cmd UNUSED, void *aux UNUSED)
+{
+  lex_match (lexer, T_EQUALS);
+
+  if (lex_match_id (lexer, "VALUES"))
+    {
+      settings_set_value_style (SETTINGS_VAL_STYLE_VALUES);
+    }
+  else if (lex_match_id (lexer, "LABELS"))
+    {
+      settings_set_value_style (SETTINGS_VAL_STYLE_LABELS);
+    }
+  else if (lex_match_id (lexer, "BOTH"))
+    {
+      settings_set_value_style (SETTINGS_VAL_STYLE_BOTH);
+    }
+  else
+    {
+      lex_error_expecting (lexer, "VALUES", "LABELS", "BOTH", NULL_SENTINEL);
+      return 0;
+    }
+
+  return 1;
+}
+
+
 /* Parses the EPOCH subcommand, which controls the epoch used for
    parsing 2-digit years. */
 static int