diff --git a/ncurses/llib-lncurses b/ncurses/llib-lncurses
index cc0e366..4604fdd 100644
--- a/ncurses/llib-lncurses
+++ b/ncurses/llib-lncurses
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2013,2015 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            *
@@ -27,7 +27,7 @@
  ****************************************************************************/
 
 /****************************************************************************
- *  Author: Thomas E. Dickey 1996-2008                                      *
+ *  Author: Thomas E. Dickey       1996-on                                  *
  ****************************************************************************/
 /* LINTLIBRARY */
 
@@ -38,27 +38,54 @@
 #undef _nc_oldnums
 int	*_nc_oldnums;
 
+#undef _nc_scroll_optimize_sp
+void	_nc_scroll_optimize_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_scroll_optimize
 void	_nc_scroll_optimize(void)
 		{ /* void */ }
 
+#undef _nc_linedump_sp
+void	_nc_linedump_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_linedump
 void	_nc_linedump(void)
 		{ /* void */ }
 
 /* ./tty/hashmap.c */
 
-#include <term.h>
+#undef _nc_hash_map_sp
+void	_nc_hash_map_sp(
+		SCREEN	*sp)
+		{ /* void */ }
 
 #undef _nc_hash_map
 void	_nc_hash_map(void)
 		{ /* void */ }
 
+#undef _nc_make_oldhash_sp
+void	_nc_make_oldhash_sp(
+		SCREEN	*sp, 
+		int	i)
+		{ /* void */ }
+
 #undef _nc_make_oldhash
 void	_nc_make_oldhash(
 		int	i)
 		{ /* void */ }
 
+#undef _nc_scroll_oldhash_sp
+void	_nc_scroll_oldhash_sp(
+		SCREEN	*sp, 
+		int	n, 
+		int	top, 
+		int	bot)
+		{ /* void */ }
+
 #undef _nc_scroll_oldhash
 void	_nc_scroll_oldhash(
 		int	n, 
@@ -68,8 +95,6 @@
 
 /* ./base/lib_addch.c */
 
-#include <ctype.h>
-
 #undef _nc_render
 chtype	_nc_render(
 		WINDOW	*win, 
@@ -112,6 +137,11 @@
 
 /* ./base/lib_beep.c */
 
+#undef beep_sp
+int	beep_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef beep
 int	beep(void)
 		{ return(*(int *)0); }
@@ -187,21 +217,37 @@
 
 /* ./base/lib_color.c */
 
-#include <tic.h>
-
 #undef COLOR_PAIRS
 int	COLOR_PAIRS;
 #undef COLORS
 int	COLORS;
 
+#undef _nc_reset_colors_sp
+NCURSES_BOOL _nc_reset_colors_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef _nc_reset_colors
 NCURSES_BOOL _nc_reset_colors(void)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef start_color_sp
+int	start_color_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef start_color
 int	start_color(void)
 		{ return(*(int *)0); }
 
+#undef init_pair_sp
+int	init_pair_sp(
+		SCREEN	*sp, 
+		short	pair, 
+		short	f, 
+		short	b)
+		{ return(*(int *)0); }
+
 #undef init_pair
 int	init_pair(
 		short	pair, 
@@ -209,6 +255,15 @@
 		short	b)
 		{ return(*(int *)0); }
 
+#undef init_color_sp
+int	init_color_sp(
+		SCREEN	*sp, 
+		short	color, 
+		short	r, 
+		short	g, 
+		short	b)
+		{ return(*(int *)0); }
+
 #undef init_color
 int	init_color(
 		short	color, 
@@ -217,14 +272,33 @@
 		short	b)
 		{ return(*(int *)0); }
 
+#undef can_change_color_sp
+NCURSES_BOOL can_change_color_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef can_change_color
 NCURSES_BOOL can_change_color(void)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef has_colors_sp
+NCURSES_BOOL has_colors_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef has_colors
 NCURSES_BOOL has_colors(void)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef color_content_sp
+int	color_content_sp(
+		SCREEN	*sp, 
+		short	color, 
+		short	*r, 
+		short	*g, 
+		short	*b)
+		{ return(*(int *)0); }
+
 #undef color_content
 int	color_content(
 		short	color, 
@@ -233,6 +307,14 @@
 		short	*b)
 		{ return(*(int *)0); }
 
+#undef pair_content_sp
+int	pair_content_sp(
+		SCREEN	*sp, 
+		short	pair, 
+		short	*f, 
+		short	*b)
+		{ return(*(int *)0); }
+
 #undef pair_content
 int	pair_content(
 		short	pair, 
@@ -240,13 +322,21 @@
 		short	*b)
 		{ return(*(int *)0); }
 
+#undef _nc_do_color_sp
+void	_nc_do_color_sp(
+		SCREEN	*sp, 
+		int	old_pair, 
+		int	pair, 
+		int	reverse, 
+		NCURSES_OUTC_sp outc)
+		{ /* void */ }
+
 #undef _nc_do_color
 void	_nc_do_color(
-		short	old_pair, 
-		short	pair, 
-		NCURSES_BOOL reverse, 
-		int	(*outc)(
-		int	p1))
+		int	old_pair, 
+		int	pair, 
+		int	reverse, 
+		NCURSES_OUTC outc)
 		{ /* void */ }
 
 /* ./base/lib_colorset.c */
@@ -274,16 +364,31 @@
 
 /* ./base/lib_echo.c */
 
+#undef echo_sp
+int	echo_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef echo
 int	echo(void)
 		{ return(*(int *)0); }
 
+#undef noecho_sp
+int	noecho_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef noecho
 int	noecho(void)
 		{ return(*(int *)0); }
 
 /* ./base/lib_endwin.c */
 
+#undef endwin_sp
+int	endwin_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef endwin
 int	endwin(void)
 		{ return(*(int *)0); }
@@ -297,6 +402,11 @@
 
 /* ./base/lib_flash.c */
 
+#undef flash_sp
+int	flash_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef flash
 int	flash(void)
 		{ return(*(int *)0); }
@@ -304,85 +414,85 @@
 /* ./lib_gen.c */
 
 #undef addch
-int	addch(
+int	(addch)(
 		const chtype z)
 		{ return(*(int *)0); }
 
 #undef addchnstr
-int	addchnstr(
+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(
+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(
+int	(attr_get)(
 		attr_t	*a1, 
 		short	*a2, 
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef attr_off
-int	attr_off(
+int	(attr_off)(
 		attr_t	a1, 
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef attr_on
-int	attr_on(
+int	(attr_on)(
 		attr_t	a1, 
 		void	*z)
 		{ return(*(int *)0); }
 
 #undef attr_set
-int	attr_set(
+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(
+int	(border)(
 		chtype	a1, 
 		chtype	a2, 
 		chtype	a3, 
@@ -394,14 +504,14 @@
 		{ return(*(int *)0); }
 
 #undef box
-int	box(
+int	(box)(
 		WINDOW	*a1, 
 		chtype	a2, 
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef chgat
-int	chgat(
+int	(chgat)(
 		int	a1, 
 		attr_t	a2, 
 		short	a3, 
@@ -409,137 +519,137 @@
 		{ 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(
+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(
+int	(getnstr)(
 		char	*a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef getstr
-int	getstr(
+int	(getstr)(
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef hline
-int	hline(
+int	(hline)(
 		chtype	a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef inch
-chtype	inch(void)
+chtype	(inch)(void)
 		{ return(*(chtype *)0); }
 
 #undef inchnstr
-int	inchnstr(
+int	(inchnstr)(
 		chtype	*a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef inchstr
-int	inchstr(
+int	(inchstr)(
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef innstr
-int	innstr(
+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(
+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	(move)(
 		int	a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvaddch
-int	mvaddch(
+int	(mvaddch)(
 		int	a1, 
 		int	a2, 
 		const chtype z)
 		{ return(*(int *)0); }
 
 #undef mvaddchnstr
-int	mvaddchnstr(
+int	(mvaddchnstr)(
 		int	a1, 
 		int	a2, 
 		const chtype *a3, 
@@ -547,14 +657,14 @@
 		{ return(*(int *)0); }
 
 #undef mvaddchstr
-int	mvaddchstr(
+int	(mvaddchstr)(
 		int	a1, 
 		int	a2, 
 		const chtype *z)
 		{ return(*(int *)0); }
 
 #undef mvaddnstr
-int	mvaddnstr(
+int	(mvaddnstr)(
 		int	a1, 
 		int	a2, 
 		const char *a3, 
@@ -562,14 +672,14 @@
 		{ return(*(int *)0); }
 
 #undef mvaddstr
-int	mvaddstr(
+int	(mvaddstr)(
 		int	a1, 
 		int	a2, 
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef mvchgat
-int	mvchgat(
+int	(mvchgat)(
 		int	a1, 
 		int	a2, 
 		int	a3, 
@@ -579,19 +689,19 @@
 		{ return(*(int *)0); }
 
 #undef mvdelch
-int	mvdelch(
+int	(mvdelch)(
 		int	a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvgetch
-int	mvgetch(
+int	(mvgetch)(
 		int	a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvgetnstr
-int	mvgetnstr(
+int	(mvgetnstr)(
 		int	a1, 
 		int	a2, 
 		char	*a3, 
@@ -599,14 +709,14 @@
 		{ return(*(int *)0); }
 
 #undef mvgetstr
-int	mvgetstr(
+int	(mvgetstr)(
 		int	a1, 
 		int	a2, 
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef mvhline
-int	mvhline(
+int	(mvhline)(
 		int	a1, 
 		int	a2, 
 		chtype	a3, 
@@ -614,13 +724,13 @@
 		{ return(*(int *)0); }
 
 #undef mvinch
-chtype	mvinch(
+chtype	(mvinch)(
 		int	a1, 
 		int	z)
 		{ return(*(chtype *)0); }
 
 #undef mvinchnstr
-int	mvinchnstr(
+int	(mvinchnstr)(
 		int	a1, 
 		int	a2, 
 		chtype	*a3, 
@@ -628,14 +738,14 @@
 		{ return(*(int *)0); }
 
 #undef mvinchstr
-int	mvinchstr(
+int	(mvinchstr)(
 		int	a1, 
 		int	a2, 
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef mvinnstr
-int	mvinnstr(
+int	(mvinnstr)(
 		int	a1, 
 		int	a2, 
 		char	*a3, 
@@ -643,14 +753,14 @@
 		{ return(*(int *)0); }
 
 #undef mvinsch
-int	mvinsch(
+int	(mvinsch)(
 		int	a1, 
 		int	a2, 
 		chtype	z)
 		{ return(*(int *)0); }
 
 #undef mvinsnstr
-int	mvinsnstr(
+int	(mvinsnstr)(
 		int	a1, 
 		int	a2, 
 		const char *a3, 
@@ -658,21 +768,21 @@
 		{ return(*(int *)0); }
 
 #undef mvinsstr
-int	mvinsstr(
+int	(mvinsstr)(
 		int	a1, 
 		int	a2, 
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef mvinstr
-int	mvinstr(
+int	(mvinstr)(
 		int	a1, 
 		int	a2, 
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef mvvline
-int	mvvline(
+int	(mvvline)(
 		int	a1, 
 		int	a2, 
 		chtype	a3, 
@@ -680,7 +790,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwaddch
-int	mvwaddch(
+int	(mvwaddch)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -688,7 +798,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwaddchnstr
-int	mvwaddchnstr(
+int	(mvwaddchnstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -697,7 +807,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwaddchstr
-int	mvwaddchstr(
+int	(mvwaddchstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -705,7 +815,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwaddnstr
-int	mvwaddnstr(
+int	(mvwaddnstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -714,7 +824,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwaddstr
-int	mvwaddstr(
+int	(mvwaddstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -722,7 +832,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwchgat
-int	mvwchgat(
+int	(mvwchgat)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -733,21 +843,21 @@
 		{ return(*(int *)0); }
 
 #undef mvwdelch
-int	mvwdelch(
+int	(mvwdelch)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwgetch
-int	mvwgetch(
+int	(mvwgetch)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef mvwgetnstr
-int	mvwgetnstr(
+int	(mvwgetnstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -756,7 +866,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwgetstr
-int	mvwgetstr(
+int	(mvwgetstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -764,7 +874,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwhline
-int	mvwhline(
+int	(mvwhline)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -773,14 +883,14 @@
 		{ return(*(int *)0); }
 
 #undef mvwinch
-chtype	mvwinch(
+chtype	(mvwinch)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	z)
 		{ return(*(chtype *)0); }
 
 #undef mvwinchnstr
-int	mvwinchnstr(
+int	(mvwinchnstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -789,7 +899,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwinchstr
-int	mvwinchstr(
+int	(mvwinchstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -797,7 +907,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwinnstr
-int	mvwinnstr(
+int	(mvwinnstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -806,7 +916,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwinsch
-int	mvwinsch(
+int	(mvwinsch)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -814,7 +924,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwinsnstr
-int	mvwinsnstr(
+int	(mvwinsnstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -823,7 +933,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwinsstr
-int	mvwinsstr(
+int	(mvwinsstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -831,7 +941,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwinstr
-int	mvwinstr(
+int	(mvwinstr)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -839,7 +949,7 @@
 		{ return(*(int *)0); }
 
 #undef mvwvline
-int	mvwvline(
+int	(mvwvline)(
 		WINDOW	*a1, 
 		int	a2, 
 		int	a3, 
@@ -848,117 +958,117 @@
 		{ 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	(setscrreg)(
 		int	a1, 
 		int	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(
+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(
+int	(vline)(
 		chtype	a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef vw_printw
-int	vw_printw(
+int	(vw_printw)(
 		WINDOW	*a1, 
 		const char *a2, 
 		va_list	z)
 		{ return(*(int *)0); }
 
 #undef vw_scanw
-int	vw_scanw(
+int	(vw_scanw)(
 		WINDOW	*a1, 
-		char	*a2, 
+		const char *a2, 
 		va_list	z)
 		{ return(*(int *)0); }
 
 #undef waddchstr
-int	waddchstr(
+int	(waddchstr)(
 		WINDOW	*a1, 
 		const chtype *z)
 		{ return(*(int *)0); }
 
 #undef waddstr
-int	waddstr(
+int	(waddstr)(
 		WINDOW	*a1, 
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef wattron
-int	wattron(
+int	(wattron)(
 		WINDOW	*a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wattroff
-int	wattroff(
+int	(wattroff)(
 		WINDOW	*a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wattrset
-int	wattrset(
+int	(wattrset)(
 		WINDOW	*a1, 
 		int	z)
 		{ return(*(int *)0); }
 
 #undef wattr_get
-int	wattr_get(
+int	(wattr_get)(
 		WINDOW	*a1, 
 		attr_t	*a2, 
 		short	*a3, 
@@ -966,7 +1076,7 @@
 		{ return(*(int *)0); }
 
 #undef wattr_set
-int	wattr_set(
+int	(wattr_set)(
 		WINDOW	*a1, 
 		attr_t	a2, 
 		short	a3, 
@@ -974,158 +1084,173 @@
 		{ return(*(int *)0); }
 
 #undef wdeleteln
-int	wdeleteln(
+int	(wdeleteln)(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef wgetstr
-int	wgetstr(
+int	(wgetstr)(
 		WINDOW	*a1, 
 		char	*z)
 		{ return(*(int *)0); }
 
 #undef winchstr
-int	winchstr(
+int	(winchstr)(
 		WINDOW	*a1, 
 		chtype	*z)
 		{ return(*(int *)0); }
 
 #undef winsertln
-int	winsertln(
+int	(winsertln)(
 		WINDOW	*z)
 		{ return(*(int *)0); }
 
 #undef winsstr
-int	winsstr(
+int	(winsstr)(
 		WINDOW	*a1, 
 		const char *z)
 		{ return(*(int *)0); }
 
 #undef winstr
-int	winstr(
+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)(
 		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)(
 		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)(
+		const WINDOW *z)
+		{ return(*(int *)0); }
+
 #undef wgetscrreg
-int	wgetscrreg(
+int	(wgetscrreg)(
 		const WINDOW *a1, 
 		int	*a2, 
 		int	*z)
 		{ return(*(int *)0); }
 
 #undef mouse_trafo
-NCURSES_BOOL mouse_trafo(
+NCURSES_BOOL (mouse_trafo)(
 		int	*a1, 
 		int	*a2, 
 		NCURSES_BOOL z)
@@ -1133,20 +1258,33 @@
 
 /* ./base/lib_getch.c */
 
-#include <fifo_defs.h>
-
 #undef ESCDELAY
 int	ESCDELAY;
 
+#undef set_escdelay_sp
+int	set_escdelay_sp(
+		SCREEN	*sp, 
+		int	value)
+		{ return(*(int *)0); }
+
 #undef set_escdelay
 int	set_escdelay(
 		int	value)
 		{ return(*(int *)0); }
 
+#undef get_escdelay_sp
+int	get_escdelay_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
+#undef get_escdelay
+int	get_escdelay(void)
+		{ return(*(int *)0); }
+
 #undef _nc_wgetch
 int	_nc_wgetch(
 		WINDOW	*win, 
-		unsigned long *result, 
+		int	*result, 
 		int	use_meta)
 		{ return(*(int *)0); }
 
@@ -1200,6 +1338,7 @@
 
 #undef _nc_insert_ch
 int	_nc_insert_ch(
+		SCREEN	*sp, 
 		WINDOW	*win, 
 		chtype	ch)
 		{ return(*(int *)0); }
@@ -1238,6 +1377,11 @@
 
 /* ./base/lib_isendwin.c */
 
+#undef isendwin_sp
+NCURSES_BOOL isendwin_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef isendwin
 NCURSES_BOOL isendwin(void)
 		{ return(*(NCURSES_BOOL *)0); }
@@ -1252,16 +1396,35 @@
 
 /* ./base/lib_mouse.c */
 
+#undef getmouse_sp
+int	getmouse_sp(
+		SCREEN	*sp, 
+		MEVENT	*aevent)
+		{ return(*(int *)0); }
+
 #undef getmouse
 int	getmouse(
 		MEVENT	*aevent)
 		{ return(*(int *)0); }
 
+#undef ungetmouse_sp
+int	ungetmouse_sp(
+		SCREEN	*sp, 
+		MEVENT	*aevent)
+		{ return(*(int *)0); }
+
 #undef ungetmouse
 int	ungetmouse(
 		MEVENT	*aevent)
 		{ return(*(int *)0); }
 
+#undef mousemask_sp
+mmask_t	mousemask_sp(
+		SCREEN	*sp, 
+		mmask_t	newmask, 
+		mmask_t	*oldmask)
+		{ return(*(mmask_t *)0); }
+
 #undef mousemask
 mmask_t	mousemask(
 		mmask_t	newmask, 
@@ -1275,14 +1438,30 @@
 		int	x)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef mouseinterval_sp
+int	mouseinterval_sp(
+		SCREEN	*sp, 
+		int	maxclick)
+		{ return(*(int *)0); }
+
 #undef mouseinterval
 int	mouseinterval(
 		int	maxclick)
 		{ return(*(int *)0); }
 
 #undef _nc_has_mouse
-int	_nc_has_mouse(void)
-		{ return(*(int *)0); }
+NCURSES_BOOL _nc_has_mouse(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
+#undef has_mouse_sp
+NCURSES_BOOL has_mouse_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
+#undef has_mouse
+NCURSES_BOOL has_mouse(void)
+		{ return(*(NCURSES_BOOL *)0); }
 
 #undef wmouse_trafo
 NCURSES_BOOL wmouse_trafo(
@@ -1303,24 +1482,72 @@
 
 /* ./tty/lib_mvcur.c */
 
+#undef _nc_msec_cost_sp
+int	_nc_msec_cost_sp(
+		SCREEN	*sp, 
+		const char *const cap, 
+		int	affcnt)
+		{ return(*(int *)0); }
+
 #undef _nc_msec_cost
 int	_nc_msec_cost(
 		const char *const cap, 
 		int	affcnt)
 		{ return(*(int *)0); }
 
+#undef _nc_mvcur_resume_sp
+void	_nc_mvcur_resume_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_mvcur_resume
 void	_nc_mvcur_resume(void)
 		{ /* void */ }
 
+#undef _nc_mvcur_init_sp
+void	_nc_mvcur_init_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_mvcur_init
 void	_nc_mvcur_init(void)
 		{ /* void */ }
 
+#undef _nc_mvcur_wrap_sp
+void	_nc_mvcur_wrap_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_mvcur_wrap
 void	_nc_mvcur_wrap(void)
 		{ /* void */ }
 
+#undef _nc_mvcur_sp
+int	_nc_mvcur_sp(
+		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	xnew)
+		{ return(*(int *)0); }
+
+#undef mvcur_sp
+int	mvcur_sp(
+		SCREEN	*sp, 
+		int	yold, 
+		int	xold, 
+		int	ynew, 
+		int	xnew)
+		{ return(*(int *)0); }
+
 #undef mvcur
 int	mvcur(
 		int	yold, 
@@ -1343,17 +1570,35 @@
 
 /* ./base/lib_newterm.c */
 
+#undef filter_sp
+void	filter_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef filter
 void	filter(void)
 		{ /* void */ }
 
+#undef nofilter_sp
+void	nofilter_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef nofilter
 void	nofilter(void)
 		{ /* void */ }
 
+#undef newterm_sp
+SCREEN	*newterm_sp(
+		SCREEN	*sp, 
+		const char *name, 
+		FILE	*ofp, 
+		FILE	*ifp)
+		{ return(*(SCREEN **)0); }
+
 #undef newterm
 SCREEN	*newterm(
-		char	*name, 
+		const char *name, 
 		FILE	*ofp, 
 		FILE	*ifp)
 		{ return(*(SCREEN **)0); }
@@ -1365,6 +1610,15 @@
 		WINDOW	*win)
 		{ return(*(int *)0); }
 
+#undef newwin_sp
+WINDOW	*newwin_sp(
+		SCREEN	*sp, 
+		int	num_lines, 
+		int	num_columns, 
+		int	begy, 
+		int	begx)
+		{ return(*(WINDOW **)0); }
+
 #undef newwin
 WINDOW	*newwin(
 		int	num_lines, 
@@ -1391,8 +1645,9 @@
 		int	x)
 		{ return(*(WINDOW **)0); }
 
-#undef _nc_makenew
-WINDOW	*_nc_makenew(
+#undef _nc_makenew_sp
+WINDOW	*_nc_makenew_sp(
+		SCREEN	*sp, 
 		int	num_lines, 
 		int	num_columns, 
 		int	begy, 
@@ -1400,17 +1655,37 @@
 		int	flags)
 		{ return(*(WINDOW **)0); }
 
-#undef _nc_screen_of
-SCREEN	*_nc_screen_of(
-		WINDOW	*win)
-		{ return(*(SCREEN **)0); }
+#undef _nc_curscr_of
+WINDOW	*_nc_curscr_of(
+		SCREEN	*sp)
+		{ return(*(WINDOW **)0); }
+
+#undef _nc_newscr_of
+WINDOW	*_nc_newscr_of(
+		SCREEN	*sp)
+		{ return(*(WINDOW **)0); }
+
+#undef _nc_stdscr_of
+WINDOW	*_nc_stdscr_of(
+		SCREEN	*sp)
+		{ return(*(WINDOW **)0); }
 
 /* ./base/lib_nl.c */
 
+#undef nl_sp
+int	nl_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef nl
 int	nl(void)
 		{ return(*(int *)0); }
 
+#undef nonl_sp
+int	nonl_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef nonl
 int	nonl(void)
 		{ return(*(int *)0); }
@@ -1444,6 +1719,13 @@
 
 /* ./base/lib_pad.c */
 
+#undef newpad_sp
+WINDOW	*newpad_sp(
+		SCREEN	*sp, 
+		int	l, 
+		int	c)
+		{ return(*(WINDOW **)0); }
+
 #undef newpad
 WINDOW	*newpad(
 		int	l, 
@@ -1549,9 +1831,17 @@
 
 /* ./base/lib_restart.c */
 
+#undef restartterm_sp
+int	restartterm_sp(
+		SCREEN	*sp, 
+		const char *termp, 
+		int	filenum, 
+		int	*errret)
+		{ return(*(int *)0); }
+
 #undef restartterm
 int	restartterm(
-		char	*termp, 
+		const char *termp, 
 		int	filenum, 
 		int	*errret)
 		{ return(*(int *)0); }
@@ -1561,20 +1851,20 @@
 #undef vwscanw
 int	vwscanw(
 		WINDOW	*win, 
-		char	*fmt, 
+		const char *fmt, 
 		va_list	argp)
 		{ return(*(int *)0); }
 
 #undef scanw
 int	scanw(
-		char	*fmt, 
+		const char *fmt, 
 		...)
 		{ return(*(int *)0); }
 
 #undef wscanw
 int	wscanw(
 		WINDOW	*win, 
-		char	*fmt, 
+		const char *fmt, 
 		...)
 		{ return(*(int *)0); }
 
@@ -1582,7 +1872,7 @@
 int	mvscanw(
 		int	y, 
 		int	x, 
-		char	*fmt, 
+		const char *fmt, 
 		...)
 		{ return(*(int *)0); }
 
@@ -1591,12 +1881,18 @@
 		WINDOW	*win, 
 		int	y, 
 		int	x, 
-		char	*fmt, 
+		const char *fmt, 
 		...)
 		{ return(*(int *)0); }
 
 /* ./base/lib_screen.c */
 
+#undef getwin_sp
+WINDOW	*getwin_sp(
+		SCREEN	*sp, 
+		FILE	*filep)
+		{ return(*(WINDOW **)0); }
+
 #undef getwin
 WINDOW	*getwin(
 		FILE	*filep)
@@ -1608,6 +1904,12 @@
 		FILE	*filep)
 		{ return(*(int *)0); }
 
+#undef scr_restore_sp
+int	scr_restore_sp(
+		SCREEN	*sp, 
+		const char *file)
+		{ return(*(int *)0); }
+
 #undef scr_restore
 int	scr_restore(
 		const char *file)
@@ -1618,11 +1920,23 @@
 		const char *file)
 		{ return(*(int *)0); }
 
+#undef scr_init_sp
+int	scr_init_sp(
+		SCREEN	*sp, 
+		const char *file)
+		{ return(*(int *)0); }
+
 #undef scr_init
 int	scr_init(
 		const char *file)
 		{ return(*(int *)0); }
 
+#undef scr_set_sp
+int	scr_set_sp(
+		SCREEN	*sp, 
+		const char *file)
+		{ return(*(int *)0); }
+
 #undef scr_set
 int	scr_set(
 		const char *file)
@@ -1634,8 +1948,8 @@
 void	_nc_scroll_window(
 		WINDOW	*win, 
 		int const n, 
-		short const top, 
-		short const bottom, 
+		int const top, 
+		int const bottom, 
 		chtype	blank)
 		{ /* void */ }
 
@@ -1674,15 +1988,34 @@
 		SCREEN	*sp)
 		{ /* void */ }
 
+#undef _nc_setupscreen_sp
+int	_nc_setupscreen_sp(
+		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, 
-		NCURSES_BOOL filtered, 
+		int	filtered, 
 		int	slk_format)
 		{ return(*(int *)0); }
 
+#undef _nc_ripoffline_sp
+int	_nc_ripoffline_sp(
+		SCREEN	*sp, 
+		int	line, 
+		int	(*init)(
+		WINDOW	*p1, 
+		int	p2))
+		{ return(*(int *)0); }
+
 #undef _nc_ripoffline
 int	_nc_ripoffline(
 		int	line, 
@@ -1691,6 +2024,15 @@
 		int	p2))
 		{ return(*(int *)0); }
 
+#undef ripoffline_sp
+int	ripoffline_sp(
+		SCREEN	*sp, 
+		int	line, 
+		int	(*init)(
+		WINDOW	*p1, 
+		int	p2))
+		{ return(*(int *)0); }
+
 #undef ripoffline
 int	ripoffline(
 		int	line, 
@@ -1701,18 +2043,37 @@
 
 /* ./base/lib_slk.c */
 
+#undef _nc_format_slks
+int	_nc_format_slks(
+		SCREEN	*sp, 
+		int	cols)
+		{ return(*(int *)0); }
+
 #undef _nc_slk_initialize
 int	_nc_slk_initialize(
 		WINDOW	*stwin, 
 		int	cols)
 		{ return(*(int *)0); }
 
+#undef slk_restore_sp
+int	slk_restore_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef slk_restore
 int	slk_restore(void)
 		{ return(*(int *)0); }
 
 /* ./base/lib_slkatr_set.c */
 
+#undef slk_attr_set_sp
+int	slk_attr_set_sp(
+		SCREEN	*sp, 
+		const attr_t attr, 
+		short	color_pair_number, 
+		void	*opts)
+		{ return(*(int *)0); }
+
 #undef slk_attr_set
 int	slk_attr_set(
 		const attr_t attr, 
@@ -1722,6 +2083,12 @@
 
 /* ./base/lib_slkatrof.c */
 
+#undef slk_attroff_sp
+int	slk_attroff_sp(
+		SCREEN	*sp, 
+		const chtype attr)
+		{ return(*(int *)0); }
+
 #undef slk_attroff
 int	slk_attroff(
 		const chtype attr)
@@ -1729,6 +2096,12 @@
 
 /* ./base/lib_slkatron.c */
 
+#undef slk_attron_sp
+int	slk_attron_sp(
+		SCREEN	*sp, 
+		const chtype attr)
+		{ return(*(int *)0); }
+
 #undef slk_attron
 int	slk_attron(
 		const chtype attr)
@@ -1736,6 +2109,12 @@
 
 /* ./base/lib_slkatrset.c */
 
+#undef slk_attrset_sp
+int	slk_attrset_sp(
+		SCREEN	*sp, 
+		const chtype attr)
+		{ return(*(int *)0); }
+
 #undef slk_attrset
 int	slk_attrset(
 		const chtype attr)
@@ -1743,18 +2122,34 @@
 
 /* ./base/lib_slkattr.c */
 
+#undef slk_attr_sp
+attr_t	slk_attr_sp(
+		SCREEN	*sp)
+		{ return(*(attr_t *)0); }
+
 #undef slk_attr
 attr_t	slk_attr(void)
 		{ return(*(attr_t *)0); }
 
 /* ./base/lib_slkclear.c */
 
+#undef slk_clear_sp
+int	slk_clear_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef slk_clear
 int	slk_clear(void)
 		{ return(*(int *)0); }
 
 /* ./base/lib_slkcolor.c */
 
+#undef slk_color_sp
+int	slk_color_sp(
+		SCREEN	*sp, 
+		short	color_pair_number)
+		{ return(*(int *)0); }
+
 #undef slk_color
 int	slk_color(
 		short	color_pair_number)
@@ -1762,6 +2157,12 @@
 
 /* ./base/lib_slkinit.c */
 
+#undef slk_init_sp
+int	slk_init_sp(
+		SCREEN	*sp, 
+		int	format)
+		{ return(*(int *)0); }
+
 #undef slk_init
 int	slk_init(
 		int	format)
@@ -1769,6 +2170,12 @@
 
 /* ./base/lib_slklab.c */
 
+#undef slk_label_sp
+char	*slk_label_sp(
+		SCREEN	*sp, 
+		int	n)
+		{ return(*(char **)0); }
+
 #undef slk_label
 char	*slk_label(
 		int	n)
@@ -1776,16 +2183,34 @@
 
 /* ./base/lib_slkrefr.c */
 
+#undef slk_noutrefresh_sp
+int	slk_noutrefresh_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef slk_noutrefresh
 int	slk_noutrefresh(void)
 		{ return(*(int *)0); }
 
+#undef slk_refresh_sp
+int	slk_refresh_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef slk_refresh
 int	slk_refresh(void)
 		{ return(*(int *)0); }
 
 /* ./base/lib_slkset.c */
 
+#undef slk_set_sp
+int	slk_set_sp(
+		SCREEN	*sp, 
+		int	i, 
+		const char *astr, 
+		int	format)
+		{ return(*(int *)0); }
+
 #undef slk_set
 int	slk_set(
 		int	i, 
@@ -1795,6 +2220,11 @@
 
 /* ./base/lib_slktouch.c */
 
+#undef slk_touch_sp
+int	slk_touch_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef slk_touch
 int	slk_touch(void)
 		{ return(*(int *)0); }
@@ -1830,12 +2260,24 @@
 
 /* ./trace/lib_tracemse.c */
 
+#undef _nc_trace_mmask_t
+char	*_nc_trace_mmask_t(
+		SCREEN	*sp, 
+		mmask_t	code)
+		{ return(*(char **)0); }
+
 #undef _nc_tracemouse
 char	*_nc_tracemouse(
 		SCREEN	*sp, 
 		MEVENT const *ep)
 		{ return(*(char **)0); }
 
+#undef _nc_retrace_mmask_t
+mmask_t	_nc_retrace_mmask_t(
+		SCREEN	*sp, 
+		mmask_t	code)
+		{ return(*(mmask_t *)0); }
+
 #undef _tracemouse
 char	*_tracemouse(
 		MEVENT const *ep)
@@ -1843,11 +2285,9 @@
 
 /* ./tty/lib_tstp.c */
 
-#include <SigAction.h>
-
 #undef _nc_signal_handler
 void	_nc_signal_handler(
-		NCURSES_BOOL enable)
+		int	enable)
 		{ /* void */ }
 
 /* ./base/lib_ungetch.c */
@@ -1857,8 +2297,8 @@
 		SCREEN	*sp)
 		{ /* void */ }
 
-#undef _nc_ungetch
-int	_nc_ungetch(
+#undef ungetch_sp
+int	ungetch_sp(
 		SCREEN	*sp, 
 		int	ch)
 		{ return(*(int *)0); }
@@ -1870,11 +2310,23 @@
 
 /* ./tty/lib_vidattr.c */
 
+#undef vidputs_sp
+int	vidputs_sp(
+		SCREEN	*sp, 
+		chtype	newmode, 
+		NCURSES_OUTC_sp outc)
+		{ return(*(int *)0); }
+
 #undef vidputs
 int	vidputs(
 		chtype	newmode, 
-		int	(*outc)(
-		int	p1))
+		NCURSES_OUTC outc)
+		{ return(*(int *)0); }
+
+#undef vidattr_sp
+int	vidattr_sp(
+		SCREEN	*sp, 
+		chtype	newmode)
 		{ return(*(int *)0); }
 
 #undef vidattr
@@ -1882,6 +2334,11 @@
 		chtype	newmode)
 		{ return(*(int *)0); }
 
+#undef termattrs_sp
+chtype	termattrs_sp(
+		SCREEN	*sp)
+		{ return(*(chtype *)0); }
+
 #undef termattrs
 chtype	termattrs(void)
 		{ return(*(chtype *)0); }
@@ -1962,12 +2419,24 @@
 
 /* ./base/nc_panel.c */
 
+#undef _nc_panelhook_sp
+struct panelhook *_nc_panelhook_sp(
+		SCREEN	*sp)
+		{ return(*(struct panelhook **)0); }
+
 #undef _nc_panelhook
 struct panelhook *_nc_panelhook(void)
 		{ return(*(struct panelhook **)0); }
 
 /* ./base/safe_sprintf.c */
 
+#undef _nc_printf_string_sp
+char	*_nc_printf_string_sp(
+		SCREEN	*sp, 
+		const char *fmt, 
+		va_list	ap)
+		{ return(*(char **)0); }
+
 #undef _nc_printf_string
 char	*_nc_printf_string(
 		const char *fmt, 
@@ -1976,13 +2445,24 @@
 
 /* ./tty/tty_update.c */
 
-#include <sys/time.h>
-#include <sys/times.h>
+#undef doupdate_sp
+int	doupdate_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
 
 #undef doupdate
 int	doupdate(void)
 		{ return(*(int *)0); }
 
+#undef _nc_scrolln_sp
+int	_nc_scrolln_sp(
+		SCREEN	*sp, 
+		int	n, 
+		int	top, 
+		int	bot, 
+		int	maxy)
+		{ return(*(int *)0); }
+
 #undef _nc_scrolln
 int	_nc_scrolln(
 		int	n, 
@@ -1991,18 +2471,39 @@
 		int	maxy)
 		{ return(*(int *)0); }
 
+#undef _nc_screen_resume_sp
+void	_nc_screen_resume_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_screen_resume
 void	_nc_screen_resume(void)
 		{ /* void */ }
 
+#undef _nc_screen_init_sp
+void	_nc_screen_init_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_screen_init
 void	_nc_screen_init(void)
 		{ /* void */ }
 
+#undef _nc_screen_wrap_sp
+void	_nc_screen_wrap_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_screen_wrap
 void	_nc_screen_wrap(void)
 		{ /* void */ }
 
+#undef _nc_do_xmc_glitch_sp
+void	_nc_do_xmc_glitch_sp(
+		SCREEN	*sp, 
+		attr_t	previous)
+		{ /* void */ }
+
 #undef _nc_do_xmc_glitch
 void	_nc_do_xmc_glitch(
 		attr_t	previous)
@@ -2020,12 +2521,6 @@
 		va_list	ap)
 		{ return(*(char **)0); }
 
-/* ./base/memmove.c */
-
-#undef _nc_memmove
-void	_nc_memmove(void)
-		{ /* void */ }
-
 /* ./base/vsscanf.c */
 
 #undef _nc_vsscanf
@@ -2034,12 +2529,16 @@
 
 /* ./base/lib_freeall.c */
 
-#include <term_entry.h>
-
 #undef _nc_freeall
 void	_nc_freeall(void)
 		{ /* void */ }
 
+#undef _nc_free_and_exit_sp
+void	_nc_free_and_exit_sp(
+		SCREEN	*sp, 
+		int	code)
+		{ /* void */ }
+
 #undef _nc_free_and_exit
 void	_nc_free_and_exit(
 		int	code)
@@ -2059,6 +2558,24 @@
 		attr_t	at)
 		{ /* void */ }
 
+#undef _nc_DelCharCost_sp
+int	_nc_DelCharCost_sp(
+		SCREEN	*sp, 
+		int	count)
+		{ return(*(int *)0); }
+
+#undef _nc_InsCharCost_sp
+int	_nc_InsCharCost_sp(
+		SCREEN	*sp, 
+		int	count)
+		{ return(*(int *)0); }
+
+#undef _nc_UpdateAttrs_sp
+void	_nc_UpdateAttrs_sp(
+		SCREEN	*sp, 
+		chtype	c)
+		{ /* void */ }
+
 #undef _nc_DelCharCost
 int	_nc_DelCharCost(
 		int	count)
@@ -2076,6 +2593,12 @@
 
 /* ./base/legacy_coding.c */
 
+#undef use_legacy_coding_sp
+int	use_legacy_coding_sp(
+		SCREEN	*sp, 
+		int	level)
+		{ return(*(int *)0); }
+
 #undef use_legacy_coding
 int	use_legacy_coding(
 		int	level)
@@ -2083,10 +2606,22 @@
 
 /* ./base/lib_dft_fgbg.c */
 
+#undef use_default_colors_sp
+int	use_default_colors_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef use_default_colors
 int	use_default_colors(void)
 		{ return(*(int *)0); }
 
+#undef assume_default_colors_sp
+int	assume_default_colors_sp(
+		SCREEN	*sp, 
+		int	fg, 
+		int	bg)
+		{ return(*(int *)0); }
+
 #undef assume_default_colors
 int	assume_default_colors(
 		int	fg, 
@@ -2095,6 +2630,13 @@
 
 /* ./tinfo/lib_print.c */
 
+#undef mcprint_sp
+int	mcprint_sp(
+		SCREEN	*sp, 
+		char	*data, 
+		int	len)
+		{ return(*(int *)0); }
+
 #undef mcprint
 int	mcprint(
 		char	*data, 
@@ -2103,18 +2645,39 @@
 
 /* ./base/resizeterm.c */
 
+#undef is_term_resized_sp
+NCURSES_BOOL is_term_resized_sp(
+		SCREEN	*sp, 
+		int	ToLines, 
+		int	ToCols)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef is_term_resized
 NCURSES_BOOL is_term_resized(
 		int	ToLines, 
 		int	ToCols)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef resize_term_sp
+int	resize_term_sp(
+		SCREEN	*sp, 
+		int	ToLines, 
+		int	ToCols)
+		{ return(*(int *)0); }
+
 #undef resize_term
 int	resize_term(
 		int	ToLines, 
 		int	ToCols)
 		{ return(*(int *)0); }
 
+#undef resizeterm_sp
+int	resizeterm_sp(
+		SCREEN	*sp, 
+		int	ToLines, 
+		int	ToCols)
+		{ return(*(int *)0); }
+
 #undef resizeterm
 int	resizeterm(
 		int	ToLines, 
@@ -2157,9 +2720,6 @@
 
 /* ./tinfo/access.c */
 
-#include <sys/stat.h>
-#include <nc_alloc.h>
-
 #undef _nc_rootname
 char	*_nc_rootname(
 		char	*path)
@@ -2220,19 +2780,42 @@
 #undef _nc_copy_termtype
 void	_nc_copy_termtype(
 		TERMTYPE *dst, 
-		TERMTYPE *src)
+		const TERMTYPE *src)
 		{ /* void */ }
 
 /* ./codes.c */
 
 #undef boolcodes
-char	*const boolcodes[] = {0};
+const char *const boolcodes[] = {0};
 #undef numcodes
-char	*const numcodes[] = {0};
+const char *const numcodes[] = {0};
 #undef strcodes
-char	*const strcodes[] = {0};
+const char *const strcodes[] = {0};
+
+/* ./comp_captab.c */
+
+#undef _nc_get_table
+const struct name_table_entry *_nc_get_table(
+		NCURSES_BOOL termcap)
+		{ return(*(const struct name_table_entry **)0); }
+
+#undef _nc_get_hash_table
+const HashValue *_nc_get_hash_table(
+		NCURSES_BOOL termcap)
+		{ return(*(const HashValue **)0); }
+
+#undef _nc_get_alias_table
+const struct alias *_nc_get_alias_table(
+		NCURSES_BOOL termcap)
+		{ return(*(const struct alias **)0); }
+
+#undef _nc_get_hash_info
+const HashData *_nc_get_hash_info(
+		NCURSES_BOOL termcap)
+		{ return(*(const HashData **)0); }
 
 /* ./tinfo/comp_error.c */
+
 #undef _nc_suppress_warnings
 NCURSES_BOOL _nc_suppress_warnings;
 #undef _nc_curr_line
@@ -2277,6 +2860,21 @@
 		...)
 		{ /* void */ }
 
+/* ./tinfo/comp_hash.c */
+
+#undef _nc_find_entry
+struct name_table_entry const *_nc_find_entry(
+		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, 
+		NCURSES_BOOL termcap)
+		{ return(*(struct name_table_entry const **)0); }
+
 /* ./tinfo/db_iterator.c */
 
 #undef _nc_tic_dir
@@ -2370,6 +2968,12 @@
 		const char *name)
 		{ return(*(int *)0); }
 
+#undef _nc_setenv_num
+void	_nc_setenv_num(
+		const char *name, 
+		int	value)
+		{ /* void */ }
+
 /* ./tinfo/home_terminfo.c */
 
 #undef _nc_home_terminfo
@@ -2378,15 +2982,6 @@
 
 /* ./tinfo/init_keytry.c */
 
-#if 0
-
-#include <init_keytry.h>
-
-#undef _nc_tinfo_fkeys
-const struct tinfo_fkeys _nc_tinfo_fkeys[] = {0};
-
-#endif
-
 #undef _nc_init_keytry
 void	_nc_init_keytry(
 		SCREEN	*sp)
@@ -2397,16 +2992,19 @@
 #undef acs_map
 chtype	acs_map[128];
 
+#undef _nc_init_acs_sp
+void	_nc_init_acs_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_init_acs
 void	_nc_init_acs(void)
 		{ /* void */ }
 
 /* ./tinfo/lib_baudrate.c */
 
-#include <termcap.h>
-
 struct speed {
-    int s; 
+    short s; 
     int sp; 
 };
 
@@ -2420,6 +3018,11 @@
 		int	BaudRate)
 		{ return(*(int *)0); }
 
+#undef baudrate_sp
+int	baudrate_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef baudrate
 int	baudrate(void)
 		{ return(*(int *)0); }
@@ -2429,11 +3032,23 @@
 #undef cur_term
 TERMINAL *cur_term;
 
+#undef set_curterm_sp
+TERMINAL *set_curterm_sp(
+		SCREEN	*sp, 
+		TERMINAL *termp)
+		{ return(*(TERMINAL **)0); }
+
 #undef set_curterm
 TERMINAL *set_curterm(
 		TERMINAL *termp)
 		{ return(*(TERMINAL **)0); }
 
+#undef del_curterm_sp
+int	del_curterm_sp(
+		SCREEN	*sp, 
+		TERMINAL *termp)
+		{ return(*(int *)0); }
+
 #undef del_curterm
 int	del_curterm(
 		TERMINAL *termp)
@@ -2456,26 +3071,56 @@
 #undef _nc_prescreen
 NCURSES_PRESCREEN _nc_prescreen;
 
+#undef _nc_screen_of
+SCREEN	*_nc_screen_of(
+		WINDOW	*win)
+		{ return(*(SCREEN **)0); }
+
 /* ./tinfo/lib_has_cap.c */
 
+#undef has_ic_sp
+NCURSES_BOOL has_ic_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef has_ic
 NCURSES_BOOL has_ic(void)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef has_il_sp
+NCURSES_BOOL has_il_sp(
+		SCREEN	*sp)
+		{ return(*(NCURSES_BOOL *)0); }
+
 #undef has_il
 NCURSES_BOOL has_il(void)
 		{ return(*(NCURSES_BOOL *)0); }
 
 /* ./tinfo/lib_kernel.c */
 
+#undef erasechar_sp
+char	erasechar_sp(
+		SCREEN	*sp)
+		{ return(*(char *)0); }
+
 #undef erasechar
 char	erasechar(void)
 		{ return(*(char *)0); }
 
+#undef killchar_sp
+char	killchar_sp(
+		SCREEN	*sp)
+		{ return(*(char *)0); }
+
 #undef killchar
 char	killchar(void)
 		{ return(*(char *)0); }
 
+#undef flushinp_sp
+int	flushinp_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef flushinp
 int	flushinp(void)
 		{ return(*(int *)0); }
@@ -2484,26 +3129,35 @@
 
 struct kn { short offset; int code; };
 
-#undef _nc_keyname
-char	*_nc_keyname(
+#undef keyname_sp
+const char *keyname_sp(
 		SCREEN	*sp, 
 		int	c)
-		{ return(*(char **)0); }
+		{ return(*(const char **)0); }
 
 #undef keyname
-char	*keyname(
+const char *keyname(
 		int	c)
-		{ return(*(char **)0); }
+		{ return(*(const char **)0); }
 
 /* ./tinfo/lib_longname.c */
 
+#undef longname_sp
+char	*longname_sp(
+		SCREEN	*sp)
+		{ return(*(char **)0); }
+
 #undef longname
 char	*longname(void)
 		{ return(*(char **)0); }
 
 /* ./tinfo/lib_napms.c */
 
-#include <time.h>
+#undef napms_sp
+int	napms_sp(
+		SCREEN	*sp, 
+		int	ms)
+		{ return(*(int *)0); }
 
 #undef napms
 int	napms(
@@ -2524,6 +3178,12 @@
 		NCURSES_BOOL flag)
 		{ /* void */ }
 
+#undef halfdelay_sp
+int	halfdelay_sp(
+		SCREEN	*sp, 
+		int	t)
+		{ return(*(int *)0); }
+
 #undef halfdelay
 int	halfdelay(
 		int	t)
@@ -2559,53 +3219,115 @@
 		NCURSES_BOOL flag)
 		{ return(*(int *)0); }
 
+#undef curs_set_sp
+int	curs_set_sp(
+		SCREEN	*sp, 
+		int	vis)
+		{ return(*(int *)0); }
+
 #undef curs_set
 int	curs_set(
 		int	vis)
 		{ return(*(int *)0); }
 
+#undef typeahead_sp
+int	typeahead_sp(
+		SCREEN	*sp, 
+		int	fd)
+		{ return(*(int *)0); }
+
 #undef typeahead
 int	typeahead(
 		int	fd)
 		{ return(*(int *)0); }
 
+#undef has_key_sp
+int	has_key_sp(
+		SCREEN	*sp, 
+		int	keycode)
+		{ return(*(int *)0); }
+
 #undef has_key
 int	has_key(
 		int	keycode)
 		{ return(*(int *)0); }
 
+#undef _nc_putp_flush_sp
+int	_nc_putp_flush_sp(
+		SCREEN	*sp, 
+		const char *name, 
+		const char *value)
+		{ return(*(int *)0); }
+
 #undef _nc_keypad
 int	_nc_keypad(
 		SCREEN	*sp, 
-		NCURSES_BOOL flag)
+		int	flag)
 		{ return(*(int *)0); }
 
 /* ./tinfo/lib_raw.c */
 
+#undef raw_sp
+int	raw_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef raw
 int	raw(void)
 		{ return(*(int *)0); }
 
+#undef cbreak_sp
+int	cbreak_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef cbreak
 int	cbreak(void)
 		{ return(*(int *)0); }
 
+#undef qiflush_sp
+void	qiflush_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef qiflush
 void	qiflush(void)
 		{ /* void */ }
 
+#undef noraw_sp
+int	noraw_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef noraw
 int	noraw(void)
 		{ return(*(int *)0); }
 
+#undef nocbreak_sp
+int	nocbreak_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef nocbreak
 int	nocbreak(void)
 		{ return(*(int *)0); }
 
+#undef noqiflush_sp
+void	noqiflush_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef noqiflush
 void	noqiflush(void)
 		{ /* void */ }
 
+#undef intrflush_sp
+int	intrflush_sp(
+		SCREEN	*sp, 
+		WINDOW	*win, 
+		NCURSES_BOOL flag)
+		{ return(*(int *)0); }
+
 #undef intrflush
 int	intrflush(
 		WINDOW	*win, 
@@ -2614,10 +3336,6 @@
 
 /* ./tinfo/lib_setup.c */
 
-#include <locale.h>
-#include <sys/ioctl.h>
-#include <langinfo.h>
-
 #undef ttytype
 char	ttytype[256];
 #undef LINES
@@ -2627,6 +3345,12 @@
 #undef TABSIZE
 int	TABSIZE;
 
+#undef set_tabsize_sp
+int	set_tabsize_sp(
+		SCREEN	*sp, 
+		int	value)
+		{ return(*(int *)0); }
+
 #undef set_tabsize
 int	set_tabsize(
 		int	value)
@@ -2637,11 +3361,28 @@
 		SCREEN	*sp)
 		{ return(*(int *)0); }
 
+#undef use_env_sp
+void	use_env_sp(
+		SCREEN	*sp, 
+		NCURSES_BOOL f)
+		{ /* void */ }
+
+#undef use_tioctl_sp
+void	use_tioctl_sp(
+		SCREEN	*sp, 
+		NCURSES_BOOL f)
+		{ /* void */ }
+
 #undef use_env
 void	use_env(
 		NCURSES_BOOL f)
 		{ /* void */ }
 
+#undef use_tioctl
+void	use_tioctl(
+		NCURSES_BOOL f)
+		{ /* void */ }
+
 #undef _nc_get_screensize
 void	_nc_get_screensize(
 		SCREEN	*sp, 
@@ -2654,6 +3395,18 @@
 		SCREEN	*sp)
 		{ /* void */ }
 
+#undef _nc_setup_tinfo
+int	_nc_setup_tinfo(
+		const char *const tn, 
+		TERMTYPE *const tp)
+		{ return(*(int *)0); }
+
+#undef _nc_tinfo_cmdch
+void	_nc_tinfo_cmdch(
+		TERMINAL *termp, 
+		int	proto)
+		{ /* void */ }
+
 #undef _nc_get_locale
 char	*_nc_get_locale(void)
 		{ return(*(char **)0); }
@@ -2669,15 +3422,19 @@
 
 #undef _nc_setupterm
 int	_nc_setupterm(
-		char	*tname, 
+		const char *tname, 
 		int	Filedes, 
 		int	*errret, 
-		NCURSES_BOOL reuse)
+		int	reuse)
 		{ return(*(int *)0); }
 
+#undef new_prescr
+SCREEN	*new_prescr(void)
+		{ return(*(SCREEN **)0); }
+
 #undef setupterm
 int	setupterm(
-		char	*tname, 
+		const char *tname, 
 		int	Filedes, 
 		int	*errret)
 		{ return(*(int *)0); }
@@ -2689,36 +3446,61 @@
 #undef BC
 char	*BC;
 
+#undef tgetent_sp
+int	tgetent_sp(
+		SCREEN	*sp, 
+		char	*bufp, 
+		const char *name)
+		{ return(*(int *)0); }
+
 #undef tgetent
 int	tgetent(
 		char	*bufp, 
 		const char *name)
 		{ return(*(int *)0); }
 
-#if 0
-
-#include <capdefaults.c>
-
-#endif
+#undef tgetflag_sp
+int	tgetflag_sp(
+		SCREEN	*sp, 
+		const char *id)
+		{ return(*(int *)0); }
 
 #undef tgetflag
 int	tgetflag(
-		char	*id)
+		const char *id)
+		{ return(*(int *)0); }
+
+#undef tgetnum_sp
+int	tgetnum_sp(
+		SCREEN	*sp, 
+		const char *id)
 		{ return(*(int *)0); }
 
 #undef tgetnum
 int	tgetnum(
-		char	*id)
+		const char *id)
 		{ return(*(int *)0); }
 
+#undef tgetstr_sp
+char	*tgetstr_sp(
+		SCREEN	*sp, 
+		const char *id, 
+		char	**area)
+		{ return(*(char **)0); }
+
 #undef tgetstr
 char	*tgetstr(
-		char	*id, 
+		const char *id, 
 		char	**area)
 		{ return(*(char **)0); }
 
 /* ./tinfo/lib_termname.c */
 
+#undef termname_sp
+char	*termname_sp(
+		SCREEN	*sp)
+		{ return(*(char **)0); }
+
 #undef termname
 char	*termname(void)
 		{ return(*(char **)0); }
@@ -2734,19 +3516,37 @@
 
 /* ./tinfo/lib_ti.c */
 
+#undef tigetflag_sp
+int	tigetflag_sp(
+		SCREEN	*sp, 
+		const char *str)
+		{ return(*(int *)0); }
+
 #undef tigetflag
 int	tigetflag(
-		char	*str)
+		const char *str)
+		{ return(*(int *)0); }
+
+#undef tigetnum_sp
+int	tigetnum_sp(
+		SCREEN	*sp, 
+		const char *str)
 		{ return(*(int *)0); }
 
 #undef tigetnum
 int	tigetnum(
-		char	*str)
+		const char *str)
 		{ return(*(int *)0); }
 
+#undef tigetstr_sp
+char	*tigetstr_sp(
+		SCREEN	*sp, 
+		const char *str)
+		{ return(*(char **)0); }
+
 #undef tigetstr
 char	*tigetstr(
-		char	*str)
+		const char *str)
 		{ return(*(char **)0); }
 
 /* ./tinfo/lib_tparm.c */
@@ -2758,12 +3558,18 @@
 int	_nc_tparm_analyze(
 		const char *string, 
 		char	*p_is_s[9], 
-		int	*popcount)
+		int	*_nc_popcount)
 		{ return(*(int *)0); }
 
 #undef tparm
 char	*tparm(
-		char	*string, 
+		const char *string, 
+		...)
+		{ return(*(char **)0); }
+
+#undef tiparm
+char	*tiparm(
+		const char *string, 
 		...)
 		{ return(*(char **)0); }
 
@@ -2772,7 +3578,7 @@
 #undef PC
 char	PC;
 #undef ospeed
-NCURSES_OSPEED	ospeed;
+short	ospeed;
 #undef _nc_nulls_sent
 int	_nc_nulls_sent;
 
@@ -2781,25 +3587,86 @@
 		SCREEN	*sp)
 		{ /* void */ }
 
+#undef delay_output_sp
+int	delay_output_sp(
+		SCREEN	*sp, 
+		int	ms)
+		{ return(*(int *)0); }
+
 #undef delay_output
 int	delay_output(
 		int	ms)
 		{ return(*(int *)0); }
 
+#undef _nc_flush_sp
+void	_nc_flush_sp(
+		SCREEN	*sp)
+		{ /* void */ }
+
 #undef _nc_flush
 void	_nc_flush(void)
 		{ /* void */ }
 
+#undef _nc_outch_sp
+int	_nc_outch_sp(
+		SCREEN	*sp, 
+		int	ch)
+		{ return(*(int *)0); }
+
 #undef _nc_outch
 int	_nc_outch(
 		int	ch)
 		{ return(*(int *)0); }
 
+#undef _nc_putchar_sp
+int	_nc_putchar_sp(
+		SCREEN	*sp, 
+		int	ch)
+		{ return(*(int *)0); }
+
+#undef _nc_putchar
+int	_nc_putchar(
+		int	ch)
+		{ return(*(int *)0); }
+
+#undef putp_sp
+int	putp_sp(
+		SCREEN	*sp, 
+		const char *string)
+		{ return(*(int *)0); }
+
 #undef putp
 int	putp(
 		const char *string)
 		{ return(*(int *)0); }
 
+#undef _nc_putp_sp
+int	_nc_putp_sp(
+		SCREEN	*sp, 
+		const char *name, 
+		const char *string)
+		{ return(*(int *)0); }
+
+#undef _nc_putp
+int	_nc_putp(
+		const char *name, 
+		const char *string)
+		{ return(*(int *)0); }
+
+#undef tputs_sp
+int	tputs_sp(
+		SCREEN	*sp, 
+		const char *string, 
+		int	affcnt, 
+		NCURSES_OUTC_sp outc)
+		{ return(*(int *)0); }
+
+#undef _nc_outc_wrapper
+int	_nc_outc_wrapper(
+		SCREEN	*sp, 
+		int	c)
+		{ return(*(int *)0); }
+
 #undef tputs
 int	tputs(
 		const char *string, 
@@ -2830,9 +3697,14 @@
 
 #undef _nc_retrace_bool
 NCURSES_BOOL _nc_retrace_bool(
-		NCURSES_BOOL code)
+		int	code)
 		{ return(*(NCURSES_BOOL *)0); }
 
+#undef _nc_retrace_char
+char	_nc_retrace_char(
+		int	code)
+		{ return(*(char *)0); }
+
 #undef _nc_retrace_int
 int	_nc_retrace_int(
 		int	code)
@@ -2854,9 +3726,9 @@
 		{ return(*(const char **)0); }
 
 #undef _nc_retrace_cvoid_ptr
-void	*_nc_retrace_cvoid_ptr(
-		void	*code)
-		{ return(*(void **)0); }
+const void *_nc_retrace_cvoid_ptr(
+		const void *code)
+		{ return(*(const void **)0); }
 
 #undef _nc_retrace_void_ptr
 void	*_nc_retrace_void_ptr(
@@ -2886,6 +3758,11 @@
 		attr_t	newmode)
 		{ return(*(char **)0); }
 
+#undef _nc_retrace_int_attr_t
+int	_nc_retrace_int_attr_t(
+		attr_t	code)
+		{ return(*(int *)0); }
+
 #undef _nc_retrace_attr_t
 attr_t	_nc_retrace_attr_t(
 		attr_t	code)
@@ -2917,7 +3794,7 @@
 
 typedef struct {
     unsigned int val;
-    const char *name;
+    const char name[8];
 } BITNAMES;
 
 #undef _nc_trace_ttymode
@@ -2944,36 +3821,78 @@
 
 /* ./tinfo/lib_ttyflags.c */
 
+#undef _nc_get_tty_mode_sp
+int	_nc_get_tty_mode_sp(
+		SCREEN	*sp, 
+		struct termios *buf)
+		{ return(*(int *)0); }
+
 #undef _nc_get_tty_mode
 int	_nc_get_tty_mode(
 		struct termios *buf)
 		{ return(*(int *)0); }
 
+#undef _nc_set_tty_mode_sp
+int	_nc_set_tty_mode_sp(
+		SCREEN	*sp, 
+		struct termios *buf)
+		{ return(*(int *)0); }
+
 #undef _nc_set_tty_mode
 int	_nc_set_tty_mode(
 		struct termios *buf)
 		{ return(*(int *)0); }
 
+#undef def_shell_mode_sp
+int	def_shell_mode_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef def_shell_mode
 int	def_shell_mode(void)
 		{ return(*(int *)0); }
 
+#undef def_prog_mode_sp
+int	def_prog_mode_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef def_prog_mode
 int	def_prog_mode(void)
 		{ return(*(int *)0); }
 
+#undef reset_prog_mode_sp
+int	reset_prog_mode_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef reset_prog_mode
 int	reset_prog_mode(void)
 		{ return(*(int *)0); }
 
+#undef reset_shell_mode_sp
+int	reset_shell_mode_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef reset_shell_mode
 int	reset_shell_mode(void)
 		{ return(*(int *)0); }
 
+#undef savetty_sp
+int	savetty_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef savetty
 int	savetty(void)
 		{ return(*(int *)0); }
 
+#undef resetty_sp
+int	resetty_sp(
+		SCREEN	*sp)
+		{ return(*(int *)0); }
+
 #undef resetty
 int	resetty(void)
 		{ return(*(int *)0); }
@@ -3005,21 +3924,39 @@
 /* ./names.c */
 
 #undef boolnames
-char	*const boolnames[] = {0};
+const char *const boolnames[] = {0};
 #undef boolfnames
-char	*const boolfnames[] = {0};
+const char *const boolfnames[] = {0};
 #undef numnames
-char	*const numnames[] = {0};
+const char *const numnames[] = {0};
 #undef numfnames
-char	*const numfnames[] = {0};
+const char *const numfnames[] = {0};
 #undef strnames
-char	*const strnames[] = {0};
+const char *const strnames[] = {0};
 #undef strfnames
-char	*const strfnames[] = {0};
+const char *const strfnames[] = {0};
+
+/* ./tinfo/obsolete.c */
+
+#undef _nc_set_buffer_sp
+void	_nc_set_buffer_sp(
+		SCREEN	*sp, 
+		FILE	*ofp, 
+		int	buffered)
+		{ /* void */ }
+
+#undef _nc_set_buffer
+void	_nc_set_buffer(
+		FILE	*ofp, 
+		int	buffered)
+		{ /* void */ }
 
 /* ./tinfo/read_entry.c */
 
-#include <hashed_db.h>
+#undef _nc_init_termtype
+void	_nc_init_termtype(
+		TERMTYPE *const tp)
+		{ /* void */ }
 
 #undef _nc_read_termtype
 int	_nc_read_termtype(
@@ -3043,20 +3980,8 @@
 
 /* ./tinfo/read_termcap.c */
 
-#include <sys/types.h>
-
-#undef _nc_read_termcap_entry
-int	_nc_read_termcap_entry(
-		const char *const tn, 
-		TERMTYPE *const tp)
-		{ return(*(int *)0); }
-
-/* ./tinfo/setbuf.c */
-
-#undef _nc_set_buffer
-void	_nc_set_buffer(
-		FILE	*ofp, 
-		NCURSES_BOOL buffered)
+#undef _nc_read_termcap
+void	_nc_read_termcap(void)
 		{ /* void */ }
 
 /* ./tinfo/strings.c */
@@ -3144,16 +4069,16 @@
 
 /* ./unctrl.c */
 
-#undef _nc_unctrl
-char	*_nc_unctrl(
+#undef unctrl_sp
+const char *unctrl_sp(
 		SCREEN	*sp, 
 		chtype	ch)
-		{ return(*(char **)0); }
+		{ return(*(const char **)0); }
 
 #undef unctrl
-char	*unctrl(
+const char *unctrl(
 		chtype	ch)
-		{ return(*(char **)0); }
+		{ return(*(const char **)0); }
 
 /* ./trace/visbuf.c */
 
@@ -3232,25 +4157,6 @@
 		int const parameterized)
 		{ return(*(char **)0); }
 
-/* ./comp_captab.c */
-
-#include <hashsize.h>
-
-#undef _nc_get_table
-const struct name_table_entry *_nc_get_table(
-		NCURSES_BOOL termcap)
-		{ return(*(const struct name_table_entry **)0); }
-
-#undef _nc_get_hash_table
-const short *_nc_get_hash_table(
-		NCURSES_BOOL termcap)
-		{ return(*(const short **)0); }
-
-#undef _nc_get_alias_table
-const struct alias *_nc_get_alias_table(
-		NCURSES_BOOL termcap)
-		{ return(*(const struct alias **)0); }
-
 /* ./tinfo/comp_expand.c */
 
 #undef _nc_tic_expand
@@ -3260,21 +4166,6 @@
 		int	numbers)
 		{ return(*(char **)0); }
 
-/* ./tinfo/comp_hash.c */
-
-#undef _nc_find_entry
-struct name_table_entry const *_nc_find_entry(
-		const char *string, 
-		const short *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 struct name_table_entry *table)
-		{ return(*(struct name_table_entry const **)0); }
-
 /* ./tinfo/comp_parse.c */
 
 #undef _nc_check_termtype2
@@ -3316,6 +4207,8 @@
 
 #undef _nc_syntax
 int	_nc_syntax;
+#undef _nc_strict_bsd
+int	_nc_strict_bsd;
 #undef _nc_curr_file_pos
 long	_nc_curr_file_pos;
 #undef _nc_comment_start
@@ -3372,15 +4265,15 @@
 		{ return(*(int *)0); }
 
 typedef struct {
-    const char *from;
-    const char *to;
+    const char from[3];
+    const char to[6];
 } assoc;
 
 /* ./tinfo/write_entry.c */
 
 #undef _nc_set_writedir
 void	_nc_set_writedir(
-		char	*dir)
+		const char *dir)
 		{ /* void */ }
 
 #undef _nc_write_entry
@@ -3394,6 +4287,13 @@
 
 /* ./base/define_key.c */
 
+#undef define_key_sp
+int	define_key_sp(
+		SCREEN	*sp, 
+		const char *str, 
+		int	keycode)
+		{ return(*(int *)0); }
+
 #undef define_key
 int	define_key(
 		const char *str, 
@@ -3408,6 +4308,12 @@
 
 /* ./base/key_defined.c */
 
+#undef key_defined_sp
+int	key_defined_sp(
+		SCREEN	*sp, 
+		const char *str)
+		{ return(*(int *)0); }
+
 #undef key_defined
 int	key_defined(
 		const char *str)
@@ -3415,6 +4321,13 @@
 
 /* ./base/keybound.c */
 
+#undef keybound_sp
+char	*keybound_sp(
+		SCREEN	*sp, 
+		int	code, 
+		int	count)
+		{ return(*(char **)0); }
+
 #undef keybound
 char	*keybound(
 		int	code, 
@@ -3423,6 +4336,13 @@
 
 /* ./base/keyok.c */
 
+#undef keyok_sp
+int	keyok_sp(
+		SCREEN	*sp, 
+		int	c, 
+		NCURSES_BOOL flag)
+		{ return(*(int *)0); }
+
 #undef keyok
 int	keyok(
 		int	c, 
