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