xref: /freebsd/contrib/bsddialog/lib/bsddialog.h (revision d4ca001544347e217e2ab023cca88b30637def98)
1c76f0793SBaptiste Daroussin /*-
2c76f0793SBaptiste Daroussin  * SPDX-License-Identifier: BSD-2-Clause
3c76f0793SBaptiste Daroussin  *
4a6d8be45SAlfonso S. Siciliano  * Copyright (c) 2021-2024 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*d4ca0015SKyle Evans #define LIBBSDDIALOG_VERSION     "1.0.4"
34f499134dSBaptiste Daroussin 
3561ba55bcSBaptiste Daroussin /* Return values */
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
4561ba55bcSBaptiste Daroussin #define BSDDIALOG_LEFT1           6
4661ba55bcSBaptiste Daroussin #define BSDDIALOG_LEFT2           7
4761ba55bcSBaptiste Daroussin #define BSDDIALOG_LEFT3           8
4861ba55bcSBaptiste Daroussin #define BSDDIALOG_RIGHT1          9
4961ba55bcSBaptiste Daroussin #define BSDDIALOG_RIGHT2          10
5061ba55bcSBaptiste Daroussin #define BSDDIALOG_RIGHT3          11
51c76f0793SBaptiste Daroussin 
52d93b4d32SBaptiste Daroussin /* Size and position */
53c76f0793SBaptiste Daroussin #define BSDDIALOG_FULLSCREEN     -1
54c76f0793SBaptiste Daroussin #define BSDDIALOG_AUTOSIZE        0
55c76f0793SBaptiste Daroussin #define BSDDIALOG_CENTER         -1
56c76f0793SBaptiste Daroussin 
57263660c0SAlfonso Siciliano /* Mixedgauge */
58263660c0SAlfonso Siciliano #define BSDDIALOG_MG_SUCCEEDED   -1
59263660c0SAlfonso Siciliano #define BSDDIALOG_MG_FAILED      -2
60263660c0SAlfonso Siciliano #define BSDDIALOG_MG_PASSED      -3
61263660c0SAlfonso Siciliano #define BSDDIALOG_MG_COMPLETED   -4
62263660c0SAlfonso Siciliano #define BSDDIALOG_MG_CHECKED     -5
63263660c0SAlfonso Siciliano #define BSDDIALOG_MG_DONE        -6
64263660c0SAlfonso Siciliano #define BSDDIALOG_MG_SKIPPED     -7
65263660c0SAlfonso Siciliano #define BSDDIALOG_MG_INPROGRESS  -8
66263660c0SAlfonso Siciliano #define BSDDIALOG_MG_BLANK       -9
67263660c0SAlfonso Siciliano #define BSDDIALOG_MG_NA          -10
68263660c0SAlfonso Siciliano #define BSDDIALOG_MG_PENDING     -11
69263660c0SAlfonso Siciliano 
70263660c0SAlfonso Siciliano /* Form */
71263660c0SAlfonso Siciliano #define BSDDIALOG_FIELDHIDDEN      1U
72263660c0SAlfonso Siciliano #define BSDDIALOG_FIELDREADONLY    2U
73b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDNOCOLOR     4U
74b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDCURSOREND   8U
75b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDEXTEND      16U
76b319d934SAlfonso S. Siciliano #define BSDDIALOG_FIELDSINGLEBYTE  32U
77263660c0SAlfonso Siciliano 
78c76f0793SBaptiste Daroussin struct bsddialog_conf {
79c76f0793SBaptiste Daroussin 	bool ascii_lines;
808c4f4028SBaptiste Daroussin 	unsigned int auto_minheight;
818c4f4028SBaptiste Daroussin 	unsigned int auto_minwidth;
82b319d934SAlfonso S. Siciliano 	unsigned int auto_topmargin;
83b319d934SAlfonso S. Siciliano 	unsigned int auto_downmargin;
84263660c0SAlfonso Siciliano 	const char *bottomtitle;
85c76f0793SBaptiste Daroussin 	bool clear;
86c76f0793SBaptiste Daroussin 	int *get_height;
87c76f0793SBaptiste Daroussin 	int *get_width;
88c76f0793SBaptiste Daroussin 	bool no_lines;
89c76f0793SBaptiste Daroussin 	bool shadow;
908c4f4028SBaptiste Daroussin 	unsigned int sleep;
91263660c0SAlfonso Siciliano 	const char *title;
928c4f4028SBaptiste Daroussin 	int y;
938c4f4028SBaptiste Daroussin 	int x;
94c76f0793SBaptiste Daroussin 	struct {
95263660c0SAlfonso Siciliano 		bool enable_esc;
96bce40c02SAlfonso S. Siciliano 		const char *f1_file;
97bce40c02SAlfonso S. Siciliano 		const char *f1_message;
98263660c0SAlfonso Siciliano 	} key;
99263660c0SAlfonso Siciliano 	struct {
100b319d934SAlfonso S. Siciliano 		unsigned int cols_per_row;
10161ba55bcSBaptiste Daroussin 		bool escape;
102263660c0SAlfonso Siciliano 		unsigned int tablen;
103c76f0793SBaptiste Daroussin 	} text;
104c76f0793SBaptiste Daroussin 	struct {
105c76f0793SBaptiste Daroussin 		bool align_left;
106f499134dSBaptiste Daroussin 		bool no_desc;
107f499134dSBaptiste Daroussin 		bool no_name;
1088c4f4028SBaptiste Daroussin 		bool shortcut_buttons;
109c76f0793SBaptiste Daroussin 	} menu;
110f499134dSBaptiste Daroussin 	struct {
111b319d934SAlfonso S. Siciliano 		char securech;
112b319d934SAlfonso S. Siciliano 		char *securembch;
113b319d934SAlfonso S. Siciliano 		bool value_wchar;
114f499134dSBaptiste Daroussin 	} form;
115c76f0793SBaptiste Daroussin 	struct {
11661ba55bcSBaptiste Daroussin 		const char *format;
11761ba55bcSBaptiste Daroussin 	} date;
11861ba55bcSBaptiste Daroussin 	struct {
119b319d934SAlfonso S. Siciliano 		bool always_active;
12061ba55bcSBaptiste Daroussin 		const char *left1_label;
12161ba55bcSBaptiste Daroussin 		const char *left2_label;
12261ba55bcSBaptiste Daroussin 		const char *left3_label;
1238c4f4028SBaptiste Daroussin 		bool without_ok;
124263660c0SAlfonso Siciliano 		const char *ok_label;
1258c4f4028SBaptiste Daroussin 		bool with_extra;
126263660c0SAlfonso Siciliano 		const char *extra_label;
1278c4f4028SBaptiste Daroussin 		bool without_cancel;
128263660c0SAlfonso Siciliano 		const char *cancel_label;
1298c4f4028SBaptiste Daroussin 		bool default_cancel;
1308c4f4028SBaptiste Daroussin 		bool with_help;
131263660c0SAlfonso Siciliano 		const char *help_label;
13261ba55bcSBaptiste Daroussin 		const char *right1_label;
13361ba55bcSBaptiste Daroussin 		const char *right2_label;
13461ba55bcSBaptiste Daroussin 		const char *right3_label;
135263660c0SAlfonso Siciliano 		const char *default_label;
136c76f0793SBaptiste Daroussin 	} button;
137c76f0793SBaptiste Daroussin };
138c76f0793SBaptiste Daroussin 
139c76f0793SBaptiste Daroussin struct bsddialog_menuitem {
140263660c0SAlfonso Siciliano 	const char *prefix;
141c76f0793SBaptiste Daroussin 	bool on;
1428c4f4028SBaptiste Daroussin 	unsigned int depth;
143263660c0SAlfonso Siciliano 	const char *name;
144263660c0SAlfonso Siciliano 	const char *desc;
145263660c0SAlfonso Siciliano 	const char *bottomdesc;
146c76f0793SBaptiste Daroussin };
147c76f0793SBaptiste Daroussin 
14884823cc7SAlfonso S. Siciliano enum bsddialog_menutype {
149c76f0793SBaptiste Daroussin 	BSDDIALOG_CHECKLIST,
150c76f0793SBaptiste Daroussin 	BSDDIALOG_RADIOLIST,
151c76f0793SBaptiste Daroussin 	BSDDIALOG_SEPARATOR,
152c76f0793SBaptiste Daroussin };
153c76f0793SBaptiste Daroussin 
154c76f0793SBaptiste Daroussin struct bsddialog_menugroup {
15584823cc7SAlfonso S. Siciliano 	enum bsddialog_menutype type;
156c76f0793SBaptiste Daroussin 	unsigned int nitems;
157c76f0793SBaptiste Daroussin 	struct bsddialog_menuitem *items;
15861ba55bcSBaptiste Daroussin 	unsigned int min_on; /* unused for now */
159c76f0793SBaptiste Daroussin };
160c76f0793SBaptiste Daroussin 
161f499134dSBaptiste Daroussin struct bsddialog_formitem {
162263660c0SAlfonso Siciliano 	const char *label;
163f499134dSBaptiste Daroussin 	unsigned int ylabel;
164f499134dSBaptiste Daroussin 	unsigned int xlabel;
165f499134dSBaptiste Daroussin 
166263660c0SAlfonso Siciliano 	const char *init;
167f499134dSBaptiste Daroussin 	unsigned int yfield;
168f499134dSBaptiste Daroussin 	unsigned int xfield;
169f499134dSBaptiste Daroussin 	unsigned int fieldlen;
170f499134dSBaptiste Daroussin 	unsigned int maxvaluelen;
171d93b4d32SBaptiste Daroussin 	char *value;
172f499134dSBaptiste Daroussin 	unsigned int flags;
173f499134dSBaptiste Daroussin 
174263660c0SAlfonso Siciliano 	const char *bottomdesc;
175f499134dSBaptiste Daroussin };
176f499134dSBaptiste Daroussin 
177c76f0793SBaptiste Daroussin int bsddialog_init(void);
178b319d934SAlfonso S. Siciliano int bsddialog_init_notheme(void);
17961ba55bcSBaptiste Daroussin bool bsddialog_inmode(void);
180c76f0793SBaptiste Daroussin int bsddialog_end(void);
181263660c0SAlfonso Siciliano int bsddialog_backtitle(struct bsddialog_conf *conf, const char *backtitle);
1828c4f4028SBaptiste Daroussin int bsddialog_initconf(struct bsddialog_conf *conf);
18361ba55bcSBaptiste Daroussin void bsddialog_clear(unsigned int y);
18461ba55bcSBaptiste Daroussin void bsddialog_refresh(void);
185c76f0793SBaptiste Daroussin const char *bsddialog_geterror(void);
186c76f0793SBaptiste Daroussin 
187d93b4d32SBaptiste Daroussin /* Dialogs */
188c76f0793SBaptiste Daroussin int
18984823cc7SAlfonso S. Siciliano bsddialog_calendar(struct bsddialog_conf *conf, const char *text, int rows,
19061ba55bcSBaptiste Daroussin     int cols, unsigned int *year, unsigned int *month, unsigned int *day);
19184823cc7SAlfonso S. Siciliano 
19284823cc7SAlfonso S. Siciliano int
193263660c0SAlfonso Siciliano bsddialog_checklist(struct bsddialog_conf *conf, const char *text, int rows,
194263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int nitems,
195263660c0SAlfonso Siciliano     struct bsddialog_menuitem *items, int *focusitem);
196c76f0793SBaptiste Daroussin 
197c76f0793SBaptiste Daroussin int
198263660c0SAlfonso Siciliano bsddialog_datebox(struct bsddialog_conf *conf, const char *text, int rows,
19961ba55bcSBaptiste Daroussin     int cols, unsigned int *year, unsigned int *month, unsigned int *day);
200f499134dSBaptiste Daroussin 
201f499134dSBaptiste Daroussin int
202263660c0SAlfonso Siciliano bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
203263660c0SAlfonso Siciliano     int cols, unsigned int formheight, unsigned int nitems,
20461ba55bcSBaptiste Daroussin     struct bsddialog_formitem *items, int *focusitem);
205f499134dSBaptiste Daroussin 
206f499134dSBaptiste Daroussin int
207263660c0SAlfonso Siciliano bsddialog_gauge(struct bsddialog_conf *conf, const char *text, int rows,
20861ba55bcSBaptiste Daroussin     int cols, unsigned int perc, int fd, const char *sep, const char *end);
209f499134dSBaptiste Daroussin 
210f499134dSBaptiste Daroussin int
211263660c0SAlfonso Siciliano bsddialog_infobox(struct bsddialog_conf *conf, const char *text, int rows,
212263660c0SAlfonso Siciliano     int cols);
213f499134dSBaptiste Daroussin 
214f499134dSBaptiste Daroussin int
215263660c0SAlfonso Siciliano bsddialog_menu(struct bsddialog_conf *conf, const char *text, int rows,
216263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int nitems,
217263660c0SAlfonso Siciliano     struct bsddialog_menuitem *items, int *focusitem);
218c76f0793SBaptiste Daroussin 
219c76f0793SBaptiste Daroussin int
220263660c0SAlfonso Siciliano bsddialog_mixedgauge(struct bsddialog_conf *conf, const char *text, int rows,
221263660c0SAlfonso Siciliano     int cols, unsigned int mainperc, unsigned int nminibars,
222263660c0SAlfonso Siciliano     const char **minilabels, int *minipercs);
223c76f0793SBaptiste Daroussin 
224c76f0793SBaptiste Daroussin int
225263660c0SAlfonso Siciliano bsddialog_mixedlist(struct bsddialog_conf *conf, const char *text, int rows,
226263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int ngroups,
227263660c0SAlfonso Siciliano     struct bsddialog_menugroup *groups, int *focuslist, int *focusitem);
228c76f0793SBaptiste Daroussin 
229c76f0793SBaptiste Daroussin int
230263660c0SAlfonso Siciliano bsddialog_msgbox(struct bsddialog_conf *conf, const char *text, int rows,
231263660c0SAlfonso Siciliano     int cols);
232c76f0793SBaptiste Daroussin 
233c76f0793SBaptiste Daroussin int
234263660c0SAlfonso Siciliano bsddialog_pause(struct bsddialog_conf *conf, const char *text, int rows,
23561ba55bcSBaptiste Daroussin     int cols, unsigned int *seconds);
236c76f0793SBaptiste Daroussin 
237c76f0793SBaptiste Daroussin int
238263660c0SAlfonso Siciliano bsddialog_radiolist(struct bsddialog_conf *conf, const char *text, int rows,
239263660c0SAlfonso Siciliano     int cols, unsigned int menurows, unsigned int nitems,
240263660c0SAlfonso Siciliano     struct bsddialog_menuitem *items, int *focusitem);
241c76f0793SBaptiste Daroussin 
242c76f0793SBaptiste Daroussin int
243263660c0SAlfonso Siciliano bsddialog_rangebox(struct bsddialog_conf *conf, const char *text, int rows,
244263660c0SAlfonso Siciliano     int cols, int min, int max, int *value);
245c76f0793SBaptiste Daroussin 
246c76f0793SBaptiste Daroussin int
247263660c0SAlfonso Siciliano bsddialog_textbox(struct bsddialog_conf *conf, const char *file, int rows,
248263660c0SAlfonso Siciliano     int cols);
249c76f0793SBaptiste Daroussin 
250c76f0793SBaptiste Daroussin int
251263660c0SAlfonso Siciliano bsddialog_timebox(struct bsddialog_conf *conf, const char *text, int rows,
252263660c0SAlfonso Siciliano     int cols, unsigned int *hh, unsigned int *mm, unsigned int *ss);
253c76f0793SBaptiste Daroussin 
2548c4f4028SBaptiste Daroussin int
255263660c0SAlfonso Siciliano bsddialog_yesno(struct bsddialog_conf *conf, const char *text, int rows,
256263660c0SAlfonso Siciliano     int cols);
257c76f0793SBaptiste Daroussin 
258c76f0793SBaptiste Daroussin #endif
259