+ int s;
+ bool match = false;
+ if (!first_case)
+ {
+ match = true;
+ for (s = 0; s < mformat->n_split_vars; ++s)
+ {
+ const struct variable *svar = mformat->split_vars[s];
+ const union value *sv = case_data (c, svar);
+ if (! value_equal (prev_values + s, sv, var_get_width (svar)))
+ {
+ match = false;
+ break;
+ }
+ }
+ }
+ first_case = false;
+
+ if (matrices == NULL || ! match)
+ {
+ row = (mformat->triangle == LOWER && mformat->diagonal == NO_DIAGONAL) ?
+ 1 : 0;
+
+ n_splits++;
+ matrices = xrealloc (matrices, sizeof (double*) * n_splits);
+ matrices[n_splits - 1] = xmalloc (sizeof_matrix);
+ }
+
+ for (s = 0; s < mformat->n_split_vars; ++s)
+ {
+ const struct variable *svar = mformat->split_vars[s];
+ const union value *sv = case_data (c, svar);
+ value_clone (prev_values + s, sv, var_get_width (svar));
+ }
+