[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-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.