xref: /freebsd-src/contrib/bsddialog/lib/bsddialog.h (revision 84823cc70824c8d842f503d8c2e6d7b0c2d95b61)
1c76f0793SBaptiste Daroussin /*-
2c76f0793SBaptiste Daroussin  * SPDX-License-Identifier: BSD-2-Clause
3c76f0793SBaptiste Daroussin  *
4263660c0SAlfonso Siciliano  * Copyright (c) 2021-2022 Alfonso Sabato Siciliano
5c76f0793SBaptiste Daroussin  *
6c76f0793SBaptiste Daroussin  * Redistribution and use in source and binary forms, with or without
7c76f0793SBaptiste Daroussin  * modification, are permitted provided that the following conditions
8c76f0793SBaptiste Daroussin  * are met:
9c76f0793SBaptiste Daroussin  * 1. Redistributions of source code must retain the above copyright
10c76f0793SBaptiste Daroussin  *    notice, this list of conditions and the following disclaimer.
11c76f0793SBaptiste Daroussin  * 2. Redistributions in binary form must reproduce the above copyright
12c76f0793SBaptiste Daroussin  *    notice, this list of conditions and the following disclaimer in the
13c76f0793SBaptiste Daroussin  *    documentation and/or other materials provided with the distribution.
14c76f0793SBaptiste Daroussin  *
15c76f0793SBaptiste Daroussin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16c76f0793SBaptiste Daroussin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17c76f0793SBaptiste Daroussin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18c76f0793SBaptiste Daroussin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19c76f0793SBaptiste Daroussin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20c76f0793SBaptiste Daroussin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21c76f0793SBaptiste Daroussin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22c76f0793SBaptiste Daroussin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23c76f0793SBaptiste Daroussin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24c76f0793SBaptiste Daroussin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25c76f0793SBaptiste Daroussin  * SUCH DAMAGE.
26c76f0793SBaptiste Daroussin  */
27c76f0793SBaptiste Daroussin 
28f499134dSBaptiste Daroussin #ifndef _LIBBSDDIALOG_H_
29f499134dSBaptiste Daroussin #define _LIBBSDDIALOG_H_
30c76f0793SBaptiste Daroussin 
31c76f0793SBaptiste Daroussin #include <stdbool.h>
32c76f0793SBaptiste Daroussin 
33*84823cc7SAlfonso S. Siciliano #define LIBBSDDIALOG_VERSION     "0.4"
34f499134dSBaptiste Daroussin 
35c76f0793SBaptiste Daroussin /* Exit status */
36c76f0793SBaptiste Daroussin #define BSDDIALOG_ERROR          -1
378c4f4028SBaptiste Daroussin #define BSDDIALOG_OK              0
388c4f4028SBaptiste Daroussin #define BSDDIALOG_YES             BSDDIALOG_OK
398c4f4028SBaptiste Daroussin #define BSDDIALOG_CANCEL          1
408c4f4028SBaptiste Daroussin #define BSDDIALOG_NO              BSDDIALOG_CANCEL
41c76f0793SBaptiste Daroussin #define BSDDIALOG_HELP            2
42c76f0793SBaptiste Daroussin #define BSDDIALOG_EXTRA           3
43d93b4d32SBaptiste Daroussin #define BSDDIALOG_TIMEOUT         4
44d93b4d32SBaptiste Daroussin #define BSDDIALOG_ESC             5
45d93b4d32SBaptiste Daroussin #define BSDDIALOG_GENERIC1        6
46d93b4d32SBaptiste Daroussin #define BSDDIALOG_GENERIC2        7
47c76f0793SBaptiste Daroussin 
48d93b4d32SBaptiste Daroussin /* Size and position */
49c76f0793SBaptiste Daroussin #define BSDDIALOG_FULLSCREEN     -1
50c76f0793SBaptiste Daroussin #define BSDDIALOG_AUTOSIZE        0
51c76f0793SBaptiste Daroussin #define BSDDIALOG_CENTER         -1
52c76f0793SBaptiste Daroussin 
53263660c0SAlfonso Siciliano /* Mixedgauge */
54263660c0SAlfonso Siciliano #define BSDDIALOG_MG_SUCCEEDED   -1
55263660c0SAlfonso Siciliano #define BSDDIALOG_MG_FAILED      -2
56263660c0SAlfonso Siciliano #define BSDDIALOG_MG_PASSED      -3
57263660c0SAlfonso Siciliano #define BSDDIALOG_MG_COMPLETED   -4
58263660c0SAlfonso Siciliano #define BSDDIALOG_MG_CHECKED     -5
59263660c0SAlfonso Siciliano #define BSDDIALOG_MG_DONE        -6
60263660c0SAlfonso Siciliano #define BSDDIALOG_MG_SKIPPED     -7
61263660c0SAlfonso Siciliano #define BSDDIALOG_MG_INPROGRESS  -8
62263660c0SAlfonso Siciliano #define BSDDIALOG_MG_BLANK       -9
63263660c0SAlfonso Siciliano #define BSDDIALOG_MG_NA          -10
64263660c0SAlfonso Siciliano #define BSDDIALOG_MG_PENDING     -11
65263660c0SAlfonso Siciliano 
66263660c0SAlfonso Siciliano /* Form */
67263660c0SAlfonso Siciliano #define BSDDIALOG_FIELDHIDDEN      1U
68263660c0SAlfonso Siciliano #define BSDDIALOG_FIELDREADONLY    2U
69b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDNOCOLOR     4U
70b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDCURSOREND   8U
71b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDEXTEND      16U
72b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDSINGLEBYTE  32U
73263660c0SAlfonso Siciliano 
74c76f0793SBaptiste Daroussin struct bsddialog_conf {
75c76f0793SBaptiste Daroussin 	bool ascii_lines;
768c4f4028SBaptiste Daroussin 	unsigned int auto_minheight;
778c4f4028SBaptiste Daroussin 	unsigned int auto_minwidth;
78b319d934SAlfonso S. Siciliano 	unsigned int auto_topmargin;
79b319d934SAlfonso S. Siciliano 	unsigned int auto_downmargin;
80263660c0SAlfonso Siciliano 	const char *bottomtitle;
81c76f0793SBaptiste Daroussin 	bool clear;
82c76f0793SBaptiste Daroussin 	int *get_height;
83c76f0793SBaptiste Daroussin 	int *get_width;
84c76f0793SBaptiste Daroussin 	bool no_lines;
85c76f0793SBaptiste Daroussin 	bool shadow;
868c4f4028SBaptiste Daroussin 	unsigned int sleep;
87263660c0SAlfonso Siciliano 	const char *title;
888c4f4028SBaptiste Daroussin 	int y;
898c4f4028SBaptiste Daroussin 	int x;
90c76f0793SBaptiste Daroussin 	struct {
91263660c0SAlfonso Siciliano 		bool enable_esc;
92bce40c02SAlfonso S. Siciliano 		const char *f1_file;
93bce40c02SAlfonso S. Siciliano 		const char *f1_message;
94263660c0SAlfonso Siciliano 	} key;
95263660c0SAlfonso Siciliano 	struct {
96b319d934SAlfonso S. Siciliano 		unsigned int cols_per_row;
97263660c0SAlfonso Siciliano 		bool highlight;
98263660c0SAlfonso Siciliano 		unsigned int tablen;
99c76f0793SBaptiste Daroussin 	} text;
100c76f0793SBaptiste Daroussin 	struct {
101c76f0793SBaptiste Daroussin 		bool align_left;
102f499134dSBaptiste Daroussin 		bool no_desc;
103f499134dSBaptiste Daroussin 		bool no_name;
104263660c0SAlfonso Siciliano 		bool on_without_ok;
1058c4f4028SBaptiste Daroussin 		bool shortcut_buttons;
106c76f0793SBaptiste Daroussin 	} menu;
107f499134dSBaptiste Daroussin 	struct {
108b319d934SAlfonso S. Siciliano 		char securech;
109b319d934SAlfonso S. Siciliano 		char *securembch;
110b319d934SAlfonso S. Siciliano 		bool value_wchar;
111263660c0SAlfonso Siciliano 		bool value_without_ok;
112f499134dSBaptiste Daroussin 	} form;
113c76f0793SBaptiste Daroussin 	struct {
114b319d934SAlfonso S. Siciliano 		bool always_active;
1158c4f4028SBaptiste Daroussin 		bool without_ok;
116263660c0SAlfonso Siciliano 		const char *ok_label;
1178c4f4028SBaptiste Daroussin 		bool with_extra;
118263660c0SAlfonso Siciliano 		const char *extra_label;
1198c4f4028SBaptiste Daroussin 		bool without_cancel;
120263660c0SAlfonso Siciliano 		const char *cancel_label;
1218c4f4028SBaptiste Daroussin 		bool default_cancel;
1228c4f4028SBaptiste Daroussin 		bool with_help;
123263660c0SAlfonso Siciliano 		const char *help_label;
124263660c0SAlfonso Siciliano 		const char *generic1_label;
125263660c0SAlfonso Siciliano 		const char *generic2_label;
126263660c0SAlfonso Siciliano 		const char *default_label;
127c76f0793SBaptiste Daroussin 	} button;
128c76f0793SBaptiste Daroussin };
129c76f0793SBaptiste Daroussin 
130c76f0793SBaptiste Daroussin struct bsddialog_menuitem {
131263660c0SAlfonso Siciliano 	const char *prefix;
132c76f0793SBaptiste Daroussin 	bool on;
1338c4f4028SBaptiste Daroussin 	unsigned int depth;
134263660c0SAlfonso Siciliano 	const char *name;
135263660c0SAlfonso Siciliano 	const char *desc;
136263660c0SAlfonso Siciliano 	const char *bottomdesc;
137c76f0793SBaptiste Daroussin };
138c76f0793SBaptiste Daroussin 
139*84823cc7SAlfonso S. Siciliano enum bsddialog_menutype {
140c76f0793SBaptiste Daroussin 	BSDDIALOG_CHECKLIST,
141c76f0793SBaptiste Daroussin 	BSDDIALOG_RADIOLIST,
142c76f0793SBaptiste Daroussin 	BSDDIALOG_SEPARATOR,
143c76f0793SBaptiste Daroussin };
144c76f0793SBaptiste Daroussin 
145c76f0793SBaptiste Daroussin struct bsddialog_menugroup {
146*84823cc7SAlfonso S. Siciliano 	enum bsddialog_menutype type;
147c76f0793SBaptiste Daroussin 	unsigned int nitems;
148c76f0793SBaptiste Daroussin 	struct bsddialog_menuitem *items;
149c76f0793SBaptiste Daroussin };
150c76f0793SBaptiste Daroussin 
151f499134dSBaptiste Daroussin struct bsddialog_formitem {
152263660c0SAlfonso Siciliano 	const char *label;
153f499134dSBaptiste Daroussin 	unsigned int ylabel;
154f499134dSBaptiste Daroussin 	unsigned int xlabel;
155f499134dSBaptiste Daroussin 
156263660c0SAlfonso Siciliano 	const char *init;
157f499134dSBaptiste Daroussin 	unsigned int yfield;
158f499134dSBaptiste Daroussin 	unsigned int xfield;
159f499134dSBaptiste Daroussin 	unsigned int fieldlen;
160f499134dSBaptiste Daroussin 	unsigned int maxvaluelen;
161d93b4d32SBaptiste Daroussin 	char *value;
162f499134dSBaptiste Daroussin 	unsigned int flags;
163f499134dSBaptiste Daroussin 
164263660c0SAlfonso Siciliano 	const char *bottomdesc;
165f499134dSBaptiste Daroussin };
166f499134dSBaptiste Daroussin 
167c76f0793SBaptiste Daroussin int bsddialog_init(void);
168b319d934SAlfonso S. Siciliano int bsddialog_init_notheme(void);
169c76f0793SBaptiste Daroussin int bsddialog_end(void);
170263660c0SAlfonso Siciliano int bsddialog_backtitle(struct bsddialog_conf *conf, const char *backtitle);
1718c4f4028SBaptiste Daroussin int bsddialog_initconf(struct bsddialog_conf *conf);
1728c4f4028SBaptiste Daroussin int bsddialog_clearterminal(void);
173c76f0793SBaptiste Daroussin const char *bsddialog_geterror(void);
174c76f0793SBaptiste Daroussin 
175d93b4d32SBaptiste Daroussin /* Dialogs */
176c76f0793SBaptiste Daroussin int
177*84823cc7SAlfonso S. Siciliano bsddialog_calendar(struct bsddialog_conf *conf, const char *text, int rows,
178*84823cc7SAlfonso S. Siciliano     int cols, unsigned int *yy, unsigned int *mm, unsigned int *dd);
179*84823cc7SAlfonso S. Siciliano 
180*84823cc7SAlfonso S. Siciliano int
181263660c0SAlfonso Siciliano bsddialog_checklist(struct bsddialog_conf *conf, const char *text, int rows,
182263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int nitems,
183263660c0SAlfonso Siciliano     struct bsddialog_menuitem *items, int *focusitem);
184c76f0793SBaptiste Daroussin 
185c76f0793SBaptiste Daroussin int
186263660c0SAlfonso Siciliano bsddialog_datebox(struct bsddialog_conf *conf, const char *text, int rows,
187263660c0SAlfonso Siciliano     int cols, unsigned int *yy, unsigned int *mm, unsigned int *dd);
188f499134dSBaptiste Daroussin 
189f499134dSBaptiste Daroussin int
190263660c0SAlfonso Siciliano bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
191263660c0SAlfonso Siciliano     int cols, unsigned int formheight, unsigned int nitems,
192f499134dSBaptiste Daroussin     struct bsddialog_formitem *items);
193f499134dSBaptiste Daroussin 
194f499134dSBaptiste Daroussin int
195263660c0SAlfonso Siciliano bsddialog_gauge(struct bsddialog_conf *conf, const char *text, int rows,
196263660c0SAlfonso Siciliano     int cols, unsigned int perc, int fd, const char *sep);
197f499134dSBaptiste Daroussin 
198f499134dSBaptiste Daroussin int
199263660c0SAlfonso Siciliano bsddialog_infobox(struct bsddialog_conf *conf, const char *text, int rows,
200263660c0SAlfonso Siciliano     int cols);
201f499134dSBaptiste Daroussin 
202f499134dSBaptiste Daroussin int
203263660c0SAlfonso Siciliano bsddialog_menu(struct bsddialog_conf *conf, const char *text, int rows,
204263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int nitems,
205263660c0SAlfonso Siciliano     struct bsddialog_menuitem *items, int *focusitem);
206c76f0793SBaptiste Daroussin 
207c76f0793SBaptiste Daroussin int
208263660c0SAlfonso Siciliano bsddialog_mixedgauge(struct bsddialog_conf *conf, const char *text, int rows,
209263660c0SAlfonso Siciliano     int cols, unsigned int mainperc, unsigned int nminibars,
210263660c0SAlfonso Siciliano     const char **minilabels, int *minipercs);
211c76f0793SBaptiste Daroussin 
212c76f0793SBaptiste Daroussin int
213263660c0SAlfonso Siciliano bsddialog_mixedlist(struct bsddialog_conf *conf, const char *text, int rows,
214263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int ngroups,
215263660c0SAlfonso Siciliano     struct bsddialog_menugroup *groups, int *focuslist, int *focusitem);
216c76f0793SBaptiste Daroussin 
217c76f0793SBaptiste Daroussin int
218263660c0SAlfonso Siciliano bsddialog_msgbox(struct bsddialog_conf *conf, const char *text, int rows,
219263660c0SAlfonso Siciliano     int cols);
220c76f0793SBaptiste Daroussin 
221c76f0793SBaptiste Daroussin int
222263660c0SAlfonso Siciliano bsddialog_pause(struct bsddialog_conf *conf, const char *text, int rows,
223263660c0SAlfonso Siciliano     int cols, unsigned int seconds);
224c76f0793SBaptiste Daroussin 
225c76f0793SBaptiste Daroussin int
226263660c0SAlfonso Siciliano bsddialog_radiolist(struct bsddialog_conf *conf, const char *text, int rows,
227263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int nitems,
228263660c0SAlfonso Siciliano     struct bsddialog_menuitem *items, int *focusitem);
229c76f0793SBaptiste Daroussin 
230c76f0793SBaptiste Daroussin int
231263660c0SAlfonso Siciliano bsddialog_rangebox(struct bsddialog_conf *conf, const char *text, int rows,
232263660c0SAlfonso Siciliano     int cols, int min, int max, int *value);
233c76f0793SBaptiste Daroussin 
234c76f0793SBaptiste Daroussin int
235263660c0SAlfonso Siciliano bsddialog_textbox(struct bsddialog_conf *conf, const char *file, int rows,
236263660c0SAlfonso Siciliano     int cols);
237c76f0793SBaptiste Daroussin 
238c76f0793SBaptiste Daroussin int
239263660c0SAlfonso Siciliano bsddialog_timebox(struct bsddialog_conf *conf, const char *text, int rows,
240263660c0SAlfonso Siciliano     int cols, unsigned int *hh, unsigned int *mm, unsigned int *ss);
241c76f0793SBaptiste Daroussin 
2428c4f4028SBaptiste Daroussin int
243263660c0SAlfonso Siciliano bsddialog_yesno(struct bsddialog_conf *conf, const char *text, int rows,
244263660c0SAlfonso Siciliano     int cols);
245c76f0793SBaptiste Daroussin 
246c76f0793SBaptiste Daroussin #endif
247