xref: /freebsd/contrib/bsddialog/lib/bsddialog.h (revision 2e4311906d8c8dc7a7c726345268253bca6d4acc)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2021-2022 Alfonso Sabato Siciliano
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  */
27 
28 #ifndef _LIBBSDDIALOG_H_
29 #define _LIBBSDDIALOG_H_
30 
31 #include <stdbool.h>
32 
33 #define LIBBSDDIALOG_VERSION     "0.1"
34 
35 /* Exit status */
36 #define BSDDIALOG_ERROR          -1
37 #define BSDDIALOG_OK              0
38 #define BSDDIALOG_YES             BSDDIALOG_OK
39 #define BSDDIALOG_CANCEL          1
40 #define BSDDIALOG_NO              BSDDIALOG_CANCEL
41 #define BSDDIALOG_HELP            2
42 #define BSDDIALOG_EXTRA           3
43 #define BSDDIALOG_TIMEOUT         4
44 #define BSDDIALOG_ESC             5
45 #define BSDDIALOG_GENERIC1        6
46 #define BSDDIALOG_GENERIC2        7
47 
48 /* Size and position */
49 #define BSDDIALOG_FULLSCREEN     -1
50 #define BSDDIALOG_AUTOSIZE        0
51 #define BSDDIALOG_CENTER         -1
52 
53 /* Mixedgauge */
54 #define BSDDIALOG_MG_SUCCEEDED   -1
55 #define BSDDIALOG_MG_FAILED      -2
56 #define BSDDIALOG_MG_PASSED      -3
57 #define BSDDIALOG_MG_COMPLETED   -4
58 #define BSDDIALOG_MG_CHECKED     -5
59 #define BSDDIALOG_MG_DONE        -6
60 #define BSDDIALOG_MG_SKIPPED     -7
61 #define BSDDIALOG_MG_INPROGRESS  -8
62 #define BSDDIALOG_MG_BLANK       -9
63 #define BSDDIALOG_MG_NA          -10
64 #define BSDDIALOG_MG_PENDING     -11
65 
66 /* Form */
67 #define BSDDIALOG_FIELDHIDDEN    1U
68 #define BSDDIALOG_FIELDREADONLY  2U
69 
70 struct bsddialog_conf {
71 	bool ascii_lines;
72 	unsigned int auto_minheight;
73 	unsigned int auto_minwidth;
74 	const char *bottomtitle;
75 	bool clear;
76 	const char *f1_file;
77 	const char *f1_message;
78 	int *get_height;
79 	int *get_width;
80 	bool no_lines;
81 	bool shadow;
82 	unsigned int sleep;
83 	const char *title;
84 	int y;
85 	int x;
86 	struct {
87 		bool enable_esc;
88 	} key;
89 	struct {
90 		bool highlight;
91 		unsigned int tablen;
92 	} text;
93 	struct {
94 		bool align_left;
95 		bool no_desc;
96 		bool no_name;
97 		bool on_without_ok;
98 		bool shortcut_buttons;
99 	} menu;
100 	struct {
101 		int  securech;
102 		bool value_without_ok;
103 	} form;
104 	struct {
105 		bool without_ok;
106 		const char *ok_label;
107 		bool with_extra;
108 		const char *extra_label;
109 		bool without_cancel;
110 		const char *cancel_label;
111 		bool default_cancel;
112 		bool with_help;
113 		const char *help_label;
114 		const char *generic1_label;
115 		const char *generic2_label;
116 		const char *default_label;
117 	} button;
118 };
119 
120 struct bsddialog_menuitem {
121 	const char *prefix;
122 	bool on;
123 	unsigned int depth;
124 	const char *name;
125 	const char *desc;
126 	const char *bottomdesc;
127 };
128 
129 enum bsddialog_grouptype {
130 	BSDDIALOG_CHECKLIST,
131 	BSDDIALOG_RADIOLIST,
132 	BSDDIALOG_SEPARATOR,
133 };
134 
135 struct bsddialog_menugroup {
136 	enum bsddialog_grouptype type;
137 	unsigned int nitems;
138 	struct bsddialog_menuitem *items;
139 };
140 
141 struct bsddialog_formitem {
142 	const char *label;
143 	unsigned int ylabel;
144 	unsigned int xlabel;
145 
146 	const char *init;
147 	unsigned int yfield;
148 	unsigned int xfield;
149 	unsigned int fieldlen;
150 	unsigned int maxvaluelen;
151 	char *value;
152 	unsigned int flags;
153 
154 	const char *bottomdesc;
155 };
156 
157 int bsddialog_init(void);
158 int bsddialog_end(void);
159 int bsddialog_backtitle(struct bsddialog_conf *conf, const char *backtitle);
160 int bsddialog_initconf(struct bsddialog_conf *conf);
161 int bsddialog_clearterminal(void);
162 const char *bsddialog_geterror(void);
163 
164 /* Dialogs */
165 int
166 bsddialog_checklist(struct bsddialog_conf *conf, const char *text, int rows,
167     int cols, unsigned int menurows, unsigned int nitems,
168     struct bsddialog_menuitem *items, int *focusitem);
169 
170 int
171 bsddialog_datebox(struct bsddialog_conf *conf, const char *text, int rows,
172     int cols, unsigned int *yy, unsigned int *mm, unsigned int *dd);
173 
174 int
175 bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
176     int cols, unsigned int formheight, unsigned int nitems,
177     struct bsddialog_formitem *items);
178 
179 int
180 bsddialog_gauge(struct bsddialog_conf *conf, const char *text, int rows,
181     int cols, unsigned int perc, int fd, const char *sep);
182 
183 int
184 bsddialog_infobox(struct bsddialog_conf *conf, const char *text, int rows,
185     int cols);
186 
187 int
188 bsddialog_menu(struct bsddialog_conf *conf, const char *text, int rows,
189     int cols, unsigned int menurows, unsigned int nitems,
190     struct bsddialog_menuitem *items, int *focusitem);
191 
192 int
193 bsddialog_mixedgauge(struct bsddialog_conf *conf, const char *text, int rows,
194     int cols, unsigned int mainperc, unsigned int nminibars,
195     const char **minilabels, int *minipercs);
196 
197 int
198 bsddialog_mixedlist(struct bsddialog_conf *conf, const char *text, int rows,
199     int cols, unsigned int menurows, unsigned int ngroups,
200     struct bsddialog_menugroup *groups, int *focuslist, int *focusitem);
201 
202 int
203 bsddialog_msgbox(struct bsddialog_conf *conf, const char *text, int rows,
204     int cols);
205 
206 int
207 bsddialog_pause(struct bsddialog_conf *conf, const char *text, int rows,
208     int cols, unsigned int seconds);
209 
210 int
211 bsddialog_radiolist(struct bsddialog_conf *conf, const char *text, int rows,
212     int cols, unsigned int menurows, unsigned int nitems,
213     struct bsddialog_menuitem *items, int *focusitem);
214 
215 int
216 bsddialog_rangebox(struct bsddialog_conf *conf, const char *text, int rows,
217     int cols, int min, int max, int *value);
218 
219 int
220 bsddialog_textbox(struct bsddialog_conf *conf, const char *file, int rows,
221     int cols);
222 
223 int
224 bsddialog_timebox(struct bsddialog_conf *conf, const char *text, int rows,
225     int cols, unsigned int *hh, unsigned int *mm, unsigned int *ss);
226 
227 int
228 bsddialog_yesno(struct bsddialog_conf *conf, const char *text, int rows,
229     int cols);
230 
231 #endif
232