1*61ba55bcSBaptiste Daroussin /*- 2*61ba55bcSBaptiste Daroussin * SPDX-License-Identifier: BSD-2-Clause 3*61ba55bcSBaptiste Daroussin * 4*61ba55bcSBaptiste Daroussin * Copyright (c) 2021-2023 Alfonso Sabato Siciliano 5*61ba55bcSBaptiste Daroussin * 6*61ba55bcSBaptiste Daroussin * Redistribution and use in source and binary forms, with or without 7*61ba55bcSBaptiste Daroussin * modification, are permitted provided that the following conditions 8*61ba55bcSBaptiste Daroussin * are met: 9*61ba55bcSBaptiste Daroussin * 1. Redistributions of source code must retain the above copyright 10*61ba55bcSBaptiste Daroussin * notice, this list of conditions and the following disclaimer. 11*61ba55bcSBaptiste Daroussin * 2. Redistributions in binary form must reproduce the above copyright 12*61ba55bcSBaptiste Daroussin * notice, this list of conditions and the following disclaimer in the 13*61ba55bcSBaptiste Daroussin * documentation and/or other materials provided with the distribution. 14*61ba55bcSBaptiste Daroussin * 15*61ba55bcSBaptiste Daroussin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*61ba55bcSBaptiste Daroussin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*61ba55bcSBaptiste Daroussin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*61ba55bcSBaptiste Daroussin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*61ba55bcSBaptiste Daroussin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*61ba55bcSBaptiste Daroussin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*61ba55bcSBaptiste Daroussin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*61ba55bcSBaptiste Daroussin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*61ba55bcSBaptiste Daroussin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*61ba55bcSBaptiste Daroussin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*61ba55bcSBaptiste Daroussin * SUCH DAMAGE. 26*61ba55bcSBaptiste Daroussin */ 27*61ba55bcSBaptiste Daroussin 28*61ba55bcSBaptiste Daroussin #include <sys/ioctl.h> 29*61ba55bcSBaptiste Daroussin 30*61ba55bcSBaptiste Daroussin #include <getopt.h> 31*61ba55bcSBaptiste Daroussin #include <stdio.h> 32*61ba55bcSBaptiste Daroussin #include <stdlib.h> 33*61ba55bcSBaptiste Daroussin #include <string.h> 34*61ba55bcSBaptiste Daroussin #include <unistd.h> 35*61ba55bcSBaptiste Daroussin 36*61ba55bcSBaptiste Daroussin #include <bsddialog.h> 37*61ba55bcSBaptiste Daroussin #include <bsddialog_theme.h> 38*61ba55bcSBaptiste Daroussin 39*61ba55bcSBaptiste Daroussin #include "util.h" 40*61ba55bcSBaptiste Daroussin 41*61ba55bcSBaptiste Daroussin enum OPTS { 42*61ba55bcSBaptiste Daroussin /* Options */ 43*61ba55bcSBaptiste Daroussin ALTERNATE_SCREEN = '?' + 1, 44*61ba55bcSBaptiste Daroussin AND_DIALOG, 45*61ba55bcSBaptiste Daroussin ASCII_LINES, 46*61ba55bcSBaptiste Daroussin BACKTITLE, 47*61ba55bcSBaptiste Daroussin BEGIN_X, 48*61ba55bcSBaptiste Daroussin BEGIN_Y, 49*61ba55bcSBaptiste Daroussin BIKESHED, 50*61ba55bcSBaptiste Daroussin CANCEL_EXIT_CODE, 51*61ba55bcSBaptiste Daroussin CANCEL_LABEL, 52*61ba55bcSBaptiste Daroussin CLEAR_DIALOG, 53*61ba55bcSBaptiste Daroussin CLEAR_SCREEN, 54*61ba55bcSBaptiste Daroussin COLUMNS_PER_ROW, 55*61ba55bcSBaptiste Daroussin CR_WRAP, 56*61ba55bcSBaptiste Daroussin DATEBOX_FORMAT, 57*61ba55bcSBaptiste Daroussin DATE_FORMAT, 58*61ba55bcSBaptiste Daroussin DEFAULT_BUTTON, 59*61ba55bcSBaptiste Daroussin DEFAULT_ITEM, 60*61ba55bcSBaptiste Daroussin DEFAULT_NO, 61*61ba55bcSBaptiste Daroussin DISABLE_ESC, 62*61ba55bcSBaptiste Daroussin ERROR_EXIT_CODE, 63*61ba55bcSBaptiste Daroussin ESC_EXIT_CODE, 64*61ba55bcSBaptiste Daroussin EXIT_LABEL, 65*61ba55bcSBaptiste Daroussin EXTRA_BUTTON, 66*61ba55bcSBaptiste Daroussin EXTRA_EXIT_CODE, 67*61ba55bcSBaptiste Daroussin EXTRA_LABEL, 68*61ba55bcSBaptiste Daroussin HELP_BUTTON, 69*61ba55bcSBaptiste Daroussin HELP_EXIT_CODE, 70*61ba55bcSBaptiste Daroussin HELP_LABEL, 71*61ba55bcSBaptiste Daroussin HELP_PRINT_ITEMS, 72*61ba55bcSBaptiste Daroussin HELP_PRINT_NAME, 73*61ba55bcSBaptiste Daroussin HFILE, 74*61ba55bcSBaptiste Daroussin HLINE, 75*61ba55bcSBaptiste Daroussin HMSG, 76*61ba55bcSBaptiste Daroussin IGNORE, 77*61ba55bcSBaptiste Daroussin INSECURE, 78*61ba55bcSBaptiste Daroussin ITEM_BOTTOM_DESC, 79*61ba55bcSBaptiste Daroussin ITEM_DEPTH, 80*61ba55bcSBaptiste Daroussin ITEM_PREFIX, 81*61ba55bcSBaptiste Daroussin LEFT1_BUTTON, 82*61ba55bcSBaptiste Daroussin LEFT1_EXIT_CODE, 83*61ba55bcSBaptiste Daroussin LEFT2_BUTTON, 84*61ba55bcSBaptiste Daroussin LEFT2_EXIT_CODE, 85*61ba55bcSBaptiste Daroussin LEFT3_BUTTON, 86*61ba55bcSBaptiste Daroussin LEFT3_EXIT_CODE, 87*61ba55bcSBaptiste Daroussin LOAD_THEME, 88*61ba55bcSBaptiste Daroussin MAX_INPUT, 89*61ba55bcSBaptiste Daroussin NO_CANCEL, 90*61ba55bcSBaptiste Daroussin NO_DESCRIPTIONS, 91*61ba55bcSBaptiste Daroussin NO_LINES, 92*61ba55bcSBaptiste Daroussin NO_NAMES, 93*61ba55bcSBaptiste Daroussin NO_OK, 94*61ba55bcSBaptiste Daroussin NO_SHADOW, 95*61ba55bcSBaptiste Daroussin NORMAL_SCREEN, 96*61ba55bcSBaptiste Daroussin OK_EXIT_CODE, 97*61ba55bcSBaptiste Daroussin OK_LABEL, 98*61ba55bcSBaptiste Daroussin OUTPUT_FD, 99*61ba55bcSBaptiste Daroussin OUTPUT_SEPARATOR, 100*61ba55bcSBaptiste Daroussin PRINT_MAXSIZE, 101*61ba55bcSBaptiste Daroussin PRINT_SIZE, 102*61ba55bcSBaptiste Daroussin PRINT_VERSION, 103*61ba55bcSBaptiste Daroussin QUOTED, 104*61ba55bcSBaptiste Daroussin RIGHT1_BUTTON, 105*61ba55bcSBaptiste Daroussin RIGHT1_EXIT_CODE, 106*61ba55bcSBaptiste Daroussin RIGHT2_BUTTON, 107*61ba55bcSBaptiste Daroussin RIGHT2_EXIT_CODE, 108*61ba55bcSBaptiste Daroussin RIGHT3_BUTTON, 109*61ba55bcSBaptiste Daroussin RIGHT3_EXIT_CODE, 110*61ba55bcSBaptiste Daroussin SAVE_THEME, 111*61ba55bcSBaptiste Daroussin SEPARATE_OUTPUT, 112*61ba55bcSBaptiste Daroussin SHADOW, 113*61ba55bcSBaptiste Daroussin SINGLE_QUOTED, 114*61ba55bcSBaptiste Daroussin SLEEP, 115*61ba55bcSBaptiste Daroussin STDERR, 116*61ba55bcSBaptiste Daroussin STDOUT, 117*61ba55bcSBaptiste Daroussin SWITCH_BUTTONS, 118*61ba55bcSBaptiste Daroussin TAB_ESCAPE, 119*61ba55bcSBaptiste Daroussin TAB_LEN, 120*61ba55bcSBaptiste Daroussin TEXT_ESCAPE, 121*61ba55bcSBaptiste Daroussin TEXT_UNCHANGED, 122*61ba55bcSBaptiste Daroussin THEME, 123*61ba55bcSBaptiste Daroussin TIMEOUT_EXIT_CODE, 124*61ba55bcSBaptiste Daroussin TIME_FORMAT, 125*61ba55bcSBaptiste Daroussin TITLE, 126*61ba55bcSBaptiste Daroussin /* Dialogs */ 127*61ba55bcSBaptiste Daroussin CALENDAR, 128*61ba55bcSBaptiste Daroussin CHECKLIST, 129*61ba55bcSBaptiste Daroussin DATEBOX, 130*61ba55bcSBaptiste Daroussin FORM, 131*61ba55bcSBaptiste Daroussin GAUGE, 132*61ba55bcSBaptiste Daroussin INFOBOX, 133*61ba55bcSBaptiste Daroussin INPUTBOX, 134*61ba55bcSBaptiste Daroussin MENU, 135*61ba55bcSBaptiste Daroussin MIXEDFORM, 136*61ba55bcSBaptiste Daroussin MIXEDGAUGE, 137*61ba55bcSBaptiste Daroussin MSGBOX, 138*61ba55bcSBaptiste Daroussin PASSWORDBOX, 139*61ba55bcSBaptiste Daroussin PASSWORDFORM, 140*61ba55bcSBaptiste Daroussin PAUSE, 141*61ba55bcSBaptiste Daroussin RADIOLIST, 142*61ba55bcSBaptiste Daroussin RANGEBOX, 143*61ba55bcSBaptiste Daroussin TEXTBOX, 144*61ba55bcSBaptiste Daroussin TIMEBOX, 145*61ba55bcSBaptiste Daroussin TREEVIEW, 146*61ba55bcSBaptiste Daroussin YESNO 147*61ba55bcSBaptiste Daroussin }; 148*61ba55bcSBaptiste Daroussin 149*61ba55bcSBaptiste Daroussin /* options descriptor */ 150*61ba55bcSBaptiste Daroussin static struct option longopts[] = { 151*61ba55bcSBaptiste Daroussin /* Options */ 152*61ba55bcSBaptiste Daroussin {"alternate-screen", no_argument, NULL, ALTERNATE_SCREEN}, 153*61ba55bcSBaptiste Daroussin {"and-dialog", no_argument, NULL, AND_DIALOG}, 154*61ba55bcSBaptiste Daroussin {"and-widget", no_argument, NULL, AND_DIALOG}, 155*61ba55bcSBaptiste Daroussin {"ascii-lines", no_argument, NULL, ASCII_LINES}, 156*61ba55bcSBaptiste Daroussin {"backtitle", required_argument, NULL, BACKTITLE}, 157*61ba55bcSBaptiste Daroussin {"begin-x", required_argument, NULL, BEGIN_X}, 158*61ba55bcSBaptiste Daroussin {"begin-y", required_argument, NULL, BEGIN_Y}, 159*61ba55bcSBaptiste Daroussin {"bikeshed", no_argument, NULL, BIKESHED}, 160*61ba55bcSBaptiste Daroussin {"cancel-exit-code", required_argument, NULL, CANCEL_EXIT_CODE}, 161*61ba55bcSBaptiste Daroussin {"cancel-label", required_argument, NULL, CANCEL_LABEL}, 162*61ba55bcSBaptiste Daroussin {"clear", no_argument, NULL, CLEAR_SCREEN}, 163*61ba55bcSBaptiste Daroussin {"clear-dialog", no_argument, NULL, CLEAR_DIALOG}, 164*61ba55bcSBaptiste Daroussin {"clear-screen", no_argument, NULL, CLEAR_SCREEN}, 165*61ba55bcSBaptiste Daroussin {"colors", no_argument, NULL, TEXT_ESCAPE}, 166*61ba55bcSBaptiste Daroussin {"columns-per-row", required_argument, NULL, COLUMNS_PER_ROW}, 167*61ba55bcSBaptiste Daroussin {"cr-wrap", no_argument, NULL, CR_WRAP}, 168*61ba55bcSBaptiste Daroussin {"datebox-format", required_argument, NULL, DATEBOX_FORMAT}, 169*61ba55bcSBaptiste Daroussin {"date-format", required_argument, NULL, DATE_FORMAT}, 170*61ba55bcSBaptiste Daroussin {"defaultno", no_argument, NULL, DEFAULT_NO}, 171*61ba55bcSBaptiste Daroussin {"default-button", required_argument, NULL, DEFAULT_BUTTON}, 172*61ba55bcSBaptiste Daroussin {"default-item", required_argument, NULL, DEFAULT_ITEM}, 173*61ba55bcSBaptiste Daroussin {"default-no", no_argument, NULL, DEFAULT_NO}, 174*61ba55bcSBaptiste Daroussin {"disable-esc", no_argument, NULL, DISABLE_ESC}, 175*61ba55bcSBaptiste Daroussin {"error-exit-code", required_argument, NULL, ERROR_EXIT_CODE}, 176*61ba55bcSBaptiste Daroussin {"esc-exit-code", required_argument, NULL, ESC_EXIT_CODE}, 177*61ba55bcSBaptiste Daroussin {"exit-label", required_argument, NULL, EXIT_LABEL}, 178*61ba55bcSBaptiste Daroussin {"extra-button", no_argument, NULL, EXTRA_BUTTON}, 179*61ba55bcSBaptiste Daroussin {"extra-exit-code", required_argument, NULL, EXTRA_EXIT_CODE}, 180*61ba55bcSBaptiste Daroussin {"extra-label", required_argument, NULL, EXTRA_LABEL}, 181*61ba55bcSBaptiste Daroussin {"help-button", no_argument, NULL, HELP_BUTTON}, 182*61ba55bcSBaptiste Daroussin {"help-exit-code", required_argument, NULL, HELP_EXIT_CODE}, 183*61ba55bcSBaptiste Daroussin {"help-label", required_argument, NULL, HELP_LABEL}, 184*61ba55bcSBaptiste Daroussin {"help-print-items", no_argument, NULL, HELP_PRINT_ITEMS}, 185*61ba55bcSBaptiste Daroussin {"help-print-name", no_argument, NULL, HELP_PRINT_NAME}, 186*61ba55bcSBaptiste Daroussin {"help-status", no_argument, NULL, HELP_PRINT_ITEMS}, 187*61ba55bcSBaptiste Daroussin {"help-tags", no_argument, NULL, HELP_PRINT_NAME}, 188*61ba55bcSBaptiste Daroussin {"hfile", required_argument, NULL, HFILE}, 189*61ba55bcSBaptiste Daroussin {"hline", required_argument, NULL, HLINE}, 190*61ba55bcSBaptiste Daroussin {"hmsg", required_argument, NULL, HMSG}, 191*61ba55bcSBaptiste Daroussin {"ignore", no_argument, NULL, IGNORE}, 192*61ba55bcSBaptiste Daroussin {"insecure", no_argument, NULL, INSECURE}, 193*61ba55bcSBaptiste Daroussin {"item-bottom-desc", no_argument, NULL, ITEM_BOTTOM_DESC}, 194*61ba55bcSBaptiste Daroussin {"item-depth", no_argument, NULL, ITEM_DEPTH}, 195*61ba55bcSBaptiste Daroussin {"item-help", no_argument, NULL, ITEM_BOTTOM_DESC}, 196*61ba55bcSBaptiste Daroussin {"item-prefix", no_argument, NULL, ITEM_PREFIX}, 197*61ba55bcSBaptiste Daroussin {"keep-tite", no_argument, NULL, ALTERNATE_SCREEN}, 198*61ba55bcSBaptiste Daroussin {"left1-button", required_argument, NULL, LEFT1_BUTTON}, 199*61ba55bcSBaptiste Daroussin {"left1-exit-code", required_argument, NULL, LEFT1_EXIT_CODE}, 200*61ba55bcSBaptiste Daroussin {"left2-button", required_argument, NULL, LEFT2_BUTTON}, 201*61ba55bcSBaptiste Daroussin {"left2-exit-code", required_argument, NULL, LEFT2_EXIT_CODE}, 202*61ba55bcSBaptiste Daroussin {"left3-button", required_argument, NULL, LEFT3_BUTTON}, 203*61ba55bcSBaptiste Daroussin {"left3-exit-code", required_argument, NULL, LEFT3_EXIT_CODE}, 204*61ba55bcSBaptiste Daroussin {"load-theme", required_argument, NULL, LOAD_THEME}, 205*61ba55bcSBaptiste Daroussin {"max-input", required_argument, NULL, MAX_INPUT}, 206*61ba55bcSBaptiste Daroussin {"no-cancel", no_argument, NULL, NO_CANCEL}, 207*61ba55bcSBaptiste Daroussin {"nocancel", no_argument, NULL, NO_CANCEL}, 208*61ba55bcSBaptiste Daroussin {"no-descriptions", no_argument, NULL, NO_DESCRIPTIONS}, 209*61ba55bcSBaptiste Daroussin {"no-items", no_argument, NULL, NO_DESCRIPTIONS}, 210*61ba55bcSBaptiste Daroussin {"no-label", required_argument, NULL, CANCEL_LABEL}, 211*61ba55bcSBaptiste Daroussin {"no-lines", no_argument, NULL, NO_LINES}, 212*61ba55bcSBaptiste Daroussin {"no-names", no_argument, NULL, NO_NAMES}, 213*61ba55bcSBaptiste Daroussin {"no-ok", no_argument, NULL, NO_OK}, 214*61ba55bcSBaptiste Daroussin {"nook", no_argument, NULL, NO_OK}, 215*61ba55bcSBaptiste Daroussin {"no-shadow", no_argument, NULL, NO_SHADOW}, 216*61ba55bcSBaptiste Daroussin {"no-tags", no_argument, NULL, NO_NAMES}, 217*61ba55bcSBaptiste Daroussin {"normal-screen", no_argument, NULL, NORMAL_SCREEN}, 218*61ba55bcSBaptiste Daroussin {"ok-exit-code", required_argument, NULL, OK_EXIT_CODE}, 219*61ba55bcSBaptiste Daroussin {"ok-label", required_argument, NULL, OK_LABEL}, 220*61ba55bcSBaptiste Daroussin {"output-fd", required_argument, NULL, OUTPUT_FD}, 221*61ba55bcSBaptiste Daroussin {"output-separator", required_argument, NULL, OUTPUT_SEPARATOR}, 222*61ba55bcSBaptiste Daroussin {"print-maxsize", no_argument, NULL, PRINT_MAXSIZE}, 223*61ba55bcSBaptiste Daroussin {"print-size", no_argument, NULL, PRINT_SIZE}, 224*61ba55bcSBaptiste Daroussin {"print-version", no_argument, NULL, PRINT_VERSION}, 225*61ba55bcSBaptiste Daroussin {"quoted", no_argument, NULL, QUOTED}, 226*61ba55bcSBaptiste Daroussin {"right1-button", required_argument, NULL, RIGHT1_BUTTON}, 227*61ba55bcSBaptiste Daroussin {"right1-exit-code", required_argument, NULL, RIGHT1_EXIT_CODE}, 228*61ba55bcSBaptiste Daroussin {"right2-button", required_argument, NULL, RIGHT2_BUTTON}, 229*61ba55bcSBaptiste Daroussin {"right2-exit-code", required_argument, NULL, RIGHT2_EXIT_CODE}, 230*61ba55bcSBaptiste Daroussin {"right3-button", required_argument, NULL, RIGHT3_BUTTON}, 231*61ba55bcSBaptiste Daroussin {"right3-exit-code", required_argument, NULL, RIGHT3_EXIT_CODE}, 232*61ba55bcSBaptiste Daroussin {"save-theme", required_argument, NULL, SAVE_THEME}, 233*61ba55bcSBaptiste Daroussin {"separate-output", no_argument, NULL, SEPARATE_OUTPUT}, 234*61ba55bcSBaptiste Daroussin {"separator", required_argument, NULL, OUTPUT_SEPARATOR}, 235*61ba55bcSBaptiste Daroussin {"shadow", no_argument, NULL, SHADOW}, 236*61ba55bcSBaptiste Daroussin {"single-quoted", no_argument, NULL, SINGLE_QUOTED}, 237*61ba55bcSBaptiste Daroussin {"sleep", required_argument, NULL, SLEEP}, 238*61ba55bcSBaptiste Daroussin {"stderr", no_argument, NULL, STDERR}, 239*61ba55bcSBaptiste Daroussin {"stdout", no_argument, NULL, STDOUT}, 240*61ba55bcSBaptiste Daroussin {"switch-buttons", no_argument, NULL, SWITCH_BUTTONS}, 241*61ba55bcSBaptiste Daroussin {"tab-escape", no_argument, NULL, TAB_ESCAPE}, 242*61ba55bcSBaptiste Daroussin {"tab-len", required_argument, NULL, TAB_LEN}, 243*61ba55bcSBaptiste Daroussin {"text-escape", no_argument, NULL, TEXT_ESCAPE}, 244*61ba55bcSBaptiste Daroussin {"text-unchanged", no_argument, NULL, TEXT_UNCHANGED}, 245*61ba55bcSBaptiste Daroussin {"theme", required_argument, NULL, THEME}, 246*61ba55bcSBaptiste Daroussin {"timeout-exit-code", required_argument, NULL, TIMEOUT_EXIT_CODE}, 247*61ba55bcSBaptiste Daroussin {"time-format", required_argument, NULL, TIME_FORMAT}, 248*61ba55bcSBaptiste Daroussin {"title", required_argument, NULL, TITLE}, 249*61ba55bcSBaptiste Daroussin {"yes-label", required_argument, NULL, OK_LABEL}, 250*61ba55bcSBaptiste Daroussin /* Dialogs */ 251*61ba55bcSBaptiste Daroussin {"calendar", no_argument, NULL, CALENDAR}, 252*61ba55bcSBaptiste Daroussin {"checklist", no_argument, NULL, CHECKLIST}, 253*61ba55bcSBaptiste Daroussin {"datebox", no_argument, NULL, DATEBOX}, 254*61ba55bcSBaptiste Daroussin {"form", no_argument, NULL, FORM}, 255*61ba55bcSBaptiste Daroussin {"gauge", no_argument, NULL, GAUGE}, 256*61ba55bcSBaptiste Daroussin {"infobox", no_argument, NULL, INFOBOX}, 257*61ba55bcSBaptiste Daroussin {"inputbox", no_argument, NULL, INPUTBOX}, 258*61ba55bcSBaptiste Daroussin {"menu", no_argument, NULL, MENU}, 259*61ba55bcSBaptiste Daroussin {"mixedform", no_argument, NULL, MIXEDFORM}, 260*61ba55bcSBaptiste Daroussin {"mixedgauge", no_argument, NULL, MIXEDGAUGE}, 261*61ba55bcSBaptiste Daroussin {"msgbox", no_argument, NULL, MSGBOX}, 262*61ba55bcSBaptiste Daroussin {"passwordbox", no_argument, NULL, PASSWORDBOX}, 263*61ba55bcSBaptiste Daroussin {"passwordform", no_argument, NULL, PASSWORDFORM}, 264*61ba55bcSBaptiste Daroussin {"pause", no_argument, NULL, PAUSE}, 265*61ba55bcSBaptiste Daroussin {"radiolist", no_argument, NULL, RADIOLIST}, 266*61ba55bcSBaptiste Daroussin {"rangebox", no_argument, NULL, RANGEBOX}, 267*61ba55bcSBaptiste Daroussin {"textbox", no_argument, NULL, TEXTBOX}, 268*61ba55bcSBaptiste Daroussin {"timebox", no_argument, NULL, TIMEBOX}, 269*61ba55bcSBaptiste Daroussin {"treeview", no_argument, NULL, TREEVIEW}, 270*61ba55bcSBaptiste Daroussin {"yesno", no_argument, NULL, YESNO}, 271*61ba55bcSBaptiste Daroussin /* END */ 272*61ba55bcSBaptiste Daroussin { NULL, 0, NULL, 0} 273*61ba55bcSBaptiste Daroussin }; 274*61ba55bcSBaptiste Daroussin 275*61ba55bcSBaptiste Daroussin void usage(void) 276*61ba55bcSBaptiste Daroussin { 277*61ba55bcSBaptiste Daroussin printf("usage: bsddialog --help | --version\n"); 278*61ba55bcSBaptiste Daroussin printf(" bsddialog [--<opt>] --<dialog> <text> <rows> <cols> " 279*61ba55bcSBaptiste Daroussin "[<arg>] [--<opt>]\n"); 280*61ba55bcSBaptiste Daroussin printf(" bsddialog ... --<dialog1> ... [--and-dialog --<dialog2> " 281*61ba55bcSBaptiste Daroussin "...] ...\n"); 282*61ba55bcSBaptiste Daroussin printf("\n"); 283*61ba55bcSBaptiste Daroussin 284*61ba55bcSBaptiste Daroussin printf("Options:\n"); 285*61ba55bcSBaptiste Daroussin printf(" --alternate-screen, --ascii-lines, --backtitle <backtitle>," 286*61ba55bcSBaptiste Daroussin " --begin-x <x>,\n --begin-y <y>, --bikeshed," 287*61ba55bcSBaptiste Daroussin " --cancel-exit-code <retval>, --cancel-label <label>,\n" 288*61ba55bcSBaptiste Daroussin " --clear-dialog, --clear-screen, --columns-per-row <columns>," 289*61ba55bcSBaptiste Daroussin " --cr-wrap,\n --datebox-format d/m/y|m/d/y|y/m/d," 290*61ba55bcSBaptiste Daroussin " --date-format <format>,\n --default-button <label>," 291*61ba55bcSBaptiste Daroussin " --default-item <name>, --default-no, --disable-esc,\n" 292*61ba55bcSBaptiste Daroussin " --error-exit-code <retval>, --esc-exit-code <retval>," 293*61ba55bcSBaptiste Daroussin " --exit-label <label>,\n --extra-button," 294*61ba55bcSBaptiste Daroussin " --extra-exit-code <retval>, --extra-label <label>,\n" 295*61ba55bcSBaptiste Daroussin " --left1-button <label>, --left1-exit-code <retval>," 296*61ba55bcSBaptiste Daroussin " --left2-button <label>,\n --left2-exit-code <retval>," 297*61ba55bcSBaptiste Daroussin " --left3-button <label>, --left3-exit-code <retval>,\n" 298*61ba55bcSBaptiste Daroussin " --help-button, --help-exit-code <retval>, --help-label <label>,\n" 299*61ba55bcSBaptiste Daroussin " --help-print-items, --help-print-name, --hfile <file>," 300*61ba55bcSBaptiste Daroussin " --hline <string>,\n --hmsg <string>, --ignore, --insecure," 301*61ba55bcSBaptiste Daroussin " --item-bottom-desc, --item-depth,\n --item-prefix," 302*61ba55bcSBaptiste Daroussin " --load-theme <file>, --max-input <size>, --no-cancel,\n" 303*61ba55bcSBaptiste Daroussin " --no-descriptions, --no-label <label>, --no-lines, --no-names," 304*61ba55bcSBaptiste Daroussin " --no-ok,\n --no-shadow, --normal-screen, --ok-exit-code <retval>," 305*61ba55bcSBaptiste Daroussin " --ok-label <label>,\n --output-fd <fd>, --output-separator <sep>," 306*61ba55bcSBaptiste Daroussin " --print-maxsize, --print-size,\n --print-version, --quoted," 307*61ba55bcSBaptiste Daroussin " --right1-button <label>,\n --right1-exit-code <retval>," 308*61ba55bcSBaptiste Daroussin " --right2-button <label>,\n --right2-exit-code <retval>," 309*61ba55bcSBaptiste Daroussin " --right3-button <label>,\n --right3-exit-code <retval>," 310*61ba55bcSBaptiste Daroussin " --save-theme <file>, --separate-output,\n --separator <sep>," 311*61ba55bcSBaptiste Daroussin " --shadow, --single-quoted, --sleep <secs>, --stderr,\n --stdout," 312*61ba55bcSBaptiste Daroussin " --switch-buttons, --tab-escape, --tab-len <spaces>," 313*61ba55bcSBaptiste Daroussin " --text-escape,\n --text-unchanged, --theme 3d|blackwhite|flat," 314*61ba55bcSBaptiste Daroussin " --timeout-exit-code <retval>,\n --time-format <format>," 315*61ba55bcSBaptiste Daroussin " --title <title>, --yes-label <label>."); 316*61ba55bcSBaptiste Daroussin printf("\n\n"); 317*61ba55bcSBaptiste Daroussin 318*61ba55bcSBaptiste Daroussin printf("Dialogs:\n"); 319*61ba55bcSBaptiste Daroussin printf(" --calendar <text> <rows> <cols> [<dd> <mm> <yy>]\n"); 320*61ba55bcSBaptiste Daroussin printf(" --checklist <text> <rows> <cols> <menurows> [<name> <desc> " 321*61ba55bcSBaptiste Daroussin "on|off] ...\n"); 322*61ba55bcSBaptiste Daroussin printf(" --datebox <text> <rows> <cols> [<dd> <mm> <yy>]\n"); 323*61ba55bcSBaptiste Daroussin printf(" --form <text> <rows> <cols> <formrows> [<label> <ylabel> " 324*61ba55bcSBaptiste Daroussin "<xlabel> <init> <yfield> <xfield> <fieldlen> <maxletters>] " 325*61ba55bcSBaptiste Daroussin "...\n"); 326*61ba55bcSBaptiste Daroussin printf(" --gauge <text> <rows> <cols> [<perc>]\n"); 327*61ba55bcSBaptiste Daroussin printf(" --infobox <text> <rows> <cols>\n"); 328*61ba55bcSBaptiste Daroussin printf(" --inputbox <text> <rows> <cols> [<init>]\n"); 329*61ba55bcSBaptiste Daroussin printf(" --menu <text> <rows> <cols> <menurows> [<name> <desc>] ...\n"); 330*61ba55bcSBaptiste Daroussin printf(" --mixedform <text> <rows> <cols> <formrows> [<label> <ylabel> " 331*61ba55bcSBaptiste Daroussin "<xlabel> <init> <yfield> <xfield> <fieldlen> <maxletters> " 332*61ba55bcSBaptiste Daroussin "0|1|2] ...\n"); 333*61ba55bcSBaptiste Daroussin printf(" --mixedgauge <text> <rows> <cols> <mainperc> [<minilabel> " 334*61ba55bcSBaptiste Daroussin "<miniperc>] ...\n"); 335*61ba55bcSBaptiste Daroussin printf(" --msgbox <text> <rows> <cols>\n"); 336*61ba55bcSBaptiste Daroussin printf(" --passwordbox <text> <rows> <cols> [<init>]\n"); 337*61ba55bcSBaptiste Daroussin printf(" --passwordform <text> <rows> <cols> <formrows> [<label> " 338*61ba55bcSBaptiste Daroussin "<ylabel> <xlabel> <init> <yfield> <xfield> <fieldlen> " 339*61ba55bcSBaptiste Daroussin "<maxletters>] ...\n"); 340*61ba55bcSBaptiste Daroussin printf(" --pause <text> <rows> <cols> <secs>\n"); 341*61ba55bcSBaptiste Daroussin printf(" --radiolist <text> <rows> <cols> <menurows> [<name> <desc> " 342*61ba55bcSBaptiste Daroussin "on|off] ...\n"); 343*61ba55bcSBaptiste Daroussin printf(" --rangebox <text> <rows> <cols> <min> <max> [<init>]\n"); 344*61ba55bcSBaptiste Daroussin printf(" --textbox <file> <rows> <cols>\n"); 345*61ba55bcSBaptiste Daroussin printf(" --timebox <text> <rows> <cols> [<hh> <mm> <ss>]\n"); 346*61ba55bcSBaptiste Daroussin printf(" --treeview <text> <rows> <cols> <menurows> [<depth> <name> " 347*61ba55bcSBaptiste Daroussin "<desc> on|off] ...\n"); 348*61ba55bcSBaptiste Daroussin printf(" --yesno <text> <rows> <cols>\n"); 349*61ba55bcSBaptiste Daroussin printf("\n"); 350*61ba55bcSBaptiste Daroussin 351*61ba55bcSBaptiste Daroussin printf("See 'man 1 bsddialog' for more information.\n"); 352*61ba55bcSBaptiste Daroussin } 353*61ba55bcSBaptiste Daroussin 354*61ba55bcSBaptiste Daroussin int 355*61ba55bcSBaptiste Daroussin parseargs(int argc, char **argv, struct bsddialog_conf *conf, 356*61ba55bcSBaptiste Daroussin struct options *opt) 357*61ba55bcSBaptiste Daroussin { 358*61ba55bcSBaptiste Daroussin int arg, parsed, i; 359*61ba55bcSBaptiste Daroussin struct winsize ws; 360*61ba55bcSBaptiste Daroussin 361*61ba55bcSBaptiste Daroussin bsddialog_initconf(conf); 362*61ba55bcSBaptiste Daroussin conf->key.enable_esc = true; 363*61ba55bcSBaptiste Daroussin conf->button.always_active = true; 364*61ba55bcSBaptiste Daroussin 365*61ba55bcSBaptiste Daroussin memset(opt, 0, sizeof(struct options)); 366*61ba55bcSBaptiste Daroussin opt->theme = -1; 367*61ba55bcSBaptiste Daroussin opt->output_fd = STDERR_FILENO; 368*61ba55bcSBaptiste Daroussin opt->max_input_form = 2048; 369*61ba55bcSBaptiste Daroussin opt->mandatory_dialog = true; 370*61ba55bcSBaptiste Daroussin 371*61ba55bcSBaptiste Daroussin for (i = 0; i < argc; i++) { 372*61ba55bcSBaptiste Daroussin if (strcmp(argv[i], "--and-dialog") == 0 || 373*61ba55bcSBaptiste Daroussin strcmp(argv[i], "--and-widget") == 0) { 374*61ba55bcSBaptiste Daroussin argc = i + 1; 375*61ba55bcSBaptiste Daroussin break; 376*61ba55bcSBaptiste Daroussin } 377*61ba55bcSBaptiste Daroussin } 378*61ba55bcSBaptiste Daroussin parsed = argc; 379*61ba55bcSBaptiste Daroussin while ((arg = getopt_long(argc, argv, "", longopts, NULL)) != -1) { 380*61ba55bcSBaptiste Daroussin switch (arg) { 381*61ba55bcSBaptiste Daroussin /* Options */ 382*61ba55bcSBaptiste Daroussin case ALTERNATE_SCREEN: 383*61ba55bcSBaptiste Daroussin opt->screen_mode = "smcup"; 384*61ba55bcSBaptiste Daroussin break; 385*61ba55bcSBaptiste Daroussin case AND_DIALOG: 386*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder == NULL) 387*61ba55bcSBaptiste Daroussin exit_error(true,"--and-dialog without " 388*61ba55bcSBaptiste Daroussin "previous --<dialog>"); 389*61ba55bcSBaptiste Daroussin break; 390*61ba55bcSBaptiste Daroussin case ASCII_LINES: 391*61ba55bcSBaptiste Daroussin conf->ascii_lines = true; 392*61ba55bcSBaptiste Daroussin break; 393*61ba55bcSBaptiste Daroussin case BACKTITLE: 394*61ba55bcSBaptiste Daroussin opt->backtitle = optarg; 395*61ba55bcSBaptiste Daroussin if (conf->y == BSDDIALOG_CENTER) 396*61ba55bcSBaptiste Daroussin conf->auto_topmargin = 2; 397*61ba55bcSBaptiste Daroussin break; 398*61ba55bcSBaptiste Daroussin case BEGIN_X: 399*61ba55bcSBaptiste Daroussin conf->x = (int)strtol(optarg, NULL, 10); 400*61ba55bcSBaptiste Daroussin if (conf->x < BSDDIALOG_CENTER) 401*61ba55bcSBaptiste Daroussin exit_error(false, "--begin-x %d is < %d", 402*61ba55bcSBaptiste Daroussin conf->x, BSDDIALOG_CENTER); 403*61ba55bcSBaptiste Daroussin break; 404*61ba55bcSBaptiste Daroussin case BEGIN_Y: 405*61ba55bcSBaptiste Daroussin conf->y = (int)strtol(optarg, NULL, 10); 406*61ba55bcSBaptiste Daroussin if (conf->y < BSDDIALOG_CENTER) 407*61ba55bcSBaptiste Daroussin exit_error(false, "--begin-y %d is < %d", 408*61ba55bcSBaptiste Daroussin conf->y, BSDDIALOG_CENTER); 409*61ba55bcSBaptiste Daroussin conf->auto_topmargin = 0; 410*61ba55bcSBaptiste Daroussin break; 411*61ba55bcSBaptiste Daroussin case BIKESHED: 412*61ba55bcSBaptiste Daroussin opt->bikeshed = true; 413*61ba55bcSBaptiste Daroussin break; 414*61ba55bcSBaptiste Daroussin case CANCEL_EXIT_CODE: 415*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_CANCEL, 416*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 417*61ba55bcSBaptiste Daroussin break; 418*61ba55bcSBaptiste Daroussin case CANCEL_LABEL: 419*61ba55bcSBaptiste Daroussin conf->button.cancel_label = optarg; 420*61ba55bcSBaptiste Daroussin break; 421*61ba55bcSBaptiste Daroussin case CLEAR_DIALOG: 422*61ba55bcSBaptiste Daroussin conf->clear = true; 423*61ba55bcSBaptiste Daroussin break; 424*61ba55bcSBaptiste Daroussin case CLEAR_SCREEN: 425*61ba55bcSBaptiste Daroussin opt->mandatory_dialog = false; 426*61ba55bcSBaptiste Daroussin opt->clearscreen = true; 427*61ba55bcSBaptiste Daroussin break; 428*61ba55bcSBaptiste Daroussin case COLUMNS_PER_ROW: 429*61ba55bcSBaptiste Daroussin conf->text.cols_per_row = 430*61ba55bcSBaptiste Daroussin (u_int)strtoul(optarg, NULL, 10); 431*61ba55bcSBaptiste Daroussin break; 432*61ba55bcSBaptiste Daroussin case CR_WRAP: 433*61ba55bcSBaptiste Daroussin opt->cr_wrap = true; 434*61ba55bcSBaptiste Daroussin break; 435*61ba55bcSBaptiste Daroussin case DATEBOX_FORMAT: 436*61ba55bcSBaptiste Daroussin if (strcasecmp(optarg, "d/m/y") == 0) 437*61ba55bcSBaptiste Daroussin conf->date.format = "d/m/y"; 438*61ba55bcSBaptiste Daroussin else if (strcasecmp(optarg, "m/d/y") == 0) 439*61ba55bcSBaptiste Daroussin conf->date.format = "m/d/y"; 440*61ba55bcSBaptiste Daroussin else if (strcasecmp(optarg, "y/m/d") == 0) 441*61ba55bcSBaptiste Daroussin conf->date.format = "y/m/d"; 442*61ba55bcSBaptiste Daroussin else 443*61ba55bcSBaptiste Daroussin exit_error(true, 444*61ba55bcSBaptiste Daroussin "date format \"%s\" is invalid", optarg); 445*61ba55bcSBaptiste Daroussin break; 446*61ba55bcSBaptiste Daroussin case DATE_FORMAT: 447*61ba55bcSBaptiste Daroussin opt->date_fmt = optarg; 448*61ba55bcSBaptiste Daroussin break; 449*61ba55bcSBaptiste Daroussin case DEFAULT_BUTTON: 450*61ba55bcSBaptiste Daroussin conf->button.default_label = optarg; 451*61ba55bcSBaptiste Daroussin break; 452*61ba55bcSBaptiste Daroussin case DEFAULT_ITEM: 453*61ba55bcSBaptiste Daroussin opt->item_default = optarg; 454*61ba55bcSBaptiste Daroussin break; 455*61ba55bcSBaptiste Daroussin case DEFAULT_NO: 456*61ba55bcSBaptiste Daroussin conf->button.default_cancel = true; 457*61ba55bcSBaptiste Daroussin break; 458*61ba55bcSBaptiste Daroussin case DISABLE_ESC: 459*61ba55bcSBaptiste Daroussin conf->key.enable_esc = false; 460*61ba55bcSBaptiste Daroussin break; 461*61ba55bcSBaptiste Daroussin case ERROR_EXIT_CODE: 462*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_ERROR, 463*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 464*61ba55bcSBaptiste Daroussin break; 465*61ba55bcSBaptiste Daroussin case ESC_EXIT_CODE: 466*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_ESC, 467*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 468*61ba55bcSBaptiste Daroussin break; 469*61ba55bcSBaptiste Daroussin case EXIT_LABEL: 470*61ba55bcSBaptiste Daroussin conf->button.ok_label = optarg; 471*61ba55bcSBaptiste Daroussin break; 472*61ba55bcSBaptiste Daroussin case EXTRA_BUTTON: 473*61ba55bcSBaptiste Daroussin conf->button.with_extra = true; 474*61ba55bcSBaptiste Daroussin break; 475*61ba55bcSBaptiste Daroussin case EXTRA_EXIT_CODE: 476*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_EXTRA, 477*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 478*61ba55bcSBaptiste Daroussin break; 479*61ba55bcSBaptiste Daroussin case EXTRA_LABEL: 480*61ba55bcSBaptiste Daroussin conf->button.extra_label = optarg; 481*61ba55bcSBaptiste Daroussin break; 482*61ba55bcSBaptiste Daroussin case HELP_BUTTON: 483*61ba55bcSBaptiste Daroussin conf->button.with_help = true; 484*61ba55bcSBaptiste Daroussin break; 485*61ba55bcSBaptiste Daroussin case HELP_EXIT_CODE: 486*61ba55bcSBaptiste Daroussin i = (int)strtol(optarg, NULL, 10); 487*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_HELP, i); 488*61ba55bcSBaptiste Daroussin /* _TEM_HELP follows _HELP */ 489*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_ITEM_HELP, i); 490*61ba55bcSBaptiste Daroussin break; 491*61ba55bcSBaptiste Daroussin case HELP_LABEL: 492*61ba55bcSBaptiste Daroussin conf->button.help_label = optarg; 493*61ba55bcSBaptiste Daroussin break; 494*61ba55bcSBaptiste Daroussin case HELP_PRINT_ITEMS: 495*61ba55bcSBaptiste Daroussin opt->help_print_items = true; 496*61ba55bcSBaptiste Daroussin break; 497*61ba55bcSBaptiste Daroussin case HELP_PRINT_NAME: 498*61ba55bcSBaptiste Daroussin opt->help_print_item_name = true; 499*61ba55bcSBaptiste Daroussin break; 500*61ba55bcSBaptiste Daroussin case HFILE: 501*61ba55bcSBaptiste Daroussin conf->key.f1_file = optarg; 502*61ba55bcSBaptiste Daroussin break; 503*61ba55bcSBaptiste Daroussin case HLINE: 504*61ba55bcSBaptiste Daroussin if (optarg[0] != '\0') 505*61ba55bcSBaptiste Daroussin conf->bottomtitle = optarg; 506*61ba55bcSBaptiste Daroussin break; 507*61ba55bcSBaptiste Daroussin case HMSG: 508*61ba55bcSBaptiste Daroussin conf->key.f1_message = optarg; 509*61ba55bcSBaptiste Daroussin break; 510*61ba55bcSBaptiste Daroussin case IGNORE: 511*61ba55bcSBaptiste Daroussin opt->ignore = true; 512*61ba55bcSBaptiste Daroussin break; 513*61ba55bcSBaptiste Daroussin case INSECURE: 514*61ba55bcSBaptiste Daroussin conf->form.securech = '*'; 515*61ba55bcSBaptiste Daroussin break; 516*61ba55bcSBaptiste Daroussin case ITEM_BOTTOM_DESC: 517*61ba55bcSBaptiste Daroussin opt->item_bottomdesc = true; 518*61ba55bcSBaptiste Daroussin break; 519*61ba55bcSBaptiste Daroussin case ITEM_DEPTH: 520*61ba55bcSBaptiste Daroussin opt->item_depth = true; 521*61ba55bcSBaptiste Daroussin break; 522*61ba55bcSBaptiste Daroussin case ITEM_PREFIX: 523*61ba55bcSBaptiste Daroussin opt->item_prefix = true; 524*61ba55bcSBaptiste Daroussin break; 525*61ba55bcSBaptiste Daroussin case LEFT1_BUTTON: 526*61ba55bcSBaptiste Daroussin conf->button.left1_label = optarg; 527*61ba55bcSBaptiste Daroussin break; 528*61ba55bcSBaptiste Daroussin case LEFT1_EXIT_CODE: 529*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_LEFT1, 530*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 531*61ba55bcSBaptiste Daroussin break; 532*61ba55bcSBaptiste Daroussin case LEFT2_BUTTON: 533*61ba55bcSBaptiste Daroussin conf->button.left2_label = optarg; 534*61ba55bcSBaptiste Daroussin break; 535*61ba55bcSBaptiste Daroussin case LEFT2_EXIT_CODE: 536*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_LEFT2, 537*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 538*61ba55bcSBaptiste Daroussin break; 539*61ba55bcSBaptiste Daroussin case LEFT3_BUTTON: 540*61ba55bcSBaptiste Daroussin conf->button.left3_label = optarg; 541*61ba55bcSBaptiste Daroussin break; 542*61ba55bcSBaptiste Daroussin case LEFT3_EXIT_CODE: 543*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_LEFT3, 544*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 545*61ba55bcSBaptiste Daroussin break; 546*61ba55bcSBaptiste Daroussin case LOAD_THEME: 547*61ba55bcSBaptiste Daroussin opt->loadthemefile = optarg; 548*61ba55bcSBaptiste Daroussin break; 549*61ba55bcSBaptiste Daroussin case MAX_INPUT: 550*61ba55bcSBaptiste Daroussin opt->max_input_form = (u_int)strtoul(optarg, NULL, 10); 551*61ba55bcSBaptiste Daroussin break; 552*61ba55bcSBaptiste Daroussin case NO_CANCEL: 553*61ba55bcSBaptiste Daroussin conf->button.without_cancel = true; 554*61ba55bcSBaptiste Daroussin break; 555*61ba55bcSBaptiste Daroussin case NO_DESCRIPTIONS: 556*61ba55bcSBaptiste Daroussin conf->menu.no_desc = true; 557*61ba55bcSBaptiste Daroussin break; 558*61ba55bcSBaptiste Daroussin case NO_LINES: 559*61ba55bcSBaptiste Daroussin conf->no_lines = true; 560*61ba55bcSBaptiste Daroussin break; 561*61ba55bcSBaptiste Daroussin case NO_NAMES: 562*61ba55bcSBaptiste Daroussin conf->menu.no_name = true; 563*61ba55bcSBaptiste Daroussin break; 564*61ba55bcSBaptiste Daroussin case NO_OK: 565*61ba55bcSBaptiste Daroussin conf->button.without_ok = true; 566*61ba55bcSBaptiste Daroussin break; 567*61ba55bcSBaptiste Daroussin case NO_SHADOW: 568*61ba55bcSBaptiste Daroussin conf->shadow = false; 569*61ba55bcSBaptiste Daroussin break; 570*61ba55bcSBaptiste Daroussin case NORMAL_SCREEN: 571*61ba55bcSBaptiste Daroussin opt->screen_mode = "rmcup"; 572*61ba55bcSBaptiste Daroussin break; 573*61ba55bcSBaptiste Daroussin case OK_EXIT_CODE: 574*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_OK, 575*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 576*61ba55bcSBaptiste Daroussin break; 577*61ba55bcSBaptiste Daroussin case OK_LABEL: 578*61ba55bcSBaptiste Daroussin conf->button.ok_label = optarg; 579*61ba55bcSBaptiste Daroussin break; 580*61ba55bcSBaptiste Daroussin case OUTPUT_FD: 581*61ba55bcSBaptiste Daroussin opt->output_fd = (int)strtol(optarg, NULL, 10); 582*61ba55bcSBaptiste Daroussin break; 583*61ba55bcSBaptiste Daroussin case OUTPUT_SEPARATOR: 584*61ba55bcSBaptiste Daroussin opt->item_output_sep = optarg; 585*61ba55bcSBaptiste Daroussin break; 586*61ba55bcSBaptiste Daroussin case QUOTED: 587*61ba55bcSBaptiste Daroussin opt->item_always_quote = true; 588*61ba55bcSBaptiste Daroussin break; 589*61ba55bcSBaptiste Daroussin case PRINT_MAXSIZE: 590*61ba55bcSBaptiste Daroussin opt->mandatory_dialog = false; 591*61ba55bcSBaptiste Daroussin ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws); 592*61ba55bcSBaptiste Daroussin dprintf(opt->output_fd, "MaxSize: %d, %d\n", 593*61ba55bcSBaptiste Daroussin ws.ws_row, ws.ws_col); 594*61ba55bcSBaptiste Daroussin break; 595*61ba55bcSBaptiste Daroussin case PRINT_SIZE: 596*61ba55bcSBaptiste Daroussin conf->get_height = &opt->getH; 597*61ba55bcSBaptiste Daroussin conf->get_width = &opt->getW; 598*61ba55bcSBaptiste Daroussin break; 599*61ba55bcSBaptiste Daroussin case PRINT_VERSION: 600*61ba55bcSBaptiste Daroussin opt->mandatory_dialog = false; 601*61ba55bcSBaptiste Daroussin dprintf(opt->output_fd, "Version: %s\n", 602*61ba55bcSBaptiste Daroussin LIBBSDDIALOG_VERSION); 603*61ba55bcSBaptiste Daroussin break; 604*61ba55bcSBaptiste Daroussin case RIGHT1_BUTTON: 605*61ba55bcSBaptiste Daroussin conf->button.right1_label = optarg; 606*61ba55bcSBaptiste Daroussin break; 607*61ba55bcSBaptiste Daroussin case RIGHT1_EXIT_CODE: 608*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_RIGHT1, 609*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 610*61ba55bcSBaptiste Daroussin break; 611*61ba55bcSBaptiste Daroussin case RIGHT2_BUTTON: 612*61ba55bcSBaptiste Daroussin conf->button.right2_label = optarg; 613*61ba55bcSBaptiste Daroussin break; 614*61ba55bcSBaptiste Daroussin case RIGHT2_EXIT_CODE: 615*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_RIGHT2, 616*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 617*61ba55bcSBaptiste Daroussin break; 618*61ba55bcSBaptiste Daroussin case RIGHT3_BUTTON: 619*61ba55bcSBaptiste Daroussin conf->button.right3_label = optarg; 620*61ba55bcSBaptiste Daroussin break; 621*61ba55bcSBaptiste Daroussin case RIGHT3_EXIT_CODE: 622*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_RIGHT3, 623*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 624*61ba55bcSBaptiste Daroussin break; 625*61ba55bcSBaptiste Daroussin case SAVE_THEME: 626*61ba55bcSBaptiste Daroussin opt->mandatory_dialog = false; 627*61ba55bcSBaptiste Daroussin opt->savethemefile = optarg; 628*61ba55bcSBaptiste Daroussin break; 629*61ba55bcSBaptiste Daroussin case SEPARATE_OUTPUT: 630*61ba55bcSBaptiste Daroussin opt->item_output_sepnl = true; 631*61ba55bcSBaptiste Daroussin break; 632*61ba55bcSBaptiste Daroussin case SHADOW: 633*61ba55bcSBaptiste Daroussin conf->shadow = true; 634*61ba55bcSBaptiste Daroussin break; 635*61ba55bcSBaptiste Daroussin case SINGLE_QUOTED: 636*61ba55bcSBaptiste Daroussin opt->item_singlequote = true; 637*61ba55bcSBaptiste Daroussin break; 638*61ba55bcSBaptiste Daroussin case SLEEP: 639*61ba55bcSBaptiste Daroussin conf->sleep = (u_int)strtoul(optarg, NULL, 10); 640*61ba55bcSBaptiste Daroussin break; 641*61ba55bcSBaptiste Daroussin case STDERR: 642*61ba55bcSBaptiste Daroussin opt->output_fd = STDERR_FILENO; 643*61ba55bcSBaptiste Daroussin break; 644*61ba55bcSBaptiste Daroussin case STDOUT: 645*61ba55bcSBaptiste Daroussin opt->output_fd = STDOUT_FILENO; 646*61ba55bcSBaptiste Daroussin break; 647*61ba55bcSBaptiste Daroussin case SWITCH_BUTTONS: 648*61ba55bcSBaptiste Daroussin conf->button.always_active = false; 649*61ba55bcSBaptiste Daroussin break; 650*61ba55bcSBaptiste Daroussin case TAB_ESCAPE: 651*61ba55bcSBaptiste Daroussin opt->tab_escape = true; 652*61ba55bcSBaptiste Daroussin break; 653*61ba55bcSBaptiste Daroussin case TAB_LEN: 654*61ba55bcSBaptiste Daroussin conf->text.tablen = (u_int)strtoul(optarg, NULL, 10); 655*61ba55bcSBaptiste Daroussin break; 656*61ba55bcSBaptiste Daroussin case TEXT_ESCAPE: 657*61ba55bcSBaptiste Daroussin conf->text.escape = true; 658*61ba55bcSBaptiste Daroussin break; 659*61ba55bcSBaptiste Daroussin case TEXT_UNCHANGED: 660*61ba55bcSBaptiste Daroussin opt->text_unchanged = true; 661*61ba55bcSBaptiste Daroussin break; 662*61ba55bcSBaptiste Daroussin case THEME: 663*61ba55bcSBaptiste Daroussin if (strcasecmp(optarg, "blackwhite") == 0) 664*61ba55bcSBaptiste Daroussin opt->theme = BSDDIALOG_THEME_BLACKWHITE; 665*61ba55bcSBaptiste Daroussin else if (strcasecmp(optarg, "flat") == 0) 666*61ba55bcSBaptiste Daroussin opt->theme = BSDDIALOG_THEME_FLAT; 667*61ba55bcSBaptiste Daroussin else if (strcasecmp(optarg, "3d") == 0) 668*61ba55bcSBaptiste Daroussin opt->theme = BSDDIALOG_THEME_3D; 669*61ba55bcSBaptiste Daroussin else 670*61ba55bcSBaptiste Daroussin exit_error(true, 671*61ba55bcSBaptiste Daroussin "--theme: \"%s\" is unknown", optarg); 672*61ba55bcSBaptiste Daroussin break; 673*61ba55bcSBaptiste Daroussin case TIMEOUT_EXIT_CODE: 674*61ba55bcSBaptiste Daroussin set_exit_code(BSDDIALOG_TIMEOUT, 675*61ba55bcSBaptiste Daroussin (int)strtol(optarg, NULL, 10)); 676*61ba55bcSBaptiste Daroussin break; 677*61ba55bcSBaptiste Daroussin case TIME_FORMAT: 678*61ba55bcSBaptiste Daroussin opt->time_fmt = optarg; 679*61ba55bcSBaptiste Daroussin break; 680*61ba55bcSBaptiste Daroussin case TITLE: 681*61ba55bcSBaptiste Daroussin conf->title = optarg; 682*61ba55bcSBaptiste Daroussin break; 683*61ba55bcSBaptiste Daroussin /* Dialogs */ 684*61ba55bcSBaptiste Daroussin case CALENDAR: 685*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 686*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --calendar without " 687*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 688*61ba55bcSBaptiste Daroussin opt->name = "--calendar"; 689*61ba55bcSBaptiste Daroussin opt->dialogbuilder = calendar_builder; 690*61ba55bcSBaptiste Daroussin break; 691*61ba55bcSBaptiste Daroussin case CHECKLIST: 692*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 693*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --checklist without " 694*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 695*61ba55bcSBaptiste Daroussin opt->name = "--checklist"; 696*61ba55bcSBaptiste Daroussin opt->dialogbuilder = checklist_builder; 697*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 698*61ba55bcSBaptiste Daroussin break; 699*61ba55bcSBaptiste Daroussin case DATEBOX: 700*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 701*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --datebox without " 702*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 703*61ba55bcSBaptiste Daroussin opt->name = "--datebox"; 704*61ba55bcSBaptiste Daroussin opt->dialogbuilder = datebox_builder; 705*61ba55bcSBaptiste Daroussin break; 706*61ba55bcSBaptiste Daroussin case FORM: 707*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 708*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --form without " 709*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 710*61ba55bcSBaptiste Daroussin opt->name = "--form"; 711*61ba55bcSBaptiste Daroussin opt->dialogbuilder = form_builder; 712*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 713*61ba55bcSBaptiste Daroussin break; 714*61ba55bcSBaptiste Daroussin case GAUGE: 715*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 716*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --gauge without " 717*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 718*61ba55bcSBaptiste Daroussin opt->name = "--gauge"; 719*61ba55bcSBaptiste Daroussin opt->dialogbuilder = gauge_builder; 720*61ba55bcSBaptiste Daroussin break; 721*61ba55bcSBaptiste Daroussin case INFOBOX: 722*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 723*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --infobox without " 724*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 725*61ba55bcSBaptiste Daroussin opt->name = "--infobox"; 726*61ba55bcSBaptiste Daroussin opt->dialogbuilder = infobox_builder; 727*61ba55bcSBaptiste Daroussin break; 728*61ba55bcSBaptiste Daroussin case INPUTBOX: 729*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 730*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --inputbox without " 731*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 732*61ba55bcSBaptiste Daroussin opt->name = "--inputbox"; 733*61ba55bcSBaptiste Daroussin opt->dialogbuilder = inputbox_builder; 734*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 735*61ba55bcSBaptiste Daroussin break; 736*61ba55bcSBaptiste Daroussin case MENU: 737*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 738*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --menu without " 739*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 740*61ba55bcSBaptiste Daroussin opt->name = "--menu"; 741*61ba55bcSBaptiste Daroussin opt->dialogbuilder = menu_builder; 742*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 743*61ba55bcSBaptiste Daroussin break; 744*61ba55bcSBaptiste Daroussin case MIXEDFORM: 745*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 746*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --mixedform without " 747*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 748*61ba55bcSBaptiste Daroussin opt->name = "--mixedform"; 749*61ba55bcSBaptiste Daroussin opt->dialogbuilder = mixedform_builder; 750*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 751*61ba55bcSBaptiste Daroussin break; 752*61ba55bcSBaptiste Daroussin case MIXEDGAUGE: 753*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 754*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --mixedgauge without " 755*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 756*61ba55bcSBaptiste Daroussin opt->name = "--mixedgauge"; 757*61ba55bcSBaptiste Daroussin opt->dialogbuilder = mixedgauge_builder; 758*61ba55bcSBaptiste Daroussin break; 759*61ba55bcSBaptiste Daroussin case MSGBOX: 760*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 761*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --msgbox without " 762*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 763*61ba55bcSBaptiste Daroussin opt->name = "--"; 764*61ba55bcSBaptiste Daroussin opt->dialogbuilder = msgbox_builder; 765*61ba55bcSBaptiste Daroussin break; 766*61ba55bcSBaptiste Daroussin case PAUSE: 767*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 768*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --pause without " 769*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 770*61ba55bcSBaptiste Daroussin opt->name = "--pause"; 771*61ba55bcSBaptiste Daroussin opt->dialogbuilder = pause_builder; 772*61ba55bcSBaptiste Daroussin break; 773*61ba55bcSBaptiste Daroussin case PASSWORDBOX: 774*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 775*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --passwordbox without " 776*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 777*61ba55bcSBaptiste Daroussin opt->name = "--passwordbox"; 778*61ba55bcSBaptiste Daroussin opt->dialogbuilder = passwordbox_builder; 779*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 780*61ba55bcSBaptiste Daroussin break; 781*61ba55bcSBaptiste Daroussin case PASSWORDFORM: 782*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 783*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --passwordform " 784*61ba55bcSBaptiste Daroussin "without --and-dialog", opt->name); 785*61ba55bcSBaptiste Daroussin opt->name = "--passwordform"; 786*61ba55bcSBaptiste Daroussin opt->dialogbuilder = passwordform_builder; 787*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 788*61ba55bcSBaptiste Daroussin break; 789*61ba55bcSBaptiste Daroussin case RADIOLIST: 790*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 791*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --radiolist without " 792*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 793*61ba55bcSBaptiste Daroussin opt->name = "--radiolist"; 794*61ba55bcSBaptiste Daroussin opt->dialogbuilder = radiolist_builder; 795*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 796*61ba55bcSBaptiste Daroussin break; 797*61ba55bcSBaptiste Daroussin case RANGEBOX: 798*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 799*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --rangebox without " 800*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 801*61ba55bcSBaptiste Daroussin opt->name = "--rangebox"; 802*61ba55bcSBaptiste Daroussin opt->dialogbuilder = rangebox_builder; 803*61ba55bcSBaptiste Daroussin break; 804*61ba55bcSBaptiste Daroussin case TEXTBOX: 805*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 806*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --textbox without " 807*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 808*61ba55bcSBaptiste Daroussin opt->name = "--textbox"; 809*61ba55bcSBaptiste Daroussin opt->dialogbuilder = textbox_builder; 810*61ba55bcSBaptiste Daroussin break; 811*61ba55bcSBaptiste Daroussin case TIMEBOX: 812*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 813*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --timebox without " 814*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 815*61ba55bcSBaptiste Daroussin opt->name = "--timebox"; 816*61ba55bcSBaptiste Daroussin opt->dialogbuilder = timebox_builder; 817*61ba55bcSBaptiste Daroussin break; 818*61ba55bcSBaptiste Daroussin case TREEVIEW: 819*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 820*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --treeview without " 821*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 822*61ba55bcSBaptiste Daroussin opt->name = "--treeview"; 823*61ba55bcSBaptiste Daroussin opt->dialogbuilder = treeview_builder; 824*61ba55bcSBaptiste Daroussin conf->auto_downmargin = 1; 825*61ba55bcSBaptiste Daroussin break; 826*61ba55bcSBaptiste Daroussin case YESNO: 827*61ba55bcSBaptiste Daroussin if (opt->dialogbuilder != NULL) 828*61ba55bcSBaptiste Daroussin exit_error(true, "%s and --yesno without " 829*61ba55bcSBaptiste Daroussin "--and-dialog", opt->name); 830*61ba55bcSBaptiste Daroussin opt->name = "--yesno"; 831*61ba55bcSBaptiste Daroussin opt->dialogbuilder = yesno_builder; 832*61ba55bcSBaptiste Daroussin break; 833*61ba55bcSBaptiste Daroussin default: /* Error */ 834*61ba55bcSBaptiste Daroussin if (opt->ignore == true) 835*61ba55bcSBaptiste Daroussin break; 836*61ba55bcSBaptiste Daroussin exit_error(true, "--ignore to continue"); 837*61ba55bcSBaptiste Daroussin } 838*61ba55bcSBaptiste Daroussin } 839*61ba55bcSBaptiste Daroussin 840*61ba55bcSBaptiste Daroussin return (parsed); 841*61ba55bcSBaptiste Daroussin } 842