Adopt use of gnulib for portability.
[pspp-builds.git] / src / aggregate.c
index fb955330a4102e0aea3f13156573f4d9414a2438..2c1495f0e25762bc57b80fbdc86ab27dd26361eb 100644 (file)
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #include <config.h>
 #include "error.h"
 #include "pool.h"
 #include "settings.h"
 #include "sfm-write.h"
+#include "sort-prs.h"
 #include "sort.h"
 #include "str.h"
 #include "var.h"
 #include "vfm.h"
 #include "vfmP.h"
 
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
 /* Specifies how to make an aggregate variable. */
 struct agr_var
   {
@@ -208,18 +212,13 @@ cmd_aggregate (void)
          lex_match ('=');
           agr.sort = sort_parse_criteria (default_dict,
                                           &agr.break_vars, &agr.break_var_cnt,
-                                          &saw_direction);
+                                          &saw_direction, NULL);
           if (agr.sort == NULL)
             goto error;
          
           for (i = 0; i < agr.break_var_cnt; i++)
-            {
-              struct variable *v = dict_clone_var (agr.dict, agr.break_vars[i],
-                                                   agr.break_vars[i]->name, 
-                                                  agr.break_vars[i]->longname 
-                                                  );
-              assert (v != NULL);
-            }
+            dict_clone_var_assert (agr.dict, agr.break_vars[i],
+                                   agr.break_vars[i]->name);
 
           /* BREAK must follow the options. */
           break;
@@ -455,7 +454,8 @@ parse_aggregate_functions (struct agr_proc *agr)
                    arg[i].f = tokval;
                    type = NUMERIC;
                  } else {
-                   msg (SE, _("Missing argument %d to %s."), i + 1, function->name);
+                   msg (SE, _("Missing argument %d to %s."), i + 1,
+                         function->name);
                    goto error;
                  }
            
@@ -495,8 +495,7 @@ parse_aggregate_functions (struct agr_proc *agr)
               || func_index == FIN || func_index == FOUT) 
               && ((src[0]->type == NUMERIC && arg[0].f > arg[1].f)
                   || (src[0]->type == ALPHA
-                      && st_compare_pad (arg[0].c, strlen (arg[0].c),
-                                         arg[1].c, strlen (arg[1].c)) > 0)))
+                      && str_compare_rpad (arg[0].c, arg[1].c) > 0)))
             {
               union value t = arg[0];
               arg[0] = arg[1];
@@ -527,7 +526,6 @@ parse_aggregate_functions (struct agr_proc *agr)
          /* Create the target variable in the aggregate
              dictionary. */
          {
-            static const struct fmt_spec f8_2 = {FMT_F, 8, 2};
            struct variable *destvar;
            
            v->function = func_index;
@@ -543,10 +541,11 @@ parse_aggregate_functions (struct agr_proc *agr)
                  }
 
                if (function->alpha_type == ALPHA)
-                 destvar = dict_clone_var (agr->dict, v->src, 0, dest[i] );
-               else if (v->src->type == NUMERIC
-                         || function->alpha_type == NUMERIC)
+                 destvar = dict_clone_var (agr->dict, v->src, dest[i]);
+               else
                   {
+                    assert (v->src->type == NUMERIC
+                            || function->alpha_type == NUMERIC);
                     destvar = dict_create_var (agr->dict, dest[i], 0);
                     if (destvar != NULL) 
                       {