diff --git a/test/demo_forms.c b/test/demo_forms.c
index 97125e3..62e8c64 100644
--- a/test/demo_forms.c
+++ b/test/demo_forms.c
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2003-2013,2014 Free Software Foundation, Inc.              *
+ * Copyright 2018-2022,2023 Thomas E. Dickey                                *
+ * Copyright 2003-2016,2017 Free Software Foundation, Inc.                  *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -26,43 +27,11 @@
  * authorization.                                                           *
  ****************************************************************************/
 /*
- * $Id: demo_forms.c,v 1.50 2014/10/10 00:38:00 tom Exp $
+ * $Id: demo_forms.c,v 1.63 2023/11/11 00:29:53 tom Exp $
  *
  * Demonstrate a variety of functions from the form library.
  * Thomas Dickey - 2003/4/26
  */
-/*
-TYPE_ENUM			-
-TYPE_REGEXP			-
-dup_field			-
-field_init			-
-field_just			-
-field_term			-
-form_init			-
-form_opts			-
-form_opts_off			-
-form_opts_on			-
-form_request_by_name		-
-form_term			-
-form_userptr			-
-free_fieldtype			-
-link_field			-
-link_fieldtype			-
-move_field			-
-new_page			-
-pos_form_cursor			-
-set_field_init			-
-set_field_term			-
-set_fieldtype_arg		-
-set_fieldtype_choice		-
-set_form_fields			-
-set_form_init			-
-set_form_opts			-
-set_form_page			-
-set_form_term			-
-set_form_userptr		-
-set_max_field			-
-*/
 
 #include <test.priv.h>
 
@@ -149,8 +118,8 @@
 		    char *value = typeRealloc(char, need, prior);
 		    if (value == 0)
 			failed("realloc");
-		    strcat(value, "\n");
-		    strcat(value, buffer);
+		    _nc_STRCAT(value, "\n", need);
+		    _nc_STRCAT(value, buffer, need);
 		    my_data[more - 1].value = value;
 		} else {
 		    more = 0;
@@ -185,7 +154,7 @@
 
     if (f) {
 	set_field_buffer(f, 0, label);
-	set_field_opts(f, (int) ((unsigned) field_opts(f) & ~O_ACTIVE));
+	set_field_opts(f, (int) ((unsigned) field_opts(f) & (unsigned) ~O_ACTIVE));
     }
     return (f);
 }
@@ -227,7 +196,7 @@
 }
 
 static void
-display_form(FORM * f)
+display_form(FORM *f)
 {
     WINDOW *w;
     int rows, cols;
@@ -250,7 +219,7 @@
 }
 
 static void
-erase_form(FORM * f)
+erase_form(FORM *f)
 {
     WINDOW *w = form_win(f);
     WINDOW *s = form_sub(f);
@@ -273,7 +242,7 @@
 #define O_SELECTABLE (O_ACTIVE | O_VISIBLE)
 
 static FIELD *
-another_field(FORM * form, FIELD * field)
+another_field(FORM *form, const FIELD *const field)
 {
     FIELD **f = form_fields(form);
     FIELD *result = 0;
@@ -290,7 +259,7 @@
 }
 
 static int
-my_form_driver(FORM * form, int c)
+my_form_driver(FORM *form, int c)
 {
     static bool insert_mode = TRUE;
     FIELD *field;
@@ -337,12 +306,9 @@
 }
 
 static void
-show_current_field(WINDOW *win, FORM * form)
+show_current_field(WINDOW *win, FORM *form)
 {
     FIELD *field;
-    FIELDTYPE *type;
-    char *buffer;
-    int nbuf;
     int field_rows, field_cols, field_max;
     int currow, curcol;
 
@@ -357,7 +323,11 @@
     if (data_behind(form))
 	waddstr(win, " behind");
     waddch(win, '\n');
+
     if ((field = current_field(form)) != 0) {
+	FIELDTYPE *type;
+	int nbuf;
+
 	wprintw(win, "Page %d%s, Field %d/%d%s:",
 		form_page(form),
 		new_page(field) ? "*" : "",
@@ -413,6 +383,7 @@
 
 	waddstr(win, "\n");
 	for (nbuf = 0; nbuf <= 2; ++nbuf) {
+	    char *buffer;
 	    if ((buffer = field_buffer(field, nbuf)) != 0) {
 		wprintw(win, "buffer %d:", nbuf);
 		(void) wattrset(win, A_REVERSE);
@@ -432,14 +403,14 @@
 static void
 demo_forms(void)
 {
-    WINDOW *w;
     FORM *form;
     FIELD *f[100];		/* will memset to zero */
-    int finished = 0, c;
+    int c;
     unsigned n = 0;
     int pg;
-    WINDOW *also;
     const char *fname;
+    static const char *my_enum[] =
+    {"first", "second", "third", 0};
 
 #ifdef NCURSES_MOUSE_VERSION
     mousemask(ALL_MOUSE_EVENTS, (mmask_t *) 0);
@@ -456,7 +427,8 @@
     memset(f, 0, sizeof(f));
     for (pg = 0; pg < 4; ++pg) {
 	char label[80];
-	sprintf(label, "Sample Form Page %d", pg + 1);
+	_nc_SPRINTF(label, _nc_SLIMIT(sizeof(label))
+		    "Sample Form Page %d", pg + 1);
 	f[n++] = make_label(label, 0, 15);
 	set_new_page(f[n - 1], TRUE);
 
@@ -477,23 +449,30 @@
 	    f[n++] = make_field(fname, 3, 34, 1, 12);
 	    set_field_type(f[n - 1], TYPE_ALPHA, 1);
 	    break;
+
 	case 1:
 	    fname = "Last Name";
 	    f[n++] = make_label(fname, 2, 0);
-	    f[n++] = make_field(fname, 3, 0, 1, 18);
+	    f[n++] = make_field(fname, 3, 0, 1, 12);
 	    set_field_type(f[n - 1], TYPE_ALPHA, 1);
 
 	    fname = "First Name";
-	    f[n++] = make_label(fname, 2, 20);
-	    f[n++] = make_field(fname, 3, 20, 1, 12);
+	    f[n++] = make_label(fname, 2, 14);
+	    f[n++] = make_field(fname, 3, 14, 1, 12);
 	    set_field_type(f[n - 1], TYPE_ALPHA, 1);
 
 	    fname = "MI";
-	    f[n++] = make_label(fname, 2, 34);
-	    f[n++] = make_field(fname, 3, 34, 1, 1);
+	    f[n++] = make_label(fname, 2, 28);
+	    f[n++] = make_field(fname, 3, 28, 1, 1);
 	    set_field_pad(f[n - 1], '?');
 	    set_field_type(f[n - 1], TYPE_ALPHA, 1);
+
+	    fname = "First/Second/Third";
+	    f[n++] = make_label(fname, 2, 32);
+	    f[n++] = make_field(fname, 3, 32, 1, 12);
+	    set_field_type(f[n - 1], TYPE_ENUM, my_enum, 0, 0);
 	    break;
+
 	case 2:
 	    fname = "Host Name";
 	    f[n++] = make_label(fname, 2, 0);
@@ -506,20 +485,24 @@
 	    f[n++] = make_field(fname, 3, 26, 1, 16);
 	    set_field_type(f[n - 1], TYPE_IPV4, 1);
 #endif
-
 	    break;
 
 	case 3:
 	    fname = "Four digits";
 	    f[n++] = make_label(fname, 2, 0);
-	    f[n++] = make_field(fname, 3, 0, 1, 18);
+	    f[n++] = make_field(fname, 3, 0, 1, 10);
 	    set_field_type(f[n - 1], TYPE_INTEGER, 4, 0, 0);
 
 	    fname = "Numeric";
-	    f[n++] = make_label(fname, 2, 20);
-	    f[n++] = make_field(fname, 3, 20, 1, 12);
+	    f[n++] = make_label(fname, 2, 13);
+	    f[n++] = make_field(fname, 3, 13, 1, 12);
 	    set_field_type(f[n - 1], TYPE_NUMERIC, 3, -10000.0, 100000000.0);
 
+	    fname = "Phone number";
+	    f[n++] = make_label(fname, 2, 27);
+	    f[n++] = make_field(fname, 3, 27, 1, 16);
+	    set_field_type(f[n - 1], TYPE_REGEXP,
+			   "^([0-9]-)?[0-9]{3}-[0-9]{3}-[0-9]{4} *$");;
 	    break;
 	}
 
@@ -532,6 +515,9 @@
     f[n] = (FIELD *) 0;
 
     if ((form = new_form(f)) != 0) {
+	WINDOW *w;
+	WINDOW *also;
+	int finished = 0;
 
 	display_form(form);
 
@@ -558,8 +544,7 @@
 	free_form(form);
     }
     for (c = 0; f[c] != 0; c++) {
-	void *ptr = field_userptr(f[c]);
-	free(ptr);
+	free_edit_field(f[c]);
 	free_field(f[c]);
     }
     noraw();
@@ -571,23 +556,28 @@
 }
 
 static void
-usage(void)
+usage(int ok)
 {
     static const char *tbl[] =
     {
 	"Usage: demo_forms [options] [data file]"
 	,""
-	," -d        make fields dynamic"
-	," -j value  justify (1=left, 2=center, 3=right)"
-	," -m value  set maximum size of dynamic fields"
-	," -o value  specify number of offscreen rows in new_field()"
-	," -t value  specify text to fill fields initially"
+	,USAGE_COMMON
+	,"Options:"
+	," -d       make fields dynamic"
+	," -j NUM   justify (1=left, 2=center, 3=right)"
+	," -m NUM   set maximum size of dynamic fields"
+	," -o NUM   specify number of offscreen rows in new_field()"
+	," -t NUM   specify text to fill fields initially"
     };
     unsigned int j;
     for (j = 0; j < SIZEOF(tbl); ++j)
 	fprintf(stderr, "%s\n", tbl[j]);
-    exit(EXIT_FAILURE);
+    ExitProgram(ok ? EXIT_SUCCESS : EXIT_FAILURE);
 }
+/* *INDENT-OFF* */
+VERSION_COMMON()
+/* *INDENT-ON* */
 
 int
 main(int argc, char *argv[])
@@ -596,7 +586,7 @@
 
     setlocale(LC_ALL, "");
 
-    while ((ch = getopt(argc, argv, "dj:m:o:t:")) != -1) {
+    while ((ch = getopt(argc, argv, OPTS_COMMON "dj:m:o:t:")) != -1) {
 	switch (ch) {
 	case 'd':
 	    d_option = TRUE;
@@ -605,7 +595,7 @@
 	    j_value = atoi(optarg);
 	    if (j_value < NO_JUSTIFICATION
 		|| j_value > JUSTIFY_RIGHT)
-		usage();
+		usage(FALSE);
 	    break;
 	case 'm':
 	    m_value = atoi(optarg);
@@ -616,9 +606,12 @@
 	case 't':
 	    t_value = optarg;
 	    break;
+	case OPTS_VERSION:
+	    show_version(argv);
+	    ExitProgram(EXIT_SUCCESS);
 	default:
-	    usage();
-
+	    usage(ch == OPTS_USAGE);
+	    /* NOTREACHED */
 	}
     }
     while (optind < argc) {
