+/* Write multiple response sets. If PRE_V14 is true, writes sets supported by
+ SPSS before release 14, otherwise writes sets supported only by later
+ versions. */
+static void
+write_mrsets (struct sfm_writer *w, const struct dictionary *dict,
+ bool pre_v14)
+{
+ struct string s = DS_EMPTY_INITIALIZER;
+ size_t n_mrsets;
+ size_t i;
+
+ n_mrsets = dict_get_n_mrsets (dict);
+ if (n_mrsets == 0)
+ return;
+
+ for (i = 0; i < n_mrsets; i++)
+ {
+ const struct mrset *mrset = dict_get_mrset (dict, i);
+ const char *label;
+ size_t j;
+
+ if ((mrset->type != MRSET_MD || mrset->cat_source != MRSET_COUNTEDVALUES)
+ != pre_v14)
+ continue;
+
+ ds_put_format (&s, "%s=", mrset->name);
+ if (mrset->type == MRSET_MD)
+ {
+ char *counted;
+
+ if (mrset->cat_source == MRSET_COUNTEDVALUES)
+ ds_put_format (&s, "E %d ", mrset->label_from_var_label ? 11 : 1);
+ else
+ ds_put_byte (&s, 'D');
+
+ if (mrset->width == 0)
+ counted = xasprintf ("%.0f", mrset->counted.f);
+ else
+ counted = xmemdup0 (value_str (&mrset->counted, mrset->width),
+ mrset->width);
+ ds_put_format (&s, "%zu %s", strlen (counted), counted);
+ free (counted);
+ }
+ else
+ ds_put_byte (&s, 'C');
+ ds_put_byte (&s, ' ');
+
+ label = mrset->label && !mrset->label_from_var_label ? mrset->label : "";
+ ds_put_format (&s, "%zu %s", strlen (label), label);
+
+ for (j = 0; j < mrset->n_vars; j++)
+ ds_put_format (&s, " %s", var_get_short_name (mrset->vars[j], 0));
+ ds_put_byte (&s, '\n');
+ }
+ write_attribute_record (w, &s, pre_v14 ? 7 : 19);
+ ds_destroy (&s);
+}
+