xref: /freebsd-src/contrib/bsddialog/utility/util_cli.c (revision 61ba55bcf70f2340f9c943c9571113b3fd8eda69)
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