diff --git a/form/llib-lformtw b/form/llib-lformtw
index da8682c..340bf59 100644
--- a/form/llib-lformtw
+++ b/form/llib-lformtw
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2010-2013,2015 Free Software Foundation, Inc.              *
+ * Copyright 2020,2021 Thomas E. Dickey                                     *
+ * Copyright 2010-2015,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            *
@@ -64,11 +65,11 @@
 
 #undef set_fieldtype_arg
 int	set_fieldtype_arg(
-		FIELDTYPE *typ, 
+		FIELDTYPE *typ,
 		void	*(*const make_arg)(
-		va_list	*p1), 
+		va_list	*p1),
 		void	*(*const copy_arg)(
-		const void *p1), 
+		const void *p1),
 		void	(*const free_arg)(
 		void	*p1))
 		{ return(*(int *)0); }
@@ -82,7 +83,7 @@
 
 #undef set_field_fore
 int	set_field_fore(
-		FIELD	*field, 
+		FIELD	*field,
 		chtype	attr)
 		{ return(*(int *)0); }
 
@@ -93,7 +94,7 @@
 
 #undef set_field_back
 int	set_field_back(
-		FIELD	*field, 
+		FIELD	*field,
 		chtype	attr)
 		{ return(*(int *)0); }
 
@@ -106,10 +107,15 @@
 
 #undef set_current_field
 int	set_current_field(
-		FORM	*form, 
+		FORM	*form,
 		FIELD	*field)
 		{ return(*(int *)0); }
 
+#undef unfocus_current_field
+int	unfocus_current_field(
+		FORM	*const form)
+		{ return(*(int *)0); }
+
 #undef current_field
 FIELD	*current_field(
 		const FORM *form)
@@ -127,27 +133,27 @@
 
 #undef _nc_Make_Argument
 TypeArgument *_nc_Make_Argument(
-		const FIELDTYPE *typ, 
-		va_list	*ap, 
+		const FIELDTYPE *typ,
+		va_list	*ap,
 		int	*err)
 		{ return(*(TypeArgument **)0); }
 
 #undef _nc_Copy_Argument
 TypeArgument *_nc_Copy_Argument(
-		const FIELDTYPE *typ, 
-		const TypeArgument *argp, 
+		const FIELDTYPE *typ,
+		const TypeArgument *argp,
 		int	*err)
 		{ return(*(TypeArgument **)0); }
 
 #undef _nc_Free_Argument
 void	_nc_Free_Argument(
-		const FIELDTYPE *typ, 
+		const FIELDTYPE *typ,
 		TypeArgument *argp)
 		{ /* void */ }
 
 #undef _nc_Copy_Type
 NCURSES_BOOL _nc_Copy_Type(
-		FIELD	*dst, 
+		FIELD	*dst,
 		FIELD const *src)
 		{ return(*(NCURSES_BOOL *)0); }
 
@@ -158,11 +164,11 @@
 
 #undef new_field
 FIELD	*new_field(
-		int	rows, 
-		int	cols, 
-		int	frow, 
-		int	fcol, 
-		int	nrow, 
+		int	rows,
+		int	cols,
+		int	frow,
+		int	fcol,
+		int	nrow,
 		int	nbuf)
 		{ return(*(FIELD **)0); }
 
@@ -175,8 +181,8 @@
 
 #undef dup_field
 FIELD	*dup_field(
-		FIELD	*field, 
-		int	frow, 
+		FIELD	*field,
+		int	frow,
 		int	fcol)
 		{ return(*(FIELD **)0); }
 
@@ -184,12 +190,12 @@
 
 #undef set_fieldtype_choice
 int	set_fieldtype_choice(
-		FIELDTYPE *typ, 
+		FIELDTYPE *typ,
 		NCURSES_BOOL (*const next_choice)(
-		FIELD	*p1, 
-		const void *p2), 
+		FIELD	*p1,
+		const void *p2),
 		NCURSES_BOOL (*const prev_choice)(
-		FIELD	*p1, 
+		FIELD	*p1,
 		const void *p2))
 		{ return(*(int *)0); }
 
@@ -197,7 +203,7 @@
 
 #undef link_fieldtype
 FIELDTYPE *link_fieldtype(
-		FIELDTYPE *type1, 
+		FIELDTYPE *type1,
 		FIELDTYPE *type2)
 		{ return(*(FIELDTYPE **)0); }
 
@@ -205,20 +211,20 @@
 
 #undef field_info
 int	field_info(
-		const FIELD *field, 
-		int	*rows, 
-		int	*cols, 
-		int	*frow, 
-		int	*fcol, 
-		int	*nrow, 
+		const FIELD *field,
+		int	*rows,
+		int	*cols,
+		int	*frow,
+		int	*fcol,
+		int	*nrow,
 		int	*nbuf)
 		{ return(*(int *)0); }
 
 #undef dynamic_field_info
 int	dynamic_field_info(
-		const FIELD *field, 
-		int	*drows, 
-		int	*dcols, 
+		const FIELD *field,
+		int	*drows,
+		int	*dcols,
 		int	*maxgrow)
 		{ return(*(int *)0); }
 
@@ -226,7 +232,7 @@
 
 #undef set_field_just
 int	set_field_just(
-		FIELD	*field, 
+		FIELD	*field,
 		int	just)
 		{ return(*(int *)0); }
 
@@ -239,8 +245,8 @@
 
 #undef link_field
 FIELD	*link_field(
-		FIELD	*field, 
-		int	frow, 
+		FIELD	*field,
+		int	frow,
 		int	fcol)
 		{ return(*(FIELD **)0); }
 
@@ -248,7 +254,7 @@
 
 #undef set_max_field
 int	set_max_field(
-		FIELD	*field, 
+		FIELD	*field,
 		int	maxgrow)
 		{ return(*(int *)0); }
 
@@ -256,8 +262,8 @@
 
 #undef move_field
 int	move_field(
-		FIELD	*field, 
-		int	frow, 
+		FIELD	*field,
+		int	frow,
 		int	fcol)
 		{ return(*(int *)0); }
 
@@ -269,10 +275,10 @@
 #undef new_fieldtype
 FIELDTYPE *new_fieldtype(
 		NCURSES_BOOL (*const field_check)(
-		FIELD	*p1, 
-		const void *p2), 
+		FIELD	*p1,
+		const void *p2),
 		NCURSES_BOOL (*const char_check)(
-		int	p1, 
+		int	p1,
 		const void *p2))
 		{ return(*(FIELDTYPE **)0); }
 
@@ -285,7 +291,7 @@
 
 #undef set_field_opts
 int	set_field_opts(
-		FIELD	*field, 
+		FIELD	*field,
 		Field_Options opts)
 		{ return(*(int *)0); }
 
@@ -296,13 +302,13 @@
 
 #undef field_opts_on
 int	field_opts_on(
-		FIELD	*field, 
+		FIELD	*field,
 		Field_Options opts)
 		{ return(*(int *)0); }
 
 #undef field_opts_off
 int	field_opts_off(
-		FIELD	*field, 
+		FIELD	*field,
 		Field_Options opts)
 		{ return(*(int *)0); }
 
@@ -310,7 +316,7 @@
 
 #undef set_field_pad
 int	set_field_pad(
-		FIELD	*field, 
+		FIELD	*field,
 		int	ch)
 		{ return(*(int *)0); }
 
@@ -323,7 +329,7 @@
 
 #undef set_new_page
 int	set_new_page(
-		FIELD	*field, 
+		FIELD	*field,
 		NCURSES_BOOL new_page_flag)
 		{ return(*(int *)0); }
 
@@ -336,7 +342,7 @@
 
 #undef set_field_status
 int	set_field_status(
-		FIELD	*field, 
+		FIELD	*field,
 		NCURSES_BOOL status)
 		{ return(*(int *)0); }
 
@@ -349,8 +355,8 @@
 
 #undef set_field_type
 int	set_field_type(
-		FIELD	*field, 
-		FIELDTYPE *type, 
+		FIELD	*field,
+		FIELDTYPE *type,
 		...)
 		{ return(*(int *)0); }
 
@@ -363,7 +369,7 @@
 
 #undef set_field_userptr
 int	set_field_userptr(
-		FIELD	*field, 
+		FIELD	*field,
 		void	*usrptr)
 		{ return(*(int *)0); }
 
@@ -398,7 +404,7 @@
 
 #undef new_form_sp
 FORM	*new_form_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		FIELD	**fields)
 		{ return(*(FORM **)0); }
 
@@ -414,7 +420,7 @@
 
 #undef set_form_fields
 int	set_form_fields(
-		FORM	*form, 
+		FORM	*form,
 		FIELD	**fields)
 		{ return(*(int *)0); }
 
@@ -432,8 +438,8 @@
 
 #undef _nc_get_fieldbuffer
 void	_nc_get_fieldbuffer(
-		FORM	*form, 
-		FIELD	*field, 
+		FORM	*form,
+		FIELD	*field,
 		cchar_t	*buf)
 		{ /* void */ }
 
@@ -454,13 +460,18 @@
 
 #undef _nc_Synchronize_Options
 int	_nc_Synchronize_Options(
-		FIELD	*field, 
+		FIELD	*field,
 		Field_Options newopts)
 		{ return(*(int *)0); }
 
+#undef _nc_Unset_Current_Field
+void	_nc_Unset_Current_Field(
+		FORM	*form)
+		{ /* void */ }
+
 #undef _nc_Set_Current_Field
 int	_nc_Set_Current_Field(
-		FORM	*form, 
+		FORM	*form,
 		FIELD	*newfield)
 		{ return(*(int *)0); }
 
@@ -476,47 +487,47 @@
 
 #undef _nc_Set_Form_Page
 int	_nc_Set_Form_Page(
-		FORM	*form, 
-		int	page, 
+		FORM	*form,
+		int	page,
 		FIELD	*field)
 		{ return(*(int *)0); }
 
 typedef struct
 {
-  int keycode; 
-  int (*cmd) (FORM *); 
+  int keycode;
+  int (*cmd) (FORM *);
 }
 Binding_Info;
 
 #undef form_driver
 int	form_driver(
-		FORM	*form, 
+		FORM	*form,
 		int	c)
 		{ return(*(int *)0); }
 
 #undef form_driver_w
 int	form_driver_w(
-		FORM	*form, 
-		int	type, 
+		FORM	*form,
+		int	type,
 		wchar_t	c)
 		{ return(*(int *)0); }
 
 #undef set_field_buffer
 int	set_field_buffer(
-		FIELD	*field, 
-		int	buffer, 
+		FIELD	*field,
+		int	buffer,
 		const char *value)
 		{ return(*(int *)0); }
 
 #undef field_buffer
 char	*field_buffer(
-		const FIELD *field, 
+		const FIELD *field,
 		int	buffer)
 		{ return(*(char **)0); }
 
 #undef _nc_Widen_String
 wchar_t	*_nc_Widen_String(
-		char	*source, 
+		char	*source,
 		int	*lengthp)
 		{ return(*(wchar_t **)0); }
 
@@ -524,7 +535,7 @@
 
 #undef set_field_init
 int	set_field_init(
-		FORM	*form, 
+		FORM	*form,
 		Form_Hook func)
 		{ return(*(int *)0); }
 
@@ -535,7 +546,7 @@
 
 #undef set_field_term
 int	set_field_term(
-		FORM	*form, 
+		FORM	*form,
 		Form_Hook func)
 		{ return(*(int *)0); }
 
@@ -546,7 +557,7 @@
 
 #undef set_form_init
 int	set_form_init(
-		FORM	*form, 
+		FORM	*form,
 		Form_Hook func)
 		{ return(*(int *)0); }
 
@@ -557,7 +568,7 @@
 
 #undef set_form_term
 int	set_form_term(
-		FORM	*form, 
+		FORM	*form,
 		Form_Hook func)
 		{ return(*(int *)0); }
 
@@ -570,7 +581,7 @@
 
 #undef set_form_opts
 int	set_form_opts(
-		FORM	*form, 
+		FORM	*form,
 		Form_Options opts)
 		{ return(*(int *)0); }
 
@@ -581,13 +592,13 @@
 
 #undef form_opts_on
 int	form_opts_on(
-		FORM	*form, 
+		FORM	*form,
 		Form_Options opts)
 		{ return(*(int *)0); }
 
 #undef form_opts_off
 int	form_opts_off(
-		FORM	*form, 
+		FORM	*form,
 		Form_Options opts)
 		{ return(*(int *)0); }
 
@@ -595,7 +606,7 @@
 
 #undef set_form_page
 int	set_form_page(
-		FORM	*form, 
+		FORM	*form,
 		int	page)
 		{ return(*(int *)0); }
 
@@ -632,8 +643,8 @@
 
 #undef scale_form
 int	scale_form(
-		const FORM *form, 
-		int	*rows, 
+		const FORM *form,
+		int	*rows,
 		int	*cols)
 		{ return(*(int *)0); }
 
@@ -641,7 +652,7 @@
 
 #undef set_form_sub
 int	set_form_sub(
-		FORM	*form, 
+		FORM	*form,
 		WINDOW	*win)
 		{ return(*(int *)0); }
 
@@ -654,7 +665,7 @@
 
 #undef set_form_userptr
 int	set_form_userptr(
-		FORM	*form, 
+		FORM	*form,
 		void	*usrptr)
 		{ return(*(int *)0); }
 
@@ -667,7 +678,7 @@
 
 #undef set_form_win
 int	set_form_win(
-		FORM	*form, 
+		FORM	*form,
 		WINDOW	*win)
 		{ return(*(int *)0); }
 
@@ -737,38 +748,38 @@
 #undef _nc_generic_fieldtype
 FIELDTYPE *_nc_generic_fieldtype(
 		NCURSES_BOOL (*const field_check)(
-		FORM	*p1, 
-		FIELD	*p2, 
-		const void *p3), 
+		FORM	*p1,
+		FIELD	*p2,
+		const void *p3),
 		NCURSES_BOOL (*const char_check)(
-		int	p1, 
-		FORM	*p2, 
-		FIELD	*p3, 
-		const void *p4), 
+		int	p1,
+		FORM	*p2,
+		FIELD	*p3,
+		const void *p4),
 		NCURSES_BOOL (*const next)(
-		FORM	*p1, 
-		FIELD	*p2, 
-		const void *p3), 
+		FORM	*p1,
+		FIELD	*p2,
+		const void *p3),
 		NCURSES_BOOL (*const prev)(
-		FORM	*p1, 
-		FIELD	*p2, 
-		const void *p3), 
+		FORM	*p1,
+		FIELD	*p2,
+		const void *p3),
 		void	(*freecallback)(
 		void	*p1))
 		{ return(*(FIELDTYPE **)0); }
 
 #undef _nc_set_generic_fieldtype
 int	_nc_set_generic_fieldtype(
-		FIELD	*field, 
-		FIELDTYPE *ftyp, 
+		FIELD	*field,
+		FIELDTYPE *ftyp,
 		int	(*argiterator)(
 		void	**p1))
 		{ return(*(int *)0); }
 
 #undef _nc_form_cursor
 WINDOW	*_nc_form_cursor(
-		const FORM *form, 
-		int	*pRow, 
+		const FORM *form,
+		int	*pRow,
 		int	*pCol)
 		{ return(*(WINDOW **)0); }
 
@@ -808,8 +819,6 @@
 
 /* ./fty_num.c */
 
-#include <locale.h>
-
 typedef struct
   {
     int precision;
@@ -836,8 +845,6 @@
 
 /* ./fty_regex.c */
 
-#include <regex.h>
-
 typedef struct
   {
     regex_t *pRegExp;
