diff options
Diffstat (limited to 'contrib/bsddialog/utility')
| -rw-r--r-- | contrib/bsddialog/utility/bsddialog.1 | 6 | ||||
| -rw-r--r-- | contrib/bsddialog/utility/util.h | 1 | ||||
| -rw-r--r-- | contrib/bsddialog/utility/util_builders.c | 90 | ||||
| -rw-r--r-- | contrib/bsddialog/utility/util_cli.c | 11 |
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 " |
