xref: /freebsd/crypto/heimdal/lib/roken/rtbl.3 (revision 6a068746777241722b2b32c5d0bc443a2a64d80b)
1*ae771770SStanislav Sedov.\" Copyright (c) 2004 Kungliga Tekniska Högskolan
2c19800e8SDoug Rabson.\" (Royal Institute of Technology, Stockholm, Sweden).
3c19800e8SDoug Rabson.\" All rights reserved.
4c19800e8SDoug Rabson.\"
5c19800e8SDoug Rabson.\" Redistribution and use in source and binary forms, with or without
6c19800e8SDoug Rabson.\" modification, are permitted provided that the following conditions
7c19800e8SDoug Rabson.\" are met:
8c19800e8SDoug Rabson.\"
9c19800e8SDoug Rabson.\" 1. Redistributions of source code must retain the above copyright
10c19800e8SDoug Rabson.\"    notice, this list of conditions and the following disclaimer.
11c19800e8SDoug Rabson.\"
12c19800e8SDoug Rabson.\" 2. Redistributions in binary form must reproduce the above copyright
13c19800e8SDoug Rabson.\"    notice, this list of conditions and the following disclaimer in the
14c19800e8SDoug Rabson.\"    documentation and/or other materials provided with the distribution.
15c19800e8SDoug Rabson.\"
16c19800e8SDoug Rabson.\" 3. Neither the name of the Institute nor the names of its contributors
17c19800e8SDoug Rabson.\"    may be used to endorse or promote products derived from this software
18c19800e8SDoug Rabson.\"    without specific prior written permission.
19c19800e8SDoug Rabson.\"
20c19800e8SDoug Rabson.\" THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
21c19800e8SDoug Rabson.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22c19800e8SDoug Rabson.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23c19800e8SDoug Rabson.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
24c19800e8SDoug Rabson.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25c19800e8SDoug Rabson.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26c19800e8SDoug Rabson.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27c19800e8SDoug Rabson.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28c19800e8SDoug Rabson.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29c19800e8SDoug Rabson.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30c19800e8SDoug Rabson.\" SUCH DAMAGE.
31*ae771770SStanislav Sedov.\" $Id$
32c19800e8SDoug Rabson.\"
33c19800e8SDoug Rabson.Dd June 26, 2004
34c19800e8SDoug Rabson.Dt RTBL 3
35c19800e8SDoug Rabson.Os HEIMDAL
36c19800e8SDoug Rabson.Sh NAME
37c19800e8SDoug Rabson.Nm rtbl_create ,
38c19800e8SDoug Rabson.Nm rtbl_destroy ,
39c19800e8SDoug Rabson.Nm rtbl_set_flags ,
40c19800e8SDoug Rabson.Nm rtbl_get_flags ,
41c19800e8SDoug Rabson.Nm rtbl_set_prefix ,
42c19800e8SDoug Rabson.Nm rtbl_set_separator ,
43c19800e8SDoug Rabson.Nm rtbl_set_column_prefix ,
44c19800e8SDoug Rabson.Nm rtbl_set_column_affix_by_id ,
45c19800e8SDoug Rabson.Nm rtbl_add_column ,
46c19800e8SDoug Rabson.Nm rtbl_add_column_by_id ,
47c19800e8SDoug Rabson.Nm rtbl_add_column_entry ,
48c19800e8SDoug Rabson.Nm rtbl_add_column_entry_by_id ,
49c19800e8SDoug Rabson.Nm rtbl_new_row ,
50c19800e8SDoug Rabson.Nm rtbl_format
51c19800e8SDoug Rabson.Nd format data in simple tables
52c19800e8SDoug Rabson.Sh LIBRARY
53c19800e8SDoug RabsonThe roken library (libroken, -lroken)
54c19800e8SDoug Rabson.Sh SYNOPSIS
55c19800e8SDoug Rabson.In rtbl.h
56c19800e8SDoug Rabson.Ft int
57c19800e8SDoug Rabson.Fn rtbl_add_column "rtbl_t table" "const char *column_name" "unsigned int flags"
58c19800e8SDoug Rabson.Ft int
59c19800e8SDoug Rabson.Fn rtbl_add_column_by_id "rtbl_t table" "unsigned int column_id" "const char *column_header" "unsigned int flags"
60c19800e8SDoug Rabson.Ft int
61c19800e8SDoug Rabson.Fn rtbl_add_column_entry "rtbl_t table" "const char *column_name" "const char *cell_entry"
62c19800e8SDoug Rabson.Ft int
63c19800e8SDoug Rabson.Fn rtbl_add_column_entry_by_id "rtbl_t table" "unsigned int column_id" "const char *cell_entry"
64c19800e8SDoug Rabson.Ft rtbl_t
65c19800e8SDoug Rabson.Fn rtbl_create "void"
66c19800e8SDoug Rabson.Ft void
67c19800e8SDoug Rabson.Fn rtbl_destroy "rtbl_t table"
68c19800e8SDoug Rabson.Ft int
69c19800e8SDoug Rabson.Fn rtbl_new_row "rtbl_t table"
70c19800e8SDoug Rabson.Ft int
71c19800e8SDoug Rabson.Fn rtbl_set_column_affix_by_id "rtbl_t table" "unsigned int column_id "const char *prefix" "const char *suffix"
72c19800e8SDoug Rabson.Ft int
73c19800e8SDoug Rabson.Fn rtbl_set_column_prefix "rtbl_t table" "const char *column_name" "const char *prefix"
74c19800e8SDoug Rabson.Ft "unsigned int"
75c19800e8SDoug Rabson.Fn rtbl_get_flags "rtbl_t table"
76c19800e8SDoug Rabson.Ft void
77c19800e8SDoug Rabson.Fn rtbl_set_flags "rtbl_t table" "unsigned int flags"
78c19800e8SDoug Rabson.Ft int
79c19800e8SDoug Rabson.Fn rtbl_set_prefix "rtbl_t table" "const char *prefix"
80c19800e8SDoug Rabson.Ft int
81c19800e8SDoug Rabson.Fn rtbl_set_separator "rtbl_t table" "const char *separator"
82c19800e8SDoug Rabson.Ft int
83c19800e8SDoug Rabson.Fn rtbl_format "rtbl_t table "FILE *file"
84c19800e8SDoug Rabson.Sh DESCRIPTION
85c19800e8SDoug RabsonThis set of functions assemble a simple table consisting of rows and
86c19800e8SDoug Rabsoncolumns, allowing it to be printed with certain options. Typical use
87c19800e8SDoug Rabsonwould be output from tools such as
88c19800e8SDoug Rabson.Xr ls 1
89c19800e8SDoug Rabsonor
90c19800e8SDoug Rabson.Xr netstat 1 ,
91c19800e8SDoug Rabsonwhere you have a fixed number of columns, but don't know the column
92*ae771770SStanislav Sedovwidths before hand.
93c19800e8SDoug Rabson.Pp
94c19800e8SDoug RabsonA table is created with
95c19800e8SDoug Rabson.Fn rtbl_create
96c19800e8SDoug Rabsonand destroyed with
97c19800e8SDoug Rabson.Fn rtbl_destroy .
98c19800e8SDoug Rabson.Pp
99c19800e8SDoug RabsonGlobal flags on the table are set with
100c19800e8SDoug Rabson.Fa rtbl_set_flags
101c19800e8SDoug Rabsonand retrieved with
102c19800e8SDoug Rabson.Fa rtbl_get_flags .
103c19800e8SDoug RabsonAt present the only defined flag is
104c19800e8SDoug Rabson.Dv RTBL_HEADER_STYLE_NONE
105c19800e8SDoug Rabsonwhich suppresses printing the header.
106c19800e8SDoug Rabson.Pp
107c19800e8SDoug RabsonBefore adding data to the table, one or more columns need to be
108c19800e8SDoug Rabsoncreated. This would normally be done with
109c19800e8SDoug Rabson.Fn rtbl_add_column_by_id ,
110c19800e8SDoug Rabson.Fa column_id
111c19800e8SDoug Rabsonis any number of your choice (it's used only to identify columns),
112c19800e8SDoug Rabson.Fa column_header
113c19800e8SDoug Rabsonis the header to print at the top of the column, and
114c19800e8SDoug Rabson.Fa flags
115c19800e8SDoug Rabsonare flags specific to this column. Currently the only defined flag is
116c19800e8SDoug Rabson.Dv RTBL_ALIGN_RIGHT ,
117c19800e8SDoug Rabsonaligning column entries to the right. Columns are printed in the order
118c19800e8SDoug Rabsonthey are added.
119c19800e8SDoug Rabson.Pp
120c19800e8SDoug RabsonThere's also a way to add columns by column name with
121c19800e8SDoug Rabson.Fn rtbl_add_column ,
122c19800e8SDoug Rabsonbut this is less flexible (you need unique header names), and is
123c19800e8SDoug Rabsonconsidered deprecated.
124c19800e8SDoug Rabson.Pp
125c19800e8SDoug RabsonTo add data to a column you use
126c19800e8SDoug Rabson.Fn rtbl_add_column_entry_by_id ,
127c19800e8SDoug Rabsonwhere the
128c19800e8SDoug Rabson.Fa column_id
129c19800e8SDoug Rabsonis the same as when the column was added (adding data to a
130c19800e8SDoug Rabsonnon-existent column is undefined), and
131c19800e8SDoug Rabson.Fa cell_entry
132c19800e8SDoug Rabsonis whatever string you wish to include in that cell. It should not
133c19800e8SDoug Rabsoninclude newlines.
134c19800e8SDoug RabsonFor columns added with
135c19800e8SDoug Rabson.Fn rtbl_add_column
136c19800e8SDoug Rabsonyou must use
137c19800e8SDoug Rabson.Fn rtbl_add_column_entry
138c19800e8SDoug Rabsoninstead.
139c19800e8SDoug Rabson.Pp
140c19800e8SDoug Rabson.Fn rtbl_new_row
141c19800e8SDoug Rabsonfills all columns with blank entries until they all have the same
142c19800e8SDoug Rabsonnumber of rows.
143c19800e8SDoug Rabson.Pp
144c19800e8SDoug RabsonEach column can have a separate prefix and suffix, set with
145c19800e8SDoug Rabson.Fa rtbl_set_column_affix_by_id ;
146c19800e8SDoug Rabson.Fa rtbl_set_column_prefix
147c19800e8SDoug Rabsonallows setting the prefix only by column name. In addition to this,
148c19800e8SDoug Rabsoncolumns may be separated by a string set with
149c19800e8SDoug Rabson.Fa rtbl_set_separator ( Ns
150c19800e8SDoug Rabsonby default columns are not seprated by anything).
151c19800e8SDoug Rabson.Pp
152c19800e8SDoug RabsonThe finished table is printed to
153c19800e8SDoug Rabson.Fa file
154c19800e8SDoug Rabsonwith
155c19800e8SDoug Rabson.Fa rtbl_format .
156c19800e8SDoug Rabson.Sh EXAMPLES
157c19800e8SDoug RabsonThis program:
158c19800e8SDoug Rabson.Bd -literal -offset xxxx
159c19800e8SDoug Rabson#include <stdio.h>
160c19800e8SDoug Rabson#include <rtbl.h>
161c19800e8SDoug Rabsonint
162c19800e8SDoug Rabsonmain(int argc, char **argv)
163c19800e8SDoug Rabson{
164c19800e8SDoug Rabson    rtbl_t table;
165c19800e8SDoug Rabson    table = rtbl_create();
166c19800e8SDoug Rabson    rtbl_set_separator(table, "  ");
167c19800e8SDoug Rabson    rtbl_add_column_by_id(table, 0, "Column A", 0);
168c19800e8SDoug Rabson    rtbl_add_column_by_id(table, 1, "Column B", RTBL_ALIGN_RIGHT);
169c19800e8SDoug Rabson    rtbl_add_column_by_id(table, 2, "Column C", 0);
170c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 0, "A-1");
171c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 0, "A-2");
172c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 0, "A-3");
173c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 1, "B-1");
174c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 2, "C-1");
175c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 2, "C-2");
176c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 1, "B-2");
177c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 1, "B-3");
178c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 2, "C-3");
179c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 0, "A-4");
180c19800e8SDoug Rabson    rtbl_new_row(table);
181c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 1, "B-4");
182c19800e8SDoug Rabson    rtbl_new_row(table);
183c19800e8SDoug Rabson    rtbl_add_column_entry_by_id(table, 2, "C-4");
184c19800e8SDoug Rabson    rtbl_new_row(table);
185c19800e8SDoug Rabson    rtbl_format(table, stdout);
186c19800e8SDoug Rabson    rtbl_destroy(table);
187c19800e8SDoug Rabson    return 0;
188c19800e8SDoug Rabson}
189c19800e8SDoug Rabson.Ed
190c19800e8SDoug Rabson.Pp
191c19800e8SDoug Rabsonwill output the following:
192c19800e8SDoug Rabson.Bd -literal -offset xxxx
193c19800e8SDoug RabsonColumn A  Column B  Column C
194c19800e8SDoug RabsonA-1            B-1  C-1
195c19800e8SDoug RabsonA-2            B-2  C-2
196c19800e8SDoug RabsonA-3            B-3  C-3
197c19800e8SDoug RabsonA-4
198c19800e8SDoug Rabson               B-4
199c19800e8SDoug Rabson                    C-4
200c19800e8SDoug Rabson.Ed
201c19800e8SDoug Rabson.\" .Sh SEE ALSO
202