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