[PATCH 11/16] test/move_field.c: Modernize.
"G. Branden Robinson" <[email protected]>
| Newsgroups | gmane.comp.lib.ncurses.bugs |
|---|---|
| Message-ID | <20260815122121.wrjee5c3uc75rslo@illithid> |
Migrate applicable fixes from 20260808's "test/dup_field.c".
---
test/move_field.c | 60 ++++++++++++++++++++++++++++++-----------------
1 file changed, 38 insertions(+), 22 deletions(-)
diff --git a/test/move_field.c b/test/move_field.c
index ebeb90506..3fbafcbeb 100644
--- a/test/move_field.c
+++ b/test/move_field.c
@@ -41,8 +41,11 @@
#define DO_DEMO CTRL('F') /* actual key for toggling demo-mode */
#define MY_DEMO EDIT_FIELD('f') /* internal request-code */
+#define MAX_FIELDS 100
+
static char empty[] = "";
-static FIELD *all_fields[100];
+static FIELD *all_fields[MAX_FIELDS];
+static unsigned num_fields;
/* *INDENT-OFF* */
static struct {
int code;
@@ -120,7 +123,7 @@ my_help_edit_field(void)
free(msgs);
}
-static FIELD *
+static void
make_label(const char *label, int frow, int fcol)
{
FIELD *f = new_field(1, (int) strlen(label), frow, fcol, 0, 0);
@@ -128,20 +131,21 @@ make_label(const char *label, int frow, int fcol)
if (f) {
set_field_buffer(f, 0, label);
set_field_opts(f, (int) ((unsigned) field_opts(f) & (unsigned) ~O_ACTIVE));
+ all_fields[num_fields++] = f;
}
- return (f);
}
-static FIELD *
+static void
make_field(int frow, int fcol, int rows, int cols)
{
FIELD *f = new_field(rows, cols, frow, fcol, 0, 1);
if (f) {
+ set_field_type(f, TYPE_ALPHA, 1);
set_field_back(f, A_UNDERLINE);
init_edit_field(f, empty);
+ all_fields[num_fields++] = f;
}
- return (f);
}
static void
@@ -279,7 +283,7 @@ my_edit_field(FORM *form, int *result)
static FIELD **
copy_fields(FIELD **source, size_t length)
{
- FIELD **target = typeCalloc(FIELD *, length + 1);
+ FIELD **target = typeCalloc(FIELD *, length + 2); /* add one plus NULL */
if (target != NULL)
memcpy(target, source, length * sizeof(FIELD *));
return target;
@@ -313,6 +317,20 @@ do_demo(FORM *form)
int count = field_count(form);
FIELD *my_field = current_field(form);
FIELD **old_fields = form_fields(form);
+ int last_row = LINES;
+ const int SKIP = 8;
+
+ if (my_field == NULL) {
+ beep();
+ } else {
+ int rows, cols, frow, fcol, nrow, nbuf;
+ if (field_info(my_field,
+ &rows, &cols,
+ &frow, &fcol,
+ &nrow, &nbuf) == E_OK) {
+ last_row = rows + frow + SKIP;
+ }
+ }
if (count > 0 && old_fields != NULL && my_field != NULL) {
size_t needed = (size_t) count;
@@ -414,7 +432,10 @@ my_form_driver(FORM *form, int c)
my_help_edit_field();
break;
case MY_DEMO:
- do_demo(form);
+ if (num_fields < MAX_FIELDS - 2)
+ do_demo(form);
+ else
+ beep();
break;
default:
beep();
@@ -428,33 +449,28 @@ demo_forms(void)
{
FORM *form;
int c;
- unsigned n = 0;
const char *fname;
/* describe the form */
- all_fields[n++] = make_label("Sample Form", 0, 15);
+ make_label("Sample Form", 0, 15);
fname = "Last Name";
- all_fields[n++] = make_label(fname, 2, 0);
- all_fields[n++] = make_field(3, 0, 1, 18);
- set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+ make_label(fname, 2, 0);
+ make_field(3, 0, 1, 18);
fname = "First Name";
- all_fields[n++] = make_label(fname, 2, 20);
- all_fields[n++] = make_field(3, 20, 1, 12);
- set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+ make_label(fname, 2, 20);
+ make_field(3, 20, 1, 12);
fname = "Middle Name";
- all_fields[n++] = make_label(fname, 2, 34);
- all_fields[n++] = make_field(3, 34, 1, 12);
- set_field_type(all_fields[n - 1], TYPE_ALPHA, 1);
+ make_label(fname, 2, 34);
+ make_field(3, 34, 1, 12);
fname = "Comments";
- all_fields[n++] = make_label(fname, 5, 0);
- all_fields[n++] = make_field(6, 0, 4, 46);
- init_edit_field(all_fields[n - 1], empty);
+ make_label(fname, 5, 0);
+ make_field(6, 0, 4, 46);
- all_fields[n] = (FIELD *) 0;
+ all_fields[num_fields] = (FIELD *) 0;
if ((form = new_form(all_fields)) != NULL) {
int finished = 0;
--
2.30.2
signature.asc
(application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEh3PWHWjjDgcrENwa0Z6cfXEmbc4FAmqAWcEACgkQ0Z6cfXEm bc64KQ//fA5zxLm7JMtGgFHIX4DaxppiaoNZsNo2jwpRYH/KWqOTlKvHnDSvGpR7 Nw0rtFTQVS/Yn4q5hmlv8sbJLXs4X0iiM91tIc2dE5JFZVWvHEpg3wbv4qzOBMnR DSCkCL878BCiXNcmJaMqvWV4ETT618h8xiKr1XU5SlMJDzWByF4wZAhcdHKTk3LI o2WuRjtUlQagMcw6fTfwtHw78nkDWvk1X8iAOwjJGq6nle2ZpuF48aND671alUJy +7m1WKECj1bdHjqjk+1BeRgyhKhGZdR8cTP/ivh/RJNiroh7g7hxGBsxsc2wj3/t WpaxT4c2XPgndBwLxSr8Ht+SdJ3xF3OVzzpuUGmZN5rjEW3FMc/yurV6D0sYw9vL oEz8y41tQlcJOyOIr0Rv4uHqRYhhZ8Zy5X38RQfJceHt08O5SYHkCxayxkwVDqP7 ujFlOnW+rLuA99zOr6mx0NE5PL8IFXpZ/Y8LIzNvUrKDe9qCDbeW6TelgJtjMq1I dVOC5Q5h6HUsrKjtSXeUWD9p1VVmsJkD15hCTsarARMvBtXjJ2dzG2LyW8MpRR0P Zu6OeYIkUK33gtN184LEfJd8Kr4ygfxPcy5cpphN/GdT2Ktzn44Nnpve7a1D9VB9 VlSF09ANgxTR68vceNEnxQOS7KtO2/VldiXr13QznugiKombqRw= =JgQF -----END PGP SIGNATURE-----