aboutsummaryrefslogtreecommitdiff
path: root/contrib/bsddialog/utility
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bsddialog/utility')
-rw-r--r--contrib/bsddialog/utility/bsddialog.16
-rw-r--r--contrib/bsddialog/utility/util.h1
-rw-r--r--contrib/bsddialog/utility/util_builders.c90
-rw-r--r--contrib/bsddialog/utility/util_cli.c11
4 files changed, 80 insertions, 28 deletions
diff --git a/contrib/bsddialog/utility/bsddialog.1 b/contrib/bsddialog/utility/bsddialog.1
index 0ec2a96952bd..d03a4ce8881a 100644
--- a/contrib/bsddialog/utility/bsddialog.1
+++ b/contrib/bsddialog/utility/bsddialog.1
@@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd June 22, 2025
+.Dd June 24, 2025
.Dt BSDDIALOG 1
.Os
.Sh NAME
@@ -851,6 +851,10 @@ utility first appeared in
was written by
.An Alfonso Sabato Siciliano
.Aq Mt asiciliano@FreeBSD.org .
+.An Braulio Rivas
+.Aq Mt brauliorivas@FreeBSD.org
+implemented the slider dialog for the
+.Dq GSoC 2025 Full Disk Administration Tool for FreeBSD .
.Pp
.Nm bsddialog
provides also a subset of the functionality described in the
diff --git a/contrib/bsddialog/utility/util.h b/contrib/bsddialog/utility/util.h
index d1f7793c9755..5e5cba3f82f7 100644
--- a/contrib/bsddialog/utility/util.h
+++ b/contrib/bsddialog/utility/util.h
@@ -108,6 +108,7 @@ int passwordform_builder(BUILDER_ARGS);
int pause_builder(BUILDER_ARGS);
int radiolist_builder(BUILDER_ARGS);
int rangebox_builder(BUILDER_ARGS);
+int slider_builder(BUILDER_ARGS);
int textbox_builder(BUILDER_ARGS);
int timebox_builder(BUILDER_ARGS);
int treeview_builder(BUILDER_ARGS);
diff --git a/contrib/bsddialog/utility/util_builders.c b/contrib/bsddialog/utility/util_builders.c
index 0a968d4319f9..9784b1a5e563 100644
--- a/contrib/bsddialog/utility/util_builders.c
+++ b/contrib/bsddialog/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);
+}
diff --git a/contrib/bsddialog/utility/util_cli.c b/contrib/bsddialog/utility/util_cli.c
index 01b6fc31f065..7e76ec84654f 100644
--- a/contrib/bsddialog/utility/util_cli.c
+++ b/contrib/bsddialog/utility/util_cli.c
@@ -143,7 +143,8 @@ enum OPTS {
TEXTBOX,
TIMEBOX,
TREEVIEW,
- YESNO
+ YESNO,
+ SLIDER,
};
/* options descriptor */
@@ -264,6 +265,7 @@ static struct option longopts[] = {
{"pause", no_argument, NULL, PAUSE},
{"radiolist", no_argument, NULL, RADIOLIST},
{"rangebox", no_argument, NULL, RANGEBOX},
+ {"slider", no_argument, NULL, SLIDER},
{"textbox", no_argument, NULL, TEXTBOX},
{"timebox", no_argument, NULL, TIMEBOX},
{"treeview", no_argument, NULL, TREEVIEW},
@@ -801,6 +803,13 @@ parseargs(int argc, char **argv, struct bsddialog_conf *conf,
opt->name = "--rangebox";
opt->dialogbuilder = rangebox_builder;
break;
+ case SLIDER:
+ if (opt->dialogbuilder != NULL)
+ exit_error(true, "%s and --slider without "
+ "--and-dialog", opt->name);
+ opt->name = "--slider";
+ opt->dialogbuilder = slider_builder;
+ break;
case TEXTBOX:
if (opt->dialogbuilder != NULL)
exit_error(true, "%s and --textbox without "