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
++)