aboutsummaryrefslogtreecommitdiff
path: root/utility/util_builders.c
diff options
context:
space:
mode:
Diffstat (limited to 'utility/util_builders.c')
-rw-r--r--utility/util_builders.c90
1 files changed, 64 insertions, 26 deletions
diff --git a/utility/util_builders.c b/utility/util_builders.c
index 0a968d4319f9..9784b1a5e563 100644
--- a/utility/util_builders.c
+++ b/utility/util_builders.c
@@ -608,12 +608,12 @@ int form_builder(BUILDER_ARGS)
exit_error(false, "cannot allocate memory for form items");
j = 0;
for (i = 0; i < nitems; i++) {
- items[i].label = argv[j++];
+ items[i].label = argv[j++];
items[i].ylabel = (unsigned int)strtoul(argv[j++], NULL, 10);
items[i].xlabel = (unsigned int)strtoul(argv[j++], NULL, 10);
- items[i].init = argv[j++];
- items[i].yfield = (unsigned int)strtoul(argv[j++], NULL, 10);
- items[i].xfield = (unsigned int)strtoul(argv[j++], NULL, 10);
+ items[i].init = argv[j++];
+ items[i].yfield = (unsigned int)strtoul(argv[j++], NULL, 10);
+ items[i].xfield = (unsigned int)strtoul(argv[j++], NULL, 10);
fieldlen = (int)strtol(argv[j++], NULL, 10);
if (fieldlen == 0)
@@ -651,15 +651,15 @@ int inputbox_builder(BUILDER_ARGS)
if (argc > 1)
error_args("--inputbox", argc - 1, argv + 1);
- item.label = "";
- item.ylabel = 0;
- item.xlabel = 0;
- item.init = argc > 0 ? argv[0] : "";
- item.yfield = 0;
- item.xfield = 0;
+ item.label = "";
+ item.ylabel = 0;
+ item.xlabel = 0;
+ item.init = argc > 0 ? argv[0] : "";
+ item.yfield = 0;
+ item.xfield = 0;
item.fieldlen = 1;
item.maxvaluelen = opt->max_input_form;
- item.flags = BSDDIALOG_FIELDNOCOLOR;
+ item.flags = BSDDIALOG_FIELDNOCOLOR;
item.flags |= BSDDIALOG_FIELDCURSOREND;
item.flags |= BSDDIALOG_FIELDEXTEND;
item.bottomdesc = "";
@@ -691,12 +691,12 @@ int mixedform_builder(BUILDER_ARGS)
exit_error(false, "cannot allocate memory for form items");
j = 0;
for (i = 0; i < nitems; i++) {
- items[i].label = argv[j++];
+ items[i].label = argv[j++];
items[i].ylabel = (unsigned int)strtoul(argv[j++], NULL, 10);
items[i].xlabel = (unsigned int)strtoul(argv[j++], NULL, 10);
- items[i].init = argv[j++];
- items[i].yfield = (unsigned int)strtoul(argv[j++], NULL, 10);
- items[i].xfield = (unsigned int)strtoul(argv[j++], NULL, 10);
+ items[i].init = argv[j++];
+ items[i].yfield = (unsigned int)strtoul(argv[j++], NULL, 10);
+ items[i].xfield = (unsigned int)strtoul(argv[j++], NULL, 10);
fieldlen = (int)strtol(argv[j++], NULL, 10);
if (fieldlen == 0)
items[i].fieldlen = strcols(items[i].init);
@@ -737,13 +737,13 @@ int passwordbox_builder(BUILDER_ARGS)
if (argc > 1)
error_args("--passwordbox", argc - 1, argv + 1);
- item.label = "";
- item.ylabel = 0;
- item.xlabel = 0;
- item.init = argc > 0 ? argv[0] : "";
- item.yfield = 0;
- item.xfield = 0;
- item.fieldlen = 1;
+ item.label = "";
+ item.ylabel = 0;
+ item.xlabel = 0;
+ item.init = argc > 0 ? argv[0] : "";
+ item.yfield = 0;
+ item.xfield = 0;
+ item.fieldlen = 1;
item.maxvaluelen = opt->max_input_form;
item.flags = BSDDIALOG_FIELDHIDDEN;
item.flags |= BSDDIALOG_FIELDNOCOLOR;
@@ -779,12 +779,12 @@ int passwordform_builder(BUILDER_ARGS)
exit_error(false, "cannot allocate memory for form items");
j = 0;
for (i = 0; i < nitems; i++) {
- items[i].label = argv[j++];
+ items[i].label = argv[j++];
items[i].ylabel = (unsigned int)strtoul(argv[j++], NULL, 10);
items[i].xlabel = (unsigned int)strtoul(argv[j++], NULL, 10);
- items[i].init = argv[j++];
- items[i].yfield = (unsigned int)strtoul(argv[j++], NULL, 10);
- items[i].xfield = (unsigned int)strtoul(argv[j++], NULL, 10);
+ items[i].init = argv[j++];
+ items[i].yfield = (unsigned int)strtoul(argv[j++], NULL, 10);
+ items[i].xfield = (unsigned int)strtoul(argv[j++], NULL, 10);
fieldlen = (int)strtol(argv[j++], NULL, 10);
items[i].fieldlen = abs(fieldlen);
@@ -809,3 +809,41 @@ int passwordform_builder(BUILDER_ARGS)
return (output);
}
+
+int slider_builder(BUILDER_ARGS)
+{
+ bool resize;
+ int output;
+ char *unit;
+ unsigned int i, nblocks;
+ unsigned long length, start, end, (*blocks)[2];
+
+ if (argc < 5)
+ exit_error(true, "--slider requires: <unit> <lenght> <start> <end> <resize>");
+ unit = argv[0];
+ length = strtoul(argv[1], NULL, 10);
+ start = strtoul(argv[2], NULL, 10);
+ end = strtoul(argv[3], NULL, 10);
+ resize = strtoul(argv[4], NULL, 10) == 0 ? false : true;
+
+ argc -= 5;
+ argv += 5;
+ if (argc & 1)
+ exit_error(true, "bad [<start_block> <end_block> ...] number");
+ nblocks = argc / 2;
+ if ((blocks = malloc(nblocks * sizeof(*blocks))) == NULL)
+ exit_error(false, "Cannot allocate memory for blocks");
+ for (i = 0; i < nblocks; i++) {
+ blocks[i][0] = strtoul(argv[2 * i], NULL, 10);
+ blocks[i][1] = strtoul(argv[2 * i + 1], NULL, 10);
+ }
+
+ output = bsddialog_slider(conf, text, rows, cols, unit, length, &start, &end,
+ resize, nblocks, blocks);
+ free(blocks);
+
+ if (output != BSDDIALOG_ERROR)
+ dprintf(opt->output_fd, "%lu %lu", start, end);
+
+ return (output);
+}