Get rid of capacity argument to ds_init() and update all callers.
[pspp-builds.git] / src / language / data-io / list.q
index a79c51ada6f452e7f21baa45225377bb7ba96fec..84b1ac81baa8b2fb9bf9e5f9e4f5957b585c531d 100644 (file)
    02110-1301, USA. */
 
 #include <config.h>
-#include <libpspp/message.h>
+
 #include <stdio.h>
 #include <stdlib.h>
-#include <libpspp/alloc.h>
+
+#include "intprops.h"
+#include "size_max.h"
 #include <data/case.h>
-#include <language/command.h>
-#include <libpspp/compiler.h>
 #include <data/dictionary.h>
-#include "intprops.h"
+#include <data/format.h>
+#include <data/procedure.h>
+#include <data/variable.h>
+#include <language/command.h>
+#include <language/dictionary/split-file.h>
 #include <language/lexer/lexer.h>
-#include <libpspp/message.h>
+#include <libpspp/alloc.h>
+#include <libpspp/compiler.h>
 #include <libpspp/magic.h>
+#include <libpspp/message.h>
+#include <libpspp/message.h>
 #include <libpspp/misc.h>
 #include <output/htmlP.h>
-#include <output/output.h>
-#include "size_max.h"
 #include <output/manager.h>
+#include <output/output.h>
 #include <output/table.h>
-#include <data/variable.h>
-#include <procedure.h>
-#include <data/format.h>
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -80,11 +83,11 @@ static unsigned n_chars_width (struct outp_driver *d);
 static void write_line (struct outp_driver *d, const char *s);
 
 /* Other functions. */
-static bool list_cases (struct ccase *, void *);
+static bool list_cases (const struct ccase *, void *);
 static void determine_layout (void);
 static void clean_up (void);
 static void write_header (struct outp_driver *);
-static void write_all_headers (void *);
+static void write_all_headers (const struct ccase *, void *);
 
 /* Returns the number of text lines that can fit on the remainder of
    the page. */
@@ -237,10 +240,11 @@ cmd_list (void)
 /* Writes headers to all devices.  This is done at the beginning of
    each SPLIT FILE group. */
 static void
-write_all_headers (void *aux UNUSED)
+write_all_headers (const struct ccase *c, void *aux UNUSED)
 {
   struct outp_driver *d;
 
+  output_split_file_values (c);
   for (d = outp_drivers (NULL); d; d = outp_drivers (d))
     {
       if (!d->class->special)
@@ -434,6 +438,7 @@ write_fallback_headers (struct outp_driver *d)
   while (index < cmd.n_variables)
     {
       struct outp_text text;
+      int leader_width;
 
       /* Ensure that there is enough room for a line of text. */
       if (d->cp_y + d->font_height > d->length)
@@ -448,7 +453,8 @@ write_fallback_headers (struct outp_driver *d)
       text.y = d->cp_y;
       text.h = text.v = INT_MAX;
       d->class->text_draw (d, &text);
-      d->class->text_metrics (d, &text, &d->cp_x, NULL);
+      d->class->text_metrics (d, &text, &leader_width, NULL);
+      d->cp_x = leader_width;
 
       goto entry;
       do
@@ -469,9 +475,10 @@ write_fallback_headers (struct outp_driver *d)
          }
          
          {
-           char varname[10];
-           sprintf (varname, " %s", cmd.v_variables[index]->name);
-           write_varname (d, varname, text.h);
+           char varname[LONG_NAME_LEN + 2];
+           snprintf (varname, sizeof varname,
+                      " %s", cmd.v_variables[index]->name);
+           write_varname (d, varname, leader_width);
          }
        }
       while (++index < cmd.n_variables);
@@ -597,12 +604,12 @@ determine_layout (void)
       d->cp_y += d->font_height;
     }
 
-  ds_init(&line_buffer, largest_page_width + 2);
+  ds_init (&line_buffer);
 }
 
 /* Writes case C to output. */
 static bool
-list_cases (struct ccase *c, void *aux UNUSED)
+list_cases (const struct ccase *c, void *aux UNUSED)
 {
   struct outp_driver *d;