#include "data/short-names.h"
#include "data/value-labels.h"
#include "data/variable.h"
+#include "data/varset.h"
#include "libpspp/float-format.h"
#include "libpspp/i18n.h"
#include "libpspp/integer-format.h"
static void write_long_string_missing_values (struct sfm_writer *,
const struct dictionary *);
+static void write_varsets (struct sfm_writer *, const struct dictionary *);
static void write_mrsets (struct sfm_writer *, const struct dictionary *,
bool pre_v14);
write_integer_info_record (w, d);
write_float_info_record (w);
+ write_varsets (w, d);
write_mrsets (w, d, true);
write_variable_display_parameters (w, d);
static void
write_format (struct sfm_writer *w, struct fmt_spec fmt, int width)
{
- assert (fmt_check_output (&fmt));
+ assert (fmt_check_output (fmt));
assert (sfm_width_to_segments (width) == 1);
if (width > 0)
write_int (w, 0);
/* Print and write formats. */
- write_format (w, *var_get_print_format (v), seg0_width);
- write_format (w, *var_get_write_format (v), seg0_width);
+ write_format (w, var_get_print_format (v), seg0_width);
+ write_format (w, var_get_write_format (v), seg0_width);
/* Short name.
The full name is in a translation table written
ds_destroy (&s);
}
+/* Write variable sets. */
+static void
+write_varsets (struct sfm_writer *w, const struct dictionary *dict)
+{
+ const char *encoding = dict_get_encoding (dict);
+
+ if (is_encoding_ebcdic_compatible (encoding))
+ {
+ /* FIXME. */
+ return;
+ }
+
+ size_t n_varsets = dict_get_n_varsets (dict);
+ if (n_varsets == 0)
+ return;
+
+ struct string s = DS_EMPTY_INITIALIZER;
+ for (size_t i = 0; i < n_varsets; i++)
+ {
+ const struct varset *varset = dict_get_varset (dict, i);
+
+ char *name = recode_string (encoding, "UTF-8", varset->name, -1);
+ ds_put_format (&s, "%s= ", name);
+ free (name);
+
+ for (size_t j = 0; j < varset->n_vars; j++)
+ {
+ if (j)
+ ds_put_byte (&s, ' ');
+
+ const char *name_utf8 = var_get_name (varset->vars[j]);
+ char *name = recode_string (encoding, "UTF-8", name_utf8, -1);
+ ds_put_cstr (&s, name);
+ free (name);
+ }
+ ds_put_byte (&s, '\n');
+ }
+
+ if (!ds_is_empty (&s))
+ write_string_record (w, ds_ss (&s), 5);
+ ds_destroy (&s);
+}
+
/* 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. */