+ Each array element in cc[] is ordinarily a "struct pivot_value *".
+ If TAB_JOIN (defined in table.c) is set in ct[] for the element,
+ however, it is a joined cell and the corresponding element of cc[]
+ points to a struct table_cell. */
+ void **cc; /* Cell contents; void *[nr][nc]. */
+ unsigned short *ct; /* Cell types; unsigned short[nr][nc]. */
+ struct table_area_style *styles[8];
+
+ /* Rules. */
+ unsigned char *rh; /* Horiz rules; unsigned char[nr+1][nc]. */
+ unsigned char *rv; /* Vert rules; unsigned char[nr][nc+1]. */
+ struct cell_color *rule_colors[32];
+ };
+
+/* Reference counting. */
+struct table *table_ref (const struct table *);
+void table_unref (struct table *);
+bool table_is_shared (const struct table *);
+
+/* Rule masks. */
+#define TAB_RULE_TYPE_MASK 7
+#define TAB_RULE_TYPE_SHIFT 0
+#define TAB_RULE_STYLE_MASK (31 << TAB_RULE_STYLE_SHIFT)
+#define TAB_RULE_STYLE_SHIFT 3
+
+/* Tables. */
+struct table *table_create (int nc, int nr, int hl, int hr, int ht, int hb);
+
+/* Rules. */
+void table_hline (struct table *, int style, int x1, int x2, int y);
+void table_vline (struct table *, int style, int x, int y1, int y2);
+void table_box (struct table *, int f_h, int f_v, int i_h, int i_v,
+ int x1, int y1, int x2, int y2);
+
+/* Cells. */
+void table_put (struct table *, int x1, int y1, int x2, int y2,
+ unsigned opt, const struct pivot_value *);
+void table_put_owned (struct table *, int x1, int y1, int x2, int y2,
+ unsigned opt, struct pivot_value *);