diff --git a/ncurses/llib-lncursestw b/ncurses/llib-lncursestw
index 9871dcc..3aa57ee 100644
--- a/ncurses/llib-lncursestw
+++ b/ncurses/llib-lncursestw
@@ -1,5 +1,6 @@
 /****************************************************************************
- * Copyright (c) 2009-2013,2015 Free Software Foundation, Inc.              *
+ * Copyright 2018-2022,2023 Thomas E. Dickey                                *
+ * Copyright 2009-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            *
@@ -69,7 +70,7 @@
 
 #undef _nc_make_oldhash_sp
 void	_nc_make_oldhash_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	i)
 		{ /* void */ }
 
@@ -80,16 +81,16 @@
 
 #undef _nc_scroll_oldhash_sp
 void	_nc_scroll_oldhash_sp(
-		SCREEN	*sp, 
-		int	n, 
-		int	top, 
+		SCREEN	*sp,
+		int	n,
+		int	top,
 		int	bot)
 		{ /* void */ }
 
 #undef _nc_scroll_oldhash
 void	_nc_scroll_oldhash(
-		int	n, 
-		int	top, 
+		int	n,
+		int	top,
 		int	bot)
 		{ /* void */ }
 
@@ -97,31 +98,31 @@
 
 #undef _nc_render
 cchar_t	_nc_render(
-		WINDOW	*win, 
+		WINDOW	*win,
 		cchar_t	ch)
 		{ return(*(cchar_t *)0); }
 
 #undef _nc_build_wch
 int	_nc_build_wch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		cchar_t	*ch)
 		{ return(*(int *)0); }
 
 #undef _nc_waddch_nosync
 int	_nc_waddch_nosync(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t c)
 		{ return(*(int *)0); }
 
 #undef waddch
 int	waddch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const chtype ch)
 		{ return(*(int *)0); }
 
 #undef wechochar
 int	wechochar(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const chtype ch)
 		{ return(*(int *)0); }
 
@@ -129,15 +130,15 @@
 
 #undef waddnstr
 int	waddnstr(
-		WINDOW	*win, 
-		const char *astr, 
+		WINDOW	*win,
+		const char *astr,
 		int	n)
 		{ return(*(int *)0); }
 
 #undef waddchnstr
 int	waddchnstr(
-		WINDOW	*win, 
-		const chtype *astr, 
+		WINDOW	*win,
+		const chtype *astr,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -148,15 +149,15 @@
 
 #undef wadd_wchnstr
 int	wadd_wchnstr(
-		WINDOW	*win, 
-		const cchar_t *astr, 
+		WINDOW	*win,
+		const cchar_t *astr,
 		int	n)
 		{ return(*(int *)0); }
 
 #undef waddnwstr
 int	waddnwstr(
-		WINDOW	*win, 
-		const wchar_t *str, 
+		WINDOW	*win,
+		const wchar_t *str,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -175,25 +176,25 @@
 
 #undef wbkgrndset
 void	wbkgrndset(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t *ch)
 		{ /* void */ }
 
 #undef wbkgdset
 void	wbkgdset(
-		WINDOW	*win, 
+		WINDOW	*win,
 		chtype	ch)
 		{ /* void */ }
 
 #undef wbkgrnd
 int	wbkgrnd(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t *ch)
 		{ return(*(int *)0); }
 
 #undef wbkgd
 int	wbkgd(
-		WINDOW	*win, 
+		WINDOW	*win,
 		chtype	ch)
 		{ return(*(int *)0); }
 
@@ -201,14 +202,14 @@
 
 #undef wborder
 int	wborder(
-		WINDOW	*win, 
-		chtype	ls, 
-		chtype	rs, 
-		chtype	ts, 
-		chtype	bs, 
-		chtype	tl, 
-		chtype	tr, 
-		chtype	bl, 
+		WINDOW	*win,
+		chtype	ls,
+		chtype	rs,
+		chtype	ts,
+		chtype	bs,
+		chtype	tl,
+		chtype	tr,
+		chtype	bl,
 		chtype	br)
 		{ return(*(int *)0); }
 
@@ -216,10 +217,10 @@
 
 #undef wchgat
 int	wchgat(
-		WINDOW	*win, 
-		int	n, 
-		attr_t	attr, 
-		short	color, 
+		WINDOW	*win,
+		int	n,
+		attr_t	attr,
+		short	pair_arg,
 		const void *opts)
 		{ return(*(int *)0); }
 
@@ -234,7 +235,7 @@
 
 #undef clearok
 int	clearok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
@@ -280,35 +281,64 @@
 int	start_color(void)
 		{ return(*(int *)0); }
 
+#undef _nc_change_pair
+void	_nc_change_pair(
+		SCREEN	*sp,
+		int	pair)
+		{ /* void */ }
+
+#undef _nc_reserve_pairs
+void	_nc_reserve_pairs(
+		SCREEN	*sp,
+		int	want)
+		{ /* void */ }
+
+#undef _nc_init_pair
+int	_nc_init_pair(
+		SCREEN	*sp,
+		int	pair,
+		int	f,
+		int	b)
+		{ return(*(int *)0); }
+
 #undef init_pair_sp
 int	init_pair_sp(
-		SCREEN	*sp, 
-		short	pair, 
-		short	f, 
+		SCREEN	*sp,
+		short	pair,
+		short	f,
 		short	b)
 		{ return(*(int *)0); }
 
 #undef init_pair
 int	init_pair(
-		short	pair, 
-		short	f, 
+		short	pair,
+		short	f,
 		short	b)
 		{ return(*(int *)0); }
 
+#undef _nc_init_color
+int	_nc_init_color(
+		SCREEN	*sp,
+		int	color,
+		int	r,
+		int	g,
+		int	b)
+		{ return(*(int *)0); }
+
 #undef init_color_sp
 int	init_color_sp(
-		SCREEN	*sp, 
-		short	color, 
-		short	r, 
-		short	g, 
+		SCREEN	*sp,
+		short	color,
+		short	r,
+		short	g,
 		short	b)
 		{ return(*(int *)0); }
 
 #undef init_color
 int	init_color(
-		short	color, 
-		short	r, 
-		short	g, 
+		short	color,
+		short	r,
+		short	g,
 		short	b)
 		{ return(*(int *)0); }
 
@@ -332,59 +362,140 @@
 
 #undef color_content_sp
 int	color_content_sp(
-		SCREEN	*sp, 
-		short	color, 
-		short	*r, 
-		short	*g, 
+		SCREEN	*sp,
+		short	color,
+		short	*r,
+		short	*g,
 		short	*b)
 		{ return(*(int *)0); }
 
 #undef color_content
 int	color_content(
-		short	color, 
-		short	*r, 
-		short	*g, 
+		short	color,
+		short	*r,
+		short	*g,
 		short	*b)
 		{ return(*(int *)0); }
 
+#undef _nc_pair_content
+int	_nc_pair_content(
+		SCREEN	*sp,
+		int	pair,
+		int	*f,
+		int	*b)
+		{ return(*(int *)0); }
+
 #undef pair_content_sp
 int	pair_content_sp(
-		SCREEN	*sp, 
-		short	pair, 
-		short	*f, 
+		SCREEN	*sp,
+		short	pair,
+		short	*f,
 		short	*b)
 		{ return(*(int *)0); }
 
 #undef pair_content
 int	pair_content(
-		short	pair, 
-		short	*f, 
+		short	pair,
+		short	*f,
 		short	*b)
 		{ return(*(int *)0); }
 
 #undef _nc_do_color_sp
 void	_nc_do_color_sp(
-		SCREEN	*sp, 
-		int	old_pair, 
-		int	pair, 
-		int	reverse, 
+		SCREEN	*sp,
+		int	old_pair,
+		int	pair,
+		int	reverse,
 		NCURSES_OUTC_sp outc)
 		{ /* void */ }
 
 #undef _nc_do_color
 void	_nc_do_color(
-		int	old_pair, 
-		int	pair, 
-		int	reverse, 
+		int	old_pair,
+		int	pair,
+		int	reverse,
 		NCURSES_OUTC outc)
 		{ /* void */ }
 
+#undef init_extended_pair_sp
+int	init_extended_pair_sp(
+		SCREEN	*sp,
+		int	pair,
+		int	f,
+		int	b)
+		{ return(*(int *)0); }
+
+#undef init_extended_color_sp
+int	init_extended_color_sp(
+		SCREEN	*sp,
+		int	color,
+		int	r,
+		int	g,
+		int	b)
+		{ return(*(int *)0); }
+
+#undef extended_color_content_sp
+int	extended_color_content_sp(
+		SCREEN	*sp,
+		int	color,
+		int	*r,
+		int	*g,
+		int	*b)
+		{ return(*(int *)0); }
+
+#undef extended_pair_content_sp
+int	extended_pair_content_sp(
+		SCREEN	*sp,
+		int	pair,
+		int	*f,
+		int	*b)
+		{ return(*(int *)0); }
+
+#undef reset_color_pairs_sp
+void	reset_color_pairs_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
+#undef init_extended_pair
+int	init_extended_pair(
+		int	pair,
+		int	f,
+		int	b)
+		{ return(*(int *)0); }
+
+#undef init_extended_color
+int	init_extended_color(
+		int	color,
+		int	r,
+		int	g,
+		int	b)
+		{ return(*(int *)0); }
+
+#undef extended_color_content
+int	extended_color_content(
+		int	color,
+		int	*r,
+		int	*g,
+		int	*b)
+		{ return(*(int *)0); }
+
+#undef extended_pair_content
+int	extended_pair_content(
+		int	pair,
+		int	*f,
+		int	*b)
+		{ return(*(int *)0); }
+
+#undef reset_color_pairs
+void	reset_color_pairs(void)
+		{ /* void */ }
+
 /* ./base/lib_colorset.c */
 
 #undef wcolor_set
 int	wcolor_set(
-		WINDOW	*win, 
-		short	color_pair_number, 
+		WINDOW	*win,
+		short	pair_arg,
 		void	*opts)
 		{ return(*(int *)0); }
 
@@ -454,1316 +565,1302 @@
 /* ./lib_gen.c */
 
 #undef addch
-int	(addch)(
+int	addch(
 		const chtype z)
 		{ return(*(int *)0); }
 
 #undef addchnstr
-int	(addchnstr)(
-		const chtype *a1, 
+int	addchnstr(
+		const chtype *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef addchstr
-int	(addchstr)(
+int	addchstr(
 		const chtype *z)
 		{ return(*(int *)0); }
 
 #undef addnstr
-int	(addnstr)(
-		const char *a1, 
+int	addnstr(
+		const char *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef addstr
-int	(addstr)(
+int	addstr(
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef attroff
-int	(attroff)(
+int	attroff(
 		NCURSES_ATTR_T	z)
 		{ return(*(int *)0); }
 
 #undef attron
-int	(attron)(
+int	attron(
 		NCURSES_ATTR_T	z)
 		{ return(*(int *)0); }
 
 #undef attrset
-int	(attrset)(
+int	attrset(
 		NCURSES_ATTR_T	z)
 		{ return(*(int *)0); }
 
 #undef attr_get
-int	(attr_get)(
-		attr_t	*a1, 
-		short	*a2, 
+int	attr_get(
+		attr_t	*a1,
+		short	*a2,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef attr_off
-int	(attr_off)(
-		attr_t	a1, 
+int	attr_off(
+		attr_t	a1,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef attr_on
-int	(attr_on)(
-		attr_t	a1, 
+int	attr_on(
+		attr_t	a1,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef attr_set
-int	(attr_set)(
-		attr_t	a1, 
-		short	a2, 
+int	attr_set(
+		attr_t	a1,
+		short	a2,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef bkgd
-int	(bkgd)(
+int	bkgd(
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef bkgdset
-void	(bkgdset)(
+void	bkgdset(
 		chtype	z)
 		{ /* void */ }
 
 #undef border
-int	(border)(
-		chtype	a1, 
-		chtype	a2, 
-		chtype	a3, 
-		chtype	a4, 
-		chtype	a5, 
-		chtype	a6, 
-		chtype	a7, 
+int	border(
+		chtype	a1,
+		chtype	a2,
+		chtype	a3,
+		chtype	a4,
+		chtype	a5,
+		chtype	a6,
+		chtype	a7,
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef box
-int	(box)(
-		WINDOW	*a1, 
-		chtype	a2, 
+int	box(
+		WINDOW	*a1,
+		chtype	a2,
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef chgat
-int	(chgat)(
-		int	a1, 
-		attr_t	a2, 
-		short	a3, 
+int	chgat(
+		int	a1,
+		attr_t	a2,
+		short	a3,
 		const void *z)
 		{ return(*(int *)0); }
 
 #undef clear
-int	(clear)(void)
+int	clear(void)
 		{ return(*(int *)0); }
 
 #undef clrtobot
-int	(clrtobot)(void)
+int	clrtobot(void)
 		{ return(*(int *)0); }
 
 #undef clrtoeol
-int	(clrtoeol)(void)
+int	clrtoeol(void)
 		{ return(*(int *)0); }
 
 #undef color_set
-int	(color_set)(
-		short	a1, 
+int	color_set(
+		short	a1,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef COLOR_PAIR
-int	(COLOR_PAIR)(
+int	COLOR_PAIR(
 		int	z)
 		{ return(*(int *)0); }
 
 #undef delch
-int	(delch)(void)
+int	delch(void)
 		{ return(*(int *)0); }
 
 #undef deleteln
-int	(deleteln)(void)
+int	deleteln(void)
 		{ return(*(int *)0); }
 
 #undef echochar
-int	(echochar)(
+int	echochar(
 		const chtype z)
 		{ return(*(int *)0); }
 
 #undef erase
-int	(erase)(void)
+int	erase(void)
 		{ return(*(int *)0); }
 
 #undef getbkgd
-chtype	(getbkgd)(
+chtype	getbkgd(
 		WINDOW	*z)
 		{ return(*(chtype *)0); }
 
 #undef getch
-int	(getch)(void)
+int	getch(void)
 		{ return(*(int *)0); }
 
 #undef getnstr
-int	(getnstr)(
-		char	*a1, 
+int	getnstr(
+		char	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef getstr
-int	(getstr)(
+int	getstr(
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef hline
-int	(hline)(
-		chtype	a1, 
+int	hline(
+		chtype	a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef inch
-chtype	(inch)(void)
+chtype	inch(void)
 		{ return(*(chtype *)0); }
 
 #undef inchnstr
-int	(inchnstr)(
-		chtype	*a1, 
+int	inchnstr(
+		chtype	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef inchstr
-int	(inchstr)(
+int	inchstr(
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef innstr
-int	(innstr)(
-		char	*a1, 
+int	innstr(
+		char	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef insch
-int	(insch)(
+int	insch(
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef insdelln
-int	(insdelln)(
+int	insdelln(
 		int	z)
 		{ return(*(int *)0); }
 
 #undef insertln
-int	(insertln)(void)
+int	insertln(void)
 		{ return(*(int *)0); }
 
 #undef insnstr
-int	(insnstr)(
-		const char *a1, 
+int	insnstr(
+		const char *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef insstr
-int	(insstr)(
+int	insstr(
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef instr
-int	(instr)(
+int	instr(
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef move
-int	(move)(
-		int	a1, 
+int	move(
+		int	a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvaddch
-int	(mvaddch)(
-		int	a1, 
-		int	a2, 
+int	mvaddch(
+		int	a1,
+		int	a2,
 		const chtype z)
 		{ return(*(int *)0); }
 
 #undef mvaddchnstr
-int	(mvaddchnstr)(
-		int	a1, 
-		int	a2, 
-		const chtype *a3, 
+int	mvaddchnstr(
+		int	a1,
+		int	a2,
+		const chtype *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvaddchstr
-int	(mvaddchstr)(
-		int	a1, 
-		int	a2, 
+int	mvaddchstr(
+		int	a1,
+		int	a2,
 		const chtype *z)
 		{ return(*(int *)0); }
 
 #undef mvaddnstr
-int	(mvaddnstr)(
-		int	a1, 
-		int	a2, 
-		const char *a3, 
+int	mvaddnstr(
+		int	a1,
+		int	a2,
+		const char *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvaddstr
-int	(mvaddstr)(
-		int	a1, 
-		int	a2, 
+int	mvaddstr(
+		int	a1,
+		int	a2,
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef mvchgat
-int	(mvchgat)(
-		int	a1, 
-		int	a2, 
-		int	a3, 
-		attr_t	a4, 
-		short	a5, 
+int	mvchgat(
+		int	a1,
+		int	a2,
+		int	a3,
+		attr_t	a4,
+		short	a5,
 		const void *z)
 		{ return(*(int *)0); }
 
 #undef mvdelch
-int	(mvdelch)(
-		int	a1, 
+int	mvdelch(
+		int	a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvgetch
-int	(mvgetch)(
-		int	a1, 
+int	mvgetch(
+		int	a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvgetnstr
-int	(mvgetnstr)(
-		int	a1, 
-		int	a2, 
-		char	*a3, 
+int	mvgetnstr(
+		int	a1,
+		int	a2,
+		char	*a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvgetstr
-int	(mvgetstr)(
-		int	a1, 
-		int	a2, 
+int	mvgetstr(
+		int	a1,
+		int	a2,
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef mvhline
-int	(mvhline)(
-		int	a1, 
-		int	a2, 
-		chtype	a3, 
+int	mvhline(
+		int	a1,
+		int	a2,
+		chtype	a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvinch
-chtype	(mvinch)(
-		int	a1, 
+chtype	mvinch(
+		int	a1,
 		int	z)
 		{ return(*(chtype *)0); }
 
 #undef mvinchnstr
-int	(mvinchnstr)(
-		int	a1, 
-		int	a2, 
-		chtype	*a3, 
+int	mvinchnstr(
+		int	a1,
+		int	a2,
+		chtype	*a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvinchstr
-int	(mvinchstr)(
-		int	a1, 
-		int	a2, 
+int	mvinchstr(
+		int	a1,
+		int	a2,
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef mvinnstr
-int	(mvinnstr)(
-		int	a1, 
-		int	a2, 
-		char	*a3, 
+int	mvinnstr(
+		int	a1,
+		int	a2,
+		char	*a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvinsch
-int	(mvinsch)(
-		int	a1, 
-		int	a2, 
+int	mvinsch(
+		int	a1,
+		int	a2,
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef mvinsnstr
-int	(mvinsnstr)(
-		int	a1, 
-		int	a2, 
-		const char *a3, 
+int	mvinsnstr(
+		int	a1,
+		int	a2,
+		const char *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvinsstr
-int	(mvinsstr)(
-		int	a1, 
-		int	a2, 
+int	mvinsstr(
+		int	a1,
+		int	a2,
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef mvinstr
-int	(mvinstr)(
-		int	a1, 
-		int	a2, 
+int	mvinstr(
+		int	a1,
+		int	a2,
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef mvvline
-int	(mvvline)(
-		int	a1, 
-		int	a2, 
-		chtype	a3, 
+int	mvvline(
+		int	a1,
+		int	a2,
+		chtype	a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwaddch
-int	(mvwaddch)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwaddch(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const chtype z)
 		{ return(*(int *)0); }
 
 #undef mvwaddchnstr
-int	(mvwaddchnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const chtype *a4, 
+int	mvwaddchnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const chtype *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwaddchstr
-int	(mvwaddchstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwaddchstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const chtype *z)
 		{ return(*(int *)0); }
 
 #undef mvwaddnstr
-int	(mvwaddnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const char *a4, 
+int	mvwaddnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const char *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwaddstr
-int	(mvwaddstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwaddstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef mvwchgat
-int	(mvwchgat)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		int	a4, 
-		attr_t	a5, 
-		short	a6, 
+int	mvwchgat(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		int	a4,
+		attr_t	a5,
+		short	a6,
 		const void *z)
 		{ return(*(int *)0); }
 
 #undef mvwdelch
-int	(mvwdelch)(
-		WINDOW	*a1, 
-		int	a2, 
+int	mvwdelch(
+		WINDOW	*a1,
+		int	a2,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwgetch
-int	(mvwgetch)(
-		WINDOW	*a1, 
-		int	a2, 
+int	mvwgetch(
+		WINDOW	*a1,
+		int	a2,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwgetnstr
-int	(mvwgetnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		char	*a4, 
+int	mvwgetnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		char	*a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwgetstr
-int	(mvwgetstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwgetstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef mvwhline
-int	(mvwhline)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		chtype	a4, 
+int	mvwhline(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		chtype	a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwinch
-chtype	(mvwinch)(
-		WINDOW	*a1, 
-		int	a2, 
+chtype	mvwinch(
+		WINDOW	*a1,
+		int	a2,
 		int	z)
 		{ return(*(chtype *)0); }
 
 #undef mvwinchnstr
-int	(mvwinchnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		chtype	*a4, 
+int	mvwinchnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		chtype	*a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwinchstr
-int	(mvwinchstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwinchstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef mvwinnstr
-int	(mvwinnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		char	*a4, 
+int	mvwinnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		char	*a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwinsch
-int	(mvwinsch)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwinsch(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef mvwinsnstr
-int	(mvwinsnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const char *a4, 
+int	mvwinsnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const char *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwinsstr
-int	(mvwinsstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwinsstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef mvwinstr
-int	(mvwinstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwinstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef mvwvline
-int	(mvwvline)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		chtype	a4, 
+int	mvwvline(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		chtype	a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef PAIR_NUMBER
-int	(PAIR_NUMBER)(
+int	PAIR_NUMBER(
 		int	z)
 		{ return(*(int *)0); }
 
 #undef redrawwin
-int	(redrawwin)(
+int	redrawwin(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef refresh
-int	(refresh)(void)
+int	refresh(void)
 		{ return(*(int *)0); }
 
 #undef scrl
-int	(scrl)(
+int	scrl(
 		int	z)
 		{ return(*(int *)0); }
 
 #undef scroll
-int	(scroll)(
+int	scroll(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef setscrreg
-int	(setscrreg)(
-		int	a1, 
+int	setscrreg(
+		int	a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef slk_attr_off
-int	(slk_attr_off)(
-		const attr_t a1, 
+int	slk_attr_off(
+		const attr_t a1,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef slk_attr_on
-int	(slk_attr_on)(
-		attr_t	a1, 
+int	slk_attr_on(
+		attr_t	a1,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef standout
-int	(standout)(void)
+int	standout(void)
 		{ return(*(int *)0); }
 
 #undef standend
-int	(standend)(void)
+int	standend(void)
 		{ return(*(int *)0); }
 
 #undef timeout
-void	(timeout)(
+void	timeout(
 		int	z)
 		{ /* void */ }
 
 #undef touchline
-int	(touchline)(
-		WINDOW	*a1, 
-		int	a2, 
+int	touchline(
+		WINDOW	*a1,
+		int	a2,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef touchwin
-int	(touchwin)(
+int	touchwin(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef untouchwin
-int	(untouchwin)(
+int	untouchwin(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef vline
-int	(vline)(
-		chtype	a1, 
+int	vline(
+		chtype	a1,
 		int	z)
 		{ return(*(int *)0); }
 
-#undef vw_printw
-int	(vw_printw)(
-		WINDOW	*a1, 
-		const char *a2, 
-		va_list	z)
-		{ return(*(int *)0); }
-
-#undef vw_scanw
-int	(vw_scanw)(
-		WINDOW	*a1, 
-		const char *a2, 
-		va_list	z)
-		{ return(*(int *)0); }
-
 #undef waddchstr
-int	(waddchstr)(
-		WINDOW	*a1, 
+int	waddchstr(
+		WINDOW	*a1,
 		const chtype *z)
 		{ return(*(int *)0); }
 
 #undef waddstr
-int	(waddstr)(
-		WINDOW	*a1, 
+int	waddstr(
+		WINDOW	*a1,
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef wattron
-int	(wattron)(
-		WINDOW	*a1, 
+int	wattron(
+		WINDOW	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wattroff
-int	(wattroff)(
-		WINDOW	*a1, 
+int	wattroff(
+		WINDOW	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wattrset
-int	(wattrset)(
-		WINDOW	*a1, 
+int	wattrset(
+		WINDOW	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wattr_get
-int	(wattr_get)(
-		WINDOW	*a1, 
-		attr_t	*a2, 
-		short	*a3, 
+int	wattr_get(
+		WINDOW	*a1,
+		attr_t	*a2,
+		short	*a3,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef wattr_set
-int	(wattr_set)(
-		WINDOW	*a1, 
-		attr_t	a2, 
-		short	a3, 
+int	wattr_set(
+		WINDOW	*a1,
+		attr_t	a2,
+		short	a3,
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef wdeleteln
-int	(wdeleteln)(
+int	wdeleteln(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef wgetstr
-int	(wgetstr)(
-		WINDOW	*a1, 
+int	wgetstr(
+		WINDOW	*a1,
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef winchstr
-int	(winchstr)(
-		WINDOW	*a1, 
+int	winchstr(
+		WINDOW	*a1,
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef winsertln
-int	(winsertln)(
+int	winsertln(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef winsstr
-int	(winsstr)(
-		WINDOW	*a1, 
+int	winsstr(
+		WINDOW	*a1,
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef winstr
-int	(winstr)(
-		WINDOW	*a1, 
+int	winstr(
+		WINDOW	*a1,
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef wstandout
-int	(wstandout)(
+int	wstandout(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef wstandend
-int	(wstandend)(
+int	wstandend(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef getattrs
-int	(getattrs)(
+int	getattrs(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getcurx
-int	(getcurx)(
+int	getcurx(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getcury
-int	(getcury)(
+int	getcury(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getbegx
-int	(getbegx)(
+int	getbegx(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getbegy
-int	(getbegy)(
+int	getbegy(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getmaxx
-int	(getmaxx)(
+int	getmaxx(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getmaxy
-int	(getmaxy)(
+int	getmaxy(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getparx
-int	(getparx)(
+int	getparx(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef getpary
-int	(getpary)(
+int	getpary(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef wgetparent
-WINDOW	*(wgetparent)(
+WINDOW	*wgetparent(
 		const WINDOW *z)
 		{ return(*(WINDOW **)0); }
 
 #undef is_cleared
-NCURSES_BOOL (is_cleared)(
+NCURSES_BOOL is_cleared(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_idcok
-NCURSES_BOOL (is_idcok)(
+NCURSES_BOOL is_idcok(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_idlok
-NCURSES_BOOL (is_idlok)(
+NCURSES_BOOL is_idlok(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_immedok
-NCURSES_BOOL (is_immedok)(
+NCURSES_BOOL is_immedok(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_keypad
-NCURSES_BOOL (is_keypad)(
+NCURSES_BOOL is_keypad(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_leaveok
-NCURSES_BOOL (is_leaveok)(
+NCURSES_BOOL is_leaveok(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_nodelay
-NCURSES_BOOL (is_nodelay)(
+NCURSES_BOOL is_nodelay(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_notimeout
-NCURSES_BOOL (is_notimeout)(
+NCURSES_BOOL is_notimeout(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_pad
-NCURSES_BOOL (is_pad)(
+NCURSES_BOOL is_pad(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_scrollok
-NCURSES_BOOL (is_scrollok)(
+NCURSES_BOOL is_scrollok(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_subwin
-NCURSES_BOOL (is_subwin)(
+NCURSES_BOOL is_subwin(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_syncok
-NCURSES_BOOL (is_syncok)(
+NCURSES_BOOL is_syncok(
 		const WINDOW *z)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef wgetdelay
-int	(wgetdelay)(
+int	wgetdelay(
 		const WINDOW *z)
 		{ return(*(int *)0); }
 
 #undef wgetscrreg
-int	(wgetscrreg)(
-		const WINDOW *a1, 
-		int	*a2, 
+int	wgetscrreg(
+		const WINDOW *a1,
+		int	*a2,
 		int	*z)
 		{ return(*(int *)0); }
 
 #undef add_wch
-int	(add_wch)(
+int	add_wch(
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef add_wchnstr
-int	(add_wchnstr)(
-		const cchar_t *a1, 
+int	add_wchnstr(
+		const cchar_t *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef add_wchstr
-int	(add_wchstr)(
+int	add_wchstr(
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef addnwstr
-int	(addnwstr)(
-		const wchar_t *a1, 
+int	addnwstr(
+		const wchar_t *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef addwstr
-int	(addwstr)(
+int	addwstr(
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef bkgrnd
-int	(bkgrnd)(
+int	bkgrnd(
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef bkgrndset
-void	(bkgrndset)(
+void	bkgrndset(
 		const cchar_t *z)
 		{ /* void */ }
 
 #undef border_set
-int	(border_set)(
-		const cchar_t *a1, 
-		const cchar_t *a2, 
-		const cchar_t *a3, 
-		const cchar_t *a4, 
-		const cchar_t *a5, 
-		const cchar_t *a6, 
-		const cchar_t *a7, 
+int	border_set(
+		const cchar_t *a1,
+		const cchar_t *a2,
+		const cchar_t *a3,
+		const cchar_t *a4,
+		const cchar_t *a5,
+		const cchar_t *a6,
+		const cchar_t *a7,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef box_set
-int	(box_set)(
-		WINDOW	*a1, 
-		const cchar_t *a2, 
+int	box_set(
+		WINDOW	*a1,
+		const cchar_t *a2,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef echo_wchar
-int	(echo_wchar)(
+int	echo_wchar(
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef get_wch
-int	(get_wch)(
+int	get_wch(
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef get_wstr
-int	(get_wstr)(
+int	get_wstr(
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef getbkgrnd
-int	(getbkgrnd)(
+int	getbkgrnd(
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef getn_wstr
-int	(getn_wstr)(
-		wint_t	*a1, 
+int	getn_wstr(
+		wint_t	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef hline_set
-int	(hline_set)(
-		const cchar_t *a1, 
+int	hline_set(
+		const cchar_t *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef in_wch
-int	(in_wch)(
+int	in_wch(
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef in_wchnstr
-int	(in_wchnstr)(
-		cchar_t	*a1, 
+int	in_wchnstr(
+		cchar_t	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef in_wchstr
-int	(in_wchstr)(
+int	in_wchstr(
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef innwstr
-int	(innwstr)(
-		wchar_t	*a1, 
+int	innwstr(
+		wchar_t	*a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef ins_nwstr
-int	(ins_nwstr)(
-		const wchar_t *a1, 
+int	ins_nwstr(
+		const wchar_t *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef ins_wch
-int	(ins_wch)(
+int	ins_wch(
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef ins_wstr
-int	(ins_wstr)(
+int	ins_wstr(
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef inwstr
-int	(inwstr)(
+int	inwstr(
 		wchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvadd_wch
-int	(mvadd_wch)(
-		int	a1, 
-		int	a2, 
+int	mvadd_wch(
+		int	a1,
+		int	a2,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvadd_wchnstr
-int	(mvadd_wchnstr)(
-		int	a1, 
-		int	a2, 
-		const cchar_t *a3, 
+int	mvadd_wchnstr(
+		int	a1,
+		int	a2,
+		const cchar_t *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvadd_wchstr
-int	(mvadd_wchstr)(
-		int	a1, 
-		int	a2, 
+int	mvadd_wchstr(
+		int	a1,
+		int	a2,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvaddnwstr
-int	(mvaddnwstr)(
-		int	a1, 
-		int	a2, 
-		const wchar_t *a3, 
+int	mvaddnwstr(
+		int	a1,
+		int	a2,
+		const wchar_t *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvaddwstr
-int	(mvaddwstr)(
-		int	a1, 
-		int	a2, 
+int	mvaddwstr(
+		int	a1,
+		int	a2,
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvget_wch
-int	(mvget_wch)(
-		int	a1, 
-		int	a2, 
+int	mvget_wch(
+		int	a1,
+		int	a2,
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvget_wstr
-int	(mvget_wstr)(
-		int	a1, 
-		int	a2, 
+int	mvget_wstr(
+		int	a1,
+		int	a2,
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvgetn_wstr
-int	(mvgetn_wstr)(
-		int	a1, 
-		int	a2, 
-		wint_t	*a3, 
+int	mvgetn_wstr(
+		int	a1,
+		int	a2,
+		wint_t	*a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvhline_set
-int	(mvhline_set)(
-		int	a1, 
-		int	a2, 
-		const cchar_t *a3, 
+int	mvhline_set(
+		int	a1,
+		int	a2,
+		const cchar_t *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvin_wch
-int	(mvin_wch)(
-		int	a1, 
-		int	a2, 
+int	mvin_wch(
+		int	a1,
+		int	a2,
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvin_wchnstr
-int	(mvin_wchnstr)(
-		int	a1, 
-		int	a2, 
-		cchar_t	*a3, 
+int	mvin_wchnstr(
+		int	a1,
+		int	a2,
+		cchar_t	*a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvin_wchstr
-int	(mvin_wchstr)(
-		int	a1, 
-		int	a2, 
+int	mvin_wchstr(
+		int	a1,
+		int	a2,
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvinnwstr
-int	(mvinnwstr)(
-		int	a1, 
-		int	a2, 
-		wchar_t	*a3, 
+int	mvinnwstr(
+		int	a1,
+		int	a2,
+		wchar_t	*a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvins_nwstr
-int	(mvins_nwstr)(
-		int	a1, 
-		int	a2, 
-		const wchar_t *a3, 
+int	mvins_nwstr(
+		int	a1,
+		int	a2,
+		const wchar_t *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvins_wch
-int	(mvins_wch)(
-		int	a1, 
-		int	a2, 
+int	mvins_wch(
+		int	a1,
+		int	a2,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvins_wstr
-int	(mvins_wstr)(
-		int	a1, 
-		int	a2, 
+int	mvins_wstr(
+		int	a1,
+		int	a2,
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvinwstr
-int	(mvinwstr)(
-		int	a1, 
-		int	a2, 
+int	mvinwstr(
+		int	a1,
+		int	a2,
 		wchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvvline_set
-int	(mvvline_set)(
-		int	a1, 
-		int	a2, 
-		const cchar_t *a3, 
+int	mvvline_set(
+		int	a1,
+		int	a2,
+		const cchar_t *a3,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwadd_wch
-int	(mvwadd_wch)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwadd_wch(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvwadd_wchnstr
-int	(mvwadd_wchnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const cchar_t *a4, 
+int	mvwadd_wchnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const cchar_t *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwadd_wchstr
-int	(mvwadd_wchstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwadd_wchstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvwaddnwstr
-int	(mvwaddnwstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const wchar_t *a4, 
+int	mvwaddnwstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const wchar_t *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwaddwstr
-int	(mvwaddwstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwaddwstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvwget_wch
-int	(mvwget_wch)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwget_wch(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvwget_wstr
-int	(mvwget_wstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwget_wstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvwgetn_wstr
-int	(mvwgetn_wstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		wint_t	*a4, 
+int	mvwgetn_wstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		wint_t	*a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwhline_set
-int	(mvwhline_set)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const cchar_t *a4, 
+int	mvwhline_set(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const cchar_t *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwin_wch
-int	(mvwin_wch)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwin_wch(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvwin_wchnstr
-int	(mvwin_wchnstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		cchar_t	*a4, 
+int	mvwin_wchnstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		cchar_t	*a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwin_wchstr
-int	(mvwin_wchstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwin_wchstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvwinnwstr
-int	(mvwinnwstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		wchar_t	*a4, 
+int	mvwinnwstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		wchar_t	*a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwins_nwstr
-int	(mvwins_nwstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const wchar_t *a4, 
+int	mvwins_nwstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const wchar_t *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwins_wch
-int	(mvwins_wch)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwins_wch(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvwins_wstr
-int	(mvwins_wstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwins_wstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mvwinwstr
-int	(mvwinwstr)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
+int	mvwinwstr(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
 		wchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef mvwvline_set
-int	(mvwvline_set)(
-		WINDOW	*a1, 
-		int	a2, 
-		int	a3, 
-		const cchar_t *a4, 
+int	mvwvline_set(
+		WINDOW	*a1,
+		int	a2,
+		int	a3,
+		const cchar_t *a4,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef vline_set
-int	(vline_set)(
-		const cchar_t *a1, 
+int	vline_set(
+		const cchar_t *a1,
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wadd_wchstr
-int	(wadd_wchstr)(
-		WINDOW	*a1, 
+int	wadd_wchstr(
+		WINDOW	*a1,
 		const cchar_t *z)
 		{ return(*(int *)0); }
 
 #undef waddwstr
-int	(waddwstr)(
-		WINDOW	*a1, 
+int	waddwstr(
+		WINDOW	*a1,
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef wget_wstr
-int	(wget_wstr)(
-		WINDOW	*a1, 
+int	wget_wstr(
+		WINDOW	*a1,
 		wint_t	*z)
 		{ return(*(int *)0); }
 
 #undef wgetbkgrnd
-int	(wgetbkgrnd)(
-		WINDOW	*a1, 
+int	wgetbkgrnd(
+		WINDOW	*a1,
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef win_wchstr
-int	(win_wchstr)(
-		WINDOW	*a1, 
+int	win_wchstr(
+		WINDOW	*a1,
 		cchar_t	*z)
 		{ return(*(int *)0); }
 
 #undef wins_wstr
-int	(wins_wstr)(
-		WINDOW	*a1, 
+int	wins_wstr(
+		WINDOW	*a1,
 		const wchar_t *z)
 		{ return(*(int *)0); }
 
 #undef mouse_trafo
-NCURSES_BOOL (mouse_trafo)(
-		int	*a1, 
-		int	*a2, 
+NCURSES_BOOL mouse_trafo(
+		int	*a1,
+		int	*a2,
 		NCURSES_BOOL z)
 		{ return(*(NCURSES_BOOL *)0); }
 
@@ -1780,7 +1877,7 @@
 
 #undef set_escdelay_sp
 int	set_escdelay_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	value)
 		{ return(*(int *)0); }
 
@@ -1800,8 +1897,8 @@
 
 #undef _nc_wgetch
 int	_nc_wgetch(
-		WINDOW	*win, 
-		int	*result, 
+		WINDOW	*win,
+		int	*result,
 		int	use_meta)
 		{ return(*(int *)0); }
 
@@ -1814,8 +1911,8 @@
 
 #undef wgetnstr
 int	wgetnstr(
-		WINDOW	*win, 
-		char	*str, 
+		WINDOW	*win,
+		char	*str,
 		int	maxlen)
 		{ return(*(int *)0); }
 
@@ -1823,8 +1920,8 @@
 
 #undef whline
 int	whline(
-		WINDOW	*win, 
-		chtype	ch, 
+		WINDOW	*win,
+		chtype	ch,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -1832,7 +1929,7 @@
 
 #undef immedok
 void	immedok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ /* void */ }
 
@@ -1840,8 +1937,8 @@
 
 #undef winchnstr
 int	winchnstr(
-		WINDOW	*win, 
-		chtype	*str, 
+		WINDOW	*win,
+		chtype	*str,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -1855,14 +1952,14 @@
 
 #undef _nc_insert_ch
 int	_nc_insert_ch(
-		SCREEN	*sp, 
-		WINDOW	*win, 
+		SCREEN	*sp,
+		WINDOW	*win,
 		chtype	ch)
 		{ return(*(int *)0); }
 
 #undef winsch
 int	winsch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		chtype	c)
 		{ return(*(int *)0); }
 
@@ -1870,7 +1967,7 @@
 
 #undef winsdelln
 int	winsdelln(
-		WINDOW	*win, 
+		WINDOW	*win,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -1878,8 +1975,8 @@
 
 #undef winsnstr
 int	winsnstr(
-		WINDOW	*win, 
-		const char *s, 
+		WINDOW	*win,
+		const char *s,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -1887,8 +1984,8 @@
 
 #undef winnstr
 int	winnstr(
-		WINDOW	*win, 
-		char	*str, 
+		WINDOW	*win,
+		char	*str,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -1907,7 +2004,7 @@
 
 #undef leaveok
 int	leaveok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
@@ -1915,7 +2012,7 @@
 
 #undef getmouse_sp
 int	getmouse_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		MEVENT	*aevent)
 		{ return(*(int *)0); }
 
@@ -1926,7 +2023,7 @@
 
 #undef ungetmouse_sp
 int	ungetmouse_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		MEVENT	*aevent)
 		{ return(*(int *)0); }
 
@@ -1937,27 +2034,27 @@
 
 #undef mousemask_sp
 mmask_t	mousemask_sp(
-		SCREEN	*sp, 
-		mmask_t	newmask, 
+		SCREEN	*sp,
+		mmask_t	newmask,
 		mmask_t	*oldmask)
 		{ return(*(mmask_t *)0); }
 
 #undef mousemask
 mmask_t	mousemask(
-		mmask_t	newmask, 
+		mmask_t	newmask,
 		mmask_t	*oldmask)
 		{ return(*(mmask_t *)0); }
 
 #undef wenclose
 NCURSES_BOOL wenclose(
-		const WINDOW *win, 
-		int	y, 
+		const WINDOW *win,
+		int	y,
 		int	x)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef mouseinterval_sp
 int	mouseinterval_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	maxclick)
 		{ return(*(int *)0); }
 
@@ -1982,9 +2079,9 @@
 
 #undef wmouse_trafo
 NCURSES_BOOL wmouse_trafo(
-		const WINDOW *win, 
-		int	*pY, 
-		int	*pX, 
+		const WINDOW *win,
+		int	*pY,
+		int	*pX,
 		NCURSES_BOOL to_screen)
 		{ return(*(NCURSES_BOOL *)0); }
 
@@ -1992,8 +2089,8 @@
 
 #undef wmove
 int	wmove(
-		WINDOW	*win, 
-		int	y, 
+		WINDOW	*win,
+		int	y,
 		int	x)
 		{ return(*(int *)0); }
 
@@ -2001,14 +2098,14 @@
 
 #undef _nc_msec_cost_sp
 int	_nc_msec_cost_sp(
-		SCREEN	*sp, 
-		const char *const cap, 
+		SCREEN	*sp,
+		const char *const cap,
 		int	affcnt)
 		{ return(*(int *)0); }
 
 #undef _nc_msec_cost
 int	_nc_msec_cost(
-		const char *const cap, 
+		const char *const cap,
 		int	affcnt)
 		{ return(*(int *)0); }
 
@@ -2041,35 +2138,35 @@
 
 #undef _nc_mvcur_sp
 int	_nc_mvcur_sp(
-		SCREEN	*sp, 
-		int	yold, 
-		int	xold, 
-		int	ynew, 
+		SCREEN	*sp,
+		int	yold,
+		int	xold,
+		int	ynew,
 		int	xnew)
 		{ return(*(int *)0); }
 
 #undef _nc_mvcur
 int	_nc_mvcur(
-		int	yold, 
-		int	xold, 
-		int	ynew, 
+		int	yold,
+		int	xold,
+		int	ynew,
 		int	xnew)
 		{ return(*(int *)0); }
 
 #undef mvcur_sp
 int	mvcur_sp(
-		SCREEN	*sp, 
-		int	yold, 
-		int	xold, 
-		int	ynew, 
+		SCREEN	*sp,
+		int	yold,
+		int	xold,
+		int	ynew,
 		int	xnew)
 		{ return(*(int *)0); }
 
 #undef mvcur
 int	mvcur(
-		int	yold, 
-		int	xold, 
-		int	ynew, 
+		int	yold,
+		int	xold,
+		int	ynew,
 		int	xnew)
 		{ return(*(int *)0); }
 
@@ -2080,8 +2177,8 @@
 
 #undef mvwin
 int	mvwin(
-		WINDOW	*win, 
-		int	by, 
+		WINDOW	*win,
+		int	by,
 		int	bx)
 		{ return(*(int *)0); }
 
@@ -2107,16 +2204,16 @@
 
 #undef newterm_sp
 SCREEN	*newterm_sp(
-		SCREEN	*sp, 
-		const char *name, 
-		FILE	*ofp, 
+		SCREEN	*sp,
+		const char *name,
+		FILE	*ofp,
 		FILE	*ifp)
 		{ return(*(SCREEN **)0); }
 
 #undef newterm
 SCREEN	*newterm(
-		const char *name, 
-		FILE	*ofp, 
+		const char *name,
+		FILE	*ofp,
 		FILE	*ifp)
 		{ return(*(SCREEN **)0); }
 
@@ -2129,46 +2226,46 @@
 
 #undef newwin_sp
 WINDOW	*newwin_sp(
-		SCREEN	*sp, 
-		int	num_lines, 
-		int	num_columns, 
-		int	begy, 
+		SCREEN	*sp,
+		int	num_lines,
+		int	num_columns,
+		int	begy,
 		int	begx)
 		{ return(*(WINDOW **)0); }
 
 #undef newwin
 WINDOW	*newwin(
-		int	num_lines, 
-		int	num_columns, 
-		int	begy, 
+		int	num_lines,
+		int	num_columns,
+		int	begy,
 		int	begx)
 		{ return(*(WINDOW **)0); }
 
 #undef derwin
 WINDOW	*derwin(
-		WINDOW	*orig, 
-		int	num_lines, 
-		int	num_columns, 
-		int	begy, 
+		WINDOW	*orig,
+		int	num_lines,
+		int	num_columns,
+		int	begy,
 		int	begx)
 		{ return(*(WINDOW **)0); }
 
 #undef subwin
 WINDOW	*subwin(
-		WINDOW	*w, 
-		int	l, 
-		int	c, 
-		int	y, 
+		WINDOW	*w,
+		int	l,
+		int	c,
+		int	y,
 		int	x)
 		{ return(*(WINDOW **)0); }
 
 #undef _nc_makenew_sp
 WINDOW	*_nc_makenew_sp(
-		SCREEN	*sp, 
-		int	num_lines, 
-		int	num_columns, 
-		int	begy, 
-		int	begx, 
+		SCREEN	*sp,
+		int	num_lines,
+		int	num_columns,
+		int	begy,
+		int	begx,
 		int	flags)
 		{ return(*(WINDOW **)0); }
 
@@ -2211,26 +2308,26 @@
 
 #undef overlay
 int	overlay(
-		const WINDOW *win1, 
+		const WINDOW *win1,
 		WINDOW	*win2)
 		{ return(*(int *)0); }
 
 #undef overwrite
 int	overwrite(
-		const WINDOW *win1, 
+		const WINDOW *win1,
 		WINDOW	*win2)
 		{ return(*(int *)0); }
 
 #undef copywin
 int	copywin(
-		const WINDOW *src, 
-		WINDOW	*dst, 
-		int	sminrow, 
-		int	smincol, 
-		int	dminrow, 
-		int	dmincol, 
-		int	dmaxrow, 
-		int	dmaxcol, 
+		const WINDOW *src,
+		WINDOW	*dst,
+		int	sminrow,
+		int	smincol,
+		int	dminrow,
+		int	dmincol,
+		int	dmaxrow,
+		int	dmaxcol,
 		int	over)
 		{ return(*(int *)0); }
 
@@ -2238,51 +2335,51 @@
 
 #undef newpad_sp
 WINDOW	*newpad_sp(
-		SCREEN	*sp, 
-		int	l, 
+		SCREEN	*sp,
+		int	l,
 		int	c)
 		{ return(*(WINDOW **)0); }
 
 #undef newpad
 WINDOW	*newpad(
-		int	l, 
+		int	l,
 		int	c)
 		{ return(*(WINDOW **)0); }
 
 #undef subpad
 WINDOW	*subpad(
-		WINDOW	*orig, 
-		int	l, 
-		int	c, 
-		int	begy, 
+		WINDOW	*orig,
+		int	l,
+		int	c,
+		int	begy,
 		int	begx)
 		{ return(*(WINDOW **)0); }
 
 #undef prefresh
 int	prefresh(
-		WINDOW	*win, 
-		int	pminrow, 
-		int	pmincol, 
-		int	sminrow, 
-		int	smincol, 
-		int	smaxrow, 
+		WINDOW	*win,
+		int	pminrow,
+		int	pmincol,
+		int	sminrow,
+		int	smincol,
+		int	smaxrow,
 		int	smaxcol)
 		{ return(*(int *)0); }
 
 #undef pnoutrefresh
 int	pnoutrefresh(
-		WINDOW	*win, 
-		int	pminrow, 
-		int	pmincol, 
-		int	sminrow, 
-		int	smincol, 
-		int	smaxrow, 
+		WINDOW	*win,
+		int	pminrow,
+		int	pmincol,
+		int	sminrow,
+		int	smincol,
+		int	smaxrow,
 		int	smaxcol)
 		{ return(*(int *)0); }
 
 #undef pechochar
 int	pechochar(
-		WINDOW	*pad, 
+		WINDOW	*pad,
 		const chtype ch)
 		{ return(*(int *)0); }
 
@@ -2290,38 +2387,45 @@
 
 #undef printw
 int	printw(
-		const char *fmt, 
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef wprintw
 int	wprintw(
-		WINDOW	*win, 
-		const char *fmt, 
+		WINDOW	*win,
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef mvprintw
 int	mvprintw(
-		int	y, 
-		int	x, 
-		const char *fmt, 
+		int	y,
+		int	x,
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef mvwprintw
 int	mvwprintw(
-		WINDOW	*win, 
-		int	y, 
-		int	x, 
-		const char *fmt, 
+		WINDOW	*win,
+		int	y,
+		int	x,
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef vwprintw
 int	vwprintw(
-		WINDOW	*win, 
-		const char *fmt, 
+		WINDOW	*win,
+		const char *fmt,
+		va_list	argp)
+		{ return(*(int *)0); }
+
+#undef vw_printw
+int	vw_printw(
+		WINDOW	*win,
+		const char *fmt,
 		va_list	argp)
 		{ return(*(int *)0); }
 
@@ -2329,8 +2433,8 @@
 
 #undef wredrawln
 int	wredrawln(
-		WINDOW	*win, 
-		int	beg, 
+		WINDOW	*win,
+		int	beg,
 		int	num)
 		{ return(*(int *)0); }
 
@@ -2350,16 +2454,16 @@
 
 #undef restartterm_sp
 int	restartterm_sp(
-		SCREEN	*sp, 
-		const char *termp, 
-		int	filenum, 
+		SCREEN	*sp,
+		const char *termp,
+		int	filenum,
 		int	*errret)
 		{ return(*(int *)0); }
 
 #undef restartterm
 int	restartterm(
-		const char *termp, 
-		int	filenum, 
+		const char *termp,
+		int	filenum,
 		int	*errret)
 		{ return(*(int *)0); }
 
@@ -2367,38 +2471,45 @@
 
 #undef vwscanw
 int	vwscanw(
-		WINDOW	*win, 
-		const char *fmt, 
+		WINDOW	*win,
+		const char *fmt,
+		va_list	argp)
+		{ return(*(int *)0); }
+
+#undef vw_scanw
+int	vw_scanw(
+		WINDOW	*win,
+		const char *fmt,
 		va_list	argp)
 		{ return(*(int *)0); }
 
 #undef scanw
 int	scanw(
-		const char *fmt, 
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef wscanw
 int	wscanw(
-		WINDOW	*win, 
-		const char *fmt, 
+		WINDOW	*win,
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef mvscanw
 int	mvscanw(
-		int	y, 
-		int	x, 
-		const char *fmt, 
+		int	y,
+		int	x,
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
 #undef mvwscanw
 int	mvwscanw(
-		WINDOW	*win, 
-		int	y, 
-		int	x, 
-		const char *fmt, 
+		WINDOW	*win,
+		int	y,
+		int	x,
+		const char *fmt,
 		...)
 		{ return(*(int *)0); }
 
@@ -2406,7 +2517,7 @@
 
 #undef getwin_sp
 WINDOW	*getwin_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		FILE	*filep)
 		{ return(*(WINDOW **)0); }
 
@@ -2417,13 +2528,13 @@
 
 #undef putwin
 int	putwin(
-		WINDOW	*win, 
+		WINDOW	*win,
 		FILE	*filep)
 		{ return(*(int *)0); }
 
 #undef scr_restore_sp
 int	scr_restore_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *file)
 		{ return(*(int *)0); }
 
@@ -2439,7 +2550,7 @@
 
 #undef scr_init_sp
 int	scr_init_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *file)
 		{ return(*(int *)0); }
 
@@ -2450,7 +2561,7 @@
 
 #undef scr_set_sp
 int	scr_set_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *file)
 		{ return(*(int *)0); }
 
@@ -2463,16 +2574,16 @@
 
 #undef _nc_scroll_window
 void	_nc_scroll_window(
-		WINDOW	*win, 
-		int const n, 
-		int const top, 
-		int const bottom, 
+		WINDOW	*win,
+		int const n,
+		int const top,
+		int const bottom,
 		cchar_t	blank)
 		{ /* void */ }
 
 #undef wscrl
 int	wscrl(
-		WINDOW	*win, 
+		WINDOW	*win,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -2480,7 +2591,7 @@
 
 #undef scrollok
 int	scrollok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
@@ -2488,8 +2599,8 @@
 
 #undef wsetscrreg
 int	wsetscrreg(
-		WINDOW	*win, 
-		int	top, 
+		WINDOW	*win,
+		int	top,
 		int	bottom)
 		{ return(*(int *)0); }
 
@@ -2507,54 +2618,54 @@
 
 #undef _nc_setupscreen_sp
 int	_nc_setupscreen_sp(
-		SCREEN	**spp, 
-		int	slines, 
-		int	scolumns, 
-		FILE	*output, 
-		int	filtered, 
+		SCREEN	**spp,
+		int	slines,
+		int	scolumns,
+		FILE	*output,
+		int	filtered,
 		int	slk_format)
 		{ return(*(int *)0); }
 
 #undef _nc_setupscreen
 int	_nc_setupscreen(
-		int	slines, 
-		int	scolumns, 
-		FILE	*output, 
-		int	filtered, 
+		int	slines,
+		int	scolumns,
+		FILE	*output,
+		int	filtered,
 		int	slk_format)
 		{ return(*(int *)0); }
 
 #undef _nc_ripoffline_sp
 int	_nc_ripoffline_sp(
-		SCREEN	*sp, 
-		int	line, 
+		SCREEN	*sp,
+		int	line,
 		int	(*init)(
-		WINDOW	*p1, 
+		WINDOW	*p1,
 		int	p2))
 		{ return(*(int *)0); }
 
 #undef _nc_ripoffline
 int	_nc_ripoffline(
-		int	line, 
+		int	line,
 		int	(*init)(
-		WINDOW	*p1, 
+		WINDOW	*p1,
 		int	p2))
 		{ return(*(int *)0); }
 
 #undef ripoffline_sp
 int	ripoffline_sp(
-		SCREEN	*sp, 
-		int	line, 
+		SCREEN	*sp,
+		int	line,
 		int	(*init)(
-		WINDOW	*p1, 
+		WINDOW	*p1,
 		int	p2))
 		{ return(*(int *)0); }
 
 #undef ripoffline
 int	ripoffline(
-		int	line, 
+		int	line,
 		int	(*init)(
-		WINDOW	*p1, 
+		WINDOW	*p1,
 		int	p2))
 		{ return(*(int *)0); }
 
@@ -2562,13 +2673,13 @@
 
 #undef _nc_format_slks
 int	_nc_format_slks(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	cols)
 		{ return(*(int *)0); }
 
 #undef _nc_slk_initialize
 int	_nc_slk_initialize(
-		WINDOW	*stwin, 
+		WINDOW	*stwin,
 		int	cols)
 		{ return(*(int *)0); }
 
@@ -2585,16 +2696,16 @@
 
 #undef slk_attr_set_sp
 int	slk_attr_set_sp(
-		SCREEN	*sp, 
-		const attr_t attr, 
-		short	color_pair_number, 
+		SCREEN	*sp,
+		const attr_t attr,
+		short	pair_arg,
 		void	*opts)
 		{ return(*(int *)0); }
 
 #undef slk_attr_set
 int	slk_attr_set(
-		const attr_t attr, 
-		short	color_pair_number, 
+		const attr_t attr,
+		short	pair_arg,
 		void	*opts)
 		{ return(*(int *)0); }
 
@@ -2602,7 +2713,7 @@
 
 #undef slk_attroff_sp
 int	slk_attroff_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const chtype attr)
 		{ return(*(int *)0); }
 
@@ -2615,7 +2726,7 @@
 
 #undef slk_attron_sp
 int	slk_attron_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const chtype attr)
 		{ return(*(int *)0); }
 
@@ -2628,7 +2739,7 @@
 
 #undef slk_attrset_sp
 int	slk_attrset_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const chtype attr)
 		{ return(*(int *)0); }
 
@@ -2663,20 +2774,31 @@
 
 #undef slk_color_sp
 int	slk_color_sp(
-		SCREEN	*sp, 
-		short	color_pair_number)
+		SCREEN	*sp,
+		short	pair_arg)
 		{ return(*(int *)0); }
 
 #undef slk_color
 int	slk_color(
-		short	color_pair_number)
+		short	pair_arg)
+		{ return(*(int *)0); }
+
+#undef extended_slk_color_sp
+int	extended_slk_color_sp(
+		SCREEN	*sp,
+		int	pair_arg)
+		{ return(*(int *)0); }
+
+#undef extended_slk_color
+int	extended_slk_color(
+		int	pair_arg)
 		{ return(*(int *)0); }
 
 /* ./base/lib_slkinit.c */
 
 #undef slk_init_sp
 int	slk_init_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	format)
 		{ return(*(int *)0); }
 
@@ -2689,7 +2811,7 @@
 
 #undef slk_label_sp
 char	*slk_label_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	n)
 		{ return(*(char **)0); }
 
@@ -2722,16 +2844,16 @@
 
 #undef slk_set_sp
 int	slk_set_sp(
-		SCREEN	*sp, 
-		int	i, 
-		const char *astr, 
+		SCREEN	*sp,
+		int	i,
+		const char *astr,
 		int	format)
 		{ return(*(int *)0); }
 
 #undef slk_set
 int	slk_set(
-		int	i, 
-		const char *astr, 
+		int	i,
+		const char *astr,
 		int	format)
 		{ return(*(int *)0); }
 
@@ -2750,7 +2872,7 @@
 
 #undef is_linetouched
 NCURSES_BOOL is_linetouched(
-		WINDOW	*win, 
+		WINDOW	*win,
 		int	line)
 		{ return(*(NCURSES_BOOL *)0); }
 
@@ -2761,9 +2883,9 @@
 
 #undef wtouchln
 int	wtouchln(
-		WINDOW	*win, 
-		int	y, 
-		int	n, 
+		WINDOW	*win,
+		int	y,
+		int	n,
 		int	changed)
 		{ return(*(int *)0); }
 
@@ -2771,7 +2893,7 @@
 
 #undef _tracedump
 void	_tracedump(
-		const char *name, 
+		const char *name,
 		WINDOW	*win)
 		{ /* void */ }
 
@@ -2779,19 +2901,19 @@
 
 #undef _nc_trace_mmask_t
 char	*_nc_trace_mmask_t(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		mmask_t	code)
 		{ return(*(char **)0); }
 
 #undef _nc_tracemouse
 char	*_nc_tracemouse(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		MEVENT const *ep)
 		{ return(*(char **)0); }
 
 #undef _nc_retrace_mmask_t
 mmask_t	_nc_retrace_mmask_t(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		mmask_t	code)
 		{ return(*(mmask_t *)0); }
 
@@ -2816,7 +2938,7 @@
 
 #undef ungetch_sp
 int	ungetch_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	ch)
 		{ return(*(int *)0); }
 
@@ -2829,20 +2951,20 @@
 
 #undef vidputs_sp
 int	vidputs_sp(
-		SCREEN	*sp, 
-		chtype	newmode, 
+		SCREEN	*sp,
+		chtype	newmode,
 		NCURSES_OUTC_sp outc)
 		{ return(*(int *)0); }
 
 #undef vidputs
 int	vidputs(
-		chtype	newmode, 
+		chtype	newmode,
 		NCURSES_OUTC outc)
 		{ return(*(int *)0); }
 
 #undef vidattr_sp
 int	vidattr_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		chtype	newmode)
 		{ return(*(int *)0); }
 
@@ -2864,8 +2986,8 @@
 
 #undef wvline
 int	wvline(
-		WINDOW	*win, 
-		chtype	ch, 
+		WINDOW	*win,
+		chtype	ch,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -2873,8 +2995,8 @@
 
 #undef wattr_off
 int	wattr_off(
-		WINDOW	*win, 
-		attr_t	at, 
+		WINDOW	*win,
+		attr_t	at,
 		void	*opts)
 		{ return(*(int *)0); }
 
@@ -2882,8 +3004,8 @@
 
 #undef wattr_on
 int	wattr_on(
-		WINDOW	*win, 
-		attr_t	at, 
+		WINDOW	*win,
+		attr_t	at,
 		void	*opts)
 		{ return(*(int *)0); }
 
@@ -2903,14 +3025,14 @@
 
 #undef mvderwin
 int	mvderwin(
-		WINDOW	*win, 
-		int	y, 
+		WINDOW	*win,
+		int	y,
 		int	x)
 		{ return(*(int *)0); }
 
 #undef syncok
 int	syncok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL bf)
 		{ return(*(int *)0); }
 
@@ -2949,14 +3071,14 @@
 
 #undef _nc_printf_string_sp
 char	*_nc_printf_string_sp(
-		SCREEN	*sp, 
-		const char *fmt, 
+		SCREEN	*sp,
+		const char *fmt,
 		va_list	ap)
 		{ return(*(char **)0); }
 
 #undef _nc_printf_string
 char	*_nc_printf_string(
-		const char *fmt, 
+		const char *fmt,
 		va_list	ap)
 		{ return(*(char **)0); }
 
@@ -2973,18 +3095,18 @@
 
 #undef _nc_scrolln_sp
 int	_nc_scrolln_sp(
-		SCREEN	*sp, 
-		int	n, 
-		int	top, 
-		int	bot, 
+		SCREEN	*sp,
+		int	n,
+		int	top,
+		int	bot,
 		int	maxy)
 		{ return(*(int *)0); }
 
 #undef _nc_scrolln
 int	_nc_scrolln(
-		int	n, 
-		int	top, 
-		int	bot, 
+		int	n,
+		int	top,
+		int	bot,
 		int	maxy)
 		{ return(*(int *)0); }
 
@@ -3017,7 +3139,7 @@
 
 #undef _nc_do_xmc_glitch_sp
 void	_nc_do_xmc_glitch_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		attr_t	previous)
 		{ /* void */ }
 
@@ -3028,13 +3150,9 @@
 
 /* ./trace/varargs.c */
 
-typedef enum {
-    atUnknown = 0, atInteger, atFloat, atPoint, atString
-} ARGTYPE;
-
 #undef _nc_varargs
 char	*_nc_varargs(
-		const char *fmt, 
+		const char *fmt,
 		va_list	ap)
 		{ return(*(char **)0); }
 
@@ -3052,7 +3170,7 @@
 
 #undef _nc_free_and_exit_sp
 void	_nc_free_and_exit_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	code)
 		{ /* void */ }
 
@@ -3061,6 +3179,11 @@
 		int	code)
 		{ /* void */ }
 
+#undef exit_curses
+void	exit_curses(
+		int	code)
+		{ /* void */ }
+
 /* ./widechar/charable.c */
 
 #undef _nc_is_charable
@@ -3082,13 +3205,13 @@
 
 #undef wadd_wch
 int	wadd_wch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t *wch)
 		{ return(*(int *)0); }
 
 #undef wecho_wchar
 int	wecho_wchar(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t *wch)
 		{ return(*(int *)0); }
 
@@ -3096,14 +3219,14 @@
 
 #undef wborder_set
 int	wborder_set(
-		WINDOW	*win, 
-		const cchar_t *ls, 
-		const cchar_t *rs, 
-		const cchar_t *ts, 
-		const cchar_t *bs, 
-		const cchar_t *tl, 
-		const cchar_t *tr, 
-		const cchar_t *bl, 
+		WINDOW	*win,
+		const cchar_t *ls,
+		const cchar_t *rs,
+		const cchar_t *ts,
+		const cchar_t *bs,
+		const cchar_t *tl,
+		const cchar_t *tr,
+		const cchar_t *bl,
 		const cchar_t *br)
 		{ return(*(int *)0); }
 
@@ -3111,29 +3234,41 @@
 
 #undef setcchar
 int	setcchar(
-		cchar_t	*wcval, 
-		const wchar_t *wch, 
-		const attr_t attrs, 
-		short	color_pair, 
+		cchar_t	*wcval,
+		const wchar_t *wch,
+		const attr_t attrs,
+		short	pair_arg,
 		const void *opts)
 		{ return(*(int *)0); }
 
 #undef getcchar
 int	getcchar(
-		const cchar_t *wcval, 
-		wchar_t	*wch, 
-		attr_t	*attrs, 
-		short	*color_pair, 
+		const cchar_t *wcval,
+		wchar_t	*wch,
+		attr_t	*attrs,
+		short	*pair_arg,
 		void	*opts)
 		{ return(*(int *)0); }
 
 /* ./widechar/lib_erasewchar.c */
 
+#undef erasewchar_sp
+int	erasewchar_sp(
+		SCREEN	*sp,
+		wchar_t	*wch)
+		{ return(*(int *)0); }
+
 #undef erasewchar
 int	erasewchar(
 		wchar_t	*wch)
 		{ return(*(int *)0); }
 
+#undef killwchar_sp
+int	killwchar_sp(
+		SCREEN	*sp,
+		wchar_t	*wch)
+		{ return(*(int *)0); }
+
 #undef killwchar
 int	killwchar(
 		wchar_t	*wch)
@@ -3143,7 +3278,7 @@
 
 #undef wget_wch
 int	wget_wch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		wint_t	*result)
 		{ return(*(int *)0); }
 
@@ -3151,8 +3286,8 @@
 
 #undef wgetn_wstr
 int	wgetn_wstr(
-		WINDOW	*win, 
-		wint_t	*str, 
+		WINDOW	*win,
+		wint_t	*str,
 		int	maxlen)
 		{ return(*(int *)0); }
 
@@ -3160,8 +3295,8 @@
 
 #undef whline_set
 int	whline_set(
-		WINDOW	*win, 
-		const cchar_t *ch, 
+		WINDOW	*win,
+		const cchar_t *ch,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -3169,7 +3304,7 @@
 
 #undef win_wch
 int	win_wch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		cchar_t	*wcval)
 		{ return(*(int *)0); }
 
@@ -3177,8 +3312,8 @@
 
 #undef win_wchnstr
 int	win_wchnstr(
-		WINDOW	*win, 
-		cchar_t	*wchstr, 
+		WINDOW	*win,
+		cchar_t	*wchstr,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -3186,20 +3321,20 @@
 
 #undef _nc_insert_wch
 int	_nc_insert_wch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t *wch)
 		{ return(*(int *)0); }
 
 #undef wins_wch
 int	wins_wch(
-		WINDOW	*win, 
+		WINDOW	*win,
 		const cchar_t *wch)
 		{ return(*(int *)0); }
 
 #undef wins_nwstr
 int	wins_nwstr(
-		WINDOW	*win, 
-		const wchar_t *wstr, 
+		WINDOW	*win,
+		const wchar_t *wstr,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -3207,14 +3342,14 @@
 
 #undef winnwstr
 int	winnwstr(
-		WINDOW	*win, 
-		wchar_t	*wstr, 
+		WINDOW	*win,
+		wchar_t	*wstr,
 		int	n)
 		{ return(*(int *)0); }
 
 #undef winwstr
 int	winwstr(
-		WINDOW	*win, 
+		WINDOW	*win,
 		wchar_t	*wstr)
 		{ return(*(int *)0); }
 
@@ -3229,7 +3364,7 @@
 
 #undef pecho_wchar
 int	pecho_wchar(
-		WINDOW	*pad, 
+		WINDOW	*pad,
 		const cchar_t *wch)
 		{ return(*(int *)0); }
 
@@ -3237,8 +3372,8 @@
 
 #undef slk_wset
 int	slk_wset(
-		int	i, 
-		const wchar_t *astr, 
+		int	i,
+		const wchar_t *astr,
 		int	format)
 		{ return(*(int *)0); }
 
@@ -3246,14 +3381,14 @@
 
 #undef _nc_wcrtomb
 size_t	_nc_wcrtomb(
-		char	*target, 
-		wchar_t	source, 
+		char	*target,
+		wchar_t	source,
 		mbstate_t *state)
 		{ return(*(size_t *)0); }
 
 #undef unget_wch_sp
 int	unget_wch_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const wchar_t wch)
 		{ return(*(int *)0); }
 
@@ -3266,33 +3401,33 @@
 
 #undef vid_puts_sp
 int	vid_puts_sp(
-		SCREEN	*sp, 
-		attr_t	newmode, 
-		short	pair, 
-		void	*opts, 
+		SCREEN	*sp,
+		attr_t	newmode,
+		short	pair_arg,
+		void	*opts,
 		NCURSES_OUTC_sp outc)
 		{ return(*(int *)0); }
 
 #undef vid_puts
 int	vid_puts(
-		attr_t	newmode, 
-		short	pair, 
-		void	*opts, 
+		attr_t	newmode,
+		short	pair_arg,
+		void	*opts,
 		NCURSES_OUTC outc)
 		{ return(*(int *)0); }
 
 #undef vid_attr_sp
 int	vid_attr_sp(
-		SCREEN	*sp, 
-		attr_t	newmode, 
-		short	pair, 
+		SCREEN	*sp,
+		attr_t	newmode,
+		short	pair_arg,
 		void	*opts)
 		{ return(*(int *)0); }
 
 #undef vid_attr
 int	vid_attr(
-		attr_t	newmode, 
-		short	pair, 
+		attr_t	newmode,
+		short	pair_arg,
 		void	*opts)
 		{ return(*(int *)0); }
 
@@ -3309,8 +3444,8 @@
 
 #undef wvline_set
 int	wvline_set(
-		WINDOW	*win, 
-		const cchar_t *ch, 
+		WINDOW	*win,
+		const cchar_t *ch,
 		int	n)
 		{ return(*(int *)0); }
 
@@ -3327,7 +3462,7 @@
 
 #undef wunctrl_sp
 wchar_t	*wunctrl_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		cchar_t	*wc)
 		{ return(*(wchar_t **)0); }
 
@@ -3340,31 +3475,31 @@
 
 #undef _nc_toggle_attr_on
 void	_nc_toggle_attr_on(
-		attr_t	*S, 
+		attr_t	*S,
 		attr_t	at)
 		{ /* void */ }
 
 #undef _nc_toggle_attr_off
 void	_nc_toggle_attr_off(
-		attr_t	*S, 
+		attr_t	*S,
 		attr_t	at)
 		{ /* void */ }
 
 #undef _nc_DelCharCost_sp
 int	_nc_DelCharCost_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	count)
 		{ return(*(int *)0); }
 
 #undef _nc_InsCharCost_sp
 int	_nc_InsCharCost_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	count)
 		{ return(*(int *)0); }
 
 #undef _nc_UpdateAttrs_sp
 void	_nc_UpdateAttrs_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const cchar_t *c)
 		{ /* void */ }
 
@@ -3387,7 +3522,7 @@
 
 #undef use_legacy_coding_sp
 int	use_legacy_coding_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	level)
 		{ return(*(int *)0); }
 
@@ -3409,14 +3544,14 @@
 
 #undef assume_default_colors_sp
 int	assume_default_colors_sp(
-		SCREEN	*sp, 
-		int	fg, 
+		SCREEN	*sp,
+		int	fg,
 		int	bg)
 		{ return(*(int *)0); }
 
 #undef assume_default_colors
 int	assume_default_colors(
-		int	fg, 
+		int	fg,
 		int	bg)
 		{ return(*(int *)0); }
 
@@ -3424,55 +3559,121 @@
 
 #undef mcprint_sp
 int	mcprint_sp(
-		SCREEN	*sp, 
-		char	*data, 
+		SCREEN	*sp,
+		char	*data,
 		int	len)
 		{ return(*(int *)0); }
 
 #undef mcprint
 int	mcprint(
-		char	*data, 
+		char	*data,
 		int	len)
 		{ return(*(int *)0); }
 
+/* ./base/new_pair.c */
+
+#undef _nc_free_ordered_pairs
+void	_nc_free_ordered_pairs(
+		SCREEN	*sp)
+		{ /* void */ }
+
+#undef _nc_reset_color_pair
+void	_nc_reset_color_pair(
+		SCREEN	*sp,
+		int	pair,
+		colorpair_t *next)
+		{ /* void */ }
+
+#undef _nc_set_color_pair
+void	_nc_set_color_pair(
+		SCREEN	*sp,
+		int	pair,
+		int	mode)
+		{ /* void */ }
+
+#undef _nc_copy_pairs
+void	_nc_copy_pairs(
+		SCREEN	*sp,
+		colorpair_t *target,
+		colorpair_t *source,
+		int	length)
+		{ /* void */ }
+
+#undef alloc_pair_sp
+int	alloc_pair_sp(
+		SCREEN	*sp,
+		int	fg,
+		int	bg)
+		{ return(*(int *)0); }
+
+#undef find_pair_sp
+int	find_pair_sp(
+		SCREEN	*sp,
+		int	fg,
+		int	bg)
+		{ return(*(int *)0); }
+
+#undef free_pair_sp
+int	free_pair_sp(
+		SCREEN	*sp,
+		int	pair)
+		{ return(*(int *)0); }
+
+#undef alloc_pair
+int	alloc_pair(
+		int	f,
+		int	b)
+		{ return(*(int *)0); }
+
+#undef find_pair
+int	find_pair(
+		int	f,
+		int	b)
+		{ return(*(int *)0); }
+
+#undef free_pair
+int	free_pair(
+		int	pair)
+		{ return(*(int *)0); }
+
 /* ./base/resizeterm.c */
 
 #undef is_term_resized_sp
 NCURSES_BOOL is_term_resized_sp(
-		SCREEN	*sp, 
-		int	ToLines, 
+		SCREEN	*sp,
+		int	ToLines,
 		int	ToCols)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef is_term_resized
 NCURSES_BOOL is_term_resized(
-		int	ToLines, 
+		int	ToLines,
 		int	ToCols)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef resize_term_sp
 int	resize_term_sp(
-		SCREEN	*sp, 
-		int	ToLines, 
+		SCREEN	*sp,
+		int	ToLines,
 		int	ToCols)
 		{ return(*(int *)0); }
 
 #undef resize_term
 int	resize_term(
-		int	ToLines, 
+		int	ToLines,
 		int	ToCols)
 		{ return(*(int *)0); }
 
 #undef resizeterm_sp
 int	resizeterm_sp(
-		SCREEN	*sp, 
-		int	ToLines, 
+		SCREEN	*sp,
+		int	ToLines,
 		int	ToCols)
 		{ return(*(int *)0); }
 
 #undef resizeterm
 int	resizeterm(
-		int	ToLines, 
+		int	ToLines,
 		int	ToCols)
 		{ return(*(int *)0); }
 
@@ -3487,8 +3688,8 @@
 
 #undef use_screen
 int	use_screen(
-		SCREEN	*screen, 
-		NCURSES_SCREEN_CB func, 
+		SCREEN	*screen,
+		NCURSES_SCREEN_CB func,
 		void	*data)
 		{ return(*(int *)0); }
 
@@ -3496,8 +3697,8 @@
 
 #undef use_window
 int	use_window(
-		WINDOW	*win, 
-		NCURSES_WINDOW_CB func, 
+		WINDOW	*win,
+		NCURSES_WINDOW_CB func,
 		void	*data)
 		{ return(*(int *)0); }
 
@@ -3505,8 +3706,8 @@
 
 #undef wresize
 int	wresize(
-		WINDOW	*win, 
-		int	ToLines, 
+		WINDOW	*win,
+		int	ToLines,
 		int	ToCols)
 		{ return(*(int *)0); }
 
@@ -3534,7 +3735,7 @@
 
 #undef _nc_access
 int	_nc_access(
-		const char *path, 
+		const char *path,
 		int	mode)
 		{ return(*(int *)0); }
 
@@ -3552,12 +3753,25 @@
 int	_nc_env_access(void)
 		{ return(*(int *)0); }
 
+#undef _nc_safe_fopen
+FILE	*_nc_safe_fopen(
+		const char *path,
+		const char *mode)
+		{ return(*(FILE **)0); }
+
+#undef _nc_safe_open3
+int	_nc_safe_open3(
+		const char *path,
+		int	flags,
+		mode_t	mode)
+		{ return(*(int *)0); }
+
 /* ./tinfo/add_tries.c */
 
 #undef _nc_add_to_try
 int	_nc_add_to_try(
-		TRIES	**tree, 
-		const char *str, 
+		TRIES	**tree,
+		const char *str,
 		unsigned code)
 		{ return(*(int *)0); }
 
@@ -3565,16 +3779,28 @@
 
 #undef _nc_align_termtype
 void	_nc_align_termtype(
-		TERMTYPE *to, 
-		TERMTYPE *from)
+		TERMTYPE2 *to,
+		TERMTYPE2 *from)
 		{ /* void */ }
 
 #undef _nc_copy_termtype
 void	_nc_copy_termtype(
-		TERMTYPE *dst, 
+		TERMTYPE *dst,
 		const TERMTYPE *src)
 		{ /* void */ }
 
+#undef _nc_copy_termtype2
+void	_nc_copy_termtype2(
+		TERMTYPE2 *dst,
+		const TERMTYPE2 *src)
+		{ /* void */ }
+
+#undef _nc_export_termtype2
+void	_nc_export_termtype2(
+		TERMTYPE *dst,
+		const TERMTYPE2 *src)
+		{ /* void */ }
+
 /* ./codes.c */
 
 #undef _nc_boolcodes
@@ -3641,19 +3867,19 @@
 
 #undef _nc_warning
 void	_nc_warning(
-		const char *const fmt, 
+		const char *const fmt,
 		...)
 		{ /* void */ }
 
 #undef _nc_err_abort
 void	_nc_err_abort(
-		const char *const fmt, 
+		const char *const fmt,
 		...)
 		{ /* void */ }
 
 #undef _nc_syserr_abort
 void	_nc_syserr_abort(
-		const char *const fmt, 
+		const char *const fmt,
 		...)
 		{ /* void */ }
 
@@ -3661,17 +3887,32 @@
 
 #undef _nc_find_entry
 struct name_table_entry const *_nc_find_entry(
-		const char *string, 
+		const char *string,
 		const HashValue *hash_table)
 		{ return(*(struct name_table_entry const **)0); }
 
 #undef _nc_find_type_entry
 struct name_table_entry const *_nc_find_type_entry(
-		const char *string, 
-		int	type, 
+		const char *string,
+		int	type,
 		NCURSES_BOOL termcap)
 		{ return(*(struct name_table_entry const **)0); }
 
+#undef _nc_find_user_entry
+struct user_table_entry const *_nc_find_user_entry(
+		const char *string)
+		{ return(*(struct user_table_entry const **)0); }
+
+/* ./comp_userdefs.c */
+
+#undef _nc_get_userdefs_table
+const struct user_table_entry *_nc_get_userdefs_table(void)
+		{ return(*(const struct user_table_entry **)0); }
+
+#undef _nc_get_hash_user
+const HashData *_nc_get_hash_user(void)
+		{ return(*(const HashData **)0); }
+
 /* ./tinfo/db_iterator.c */
 
 #undef _nc_tic_dir
@@ -3690,13 +3931,13 @@
 
 #undef _nc_next_db
 const char *_nc_next_db(
-		DBDIRS	*state, 
+		DBDIRS	*state,
 		int	*offset)
 		{ return(*(const char **)0); }
 
 #undef _nc_first_db
 void	_nc_first_db(
-		DBDIRS	*state, 
+		DBDIRS	*state,
 		int	*offset)
 		{ /* void */ }
 
@@ -3704,7 +3945,7 @@
 
 #undef _nc_doalloc
 void	*_nc_doalloc(
-		void	*oldp, 
+		void	*oldp,
 		size_t	amount)
 		{ return(*(void **)0); }
 
@@ -3717,8 +3958,8 @@
 
 #undef _nc_free_entry
 void	_nc_free_entry(
-		ENTRY	*headp, 
-		TERMTYPE *tterm)
+		ENTRY	*headp,
+		TERMTYPE2 *tterm)
 		{ /* void */ }
 
 #undef _nc_free_entries
@@ -3726,18 +3967,22 @@
 		ENTRY	*headp)
 		{ /* void */ }
 
-#undef _nc_delink_entry
-ENTRY	*_nc_delink_entry(
-		ENTRY	*headp, 
-		TERMTYPE *tterm)
-		{ return(*(ENTRY **)0); }
-
 #undef _nc_leaks_tinfo
 void	_nc_leaks_tinfo(void)
 		{ /* void */ }
 
+#undef exit_terminfo
+void	exit_terminfo(
+		int	code)
+		{ /* void */ }
+
 /* ./fallback.c */
 
+#undef _nc_fallback2
+const TERMTYPE2 *_nc_fallback2(
+		const char *name)
+		{ return(*(const TERMTYPE2 **)0); }
+
 #undef _nc_fallback
 const TERMTYPE *_nc_fallback(
 		const char *name)
@@ -3750,6 +3995,16 @@
 		TERMTYPE *ptr)
 		{ /* void */ }
 
+#undef _nc_free_termtype1
+void	_nc_free_termtype1(
+		TERMTYPE *ptr)
+		{ /* void */ }
+
+#undef _nc_free_termtype2
+void	_nc_free_termtype2(
+		TERMTYPE2 *ptr)
+		{ /* void */ }
+
 #undef _nc_user_definable
 NCURSES_BOOL _nc_user_definable;
 
@@ -3767,7 +4022,7 @@
 
 #undef _nc_setenv_num
 void	_nc_setenv_num(
-		const char *name, 
+		const char *name,
 		int	value)
 		{ /* void */ }
 
@@ -3802,8 +4057,8 @@
 /* ./tinfo/lib_baudrate.c */
 
 struct speed {
-    short s; 
-    int sp; 
+    int given_speed;
+    int actual_speed;
 };
 
 #undef _nc_baudrate
@@ -3842,7 +4097,7 @@
 
 #undef set_curterm_sp
 TERMINAL *set_curterm_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		TERMINAL *termp)
 		{ return(*(TERMINAL **)0); }
 
@@ -3853,7 +4108,7 @@
 
 #undef del_curterm_sp
 int	del_curterm_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		TERMINAL *termp)
 		{ return(*(int *)0); }
 
@@ -3969,7 +4224,7 @@
 
 #undef keyname_sp
 const char *keyname_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	c)
 		{ return(*(const char **)0); }
 
@@ -3993,7 +4248,7 @@
 
 #undef napms_sp
 int	napms_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	ms)
 		{ return(*(int *)0); }
 
@@ -4006,19 +4261,19 @@
 
 #undef idlok
 int	idlok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
 #undef idcok
 void	idcok(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ /* void */ }
 
 #undef halfdelay_sp
 int	halfdelay_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	t)
 		{ return(*(int *)0); }
 
@@ -4029,37 +4284,37 @@
 
 #undef nodelay
 int	nodelay(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
 #undef notimeout
 int	notimeout(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL f)
 		{ return(*(int *)0); }
 
 #undef wtimeout
 void	wtimeout(
-		WINDOW	*win, 
+		WINDOW	*win,
 		int	delay)
 		{ /* void */ }
 
 #undef keypad
 int	keypad(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
 #undef meta
 int	meta(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
 #undef curs_set_sp
 int	curs_set_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	vis)
 		{ return(*(int *)0); }
 
@@ -4070,7 +4325,7 @@
 
 #undef typeahead_sp
 int	typeahead_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	fd)
 		{ return(*(int *)0); }
 
@@ -4081,7 +4336,7 @@
 
 #undef has_key_sp
 int	has_key_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	keycode)
 		{ return(*(int *)0); }
 
@@ -4092,14 +4347,14 @@
 
 #undef _nc_putp_flush_sp
 int	_nc_putp_flush_sp(
-		SCREEN	*sp, 
-		const char *name, 
+		SCREEN	*sp,
+		const char *name,
 		const char *value)
 		{ return(*(int *)0); }
 
 #undef _nc_keypad
 int	_nc_keypad(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	flag)
 		{ return(*(int *)0); }
 
@@ -4161,17 +4416,53 @@
 
 #undef intrflush_sp
 int	intrflush_sp(
-		SCREEN	*sp, 
-		WINDOW	*win, 
+		SCREEN	*sp,
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
 #undef intrflush
 int	intrflush(
-		WINDOW	*win, 
+		WINDOW	*win,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
+#undef is_nl_sp
+int	is_nl_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
+#undef is_raw_sp
+int	is_raw_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
+#undef is_cbreak_sp
+int	is_cbreak_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
+#undef is_echo_sp
+int	is_echo_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
+#undef is_nl
+int	is_nl(void)
+		{ return(*(int *)0); }
+
+#undef is_raw
+int	is_raw(void)
+		{ return(*(int *)0); }
+
+#undef is_cbreak
+int	is_cbreak(void)
+		{ return(*(int *)0); }
+
+#undef is_echo
+int	is_echo(void)
+		{ return(*(int *)0); }
+
 /* ./tinfo/lib_setup.c */
 
 #undef _nc_ttytype
@@ -4207,7 +4498,7 @@
 
 #undef set_tabsize_sp
 int	set_tabsize_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	value)
 		{ return(*(int *)0); }
 
@@ -4223,13 +4514,13 @@
 
 #undef use_env_sp
 void	use_env_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		NCURSES_BOOL f)
 		{ /* void */ }
 
 #undef use_tioctl_sp
 void	use_tioctl_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		NCURSES_BOOL f)
 		{ /* void */ }
 
@@ -4245,8 +4536,8 @@
 
 #undef _nc_get_screensize
 void	_nc_get_screensize(
-		SCREEN	*sp, 
-		int	*linep, 
+		SCREEN	*sp,
+		int	*linep,
 		int	*colp)
 		{ /* void */ }
 
@@ -4257,13 +4548,13 @@
 
 #undef _nc_setup_tinfo
 int	_nc_setup_tinfo(
-		const char *const tn, 
-		TERMTYPE *const tp)
+		const char *const tn,
+		TERMTYPE2 *const tp)
 		{ return(*(int *)0); }
 
 #undef _nc_tinfo_cmdch
 void	_nc_tinfo_cmdch(
-		TERMINAL *termp, 
+		TERMINAL *termp,
 		int	proto)
 		{ /* void */ }
 
@@ -4282,20 +4573,28 @@
 
 #undef _nc_setupterm
 int	_nc_setupterm(
-		const char *tname, 
-		int	Filedes, 
-		int	*errret, 
+		const char *tname,
+		int	Filedes,
+		int	*errret,
 		int	reuse)
 		{ return(*(int *)0); }
 
+#undef _nc_find_prescr
+SCREEN	*_nc_find_prescr(void)
+		{ return(*(SCREEN **)0); }
+
+#undef _nc_forget_prescr
+void	_nc_forget_prescr(void)
+		{ /* void */ }
+
 #undef new_prescr
 SCREEN	*new_prescr(void)
 		{ return(*(SCREEN **)0); }
 
 #undef setupterm
 int	setupterm(
-		const char *tname, 
-		int	Filedes, 
+		const char *tname,
+		int	Filedes,
 		int	*errret)
 		{ return(*(int *)0); }
 
@@ -4308,20 +4607,20 @@
 
 #undef tgetent_sp
 int	tgetent_sp(
-		SCREEN	*sp, 
-		char	*bufp, 
+		SCREEN	*sp,
+		char	*bufp,
 		const char *name)
 		{ return(*(int *)0); }
 
 #undef tgetent
 int	tgetent(
-		char	*bufp, 
+		char	*bufp,
 		const char *name)
 		{ return(*(int *)0); }
 
 #undef tgetflag_sp
 int	tgetflag_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *id)
 		{ return(*(int *)0); }
 
@@ -4332,7 +4631,7 @@
 
 #undef tgetnum_sp
 int	tgetnum_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *id)
 		{ return(*(int *)0); }
 
@@ -4343,14 +4642,14 @@
 
 #undef tgetstr_sp
 char	*tgetstr_sp(
-		SCREEN	*sp, 
-		const char *id, 
+		SCREEN	*sp,
+		const char *id,
 		char	**area)
 		{ return(*(char **)0); }
 
 #undef tgetstr
 char	*tgetstr(
-		const char *id, 
+		const char *id,
 		char	**area)
 		{ return(*(char **)0); }
 
@@ -4369,8 +4668,8 @@
 
 #undef tgoto
 char	*tgoto(
-		const char *string, 
-		int	x, 
+		const char *string,
+		int	x,
 		int	y)
 		{ return(*(char **)0); }
 
@@ -4378,7 +4677,7 @@
 
 #undef tigetflag_sp
 int	tigetflag_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *str)
 		{ return(*(int *)0); }
 
@@ -4389,7 +4688,7 @@
 
 #undef tigetnum_sp
 int	tigetnum_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *str)
 		{ return(*(int *)0); }
 
@@ -4400,7 +4699,7 @@
 
 #undef tigetstr_sp
 char	*tigetstr_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *str)
 		{ return(*(char **)0); }
 
@@ -4414,25 +4713,58 @@
 #undef _nc_tparm_err
 int	_nc_tparm_err;
 
+#undef _nc_free_tparm
+void	_nc_free_tparm(
+		TERMINAL *termp)
+		{ /* void */ }
+
 #undef _nc_tparm_analyze
 int	_nc_tparm_analyze(
-		const char *string, 
-		char	*p_is_s[9], 
+		TERMINAL *term,
+		const char *string,
+		char	**p_is_s,
 		int	*_nc_popcount)
 		{ return(*(int *)0); }
 
 #undef tparm
 char	*tparm(
-		const char *string, 
+		const char *string,
 		...)
 		{ return(*(char **)0); }
 
 #undef tiparm
 char	*tiparm(
-		const char *string, 
+		const char *string,
 		...)
 		{ return(*(char **)0); }
 
+#undef tiparm_s
+char	*tiparm_s(
+		int	num_expected,
+		int	tparm_type,
+		const char *string,
+		...)
+		{ return(*(char **)0); }
+
+#undef tiscan_s
+int	tiscan_s(
+		int	*num_expected,
+		int	*tparm_type,
+		const char *string)
+		{ return(*(int *)0); }
+
+#undef _nc_tiparm
+char	*_nc_tiparm(
+		int	expected,
+		const char *string,
+		...)
+		{ return(*(char **)0); }
+
+#undef _nc_reset_tparm
+void	_nc_reset_tparm(
+		TERMINAL *term)
+		{ /* void */ }
+
 /* ./tinfo/lib_tputs.c */
 
 #undef PC
@@ -4449,7 +4781,7 @@
 
 #undef delay_output_sp
 int	delay_output_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	ms)
 		{ return(*(int *)0); }
 
@@ -4469,7 +4801,7 @@
 
 #undef _nc_outch_sp
 int	_nc_outch_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	ch)
 		{ return(*(int *)0); }
 
@@ -4480,7 +4812,7 @@
 
 #undef _nc_putchar_sp
 int	_nc_putchar_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	ch)
 		{ return(*(int *)0); }
 
@@ -4491,7 +4823,7 @@
 
 #undef putp_sp
 int	putp_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *string)
 		{ return(*(int *)0); }
 
@@ -4502,35 +4834,35 @@
 
 #undef _nc_putp_sp
 int	_nc_putp_sp(
-		SCREEN	*sp, 
-		const char *name, 
+		SCREEN	*sp,
+		const char *name,
 		const char *string)
 		{ return(*(int *)0); }
 
 #undef _nc_putp
 int	_nc_putp(
-		const char *name, 
+		const char *name,
 		const char *string)
 		{ return(*(int *)0); }
 
 #undef tputs_sp
 int	tputs_sp(
-		SCREEN	*sp, 
-		const char *string, 
-		int	affcnt, 
+		SCREEN	*sp,
+		const char *string,
+		int	affcnt,
 		NCURSES_OUTC_sp outc)
 		{ return(*(int *)0); }
 
 #undef _nc_outc_wrapper
 int	_nc_outc_wrapper(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	c)
 		{ return(*(int *)0); }
 
 #undef tputs
 int	tputs(
-		const char *string, 
-		int	affcnt, 
+		const char *string,
+		int	affcnt,
 		int	(*outc)(
 		int	p1))
 		{ return(*(int *)0); }
@@ -4558,6 +4890,11 @@
 		long	increment)
 		{ /* void */ }
 
+#undef curses_trace
+unsigned curses_trace(
+		unsigned tracelevel)
+		{ return(*(unsigned *)0); }
+
 #undef trace
 void	trace(
 		const unsigned int tracelevel)
@@ -4565,7 +4902,7 @@
 
 #undef _tracef
 void	_tracef(
-		const char *fmt, 
+		const char *fmt,
 		...)
 		{ /* void */ }
 
@@ -4619,6 +4956,13 @@
 		WINDOW	*code)
 		{ return(*(WINDOW **)0); }
 
+#undef _nc_fmt_funcptr
+char	*_nc_fmt_funcptr(
+		char	*target,
+		const char *source,
+		size_t	size)
+		{ return(*(char **)0); }
+
 #undef _nc_use_tracef
 int	_nc_use_tracef(
 		unsigned mask)
@@ -4626,7 +4970,7 @@
 
 #undef _nc_locked_tracef
 void	_nc_locked_tracef(
-		const char *fmt, 
+		const char *fmt,
 		...)
 		{ /* void */ }
 
@@ -4634,7 +4978,7 @@
 
 #undef _traceattr2
 char	*_traceattr2(
-		int	bufnum, 
+		int	bufnum,
 		chtype	newmode)
 		{ return(*(char **)0); }
 
@@ -4655,13 +4999,13 @@
 
 #undef _nc_altcharset_name
 const char *_nc_altcharset_name(
-		attr_t	attr, 
+		attr_t	attr,
 		chtype	ch)
 		{ return(*(const char **)0); }
 
 #undef _tracechtype2
 char	*_tracechtype2(
-		int	bufnum, 
+		int	bufnum,
 		chtype	ch)
 		{ return(*(char **)0); }
 
@@ -4677,7 +5021,7 @@
 
 #undef _tracecchar_t2
 char	*_tracecchar_t2(
-		int	bufnum, 
+		int	bufnum,
 		const cchar_t *ch)
 		{ return(*(char **)0); }
 
@@ -4688,14 +5032,9 @@
 
 /* ./trace/lib_tracebits.c */
 
-typedef struct {
-    unsigned int val;
-    const char name[8];
-} BITNAMES;
-
 #undef _nc_trace_ttymode
 char	*_nc_trace_ttymode(
-		struct termios *tty)
+		const struct termios *tty)
 		{ return(*(char **)0); }
 
 #undef _nc_tracebits
@@ -4706,7 +5045,7 @@
 
 #undef _nc_tracechar
 char	*_nc_tracechar(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		int	ch)
 		{ return(*(char **)0); }
 
@@ -4719,7 +5058,7 @@
 
 #undef _nc_get_tty_mode_sp
 int	_nc_get_tty_mode_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		struct termios *buf)
 		{ return(*(int *)0); }
 
@@ -4730,7 +5069,7 @@
 
 #undef _nc_set_tty_mode_sp
 int	_nc_set_tty_mode_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		struct termios *buf)
 		{ return(*(int *)0); }
 
@@ -4797,9 +5136,9 @@
 
 #undef _nc_timed_wait
 int	_nc_timed_wait(
-		SCREEN	*sp, 
-		int	mode, 
-		int	milliseconds, 
+		SCREEN	*sp,
+		int	mode,
+		int	milliseconds,
 		int	*timeleft)
 		{ return(*(int *)0); }
 
@@ -4812,8 +5151,8 @@
 
 #undef _nc_name_match
 int	_nc_name_match(
-		const char *const namelst, 
-		const char *const name, 
+		const char *const namelst,
+		const char *const name,
 		const char *const delim)
 		{ return(*(int *)0); }
 
@@ -4847,14 +5186,14 @@
 
 #undef _nc_set_buffer_sp
 void	_nc_set_buffer_sp(
-		SCREEN	*sp, 
-		FILE	*ofp, 
+		SCREEN	*sp,
+		FILE	*ofp,
 		int	buffered)
 		{ /* void */ }
 
 #undef _nc_set_buffer
 void	_nc_set_buffer(
-		FILE	*ofp, 
+		FILE	*ofp,
 		int	buffered)
 		{ /* void */ }
 
@@ -4862,65 +5201,74 @@
 
 #undef _nc_init_termtype
 void	_nc_init_termtype(
-		TERMTYPE *const tp)
+		TERMTYPE2 *const tp)
 		{ /* void */ }
 
 #undef _nc_read_termtype
 int	_nc_read_termtype(
-		TERMTYPE *ptr, 
-		char	*buffer, 
+		TERMTYPE2 *ptr,
+		char	*buffer,
 		int	limit)
 		{ return(*(int *)0); }
 
 #undef _nc_read_file_entry
 int	_nc_read_file_entry(
-		const char *const filename, 
-		TERMTYPE *ptr)
+		const char *const filename,
+		TERMTYPE2 *ptr)
+		{ return(*(int *)0); }
+
+#undef _nc_read_entry2
+int	_nc_read_entry2(
+		const char *const name,
+		char	*const filename,
+		TERMTYPE2 *const tp)
 		{ return(*(int *)0); }
 
 #undef _nc_read_entry
 int	_nc_read_entry(
-		const char *const name, 
-		char	*const filename, 
+		const char *const name,
+		char	*const filename,
 		TERMTYPE *const tp)
 		{ return(*(int *)0); }
 
 /* ./tinfo/read_termcap.c */
 
-#undef _nc_read_termcap
-void	_nc_read_termcap(void)
-		{ /* void */ }
+#undef _nc_read_termcap_entry
+int	_nc_read_termcap_entry(
+		const char *const tn,
+		TERMTYPE2 *const tp)
+		{ return(*(int *)0); }
 
 /* ./tinfo/strings.c */
 
 #undef _nc_str_init
 string_desc *_nc_str_init(
-		string_desc *dst, 
-		char	*src, 
+		string_desc *dst,
+		char	*src,
 		size_t	len)
 		{ return(*(string_desc **)0); }
 
 #undef _nc_str_null
 string_desc *_nc_str_null(
-		string_desc *dst, 
+		string_desc *dst,
 		size_t	len)
 		{ return(*(string_desc **)0); }
 
 #undef _nc_str_copy
 string_desc *_nc_str_copy(
-		string_desc *dst, 
-		string_desc *src)
+		string_desc *dst,
+		const string_desc *const src)
 		{ return(*(string_desc **)0); }
 
 #undef _nc_safe_strcat
 NCURSES_BOOL _nc_safe_strcat(
-		string_desc *dst, 
+		string_desc *dst,
 		const char *src)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef _nc_safe_strcpy
 NCURSES_BOOL _nc_safe_strcpy(
-		string_desc *dst, 
+		string_desc *dst,
 		const char *src)
 		{ return(*(NCURSES_BOOL *)0); }
 
@@ -4928,13 +5276,13 @@
 
 #undef _nc_trace_buf
 char	*_nc_trace_buf(
-		int	bufnum, 
+		int	bufnum,
 		size_t	want)
 		{ return(*(char **)0); }
 
 #undef _nc_trace_bufcat
 char	*_nc_trace_bufcat(
-		int	bufnum, 
+		int	bufnum,
 		const char *value)
 		{ return(*(char **)0); }
 
@@ -4949,21 +5297,21 @@
 
 #undef _nc_expand_try
 char	*_nc_expand_try(
-		TRIES	*tree, 
-		unsigned code, 
-		int	*count, 
+		TRIES	*tree,
+		unsigned code,
+		int	*count,
 		size_t	len)
 		{ return(*(char **)0); }
 
 #undef _nc_remove_key
 int	_nc_remove_key(
-		TRIES	**tree, 
+		TRIES	**tree,
 		unsigned code)
 		{ return(*(int *)0); }
 
 #undef _nc_remove_string
 int	_nc_remove_string(
-		TRIES	**tree, 
+		TRIES	**tree,
 		const char *string)
 		{ return(*(int *)0); }
 
@@ -4971,14 +5319,14 @@
 
 #undef _nc_trim_sgr0
 char	*_nc_trim_sgr0(
-		TERMTYPE *tp)
+		TERMTYPE2 *tp)
 		{ return(*(char **)0); }
 
 /* ./unctrl.c */
 
 #undef unctrl_sp
 const char *unctrl_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		chtype	ch)
 		{ return(*(const char **)0); }
 
@@ -4991,7 +5339,7 @@
 
 #undef _nc_visbuf2
 const char *_nc_visbuf2(
-		int	bufnum, 
+		int	bufnum,
 		const char *buf)
 		{ return(*(const char **)0); }
 
@@ -5002,13 +5350,13 @@
 
 #undef _nc_visbufn
 const char *_nc_visbufn(
-		const char *buf, 
+		const char *buf,
 		int	len)
 		{ return(*(const char **)0); }
 
 #undef _nc_viswbuf2
 const char *_nc_viswbuf2(
-		int	bufnum, 
+		int	bufnum,
 		const wchar_t *buf)
 		{ return(*(const char **)0); }
 
@@ -5019,7 +5367,7 @@
 
 #undef _nc_viswbufn
 const char *_nc_viswbufn(
-		const wchar_t *buf, 
+		const wchar_t *buf,
 		int	len)
 		{ return(*(const char **)0); }
 
@@ -5030,14 +5378,14 @@
 
 #undef _nc_viscbuf2
 const char *_nc_viscbuf2(
-		int	bufnum, 
-		const cchar_t *buf, 
+		int	bufnum,
+		const cchar_t *buf,
 		int	len)
 		{ return(*(const char **)0); }
 
 #undef _nc_viscbuf
 const char *_nc_viscbuf(
-		const cchar_t *buf, 
+		const cchar_t *buf,
 		int	len)
 		{ return(*(const char **)0); }
 
@@ -5045,7 +5393,7 @@
 
 #undef _nc_init_entry
 void	_nc_init_entry(
-		TERMTYPE *const tp)
+		ENTRY	*const tp)
 		{ /* void */ }
 
 #undef _nc_copy_entry
@@ -5055,34 +5403,34 @@
 
 #undef _nc_save_str
 char	*_nc_save_str(
-		const char *const string)
+		const char *string)
 		{ return(*(char **)0); }
 
 #undef _nc_wrap_entry
 void	_nc_wrap_entry(
-		ENTRY	*const ep, 
+		ENTRY	*const ep,
 		NCURSES_BOOL copy_strings)
 		{ /* void */ }
 
 #undef _nc_merge_entry
 void	_nc_merge_entry(
-		TERMTYPE *const to, 
-		TERMTYPE *const from)
+		ENTRY	*const target,
+		ENTRY	*const source)
 		{ /* void */ }
 
 /* ./tinfo/captoinfo.c */
 
 #undef _nc_captoinfo
 char	*_nc_captoinfo(
-		const char *cap, 
-		const char *s, 
+		const char *cap,
+		const char *s,
 		int const parameterized)
 		{ return(*(char **)0); }
 
 #undef _nc_infotocap
 char	*_nc_infotocap(
-		const char *cap, 
-		const char *str, 
+		const char *cap,
+		const char *str,
 		int const parameterized)
 		{ return(*(char **)0); }
 
@@ -5090,8 +5438,8 @@
 
 #undef _nc_tic_expand
 char	*_nc_tic_expand(
-		const char *srcp, 
-		NCURSES_BOOL tic_format, 
+		const char *srcp,
+		NCURSES_BOOL tic_format,
 		int	numbers)
 		{ return(*(char **)0); }
 
@@ -5099,39 +5447,31 @@
 
 #undef _nc_check_termtype2
 void	(*_nc_check_termtype2)(
-		TERMTYPE *p1, 
+		TERMTYPE2 *p1,
 		NCURSES_BOOL p2);
-#undef _nc_check_termtype
-void	(*_nc_check_termtype)(
-		TERMTYPE *p1);
 
 #undef _nc_entry_match
 NCURSES_BOOL _nc_entry_match(
-		char	*n1, 
+		char	*n1,
 		char	*n2)
 		{ return(*(NCURSES_BOOL *)0); }
 
 #undef _nc_read_entry_source
 void	_nc_read_entry_source(
-		FILE	*fp, 
-		char	*buf, 
-		int	literal, 
-		NCURSES_BOOL silent, 
+		FILE	*fp,
+		char	*buf,
+		int	literal,
+		NCURSES_BOOL silent,
 		NCURSES_BOOL (*hook)(
 		ENTRY	*p1))
 		{ /* void */ }
 
 #undef _nc_resolve_uses2
 int	_nc_resolve_uses2(
-		NCURSES_BOOL fullresolve, 
+		NCURSES_BOOL fullresolve,
 		NCURSES_BOOL literal)
 		{ return(*(int *)0); }
 
-#undef _nc_resolve_uses
-int	_nc_resolve_uses(
-		NCURSES_BOOL fullresolve)
-		{ return(*(int *)0); }
-
 /* ./tinfo/comp_scan.c */
 
 #undef _nc_syntax
@@ -5153,7 +5493,7 @@
 
 #undef _nc_reset_input
 void	_nc_reset_input(
-		FILE	*fp, 
+		FILE	*fp,
 		char	*buf)
 		{ /* void */ }
 
@@ -5164,8 +5504,8 @@
 
 #undef _nc_trans_string
 int	_nc_trans_string(
-		char	*ptr, 
-		char	*last)
+		char	*ptr,
+		const char *const last)
 		{ return(*(int *)0); }
 
 #undef _nc_push_token
@@ -5182,22 +5522,17 @@
 
 #undef _nc_parse_entry
 int	_nc_parse_entry(
-		struct entry *entryp, 
-		int	literal, 
+		ENTRY	*entryp,
+		int	literal,
 		NCURSES_BOOL silent)
 		{ return(*(int *)0); }
 
 #undef _nc_capcmp
 int	_nc_capcmp(
-		const char *s, 
+		const char *s,
 		const char *t)
 		{ return(*(int *)0); }
 
-typedef struct {
-    const char from[3];
-    const char to[6];
-} assoc;
-
 /* ./tinfo/write_entry.c */
 
 #undef _nc_set_writedir
@@ -5207,9 +5542,17 @@
 
 #undef _nc_write_entry
 void	_nc_write_entry(
-		TERMTYPE *const tp)
+		TERMTYPE2 *const tp)
 		{ /* void */ }
 
+#undef _nc_write_object
+int	_nc_write_object(
+		TERMTYPE2 *tp,
+		char	*buffer,
+		unsigned *offset,
+		unsigned limit)
+		{ return(*(int *)0); }
+
 #undef _nc_tic_written
 int	_nc_tic_written(void)
 		{ return(*(int *)0); }
@@ -5218,14 +5561,14 @@
 
 #undef define_key_sp
 int	define_key_sp(
-		SCREEN	*sp, 
-		const char *str, 
+		SCREEN	*sp,
+		const char *str,
 		int	keycode)
 		{ return(*(int *)0); }
 
 #undef define_key
 int	define_key(
-		const char *str, 
+		const char *str,
 		int	keycode)
 		{ return(*(int *)0); }
 
@@ -5239,7 +5582,7 @@
 
 #undef key_defined_sp
 int	key_defined_sp(
-		SCREEN	*sp, 
+		SCREEN	*sp,
 		const char *str)
 		{ return(*(int *)0); }
 
@@ -5252,14 +5595,14 @@
 
 #undef keybound_sp
 char	*keybound_sp(
-		SCREEN	*sp, 
-		int	code, 
+		SCREEN	*sp,
+		int	code,
 		int	count)
 		{ return(*(char **)0); }
 
 #undef keybound
 char	*keybound(
-		int	code, 
+		int	code,
 		int	count)
 		{ return(*(char **)0); }
 
@@ -5267,14 +5610,14 @@
 
 #undef keyok_sp
 int	keyok_sp(
-		SCREEN	*sp, 
-		int	c, 
+		SCREEN	*sp,
+		int	c,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
 #undef keyok
 int	keyok(
-		int	c, 
+		int	c,
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
