Fix bug #6113.
authorBen Pfaff <blp@gnu.org>
Wed, 25 Jul 2007 04:31:34 +0000 (04:31 +0000)
committerBen Pfaff <blp@gnu.org>
Wed, 25 Jul 2007 04:31:34 +0000 (04:31 +0000)
* sys-file-writer.c (write_variable_display_parameters): Use new
var_default_display_width function to choose display width of
segments after the first one in a given variable.
* variable.c (var_create): Use var_default_display_width to pick
new variable's display width.
(var_default_display_width): New function.

src/data/ChangeLog
src/data/sys-file-writer.c
src/data/variable.c
src/data/variable.h

index cb0116e8239d3a0577c4f48bbdb01df3b85b5b96..61cf23b98cfb09578da45bedd1791e5e81b08acd 100644 (file)
@@ -1,3 +1,13 @@
+2007-07-24  Ben Pfaff  <blp@gnu.org>
+
+       Fix bug #6113.
+       * sys-file-writer.c (write_variable_display_parameters): Use new
+       var_default_display_width function to choose display width of
+       segments after the first one in a given variable.
+       * variable.c (var_create): Use var_default_display_width to pick
+       new variable's display width.
+       (var_default_display_width): New function.
+
 2007-07-24  Ben Pfaff  <blp@gnu.org>
 
        Fix bug #20427.
index 12b276a518cbecf4d19efd8f418ff35d14175e5a..6b4344a79d779a1bed28c0ea58c42f9f8dd6854d 100644 (file)
@@ -547,8 +547,7 @@ write_variable_display_parameters (struct sfm_writer *w,
           int width_left = width - sfm_segment_effective_offset (width, i);
           write_int (w, measure);
           write_int (w, (i == 0 ? var_get_display_width (v)
-                         : sfm_width_to_segments (width_left) > 1 ? 32
-                         : width_left));
+                         : var_default_display_width (width_left)));
           write_int (w, alignment);
         }
     }
index 59f452217c1178ea95ac79264f4749e6256f1f51..dcd91800022cd26a55ea10b719ee2cdb620a1898 100644 (file)
@@ -112,16 +112,15 @@ var_create (const char *name, int width)
     {
       v->print = fmt_for_output (FMT_F, 8, 2);
       v->alignment = ALIGN_RIGHT;
-      v->display_width = 8;
       v->measure = MEASURE_SCALE;
     }
   else
     {
       v->print = fmt_for_output (FMT_A, var_get_width (v), 0);
       v->alignment = ALIGN_LEFT;
-      v->display_width = 8;
       v->measure = MEASURE_NOMINAL;
     }
+  v->display_width = var_default_display_width (width);
   v->write = v->print;
   v->val_labs = NULL;
   v->label = NULL;
@@ -722,9 +721,6 @@ var_get_display_width (const struct variable *v)
   return v->display_width;
 }
 
-
-
-
 /* Sets V's display width to DISPLAY_WIDTH. */
 void
 var_set_display_width (struct variable *v, int display_width)
@@ -732,6 +728,15 @@ var_set_display_width (struct variable *v, int display_width)
   v->display_width = display_width;
   dict_var_changed (v);
 }
+
+/* Returns the default display width for a variable of the given
+   WIDTH, as set by var_create.  The return value can be used to
+   reset a variable's display width to the default. */
+int
+var_default_display_width (int width)
+{
+  return width == 0 ? 8 : MIN (width, 32);
+}
 \f
 /* Returns true if A is a valid alignment,
    false otherwise. */
index 31b046bcf98352aaed8a49fe16413d8b325fa2f4..44cfba703fe56a162f9bd6f418cb311df95c27d1 100644 (file)
@@ -123,6 +123,8 @@ void var_set_measure (struct variable *, enum measure);
 int var_get_display_width (const struct variable *);
 void var_set_display_width (struct variable *, int display_width);
 
+int var_default_display_width (int width);
+
 /* Alignment of data for display. */
 enum alignment
   {