+/* Writes the table of lengths for Very Long String Variables */
+static void
+write_vls_length_table (struct sfm_writer *w,
+ const struct dictionary *dict)
+{
+ int i;
+ struct
+ {
+ int32_t rec_type P;
+ int32_t subtype P;
+ int32_t elem_size P;
+ int32_t n_elem P;
+ }
+ vls_hdr;
+
+ struct string vls_length_map;
+
+ ds_init (&vls_length_map, 12 * dict_get_var_cnt (dict));
+
+ vls_hdr.rec_type = 7;
+ vls_hdr.subtype = 14;
+ vls_hdr.elem_size = 1;
+
+
+ for (i = 0; i < dict_get_var_cnt (dict); ++i)
+ {
+ const struct variable *v = dict_get_var (dict, i);
+
+ if ( v->width <= MAX_LONG_STRING )
+ continue;
+
+ ds_printf (&vls_length_map, "%s=%05d", v->short_name, v->width);
+ ds_putc (&vls_length_map, '\0');
+ ds_putc (&vls_length_map, '\t');
+ }
+
+ vls_hdr.n_elem = ds_length (&vls_length_map);
+
+ if ( vls_hdr.n_elem > 0 )
+ {
+ buf_write (w, &vls_hdr, sizeof vls_hdr);
+ buf_write (w, ds_data (&vls_length_map), ds_length (&vls_length_map));
+ }
+
+ ds_destroy (&vls_length_map);
+}
+