X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftable.c;h=9c931a5a3586fdfe3e267056f27e1b8a45e1e590;hb=27cc40906c7b388fc0bec644b324ef6a4dec6dc3;hp=3cf6a3ae03e698c218aba24fef3f31d6195c3986;hpb=ab249f50e9f994b9a92a74b148f596f47fee0de9;p=pspp-builds.git diff --git a/src/output/table.c b/src/output/table.c index 3cf6a3ae..9c931a5a 100644 --- a/src/output/table.c +++ b/src/output/table.c @@ -44,7 +44,6 @@ #define _(msgid) gettext (msgid) const struct som_table_class tab_table_class; -static char *command_name; /* Returns the font to use for a cell with the given OPTIONS. */ static enum outp_font @@ -62,6 +61,7 @@ tab_create (int nc, int nr, int reallocable UNUSED) struct tab_table *t; t = pool_create_container (struct tab_table, container); + t->ref_cnt = 1; t->col_style = TAB_COL_NONE; t->col_group = 0; t->title = NULL; @@ -86,17 +86,28 @@ tab_create (int nc, int nr, int reallocable UNUSED) return t; } -/* Destroys table T. */ +/* Increases T's reference count and, if this causes T's + reference count to reach 0, destroys T. */ void tab_destroy (struct tab_table *t) { - assert (t != NULL); + assert (t->ref_cnt > 0); + if (--t->ref_cnt > 0) + return; if (t->dim_free != NULL) t->dim_free (t->dim_aux); free (t->title); pool_destroy (t->container); } +/* Increases T's reference count. */ +void +tab_ref (struct tab_table *t) +{ + assert (t->ref_cnt > 0); + t->ref_cnt++; +} + /* Sets the width and height of a table, in columns and rows, respectively. Use only to reduce the size of a table, since it does not change the amount of allocated memory. */ @@ -1017,10 +1028,12 @@ tabi_render_init (struct som_entity *t_, struct outp_driver *driver, for (i = 0; i < t->nr; i++) if (r->h[i] < 0) - error (0, 0, "height of table row %d not initialized", i); + error (0, 0, "height of table row %d is %d (not initialized?)", + i, r->h[i]); for (i = 0; i < t->nc; i++) if (r->w[i] < 0) - error (0, 0, "width of table column %d not initialized", i); + error (0, 0, "width of table column %d is %d (not initialized?)", + i, r->w[i]); /* Add up header sizes. */ for (i = 0, r->wl = r->wrv[0]; i < r->l; i++) @@ -1144,7 +1157,8 @@ tabi_cumulate (void *r_, int cumtype, int start, int *end, Y. Y may be zero, or X and Y may be zero, but X should be nonzero if Y is nonzero. */ static void -tabi_title (void *r_, int x, int y) +tabi_title (void *r_, int x, int y, int table_num, int subtable_num, + const char *command_name) { const struct tab_rendering *r = r_; const struct tab_table *t = r->table; @@ -1472,12 +1486,3 @@ render_strip (const struct tab_rendering *r, return x; } - -/* Sets COMMAND_NAME as the name of the current command, - for embedding in output. */ -void -tab_set_command_name (const char *command_name_) -{ - free (command_name); - command_name = command_name_ ? xstrdup (command_name_) : NULL; -}