X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftab.c;h=7ce860f14e09c1e357eb11bafce1d3dba1d766b9;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=058cb974c6557a6870c445a697991e51aed090cc;hpb=dfd1972f7bcb550a4fc3b05dbe7e71d12334b0a7;p=pspp-builds.git diff --git a/src/output/tab.c b/src/output/tab.c index 058cb974..7ce860f1 100644 --- a/src/output/tab.c +++ b/src/output/tab.c @@ -1,5 +1,5 @@ /* 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 @@ -16,30 +16,31 @@ #include -#include +#include "output/tab.h" #include #include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "error.h" -#include "minmax.h" -#include "xalloc.h" +#include "data/data-out.h" +#include "data/dictionary.h" +#include "data/format.h" +#include "data/settings.h" +#include "data/value.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) @@ -94,7 +95,6 @@ tab_create (int nc, int nr) void tab_resize (struct tab_table *t, int nc, int nr) { - assert (t != NULL); if (nc != -1) { assert (nc + t->col_ofs <= t->cf); @@ -118,7 +118,6 @@ tab_realloc (struct tab_table *t, int nc, int nr) { int ro, co; - assert (t != NULL); ro = t->row_ofs; co = t->col_ofs; if (ro || co) @@ -200,8 +199,6 @@ tab_headers (struct tab_table *table, int l, int r, int t, int b) 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) @@ -240,7 +237,20 @@ tab_vline (struct tab_table *t, int style, int x, int y1, int y2) 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; @@ -270,8 +280,6 @@ void 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) @@ -357,7 +365,6 @@ tab_value (struct tab_table *table, int c, int r, unsigned char opt, { 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) @@ -410,7 +417,7 @@ tab_fixed (struct tab_table *table, int c, int r, unsigned char 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; @@ -427,8 +434,6 @@ tab_double (struct tab_table *table, int c, int r, unsigned char opt, union value double_value ; char *s; - assert (table != NULL); - assert (c >= 0); assert (c < tab_nc (table)); assert (r >= 0); @@ -454,7 +459,7 @@ tab_double (struct tab_table *table, int c, int r, unsigned char opt, #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; } @@ -635,7 +640,6 @@ tab_offset (struct tab_table *t, int col, int row) { int diff = 0; - assert (t != NULL); #if DEBUGGING if (row < -1 || row > tab_nr (t)) { @@ -663,7 +667,6 @@ tab_offset (struct tab_table *t, int col, int row) 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)) @@ -707,6 +710,8 @@ static void tab_destroy (struct table *table) { struct tab_table *t = tab_cast (table); + free (t->title); + t->title = NULL; pool_destroy (t->container); }