/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <config.h>
-#include <output/tab.h>
+#include "output/tab.h"
#include <ctype.h>
#include <stdarg.h>
#include <limits.h>
#include <stdlib.h>
-#include <data/data-out.h>
-#include <data/format.h>
-#include <data/settings.h>
-#include <data/value.h>
-#include <data/dictionary.h>
-#include <libpspp/assertion.h>
-#include <libpspp/compiler.h>
-#include <libpspp/misc.h>
-#include <libpspp/pool.h>
-#include <output/driver.h>
-#include <output/table-item.h>
-#include <output/table-provider.h>
-#include <output/text-item.h>
-
-#include "error.h"
-#include "minmax.h"
-#include "xalloc.h"
+#include "data/data-out.h"
+#include "data/format.h"
+#include "data/settings.h"
+#include "data/value.h"
+#include "data/variable.h"
+#include "libpspp/assertion.h"
+#include "libpspp/compiler.h"
+#include "libpspp/i18n.h"
+#include "libpspp/misc.h"
+#include "libpspp/pool.h"
+#include "output/driver.h"
+#include "output/table-item.h"
+#include "output/table-provider.h"
+#include "output/text-item.h"
+
+#include "gl/error.h"
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
void
tab_resize (struct tab_table *t, int nc, int nr)
{
- assert (t != NULL);
if (nc != -1)
{
assert (nc + t->col_ofs <= t->cf);
{
int ro, co;
- assert (t != NULL);
ro = t->row_ofs;
co = t->col_ofs;
if (ro || co)
void
tab_vline (struct tab_table *t, int style, int x, int y1, int y2)
{
- assert (t != NULL);
-
#if DEBUGGING
if (x + t->col_ofs < 0 || x + t->col_ofs > tab_nc (t)
|| y1 + t->row_ofs < 0 || y1 + t->row_ofs >= tab_nr (t)
void
tab_hline (struct tab_table * t, int style, int x1, int x2, int y)
{
- assert (t != NULL);
+#if DEBUGGING
+ if (y + t->row_ofs < 0 || y + t->row_ofs > tab_nr (t)
+ || x1 + t->col_ofs < 0 || x1 + t->col_ofs >= tab_nc (t)
+ || x2 + t->col_ofs < 0 || x2 + t->col_ofs >= tab_nc (t))
+ {
+ printf (_("bad hline: x=(%d+%d=%d,%d+%d=%d) y=%d+%d=%d in "
+ "table size (%d,%d)\n"),
+ x1, t->col_ofs, x1 + t->col_ofs,
+ x2, t->col_ofs, x2 + t->col_ofs,
+ y, t->row_ofs, y + t->row_ofs,
+ tab_nc (t), tab_nr (t));
+ return;
+ }
+#endif
x1 += t->col_ofs;
x2 += t->col_ofs;
tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v,
int x1, int y1, int x2, int y2)
{
- assert (t != NULL);
-
#if DEBUGGING
if (x1 + t->col_ofs < 0 || x1 + t->col_ofs >= tab_nc (t)
|| x2 + t->col_ofs < 0 || x2 + t->col_ofs >= tab_nc (t)
from V, displayed with format spec F. */
void
tab_value (struct tab_table *table, int c, int r, unsigned char opt,
- const union value *v, const struct dictionary *dict,
+ const union value *v, const struct variable *var,
const struct fmt_spec *f)
{
char *contents;
- assert (table != NULL && v != NULL && f != NULL);
#if DEBUGGING
if (c + table->col_ofs < 0 || r + table->row_ofs < 0
|| c + table->col_ofs >= tab_nc (table)
}
#endif
- contents = data_out_pool (v, dict_get_encoding (dict), f, table->container);
+ contents = data_out_pool (v, var_get_encoding (var),
+ f != NULL ? f : var_get_print_format (var),
+ table->container);
table->cc[c + r * table->cf] = contents;
table->ct[c + r * table->cf] = opt;
#endif
double_value.f = val;
- s = data_out_pool (&double_value, LEGACY_NATIVE, &f, table->container);
+ s = data_out_pool (&double_value, C_ENCODING, &f, table->container);
table->cc[c + r * table->cf] = s + strspn (s, " ");
table->ct[c + r * table->cf] = opt;
union value double_value ;
char *s;
- assert (table != NULL);
-
assert (c >= 0);
assert (c < tab_nc (table));
assert (r >= 0);
#endif
double_value.f = val;
- s = data_out_pool (&double_value, LEGACY_NATIVE, fmt, table->container);
+ s = data_out_pool (&double_value, C_ENCODING, fmt, table->container);
table->cc[c + r * table->cf] = s + strspn (s, " ");
table->ct[c + r * table->cf] = opt;
}
{
int diff = 0;
- assert (t != NULL);
#if DEBUGGING
if (row < -1 || row > tab_nr (t))
{
void
tab_next_row (struct tab_table *t)
{
- assert (t != NULL);
t->cc += t->cf;
t->ct += t->cf;
if (++t->row_ofs >= tab_nr (t))
tab_destroy (struct table *table)
{
struct tab_table *t = tab_cast (table);
+ free (t->title);
+ t->title = NULL;
pool_destroy (t->container);
}