2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public
4 * License v2 as published by the Free Software Foundation.
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9 * General Public License for more details.
11 * You should have received a copy of the GNU General Public
12 * License along with this program; if not, write to the
13 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
14 * Boston, MA 021110-1307, USA.
22 #include "string-table.h"
25 * This function create an array of char * which will represent a table
27 struct string_table *table_create(int columns, int rows)
29 struct string_table *p;
32 size = sizeof( struct string_table ) +
33 rows * columns* sizeof(char *);
45 * This function is like a vprintf, but store the results in a cell of
47 * If fmt starts with '<', the text is left aligned; if fmt starts with
48 * '>' the text is right aligned. If fmt is equal to '=' the text will
49 * be replaced by a '=====' dimensioned on the basis of the column width
51 char *table_vprintf(struct string_table *tab, int column, int row,
52 char *fmt, va_list ap)
54 int idx = tab->ncols*row+column;
55 char *msg = calloc(100, sizeof(char));
61 free(tab->cells[idx]);
62 tab->cells[idx] = msg;
63 vsnprintf(msg, 99, fmt, ap);
70 * This function is like a printf, but store the results in a cell of
73 char *table_printf(struct string_table *tab, int column, int row,
80 ret = table_vprintf(tab, column, row, fmt, ap);
87 * This function dumps the table. Every "=" string will be replaced by
88 * a "=======" length as the column
90 void table_dump(struct string_table *tab)
92 int sizes[tab->ncols];
95 for (i = 0 ; i < tab->ncols ; i++) {
97 for (j = 0 ; j < tab->nrows ; j++) {
98 int idx = i + j*tab->ncols;
101 if (!tab->cells[idx])
104 s = strlen(tab->cells[idx]) - 1;
105 if (s < 1 || tab->cells[idx][0] == '=')
114 for (j = 0 ; j < tab->nrows ; j++) {
115 for (i = 0 ; i < tab->ncols ; i++) {
117 int idx = i + j*tab->ncols;
118 char *s = tab->cells[idx];
120 if (!s|| !strlen(s)) {
121 printf("%*s", sizes[i], "");
122 } else if (s && s[0] == '=') {
128 s[0] == '<' ? -sizes[i] : sizes[i],
131 if (i != (tab->ncols - 1))
140 * Deallocate a tabular and all its content
143 void table_free(struct string_table *tab)
148 count = tab->ncols * tab->nrows;
150 for (i=0 ; i < count ; i++)