X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Ftable.h;h=1748c24c855e71ec8c0212dac76d00662db76f67;hb=8f04b0ced35a66cfdebefbcb53c81979add36ca3;hp=678d6aa3a84b05e57364505c6ae0457485b653d4;hpb=a19b858e0ac3c69e4a28c0ca6d8674427268a863;p=pspp-builds.git diff --git a/src/output/table.h b/src/output/table.h index 678d6aa3..1748c24c 100644 --- a/src/output/table.h +++ b/src/output/table.h @@ -1,21 +1,18 @@ -/* PSPP - computes sample statistics. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. - Written by Ben Pfaff . +/* PSPP - a program for statistical analysis. + Copyright (C) 1997-9, 2000, 2009 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 the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. + 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 + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ + along with this program. If not, see . */ #if !tab_h #define tab_h 1 @@ -28,27 +25,28 @@ enum { TAB_NONE = 0, - /* Must match output.h: OUTP_T_JUST_*. */ TAB_ALIGN_MASK = 03, /* Alignment mask. */ TAB_RIGHT = 00, /* Right justify. */ TAB_LEFT = 01, /* Left justify. */ TAB_CENTER = 02, /* Center. */ - /* Oddball cell types. */ - TAB_JOIN = 010, /* Joined cell. */ - TAB_EMPTY = 020 /* Empty cell. */ + /* Cell types. */ + TAB_JOIN = 004, /* Joined cell. */ + TAB_EMPTY = 010, /* Empty cell. */ + + /* Flags. */ + TAB_EMPH = 020, /* Emphasize cell contents. */ + TAB_FIX = 040, /* Use fixed font. */ }; -/* Line styles. These must match output.h:OUTP_L_*. */ +/* Line styles. */ enum { TAL_0 = 0, /* No line. */ TAL_1 = 1, /* Single line. */ TAL_2 = 2, /* Double line. */ - TAL_3 = 3, /* Special line of driver-defined style. */ + TAL_GAP = 3, /* Spacing but no line. */ TAL_COUNT, /* Number of line styles. */ - - TAL_SPACING = 0200 /* Don't draw the line, just reserve space. */ }; /* Column styles. Must correspond to SOM_COL_*. */ @@ -64,33 +62,33 @@ struct tab_joined_cell int x1, y1; int x2, y2; int hit; - struct fixed_string contents; + struct substring contents; }; struct outp_driver; struct tab_table; -typedef void tab_dim_func (struct tab_table *, struct outp_driver *); +typedef void tab_dim_func (struct tab_table *, struct outp_driver *, + void *aux); /* A table. */ struct tab_table { struct pool *container; - + /* Contents. */ int col_style; /* Columns: One of TAB_COL_*. */ int col_group; /* Number of rows per column group. */ - struct fixed_string title; /* Table title. */ + char *title; /* Table title. */ unsigned flags; /* SOMF_*. */ int nc, nr; /* Number of columns, rows. */ int cf; /* Column factor for indexing purposes. */ int l, r, t, b; /* Number of header rows on each side. */ - struct fixed_string *cc; /* Cell contents; fixed_string *[nr][nc]. */ + struct substring *cc; /* Cell contents; substring *[nr][nc]. */ unsigned char *ct; /* Cell types; unsigned char[nr][nc]. */ unsigned char *rh; /* Horiz rules; unsigned char[nr+1][nc]. */ - unsigned char *trh; /* Types of horiz rules; [nr+1]. */ unsigned char *rv; /* Vert rules; unsigned char[nr][nc+1]. */ - unsigned char *trv; /* Types of vert rules; [nc+1]. */ tab_dim_func *dim; /* Calculates cell widths and heights. */ + void *dim_aux; /* Auxiliary data for dim function. */ /* Calculated during output. */ int *w; /* Column widths; [nc]. */ @@ -98,17 +96,11 @@ struct tab_table int *hrh; /* Heights of horizontal rules; [nr+1]. */ int *wrv; /* Widths of vertical rules; [nc+1]. */ int wl, wr, ht, hb; /* Width/height of header rows/columns. */ - int hr_tot, vr_tot; /* Hrules total height, vrules total width. */ /* Editing info. */ int col_ofs, row_ofs; /* X and Y offsets. */ -#if DEBUGGING - int reallocable; /* Can table be reallocated? */ -#endif }; -extern int tab_hit; - /* Number of rows in TABLE. */ #define tab_nr(TABLE) ((TABLE)->nr) @@ -134,7 +126,8 @@ void tab_resize (struct tab_table *, int nc, int nr); void tab_realloc (struct tab_table *, int nc, int nr); void tab_headers (struct tab_table *, int l, int r, int t, int b); void tab_columns (struct tab_table *, int style, int group); -void tab_title (struct tab_table *, int format, const char *, ...); +void tab_title (struct tab_table *, const char *, ...) + PRINTF_FORMAT (2, 3); void tab_flags (struct tab_table *, unsigned); void tab_submit (struct tab_table *); @@ -142,7 +135,7 @@ void tab_submit (struct tab_table *); tab_dim_func tab_natural_dimensions; int tab_natural_width (struct tab_table *t, struct outp_driver *d, int c); int tab_natural_height (struct tab_table *t, struct outp_driver *d, int r); -void tab_dim (struct tab_table *, tab_dim_func *); +void tab_dim (struct tab_table *, tab_dim_func *, void *aux); /* Rules. */ void tab_hline (struct tab_table *, int style, int x1, int x2, int y); @@ -154,30 +147,39 @@ void tab_box (struct tab_table *, int f_h, int f_v, int i_h, int i_v, enum { TAT_NONE = 0, /* No options. */ - TAT_PRINTF = 0x0100, /* Format the text string with sprintf. */ - TAT_TITLE = 0x0204, /* Title attributes. */ - TAT_FIX = 0x0400, /* Use fixed-pitch font. */ + TAT_TITLE = 0x0200 | TAB_EMPH, /* Title attributes. */ TAT_NOWRAP = 0x0800 /* No text wrap (tab_output_text() only). */ }; /* Cells. */ struct fmt_spec; +struct dictionary; union value; void tab_value (struct tab_table *, int c, int r, unsigned char opt, - const union value *, const struct fmt_spec *); -void tab_float (struct tab_table *, int c, int r, unsigned char opt, + const union value *, const struct dictionary *dict, + const struct fmt_spec *); + +void tab_fixed (struct tab_table *, int c, int r, unsigned char opt, double v, int w, int d); -void tab_text (struct tab_table *, int c, int r, unsigned opt, - const char *, ...) + +void tab_double (struct tab_table *, int c, int r, unsigned char opt, + double v, const struct fmt_spec *); + +void tab_text (struct tab_table *, int c, int r, unsigned opt, const char *); +void tab_text_format (struct tab_table *, int c, int r, unsigned opt, + const char *, ...) PRINTF_FORMAT (5, 6); + void tab_joint_text (struct tab_table *, int x1, int y1, int x2, int y2, - unsigned opt, const char *, ...) + unsigned opt, const char *); +void tab_joint_text_format (struct tab_table *, int x1, int y1, int x2, int y2, + unsigned opt, const char *, ...) PRINTF_FORMAT (7, 8); /* Cell low-level access. */ #define tab_alloc(TABLE, AMT) pool_alloc ((TABLE)->container, (AMT)) void tab_raw (struct tab_table *, int c, int r, unsigned opt, - struct fixed_string *); + struct substring *); /* Editing. */ void tab_offset (struct tab_table *, int col, int row); @@ -188,7 +190,8 @@ void tab_next_row (struct tab_table *); #define tab_col(TABLE) ((TABLE)->col_ofs) /* Simple output. */ -void tab_output_text (int options, const char *string, ...) +void tab_output_text (int options, const char *string); +void tab_output_text_format (int options, const char *, ...) PRINTF_FORMAT (2, 3); /* Embedding the command name in the output. */